function getAmountSumByUserIdAndEntryNameIdAndDate($id, $entry_name_id, $date = NULL, $exclude_id = NULL, $where = NULL, $order = NULL)
    {
        if ($id == '') {
            return FALSE;
        }
        if ($entry_name_id == '') {
            return FALSE;
        }
        if ($date == '') {
            $date = TTDate::getTime();
        }
        $pplf = new PayPeriodListFactory();
        $pslf = new PayStubListFactory();
        $psalf = new PayStubAmendmentListFactory();
        $ph = array('date' => $this->db->BindTimeStamp($date), 'user_id' => $id, 'entry_name_id' => $entry_name_id, 'exclude_id' => (int) $exclude_id, 'user_id2' => $id, 'entry_name_id2' => $entry_name_id, 'date2' => $date);
        $query = '
					select 	sum(amount) as amount, sum(units) as units
					from (
						select 	sum(amount) as amount, sum(units) as units
						from	' . $this->getTable() . ' as a,
								' . $pslf->getTable() . ' as b
						where	a.pay_stub_id = b.id
							AND b.pay_period_id in (select id from ' . $pplf->getTable() . ' as y
														where y.pay_period_schedule_id = ( select pay_period_schedule_id from ' . $pplf->getTable() . ' as z where z.id = b.pay_period_id ) AND y.start_date < ? AND y.deleted=0)
							AND b.user_id = ?
							AND	a.pay_stub_entry_name_id = ?
							AND a.id != ?
							AND a.deleted = 0
							AND b.deleted=0
						UNION
						select sum(amount) as amount, sum(units) as units
						from ' . $psalf->getTable() . ' as m
						where m.user_id = ?
							AND m.ytd_adjustment = 1
							AND	m.pay_stub_entry_name_id = ?
							AND m.effective_date < ?
							AND m.deleted=0
						) as tmp_table
				';
        $query .= $this->getWhereSQL($where);
        $query .= $this->getSortSQL($order);
        $row = $this->db->GetRow($query, $ph);
        if ($row['amount'] === NULL) {
            $row['amount'] = 0;
        }
        if ($row['units'] === NULL) {
            $row['units'] = 0;
        }
        Debug::Arr($ph, 'Place Holders ', __FILE__, __LINE__, __METHOD__, 10);
        Debug::text('Over All Sum for ' . $entry_name_id . ': Amount ' . $row['amount'] . ' Units: ' . $row['units'], __FILE__, __LINE__, __METHOD__, 10);
        return $row;
    }
 function getAmountSumByUserIdAndTypeIdAndAuthorizedAndStartDateAndEndDate($user_id, $type_id, $authorized, $start_date, $end_date, $where = NULL, $order = NULL)
 {
     $psalf = new PayStubAmendmentListFactory();
     $psalf->getByUserIdAndTypeIdAndAuthorizedAndStartDateAndEndDate($user_id, $type_id, $authorized, $start_date, $end_date, $where, $order);
     if ($psalf->getRecordCount() > 0) {
         $sum = 0;
         Debug::text('Record Count: ' . $psalf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10);
         foreach ($psalf as $psa_obj) {
             $amount = $psa_obj->getCalculatedAmount();
             Debug::text('PS Amendment Amount: ' . $amount, __FILE__, __LINE__, __METHOD__, 10);
             $sum += $amount;
         }
         return $sum;
     }
     Debug::text('No PS Amendments found...', __FILE__, __LINE__, __METHOD__, 10);
     return FALSE;
 }
 function handlePayStubAmendmentStatuses()
 {
     //Mark all PS amendments as 'PAID' if this status is paid.
     //Mark as NEW if the PS is deleted?
     if ($this->getStatus() == 40) {
         $ps_amendment_status_id = 55;
         //PAID
     } else {
         $ps_amendment_status_id = 52;
         //INUSE
     }
     //Loop through each entry in current pay stub, if they have
     //a PS amendment ID assigned to them, change the status.
     if (is_array($this->tmp_data['current_pay_stub'])) {
         foreach ($this->tmp_data['current_pay_stub'] as $entry_arr) {
             if (isset($entry_arr['pay_stub_amendment_id']) and $entry_arr['pay_stub_amendment_id'] != '') {
                 Debug::Text('aFound PS Amendments to change status on...', __FILE__, __LINE__, __METHOD__, 10);
                 $ps_amendment_ids[] = $entry_arr['pay_stub_amendment_id'];
             }
         }
         unset($entry_arr);
     } elseif ($this->getStatus() != 10) {
         //Instead of loading the current pay stub entries, just run a query instead.
         $pself = new PayStubEntryListFactory();
         $pself->getByPayStubId($this->getId());
         foreach ($pself as $pay_stub_entry_obj) {
             if ($pay_stub_entry_obj->getPayStubAmendment() != FALSE) {
                 Debug::Text('bFound PS Amendments to change status on...', __FILE__, __LINE__, __METHOD__, 10);
                 $ps_amendment_ids[] = $pay_stub_entry_obj->getPayStubAmendment();
             }
         }
     }
     if (isset($ps_amendment_ids) and is_array($ps_amendment_ids)) {
         Debug::Text('cFound PS Amendments to change status on...', __FILE__, __LINE__, __METHOD__, 10);
         foreach ($ps_amendment_ids as $ps_amendment_id) {
             //Set PS amendment status to match Pay stub.
             $psalf = new PayStubAmendmentListFactory();
             $psalf->getById($ps_amendment_id);
             if ($psalf->getRecordCount() == 1) {
                 Debug::Text('Changing Status of PS Amendment: ' . $ps_amendment_id, __FILE__, __LINE__, __METHOD__, 10);
                 $ps_amendment_obj = $psalf->getCurrent();
                 $ps_amendment_obj->setStatus($ps_amendment_status_id);
                 $ps_amendment_obj->Save();
                 unset($ps_amendment_obj);
             }
             unset($psalf);
         }
         unset($ps_amendment_ids);
     }
     return TRUE;
 }
 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;
 }
예제 #5
0
 function getPayStubAmendmentDeductions()
 {
     //Get pay stub amendments here.
     $psalf = new PayStubAmendmentListFactory();
     if ($this->getAdvance() == TRUE) {
         //For advances, any PS amendment effective BEFORE the advance end date is considered in full.
         //Any AFTER the advance end date, is considered half.
         //$pay_period_end_date = $this->getPayPeriodObject()->getAdvanceEndDate();
         $advance_neg_sum = $psalf->getAmountSumByUserIdAndTypeIdAndAuthorizedAndStartDateAndEndDate($this->getUser(), 20, TRUE, $this->getPayPeriodObject()->getStartDate(), $this->getPayPeriodObject()->getAdvanceEndDate());
         Debug::text('Pay Stub Amendment Advance Deductions: ' . $advance_neg_sum, __FILE__, __LINE__, __METHOD__, 10);
         $full_neg_sum = $psalf->getAmountSumByUserIdAndTypeIdAndAuthorizedAndStartDateAndEndDate($this->getUser(), 20, TRUE, $this->getPayPeriodObject()->getAdvanceEndDate(), $this->getPayPeriodObject()->getEndDate());
         Debug::text('Pay Stub Amendment Full Deductions: ' . $full_neg_sum, __FILE__, __LINE__, __METHOD__, 10);
         //Take the full amount of PS amendments BEFORE the advance end date, and half of any AFTER the advance end date.
         //$neg_sum = $advance_neg_sum + ($full_neg_sum / 2);
         $neg_sum = bcadd($advance_neg_sum, bcdiv($full_neg_sum, 2));
     } else {
         //$pay_period_end_date =
         $neg_sum = $psalf->getAmountSumByUserIdAndTypeIdAndAuthorizedAndStartDateAndEndDate($this->getUser(), 20, TRUE, $this->getPayPeriodObject()->getStartDate(), $this->getPayPeriodObject()->getEndDate());
     }
     //$neg_sum = $psalf->getAmountSumByUserIdAndTypeIdAndTaxExemptAndAuthorizedAndStartDateAndEndDate( $this->getUser(), 20, FALSE, TRUE, $this->getPayPeriodObject()->getStartDate(), $this->getPayPeriodObject()->getEndDate() )*-1;
     Debug::text('Pay Stub Amendment Total Deductions: ' . $neg_sum, __FILE__, __LINE__, __METHOD__, 10);
     return bcmul($neg_sum, -1);
 }
예제 #6
0
         if ($e_obj->getColumn('severity_id') == 30) {
             $high_severity_exceptions = $e_obj->getColumn('count');
         }
     }
 } else {
     Debug::Text(' No Exceptions!', __FILE__, __LINE__, __METHOD__, 10);
 }
 //Get all pending requests
 $pending_requests = 0;
 $rlf = new RequestListFactory();
 $rlf->getSumByPayPeriodIdAndStatus($pay_period_obj->getId(), 30);
 if ($rlf->getRecordCount() > 0) {
     $pending_requests = $rlf->getCurrent()->getColumn('total');
 }
 //Get PS Amendments.
 $psalf = new PayStubAmendmentListFactory();
 $psalf->getByUserIdAndAuthorizedAndStartDateAndEndDate($pay_period_schedule->getUser(), TRUE, $pay_period_obj->getStartDate(), $pay_period_obj->getEndDate());
 $total_ps_amendments = 0;
 if (is_object($psalf)) {
     $total_ps_amendments = $psalf->getRecordCount();
 }
 //Get verified timesheets
 $pptsvlf = new PayPeriodTimeSheetVerifyListFactory();
 $pptsvlf->getByPayPeriodIdAndCompanyId($pay_period_obj->getId(), $current_company->getId());
 $verified_time_sheets = 0;
 $pending_time_sheets = 0;
 if ($pptsvlf->getRecordCount() > 0) {
     foreach ($pptsvlf as $pptsv_obj) {
         if ($pptsv_obj->getAuthorized() == TRUE) {
             $verified_time_sheets++;
         } elseif ($pptsv_obj->getStatus() == 30) {
 function setPayStubAmendment($id)
 {
     $id = trim($id);
     Debug::text('PS Amendment ID: ' . $id, __FILE__, __LINE__, __METHOD__, 10);
     $psalf = new PayStubAmendmentListFactory();
     $result = $psalf->getById($id);
     if ($this->Validator->isResultSetWithRows('pay_stub_amendment_id', $result, TTi18n::gettext('Invalid Pay Stub Amendment Id'))) {
         //Debug::text('TRUE: '. $id .' -: '. $result->getCurrent()->getId() , __FILE__, __LINE__, __METHOD__,10);
         $this->data['pay_stub_amendment_id'] = $result->getCurrent()->getId();
         return TRUE;
     }
     return FALSE;
 }
 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;
 }
             $fail_transaction = TRUE;
             break;
         }
     }
     if ($fail_transaction == FALSE) {
         //$pf->FailTransaction();
         $psaf->CommitTransaction();
         Redirect::Page(URLBuilder::getURL(array('user_id' => $user_id), 'PayStubAmendmentList.php'));
         break;
     } else {
         $psaf->FailTransaction();
     }
 default:
     BreadCrumb::setCrumb($title);
     if (isset($id)) {
         $psalf = new PayStubAmendmentListFactory();
         //$uwlf->GetByUserIdAndCompanyId($current_user->getId(), $current_company->getId() );
         $psalf->GetById($id);
         foreach ($psalf as $pay_stub_amendment) {
             //Debug::Arr($station,'Department', __FILE__, __LINE__, __METHOD__,10);
             $user_id = $pay_stub_amendment->getUser();
             $pay_stub_amendment_data = array('id' => $pay_stub_amendment->getId(), 'filter_user_id' => $pay_stub_amendment->getUser(), 'pay_stub_entry_name_id' => $pay_stub_amendment->getPayStubEntryNameId(), 'status_id' => $pay_stub_amendment->getStatus(), 'effective_date' => $pay_stub_amendment->getEffectiveDate(), 'type_id' => $pay_stub_amendment->getType(), 'rate' => $pay_stub_amendment->getRate(), 'units' => $pay_stub_amendment->getUnits(), 'amount' => $pay_stub_amendment->getAmount(), 'percent_amount' => $pay_stub_amendment->getPercentAmount(), 'percent_amount_entry_name_id' => $pay_stub_amendment->getPercentAmountEntryNameId(), 'description' => $pay_stub_amendment->getDescription(), 'authorized' => $pay_stub_amendment->getAuthorized(), 'ytd_adjustment' => $pay_stub_amendment->getYTDAdjustment(), 'created_date' => $pay_stub_amendment->getCreatedDate(), 'created_by' => $pay_stub_amendment->getCreatedBy(), 'updated_date' => $pay_stub_amendment->getUpdatedDate(), 'updated_by' => $pay_stub_amendment->getUpdatedBy(), 'deleted_date' => $pay_stub_amendment->getDeletedDate(), 'deleted_by' => $pay_stub_amendment->getDeletedBy());
         }
     } else {
         if ($pay_stub_amendment_data['effective_date'] == '') {
             $pay_stub_amendment_data['effective_date'] = TTDate::getTime();
             $pay_stub_amendment_data['user_id'] = $user_id;
         }
     }
     //Select box options;
     $status_options_filter = array(50);
 extract(UserGenericDataFactory::getSearchFormData($saved_search_id, $sort_column));
 Debug::Text('Sort Column: ' . $sort_column, __FILE__, __LINE__, __METHOD__, 10);
 Debug::Text('Saved Search ID: ' . $saved_search_id, __FILE__, __LINE__, __METHOD__, 10);
 if (isset($filter_user_id) and $filter_user_id != '') {
     $filter_data['user_id'] = $filter_user_id;
 }
 if (isset($recurring_ps_amendment_id) and $recurring_ps_amendment_id != '') {
     $filter_data['recurring_ps_amendment_id'] = $recurring_ps_amendment_id;
 }
 $sort_array = NULL;
 if ($sort_column != '') {
     $sort_array = array(Misc::trimSortPrefix($sort_column) => $sort_order);
 }
 URLBuilder::setURL($_SERVER['SCRIPT_NAME'], array('sort_column' => Misc::trimSortPrefix($sort_column), 'sort_order' => $sort_order, 'saved_search_id' => $saved_search_id, 'page' => $page));
 $ulf = new UserListFactory();
 $psalf = new PayStubAmendmentListFactory();
 if ($permission->Check('pay_stub_amendment', 'view') == FALSE) {
     if ($permission->Check('pay_stub_amendment', 'view_child')) {
         $filter_data['permission_children_ids'] = $permission_children_ids;
     }
     if ($permission->Check('pay_stub_amendment', 'view_own')) {
         $filter_data['permission_children_ids'][] = $current_user->getId();
     }
 }
 $filter_data['start_date'] = NULL;
 $filter_data['end_date'] = NULL;
 if (isset($filter_data['pay_period_id']) and $filter_data['pay_period_id'] != '-1') {
     //Get Pay Period Start/End dates
     $pplf->getByIdAndCompanyId(Misc::trimSortPrefix($filter_data['pay_period_id']), $current_company->getId());
     if ($pplf->getRecordCount() > 0) {
         $pp_obj = $pplf->getCurrent();