static function releaseAllAccruals($user_id, $effective_date = NULL) { Debug::Text('Release 100% of all accruals!', __FILE__, __LINE__, __METHOD__, 10); if ($user_id == '') { return FALSE; } if ($effective_date == '') { $effective_date = TTDate::getTime(); } Debug::Text('Effective Date: ' . TTDate::getDate('DATE+TIME', $effective_date), __FILE__, __LINE__, __METHOD__, 10); $ulf = new UserListFactory(); $ulf->getById($user_id); if ($ulf->getRecordCount() > 0) { $user_obj = $ulf->getCurrent(); } else { return FALSE; } //Get all PSE acccount accruals $psealf = new PayStubEntryAccountListFactory(); $psealf->getByCompanyIdAndStatusIdAndTypeId($user_obj->getCompany(), 10, 50); if ($psealf->getRecordCount() > 0) { $ulf->StartTransaction(); foreach ($psealf as $psea_obj) { //Get PSE account that affects this accrual. $psealf_tmp = new PayStubEntryAccountListFactory(); $psealf_tmp->getByCompanyIdAndAccrualId($user_obj->getCompany(), $psea_obj->getId()); if ($psealf_tmp->getRecordCount() > 0) { $release_account_id = $psealf_tmp->getCurrent()->getId(); $psaf = new PayStubAmendmentFactory(); $psaf->setStatus(50); //Active $psaf->setType(20); //Percent $psaf->setUser($user_obj->getId()); $psaf->setPayStubEntryNameId($release_account_id); $psaf->setPercentAmount(100); $psaf->setPercentAmountEntryNameId($psea_obj->getId()); $psaf->setEffectiveDate($effective_date); $psaf->setDescription('Release Accrual Balance'); if ($psaf->isValid()) { Debug::Text('Release Accrual Is Valid!!: ', __FILE__, __LINE__, __METHOD__, 10); $psaf->Save(); } } else { Debug::Text('No Release Account for this Accrual!!', __FILE__, __LINE__, __METHOD__, 10); } } //$ulf->FailTransaction(); $ulf->CommitTransaction(); } else { Debug::Text('No Accruals to release...', __FILE__, __LINE__, __METHOD__, 10); } return FALSE; }
function createPayStubAmendments($epoch = NULL) { //Get all recurring pay stub amendments and generate single pay stub amendments if appropriate. if ($epoch == '') { $epoch = TTDate::getTime(); } $ulf = new UserListFactory(); Debug::text('Recurring PS Amendment ID: ' . $this->getId() . ' Frequency: ' . $this->getFrequency(), __FILE__, __LINE__, __METHOD__, 10); $this->StartTransaction(); $tmp_user_ids = $this->getUser(); if ($tmp_user_ids[0] == -1) { $ulf->getByCompanyIdAndStatus($this->getCompany(), 10); foreach ($ulf as $user_obj) { $user_ids[] = $user_obj->getId(); } unset($user_obj); } else { $user_ids = $this->getUser(); } unset($tmp_user_ids); Debug::text('Total User IDs: ' . count($user_ids), __FILE__, __LINE__, __METHOD__, 10); if (is_array($user_ids) and count($user_ids) > 0) { //Make the PS amendment duplicate check start/end date separate //Make the PS amendment effective date separate. switch ($this->getFrequency()) { case 10: //Get all open pay periods $pplf = new PayPeriodListFactory(); //FIXME: Get all non-closed pay periods AFTER the start date. $pplf->getByUserIdListAndNotStatusAndStartDateAndEndDate($user_ids, 20, $this->getStartDate(), $this->getEndDate()); //All non-closed pay periods Debug::text('Found Open Pay Periods: ' . $pplf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10); foreach ($pplf as $pay_period_obj) { Debug::text('Working on Pay Period: ' . $pay_period_obj->getId(), __FILE__, __LINE__, __METHOD__, 10); //If near the end of a pay period, or a pay period is already ended, add PS amendment if //it does not already exist. if ($epoch >= $pay_period_obj->getEndDate() and $this->checkTimeFrame($epoch)) { Debug::text('After end of pay period.', __FILE__, __LINE__, __METHOD__, 10); $psalf = new PayStubAmendmentListFactory(); //Loop through each user of this Pay Period Schedule adding PS amendments if they don't already exist. $pay_period_schedule_users = $pay_period_obj->getPayPeriodScheduleObject()->getUser(); Debug::text(' Pay Period Schedule Users: ' . count($pay_period_schedule_users), __FILE__, __LINE__, __METHOD__, 10); foreach ($pay_period_schedule_users as $user_id) { //Make sure schedule user is in the PS amendment user list and user is active. Debug::text(' Pay Period Schedule User: '******' Recurring PS Amendment Selected Users: ', __FILE__, __LINE__, __METHOD__,10); if ($ulf->getById($user_id)->getCurrent()->getStatus() == 10 and in_array($user_id, $user_ids)) { //Check to see if the amendment was added already. if ($psalf->getByUserIdAndRecurringPayStubAmendmentIdAndStartDateAndEndDate($user_id, $this->getId(), $pay_period_obj->getStartDate(), $pay_period_obj->getEndDate())->getRecordCount() == 0) { //No amendment, good to insert one Debug::text('Inserting Recurring PS Amendment for User: '******'Recurring PS Amendment already inserted for User: '******'Skipping User because they are INACTIVE or are not on the Recurring PS Amendment User List - ID: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10); //continue; } } } else { Debug::text('Not in TimeFrame, not inserting amendments: Epoch: ' . $epoch . ' Pay Period End Date: ' . $pay_period_obj->getEndDate(), __FILE__, __LINE__, __METHOD__, 10); } } break; case 30: //Weekly //Weekly case 40: //Monthly //Monthly case 70: //Annually switch ($this->getFrequency()) { case 30: $trigger_date = TTDate::getDateOfNextDayOfWeek(TTDate::getBeginWeekEpoch($epoch), $this->getStartDate()); $start_date = TTDate::getBeginWeekEpoch($epoch); $end_date = TTDate::getEndWeekEpoch($epoch); break; case 40: $trigger_date = TTDate::getDateOfNextDayOfMonth(TTDate::getBeginMonthEpoch($epoch), $this->getStartDate()); //$monthly_date = TTDate::getDateOfNextDayOfMonth( TTDate::getBeginMonthEpoch($epoch), $this->getStartDate() ); $start_date = TTDate::getBeginMonthEpoch($epoch); $end_date = TTDate::getEndMonthEpoch($epoch); break; case 70: $trigger_date = TTDate::getDateOfNextYear($this->getStartDate()); $start_date = TTDate::getBeginYearEpoch($epoch); $end_date = TTDate::getEndYearEpoch($epoch); break; } Debug::text('Trigger Date: ' . TTDate::getDate('DATE', $trigger_date), __FILE__, __LINE__, __METHOD__, 10); if ($epoch >= $trigger_date and $this->checkTimeFrame($epoch)) { Debug::text('After end of pay period.', __FILE__, __LINE__, __METHOD__, 10); foreach ($user_ids as $user_id) { //Make sure schedule user is in the PS amendment user list and user is active. if ($ulf->getById($user_id)->getCurrent()->getStatus() != 10 and !in_array($user_id, $user_ids)) { Debug::text('Skipping User because they are INACTIVE or are not on the Recurring PS Amendment User List - ID: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10); continue; } $psalf = new PayStubAmendmentListFactory(); if ($psalf->getByUserIdAndRecurringPayStubAmendmentIdAndStartDateAndEndDate($user_id, $this->getId(), $start_date, $end_date)->getRecordCount() == 0) { //No amendment, good to insert one Debug::text('Inserting Recurring PS Amendment for User: '******'Recurring PS Amendment already inserted for User: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10); } } } break; } } //$this->FailTransaction(); $this->CommitTransaction(); return TRUE; }
function addPayStubAmendments() { //Regular FIXED PS amendment $psaf = new PayStubAmendmentFactory(); $psaf->setUser($this->user_id); $psaf->setPayStubEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Bonus')); $psaf->setStatus(50); //Active $psaf->setType(10); $psaf->setRate(10); $psaf->setUnits(10); $psaf->setDescription('Test Fixed PS Amendment'); $psaf->setEffectiveDate($this->pay_period_objs[0]->getEndDate()); $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { $psaf->Save(); } //Regular percent PS amendment $psaf = new PayStubAmendmentFactory(); $psaf->setUser($this->user_id); $psaf->setPayStubEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Other')); $psaf->setStatus(50); //Active $psaf->setType(20); $psaf->setPercentAmount(10); //10% $psaf->setPercentAmountEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Regular Time')); $psaf->setDescription('Test Percent PS Amendment'); $psaf->setEffectiveDate($this->pay_period_objs[0]->getEndDate()); $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { $psaf->Save(); } //Vacation Accrual Release percent PS amendment $psaf = new PayStubAmendmentFactory(); $psaf->setUser($this->user_id); $psaf->setPayStubEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Vacation Accrual Release')); $psaf->setStatus(50); //Active $psaf->setType(20); $psaf->setPercentAmount(50); //50% - Leave some balance to check against. $psaf->setPercentAmountEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 50, 'Vacation Accrual')); $psaf->setDescription('Test Vacation Release Percent PS Amendment'); $psaf->setEffectiveDate($this->pay_period_objs[0]->getEndDate()); $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { $psaf->Save(); } //YTD Adjustment FIXED PS amendment $psaf = new PayStubAmendmentFactory(); $psaf->setUser($this->user_id); $psaf->setPayStubEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Premium 2')); $psaf->setStatus(50); //Active $psaf->setType(10); $psaf->setAmount(1.99); $psaf->setYTDAdjustment(TRUE); $psaf->setDescription('Test YTD PS Amendment'); $psaf->setEffectiveDate($this->pay_period_objs[0]->getEndDate()); $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { $psaf->Save(); } //YTD Adjustment FIXED PS amendment $psaf = new PayStubAmendmentFactory(); $psaf->setUser($this->user_id); $psaf->setPayStubEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Other')); $psaf->setStatus(50); //Active $psaf->setType(10); //$psaf->setAmount( 0.09 ); $psaf->setAmount(1000); //Increase this so Union Dues are closer to the maximum earnings and are calculated to be less. $psaf->setYTDAdjustment(TRUE); $psaf->setDescription('Test YTD (2) PS Amendment'); $psaf->setEffectiveDate($this->pay_period_objs[0]->getEndDate()); $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { $psaf->Save(); } //YTD Adjustment FIXED PS amendment for testing Maximum EI contribution $psaf = new PayStubAmendmentFactory(); $psaf->setUser($this->user_id); $psaf->setPayStubEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 20, 'EI')); $psaf->setStatus(50); //Active $psaf->setType(10); $psaf->setAmount(700.0); $psaf->setYTDAdjustment(TRUE); $psaf->setDescription('Test EI YTD PS Amendment'); $psaf->setEffectiveDate($this->pay_period_objs[0]->getEndDate()); $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { $psaf->Save(); } //YTD Adjustment FIXED PS amendment for testing Maximum CPP contribution $psaf = new PayStubAmendmentFactory(); $psaf->setUser($this->user_id); $psaf->setPayStubEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 20, 'CPP')); $psaf->setStatus(50); //Active $psaf->setType(10); $psaf->setAmount(1900.0); $psaf->setYTDAdjustment(TRUE); $psaf->setDescription('Test CPP YTD PS Amendment'); $psaf->setEffectiveDate($this->pay_period_objs[0]->getEndDate()); $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { $psaf->Save(); } //YTD Adjustment FIXED PS amendment for testing Vacation Accrual totaling issues. $psaf = new PayStubAmendmentFactory(); $psaf->setUser($this->user_id); $psaf->setPayStubEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 50, 'Vacation Accrual')); $psaf->setStatus(50); //Active $psaf->setType(10); $psaf->setAmount(99.01000000000001); $psaf->setYTDAdjustment(TRUE); $psaf->setDescription('Test Vacation Accrual YTD PS Amendment'); $psaf->setEffectiveDate($this->pay_period_objs[0]->getEndDate()); $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { $psaf->Save(); } // // Add EARNING PS amendments for a pay period that has no Punch hours. // Include a regular time adjustment so we can test Wage Base amounts for some tax/deductions. //Regular FIXED PS amendment as regular time. $psaf = new PayStubAmendmentFactory(); $psaf->setUser($this->user_id); $psaf->setPayStubEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Regular Time')); $psaf->setStatus(50); //Active $psaf->setType(10); $psaf->setRate(33.33); $psaf->setUnits(3); $psaf->setDescription('Test Fixed PS Amendment (1)'); $psaf->setEffectiveDate($this->pay_period_objs[1]->getEndDate()); $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { $psaf->Save(); } //Regular FIXED PS amendment as Bonus $psaf = new PayStubAmendmentFactory(); $psaf->setUser($this->user_id); $psaf->setPayStubEntryNameId(CompanyDeductionFactory::getPayStubEntryAccountByCompanyIDAndTypeAndFuzzyName($this->company_id, 10, 'Bonus')); $psaf->setStatus(50); //Active $psaf->setType(10); $psaf->setRate(10); $psaf->setUnits(30); $psaf->setDescription('Test Fixed PS Amendment (2)'); $psaf->setEffectiveDate($this->pay_period_objs[1]->getEndDate()); $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { $psaf->Save(); } return TRUE; }
$psaf->StartTransaction(); $fail_transaction = FALSE; foreach ($pay_stub_amendment_data['filter_user_id'] as $user_id) { $psaf->setId($pay_stub_amendment_data['id']); $psaf->setUser($user_id); $psaf->setPayStubEntryNameId($pay_stub_amendment_data['pay_stub_entry_name_id']); $psaf->setStatus($pay_stub_amendment_data['status_id']); $psaf->setType($pay_stub_amendment_data['type_id']); if ($pay_stub_amendment_data['type_id'] == 10) { $psaf->setRate($pay_stub_amendment_data['rate']); $psaf->setUnits($pay_stub_amendment_data['units']); if (isset($pay_stub_amendment_data['amount'])) { $psaf->setAmount($pay_stub_amendment_data['amount']); } } else { $psaf->setPercentAmount($pay_stub_amendment_data['percent_amount']); $psaf->setPercentAmountEntryNameId($pay_stub_amendment_data['percent_amount_entry_name_id']); } if (isset($pay_stub_amendment_data['ytd_adjustment'])) { $psaf->setYTDAdjustment(TRUE); } else { $psaf->setYTDAdjustment(FALSE); } $psaf->setDescription($pay_stub_amendment_data['description']); $psaf->setEffectiveDate($pay_stub_amendment_data['effective_date']); //Authorize them all for now. $psaf->setAuthorized(TRUE); if ($psaf->isValid()) { if ($psaf->Save() === FALSE) { $fail_transaction = TRUE; break;