function createPayStubAmendments($epoch = NULL) { //Get all recurring pay stub amendments and generate single pay stub amendments if appropriate. if ($epoch == '') { $epoch = TTDate::getTime(); } $ulf = TTnew('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 = TTnew('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. Start Date: ' . TTDate::getDate('DATE+TIME', $pay_period_obj->getStartDate()) . ' End Date: ' . TTDate::getDate('DATE+TIME', $pay_period_obj->getEndDate()), __FILE__, __LINE__, __METHOD__, 10); $psalf = TTnew('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: '******'PayStubAmendmentFactory'); $psaf->setUser($user_id); $psaf->setStatus(50); $psaf->setType($this->getType()); $psaf->setRecurringPayStubAmendmentId($this->getId()); $psaf->setPayStubEntryNameId($this->getPayStubEntryNameId()); if ($this->getType() == 10) { $psaf->setRate($this->getRate()); $psaf->setUnits($this->getUnits()); $psaf->setAmount($this->getAmount()); } else { $psaf->setPercentAmount($this->getPercentAmount()); $psaf->setPercentAmountEntryNameID($this->getPercentAmountEntryNameId()); } $psaf->setDescription($this->getPayStubAmendmentDescription()); $psaf->setEffectiveDate(TTDate::getBeginDayEpoch($pay_period_obj->getEndDate())); if ($psaf->isValid()) { $psaf->Save(); } } else { //Amendment already inserted! Debug::text('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(), $epoch); //$start_date = TTDate::getBeginYearEpoch($epoch); //$end_date = TTDate::getEndYearEpoch($epoch); $start_date = TTDate::getBeginDayEpoch($epoch - 86400 * 365); $end_date = TTDate::getEndDayEpoch($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('Within timeframe... Start Date: ' . TTDate::getDate('DATE+TIME', $start_date) . ' End Date: ' . TTDate::getDate('DATE+TIME', $end_date), __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 = TTnew('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: '******'PayStubAmendmentFactory'); $psaf->setUser($user_id); $psaf->setStatus(50); $psaf->setType($this->getType()); $psaf->setRecurringPayStubAmendmentId($this->getId()); $psaf->setPayStubEntryNameId($this->getPayStubEntryNameId()); if ($this->getType() == 10) { $psaf->setRate($this->getRate()); $psaf->setUnits($this->getUnits()); $psaf->setAmount($this->getAmount()); } else { $psaf->setPercentAmount($this->getPercentAmount()); $psaf->setPercentAmountEntryNameID($this->getPercentAmountEntryNameId()); } $psaf->setDescription($this->getDescription()); $psaf->setEffectiveDate(TTDate::getBeginDayEpoch($trigger_date)); if ($psaf->isValid()) { $psaf->Save(); } } else { //Amendment already inserted! Debug::text('Recurring PS Amendment already inserted for User: ' . $user_id, __FILE__, __LINE__, __METHOD__, 10); } } } break; } } //$this->FailTransaction(); $this->CommitTransaction(); return TRUE; }
function test_getDayOfNextWeek() { Debug::text('Testing Date Format: Y-m-d', __FILE__, __LINE__, __METHOD__, 10); TTDate::setDateFormat('Y-m-d'); TTDate::setTimeZone('PST'); TTDate::setTimeFormat('g:i A'); $this->assertEquals(TTDate::getDateOfNextDayOfWeek(strtotime('29-Dec-06'), strtotime('27-Dec-06')), strtotime('03-Jan-07')); $this->assertEquals(TTDate::getDateOfNextDayOfWeek(strtotime('25-Dec-06'), strtotime('28-Dec-06')), strtotime('28-Dec-06')); $this->assertEquals(TTDate::getDateOfNextDayOfWeek(strtotime('31-Dec-06'), strtotime('25-Dec-06')), strtotime('01-Jan-07')); }