function getPayStubObject() { if (is_object($this->pay_stub_obj)) { return $this->pay_stub_obj; } else { $pslf = new PayStubListFactory(); $pslf->getByID($this->getPayStub()); if ($pslf->getRecordCount() > 0) { $this->pay_stub_obj = $pslf->getCurrent(); return $this->pay_stub_obj; } return FALSE; } }
} //var_dump($report_columns); $report_columns = Misc::prependArray($static_columns, $report_columns); $psealf = new PayStubEntryAccountListFactory(); $psealf->getByCompanyId($current_company->getId()); if ($psealf->getRecordCount() > 0) { foreach ($psealf as $psea_obj) { $psea_arr[$psea_obj->getId()] = array('name' => $psea_obj->getName(), 'debit_account' => $psea_obj->getDebitAccount(), 'credit_account' => $psea_obj->getCreditAccount()); } } //var_dump($psea_arr); //Get all pay stubs. $pslf = new PayStubListFactory(); //$pslf->getByUserIdAndCompanyIdAndPayPeriodId( $filter_data['user_ids'], $current_company->getId(), $filter_data['pay_period_ids'] ); $pslf->getSearchByCompanyIdAndArrayCriteria($current_company->getId(), $filter_data); if ($pslf->getRecordCount() > 0) { $ulf = new UserListFactory(); $blf = new BranchListFactory(); $branch_options = $blf->getByCompanyIdArray($current_company->getId()); //Get Branch ID to Branch Code mapping $branch_code_map = array(0 => 0); $blf->getByCompanyId($current_company->getId()); if ($blf->getRecordCount() > 0) { foreach ($blf as $b_obj) { $branch_code_map[$b_obj->getId()] = $b_obj->getManualID(); } } $dlf = new DepartmentListFactory(); $department_options = $dlf->getByCompanyIdArray($current_company->getId()); //Get Department ID to Branch Code mapping $department_code_map = array(0 => 0);
function testEditMultiplePayStub() { //Test all parts of multiple pay stubs that span a year boundary. //Start 6 pay periods from the last one. Should be beginning/end of December, //Its the TRANSACTION date that counts $start_pay_period_id = count($this->pay_period_objs) - 6; Debug::text('Starting Pay Period: ' . TTDate::getDate('DATE+TIME', $this->pay_period_objs[$start_pay_period_id]->getStartDate()), __FILE__, __LINE__, __METHOD__, 10); // // First Pay Stub // //Test UnUsed YTD entries... $pay_stub = new PayStubFactory(); $pay_stub->setUser($this->user_id); $pay_stub->setPayPeriod($this->pay_period_objs[$start_pay_period_id]->getId()); $pay_stub->setStatus('NEW'); $pay_stub->setDefaultDates(); $pay_stub->loadPreviousPayStub(); $pse_accounts = array('regular_time' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Regular Time'), 'over_time_1' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Over Time 1'), 'vacation_accrual_release' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Vacation Accrual Release'), 'federal_income_tax' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 20, 'Federal Income Tax'), 'state_income_tax' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 20, 'State Income Tax'), 'medicare' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 30, 'Medicare'), 'state_unemployment' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 30, 'State Unemployment Ins.'), 'vacation_accrual' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 50, 'Vacation Accrual')); $pay_stub->addEntry($pse_accounts['regular_time'], 100.01); $pay_stub->addEntry($pse_accounts['regular_time'], 10.01); $pay_stub->addEntry($pse_accounts['over_time_1'], 100.02); $pay_stub->addEntry($pse_accounts['vacation_accrual_release'], 1.0); $pay_stub->addEntry($pse_accounts['federal_income_tax'], 50.01); $pay_stub->addEntry($pse_accounts['state_income_tax'], 25.04); $pay_stub->addEntry($pse_accounts['medicare'], 10.01); $pay_stub->addEntry($pse_accounts['state_unemployment'], 15.05); $pay_stub->addEntry($pse_accounts['vacation_accrual'], 5.01); $pay_stub->setEnableProcessEntries(TRUE); $pay_stub->processEntries(); if ($pay_stub->isValid() == TRUE) { Debug::text('Pay Stub is valid, final save.', __FILE__, __LINE__, __METHOD__, 10); $first_pay_stub_id = $pay_stub_id = $pay_stub->Save(); } $pse_arr = $this->getPayStubEntryArray($pay_stub_id); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['amount'], '100.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['ytd_amount'], '110.02'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['amount'], '100.02'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['ytd_amount'], '100.02'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['amount'], '1.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['ytd_amount'], '1.00'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['amount'], '50.01'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['ytd_amount'], '50.01'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['amount'], '25.04'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['ytd_amount'], '25.04'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['ytd_amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['amount'], '15.05'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['ytd_amount'], '15.05'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['amount'], '-1.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['amount'], '5.01'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['ytd_amount'], '4.01'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['amount'], '211.04'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['ytd_amount'], '211.04'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['amount'], '75.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['ytd_amount'], '75.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['amount'], '135.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['ytd_amount'], '135.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['amount'], '25.06'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['ytd_amount'], '25.06'); unset($pse_arr, $pay_stub_id, $pay_stub); // // // //Second Pay Stub // // // $pay_stub = new PayStubFactory(); $pay_stub->setUser($this->user_id); $pay_stub->setPayPeriod($this->pay_period_objs[$start_pay_period_id + 1]->getId()); $pay_stub->setStatus('NEW'); $pay_stub->setDefaultDates(); $pay_stub->loadPreviousPayStub(); $pse_accounts = array('regular_time' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Regular Time'), 'over_time_1' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Over Time 1'), 'vacation_accrual_release' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Vacation Accrual Release'), 'federal_income_tax' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 20, 'Federal Income Tax'), 'state_income_tax' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 20, 'State Income Tax'), 'medicare' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 30, 'Medicare'), 'state_unemployment' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 30, 'State Unemployment Ins.'), 'vacation_accrual' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 50, 'Vacation Accrual')); $pay_stub->addEntry($pse_accounts['regular_time'], 198.01); $pay_stub->addEntry($pse_accounts['regular_time'], 12.01); //$pay_stub->addEntry( $pse_accounts['over_time_1'], 111.02 ); $pay_stub->addEntry($pse_accounts['vacation_accrual_release'], 1.03); $pay_stub->addEntry($pse_accounts['federal_income_tax'], 53.01); $pay_stub->addEntry($pse_accounts['state_income_tax'], 27.04); $pay_stub->addEntry($pse_accounts['medicare'], 13.04); $pay_stub->addEntry($pse_accounts['state_unemployment'], 16.09); $pay_stub->addEntry($pse_accounts['vacation_accrual'], 6.01); $pay_stub->setEnableProcessEntries(TRUE); $pay_stub->processEntries(); if ($pay_stub->isValid() == TRUE) { Debug::text('Pay Stub is valid, final save.', __FILE__, __LINE__, __METHOD__, 10); $second_pay_stub_id = $pay_stub_id = $pay_stub->Save(); } $pse_arr = $this->getPayStubEntryArray($pay_stub_id); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['amount'], '198.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['amount'], '12.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['ytd_amount'], '320.04'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['ytd_amount'], '100.02'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['amount'], '1.03'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['ytd_amount'], '2.03'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['amount'], '53.01'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['ytd_amount'], '103.02'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['amount'], '27.04'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['ytd_amount'], '52.08'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['amount'], '13.04'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['ytd_amount'], '23.05'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['amount'], '16.09'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['ytd_amount'], '31.14'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['amount'], '-1.03'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['amount'], '6.01'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['ytd_amount'], '8.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['amount'], '211.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['ytd_amount'], '422.09'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['amount'], '80.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['ytd_amount'], '155.10'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['amount'], '131.00'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['ytd_amount'], '266.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['amount'], '29.13'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['ytd_amount'], '54.19'); unset($pse_arr, $pay_stub_id, $pay_stub); // // Third Pay Stub // //Test UnUsed YTD entries... $pay_stub = new PayStubFactory(); $pay_stub->setUser($this->user_id); $pay_stub->setPayPeriod($this->pay_period_objs[$start_pay_period_id + 2]->getId()); $pay_stub->setStatus('NEW'); $pay_stub->setDefaultDates(); $pay_stub->loadPreviousPayStub(); $pse_accounts = array('regular_time' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Regular Time'), 'over_time_1' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Over Time 1'), 'vacation_accrual_release' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Vacation Accrual Release'), 'federal_income_tax' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 20, 'Federal Income Tax'), 'state_income_tax' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 20, 'State Income Tax'), 'medicare' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 30, 'Medicare'), 'state_unemployment' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 30, 'State Unemployment Ins.'), 'vacation_accrual' => CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 50, 'Vacation Accrual')); $pay_stub->addEntry($pse_accounts['regular_time'], 100.01); $pay_stub->addEntry($pse_accounts['regular_time'], 10.01); $pay_stub->addEntry($pse_accounts['over_time_1'], 100.02); $pay_stub->addEntry($pse_accounts['vacation_accrual_release'], 1.0); $pay_stub->addEntry($pse_accounts['federal_income_tax'], 50.01); $pay_stub->addEntry($pse_accounts['state_income_tax'], 25.04); $pay_stub->addEntry($pse_accounts['medicare'], 10.01); $pay_stub->addEntry($pse_accounts['state_unemployment'], 15.05); $pay_stub->addEntry($pse_accounts['vacation_accrual'], 5.01); $pay_stub->setEnableProcessEntries(TRUE); $pay_stub->processEntries(); if ($pay_stub->isValid() == TRUE) { $third_pay_stub_id = $pay_stub_id = $pay_stub->Save(); Debug::text('Pay Stub is valid, final save, ID: ' . $pay_stub_id, __FILE__, __LINE__, __METHOD__, 10); } $pse_arr = $this->getPayStubEntryArray($pay_stub_id); // // IN NEW YEAR, YTD amounts are zero'd! // $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['amount'], '100.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['ytd_amount'], '110.02'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['amount'], '100.02'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['ytd_amount'], '100.02'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['amount'], '1.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['ytd_amount'], '1.00'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['amount'], '50.01'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['ytd_amount'], '50.01'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['amount'], '25.04'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['ytd_amount'], '25.04'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['ytd_amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['amount'], '15.05'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['ytd_amount'], '15.05'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['amount'], '-1.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['amount'], '5.01'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['ytd_amount'], '13.00'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['amount'], '211.04'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['ytd_amount'], '211.04'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['amount'], '75.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['ytd_amount'], '75.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['amount'], '135.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['ytd_amount'], '135.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['amount'], '25.06'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['ytd_amount'], '25.06'); unset($pse_arr, $pay_stub_id, $pay_stub); // //Now edit the first pay stub. // $pslf = new PayStubListFactory(); $pay_stub = $pslf->getByID($first_pay_stub_id)->getCurrent(); $pay_stub->loadPreviousPayStub(); $pay_stub->deleteEntries(TRUE); $pay_stub->setEnableLinkedAccruals(FALSE); $pay_stub->addEntry($pse_accounts['regular_time'], 105.01); $pay_stub->addEntry($pse_accounts['regular_time'], 10.01); $pay_stub->addEntry($pse_accounts['over_time_1'], 100.02); $pay_stub->addEntry($pse_accounts['vacation_accrual_release'], 1.0); $pay_stub->addEntry($pse_accounts['federal_income_tax'], 50.01); $pay_stub->addEntry($pse_accounts['state_income_tax'], 25.04); $pay_stub->addEntry($pse_accounts['medicare'], 10.01); $pay_stub->addEntry($pse_accounts['state_unemployment'], 15.05); $pay_stub->addEntry($pse_accounts['vacation_accrual'], -1.0); $pay_stub->addEntry($pse_accounts['vacation_accrual'], 5.01); $pay_stub->setEnableProcessEntries(TRUE); $pay_stub->processEntries(); if ($pay_stub->isValid() == TRUE) { $pay_stub->Save(); //Recalculate all pay stubs after this one. $pslf = new PayStubListFactory(); $pslf->getById($first_pay_stub_id); if ($pslf->getRecordCount() > 0) { $ps_obj = $pslf->getCurrent(); $ps_obj->reCalculateYTD(); } unset($ps_obj); //Debug::text('Pay Stub is valid, final save, ID: '. $pay_stub_id, __FILE__, __LINE__, __METHOD__,10); } $pse_arr = $this->getPayStubEntryArray($first_pay_stub_id); //Debug::Arr($pse_arr, 'Pay Stub Entry Arr: ', __FILE__, __LINE__, __METHOD__,10); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['amount'], '105.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['ytd_amount'], '115.02'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['amount'], '100.02'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['ytd_amount'], '100.02'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['amount'], '1.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['ytd_amount'], '1.00'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['amount'], '50.01'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['ytd_amount'], '50.01'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['amount'], '25.04'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['ytd_amount'], '25.04'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['ytd_amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['amount'], '15.05'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['ytd_amount'], '15.05'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['amount'], '-1.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['amount'], '5.01'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['ytd_amount'], '4.01'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['amount'], '216.04'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['ytd_amount'], '216.04'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['amount'], '75.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['ytd_amount'], '75.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['amount'], '140.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['ytd_amount'], '140.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['amount'], '25.06'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['ytd_amount'], '25.06'); unset($pse_arr, $pay_stub_id, $pay_stub); // // Confirm YTD values in second pay stub are correct // Debug::Text('First Pay Stub ID: ' . $first_pay_stub_id . ' Second Pay Stub ID: ' . $second_pay_stub_id, __FILE__, __LINE__, __METHOD__, 10); $pse_arr = $this->getPayStubEntryArray($second_pay_stub_id); //Debug::Arr($pse_arr, 'Second Pay Stub Entry Arr: ', __FILE__, __LINE__, __METHOD__,10); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['amount'], '198.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['amount'], '12.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['ytd_amount'], '325.04'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['ytd_amount'], '100.02'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['amount'], '1.03'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['ytd_amount'], '2.03'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['amount'], '53.01'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['ytd_amount'], '103.02'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['amount'], '27.04'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['ytd_amount'], '52.08'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['amount'], '13.04'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['ytd_amount'], '23.05'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['amount'], '16.09'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['ytd_amount'], '31.14'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['amount'], '-1.03'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['amount'], '6.01'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['ytd_amount'], '8.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['amount'], '211.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['ytd_amount'], '427.09'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['amount'], '80.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['ytd_amount'], '155.10'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['amount'], '131.00'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['ytd_amount'], '271.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['amount'], '29.13'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['ytd_amount'], '54.19'); unset($pse_arr, $pay_stub_id, $pay_stub); // // Confirm YTD values in third pay stub are correct // $pse_arr = $this->getPayStubEntryArray($third_pay_stub_id); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['amount'], '100.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['regular_time']][1]['ytd_amount'], '110.02'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['amount'], '100.02'); $this->assertEquals($pse_arr[$pse_accounts['over_time_1']][0]['ytd_amount'], '100.02'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['amount'], '1.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual_release']][0]['ytd_amount'], '1.00'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['amount'], '50.01'); $this->assertEquals($pse_arr[$pse_accounts['federal_income_tax']][0]['ytd_amount'], '50.01'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['amount'], '25.04'); $this->assertEquals($pse_arr[$pse_accounts['state_income_tax']][0]['ytd_amount'], '25.04'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['medicare']][0]['ytd_amount'], '10.01'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['amount'], '15.05'); $this->assertEquals($pse_arr[$pse_accounts['state_unemployment']][0]['ytd_amount'], '15.05'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['amount'], '-1.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][0]['ytd_amount'], '0.00'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['amount'], '5.01'); $this->assertEquals($pse_arr[$pse_accounts['vacation_accrual']][1]['ytd_amount'], '13.00'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['amount'], '211.04'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_gross']][0]['ytd_amount'], '211.04'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['amount'], '75.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['total_deductions']][0]['ytd_amount'], '75.05'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['amount'], '135.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['net_pay']][0]['ytd_amount'], '135.99'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['amount'], '25.06'); $this->assertEquals($pse_arr[$this->pay_stub_account_link_arr['employer_contribution']][0]['ytd_amount'], '25.06'); unset($pse_arr, $pay_stub_id, $pay_stub); return TRUE; }
function getPayStubId() { //Find which pay period this effective date belongs too $pplf = new PayPeriodListFactory(); $pplf->getByUserIdAndEndDate($this->getUser(), $this->getEffectiveDate()); if ($pplf->getRecordCount() > 0) { $pp_obj = $pplf->getCurrent(); Debug::text('Found Pay Period ID: ' . $pp_obj->getId(), __FILE__, __LINE__, __METHOD__, 10); //Percent PS amendments can't work on advances. $pslf = new PayStubListFactory(); $pslf->getByUserIdAndPayPeriodIdAndAdvance($this->getUser(), $pp_obj->getId(), FALSE); if ($pslf->getRecordCount() > 0) { $ps_obj = $pslf->getCurrent(); Debug::text('Found Pay Stub for this effective date: ' . $ps_obj->getId(), __FILE__, __LINE__, __METHOD__, 10); return $ps_obj->getId(); } } return FALSE; }
function loadPreviousPayStub() { if ($this->getUser() == FALSE or $this->getStartDate() == FALSE) { return FALSE; } //Grab last pay stub so we can use it for YTD calculations on this pay stub. $pslf = new PayStubListFactory(); $pslf->getLastPayStubByUserIdAndStartDate($this->getUser(), $this->getStartDate()); if ($pslf->getRecordCount() > 0) { $ps_obj = $pslf->getCurrent(); Debug::text('Loading Data from Pay Stub ID: ' . $ps_obj->getId(), __FILE__, __LINE__, __METHOD__, 10); $retarr = array('id' => $ps_obj->getId(), 'start_date' => $ps_obj->getStartDate(), 'end_date' => $ps_obj->getEndDate(), 'transaction_date' => $ps_obj->getTransactionDate(), 'entries' => NULL); // //If previous pay stub is in a different year, only carry forward the accrual accounts. // $new_year = FALSE; if (TTDate::getYear($this->getTransactionDate()) != TTDate::getYear($ps_obj->getTransactionDate())) { Debug::text('Pay Stub Years dont match!...', __FILE__, __LINE__, __METHOD__, 10); $new_year = TRUE; } //Get pay stub entries $pself = new PayStubEntryListFactory(); $pself->getByPayStubId($ps_obj->getID()); if ($pself->getRecordCount() > 0) { foreach ($pself as $pse_obj) { //Get PSE account type, group by that. $psea_arr = $this->getPayStubEntryAccountArray($pse_obj->getPayStubEntryNameId()); if (is_array($psea_arr)) { $type_id = $psea_arr['type_id']; } else { $type_id = NULL; } //If we're just starting a new year, only carry over //accrual balances, reset all YTD entries. if ($new_year == FALSE or $type_id == 50) { $pse_arr[] = array('id' => $pse_obj->getId(), 'pay_stub_entry_type_id' => $type_id, 'pay_stub_entry_account_id' => $pse_obj->getPayStubEntryNameId(), 'pay_stub_amendment_id' => $pse_obj->getPayStubAmendment(), 'rate' => $pse_obj->getRate(), 'units' => $pse_obj->getUnits(), 'amount' => $pse_obj->getAmount(), 'ytd_units' => $pse_obj->getYTDUnits(), 'ytd_amount' => $pse_obj->getYTDAmount()); } unset($type_id, $psea_obj); } if (isset($pse_arr)) { $retarr['entries'] = $pse_arr; $this->tmp_data['previous_pay_stub'] = $retarr; return TRUE; } } } Debug::text('Returning FALSE...', __FILE__, __LINE__, __METHOD__, 10); return FALSE; }
//Must be false, because if it isn't checked it won't be set. $filter_data['hide_employer_rows'] = FALSE; } $output = $pslf->getPayStub($pslf, (bool) $filter_data['hide_employer_rows']); if (Debug::getVerbosity() < 11) { Misc::FileDownloadHeader('pay_stub.pdf', 'application/pdf', strlen($output)); echo $output; exit; } } } elseif ($action == 'export' and $filter_data['export_type'] != 'csv') { Debug::Text('Export NON-CSV', __FILE__, __LINE__, __METHOD__, 10); $pslf = new PayStubListFactory(); //$pslf->getByUserIdAndCompanyIdAndPayPeriodId( $filter_data['user_ids'], $current_company->getId(), $filter_data['pay_period_ids']); $pslf->getSearchByCompanyIdAndArrayCriteria($current_company->getId(), $filter_data); if ($pslf->getRecordCount() > 0 and strlen($filter_data['export_type']) >= 3) { $output = $pslf->exportPayStub($pslf, $filter_data['export_type']); if (Debug::getVerbosity() < 11) { if (stristr($filter_data['export_type'], 'cheque')) { Misc::FileDownloadHeader('checks_' . str_replace(array('/', ',', ' '), '_', TTDate::getDate('DATE', time())) . '.pdf', 'application/pdf', strlen($output)); } else { Misc::FileDownloadHeader('eft_' . str_replace(array('/', ',', ' '), '_', TTDate::getDate('DATE', time())) . '.txt', 'application/text', strlen($output)); } if ($output != FALSE) { echo $output; } else { echo TTi18n::gettext('No data to export.') . "<br>\n"; } exit; } } else {
function getPayStub($pay_period_id = FALSE) { if ($pay_period_id == FALSE) { $pay_period_id = $this->pay_period_objs[0]->getId(); } $pslf = new PayStubListFactory(); $pslf->getByUserIdAndPayPeriodId($this->user_id, $pay_period_id); if ($pslf->getRecordCount() > 0) { return $pslf->getCurrent()->getId(); } return FALSE; }
unset($ugsf); } } break; case 'recalculate_paystub_ytd': //Debug::setVerbosity(11); Debug::Text('Recalculating Pay Stub YTDs!', __FILE__, __LINE__, __METHOD__, 10); Debug::Text('Pay Stub ID: ' . $pay_stub_ids, __FILE__, __LINE__, __METHOD__, 10); $init_progress_bar = TRUE; //Just need the pay_stub_id of the modified pay stub. $pslf = new PayStubListFactory(); $pslf->StartTransaction(); if (is_array($pay_stub_ids)) { foreach ($pay_stub_ids as $pay_stub_id) { $pslf->getByIdAndCompanyIdAndIgnoreDeleted($pay_stub_id, $current_company->getId()); if ($pslf->getRecordCount() > 0) { $main_ps_obj = $pslf->getCurrent(); //Get all pay stubs NEWER then this one. $pslf->getByUserIdAndStartDateAndEndDate($main_ps_obj->getUser(), $main_ps_obj->getTransactionDate(), TTDate::getEndYearEpoch($main_ps_obj->getTransactionDate())); $total_pay_stubs = $pslf->getRecordCount(); if ($total_pay_stubs > 0) { if ($init_progress_bar == TRUE) { InitProgressBar(); $init_progress_bar = FALSE; } $progress_bar->setValue(0); $progress_bar->display(); $x = 1; foreach ($pslf as $ps_obj) { Debug::Text('ReCalculating Pay Stub ID: ' . $ps_obj->getId(), __FILE__, __LINE__, __METHOD__, 10); $ps_obj->reCalculatePayStubYTD($ps_obj->getId());
function Validate() { if ($this->getDeleted() == TRUE) { //CHeck to make sure currency isnt in-use by paystubs/employees/wages, if so, don't delete. $invalid = FALSE; $pslf = new PayStubListFactory(); $pslf->getByCurrencyId($this->getId()); if ($pslf->getRecordCount() > 0) { $invalid = TRUE; } if ($invalid == FALSE) { $ulf = new UserListFactory(); $ulf->getByCurrencyId($this->getId()); if ($ulf->getRecordCount() > 0) { $invalid = TRUE; } } if ($invalid == TRUE) { $this->Validator->isTRUE('in_use', FALSE, TTi18n::gettext('This currency is in use')); } } return TRUE; }
function calculate($epoch = NULL) { if ($this->getUserObject() == FALSE or $this->getUserObject()->getStatus() !== 10) { return FALSE; } $generic_queue_status_label = $this->getUserObject()->getFullName(TRUE) . ' - ' . TTi18n::gettext('Pay Stub'); if ($epoch == NULL or $epoch == '') { $epoch = TTDate::getTime(); } if ($this->getPayPeriodObject() == FALSE) { return FALSE; } Debug::text('bbUser Id: ' . $this->getUser() . ' Pay Period End Date: ' . TTDate::getDate('DATE+TIME', $this->getPayPeriodObject()->getEndDate()), __FILE__, __LINE__, __METHOD__, 10); $pay_stub = new PayStubFactory(); $pay_stub->StartTransaction(); $old_pay_stub_id = NULL; if ($this->getEnableCorrection() == TRUE) { Debug::text('Correction Enabled!', __FILE__, __LINE__, __METHOD__, 10); $pay_stub->setTemp(TRUE); //Check for current pay stub ID so we can compare against it. $pslf = new PayStubListFactory(); $pslf->getByUserIdAndPayPeriodId($this->getUser(), $this->getPayPeriod()); if ($pslf->getRecordCount() > 0) { $old_pay_stub_id = $pslf->getCurrent()->getId(); Debug::text('Comparing Against Pay Stub ID: ' . $old_pay_stub_id, __FILE__, __LINE__, __METHOD__, 10); } } $pay_stub->setUser($this->getUser()); $pay_stub->setPayPeriod($this->getPayPeriod()); $pay_stub->setCurrency($this->getUserObject()->getCurrency()); $pay_stub->setStatus('NEW'); //Use User Termination Date instead of ROE. if ($this->getUserObject()->getTerminationDate() != '' and $this->getUserObject()->getTerminationDate() >= $this->getPayPeriodObject()->getStartDate() and $this->getUserObject()->getTerminationDate() <= $this->getPayPeriodObject()->getEndDate()) { Debug::text('User has been terminated in this pay period!', __FILE__, __LINE__, __METHOD__, 10); $is_terminated = TRUE; } else { $is_terminated = FALSE; } if ($is_terminated == TRUE) { Debug::text('User is Terminated, assuming final pay, setting End Date to terminated date: ' . TTDate::getDate('DATE+TIME', $this->getUserObject()->getTerminationDate()), __FILE__, __LINE__, __METHOD__, 10); $pay_stub->setStartDate($pay_stub->getPayPeriodObject()->getStartDate()); $pay_stub->setEndDate($this->getUserObject()->getTerminationDate()); //Use the PS generation date instead of terminated date... //Unlikely they would pay someone before the pay stub is generated. //Perhaps still use the pay period transaction date for this too? //Anything we set won't be correct for everyone. Maybe a later date is better though? //Perhaps add to the user factory under Termination Date a: "Final Transaction Date" for this purpose? //Use the end of the current date for the transaction date, as if the employee is terminated //on the same day they are generating the pay stub, the transaction date could be before the end date //as the end date is at 11:59PM $pay_stub->setTransactionDate(TTDate::getEndDayEpoch(TTDate::getTime())); } else { Debug::text('User Termination Date is NOT set, assuming normal pay.', __FILE__, __LINE__, __METHOD__, 10); $pay_stub->setDefaultDates(); } //This must go after setting advance if ($this->getEnableCorrection() == FALSE and $pay_stub->IsUniquePayStub() == FALSE) { Debug::text('Pay Stub already exists', __FILE__, __LINE__, __METHOD__, 10); $this->CommitTransaction(); UserGenericStatusFactory::queueGenericStatus($generic_queue_status_label, 20, TTi18n::gettext('Pay Stub for this employee already exists, skipping...'), NULL); return FALSE; } if ($pay_stub->isValid() == TRUE) { $pay_stub->Save(FALSE); $pay_stub->setStatus('Open'); } else { Debug::text('Pay Stub isValid failed!', __FILE__, __LINE__, __METHOD__, 10); UserGenericStatusFactory::queueGenericStatus($generic_queue_status_label, 10, $pay_stub->Validator->getTextErrors(), NULL); $this->FailTransaction(); $this->CommitTransaction(); return FALSE; } $pay_stub->loadPreviousPayStub(); $user_date_total_arr = $this->getWageObject()->getUserDateTotalArray(); if (isset($user_date_total_arr['entries']) and is_array($user_date_total_arr['entries'])) { foreach ($user_date_total_arr['entries'] as $udt_arr) { //Allow negative amounts so flat rate premium policies can reduce an employees wage if need be. if ($udt_arr['amount'] != 0) { Debug::text('Adding Pay Stub Entry: ' . $udt_arr['pay_stub_entry'] . ' Amount: ' . $udt_arr['amount'], __FILE__, __LINE__, __METHOD__, 10); $pay_stub->addEntry($udt_arr['pay_stub_entry'], $udt_arr['amount'], TTDate::getHours($udt_arr['total_time']), $udt_arr['rate']); } else { Debug::text('NOT Adding ($0 amount) Pay Stub Entry: ' . $udt_arr['pay_stub_entry'] . ' Amount: ' . $udt_arr['amount'], __FILE__, __LINE__, __METHOD__, 10); } } } else { //No Earnings, CHECK FOR PS AMENDMENTS next for earnings. Debug::text('NO TimeSheet EARNINGS ON PAY STUB... Checking for PS amendments', __FILE__, __LINE__, __METHOD__, 10); } //Get all PS amendments and Tax / Deductions so we can determine the proper order to calculate them in. $psalf = new PayStubAmendmentListFactory(); $psalf->getByUserIdAndAuthorizedAndStartDateAndEndDate($this->getUser(), TRUE, $this->getPayPeriodObject()->getStartDate(), $this->getPayPeriodObject()->getEndDate()); $udlf = new UserDeductionListFactory(); $udlf->getByCompanyIdAndUserId($this->getUserObject()->getCompany(), $this->getUserObject()->getId()); $deduction_order_arr = $this->getOrderedDeductionAndPSAmendment($udlf, $psalf); if (is_array($deduction_order_arr) and count($deduction_order_arr) > 0) { foreach ($deduction_order_arr as $calculation_order => $data_arr) { Debug::text('Found PS Amendment/Deduction: Type: ' . $data_arr['type'] . ' Name: ' . $data_arr['name'] . ' Order: ' . $calculation_order, __FILE__, __LINE__, __METHOD__, 10); if (isset($data_arr['obj']) and is_object($data_arr['obj'])) { if ($data_arr['type'] == 'UserDeductionListFactory') { $ud_obj = $data_arr['obj']; //Determine if this deduction is valid based on start/end dates. //Determine if this deduction is valid based on min/max length of service. if ($ud_obj->getCompanyDeductionObject()->isActiveDate($pay_stub->getPayPeriodObject()->getEndDate()) == TRUE and $ud_obj->getCompanyDeductionObject()->isActiveLengthOfService($this->getUserObject(), $pay_stub->getPayPeriodObject()->getEndDate()) == TRUE) { $amount = $ud_obj->getDeductionAmount($this->getUserObject()->getId(), $pay_stub, $this->getPayPeriodObject()); Debug::text('User Deduction: ' . $ud_obj->getCompanyDeductionObject()->getName() . ' Amount: ' . $amount . ' Calculation Order: ' . $ud_obj->getCompanyDeductionObject()->getCalculationOrder(), __FILE__, __LINE__, __METHOD__, 10); //Allow negative amounts, so they can reduce previously calculated deductions or something. if (isset($amount) and $amount != 0) { $pay_stub->addEntry($ud_obj->getCompanyDeductionObject()->getPayStubEntryAccount(), $amount); } else { Debug::text('Amount is 0, skipping...', __FILE__, __LINE__, __METHOD__, 10); } } unset($amount, $ud_obj); } elseif ($data_arr['type'] == 'PayStubAmendmentListFactory') { $psa_obj = $data_arr['obj']; Debug::text('Found Pay Stub Amendment: ID: ' . $psa_obj->getID() . ' Entry Name ID: ' . $psa_obj->getPayStubEntryNameId() . ' Type: ' . $psa_obj->getType(), __FILE__, __LINE__, __METHOD__, 10); $amount = $psa_obj->getCalculatedAmount($pay_stub); if (isset($amount) and $amount != 0) { Debug::text('Pay Stub Amendment Amount: ' . $amount, __FILE__, __LINE__, __METHOD__, 10); $pay_stub->addEntry($psa_obj->getPayStubEntryNameId(), $amount, $psa_obj->getUnits(), $psa_obj->getRate(), $psa_obj->getDescription(), $psa_obj->getID(), NULL, NULL, $psa_obj->getYTDAdjustment()); //Keep in mind this causes pay stubs to be re-generated every time, as this modifies the updated time //to slightly more then the pay stub creation time. $psa_obj->setStatus('IN USE'); $psa_obj->Save(); } else { Debug::text('bPay Stub Amendment Amount is not set...', __FILE__, __LINE__, __METHOD__, 10); } unset($amount, $psa_obj); } } } } unset($deduction_order_arr, $calculation_order, $data_arr); $pay_stub_id = $pay_stub->getId(); $pay_stub->setEnableProcessEntries(TRUE); $pay_stub->processEntries(); if ($pay_stub->isValid() == TRUE) { Debug::text('Pay Stub is valid, final save.', __FILE__, __LINE__, __METHOD__, 10); $pay_stub->Save(); if ($this->getEnableCorrection() == TRUE) { if (isset($old_pay_stub_id)) { Debug::text('bCorrection Enabled - Doing Comparison here', __FILE__, __LINE__, __METHOD__, 10); PayStubFactory::CalcDifferences($pay_stub_id, $old_pay_stub_id); } //Delete newly created temp paystub. //This used to be in the above IF block that depended on $old_pay_stub_id //being set, however in cases where the old pay stub didn't exist //TimeTrex wouldn't delete these temporary pay stubs. //Moving this code outside that IF statement so it only depends on EnableCorrection() //to be TRUE should fix that issue. $pslf = new PayStubListFactory(); $pslf->getById($pay_stub_id); if ($pslf->getRecordCount() > 0) { $tmp_ps_obj = $pslf->getCurrent(); $tmp_ps_obj->setDeleted(TRUE); $tmp_ps_obj->Save(); unset($tmp_ps_obj); } } $pay_stub->CommitTransaction(); UserGenericStatusFactory::queueGenericStatus($generic_queue_status_label, 30, NULL, NULL); return TRUE; } Debug::text('Pay Stub is NOT valid returning FALSE', __FILE__, __LINE__, __METHOD__, 10); UserGenericStatusFactory::queueGenericStatus($generic_queue_status_label, 10, $pay_stub->Validator->getTextErrors(), NULL); $pay_stub->FailTransaction(); //Reduce transaction count by one. //$pay_stub->FailTransaction(); //Reduce transaction count by one. $pay_stub->CommitTransaction(); return FALSE; }