function getSchedule($filter_data, $start_week_day = 0, $group_schedule = FALSE) { global $current_user, $current_user_prefs; //Individual is one schedule per employee, or all on one schedule. if (!is_array($filter_data)) { return FALSE; } $current_epoch = time(); //Debug::Text('Start Date: '. TTDate::getDate('DATE', $start_date) .' End Date: '. TTDate::getDate('DATE', $end_date) , __FILE__, __LINE__, __METHOD__,10); Debug::text(' Start Date: ' . TTDate::getDate('DATE+TIME', $filter_data['start_date']) . ' End Date: ' . TTDate::getDate('DATE+TIME', $filter_data['end_date']) . ' Start Week Day: ' . $start_week_day, __FILE__, __LINE__, __METHOD__, 10); $pdf = new TTPDF('L', 'pt', 'Letter'); $left_margin = 20; $top_margin = 20; $pdf->setMargins($left_margin, $top_margin); $pdf->SetAutoPageBreak(TRUE, 30); //$pdf->SetAutoPageBreak(FALSE); $pdf->SetFont('freesans', '', 10); $border = 0; $adjust_x = 0; $adjust_y = 0; if ($group_schedule == FALSE) { $valid_schedules = 0; $sf = TTnew('ScheduleFactory'); $tmp_schedule_shifts = $sf->getScheduleArray($filter_data); //Re-arrange array by user_id->date if (is_array($tmp_schedule_shifts)) { foreach ($tmp_schedule_shifts as $day_epoch => $day_schedule_shifts) { foreach ($day_schedule_shifts as $day_schedule_shift) { $raw_schedule_shifts[$day_schedule_shift['user_id']][$day_epoch][] = $day_schedule_shift; } } } unset($tmp_schedule_shifts); //Debug::Arr($raw_schedule_shifts, 'Raw Schedule Shifts: ', __FILE__, __LINE__, __METHOD__,10); if (isset($raw_schedule_shifts) and is_array($raw_schedule_shifts)) { foreach ($raw_schedule_shifts as $user_id => $day_schedule_shifts) { foreach ($day_schedule_shifts as $day_epoch => $day_schedule_shifts) { foreach ($day_schedule_shifts as $day_schedule_shift) { //Debug::Arr($day_schedule_shift, 'aDay Schedule Shift: ', __FILE__, __LINE__, __METHOD__,10); $tmp_schedule_shifts[$day_epoch][$day_schedule_shift['branch']][$day_schedule_shift['department']][] = $day_schedule_shift; if (isset($schedule_shift_totals[$day_epoch]['total_shifts'])) { $schedule_shift_totals[$day_epoch]['total_shifts']++; } else { $schedule_shift_totals[$day_epoch]['total_shifts'] = 1; } //$week_of_year = TTDate::getWeek( strtotime($day_epoch) ); $week_of_year = TTDate::getWeek(strtotime($day_epoch), $start_week_day); if (!isset($schedule_shift_totals[$day_epoch]['labels'])) { $schedule_shift_totals[$day_epoch]['labels'] = 0; } if ($day_schedule_shift['branch'] != '--' and !isset($schedule_shift_totals[$day_epoch]['branch'][$day_schedule_shift['branch']])) { $schedule_shift_totals[$day_epoch]['branch'][$day_schedule_shift['branch']] = TRUE; $schedule_shift_totals[$day_epoch]['labels']++; } if ($day_schedule_shift['department'] != '--' and !isset($schedule_shift_totals[$day_epoch]['department'][$day_schedule_shift['branch']][$day_schedule_shift['department']])) { $schedule_shift_totals[$day_epoch]['department'][$day_schedule_shift['branch']][$day_schedule_shift['department']] = TRUE; $schedule_shift_totals[$day_epoch]['labels']++; } if (!isset($max_week_data[$week_of_year]['shift'])) { Debug::text('Date: ' . $day_epoch . ' Week: ' . $week_of_year . ' Setting Max Week shift to 0', __FILE__, __LINE__, __METHOD__, 10); $max_week_data[$week_of_year]['shift'] = 1; $max_week_data[$week_of_year]['labels'] = 0; } if (isset($max_week_data[$week_of_year]['shift']) and $schedule_shift_totals[$day_epoch]['total_shifts'] + $schedule_shift_totals[$day_epoch]['labels'] > $max_week_data[$week_of_year]['shift'] + $max_week_data[$week_of_year]['labels']) { Debug::text('Date: ' . $day_epoch . ' Week: ' . $week_of_year . ' Setting Max Week shift to: ' . $schedule_shift_totals[$day_epoch]['total_shifts'] . ' Labels: ' . $schedule_shift_totals[$day_epoch]['labels'], __FILE__, __LINE__, __METHOD__, 10); $max_week_data[$week_of_year]['shift'] = $schedule_shift_totals[$day_epoch]['total_shifts']; $max_week_data[$week_of_year]['labels'] = $schedule_shift_totals[$day_epoch]['labels']; } //Debug::Arr($schedule_shift_totals, ' Schedule Shift Totals: ', __FILE__, __LINE__, __METHOD__,10); //Debug::Arr($max_week_data, ' zMaxWeekData: ', __FILE__, __LINE__, __METHOD__,10); } } if (isset($tmp_schedule_shifts)) { //Sort Branches/Departments first foreach ($tmp_schedule_shifts as $day_epoch => $day_tmp_schedule_shift) { ksort($day_tmp_schedule_shift); $tmp_schedule_shifts[$day_epoch] = $day_tmp_schedule_shift; foreach ($day_tmp_schedule_shift as $branch => $department_schedule_shifts) { ksort($tmp_schedule_shifts[$day_epoch][$branch]); } } //Sort each department by start time. foreach ($tmp_schedule_shifts as $day_epoch => $day_tmp_schedule_shift) { foreach ($day_tmp_schedule_shift as $branch => $department_schedule_shifts) { foreach ($department_schedule_shifts as $department => $department_schedule_shift) { $department_schedule_shift = Sort::multiSort($department_schedule_shift, 'start_time'); $this->schedule_shifts[$day_epoch][$branch][$department] = $department_schedule_shift; } } } } unset($day_tmp_schedule_shift, $department_schedule_shifts, $department_schedule_shift, $tmp_schedule_shifts, $branch, $department); $calendar_array = TTDate::getCalendarArray($filter_data['start_date'], $filter_data['end_date'], $start_week_day); //var_dump($calendar_array); if (!is_array($calendar_array) or !isset($this->schedule_shifts) or !is_array($this->schedule_shifts)) { continue; //Skip to next user. } $ulf = TTnew('UserListFactory'); $ulf->getByIdAndCompanyId($user_id, $current_user->getCompany()); if ($ulf->getRecordCount() != 1) { continue; } else { $user_obj = $ulf->getCurrent(); $pdf->AddPage(); $pdf->setXY(670, $top_margin); $pdf->SetFont('freesans', '', 10); $pdf->Cell(100, 15, TTDate::getDate('DATE+TIME', $current_epoch), $border, 0, 'R'); $pdf->setXY($left_margin, $top_margin); $pdf->SetFont('freesans', 'B', 25); $pdf->Cell(0, 25, $user_obj->getFullName() . ' - ' . TTi18n::getText('Schedule'), $border, 0, 'C'); $pdf->Ln(); } $pdf->SetFont('freesans', 'B', 16); $pdf->Cell(0, 15, TTDate::getDate('DATE', $filter_data['start_date']) . ' - ' . TTDate::getDate('DATE', $filter_data['end_date']), $border, 0, 'C'); //$pdf->Ln(); $pdf->Ln(); $pdf->Ln(); $pdf->SetFont('freesans', '', 8); $cell_width = floor(($pdf->GetPageWidth() - $left_margin * 2) / 7); $cell_height = 100; $i = 0; $total_days = count($calendar_array) - 1; $boader = 1; foreach ($calendar_array as $calendar) { if ($i == 0) { //Calendar Header $pdf->SetFont('freesans', 'B', 8); $calendar_header = TTDate::getDayOfWeekArrayByStartWeekDay($start_week_day); foreach ($calendar_header as $header_name) { $pdf->Cell($cell_width, 15, $header_name, 1, 0, 'C'); } $pdf->Ln(); unset($calendar_header, $header_name); } $month_name = NULL; if ($i == 0 or $calendar['isNewMonth'] == TRUE) { $month_name = $calendar['month_name']; } if ($i > 0 and $i % 7 == 0) { $this->writeWeekSchedule($pdf, $cell_width, $week_date_stamps, $max_week_data, $left_margin, $group_schedule, $start_week_day); unset($week_date_stamps); } $pdf->SetFont('freesans', 'B', 8); $pdf->Cell($cell_width / 2, 15, $month_name, 'LT', 0, 'L'); $pdf->Cell($cell_width / 2, 15, $calendar['day_of_month'], 'RT', 0, 'R'); $week_date_stamps[] = $calendar['date_stamp']; $i++; } $this->writeWeekSchedule($pdf, $cell_width, $week_date_stamps, $max_week_data, $left_margin, $group_schedule, $start_week_day, TRUE); $valid_schedules++; unset($this->schedule_shifts, $calendar_array, $week_date_stamps, $max_week_data, $day_epoch, $day_schedule_shifts, $day_schedule_shift, $schedule_shift_totals); } } unset($raw_schedule_shifts); } else { $valid_schedules = 1; $sf = TTnew('ScheduleFactory'); $raw_schedule_shifts = $sf->getScheduleArray($filter_data); if (is_array($raw_schedule_shifts)) { foreach ($raw_schedule_shifts as $day_epoch => $day_schedule_shifts) { foreach ($day_schedule_shifts as $day_schedule_shift) { //Debug::Arr($day_schedule_shift, 'bDay Schedule Shift: ', __FILE__, __LINE__, __METHOD__,10); $tmp_schedule_shifts[$day_epoch][$day_schedule_shift['branch']][$day_schedule_shift['department']][] = $day_schedule_shift; if (isset($schedule_shift_totals[$day_epoch]['total_shifts'])) { $schedule_shift_totals[$day_epoch]['total_shifts']++; } else { $schedule_shift_totals[$day_epoch]['total_shifts'] = 1; } //$week_of_year = TTDate::getWeek( strtotime($day_epoch) ); $week_of_year = TTDate::getWeek(strtotime($day_epoch), $start_week_day); Debug::text(' Date: ' . TTDate::getDate('DATE', strtotime($day_epoch)) . ' Week: ' . $week_of_year . ' TMP: ' . TTDate::getWeek(strtotime('20070721'), $start_week_day), __FILE__, __LINE__, __METHOD__, 10); if (!isset($schedule_shift_totals[$day_epoch]['labels'])) { $schedule_shift_totals[$day_epoch]['labels'] = 0; } if ($day_schedule_shift['branch'] != '--' and !isset($schedule_shift_totals[$day_epoch]['branch'][$day_schedule_shift['branch']])) { $schedule_shift_totals[$day_epoch]['branch'][$day_schedule_shift['branch']] = TRUE; $schedule_shift_totals[$day_epoch]['labels']++; } if ($day_schedule_shift['department'] != '--' and !isset($schedule_shift_totals[$day_epoch]['department'][$day_schedule_shift['branch']][$day_schedule_shift['department']])) { $schedule_shift_totals[$day_epoch]['department'][$day_schedule_shift['branch']][$day_schedule_shift['department']] = TRUE; $schedule_shift_totals[$day_epoch]['labels']++; } if (!isset($max_week_data[$week_of_year]['shift'])) { Debug::text('Date: ' . $day_epoch . ' Week: ' . $week_of_year . ' Setting Max Week shift to 0', __FILE__, __LINE__, __METHOD__, 10); $max_week_data[$week_of_year]['shift'] = 1; $max_week_data[$week_of_year]['labels'] = 0; } if (isset($max_week_data[$week_of_year]['shift']) and $schedule_shift_totals[$day_epoch]['total_shifts'] + $schedule_shift_totals[$day_epoch]['labels'] > $max_week_data[$week_of_year]['shift'] + $max_week_data[$week_of_year]['labels']) { Debug::text('Date: ' . $day_epoch . ' Week: ' . $week_of_year . ' Setting Max Week shift to: ' . $schedule_shift_totals[$day_epoch]['total_shifts'] . ' Labels: ' . $schedule_shift_totals[$day_epoch]['labels'], __FILE__, __LINE__, __METHOD__, 10); $max_week_data[$week_of_year]['shift'] = $schedule_shift_totals[$day_epoch]['total_shifts']; $max_week_data[$week_of_year]['labels'] = $schedule_shift_totals[$day_epoch]['labels']; } } } } //print_r($tmp_schedule_shifts); //print_r($max_week_data); if (isset($tmp_schedule_shifts)) { //Sort Branches/Departments first foreach ($tmp_schedule_shifts as $day_epoch => $day_tmp_schedule_shift) { ksort($day_tmp_schedule_shift); $tmp_schedule_shifts[$day_epoch] = $day_tmp_schedule_shift; foreach ($day_tmp_schedule_shift as $branch => $department_schedule_shifts) { ksort($tmp_schedule_shifts[$day_epoch][$branch]); } } //Sort each department by start time. foreach ($tmp_schedule_shifts as $day_epoch => $day_tmp_schedule_shift) { foreach ($day_tmp_schedule_shift as $branch => $department_schedule_shifts) { foreach ($department_schedule_shifts as $department => $department_schedule_shift) { $department_schedule_shift = Sort::multiSort($department_schedule_shift, 'last_name'); $this->schedule_shifts[$day_epoch][$branch][$department] = $department_schedule_shift; } } } } //Debug::Arr($this->schedule_shifts, 'Schedule Shifts: ', __FILE__, __LINE__, __METHOD__,10); $calendar_array = TTDate::getCalendarArray($filter_data['start_date'], $filter_data['end_date'], $start_week_day); //var_dump($calendar_array); if (!is_array($calendar_array) or !isset($this->schedule_shifts) or !is_array($this->schedule_shifts)) { return FALSE; } $pdf->AddPage(); $pdf->setXY(670, $top_margin); $pdf->SetFont('freesans', '', 10); $pdf->Cell(100, 15, TTDate::getDate('DATE+TIME', $current_epoch), $border, 0, 'R'); $pdf->setXY($left_margin, $top_margin); $pdf->SetFont('freesans', 'B', 25); $pdf->Cell(0, 25, 'Employee Schedule', $border, 0, 'C'); $pdf->Ln(); $pdf->SetFont('freesans', 'B', 10); $pdf->Cell(0, 15, TTDate::getDate('DATE', $filter_data['start_date']) . ' - ' . TTDate::getDate('DATE', $filter_data['end_date']), $border, 0, 'C'); $pdf->Ln(); $pdf->Ln(); $pdf->SetFont('freesans', '', 8); $cell_width = floor(($pdf->GetPageWidth() - $left_margin * 2) / 7); $cell_height = 100; $i = 0; $total_days = count($calendar_array) - 1; $boader = 1; foreach ($calendar_array as $calendar) { if ($i == 0) { //Calendar Header $pdf->SetFont('freesans', 'B', 8); $calendar_header = TTDate::getDayOfWeekArrayByStartWeekDay($start_week_day); foreach ($calendar_header as $header_name) { $pdf->Cell($cell_width, 15, $header_name, 1, 0, 'C'); } $pdf->Ln(); unset($calendar_header, $header_name); } $month_name = NULL; if ($i == 0 or $calendar['isNewMonth'] == TRUE) { $month_name = $calendar['month_name']; } if ($i > 0 and $i % 7 == 0) { $this->writeWeekSchedule($pdf, $cell_width, $week_date_stamps, $max_week_data, $left_margin, $group_schedule, $start_week_day); unset($week_date_stamps); } $pdf->SetFont('freesans', 'B', 8); $pdf->Cell($cell_width / 2, 15, $month_name, 'LT', 0, 'L'); $pdf->Cell($cell_width / 2, 15, $calendar['day_of_month'], 'RT', 0, 'R'); $week_date_stamps[] = $calendar['date_stamp']; $i++; } $this->writeWeekSchedule($pdf, $cell_width, $week_date_stamps, $max_week_data, $left_margin, $group_schedule, $start_week_day, TRUE); } if ($valid_schedules > 0) { $output = $pdf->Output('', 'S'); return $output; } return FALSE; }
//print_r($schedule_shift_totals); if (isset($tmp_schedule_shifts)) { //Sort Branches/Departments first foreach ($tmp_schedule_shifts as $day_epoch => $day_tmp_schedule_shift) { ksort($day_tmp_schedule_shift); $tmp_schedule_shifts[$day_epoch] = $day_tmp_schedule_shift; foreach ($day_tmp_schedule_shift as $branch => $department_schedule_shifts) { ksort($tmp_schedule_shifts[$day_epoch][$branch]); } } //Sort each department by start time. foreach ($tmp_schedule_shifts as $day_epoch => $day_tmp_schedule_shift) { foreach ($day_tmp_schedule_shift as $branch => $department_schedule_shifts) { foreach ($department_schedule_shifts as $department => $department_schedule_shift) { //var_dump($department_schedule_shift); $schedule_shifts[$day_epoch][$branch][$department] = Sort::multiSort($department_schedule_shift, 'start_time', 'last_name'); } } } } //print_r($schedule_shift_totals); $calendar_array = TTDate::getCalendarArray($start_date, $end_date, $current_user_prefs->getStartWeekDay(), FALSE); $smarty->assign_by_ref('calendar_array', $calendar_array); $hlf = TTnew('HolidayListFactory'); $holiday_array = $hlf->getArrayByPolicyGroupUserId($user_ids, $start_date, $end_date); $smarty->assign_by_ref('holidays', $holiday_array); $smarty->assign_by_ref('schedule_shifts', $schedule_shifts); $smarty->assign_by_ref('schedule_shift_totals', $schedule_shift_totals); $smarty->assign_by_ref('do', $do); break; }
} //Sort each department by start time. //Remember that we have to handle split shifts here, so its more difficult to sort by last name. foreach ($tmp_schedule_shifts as $day_epoch => $day_tmp_schedule_shift) { foreach ($day_tmp_schedule_shift as $branch => $department_schedule_shifts) { foreach ($department_schedule_shifts as $department => $department_schedule_shift) { $tmp2_schedule_shifts[$day_epoch][$branch][$department] = Sort::multiSort($department_schedule_shift, 'start_time'); } } } //Sort each department by start time. foreach ($tmp2_schedule_shifts as $day_epoch => $day_tmp_schedule_shift) { foreach ($day_tmp_schedule_shift as $branch => $department_schedule_shifts) { foreach ($department_schedule_shifts as $department => $user_schedule_shifts) { foreach ($user_schedule_shifts as $user => $user_schedule_shift) { $schedule_shifts[$day_epoch][$branch][$department][$user] = Sort::multiSort($user_schedule_shift, 'start_time'); } } } } unset($tmp_schedule_shifts, $tmp2_schedule_shifts); $tmp_schedule_shifts = $schedule_shifts; } //print_r($schedule_shifts); if (isset($tmp_schedule_shifts)) { //Format array so Smarty has an easier time. foreach ($tmp_schedule_shifts as $day_epoch => $day_tmp_schedule_shift) { foreach ($day_tmp_schedule_shift as $branch => $department_schedule_shifts) { foreach ($department_schedule_shifts as $department => $user_schedule_shifts) { foreach ($user_schedule_shifts as $user_id => $user_schedule_shifts) { $x = 0;
function getDetails() { if (getTTProductEdition() > 10 and $this->isNew() == FALSE and is_object($this->getUserObject())) { //Get class for this table Debug::Text('Table: ' . $this->getTableName(), __FILE__, __LINE__, __METHOD__, 10); require_once Environment::getBasePath() . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'TableMap.inc.php'; if (isset($global_table_map[$this->getTableName()])) { $table_class = $global_table_map[$this->getTableName()]; $class = new $table_class(); Debug::Text('Table Class: ' . $table_class, __FILE__, __LINE__, __METHOD__, 10); $ldlf = TTnew('LogDetailListFactory'); $ldlf->getBySystemLogIdAndCompanyId($this->getID(), $this->getUserObject()->getCompany()); if ($ldlf->getRecordCount() > 0) { foreach ($ldlf as $ld_obj) { if ($this->getObject() > 0) { $class->setID($this->getObject()); //Set the object id of the class so we can reference it later if needed. } $detail_row[] = array('field' => $ld_obj->getField(), 'display_field' => LogDetailDisplay::getDisplayField($class, $ld_obj->getField()), 'old_value' => LogDetailDisplay::getDisplayOldValue($class, $ld_obj->getField(), $ld_obj->getOldValue()), 'new_value' => LogDetailDisplay::getDisplayNewValue($class, $ld_obj->getField(), $ld_obj->getNewValue())); } $detail_row = Sort::multiSort($detail_row, 'display_field'); //Debug::Arr( $detail_row, 'Detail Row: ', __FILE__, __LINE__, __METHOD__,10); return $detail_row; } } } Debug::Text('No Log Details... ID: ' . $this->getID(), __FILE__, __LINE__, __METHOD__, 10); return FALSE; }
function processTriggerTimeArray($trigger_time_arr, $weekly_total_time = 0) { if (is_array($trigger_time_arr) == FALSE or count($trigger_time_arr) == 0) { return FALSE; } //Debug::Arr($trigger_time_arr, 'Source Trigger Arr: ', __FILE__, __LINE__, __METHOD__, 10); //Create a duplicate trigger_time_arr that we can sort so we know the //first trigger time is always the first in the array. //We don't want to use this array in the loop though, because it throws off other ordering. $tmp_trigger_time_arr = Sort::multiSort($trigger_time_arr, 'trigger_time'); $first_trigger_time = $tmp_trigger_time_arr[0]['trigger_time']; //Get first trigger time. //Debug::Arr($tmp_trigger_time_arr, 'Trigger Time After Sort: ', __FILE__, __LINE__, __METHOD__, 10); Debug::text('Weekly Total Time: ' . (int) $weekly_total_time . ' First Trigger Time: ' . $first_trigger_time, __FILE__, __LINE__, __METHOD__, 10); unset($tmp_trigger_time_arr); //Sort trigger_time array by calculation order before looping over it. //$trigger_time_arr = Sort::multiSort( $trigger_time_arr, 'calculation_order', 'trigger_time', 'asc', 'desc' ); $trigger_time_arr = Sort::arrayMultiSort($trigger_time_arr, array('calculation_order' => SORT_ASC, 'trigger_time' => SORT_DESC, 'combined_rate' => SORT_DESC)); //Debug::Arr($trigger_time_arr, 'Source Trigger Arr After Calculation Order Sort: ', __FILE__, __LINE__, __METHOD__, 10); //We need to calculate regular time as early as possible so we can adjust the trigger time //of weekly overtime policies and re-sort the array. $tmp_trigger_time_arr = array(); foreach ($trigger_time_arr as $key => $trigger_time_data) { if ($trigger_time_data['over_time_policy_type_id'] == 20 or $trigger_time_data['over_time_policy_type_id'] == 30 or $trigger_time_data['over_time_policy_type_id'] == 210) { if (is_numeric($weekly_total_time) and $weekly_total_time > 0 and $weekly_total_time >= $trigger_time_data['trigger_time']) { //Worked more then weekly trigger time already. Debug::Text('Worked more then weekly trigger time...', __FILE__, __LINE__, __METHOD__, 10); $tmp_trigger_time = 0; } else { //Haven't worked more then the weekly trigger time yet. $tmp_trigger_time = $trigger_time_data['trigger_time'] - $weekly_total_time; Debug::Text('NOT Worked more then weekly trigger time... TMP Trigger Time: ' . $tmp_trigger_time, __FILE__, __LINE__, __METHOD__, 10); if (is_numeric($weekly_total_time) and $weekly_total_time > 0 and $tmp_trigger_time > $first_trigger_time) { Debug::Text('Using First Trigger Time: ' . $first_trigger_time, __FILE__, __LINE__, __METHOD__, 10); $tmp_trigger_time = $first_trigger_time; } } $trigger_time_arr[$key]['trigger_time'] = $tmp_trigger_time; } else { Debug::Text('NOT weekly overtime policy...', __FILE__, __LINE__, __METHOD__, 10); $tmp_trigger_time = $trigger_time_data['trigger_time']; } Debug::Text('Trigger Time: ' . $tmp_trigger_time . ' Overtime Policy Id: ' . $trigger_time_data['over_time_policy_id'], __FILE__, __LINE__, __METHOD__, 10); if (!in_array($tmp_trigger_time, $tmp_trigger_time_arr)) { Debug::Text('Adding policy to final array... Trigger Time: ' . $tmp_trigger_time, __FILE__, __LINE__, __METHOD__, 10); $trigger_time_data['trigger_time'] = $tmp_trigger_time; $retval[] = $trigger_time_data; } else { Debug::Text('NOT Adding policy to final array...', __FILE__, __LINE__, __METHOD__, 10); } $tmp_trigger_time_arr[] = $trigger_time_arr[$key]['trigger_time']; } unset($trigger_time_arr, $tmp_trigger_time_arr, $trigger_time_data); $retval = Sort::multiSort($retval, 'trigger_time'); //Debug::Arr($retval, 'Dest Trigger Arr: ', __FILE__, __LINE__, __METHOD__, 10); //Loop through final array and remove policies with higher trigger times and lower rates. //The rate matters as we don't want one policy after 8hrs to have a lower rate than a policy after 0hrs. (ie: Holiday OT after 0hrs @ 2x and Daily OT after 8hrs @ 1.5x) //Are there any scenarios where an employee works more hours and gets a lesser rate? $prev_combined_rate = 0; foreach ($retval as $key => $policy_data) { if ($policy_data['combined_rate'] < $prev_combined_rate) { Debug::Text('Removing policy with higher trigger time and lower combined rate... Key: ' . $key, __FILE__, __LINE__, __METHOD__, 10); unset($retval[$key]); } else { $prev_combined_rate = $policy_data['combined_rate']; } } unset($key, $policy_data); $retval = array_values($retval); //Rekey the array so there are no gaps. //Debug::Arr($retval, 'zDest Trigger Arr: ', __FILE__, __LINE__, __METHOD__, 10); return $retval; }
function processTriggerTimeArray($trigger_time_arr, $weekly_total_time = 0) { if (is_array($trigger_time_arr) == FALSE or count($trigger_time_arr) == 0) { return FALSE; } //Debug::Arr($trigger_time_arr, 'Source Trigger Arr: ', __FILE__, __LINE__, __METHOD__, 10); //Create a duplicate trigger_time_arr that we can sort so we know the //first trigger time is always the first in the array. //We don't want to use this array in the loop though, because it throws off //other ordering. $tmp_trigger_time_arr = Sort::multiSort($trigger_time_arr, 'trigger_time'); $first_trigger_time = $tmp_trigger_time_arr[0]['trigger_time']; //Get first trigger time. //Debug::Arr($tmp_trigger_time_arr, 'Trigger Time After Sort: ', __FILE__, __LINE__, __METHOD__, 10); Debug::text('Weekly Total Time: ' . $weekly_total_time . ' First Trigger Time: ' . $first_trigger_time, __FILE__, __LINE__, __METHOD__, 10); unset($tmp_trigger_time_arr); //Sort trigger_time array by calculation order before looping over it. $trigger_time_arr = Sort::multiSort($trigger_time_arr, 'calculation_order', 'trigger_time', 'asc', 'desc'); //Debug::Arr($tmp_trigger_time_arr, 'Source Trigger Arr After Calculation Order Sort: ', __FILE__, __LINE__, __METHOD__, 10); //We need to calculate regular time as early as possible so we can adjust the trigger time //of weekly overtime policies and re-sort the array. $tmp_trigger_time_arr = array(); foreach ($trigger_time_arr as $key => $trigger_time_data) { if ($trigger_time_data['over_time_policy_type_id'] == 20) { if (is_numeric($weekly_total_time) and $weekly_total_time > 0 and $weekly_total_time >= $trigger_time_data['trigger_time']) { //Worked more then weekly trigger time already. Debug::Text('Worked more then weekly trigger time...', __FILE__, __LINE__, __METHOD__, 10); $tmp_trigger_time = 0; } else { //Haven't worked more then the weekly trigger time yet. $tmp_trigger_time = $trigger_time_data['trigger_time'] - $weekly_total_time; Debug::Text('NOT Worked more then weekly trigger time... TMP Trigger Time: ' . $tmp_trigger_time, __FILE__, __LINE__, __METHOD__, 10); if (is_numeric($weekly_total_time) and $weekly_total_time > 0 and $tmp_trigger_time > $first_trigger_time) { Debug::Text('Using First Trigger Time: ' . $first_trigger_time, __FILE__, __LINE__, __METHOD__, 10); $tmp_trigger_time = $first_trigger_time; } } $trigger_time_arr[$key]['trigger_time'] = $tmp_trigger_time; } else { Debug::Text('NOT weekly overtime policy...', __FILE__, __LINE__, __METHOD__, 10); $tmp_trigger_time = $trigger_time_data['trigger_time']; } Debug::Text('Trigger Time: ' . $tmp_trigger_time . ' Overtime Policy Id: ' . $trigger_time_data['over_time_policy_id'], __FILE__, __LINE__, __METHOD__, 10); if (!in_array($tmp_trigger_time, $tmp_trigger_time_arr)) { Debug::Text('Adding policy to final array...', __FILE__, __LINE__, __METHOD__, 10); $trigger_time_data['trigger_time'] = $tmp_trigger_time; $retval[] = $trigger_time_data; } else { Debug::Text('NOT Adding policy to final array...', __FILE__, __LINE__, __METHOD__, 10); } $tmp_trigger_time_arr[] = $trigger_time_arr[$key]['trigger_time']; } $retval = Sort::multiSort($retval, 'trigger_time'); //Debug::Arr($retval, 'Dest Trigger Arr: ', __FILE__, __LINE__, __METHOD__, 10); return $retval; }