function setUserDateTotalArray() { //Loop through unique UserDateTotal rows... Adding entries to pay stubs. $udtlf = TTnew('UserDateTotalListFactory'); $udtlf->getByUserIdAndPayPeriodIdAndEndDate($this->getUser(), $this->getPayPeriod(), $this->getPayPeriodObject()->getEndDate()); $dock_absence_time = 0; $paid_absence_time = 0; $dock_absence_amount = 0; $paid_absence_amount = 0; $prev_wage_effective_date = 0; if ($udtlf->getRecordCount() > 0) { foreach ($udtlf as $udt_obj) { Debug::text('User Total Row... Type: ' . $udt_obj->getType() . ' OverTime Policy ID: ' . $udt_obj->getOverTimePolicyID() . ' User Wage ID: ' . $udt_obj->getColumn('user_wage_id'), __FILE__, __LINE__, __METHOD__, 10); if ($udt_obj->getStatus() == 10 and $udt_obj->getType() == 20) { //Regular Time Debug::text('User Total Row... Regular Time: ' . $udt_obj->getTotalTime(), __FILE__, __LINE__, __METHOD__, 10); //Check if they are a salary user... //Use WORKED time to calculate regular time. Not just regular time. if (is_object($this->getUserWageObject($udt_obj->getColumn('user_wage_id'))) and $this->getUserWageObject($udt_obj->getColumn('user_wage_id'))->getType() != 10) { //Salary Debug::text('Strict Salary Wage: Reduce Regular Pay By: Dock Time: ' . $dock_absence_time . ' and Paid Absence: ' . $paid_absence_time, __FILE__, __LINE__, __METHOD__, 10); if (isset($dock_absence_amount_arr[$udt_obj->getColumn('user_wage_id')])) { $dock_absence_wage = $dock_absence_amount_arr[$udt_obj->getColumn('user_wage_id')]; } else { $dock_absence_wage = 0; } if (isset($reduce_salary_absence_amount_arr[$udt_obj->getColumn('user_wage_id')])) { $paid_absence_wage = $reduce_salary_absence_amount_arr[$udt_obj->getColumn('user_wage_id')]; } else { $paid_absence_wage = 0; } Debug::text('Wage ID: ' . $udt_obj->getColumn('user_wage_id') . ' Dock Absence Wage: ' . $dock_absence_wage . ' Paid Absence Wage: ' . $paid_absence_wage, __FILE__, __LINE__, __METHOD__, 10); $maximum_wage_salary = UserWageFactory::proRateSalary($this->getMaximumPayPeriodWage($udt_obj->getColumn('user_wage_id')), $this->getUserWageObject($udt_obj->getColumn('user_wage_id'))->getEffectiveDate(), $prev_wage_effective_date, $this->getPayPeriodObject()->getStartDate(), $this->getPayPeriodObject()->getEndDate(), $this->getUserObject()->getTerminationDate()); $prev_wage_effective_date = $this->getUserWageObject($udt_obj->getColumn('user_wage_id'))->getEffectiveDate(); $amount = bcsub($maximum_wage_salary, bcadd($dock_absence_wage, $paid_absence_wage)); $total_time = $udt_obj->getTotalTime(); //Dont minus dock/paid absence time. Because its already not included. $rate = NULL; $pay_stub_entry = $this->getPayStubEntryAccountLinkObject()->getRegularTime(); unset($dock_absence_wage, $paid_absence_wage); } else { //Hourly Debug::text('Hourly or Hourly + Bonus Wage', __FILE__, __LINE__, __METHOD__, 10); $pay_stub_entry = $this->getPayStubEntryAccountLinkObject()->getRegularTime(); $total_time = $udt_obj->getTotalTime(); $rate = $this->getHourlyRate($udt_obj->getColumn('user_wage_id')); $amount = $this->getWage($udt_obj->getTotalTime(), $rate); } Debug::text('aPay Stub Entry Account ID: ' . $pay_stub_entry . ' Amount: ' . $amount, __FILE__, __LINE__, __METHOD__, 10); } elseif ($udt_obj->getStatus() == 10 and $udt_obj->getType() == 30) { //Overtime Debug::text('User Total Row... Overtime Time: ' . $udt_obj->getTotalTime(), __FILE__, __LINE__, __METHOD__, 10); //Get overtime policy info. Allow negative rates so they withdraw from pay stub accounts. if ($udt_obj->getOverTimePolicyObject()->getRate() != 0) { Debug::text('Paid Overtime Time Policy... Rate: ' . $udt_obj->getOverTimePolicyObject()->getRate(), __FILE__, __LINE__, __METHOD__, 10); $pay_stub_entry = $udt_obj->getOverTimePolicyObject()->getPayStubEntryAccountId(); $total_time = $udt_obj->getTotalTime(); $rate = bcmul($this->getHourlyRate($udt_obj->getColumn('over_time_policy_wage_id')), $udt_obj->getOverTimePolicyObject()->getRate()); $amount = $this->getWage($udt_obj->getTotalTime(), $rate); Debug::text('bPay Stub Entry Account ID: ' . $pay_stub_entry . ' Amount: ' . $amount . ' Rate: ' . $rate, __FILE__, __LINE__, __METHOD__, 10); } else { Debug::text('NOT Paid Overtime Time Policy: ', __FILE__, __LINE__, __METHOD__, 10); } } elseif ($udt_obj->getStatus() == 30 and $udt_obj->getType() == 10) { //Absence Debug::text('User Total Row... Absence Time: ' . $udt_obj->getTotalTime(), __FILE__, __LINE__, __METHOD__, 10); if (is_object($udt_obj->getAbsencePolicyObject()) and ($udt_obj->getAbsencePolicyObject()->getType() == 10 or $udt_obj->getAbsencePolicyObject()->getType() == 12) and $udt_obj->getAbsencePolicyObject()->getPayStubEntryAccountID() != '') { //Paid Debug::text('Paid Absence Time: ' . $udt_obj->getTotalTime(), __FILE__, __LINE__, __METHOD__, 10); $pay_stub_entry = (int) $udt_obj->getAbsencePolicyObject()->getPayStubEntryAccountID(); $total_time = $udt_obj->getTotalTime(); $rate = bcmul($this->getHourlyRate($udt_obj->getColumn('absence_policy_wage_id')), $udt_obj->getAbsencePolicyObject()->getRate()); $amount = $this->getWage($udt_obj->getTotalTime(), $rate); //$rate = $this->getHourlyRate( $udt_obj->getColumn('absence_policy_wage_id') ); //$amount = $this->getWage( $udt_obj->getTotalTime(), $this->getHourlyRate( $udt_obj->getColumn('absence_policy_wage_id') ) ); //Debug::text('Paid Absence Info: '. $udt_obj->getTotalTime() , __FILE__, __LINE__, __METHOD__,10); Debug::text('cPay Stub Entry Account ID: ' . $pay_stub_entry . ' Amount: ' . $amount . ' Rate: ' . $rate, __FILE__, __LINE__, __METHOD__, 10); $paid_absence_time = bcadd($paid_absence_time, $udt_obj->getTotalTime()); $paid_absence_amount = bcadd($paid_absence_amount, $amount); //Make sure we add the amount below. Incase there are two or more //entries for a paid absence in the same user_wage_id on one pay stub. if (!isset($paid_absence_amount_arr[$udt_obj->getColumn('absence_policy_wage_id')])) { $paid_absence_amount_arr[$udt_obj->getColumn('absence_policy_wage_id')] = 0; } $paid_absence_amount_arr[$udt_obj->getColumn('absence_policy_wage_id')] = bcadd($paid_absence_amount_arr[$udt_obj->getColumn('absence_policy_wage_id')], $amount); //Some paid absences are over and above employees salary, so we need to track them separately. //So we only reduce the salary of the amount of regular paid absences, not "Paid (Above Salary)" absences. if (!isset($reduce_salary_absence_amount_arr[$udt_obj->getColumn('absence_policy_wage_id')])) { $reduce_salary_absence_amount_arr[$udt_obj->getColumn('absence_policy_wage_id')] = 0; } if ($udt_obj->getAbsencePolicyObject()->getType() == 10) { $reduce_salary_absence_amount_arr[$udt_obj->getColumn('absence_policy_wage_id')] = bcadd($reduce_salary_absence_amount_arr[$udt_obj->getColumn('absence_policy_wage_id')], $amount); } } elseif (is_object($udt_obj->getAbsencePolicyObject()) and $udt_obj->getAbsencePolicyObject()->getType() == 30) { $dock_absence_time = bcadd($dock_absence_time, $udt_obj->getTotalTime()); $rate = bcmul($this->getHourlyRate($udt_obj->getColumn('absence_policy_wage_id')), $udt_obj->getAbsencePolicyObject()->getRate()); $amount = $this->getWage($udt_obj->getTotalTime(), $rate); //$amount = $this->getWage( $udt_obj->getTotalTime(), $this->getHourlyRate( $udt_obj->getColumn('absence_policy_wage_id') ) ); $dock_absence_amount = bcadd($dock_absence_amount, $amount); $dock_absence_amount_arr[$udt_obj->getColumn('absence_policy_wage_id')] = $amount; Debug::text('DOCK Absence Time.. Adding: ' . $udt_obj->getTotalTime() . ' Total: ' . $dock_absence_time . ' Rate: ' . $rate, __FILE__, __LINE__, __METHOD__, 10); unset($rate); } } elseif ($udt_obj->getStatus() == 10 and $udt_obj->getType() == 40) { //Premium Debug::text('User Total Row... Premium Time: ' . $udt_obj->getTotalTime(), __FILE__, __LINE__, __METHOD__, 10); //Get premium policy info. if (is_object($udt_obj->getPremiumPolicyObject()) and $udt_obj->getPremiumPolicyObject()->getRate() != 0) { Debug::text('Paid Premium Time Policy... Rate: ' . $udt_obj->getPremiumPolicyObject()->getRate(), __FILE__, __LINE__, __METHOD__, 10); $rate = $udt_obj->getPremiumPolicyObject()->getHourlyRate($this->getHourlyRate($udt_obj->getColumn('premium_policy_wage_id'))); $pay_stub_entry = $udt_obj->getPremiumPolicyObject()->getPayStubEntryAccountId(); $total_time = $udt_obj->getTotalTime(); $amount = $this->getWage($udt_obj->getTotalTime(), $rate); Debug::text('dPay Stub Entry Account ID: ' . $pay_stub_entry . ' Amount: ' . $amount . ' Rate: ' . $rate, __FILE__, __LINE__, __METHOD__, 10); } else { Debug::text('NOT Paid Premium Time Policy: ', __FILE__, __LINE__, __METHOD__, 10); } } if (isset($pay_stub_entry) and $pay_stub_entry != '') { Debug::text('zPay Stub Entry Account ID: ' . $pay_stub_entry . ' Amount: ' . $amount, __FILE__, __LINE__, __METHOD__, 10); $ret_arr['entries'][] = array('user_wage_id' => $udt_obj->getColumn('user_wage_id'), 'pay_stub_entry' => $pay_stub_entry, 'total_time' => $total_time, 'amount' => $amount, 'rate' => $rate); } unset($pay_stub_entry, $amount, $total_time, $rate); } } else { Debug::text('NO UserDate Total entries found.', __FILE__, __LINE__, __METHOD__, 10); } $ret_arr['other']['paid_absence_time'] = $paid_absence_time; $ret_arr['other']['dock_absence_time'] = $dock_absence_time; $ret_arr['other']['paid_absence_amount'] = $paid_absence_amount; $ret_arr['other']['dock_absence_amount'] = $dock_absence_amount; if (isset($ret_arr)) { Debug::Arr($ret_arr, 'UserDateTotal Array', __FILE__, __LINE__, __METHOD__, 10); return $this->user_date_total_arr = $ret_arr; } return FALSE; }