shell bypass 403
UnknownSec Shell
:
/
home
/
delvin
/
dev.delv-in.com
/
models
/ [
drwxr-xr-x
]
upload
mass deface
mass delete
console
info server
name :
m_master_data_bu.php
<?php class Master_Data { private $Database; private $db_table = 'users_gen_info'; function __construct(){ global $Database; $this->Database = $Database; } public function get_schedule($userID, $jobAreaID, $pay_basis, $punch_shift, $dateTS1, $dateTS2, $orderBy){ // echo 'MASTER_DATA ' . __LINE__.": u=" . $userID." | j=". print_r($jobAreaID)." | p=". $pay_basis ." | dateTS1="; // if ($dateTS1 > 0){ // echo date('His M j/y', $dateTS1); // } // echo " | dateTS2="; // if ($dateTS2 > 0){ // echo date('His M j/y', $dateTS2); // } // echo "<br>"; $Users = new Users(); $User_Schedule = new User_Schedule; $Schedule_Ad_Hoc = new Schedule_Ad_Hoc; $Schedule_Note = new Schedule_Note; $Pr_Closures = new Pr_Closures; $Staff_Away = new Staff_Away; $Pr_Away_Types = new Pr_Away_Types; if (isset($_SESSION['timeZone'])){ date_default_timezone_set($_SESSION['timeZone']); } else { date_default_timezone_set('Canada/Pacific'); } // $usersArr = $this->get_users($userID, $jobAreaID, $dateTS1, $dateTS2, $pay_basis, $orderBy); $usersArr = $Users->search($_SESSION['PID'], $userID, '', '', '', '', $jobAreaID, $dateTS1, $dateTS2, $pay_basis, $punch_shift, $orderBy); if ($userID > 0){ $temp = $usersArr; $usersArr = array(); $usersArr[$userID] = $temp; $temp = array(); } // echo __line__."-master: get_schedule - usersArr count=" . count($usersArr) ." <pre>"; print_r($usersArr); echo "</pre>"; // echo __LINE__.": count(usersArr) = " . count($usersArr) . "<br>"; // get all closures & stats for the time period == staff could work on a stat so holidays are not necessarily closed. $holRows = $Pr_Closures->get_date_range($dateTS1, $dateTS2); // echo __LINE__.": <pre>"; print_r($holRows); echo "</pre>"; $allDataArr = array(); if ($dateTS1 > 0 && $dateTS2 >= $dateTS1 && isset($usersArr[array_key_first($usersArr)]['name'])){ if ($dateTS2 <= 0){ $dateTS2 = strtotime('tomorrow') - 1; } for ($t=$dateTS1; $t<=$dateTS2; $t+=60*60*24){ foreach ($usersArr as $uID => $uRow){ $key = date('M j, Y', $t)."|". $uID; // echo __line__."-m_master_data- usersArr: " . $key ."<br>"; $allDataArr[$key] = array('dateTS'=>$t, 'userID'=>$uID, 'name'=>$uRow['name'], 'numUsers'=>count($usersArr), 'email'=>$uRow['email'], 'jobTitle'=>$uRow['jobTitle'], 'jobAreaID'=>$uRow['jobAreaID'], 'jobAreaID2'=>$uRow['jobAreaID2'], 'firstDayTS'=>$uRow['firstDayTS'], 'lastDayTS'=>$uRow['lastDayTS'], 'pay_basis'=>$uRow['pay_basis'], 'punch_shift'=>$uRow['punch_shift'], 'punch_meal'=>$uRow['punch_meal'], 'num_brks'=>$uRow['num_brks'], 'paid_brk'=>$uRow['paid_brk'], 'salary'=>$uRow['salary'], 'percent'=>$uRow['percent'], 'basePayRate'=>$uRow['payRate'], 'topupRate'=>$uRow['topupRate'], 'way2payVac'=>$uRow['way2payVac'], 'vacRate'=>$uRow['vacRate'], 'inclPaidVac'=>$uRow['inclPaidVac'], 'inclPaidAway'=>$uRow['inclPaidAway'], 'inclVacInCmsion'=>$uRow['inclVacInCmsion'], 'way2payStat'=>$uRow['way2payStat'], 'when2payStat'=>$uRow['when2payStat'], 'inclStatInHrs'=>$uRow['inclInHrs'], 'inclStatInCmsion'=>$uRow['inclStatInCmsion'], 'alwaysPayStat'=>$uRow['alwaysPayStat'], 'minStatHrs'=>$uRow['minStatHrs']); } } // echo __LINE__.": count=" . count($allDataArr) . "<pre>allDataArr:"; print_r($allDataArr); echo "</pre>"; // echo __line__."-m_master_data- statRows: <pre>"; print_r($statRows); echo "</pre>"; $closedRows = $Schedule_Note->get('', '', $dateTS1, $dateTS2); if (count($closedRows) > 0){ foreach ($closedRows as $key => $closedRow){ if ($closedRow['closed'] == 'Y'){ $closedRows[date('M j, Y', $closedRow['dateTS'])] = date('M j, Y', $closedRow['dateTS']); } unset($closedRows[$key]); } } else { $closedRows = array(); } // echo __line__."-m_master_data- closedRows: <pre>"; print_r($closedRows); echo "</pre>"; // build array of default schedules for specified week; $defScheds = $User_Schedule->search($_SESSION['PID'], '', $dateTS1, $dateTS2, '', ''); $dScheds = array(); foreach ($defScheds as $key => $defSched){ // echo __line__.": ".$defSched['userID'] ." ".array_key_exists($defSched['userID'], $usersArr)."<br>"; if (isset($usersArr[$defSched['userID']])){ // filter out shedules for inactive employees $dScheds[$defSched['effectiveTS']."|".$defSched['userID']] = array('userID'=>$defSched['userID'], 'starts1'=>$defSched['starts1'], 'prepsEnd1'=>$defSched['prepsEnd1'], 'finishes1'=>$defSched['finishes1'], 'starts2'=>$defSched['starts2'], 'prepsEnd2'=>$defSched['prepsEnd2'], 'finishes2'=>$defSched['finishes2'], 'meal_min1'=>$defSched['meal_min1'], 'meal_min2'=>$defSched['meal_min2'], 'effectiveTS'=>$defSched['effectiveTS'], 'expireTS'=>$defSched['expireTS'], 'ave_agree'=>$defSched['ave_agree']); } } // echo __line__." m_master_data dScheds count=".count($dScheds)."<pre> "; print_r($dScheds); echo "</pre>"; // build array of ad hoc schedules for specified time period $ahScheds = array(); $ahScheds = $Schedule_Ad_Hoc->get('',$dateTS1, $dateTS2, '', ''); if (count($ahScheds) > 0){ foreach ($ahScheds as $key => $value){ if (isset($usersArr[$value['userID']])){ $start1 = $value['start1']; if ($value['start1'] != ''){ $start1 = str_pad($value['start1'],4, '0', STR_PAD_LEFT); } $finish1 = $value['finish1']; if ($value['finish1'] != ''){ $finish1 = str_pad($value['finish1'],4, '0', STR_PAD_LEFT); } $start2 = $value['start2']; if ($value['start2'] != ''){ $start2 = str_pad($value['start2'],4, '0', STR_PAD_LEFT); } $finish2 = $value['finish2']; if ($value['finish2'] != ''){ $finish2 = str_pad($value['finish2'],4, '0', STR_PAD_LEFT); } // echo __line__.": ". date('M j, Y', $value['dateTS'])."|".$value['userID']."<br>"; $ahScheds[date('M j, Y', $value['dateTS'])."|".$value['userID']] = array('userID'=>$value['userID'], 'dateTS'=>$value['dateTS'], 'date'=>date('M j, Y', $value['dateTS']), 'ad_hoc_schedID'=>$value['ad_hoc_schedID'], 'start1'=>$start1, 'finish1'=>$finish1, 'start2'=>$start2, 'finish2'=>$finish2, 'meal_min1'=>$value['meal_min1'], 'meal_min2'=>$value['meal_min2'], 'comment'=>$value['comment']); } unset($ahScheds[$key]); } } // echo "<pre>_m_master_data ".__line__." ahScheds ".count($ahScheds)." "; print_r($ahScheds); echo "</pre>"; // echo __line__.": m_master_data saRows count=".count($saRows)."<pre> "; print_r($saRows); echo "</pre>"; for($t = $dateTS1; $t <= $dateTS2; $t += 60*60*24){ // foreach ($dScheds as $dsKey => $dSched){ foreach ($usersArr as $uID => $uRow){ $key = date('M j, Y', $t)."|" . $uID; //populate allDataArr with default schedule foreach ($defScheds as $dKey => $dSched){ if ($dSched['userID'] == $uID && ($dSched['effectiveTS'] <= $t && ($dSched['expireTS'] >= $t || $dSched['expireTS'] <= 0))){ $dayNum = date('w', $t); // $key = date('M j, Y', $t)."|".$dScheds[$dsKey]['userID']; $allDataArr[$key]['ave_agree'] = $dSched['ave_agree']; $starts1arr = array(); if ($dSched['starts1'] != ''){ $starts1arr = explode("|", $dSched['starts1']); } $prepsEnd1arr = array(); if ($dSched['prepsEnd1'] != ''){ $prepsEnd1arr = explode("|", $dSched['prepsEnd1']); } $finishes1Arr = array(); if ($dSched['finishes1'] != ''){ $finishes1Arr = explode("|", $dSched['finishes1']); } $starts2arr = array(); if ($dSched['starts2'] != ''){ $starts2arr = explode("|", $dSched['starts2']); } $finishes2Arr = array(); if ($dSched['finishes2'] != ''){ $finishes2Arr = explode("|", $dSched['finishes2']); } $prepsEnd2arr = array(); if ($dSched['prepsEnd2'] != ''){ $prepsEnd2arr = explode("|", $dSched['prepsEnd2']); } $meal_min1Arr = array(); if ($dSched['meal_min1'] != ''){ $meal_min1Arr = explode("|", $dSched['meal_min1']); } $meal_min2Arr = array(); if ($dSched['meal_min2'] != ''){ $meal_min2Arr = explode("|", $dSched['meal_min2']); } if (isset($starts1arr[$dayNum])){ $allDataArr[$key]['SHD_DF-start1'] = $starts1arr[$dayNum]; } else { $allDataArr[$key]['SHD_DF-start1'] = ''; } if (isset($prepsEnd1arr[$dayNum])){ $allDataArr[$key]['SHD_DF-prepsEnd1'] = $prepsEnd1arr[$dayNum]; } else { $allDataArr[$key]['SHD_DF-prepsEnd1'] = ''; } if (isset($finishes1Arr[$dayNum])){ $allDataArr[$key]['SHD_DF-finish1'] = $finishes1Arr[$dayNum]; } else { $allDataArr[$key]['SHD_DF-finish1'] = ''; } if (isset($starts2arr[$dayNum])){ $allDataArr[$key]['SHD_DF-start2'] = $starts2arr[$dayNum]; } else { $allDataArr[$key]['SHD_DF-start2'] = ''; } if (isset($prepsEnd2arr[$dayNum])){ $allDataArr[$key]['SHD_DF-prepsEnd2'] = $prepsEnd2arr[$dayNum]; } else { $allDataArr[$key]['SHD_DF-prepsEnd2'] = ''; } if (isset($finishes2Arr[$dayNum])){ $allDataArr[$key]['SHD_DF-finish2'] = $finishes2Arr[$dayNum]; } else { $allDataArr[$key]['SHD_DF-finish2'] = ''; } if (isset($meal_min1Arr[$dayNum])){ $allDataArr[$key]['SHD_DF-meal_min1'] = $meal_min1Arr[$dayNum]; } else { $allDataArr[$key]['SHD_DF-meal_min1'] = 0; } if (isset($meal_min2Arr[$dayNum])){ $allDataArr[$key]['SHD_DF-meal_min2'] = $meal_min2Arr[$dayNum]; } else { $allDataArr[$key]['SHD_DF-meal_min2'] = 0; } // office is not closed for the day if (!isset($closedRows[date('M j, Y', $t)])){ $allDataArr[$key]['office'] = 'open'; } else { $allDataArr[$key]['office'] = 'closed'; } } } } // echo __line__."<pre>allDataArr get_schedule: "; print_r($allDataArr); echo "</pre>"; foreach ($usersArr as $uID => $uRow){ //populate allDataArr with ad hoc schedule $key = date('M j, Y', $t)."|".$uID; if (isset($ahScheds[$key]['ad_hoc_schedID'])){ $allDataArr[$key]['SHD_AH-ID'] = $ahScheds[$key]['ad_hoc_schedID']; } else { $allDataArr[$key]['SHD_AH-ID'] = ''; } if (isset($ahScheds[$key]['start1'])){ $allDataArr[$key]['SHD_AH-start1'] = $ahScheds[$key]['start1']; } else if (!isset($allDataArr[$key]['start1'])){ $allDataArr[$key]['SHD_AH-start1'] = ''; } if (isset($ahScheds[$key]['finish1'])){ $allDataArr[$key]['SHD_AH-finish1'] = $ahScheds[$key]['finish1']; } else if (!isset($allDataArr[$key]['finish1'])){ $allDataArr[$key]['SHD_AH-finish1'] = ''; } if (isset($ahScheds[$key]['start2'])){ $allDataArr[$key]['SHD_AH-start2'] = $ahScheds[$key]['start2']; } else if (!isset($allDataArr[$key]['start2'])){ $allDataArr[$key]['SHD_AH-start2'] = ''; } if (isset($ahScheds[$key]['finish2'])){ $allDataArr[$key]['SHD_AH-finish2'] = $ahScheds[$key]['finish2']; } else if (!isset($allDataArr[$key]['finish2'])){ $allDataArr[$key]['SHD_AH-finish2'] = ''; } if (isset($ahScheds[$key]['meal_min1'])){ $allDataArr[$key]['SHD_AH-meal_min1'] = $ahScheds[$key]['meal_min1']; } else if (!isset($allDataArr[$key]['meal_min1'])){ $allDataArr[$key]['SHD_AH-meal_min1'] = ''; } if (isset($ahScheds[$key]['meal_min2'])){ $allDataArr[$key]['SHD_AH-meal_min2'] = $ahScheds[$key]['meal_min2']; } else if (!isset($allDataArr[$key]['meal_min2'])){ $allDataArr[$key]['SHD_AH-meal_min2'] = ''; } if (isset($ahScheds[$key]['comment'])){ $allDataArr[$key]['SHD_AH-comment'] = $ahScheds[$key]['comment']; } else { $allDataArr[$key]['SHD_AH-comment'] = ''; } if (isset($holRows[date('M j, Y', $t)])){ $allDataArr[$key]['holName'] = $holRows[date('M j, Y', $t)]['holName']; $allDataArr[$key]['holIsStat'] = $holRows[date('M j, Y', $t)]['stat']; $allDataArr[$key]['holIsObserved'] = $holRows[date('M j, Y', $t)]['observed']; $allDataArr[$key]['holPercentPay'] = $holRows[date('M j, Y', $t)]['percent_pay']; } else { $allDataArr[$key]['holName'] = ''; $allDataArr[$key]['holIsStat'] = ''; $allDataArr[$key]['holIsObserved'] = ''; $allDataArr[$key]['holPercentPay'] = ''; } } } // echo "<br>".__line__."-m_master_data: (get_schedule) allDataArr count=" . count($allDataArr) ."<pre>"; print_r($allDataArr); echo "</pre>"; foreach ($allDataArr as $key => $row){ $finish1TS = 0; $prepsEnd1TS = 0; $start1TS = 0; $finish2TS = 0; $prepsEnd2TS = 0; $start2TS = 0; $prodHrs = 0; $netProdHrs = 0; // echo __LINE__.": " . $key . " | " . isset($saRows[$key]) ."<br>"; // calculate grossHrs, meal_min, netHrs & target from scheduled hours $SHD_meal_min1 = 0; $SHD_meal_min2 = 0; if ($row['SHD_AH-ID'] > 0){ $start1TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_AH-start1']); $SHD_meal_min1 = $row['SHD_AH-meal_min1']; $finish1TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_AH-finish1']); $start2TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_AH-start2']); $SHD_meal_min2 = $row['SHD_AH-meal_min2']; $finish2TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_AH-finish2']); } else if (isset($row['SHD_DF-start1'])){ $start1TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_DF-start1']); $SHD_meal_min1 = $row['SHD_DF-meal_min1']; $finish1TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_DF-finish1']); $start2TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_DF-start2']); $SHD_meal_min2 = $row['SHD_DF-meal_min2']; $finish2TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_DF-finish2']); } if (isset($row['SHD_DF-prepsEnd1']) && $row['SHD_DF-prepsEnd1'] > 0){ $prepsEnd1TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_DF-prepsEnd1']); } if (isset($row['SHD_DF-prepsEnd2']) && $row['SHD_DF-prepsEnd2'] > 0){ $prepsEnd2TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_DF-prepsEnd2']); } $SHD_grossHrs = round((($finish1TS - $start1TS) + ($finish2TS - $start2TS))/3600, 2) ; $allDataArr[$key]['SHD_mealHrs'] = (floatval($SHD_meal_min1) + floatval($SHD_meal_min2)) / 60; $SHD_netHrs = round($SHD_grossHrs - (floatval($SHD_meal_min1) + floatval($SHD_meal_min2)) / 60, 2); $SHD_payableHrs = $SHD_netHrs; if ($row['paid_brk'] == 'yes'){ $SHD_payableHrs = $SHD_grossHrs; } if (isset($holRows[date('M j, Y', $row['dateTS'])])){ if ($holRows[date('M j, Y', $row['dateTS'])]['stat'] == 'yes' || $holRows[date('M j, Y', $row['dateTS'])]['percent_pay'] > 0 || $holRows[date('M j, Y', $row['dateTS'])]['observed'] == 'yes' || isset($closedRows[date('M j, Y', $row['dateTS'])])){ $allDataArr[$key]['SHD_payableHrs'] = 0; $allDataArr[$key]['SHD_grossHrs'] = 0; $allDataArr[$key]['SHD_netHrs'] = 0; } } else { $allDataArr[$key]['SHD_payableHrs'] = $SHD_payableHrs; $allDataArr[$key]['SHD_grossHrs'] = $SHD_grossHrs; $allDataArr[$key]['SHD_netHrs'] = $SHD_netHrs; if ($SHD_meal_min1 > 0){ $allDataArr[$key]['SHD_mealHrs1'] = $SHD_meal_min1 / 60; } else { $allDataArr[$key]['SHD_mealHrs1'] = 0; } if ($SHD_meal_min2 > 0){ $allDataArr[$key]['SHD_mealHrs2'] = $SHD_meal_min2 / 60; } else { $allDataArr[$key]['SHD_mealHrs2'] = 0; } } } //========== away time =============== $awayTypesArr = $Pr_Away_Types->get_by_id('', '', 'Unhide', ''); // echo __line__.": m_master_data saRows count=<pre> "; print_r($awayTypesArr); echo "</pre>"; $saRows = array(); $saRows = $Staff_Away->search($userID, $dateTS1, $dateTS2, '', '', '', '', ''); // echo __line__.": m_master_data saRows <pre> "; print_r($saRows); echo "</pre>"; foreach ($saRows as $key => $saRow){ for ($t = $dateTS1 + 3600; $t <= $dateTS2; $t += 60*60*24){ $newKey = date('M j, Y', $t)."|".$saRow['userID']; if (isset($usersArr[$saRow['userID']]) && $saRow['startTS'] - 3600 <= $t && $saRow['endTS'] >= $t && $saRow['status'] == 'confirmed'){ if (isset($saRows[$newKey])){ $saRows[$newKey]['stAwayID'] .= "|".$saRow['stAwayID']; $saRows[$newKey]['awayTypeID'] .= "|".$saRow['awayTypeID']; $saRows[$newKey]['awayType'] .= ", ".$awayTypesArr[$saRow['awayTypeID']]['typeName']; $saRows[$newKey]['awayPaidUnpaid'] .= "|".$awayTypesArr[$saRow['awayTypeID']]['paid']; $saRows[$newKey]['hours'] .= "|".$saRow['hours']; $saRows[$newKey]['note'] .= "|".$saRow['note']; $saRows[$newKey]['bankedTimeUsed'] .= "|".$saRow['bankedTimeUsed']; if ($awayTypesArr[$saRow['awayTypeID']]['typeName'] == 'Vacation'){ $saRows[$newKey]['vacationPay'] .= "|" . $saRow['hours']; } else { $saRows[$newKey]['vacationPay'] .= "|" . 0; } } else { $saRows[$newKey] = array('stAwayID'=>$saRow['stAwayID'], 'awayTypeID'=>$saRow['awayTypeID'], 'awayType'=>$awayTypesArr[$saRow['awayTypeID']]['typeName'], 'awayPaidUnpaid'=>$awayTypesArr[$saRow['awayTypeID']]['paid'], 'hours'=>$saRow['hours'], 'note'=>$saRow['note'], 'bankedTimeUsed'=>$saRow['bankedTimeUsed'], ); if ($awayTypesArr[$saRow['awayTypeID']]['typeName'] == 'Vacation'){ $saRows[$newKey]['vacationPay'] = $saRow['hours']; } else { $saRows[$newKey]['vacationPay'] = 0; } } } } unset($saRows[$key]); } // echo __line__.": m_master_data saRows <pre> "; print_r($saRows); echo "</pre>"; // === get number of days scheduled for each away request to divide into bankedTimeUsed $stAwayID = 0; $awayDayCount_arr = array(); foreach ($saRows as $key => $saRow){ if (isset($awayDayCount_arr[$saRow['stAwayID']])){ $awayDayCount_arr[$saRow['stAwayID']]++; } else { $awayDayCount_arr[$saRow['stAwayID']] = 1; } } // echo "<br>".__line__."-m_master_data: (get_schedule) allDataArr count=" . count($allDataArr) ."<pre>"; print_r($allDataArr); echo "</pre>"; foreach ($allDataArr as $key => $row){ if (isset($saRows[$key])){ $allDataArr[$key]['awayPaid'] = 0; $allDataArr[$key]['awayUnpaid'] = 0; $allDataArr[$key]['awayTypeID'] = $saRows[$key]['awayTypeID']; $allDataArr[$key]['awayType'] = $saRows[$key]['awayType']; if (strpos($saRows[$key]['stAwayID'], "|") !== false){ // multiple entries for the day $awPaidUnpaid_arr = explode('|', $saRows[$key]['awayPaidUnpaid']); $awHours_arr = explode('|', $saRows[$key]['hours']); foreach ($awPaidUnpaid_arr as $k => $pay){ if ($pay == 'paid'){ if (floatval($awHours_arr[$k]) > 0){ $allDataArr[$key]['awayPaid'] += floatval($awHours_arr[$k]); } else { // use scheduled hours $allDataArr[$key]['awayPaid'] = $allDataArr[$key]['SHD_payableHrs']; } } if ($pay == 'unpaid'){ if (floatval($awHours_arr[$k]) > 0){ $allDataArr[$key]['awayUnpaid'] += floatval($awHours_arr[$k]); } else { // use scheduled hours $allDataArr[$key]['awayUnpaid'] = $allDataArr[$key]['SHD_payableHrs']; } } } } else { $allDataArr[$key]['awayPaidUnpaid'] = $saRows[$key]['awayPaidUnpaid']; $allDataArr[$key]['vacationPay'] = $saRows[$key]['vacationPay']; if ($saRows[$key]['awayPaidUnpaid'] == 'paid' && $allDataArr[$key]['SHD_payableHrs'] > 0){ // time way is paid on days where employee is scheduled if ($saRows[$key]['hours'] > 0){ // use specified hours away $allDataArr[$key]['awayPaid'] = $saRows[$key]['hours']; } else { // use scheduled hours $allDataArr[$key]['awayPaid'] = $allDataArr[$key]['SHD_payableHrs']; } } else if ($saRows[$key]['awayPaidUnpaid'] == 'unpaid' && $allDataArr[$key]['SHD_payableHrs'] > 0){ if ($saRows[$key]['hours'] > 0){ $allDataArr[$key]['awayUnpaid'] = $saRows[$key]['hours']; } else if ($saRows[$key]['hours'] <= 0){ // use scheduled hours $allDataArr[$key]['awayUnpaid'] = $allDataArr[$key]['SHD_payableHrs']; } } } // echo __line__.": " . $saRows[$key]['bankedTimeUsed'] . " | " . $awayDayCount_arr[$saRows[$key]['stAwayID']] . " | <pre>"; print_r($awayDayCount_arr); echo "</pre> key=" . $key. "<br>"; if ($saRows[$key]['bankedTimeUsed'] > 0 && isset($awayDayCount_arr[$saRows[$key]['stAwayID']])){ $saRows[$key]['bankedTimeUsed'] = $saRows[$key]['bankedTimeUsed'] / $awayDayCount_arr[$saRows[$key]['stAwayID']]; } $allDataArr[$key]['awayHours'] = $saRows[$key]['hours']; $allDataArr[$key]['awayFromBank'] = $saRows[$key]['bankedTimeUsed']; $allDataArr[$key]['awayComment'] = $saRows[$key]['note']; if ($allDataArr[$key]['awayPaid'] >= $saRows[$key]['bankedTimeUsed']){ $allDataArr[$key]['awayPaid'] = round($allDataArr[$key]['awayPaid'] - $saRows[$key]['bankedTimeUsed'], 2); } else { $allDataArr[$key]['awayFromBank'] = $allDataArr[$key]['awayPaid']; } $allDataArr[$key]['ad_hoc_schedID'] = ''; } else { $allDataArr[$key]['awayType'] = ''; $allDataArr[$key]['awayPaidUnpaid'] = ''; $allDataArr[$key]['awayPaid'] = '0'; $allDataArr[$key]['awayUnpaid'] = '0'; $allDataArr[$key]['awayHours'] = '0'; $allDataArr[$key]['awayFromBank'] = '0'; $allDataArr[$key]['awayComment'] = ''; $allDataArr[$key]['vacationPay'] = 0; } } } // echo __line__.": m_master_data count=" . count($allDataArr) . "<pre>"; print_r($allDataArr); echo "</pre>"; return $allDataArr; } // end get_schedule method //===================================================================================================== //===================================================================================================== public function get_punch_hx($userID, $jobAreaID, $pay_basis, $punch_shift, $dateTS1, $dateTS2, $orderBy){ $Punch_Clock = new Punch_Clock; $Punch_Cx = new Punch_Cx; $Staff_Away = new Staff_Away; $Pr_Away_Types = new Pr_Away_Types; $Users = new Users(); $Pr_Closures = new Pr_Closures; $data = array(); date_default_timezone_set($_SESSION['timeZone']); if ($dateTS1 <= 0){ $dateTS1 = $_SESSION['ppStartTS']; $dateTS2 = $_SESSION['ppEndTS']; } // echo __LINE__."==========: (" . $dateTS1.") " . date('His M j, Y', $dateTS1)." - " . date('His M j, Y', $dateTS2) ." userID = ". $userID ."<br>"; $usersArr = $Users->search($_SESSION['PID'], $userID, '', '', '', '', $jobAreaID, $dateTS1, $dateTS2, $pay_basis, $punch_shift, $orderBy); $holRows = $Pr_Closures->get_date_range($dateTS1, $dateTS2); if ($userID > 0){ $temp = $usersArr; $usersArr = array(); $usersArr[$userID] = $temp; $temp = array(); } // echo __line__."-m_master_data- usersArr: " . count($usersArr)."<pre>"; print_r($usersArr); echo "</pre>"; // $awayTypesArr = $Pr_Away_Types->get_4_menu('', '', 'Unhide', 'typeName'); $awayTypesArr = $Pr_Away_Types->get_by_id('', '', 'Unhide', 'typeName'); // echo __line__."-m_master_data- awayTypesArr: " . count($awayTypesArr)."<pre>"; print_r($awayTypesArr); echo "</pre>"; $saRows = array(); $saRows = $Staff_Away->search('', $dateTS1, $dateTS2, '', '', '', '', ''); foreach ($saRows as $key => $saRow){ for ($t = $dateTS1 + 3600; $t <= $dateTS2; $t += 60*60*24){ // echo __LINE__.": ".$saRow['userID']." : ". date('His M j', $t) ." | " . date('His M j', $saRow['startTS']) . " - " . date('His M j', $saRow['endTS'])."<br>"; if (isset($usersArr[$saRow['userID']]) && $saRow['startTS'] - 3600 <= $t && $saRow['endTS'] >= $t && $saRow['status'] == 'confirmed'){ $saRows[date('M j, Y', $t)."|".$saRow['userID']] = array('stAwayID'=>$saRow['stAwayID'], 'userID'=>$saRow['userID'], 'awayType'=>$awayTypesArr[$saRow['awayTypeID']]['typeName'], 'awayPaidUnpaid'=>$awayTypesArr[$saRow['awayTypeID']]['paid'], 'status'=>$saRow['status'], 'hours'=>$saRow['hours'], 'note'=>$saRow['note'], 'date'=>date('His M j', $saRow['startTS'])."-".date('His M j', $saRow['endTS']), 'startTS'=>$saRow['startTS'], 'endTS'=>$saRow['endTS'], 'bankedTimeUsed'=>$saRow['bankedTimeUsed'], ); } } unset($saRows[$key]); } // echo "<pre>_m_master_data ".__line__." saRows ".count($saRows); print_r($saRows); echo "</pre>"; // echo __LINE__.": ". $dateTS1." = " .date('g:i M j/y', $dateTS1)." - " . $dateTS2 . " = " . date('g:i M j/y', $dateTS2)." <br> "; for ($t=$dateTS1; $t<=$dateTS2; $t+= 60*60*24){ // echo __LINE__.": t=". $t ." = ". date('g:i M j/y', $t)." | " . $dateTS1." = " .date('g:i M j/y', $dateTS1)." - " . $dateTS2 . " = " . date('g:i M j/y', $dateTS2)." <br> "; foreach ($usersArr as $uID => $uRow){ // echo " (". __line__." ".$uID .")<br>"; $key = date('M j, Y', $t)."|". $uID; $data[$key] = $uRow; $data[$key] = $data[$key] + array('dateTS'=>$t, 'punchID'=>0, 'PCH_inShift1'=>0, 'PCH_outShift1'=>0, 'PCH_outMeal1'=>0, 'PCH_inMeal1'=>0, 'PCH_outMeal2'=>0, 'PCH_inMeal2'=>0, 'PCH_inShift2'=>0, 'PCH_outShift2'=>0, 'punchcxID'=>0, 'PCX_inShift1'=>0, 'PCX_outShift1'=>0, 'PCX_outMeal1'=>0, 'PCX_inMeal1'=>0, 'PCX_outMeal2'=>0, 'PCX_inMeal2'=>0, 'PCX_inShift2'=>0, 'PCX_outShift2'=>0, 'PCH_comment'=>'', 'IS1jobAreaID'=>0, 'IM1jobAreaID'=>0, 'IS2jobAreaID'=>0, 'IM2jobAreaID'=>0); } if (isset($holRows[date('M j, Y', $t)])){ $data[$key]['holName'] = $holRows[date('M j, Y', $t)]['holName']; $data[$key]['holIsStat'] = $holRows[date('M j, Y', $t)]['stat']; $data[$key]['holIsObserved'] = $holRows[date('M j, Y', $t)]['observed']; $data[$key]['holPercentPay'] = $holRows[date('M j, Y', $t)]['percent_pay']; } else { $data[$key]['holName'] = ''; $data[$key]['holIsStat'] = ''; $data[$key]['holIsObserved'] = ''; $data[$key]['holPercentPay'] = ''; } } // echo __line__.": master_data: <pre>"; print_r($data);echo "</pre>"; $punchRows = $Punch_Clock->search($userID, $dateTS1, $dateTS2, '', '', 'dateTS'); // replace keys foreach ($punchRows as $key => $punchRow){ $punchRows[date('M j, Y', $punchRow['dateTS']) . "|" . $punchRow['userID']] = $punchRow; unset($punchRows[$key]); } // echo __line__."-m_master_data: userID=".$userID." punchRows<pre>"; print_r($punchRows['Mar 28, 2024|613']); echo "</pre>"; $cxRows = $Punch_Cx->search($userID, $dateTS1, $dateTS2, '', '', '', '', '', 'dateTS DESC'); // get all corrected punches for the time span - most recent first // replace keys foreach ($cxRows as $key => $cxRow){ // filter out all but most recent punches for each day-punch combination if (!isset($cxRows[date('M j, Y', $cxRow['dateTS']) . "|" . $cxRow['userID']][$cxRow['whichPunch']])){ $cxRows[date('M j, Y', $cxRow['dateTS']) . "|" . $cxRow['userID']][$cxRow['whichPunch']] = $cxRow; } unset($cxRows[$key]); } // echo __line__.": <pre>"; print_r($data['Mar 28, 2024|613']); echo "</pre>"; foreach ($data as $key => $row){ if (isset($punchRows[$key]['punchID'])){ // echo __LINE__."<pre>"; print_r($punchRows[$key]); echo '</pre>'; $data[$key]['punchID'] = $punchRows[$key]['punchID']; if (strlen($punchRows[$key]['inShift1']) > 1){ $data[$key]['PCH_inShift1'] = str_pad($punchRows[$key]['inShift1'], 4, '0', STR_PAD_LEFT); } if (strlen($punchRows[$key]['outShift1']) > 1){ $data[$key]['PCH_outShift1'] = str_pad($punchRows[$key]['outShift1'], 4, '0', STR_PAD_LEFT); } if (strlen($punchRows[$key]['outMeal1']) > 1){ $data[$key]['PCH_outMeal1'] = str_pad($punchRows[$key]['outMeal1'], 4, '0', STR_PAD_LEFT); } if (strlen($punchRows[$key]['inMeal1']) > 1){ $data[$key]['PCH_inMeal1'] = str_pad($punchRows[$key]['inMeal1'], 4, '0', STR_PAD_LEFT); } if (strlen($punchRows[$key]['outMeal2']) > 1){ $data[$key]['PCH_outMeal2'] = str_pad($punchRows[$key]['outMeal2'], 4, '0', STR_PAD_LEFT); } if (strlen($punchRows[$key]['inMeal2']) > 1){ $data[$key]['PCH_inMeal2'] = str_pad($punchRows[$key]['inMeal2'], 4, '0', STR_PAD_LEFT); } if (strlen($punchRows[$key]['inShift2']) > 1){ $data[$key]['PCH_inShift2'] = str_pad($punchRows[$key]['inShift2'], 4, '0', STR_PAD_LEFT); } if (strlen($punchRows[$key]['outShift2']) > 1){ $data[$key]['PCH_outShift2'] = str_pad($punchRows[$key]['outShift2'], 4, '0', STR_PAD_LEFT); } $data[$key]['PCH_comment'] = $punchRows[$key]['comment']; $data[$key]['IS1jobAreaID'] = $punchRows[$key]['IS1jobAreaID']; $data[$key]['IM1jobAreaID'] = $punchRows[$key]['IM1jobAreaID']; $data[$key]['IS2jobAreaID'] = $punchRows[$key]['IS2jobAreaID']; $data[$key]['IM2jobAreaID'] = $punchRows[$key]['IM2jobAreaID']; } // echo __line__.": <pre>"; print_r($data['Mar 28, 2024|613']); echo "</pre>"; // echo __line__."-m_master_data: key=" . $key . ", cxRows ". count($cxRows)."<pre>"; print_r($cxRows); echo "</pre>"; if (isset($cxRows[$key])){ foreach ($cxRows[$key] as $whichPunch => $cxRow){ // echo __line__." whichPunch=" . $whichPunch ." - " . $cxRow['punchTime'] . "<br>"; $data[$key]['PCX_' . $whichPunch] = $cxRow['punchTime']; if ($data[$key]['PCX_' . $whichPunch] == ''){ $data[$key]['PCX_' . $whichPunch] = 0; } $data[$key]["XID_". $whichPunch] = $cxRow['punchcxID']; $data[$key]["XjID_" . $whichPunch] = $cxRow['jobAreaID']; } } } // echo __line__."-m_master_data: data count=" . count($data) . "<pre>"; print_r($data['Mar 28, 2024|613']); echo "</pre>"; // calculate duration of punched meal breaks foreach ($data as $key => $row){ $mealHrs = 0; $mealHrs1 = 0; $mealHrs2 = 0; $inShift1 = 0; if (isset($row['XID_inShift1'])){ $inShift1 = strtotime($row['PCX_inShift1']); } else if ($row['PCH_inShift1'] > 0){ $inShift1 = strtotime($row['PCH_inShift1']); } $outShift1 = 0; if (isset($row['XID_outShift1'])){ $outShift1 = strtotime($row['PCX_outShift1']); } else if ($row['PCH_outShift1'] > 0){ $outShift1 = strtotime($row['PCH_outShift1']); } $grossHrs = 0; if ($outShift1 > 0 && $inShift1 > 0 && $inShift1 < $outShift1){ $grossHrs = $outShift1 - $inShift1; } $inShift2 = 0; if (isset($row['XID_inShift2'])){ $inShift2 = strtotime($row['PCX_inShift2']); } else if ($row['PCH_inShift2'] > 0){ $inShift2 = strtotime($row['PCH_inShift2']); } $outShift2 = 0; if (isset($row['XID_outShift2'])){ $outShift2 = strtotime($row['PCX_outShift2']); } else if ($row['PCH_outShift2'] > 0){ $outShift2 = strtotime($row['PCH_outShift2']); } if ($outShift2 > 0 && $inShift2 > 0 && $inShift2 < $outShift2){ $grossHrs += ($outShift2 - $inShift2); } $grossHrs = round(($grossHrs) / 3600, 2); $outMeal1 = 0; if (isset($row['XID_outMeal1'])){ $outMeal1 = strtotime($row['PCX_outMeal1']); } else if ($row['PCH_outMeal1'] > 0){ $outMeal1 = strtotime($row['PCH_outMeal1']); } $inMeal1 = 0; if (isset($row['XID_inMeal1'])){ $inMeal1 = strtotime($row['PCX_inMeal1']); } else if ($row['PCH_inMeal1'] > 0){ $inMeal1 = strtotime($row['PCH_inMeal1']); } if ($inMeal1 > $outMeal1 && $outMeal1 > 0){ $mealHrs1 = round(($inMeal1 - $outMeal1) / 3600, 2); } $outMeal2 = 0; if (isset($row['XID_outMeal2'])){ $outMeal2 = strtotime($row['PCX_outMeal2']); } else if ($row['PCH_outMeal2'] > 0){ $outMeal2 = strtotime($row['PCH_outMeal2']); } $inMeal2 = 0; if (isset($row['XID_inMeal2'])){ $inMeal2 = strtotime($row['PCX_inMeal2']); } else if ($row['PCH_inMeal2'] > 0){ $inMeal2 = strtotime($row['PCH_inMeal2']); } if ($inMeal2 > $outMeal2 && $outMeal2 > 0){ $mealHrs2 = round(($inMeal2 - $outMeal2) / 3600, 2); } $data[$key]['punchAlert'] = ''; if (($inShift1 > 0 && floatval($outShift1) < floatval($inShift1)) || ($inShift2 > 0 && $outShift2 < $inShift2) || ($outMeal1 > 0 && substr($inMeal1, 0, 4) < substr($outMeal1, 0, 4)) || ($outMeal2 > 0 && substr($inMeal2, 0, 4) < substr($outMeal2, 0, 4))){ $data[$key]['punchAlert'] = '!Punch Error!'; } $data[$key]['mealHrs'] = $mealHrs1 + $mealHrs2; $data[$key]['mealHrs1'] = $mealHrs1; $data[$key]['mealHrs2'] = $mealHrs2; $data[$key]['PCH_grossHrs'] = $grossHrs; $data[$key]['PCH_netHrs'] = 0; if ($grossHrs > 0){ $data[$key]['PCH_netHrs'] = $grossHrs - ($mealHrs1 + $mealHrs2); } $data[$key]['PCH_payableHrs'] = $grossHrs; if (isset($row['paid_brk']) && $row['paid_brk'] == 'no' && $grossHrs > 0){ $data[$key]['PCH_payableHrs'] = $grossHrs - ($mealHrs1 + $mealHrs2); } // //========== away time =============== if (isset($saRows[$key])){ $data[$key]['awayType'] = $saRows[$key]['awayType']; $data[$key]['awayPaidUnpaid'] = $saRows[$key]['awayPaidUnpaid']; $data[$key]['awayHours'] = $saRows[$key]['hours']; $data[$key]['awayFromBank'] = $saRows[$key]['bankedTimeUsed']; if (isset($data[$key]['awayComment'])){ $data[$key]['awayComment'] .= " " . $saRows[$key]['note']; } else { $data[$key]['awayComment'] = " " . $saRows[$key]['note']; } } else { $data[$key]['awayType'] = ''; $data[$key]['awayPaidUnpaid'] = ''; $data[$key]['awayHours'] = ''; $data[$key]['awayFromBank'] = ''; $data[$key]['awayComment'] = ''; } } // echo __line__."-master_data: get_punch_hx rows=" . count($data) . " <pre>"; print_r($data['Mar 28, 2024|613']); echo "</pre>"; return $data; } // end get_punch_hx method // ======================================================================================== // ======================================================================================== // This method determines if an Away Type has maxHrs (ie. paid sick days). If it does, it gets the total number of awayType confirmed and requested hours the users has used in the current year public function maxHrs_awayUsed($userID, $awayTypeID, $awayStartTS, $awayEndTS){ // Note that startTS and endTS parameters are dates of the away request $Pr_Away_Types = new Pr_Away_Types; $maxHrsRow = $Pr_Away_Types->search($awayTypeID, '', '', '', ''); $maxHrs = $maxHrsRow['maxHrs']; // =========== if ($maxHrs > 0){ // get the number of hours this person has used since their year-start $User_Vacation = new User_Vacation; $vRows = $User_Vacation->search($_SESSION['PID'], $userID, $awayStartTS, $awayEndTS, '', 'effectiveTS DESC'); $userVacCycle = explode('|', $vRows[0]['vacationCycle']); $startTS = mktime(0,0,0,$userVacCycle[0], $userVacCycle[1], date('Y')); // echo __line__.": master <pre>"; print_r($vRows); echo "</pre>"; if ($startTS >= strtotime('now')){ $startTS -= 60*60*24*365; } $endTS = ($startTS + 60*60*24*365) - 1; $Staff_Away = new Staff_Away; $hrsUsedRows = $Staff_Away->search($userID, $startTS, $endTS, '', $awayTypeID, '', '', ''); // echo __line__.": ". count($hrsUsedRows) . " " . date('M j, Y', $startTS). " - " . date('M j, Y', $endTS) ."<br><pre>"; print_r($hrsUsedRows); echo "</pre>"; $hrsUsedArr = array(); // previously use paid away hours $hrsReqstdArr = array(); // hours being requested for this entry $hrsUsed = 0; $hrsReqstd = 0; foreach ($hrsUsedRows as $hrsUsedRow){ if ($hrsUsedRow['hours'] > 0){ if ($hrsUsedRow['status'] == 'confirmed'){ $hrsUsed += $hrsUsedRow['hours']; } else if ($awayStartTS == $hrsUsedRow['startTS'] && $awayEndTS == $hrsUsedRow['endTS'] && $hrsUsedRow['status'] == 'requested'){ $hrsReqstd += $hrsUsedRow['hours']; } } else { // get hours scheduled for entire year $daysAwayArr = $this->get_schedule($userID, '', '', '', $startTS, $endTS, ''); // echo __line__. ": count daysAwayArr " . count($daysAwayArr) ."<br>"; foreach ($daysAwayArr as $key => $values){ // they were scheduled to work on this day and it's not a stat if ($hrsUsedRow['startTS'] <= $values['dateTS'] && $hrsUsedRow['endTS'] > $values['dateTS'] && $hrsUsedRow['status'] == 'confirmed'){ $hrsUsedArr[$key] = $values['SHD_netHrs']; } else if ($awayStartTS <= $values['dateTS'] && $awayEndTS > $values['dateTS'] && $hrsUsedRow['status'] == 'requested'){ $hrsReqstdArr[$key] = $values['SHD_netHrs']; } } } } foreach ($hrsUsedArr as $hrs){ $hrsUsed += $hrs; // echo __line__.": used ". $hrs."<br>"; } foreach ($hrsReqstdArr as $hrs){ $hrsReqstd += $hrs; // echo __line__.": req ". $hrs."<br>"; } } $this->hrsUsed = $hrsUsed; $this->hrsReqstd = $hrsReqstd; $this->startTS = $startTS; return $maxHrs; } public function get_hrsUsed(){ return $this->hrsUsed; } public function get_hrsReqstd(){ return $this->hrsReqstd; } public function get_anniversaryDate(){ return $this->startTS; } //===================================================================================================== //===================================================================================================== // for payroll Hours screen public function get_staff_hours($userID, $jobAreaID, $pay_basis, $punch_shift, $dateTS1, $dateTS2, $orderBy){ $Empl_Standards = new Empl_Standards; $User_Time_Bank = new User_Time_Bank; $Pr_Closures = new Pr_Closures(); $Bank_Time_Request = new Bank_Time_Request(); // $User_Pay_Rate = new User_Pay_Rate(); // $pay_rates_arr = $User_Pay_Rate->search($_SESSION['PID'],'', $dateTS1, $dateTS2, '', ''); // echo __LINE__.": u=" . $userID." | j="; print_r($jobAreaID); echo " | p=". $pay_basis ." dTS1=".date('His M j/y', $dateTS1). " | dTS2=" . date('His M j/y', $dateTS2)." (" . $dateTS2 . ") orderBy=" . $orderBy . "<br>"; date_default_timezone_set($_SESSION['timeZone']); $empSt = $Empl_Standards->get('', $_SESSION['prov'], $dateTS1, $dateTS2); // echo __line__."-m_master_data: empSt<pre>"; print_r($empSt); echo "</pre>"; $_SESSION['workWeekStarts'] = $empSt['week_start']; if ($empSt['week_start'] == 0){ $_SESSION['workWeekEnds'] = 6; } else { $_SESSION['workWeekEnds'] = $empSt['week_start']--; } $punch_arr = $this->get_punch_hx($userID, $jobAreaID, $pay_basis, $punch_shift, $dateTS1, $dateTS2, $orderBy); // echo __line__."-m_master_data: punch_arr " . count($punch_arr) ."<pre>"; print_r($punch_arr); echo "</pre>"; $sched_arr = $this->get_schedule($userID, $jobAreaID, $pay_basis, $punch_shift, $dateTS1, $dateTS2, $orderBy); // echo __line__."-m_master_data: sched_arr " . count($sched_arr) ."<pre>"; print_r($sched_arr); echo "</pre>"; //=== get closures for 6 days prior to, and after pay period to account for closures in lieu of stat holidays $holRows = $Pr_Closures->get_date_range($dateTS1 - (60*60*24*6), $dateTS2 + (60*60*24*6)); $holRows2 = array(); foreach ($holRows as $date => $holRow){ $holName = htmlspecialchars_decode($holRow['holName']); if ($holRow['stat'] != 'yes' && $holRow['observed'] == 'yes'){ $holRows2[$holName]['lieu'] = $date; $holRows2[$holName]['stat'] = ''; $holRows2[$holName]['percent_pay'] = 0; } else if ($holRow['stat'] == 'yes' && $holRow['observed'] != 'yes'){ $holRows2[$holName]['stat'] = $date; $holRows2[$holName]['lieu'] = ''; $holRows2[$holName]['percent_pay'] = 0; } else if ($holRow['stat'] == 'no' && $holRow['observed'] == 'no'){ $holRows2[$holName]['hol'] = $date; // non stat closure $holRows2[$holName]['percent_pay'] = $holRow['percent_pay']; $holRows2[$holName]['lieu'] = ''; } } // has any time been banked in this pay period $bankedTime_arr = $User_Time_Bank->get('', '', $dateTS1, $_SESSION['payDayTS'] + 1); // echo __LINE__."-m_master_data: bankedRows<pre>"; print_r($bankedTime_arr); echo "</pre>"; $all_hours_arr = $sched_arr; // echo __line__.": <pre>"; print_r($all_hours_arr); echo "</pre>"; $totalPaidHrsArr = array(); // for overview report Hours Worked // parse scheduled hours into all_hours_array // parse hours worked into all_hours_arr foreach ($punch_arr as $key => $row){ $all_hours_arr[$key]['PCH_inShift1'] = $row['PCH_inShift1']; if ($row['PCX_inShift1'] > 0){ $all_hours_arr[$key]['PCH_inShift1'] = $row['PCX_inShift1']; } $all_hours_arr[$key]['PCH_outShift1'] = $row['PCH_outShift1']; if ($row['PCX_outShift1'] > 0){ $all_hours_arr[$key]['PCH_outShift1'] = $row['PCX_outShift1']; } $all_hours_arr[$key]['PCH_outMeal1'] = $row['PCH_outMeal1']; if ($row['PCX_outMeal1'] > 0){ $all_hours_arr[$key]['PCH_outMeal1'] = $row['PCX_outMeal1']; } $all_hours_arr[$key]['PCH_inMeal1'] = $row['PCH_inMeal1']; if ($row['PCX_inMeal1'] > 0){ $all_hours_arr[$key]['PCH_inMeal1'] = $row['PCX_inMeal1']; } $all_hours_arr[$key]['PCH_inShift2'] = $row['PCH_inShift2']; if ($row['PCX_inShift2'] > 0){ $all_hours_arr[$key]['PCH_inShift2'] = $row['PCX_inShift2']; } $all_hours_arr[$key]['PCH_outShift2'] = $row['PCH_outShift2']; if ($row['PCX_outShift2'] > 0){ $all_hours_arr[$key]['PCH_outShift2'] = $row['PCX_outShift2']; } $all_hours_arr[$key]['PCH_outMeal2'] = $row['PCH_outMeal2']; if ($row['PCX_outMeal2'] > 0){ $all_hours_arr[$key]['PCH_outMeal2'] = $row['PCX_outMeal2']; } $all_hours_arr[$key]['PCH_inMeal2'] = $row['PCH_inMeal2']; if ($row['PCX_inMeal2'] > 0){ $all_hours_arr[$key]['PCH_inMeal1'] = $row['PCX_inMeal2']; } $all_hours_arr[$key]['PCH_mealHrs'] = $row['mealHrs']; $all_hours_arr[$key]['PCH_grossHrs'] = $row['PCH_grossHrs']; $all_hours_arr[$key]['PCH_netHrs'] = $row['PCH_netHrs']; $all_hours_arr[$key]['PCH_payableHrs'] = $row['PCH_payableHrs']; $all_hours_arr[$key]['PCH_comment'] = $row['PCH_comment']; $all_hours_arr[$key]['punchAlert'] = $row['punchAlert']; if ($all_hours_arr[$key]['punch_meal'] == 'no'){ if ($all_hours_arr[$key]['SHD_AH-ID'] > 0){ $mealHrs = floatval($all_hours_arr[$key]['SHD_AH-meal_min1']) / 60; $mealHrs += floatval($all_hours_arr[$key]['SHD_AH-meal_min2']) / 60; } else { $mealHrs = floatval($all_hours_arr[$key]['SHD_DF-meal_min1']) / 60; $mealHrs += floatval($all_hours_arr[$key]['SHD_DF-meal_min2']) / 60; } if ($row['paid_brk'] == 'no' && $row['PCH_payableHrs'] > 0){ $all_hours_arr[$key]['PCH_netHrs'] -= $mealHrs; $all_hours_arr[$key]['PCH_payableHrs'] -= $mealHrs; } } } // echo __line__."-m_master_data: all_hours_arr count=" . count($all_hours_arr) . "<pre>"; print_r($all_hours_arr); echo "</pre>"; // echo __LINE__.": <pre>"; print_r($holRows2); echo "</pre>"; foreach ($all_hours_arr as $key => $row){ $statRows = array(); foreach ($holRows2 as $holName => $holRow2){ if (date('M j, Y', $row['dateTS']) == $holRow2['stat'] || date('M j, Y', $row['dateTS']) == $holRow2['lieu']){ $function_name = "Stat_Hours_" . $_SESSION['prov']; // echo __LINE__.": " . $function_name . "<br>"; // === calculate stat holiday eligibility for each person === $stat = $this->$function_name($row['userID'], $row['firstDayTS'], strtotime($holRows2[$holName]['stat']), strtotime($holRows2[$holName]['lieu']), $holName, $row['when2payStat']); // echo __LINE__.": <pre>"; print_r($stat); echo "</pre>"; $statRows = array_replace($statRows, $stat); } } if (isset($stat[$key])){ $all_hours_arr[$key]['statHrs'] = $stat[$key]['statHrs']; $all_hours_arr[$key]['eligible'] = $stat[$key]['eligible']; } else { $all_hours_arr[$key]['statHrs'] = ''; $all_hours_arr[$key]['eligible'] = ''; } } if ($all_hours_arr[array_key_first($all_hours_arr)]['userID'] == 805){ echo __line__."-m_master_data: all_hours_arr " . $_SESSION['prov']."<pre>"; print_r($all_hours_arr); echo "</pre>"; } // echo __line__." master [get_staff_hours] userID=". $userID.", jobAreaID=". $jobAreaID.", pay_basis=".$pay_basis.", punch_shift=" . $punch_shift . ", dateTS1=". $dateTS1." (".date('M j, Y', $dateTS1)."), t2=".$dateTS2."<br>"; foreach ($all_hours_arr as $key => $row){ // Stat Holiday Eligibility if ($row['way2payStat'] != 'percent' && $row['statHrs'] > 0){ $all_hours_arr[$key]['statHrs']; if (floatval($row['minStatHrs']) > $row['statHrs']){ $all_hours_arr[$key]['statHrs'] = $row['minStatHrs']; } } $statHrs = $all_hours_arr[$key]['statHrs']; // echo __line__.": " . $key . " - " . $row['statHrs'] . " - " . $statHrs ." [" . $statRows[$key]['eligible'] . "] includeStatInHrs=" . $statRows[$key]['includeStatInHrs'] . "<br>"; $dayPayableTotal = 0; if ($row['pay_basis'] == 'hours'){ if ((isset($row['statHrs']) && $row['inclStatInHrs'] == 'yes' && ($row['eligible'] == '' || $row['alwaysPayStat'] == 'yes'))){ // == any hours worked on the stat + stat eligibility if ($row['when2payStat'] == 'stat'){ $dayPayableTotal = floatval($row['PCH_payableHrs']) + ((floatval($row['holPercentPay']) * floatval($row['statHrs'])) / 100); } else { $dayPayableTotal = floatval($row['PCH_payableHrs']) + floatval($row['statHrs']); } } else if ($row['awayFromBank'] > 0 || ($row['awayType'] != 'Vacation' && $row['awayPaid'] > 0 && $row['inclPaidAway'] == 'yes') || ($row['awayType'] == 'Vacation' && $row['awayPaid'] > 0 && $row['inclPaidVac'] == 'yes')){ // any hours worked + any awayPaid + any bankedTimeTaken $dayPayableTotal = floatval($row['PCH_payableHrs']) + floatval($row['awayPaid'] + floatval($row['awayFromBank'])); } else { $dayPayableTotal = floatval($row['PCH_payableHrs']); } $vacationPay = 0; if ($row['way2payVac'] == 'percent' && $row['awayType'] != 'Vacation'){ $vacationPay = ($dayPayableTotal * $row['vacRate']) / 100; if ($row['inclPaidVac'] == 'yes'){ $dayPayableTotal += $vacationPay; } // echo __line__.": " . $vacationPay ." | " . $dayPayableTotal ."<br>"; $all_hours_arr[$key]['vacationPay'] = $vacationPay; } else if ($row['way2payVac'] == 'percent' && $row['awayType'] == 'Vacation'){ $all_hours_arr[$key]['awayPaid'] = 0; $dayPayableTotal = 0; } $all_hours_arr[$key]['regPayable'] = $dayPayableTotal; $all_hours_arr[$key]['otPayable'] = 0; $all_hours_arr[$key]['totalPaidHrs'] = $dayPayableTotal; // echo __line__.": " . $key . ": dayPayableTotal=" . $dayPayableTotal . ", " . $empSt['reg_hrs_per_day'] . " - " . $row['SHD_payableHrs'] . " ave_agree=" . $row['ave_agree'] . "<br>"; // calculate daily regular and OT for staff on an averaging agreement // if (!isset($row['ave_agree'])){ // echo __line__.": " . $key . "<br>"; // } if ($row['ave_agree'] == 'Y' && $row['holName'] == ''){ if ($row['SHD_payableHrs'] > 0 ){ // they worked extra time less than maxRegHrs but were scheduled for less than MaxRegHrs // all pay is at regular rate. if ($dayPayableTotal > $row['SHD_payableHrs']){ if ($dayPayableTotal <= $empSt['reg_hrs_per_day']){ // echo __line__." dayPayableTotal=" . $dayPayableTotal . ", " . $empSt['reg_hrs_per_day'] . " - " . $row['SHD_payableHrs'] . "<br>"; $all_hours_arr[$key]['regPayable'] = $dayPayableTotal; $all_hours_arr[$key]['otPayable'] = 0; } else { $all_hours_arr[$key]['regPayable'] = $row['SHD_payableHrs']; $all_hours_arr[$key]['otPayable'] = $dayPayableTotal - $row['SHD_payableHrs']; } // they worked extra time & their scheduled day was longer than MaxRegHrs } else if ($dayPayableTotal > $row['SHD_payableHrs'] && $empSt['reg_hrs_per_day'] < $row['SHD_payableHrs']){ // any time over schedule day is OT // echo __line__." dayPayableTotal=" . $dayPayableTotal . ", " . $empSt['reg_hrs_per_day'] . " - " . $row['SHD_payableHrs'] . "<br>"; $all_hours_arr[$key]['regPayable'] = $dayPayableTotal; $all_hours_arr[$key]['otPayable'] = $dayPayableTotal - $row['SHD_payableHrs']; } // echo __line__.": " . $all_hours_arr[$key]['regPayable'] . " - " . $key . "<br>"; } else if ($row['SHD_payableHrs'] <= 0 && $dayPayableTotal > $empSt['reg_hrs_per_day']){ // they are not scheduled to work on this day and they worked longer than maxRegHrs $all_hours_arr[$key]['regPayable'] = $empSt['reg_hrs_per_day']; $all_hours_arr[$key]['otPayable'] = $dayPayableTotal - $empSt['reg_hrs_per_day']; } } else if (($empSt['reg_hrs_per_day'] > 0 && $dayPayableTotal > $empSt['reg_hrs_per_day'] && $row['holName'] == '' && $_SESSION['prov'] != 'NL')){ // calculate daily regular time and OT for staff with no averaging agreement $all_hours_arr[$key]['regPayable'] = $empSt['reg_hrs_per_day']; $all_hours_arr[$key]['otPayable'] = $dayPayableTotal - $empSt['reg_hrs_per_day']; } if ($row['awayType'] != 'Vacation' && $row['awayPaid'] > 0 && $row['way2payVac'] == 'percent' && $row['inclPaidAway'] == 'yes'){ $all_hours_arr[$key]['vacationPay'] += $all_hours_arr[$key]['awayPaid']; } if ($all_hours_arr[$key]['basePayRate'] > 0){ $all_hours_arr[$key]['grossRegPay'] = $all_hours_arr[$key]['regPayable'] * $all_hours_arr[$key]['basePayRate']; $all_hours_arr[$key]['grossOTPay'] = $all_hours_arr[$key]['otPayable'] * $all_hours_arr[$key]['basePayRate'] * 1.5; $all_hours_arr[$key]['grossTotalPay'] = $all_hours_arr[$key]['grossRegPay'] + $all_hours_arr[$key]['grossOTPay']; } else { $all_hours_arr[$key]['grossRegPay'] = ''; $all_hours_arr[$key]['grossOTPay'] = ''; $all_hours_arr[$key]['grossTotalPay'] = ''; } } else { // staff is on salary $all_hours_arr[$key]['regPayable'] = $row['SHD_payableHrs']; $all_hours_arr[$key]['otPayable'] = 0; $all_hours_arr[$key]['totalPaidHrs'] = $row['SHD_payableHrs']; } if (!isset($totalPaidHrsArr[$row['userID']][date('n', $row['dateTS'])])){ $totalPaidHrsArr[$row['userID']][date('n', $row['dateTS'])] = $all_hours_arr[$key]['totalPaidHrs']; } else { $totalPaidHrsArr[$row['userID']][date('n', $row['dateTS'])] += $all_hours_arr[$key]['totalPaidHrs']; } } if ($all_hours_arr[array_key_first($all_hours_arr)]['userID'] == 578){ // echo __line__."-m_master_data: all_hours_arr " . $_SESSION['prov']."<pre>"; print_r($all_hours_arr[array_key_first($all_hours_arr)]); echo "</pre>"; } $this->totalPaidHrsArr = $totalPaidHrsArr; foreach ($all_hours_arr as $key => $rows){ if ($rows['userID'] == 204){ // echo __line__." all_hours_arr<pre>"; print_r($rows); echo "</pre>"; } } // echo __line__."-m_master_data: [all_hours_arr]<pre>"; print_r($all_hours_arr); echo "</pre>"; $weekTotals = array(); $date = ''; $dayCount = 0; $week = 0; foreach ($all_hours_arr as $key => $row){ if (floor($dayCount/$row['numUsers']) > 6 ){ $week++; $dayCount = 0; $date = substr($key, 0, strpos($key, '|')); } // echo __line__.": week=". $week .", day=" . $dayCount .", " . $row['numUsers'] . " - ". $key ." - " . $row['PCH_payableHrs'] . "- ". $weekTotals[$week][$row['userID']]['PCH_payableHrs'] ."<br>"; //========= build array of totals for the week ======== if (!isset($weekTotals[$week][$row['userID']]['name'])){ $weekTotals[$week][$row['userID']]['name'] = $row['name']; $weekTotals[$week][$row['userID']]['ave_agree'] = $row['ave_agree']; $weekTotals[$week][$row['userID']]['pay_basis'] = $row['pay_basis']; $weekTotals[$week][$row['userID']]['punch_shift'] = $row['punch_shift']; $weekTotals[$week][$row['userID']]['punch_meal'] = $row['punch_meal']; $weekTotals[$week][$row['userID']]['paid_brk'] = $row['paid_brk']; $weekTotals[$week][$row['userID']]['way2payStat'] = $row['way2payStat']; $weekTotals[$week][$row['userID']]['when2payStat'] = $row['when2payStat']; $weekTotals[$week][$row['userID']]['inclStatInHrs'] = $row['inclStatInHrs']; $weekTotals[$week][$row['userID']]['way2payVac'] = $row['way2payVac']; $weekTotals[$week][$row['userID']]['inclPaidVac'] = $row['inclPaidVac']; $weekTotals[$week][$row['userID']]['inclPaidAway'] = $row['inclPaidAway']; $weekTotals[$week][$row['userID']]['inclVacInCmsion'] = $row['inclVacInCmsion']; $weekTotals[$week][$row['userID']]['jobAreaID2'] = $row['jobAreaID2']; $weekTotals[$week][$row['userID']]['eligible'] = $row['eligible']; $weekTotals[$week][$row['userID']]['minStatHrs'] = $row['minStatHrs']; $weekTotals[$week][$row['userID']]['inclStatInCmsion'] = $row['inclStatInCmsion']; $weekTotals[$week][$row['userID']]['basePayRate'] = $row['basePayRate']; $weekTotals[$week][$row['userID']]['topupRate'] = $row['topupRate']; } if (isset($weekTotals[$week][$row['userID']]['SHD_grossHrs'])){ $weekTotals[$week][$row['userID']]['SHD_grossHrs'] += floatval($row['SHD_grossHrs']); } else { $weekTotals[$week][$row['userID']]['SHD_grossHrs'] = floatval($row['SHD_grossHrs']); } if (isset($weekTotals[$week][$row['userID']]['SHD_mealHrs'])){ $weekTotals[$week][$row['userID']]['SHD_mealHrs'] += floatval($row['SHD_mealHrs']); } else { $weekTotals[$week][$row['userID']]['SHD_mealHrs'] = floatval($row['SHD_mealHrs']); } if (isset($weekTotals[$week][$row['userID']]['SHD_netHrs'])){ $weekTotals[$week][$row['userID']]['SHD_netHrs'] += floatval($row['SHD_netHrs']); } else { $weekTotals[$week][$row['userID']]['SHD_netHrs'] = floatval($row['SHD_netHrs']); } if (isset($weekTotals[$week][$row['userID']]['SHD_payableHrs'])){ $weekTotals[$week][$row['userID']]['SHD_payableHrs'] += floatval($row['SHD_payableHrs']); } else { $weekTotals[$week][$row['userID']]['SHD_payableHrs'] = floatval($row['SHD_payableHrs']); } if (isset($weekTotals[$week][$row['userID']]['PCH_netHrs'])){ $weekTotals[$week][$row['userID']]['PCH_netHrs'] += floatval($row['PCH_netHrs']); } else if (!isset($weekTotals[$week][$row['userID']]['PCH_netHrs'])){ $weekTotals[$week][$row['userID']]['PCH_netHrs'] = floatval($row['PCH_netHrs']); } if (isset($weekTotals[$week][$row['userID']]['PCH_grossHrs'])){ $weekTotals[$week][$row['userID']]['PCH_grossHrs'] += floatval($row['PCH_grossHrs']); } else if (!isset($weekTotals[$week][$row['userID']]['PCH_grossHrs'])){ $weekTotals[$week][$row['userID']]['PCH_grossHrs'] = floatval($row['PCH_grossHrs']); } if ($row['userID'] == 204){ // echo __line__.": week=" . $week . ", key=" . $key . ", uID=" . $row['userID'] . ", " . $row['PCH_payableHrs'] . " | " . $weekTotals[$week][$row['userID']]['PCH_payableHrs'] . "<br>"; } if (isset($weekTotals[$week][$row['userID']]['PCH_payableHrs'])){ $weekTotals[$week][$row['userID']]['PCH_payableHrs'] += floatval($row['PCH_payableHrs']); } else if (!isset($weekTotals[$week][$row['userID']]['PCH_payableHrs'])){ $weekTotals[$week][$row['userID']]['PCH_payableHrs'] = floatval($row['PCH_payableHrs']); } if (isset($weekTotals[$week][$row['userID']]['PCH_mealHrs'])){ $weekTotals[$week][$row['userID']]['PCH_mealHrs'] += floatval($row['PCH_mealHrs']); } else if (!isset($weekTotals[$week][$row['userID']]['PCH_mealHrs'])){ $weekTotals[$week][$row['userID']]['PCH_mealHrs'] = floatval($row['PCH_mealHrs']); } if ($row['pay_basis'] == 'hours'){ if (isset($weekTotals[$week][$row['userID']]['hrsWorked'])){ $weekTotals[$week][$row['userID']]['hrsWorked'] += floatval($row['PCH_netHrs']); } else if (!isset($weekTotals[$week][$row['userID']]['hrsWorked'])){ $weekTotals[$week][$row['userID']]['hrsWorked'] = floatval($row['PCH_netHrs']); } } else { if (isset($weekTotals[$week][$row['userID']]['hrsWorked'])){ $weekTotals[$week][$row['userID']]['hrsWorked'] += floatval($row['SHD_netHrs']); } else if (!isset($weekTotals[$week][$row['userID']]['hrsWorked'])){ $weekTotals[$week][$row['userID']]['hrsWorked'] = floatval($row['SHD_netHrs']); } } $weekTotals[$week][$row['userID']]['punchAlert'] = ''; if ($row['punchAlert'] != ''){ $weekTotals[$week][$row['userID']]['punchAlert'] = $row['punchAlert']; } if (isset($weekTotals[$week][$row['userID']]['awayPaid'])){ if ($row['way2payVac'] == 'day'){ $weekTotals[$week][$row['userID']]['awayPaid'] += floatval($row['awayPaid']); } else { $weekTotals[$week][$row['userID']]['awayPaid'] += floatval($row['vacationPay']); } } else { if ($row['way2payVac'] == 'day'){ $weekTotals[$week][$row['userID']]['awayPaid'] = floatval($row['awayPaid']); } else if ($row['way2payVac'] == 'percent'){ $weekTotals[$week][$row['userID']]['awayPaid'] = floatval($row['vacationPay']); } } if (isset($weekTotals[$week][$row['userID']]['awayUnpaid'])){ $weekTotals[$week][$row['userID']]['awayUnpaid'] += floatval($row['awayUnpaid']); } else { $weekTotals[$week][$row['userID']]['awayUnpaid'] = floatval($row['awayUnpaid']); } if (isset($weekTotals[$week][$row['userID']]['awayFromBank'])){ $weekTotals[$week][$row['userID']]['awayFromBank'] += floatval($row['awayFromBank']); } else { $weekTotals[$week][$row['userID']]['awayFromBank'] = floatval($row['awayFromBank']); } if ($weekTotals[$week][$row['userID']]['way2payStat'] != 'percent' && $row['statHrs'] > 0){ if (isset($weekTotals[$week][$row['userID']]['statHrs'])){ $weekTotals[$week][$row['userID']]['statHrs'] += floatval($row['statHrs']); $weekTotals[$week][$row['userID']]['eligible'] .= $row['eligible']; $weekTotals[$week][$row['userID']]['minStatHrs'] += $row['minStatHrs']; } else { $weekTotals[$week][$row['userID']]['statHrs'] = floatval($row['statHrs']); $weekTotals[$week][$row['userID']]['eligible'] = $row['eligible']; $weekTotals[$week][$row['userID']]['minStatHrs'] = $row['minStatHrs']; } } else if ($weekTotals[$week][$row['userID']]['way2payStat'] == 'percent' && $row['statHrs'] > 0){ // stat is paid at 4% of total hours if (isset($weekTotals[$week][$row['userID']]['statHrs'])){ $weekTotals[$week][$row['userID']]['statHrs'] += floatval($row['totalPaidHrs'] * .04); $weekTotals[$week][$row['userID']]['eligible'] .= $row['eligible']; $weekTotals[$week][$row['userID']]['minStatHrs'] += $row['minStatHrs']; } else { $weekTotals[$week][$row['userID']]['statHrs'] = floatval($row['totalPaidHrs'] * .04); $weekTotals[$week][$row['userID']]['eligible'] = $row['eligible']; $weekTotals[$week][$row['userID']]['minStatHrs'] = $row['minStatHrs']; } } else { $weekTotals[$week][$row['userID']]['statHrs'] = 0; } if (isset($weekTotals[$week][$row['userID']]['regPayable'])){ $weekTotals[$week][$row['userID']]['regPayable'] += floatval($row['regPayable']); } else { $weekTotals[$week][$row['userID']]['regPayable'] = floatval($row['regPayable']); } if (isset($weekTotals[$week][$row['userID']]['otPayable'])){ $weekTotals[$week][$row['userID']]['otPayable'] += floatval($row['otPayable']); } else { $weekTotals[$week][$row['userID']]['otPayable'] = floatval($row['otPayable']); } if ($row['statHrs'] > 0){ $weekTotals[$week][$row['userID']]['eligible'] = $row['eligible']; } if (isset($weekTotals[$week][$row['userID']]['totalPaidHrs'])){ $weekTotals[$week][$row['userID']]['totalPaidHrs'] += floatval($row['totalPaidHrs']); } else { $weekTotals[$week][$row['userID']]['totalPaidHrs'] = floatval($row['totalPaidHrs']); } // echo __line__.": " . $row['regPayable'] . " - " . $weekTotals[$week][$row['userID']]['regPayable'] ."<br>"; // echo __line__.": " . $weekTotals[$week][$row['userID']]['totalPaidHrs']. " > " . $empSt['reg_hrs_per_wk'] . "<br>"; $dayCount++; } // echo __line__.": <pre>"; print_r($weekTotals); echo "</pre>"; // if there is reg or OT going to time bank -- deduct for totalPayable foreach ($weekTotals as $wk => $wkTotals){ foreach ($wkTotals as $uID => $row){ // add percent stat pay to totalPaidHrs & regPayable if ($row['way2payStat'] == 'percent' && $row['includeInHrs'] == 'yes'){ $weekTotals[$wk][$uID]['regPayable'] += $row['statHrs']; $weekTotals[$wk][$uID]['totalPaidHrs'] += $row['statHrs']; $weekTotals[$wk][$uID]['minStatHrs'] += $row['minStatHrs']; } // === add any weekly overtime ================== $minOTRate = $empSt['minWage'] * 1.5; $rateOfPay = $row['basePayRate'] + $row['topupRate']; // echo __line__ . ": wk=" . $wk .", regPayable= " . $weekTotals[$wk][$uID]['regPayable'] . " - reg_hrs_per_wk=" . $empSt['reg_hrs_per_wk'] . ", minWage=" . $empSt['minWage'] .", " . $minOTRate . ", " . $rateOfPay . "<br>"; if ($weekTotals[$wk][$uID]['regPayable'] > $empSt['reg_hrs_per_wk']){ if ($_SESSION['prov'] != 'NL' || ($_SESSION['prov'] == 'NL' && $weekTotals[$wk][$uID]['regPayable'] > $empSt['reg_hrs_per_wk'] && $minOTRate > $rateOfPay)){ $weekOT = $weekTotals[$wk][$uID]['regPayable'] - $empSt['reg_hrs_per_wk']; $weekTotals[$wk][$uID]['otPayable'] += $weekOT; $weekTotals[$wk][$uID]['regPayable'] = $empSt['reg_hrs_per_wk']; } } } $weekTotals[$wk][$uID]['grossRegPay'] = 0; $weekTotals[$wk][$uID]['grossOTPay'] = 0; $weekTotals[$wk][$uID]['grossTopUpPay'] = 0; $weekTotals[$wk][$uID]['grossTotalPay'] = 0; } foreach ($weekTotals as $wk =>$wkTotals){ foreach ($wkTotals as $uID => $row){ if ($row['basePayRate'] > 0){ $weekTotals[$wk][$uID]['grossRegPay'] = $row['basePayRate'] * $weekTotals[$wk][$uID]['regPayable']; $weekTotals[$wk][$uID]['grossOTPay'] = $row['basePayRate'] * $weekTotals[$wk][$uID]['otPayable'] * 1.5; if ($row['topupRate'] > 0) { $weekTotals[$wk][$uID]['grossTopUpPay'] = $row['topupRate'] * $weekTotals[$wk][$uID]['regPayable']; $weekTotals[$wk][$uID]['grossOTPay'] += $row['topupRate'] * $weekTotals[$wk][$uID]['otPayable'] * 1.5; } else { $weekTotals[$wk][$uID]['grossTopUpPay'] = 0; } $weekTotals[$wk][$uID]['grossTotalPay'] = $weekTotals[$wk][$uID]['grossRegPay'] + $weekTotals[$wk][$uID]['grossOTPay'] + $weekTotals[$wk][$uID]['grossTopUpPay']; } else { $weekTotals[$wk][$uID]['grossRegPay'] = ''; $weekTotals[$wk][$uID]['grossOTPay'] = ''; $weekTotals[$wk][$uID]['grossTotalPay'] = ''; } } } $this->weekTotals = $weekTotals; foreach ($weekTotals as $k => $r){ // echo __line__.': weekTotals ' . $k .": " . array_key_first($r) . "<br>"; } // echo __line__."-m_master_data [get_staffHours] weekTotals: <pre>"; print_r($weekTotals); echo "</pre>"; // ========= BUILD ARRAY OF TOTALS FOR THE PAY PERIOD ================ $payPeriodTotals = array(); foreach ($weekTotals as $wkNum => $wkTot){ foreach ($wkTot as $userID => $wt){ if (!isset($payPeriodTotals[$userID]['SHD_payableHrs'])){ $payPeriodTotals[$userID]['SHD_payableHrs'] = floatval($wt['SHD_payableHrs']); } else { $payPeriodTotals[$userID]['SHD_payableHrs'] += floatval($wt['SHD_payableHrs']); } if (!isset($payPeriodTotals[$userID]['SHD_mealHrs'])){ $payPeriodTotals[$userID]['SHD_mealHrs'] = floatval($wt['SHD_mealHrs']); } else { $payPeriodTotals[$userID]['SHD_mealHrs'] += floatval($wt['SHD_mealHrs']); } if (!isset($payPeriodTotals[$userID]['SHD_netHrs'])){ $payPeriodTotals[$userID]['SHD_netHrs'] = floatval($wt['SHD_netHrs']); } else { $payPeriodTotals[$userID]['SHD_netHrs'] += floatval($wt['SHD_netHrs']); } if (!isset($payPeriodTotals[$userID]['regPayable'])){ $payPeriodTotals[$userID]['name'] = $wt['name']; $payPeriodTotals[$userID]['ave_agree'] = $wt['ave_agree']; $payPeriodTotals[$userID]['basePayRate'] = $wt['basePayRate']; $payPeriodTotals[$userID]['topupRate'] = $wt['topupRate']; $payPeriodTotals[$userID]['pay_basis'] = $wt['pay_basis']; $payPeriodTotals[$userID]['punch_shift'] = $wt['punch_shift']; $payPeriodTotals[$userID]['punch_meal'] = $wt['punch_meal']; $payPeriodTotals[$userID]['way2payStat'] = $wt['way2payStat']; $payPeriodTotals[$userID]['inclStatInHrs'] = $wt['inclStatInHrs']; $payPeriodTotals[$userID]['inclStatInCmsion'] = $wt['inclStatInCmsion']; $payPeriodTotals[$userID]['inclVacInCmsion'] = $wt['inclVacInCmsion']; $payPeriodTotals[$userID]['jobAreaID2'] = $wt['jobAreaID2']; $payPeriodTotals[$userID]['PCH_payableHrs'] = floatval($wt['PCH_payableHrs']); $payPeriodTotals[$userID]['PCH_mealHrs'] = floatval($wt['PCH_mealHrs']); $payPeriodTotals[$userID]['PCH_netHrs'] = floatval($wt['PCH_netHrs']); $payPeriodTotals[$userID]['PCH_grossHrs'] = floatval($wt['PCH_grossHrs']); $payPeriodTotals[$userID]['regPayable'] = floatval($wt['regPayable']); // can be net or gross depending on policy $payPeriodTotals[$userID]['totalPaidHrs'] = floatval($wt['totalPaidHrs']); } else { $payPeriodTotals[$userID]['PCH_payableHrs'] += floatval($wt['PCH_payableHrs']); $payPeriodTotals[$userID]['PCH_mealHrs'] += floatval($wt['PCH_mealHrs']); $payPeriodTotals[$userID]['PCH_netHrs'] += floatval($wt['PCH_netHrs']); $payPeriodTotals[$userID]['PCH_grossHrs'] += floatval($wt['PCH_grossHrs']); $payPeriodTotals[$userID]['regPayable'] += floatval($wt['regPayable']); $payPeriodTotals[$userID]['totalPaidHrs'] += floatval($wt['totalPaidHrs']); } if (!isset($wt['punchAlert'])){ // echo __line__.": userID=" . $userID . ", wkNum=" . $wkNum . "<br>"; } if ($wt['punchAlert'] != ''){ $payPeriodTotals[$userID]['punchAlert'] = $wkTot['punchAlert']; } else if (!isset($payPeriodTotals[$userID]['punchAlert'])){ $payPeriodTotals[$userID]['punchAlert'] = ''; } if (!isset($payPeriodTotals[$userID]['otPayable'])){ $payPeriodTotals[$userID]['otPayable'] = floatval($wt['otPayable']); } else { $payPeriodTotals[$userID]['otPayable'] += floatval($wt['otPayable']); } // echo __line__.": " .$key . " - " . $payPeriodTotals[604]['totalPaidHrs'] ."<br>"; if (!isset($payPeriodTotals[$userID]['awayPaid'])){ $payPeriodTotals[$userID]['awayPaid'] = floatval($wt['awayPaid']); } else { $payPeriodTotals[$userID]['awayPaid'] += floatval($wt['awayPaid']); } if (!isset($payPeriodTotals[$userID]['awayUnpaid'])){ $payPeriodTotals[$userID]['awayUnpaid'] = floatval($wt['awayUnpaid']); } else { $payPeriodTotals[$userID]['awayUnpaid'] += floatval($wt['awayUnpaid']); } if (!isset($payPeriodTotals[$userID]['awayFromBank'])){ $payPeriodTotals[$userID]['awayFromBank'] = $wt['awayFromBank']; } else { $payPeriodTotals[$userID]['awayFromBank'] += $wt['awayFromBank']; } if (!isset($payPeriodTotals[$userID]['statHrs'])){ $payPeriodTotals[$userID]['statHrs'] = floatval($wt['statHrs']); $payPeriodTotals[$userID]['eligible'] = $wt['eligible']; $payPeriodTotals[$userID]['minStatHrs'] = $wt['minStatHrs']; } else { $payPeriodTotals[$userID]['statHrs'] += floatval($wt['statHrs']); $payPeriodTotals[$userID]['eligible'] .= $wt['eligible']; $payPeriodTotals[$userID]['minStatHrs'] .= $wt['minStatHrs']; } if ($payPeriodTotals[$userID]['punchAlert'] == ''){ $payPeriodTotals[$userID]['punchAlert'] = $wt['punchAlert']; } $payPeriodTotals[$userID]['amountReg'] = 0; $payPeriodTotals[$userID]['amountET'] = 0; $payPeriodTotals[$userID]['amountOT'] = 0; $payPeriodTotals[$userID]['amountStat'] = 0; } } // deduct hours going into the time bank from totalPaidHrs\ // echo __line__ . "<pre>"; print_r($payPeriodTotals[724]); echo "</pre>"; // ========= BANKED TIME REQUESTS if ($_SESSION['staffCanBank'] == 'yes'){ $bankRequests = $Bank_Time_Request->get_prefs_and_requests($_SESSION['PID'], '', $_SESSION['ppStartTS'], $_SESSION['ppEndTS']); // echo __line__.": <pre>"; print_r($bankRequests); echo "</pre>"; foreach ($bankRequests as $uID => $bankRequestRow){ if ($bankRequestRow['amountReg'] != ''){ $payPeriodTotals[$uID]['amountReg'] = $bankRequestRow['amountReg']; } if ($bankRequestRow['amountET'] != ''){ $payPeriodTotals[$uID]['amountET'] = $bankRequestRow['amountET']; } if ($bankRequestRow['amountOT'] != ''){ $payPeriodTotals[$uID]['amountOT'] = $bankRequestRow['amountOT']; } if ($bankRequestRow['amountStat'] != ''){ $payPeriodTotals[$uID]['amountStat'] = $bankRequestRow['amountStat']; } } $bankedTime_arr = $User_Time_Bank->get('', '', $dateTS1, $dateTS2 + ($_SESSION['cutoff'] * 3600 * 24)); } // echo __line__."-master_data: bankedTime_arr <pre>"; print_r($bankedTime_arr); echo "</pre>"; foreach ($payPeriodTotals as $userID => $ppTot){ $payPeriodTotals[$userID]['reg2bank'] = 0; $payPeriodTotals[$userID]['ot2bank'] = 0; $payPeriodTotals[$userID]['stat2bank'] = 0; $payPeriodTotals[$userID]['amountET'] = 0; $payPeriodTotals[$userID]['grossRegPay'] = 0; $payPeriodTotals[$userID]['grossOTPay'] = 0; $payPeriodTotals[$userID]['grossTopUpPay'] = 0; $payPeriodTotals[$userID]['grossTotalPay'] = 0; if (isset($bankedTime_arr[$userID])){ // ========= time that has been credited or debited from time bank // ========= account in the current pay period if ($bankedTime_arr[$userID]['credit'] > 0 && $bankedTime_arr[$userID]['type'] == 'reg'){ $payPeriodTotals[$userID]['reg2bank'] = $bankedTime_arr[$userID]['credit']; $payPeriodTotals[$userID]['regPayable'] -= $bankedTime_arr[$userID]['credit']; $payPeriodTotals[$userID]['totalPaidHrs'] -= $bankedTime_arr[$userID]['credit']; } if ($bankedTime_arr[$userID]['credit'] > 0 && $bankedTime_arr[$userID]['type'] == 'OT'){ $payPeriodTotals[$userID]['ot2bank'] = $bankedTime_arr[$userID]['credit']; $payPeriodTotals[$userID]['otPayable'] -= $bankedTime_arr[$userID]['credit']; $payPeriodTotals[$userID]['totalPaidHrs'] -= $bankedTime_arr[$userID]['credit']; } if ($bankedTime_arr[$userID]['credit'] > 0 && $bankedTime_arr[$userID]['type'] == 'stat'){ $payPeriodTotals[$userID]['stat2bank'] = $bankedTime_arr[$userID]['credit']; $payPeriodTotals[$userID]['statHrs'] -= $bankedTime_arr[$userID]['credit']; $payPeriodTotals[$userID]['totalPaidHrs'] -= $bankedTime_arr[$userID]['credit']; } if ($bankedTime_arr[$userID]['debit'] > 0){ $payPeriodTotals[$userID]['awayFromBank'] = $bankedTime_arr[$userID]['debit']; // === add time taken from time bank account to payable hours $payPeriodTotals[$userID]['regPayable'] += $bankedTime_arr[$userID]['debit']; $payPeriodTotals[$userID]['totalPaidHrs'] += $bankedTime_arr[$userID]['debit']; } } // extra time is used for timebanking therefore only required for the payperiod $extraTime = 0; if (floatval($ppTot['PCH_payableHrs']) > floatval($ppTot['SHD_payableHrs'])){ $extraTime = floatval($ppTot['PCH_payableHrs']) - floatval($ppTot['SHD_payableHrs']); } if (!isset($payPeriodTotals[$userID]['extraTime'])){ $payPeriodTotals[$userID]['extraTime'] = $extraTime; } else { $payPeriodTotals[$userID]['extraTime'] += $extraTime; } // ========= BANKED TIME REQUESTS ================= if ($ppTot['amountET'] == 'all' || $ppTot['amountET'] > 0){ if (is_numeric($ppTot['amountET'])){ if ($extraTime >= $ppTot['amountET']){ $payPeriodTotals[$userID]['regBankable'] += $ppTot['amountET']; } else { $payPeriodTotals[$userID]['regBankable'] = $extraTime; } } else { // ========= bank all ET ========== $payPeriodTotals[$userID]['regBankable'] = $extraTime; } } if ($ppTot['amountReg'] > 0){ $payPeriodTotals[$userID]['regBankable'] += $ppTot['amountReg']; } if ($ppTot['amountOT'] == 'all' || $ppTot['amountOT'] > 0){ if (is_numeric($ppTot['amountOT'])){ if ($ppTot['otPayable'] >= $ppTot['amountOT']){ $payPeriodTotals[$userID]['otBankable'] += $ppTot['amountOT']; } else { // ======= bank all the overtime =========== $payPeriodTotals[$userID]['otBankable'] = $payPeriodTotals[$userID]['otPayable']; } } else { //========== bank all OT ================== $payPeriodTotals[$userID]['otBankable'] = $payPeriodTotals[$userID]['otPayable']; } } if (($ppTot['amountStat'] == 'all' || $ppTot['amountStat'] > 0) && $ppTot['eligible'] == ''){ if (is_numeric($ppTot['amountStat'])){ if ($ppTot['statHrs'] >= $ppTot['amountStat']){ $payPeriodTotals[$userID]['statBankable'] += $ppTot['amountStat']; } else { // ======= bank all the stat =========== $payPeriodTotals[$userID]['statBankable'] = $payPeriodTotals[$userID]['statHrs']; } } else { // ======= bank all the stat =========== $payPeriodTotals[$userID]['statBankable'] = $payPeriodTotals[$userID]['statHrs']; } } // ========= deduct time already banked this pay period from bankable time if (isset($bankedTime_arr[$userID])){ if ($bankedTime_arr[$userID]['type'] == 'reg'){ $regBankable = $payPeriodTotals[$userID]['regBankable'] - $bankedTime_arr[$userID]['credit']; $payPeriodTotals[$userID]['regBankable'] = floor($regBankable); } // echo __line__.": " . $payPeriodTotals[$userID]['regBankable'] . "<br>"; if ($bankedTime_arr[$userID]['type'] == 'OT'){ $otBankable = $bankedTime_arr[$userID]['credit']; $payPeriodTotals[$userID]['otBankable'] -= floor($otBankable); } if ($bankedTime_arr[$userID]['type'] == 'stat'){ $statBankable = $bankedTime_arr[$userID]['credit']; $payPeriodTotals[$userID]['statBankable'] -= floor($statBankable); } } else { $payPeriodTotals[$userID]['regBankable'] = 0; $payPeriodTotals[$userID]['otBankable'] = 0; $payPeriodTotals[$userID]['statBankable'] = 0; } } // == CALCULATE GROSS PAY === foreach ($payPeriodTotals as $userID => $ppTot){ $payPeriodTotals[$userID]['grossRegPay'] += floatval($ppTot['basePayRate']) * $payPeriodTotals[$userID]['regPayable']; $payPeriodTotals[$userID]['grossOTPay'] += floatval($ppTot['basePayRate']) * $payPeriodTotals[$userID]['otPayable'] * 1.5; if ($ppTot['topupRate'] > 0){ $payPeriodTotals[$userID]['grossTopUpPay'] += floatval($ppTot['topupRate']) * $payPeriodTotals[$userID]['regPayable']; $payPeriodTotals[$userID]['grossOTPay'] += floatval($ppTot['topupRate']) * $payPeriodTotals[$userID]['otPayable'] * 1.5; } $payPeriodTotals[$userID]['grossTotalPay'] += $payPeriodTotals[$userID]['grossRegPay'] + $payPeriodTotals[$userID]['grossOTPay'] + $payPeriodTotals[$userID]['grossTopUpPay']; } $this->payPeriodTotals = $payPeriodTotals; // echo __line__ . "<pre>"; print_r($payPeriodTotals); echo "</pre>"; // echo __line__."-m_master_data [get_staffHours] all_hours_arr: <pre>"; print_r($all_hours_arr); echo "</pre>"; return $all_hours_arr; } // end get_staff_hours method public function get_weekTotals(){ return $this->weekTotals; } public function get_payPeriodTotals(){ return $this->payPeriodTotals; } public function get_totalPaidHrs(){ $filename = date('njy').substr($_SESSION['PID'],-5).".txt"; if (file_exists("temp/".$_SESSION['PID']."/".$filename)){ $data = unserialize(file_get_contents("temp/".$_SESSION['PID']."/".$filename)); // echo __LINE__."Old File: <pre>"; print_r($data); echo "</pre>"; } else { $data['Staff Member'] = array('January','February','March','April','May','June','July','August','September','October','November','December'); // echo __LINE__."New File: <pre>"; print_r($data); echo "</pre>"; } // echo __LINE__."<pre>"; print_r($this->totalPaidHrsArr); echo "</pre>"; foreach ($this->totalPaidHrsArr as $uid => $row){ if ($uid > 0){ foreach ($row as $n => $r){ $data[$uid][$n] = $r; } } } // echo __LINE__."<pre>"; print_r($data); echo "</pre>"; $content = serialize($data); if (file_put_contents("temp/".$_SESSION['PID']."/".$filename, $content)){ // echo __line__."<p>" . "temp/".$_SESSION['PID']."/".$filename . "</p>"; return $filename; } else { // echo __LINE__." File didn't put<br>"; return false; } } //===================================================================================================== //===================================================================================================== // FOR PAYROLL COMMISSIONS & SALARIES public function get_commissions($userID, $jobAreaID, $pay_basis, $punch_shift, $t1, $t2, $orderBy){ $Users = new Users(); $Pr_Closures = new Pr_Closures(); $Revenue = new Revenue(); $users_arr = $Users->search($_SESSION['PID'], $userID, '', '', '', '', $jobAreaID, $t1, $t2, $pay_basis, $punch_shift, $orderBy); $prod_coll_arr = $Revenue->search('', '', '', '', $t1, $t2, '', '', $orderBy); $stat_arr = $Pr_Closures->get_date_range($t1, $t2); // echo __line__.": <pre>"; print_r($stat_arr); echo "</pre>"; $allDataArr = array(); foreach ($users_arr as $uID => $uRow){ $allDataArr[$uID] = array('fName'=>$uRow['fName'], 'lName'=>$uRow['lName'], 'jobAreaID'=>$uRow['jobAreaID'], 'punch_shift'=>$uRow['punch_shift'], 'pay_basis'=>$uRow['pay_basis'], 'salary'=>$uRow['salary'], 'payRate'=>$uRow['payRate'], 'cmsion_percent'=>$uRow['percent'], 'Total_prod'=>0, 'Total_coll'=>0, 'commission'=>0, 'vacationPay'=>0, 'vacRate'=>$uRow['vacRate'], 'inclVacInCmsion'=>$uRow['inclVacInCmsion'], 'way2payVac'=>$uRow['way2payVac'], 'alwaysPayStat'=>$uRow['alwaysPayStat'], 'includeStatInCmsion'=>$uRow['includeInCmsion'], 'minStatHrs'=>$uRow['minStatHrs'], 'when2payStat'=>$uRow['when2payStat'], 'firstDayTS'=>$uRow['firstDayTS']); } $allDataArr[$uID]['numStats'] = count($stat_arr); foreach ($allDataArr as $uID => $row){ // echo __line__.": " . $uID . " - " . $row['pay_basis'] . " - "; foreach ($prod_coll_arr as $key =>$pc_row){ // echo $pc_row['userID'] . " | " . $pc_row['amtColl'] . ", "; if ($pc_row['producerID'] == $uID && $row['pay_basis'] == 'production'){ $allDataArr[$uID]['Total_prod'] += $pc_row['amtProd']; } else if ($pc_row['producerID'] == $uID && $row['pay_basis'] == 'collections'){ $allDataArr[$uID]['Total_coll'] += $pc_row['amtColl']; } } if ($row['punch_shift'] == 'no'){ $hours_arr = $this->get_schedule($uID, '', '', '', $t1, $t2, ''); // echo __line__ . "<pre>"; print_r($hours_arr); echo "</pre>"; foreach ($hours_arr as $key => $hoursRow){ // echo __line__ . ": " . $key . " - " . $hoursRow['SHD_netHrs'] . "<BR>"; if (isset($allDataArr[$hoursRow['userID']]['netHrs'])){ $allDataArr[$hoursRow['userID']]['netHrs'] += $hoursRow['SHD_netHrs']; } else { $allDataArr[$hoursRow['userID']]['netHrs'] = $hoursRow['SHD_netHrs']; } } } else { $hours_arr = $this->get_punch_hx($uID, '', '', '', $t1, $t2, ''); foreach ($hours_arr as $key => $hoursRow){ if (isset($allDataArr[$hoursRow['userID']]['netHrs'])){ $allDataArr[$hoursRow['userID']]['netHrs'] += $hoursRow['PCH_payableHrs']; } else { $allDataArr[$hoursRow['userID']]['netHrs'] = $hoursRow['PCH_payableHrs']; } } } } $statFuncName = "STAT_HOURS_" . $_SESSION['prov']; $statDates = array(); foreach ($stat_arr as $date => $statRow){ if ($statRow['stat'] == 'yes' && $statRow['observed'] == 'no'){ $statDates[$statRow['holName']]['statDateTS'] = strtotime($date); if (!isset($statDates[$statRow['holName']]['lieuDateTS'])){ $statDates[$statRow['holName']]['lieuDateTS'] = ''; } } else if ($statRow['stat'] == 'no' && $statRow['observed'] == 'yes'){ $statDates[$statRow['holName']]['lieuDateTS'] = strtotime($date); if (!isset($statDates[$statRow['holName']]['statDateTS'])){ $statDates[$statRow['holName']]['statDateTS'] = ''; } } } // echo __line__.": <pre>"; print_r($stat_arr); print_r($users_arr); echo "</pre>"; foreach ($allDataArr as $uID => $row){ $allDataArr[$uID]['statPay'] = 0; $allDataArr[$uID]['statHrs'] = 0; if ($row['pay_basis'] == 'production'){ $allDataArr[$uID]['commission'] = round(($row['Total_prod'] * $row['cmsion_percent']) / 100, 2); } else if ($row['pay_basis'] == 'collections'){ $allDataArr[$uID]['commission'] = round(($row['Total_coll'] * $row['cmsion_percent']) / 100, 2); } if ($row['inclVacInCmsion'] == 'yes' && $row['way2payVac'] != 'day'){ $allDataArr[$uID]['vacationPay'] = round(($row['Total_prod'] * $row['vacRate']) / 100, 2); } foreach ($stat_arr as $date => $statRow){ // echo __LINE__. ": " . $statRow['stat'] . ", " . $row['when2payStat'] . ", " . $statRow['observed'] . " <br>"; if ($statRow['stat'] == 'yes' && (($row['when2payStat'] == 'lieu' && ($statRow['observed'] == 'yes' || $statDates[$statRow['holName']]['lieuDateTS'] <= 0)) || ($row['when2payStat'] == 'stat' && $statRow['observed'] == 'no'))){ $statPay_arr = $this->$statFuncName($uID, $row['firstDayTS'], $statDates[$statRow['holName']]['statDateTS'], $statDates[$statRow['holName']]['lieuDateTS'], $statRow['holName'], $row['when2payStat']); $statHrs = $statPay_arr[$date . "|" . $uID]['statHrs']; if ($row['minStatHrs'] > $statPay_arr[$date . "|" . $uID]['statHrs']){ $statHrs = $row['minStatHrs']; } $allDataArr[$uID]['statPay'] += $row['payRate'] * $statHrs; $allDataArr[$uID]['statHrs'] += $statHrs; } // echo __line__ . ": " . $row['minStatHrs'] . " * ". $row['payRate'] . "<br>"; // if ($stat_row['stat'] == 'yes' && ($stat_row['observed'] == 'yes' && $row['when2payStat'] == 'lieu') || ($stat_row['observed'] == 'no')){ } $allDataArr[$uID]['earnings'] = $allDataArr[$uID]['commission'] + $allDataArr[$uID]['vacationPay'] + $allDataArr[$uID]['statPay']; } // echo __line__.": <pre>"; print_r($allDataArr); echo "</pre>"; return $allDataArr; } //===================================================================================================== //===================================================================================================== // returns target production for hourly & salaried staff for time period specified public function get_targets($dateTS1, $dateTS2){ $allTargetsArr = array(); $Prod_Rate = new Prod_Rate(); date_default_timezone_set($_SESSION['timeZone']); $ptUsers = $Prod_Rate->get('', $dateTS1, $dateTS2, '', ''); $pTargets = array(); // target rate for each person for each date in the range. foreach($ptUsers as $ptUser){ for ($tTS = $dateTS1; $tTS <= $dateTS2; $tTS += 60*60*24){ if ($ptUser['effectiveTS'] <= $tTS && ($ptUser['expireTS'] > $tTS || $ptUser['expireTS'] == '0')){ $pTargets[date('M j, Y', $tTS)."|".$ptUser['userID']] = $ptUser['target']; } } } // echo __line__."- m_master_data - pTargets: <pre>"; print_r($pTargets); echo "</pre>"; $schedData = $this->get_schedule($dateTS1, $dateTS2, ''); // echo __line__."-m_master_data schedData<pre>"; print_r($schedData); echo "</pre>"; $punchData = $this->get_punches($dateTS1, $dateTS2); // echo __line__."-m_master_data punchData<pre>"; print_r($punchData); echo "</pre>"; foreach ($pTargets as $key => $pTarget){ $netHrs = ''; if (isset($schedData[$key])){ if ($schedData[$key]['awayTypeID'] == ''){ // they don't use the punch clock $netHrs = $schedData[$key]['netHrs']; if ($schedData[$key]['prepsEnd1'] > 0){ $prepTime = strtotime(date('M j, Y', $tTS).", ".$schedData[$key]['prepsEnd1']) - strtotime(date('M j, Y', $tTS).", ".$schedData[$key]['start1']); if ($prepTime > 0){ $netHrs -= $prepTime/3600; } } if ($schedData[$key]['start2'] > 0){ $netHrs = $schedData[$key]['netHrs']; if ($schedData[$key]['prepsEnd2'] > 0){ $prepTime = strtotime(date('M j, Y', $tTS).", ".$schedData[$key]['prepsEnd2']) - strtotime(date('M j, Y', $tTS).", ".$schedData[$key]['start2']); if ($prepTime > 0){ $netHrs -= $prepTime/3600; } } } if (!isset($openTimeRows[$key])){ $openTimeRows[$key] = 0; } $schedData[$key]['target'] = $schedData[$key]['target']; $schedData[$key]['openTime'] = $openTimeRows[$key]; $schedData[$key]['targetRate'] = $pTarget; $allDataArr = $schedData; if (isset($punchData[$key])){ // they use the punch clock if ($punchData[$key]['inShift1'] > 0){ if (isset($punchData[$key]['netHrs2'])){ $netHrs = $punchData[$key]['netHrs2']; } if ($schedData[$key]['prepsEnd1'] > 0){ $prepTime = strtotime(date('M j, Y', $tTS).", ".$schedData[$key]['prepsEnd1']) - strtotime(date('M j, Y', $tTS).", ".$punchData[$key]['inShift1']); if ($prepTime > 0){ $netHrs -= ($prepTime / 3600); } } if (isset($punchData[$key]['inShift2'])){ if ($punchData[$key]['inShift2'] > 0){ if ($schedData[$key]['prepsEnd2'] > 0){ $prepTime = strtotime(date('M j, Y', $tTS).", ".$schedData[$key]['prepsEnd2']) - strtotime(date('M j, Y', $tTS).", ".$punchData[$key]['inShift2']); if ($prepTime > 0){ $netHrs -= ($prepTime / 3600); } } } } $punchData[$key]['targetRate'] = $pTarget; $allDataArr = $punchData; } } } } } // echo __line__."-m_master_data: allDataArr (get_targets)<pre>"; print_r($allDataArr); echo "</pre>"; return $allDataArr; } // end get_targets method //===================================================================================================== //===================================================================================================== // returns data for display in dashboard for time period specified public function dashboard($userID, $jobAreaID, $pay_basis, $punch_shift, $dateTS1, $dateTS2){ $Open_Time = new Open_Time; $Pr_OT_Categories = new Pr_OT_Categories; $Pr_OT_Effect = new Pr_OT_Effect(); $Revenue = new Revenue; $Users = new Users; $User_Prod_Rate = new User_Prod_Rate(); // echo __line__.': passed vars: userID=' . $userID . ", jobAreaID=" . $jobAreaID .", pay_basis=". $pay_basis .", dateTS1=" . date('gi M j Y', $dateTS1) . ", dateTS2=" . date('gi M j Y', $dateTS2) . "<br>"; $uRows = $Users->search($_SESSION['PID'], $userID, '', '', '', '', $jobAreaID, $dateTS1, $dateTS2, '', '', 'lName'); if ($userID > 0){ $temp[$userID] = $uRows; $uRows = $temp; } // echo __LINE__.": " . $jobAreaID ."<pre>"; print_r($uRows); echo "</pre>"; // echo __line__."-m_master_data: data <pre>"; print_r($data); echo "</pre>"; // echo __LINE__.": " . $dateTS1 ." (" . date('His M j, Y', $dateTS1).") - ". $dateTS2 ." (" . date('His M j, Y', $dateTS2) . ")<br>"; $otCats = $Pr_OT_Categories->get_4_menu('catName'); $otEffect = $Pr_OT_Effect->search($dateTS1, $dateTS2, '', ''); $openTimeArr = $Open_Time->search($userID, $dateTS1, $dateTS2, '', '', '', '', '', '', 'dateTS'); // echo __line__." Master_Data: <pre>"; print_r($openTimeArr); echo "</pre>"; $openTime = array(); foreach ($openTimeArr as $key => $o){ // echo __LINE__.": ". $o['userID']." " . date('His M j, Y', $o['dateTS']). "<br>"; if (!isset($openTime[date('M j, Y', $o['dateTS']) . "|". $o['userID']])){ $openTime[date('M j, Y', $o['dateTS']) . "|". $o['userID']]['min'] = $o['minutes']; } else { $openTime[date('M j, Y', $o['dateTS']) . "|". $o['userID']]['min'] += $o['minutes']; } $openTime[date('M j, Y', $o['dateTS']) . "|". $o['userID']]['reason'][] = "<b>" . $otCats[$o['otCatID']].": </b>" .$o['reason'] ." [".$o['minutes']." min]"; } // echo __line__."-m_master_data: userRows <pre>"; print_r($openTime); echo "</pre>"; $revRows = $Revenue->get_4_dashboard($userID, '', $jobAreaID, $dateTS1, $dateTS2); // echo __LINE__.": master_data (dashboard) revRows <pre>"; print_r($revRows); echo "</pre>"; $prodRateArr = $User_Prod_Rate->get_by_id($userID, $dateTS1, $dateTS2, ''); $schedArr = $this->get_schedule($userID, '', '', '', $dateTS1, $dateTS2, ''); // echo __LINE__.": master_data (dashboard) schedArr <pre>"; print_r($schedArr); echo "</pre>"; $punchArr = $this->get_punch_hx($userID, $jobAreaID, $pay_basis, '', $dateTS1, $dateTS2, ''); // echo __LINE__.": master_data (dashboard) punchArr <pre>"; print_r($punchArr); echo "</pre>"; $data = array(); for ($t = $dateTS1; $t <= $dateTS2; $t+=60*60*24){ foreach ($uRows as $uID => $uRow){ $key = date('M j, Y', $t)."|". $uID; // $data[$key] = $uRow; $data[$key]['dateTS'] = $t; $data[$key]['userID'] = $uID; } foreach ($prodRateArr as $rateRow){ $key = date('M j, Y', $t)."|". $rateRow['userID']; if ($rateRow['userID'] == $data[$key]['userID'] && $rateRow['effectiveTS'] <= $t && ($rateRow['expireTS'] >= $t || $rateRow['expireTS'] == 0)){ $data[$key]['prodRate'] = $rateRow['rate']; } } } // echo __line__."-m_master_data: data <pre>"; print_r($data); echo "</pre>"; foreach ($data as $key => $d){ $data[$key]['name'] = $schedArr[$key]['name']; $data[$key]['pay_basis'] = $schedArr[$key]['pay_basis']; $data[$key]['punch_meal'] = $schedArr[$key]['punch_meal']; $data[$key]['SHD_payableHrs'] = $schedArr[$key]['SHD_payableHrs']; $data[$key]['SHD_mealHrs'] = $schedArr[$key]['SHD_mealHrs']; $data[$key]['PCH_payableHrs'] = $punchArr[$key]['PCH_payableHrs']; $data[$key]['paid_brk'] = $schedArr[$key]['paid_brk']; $data[$key]['punch_meal'] = $schedArr[$key]['punch_meal']; $data[$key]['amtProd'] = 0; $data[$key]['dentistID'] = 0; if (isset($revRows[$key])){ $data[$key]['amtProd'] = $revRows[$key]['amtProd']; $data[$key]['dentistID'] = $revRows[$key]['dentistID']; } if ($schedArr[$key]['pay_basis'] == 'hours'){ $hours = $punchArr[$key]['PCH_payableHrs']; } else { $hours = $schedArr[$key]['SHD_payableHrs']; } if ($schedArr[$key]['punch_meal'] == 'no'){ $hours -= $schedArr[$key]['SHD_mealHrs']; } else { $hours -= $punchArr[$key]['mealHrs']; } $data[$key]['hrsAtWork'] = $hours; $otMin = 0; $OTreason = ''; if (isset($openTime[$key])){ $otMin = $openTime[$key]['min']; $data[$key]['OTreason'] = $openTime[$key]['reason']; } $data[$key]['OTmin'] = $otMin; // subtract Open Time from hours worked to get production hours if ($hours > $otMin/60){ // ==== Practice Open Time prefs ===== if ($otEffect[0]['deductProd'] == 'is'){ $productiveHours = $hours - $otMin/60; } else { $productiveHours = $hours; } } else { $productiveHours = 0; } $data[$key]['productiveHours'] = $productiveHours; $target = 0; if ($d['prodRate'] > 0){ $target = $productiveHours * $d['prodRate']; $data[$key]['target'] = $target; $data[$key]['OTcost'] = $otMin/60 * $d['prodRate']; } if ($target > 0 && $revRows[$key]['amtProd'] > 0){ $diff = number_format(($revRows[$key]['amtProd'] - $target) / $target * 100, 2); } else { $diff = ''; } $data[$key]['diff'] = $diff; if (($revRows[$key]['amtProd'] == 0 && $target <= 0 && $otMin <= 0) || $d['prodRate'] <= 0){ unset($data[$key]); } } // echo __LINE__." master_data dashboard data <pre>"; print_r($data); echo "</pre>"; return $data; } // end dashboard method //===================================================================================================== //===================================================================================================== public function daily_OT($reg_hrs_per_day, $netHrs, $ave_agree, $sched_hrs){ $data = array(); // echo __line__."-m_master_data: ".$netHrs." ".$reg_hrs_per_day." ".$ave_agree." ".$sched_hrs." ".$f_time."<br>"; if ($netHrs > $reg_hrs_per_day && $ave_agree != 'Y'){ $OT_hrs = $netHrs - $reg_hrs_per_day; $regHrs = $reg_hrs_per_day; } else if ($ave_agree == 'Y'){ if ($sched_hrs > $reg_hrs_per_day){ $reg_hrs_per_day = $sched_hrs; } if ($netHrs > $reg_hrs_per_day){ $regHrs = $reg_hrs_per_day; $OT_hrs = $netHrs - $reg_hrs_per_day; } else { $regHrs = $netHrs; $OT_hrs = ''; } } else { $regHrs = $netHrs; $OT_hrs = ''; } $data = array('regHrs'=>$regHrs, 'OT_hrs'=>$OT_hrs); return $data; } // daily_OT method //===================================================================================================== //===================================================================================================== public function Stat_Hours_BC($userID, $firstDayTS, $statDateTS, $lieuDateTS, $holName, $when2payStat) { $User_Stat_Pay = new User_Stat_Pay; $data = array(); // timestamps for the 30 days prior to the stat if ($statDateTS > 0){ $dateTS1 = $statDateTS - (60*60*24*31); $dateTS2 = $statDateTS - 1; } else { $dateTS1 = $lieuDateTS - (60*60*24*31); $dateTS2 = $lieuDateTS - 1; } // echo __LINE__.": userID=" . $userID .", statDateTS=" . date('M j, Y', $statDateTS) . "-" . $statDateTS . " | lieuDateTS=" . date('M j, Y', $lieuDateTS)."<br>" . date('His M j, Y', $dateTS1) ." - " . date('His M j, Y', $dateTS2) . "<br>"; $punchRows = array(); $schedRows = array(); $schedRows = $this->get_schedule($userID, '', '', '', $dateTS1, $dateTS2, ''); $punchRows = $this->get_punch_hx($userID, '', '', '', $dateTS1, $dateTS2, ''); // echo __line__.": " . $userID ."<pre>"; print_r($schedRows); echo "</pre>"; $rows = array(); foreach ($schedRows as $key => $schedRow){ if (isset($punchRows[$key])){ $rows[$key] = array_replace($schedRow, $punchRows[$key]); } } foreach ($rows as $key => $row){ if ($row['punch_meal'] == 'no'){ $mealHrs = $row['SHD_mealHrs1']; if ($row['paid_brk'] == 'no'){ $rows[$key]['PCH_netHrs'] -= $mealHrs; $rows[$key]['PCH_payableHrs'] -= $mealHrs; } } } // echo __LINE__.": " . date('His M j, Y', $dateTS1) ." - " . date('His M j, Y', $dateTS2) . "<br>"; // echo __LINE__."<pre>"; print_r($rows); echo "</pre>"; $eligible = ''; $hrsWorked = 0; $daysWorked = 0; //user stat policy $statRows = $User_Stat_Pay->search($_SESSION['PID'], $userID, $dateTS1, $dateTS2, '', 'effectiveTS'); $statRow = $statRows[0]; // echo __LINE__."<pre>"; print_r($statRow); echo "</pre>"; // must have been hired at least 30 days prior to Stat and be employed at the time of the Stat if ($firstDayTS <= $dateTS1){ foreach ($rows as $key => $row){ // echo __line__.": ". $key ." - ". $row['awayPaid']." | ". $row['PCH_payableHrs'] . "<BR>"; if ($row['pay_basis'] == 'hours' && ($row['awayPaid'] > 0 || $row['PCH_payableHrs'] > 0)){ // echo __LINE__.$key.": " . $row['PCH_payableHrs'] . $row['awayPaid']."<br>"; $dayHours = (floatval($row['awayPaid']) + floatval($row['PCH_payableHrs'])); $hrsWorked += $dayHours; $daysWorked++; // echo __line__.": " . $key ." " . $dayHours . " | " . $hrsWorked ." | " . $daysWorked . "<br>"; } else if ($row['pay_basis'] == 'no' && ($row['awayPaid'] > 0 || $row['SHD_payableHrs'] > 0)){ $hrsWorked += (floatval($row['awayPaid']) + floatval($row['SHD_payableHrs'])); $daysWorked++; } } // average hours worked per day $statHrs = 0; if ($daysWorked > 0){ $statHrs = round($hrsWorked / $daysWorked, 2); } // if staff get paid minimum hours and minimum is greater than hours earned if ($statRow['hours'] > $statHrs){ $statHrs = $statRow['hours']; } // eligible for stat pay if ($daysWorked < 15 && $rows[$key]['ave_agree'] != 'Y'){ $eligible = "<span class='comment'>[".$daysWorked."<span id='col25' class='important'>X</span>]</span> "; } else { $eligible = ""; } } else { $eligible = 'new hire'; } // $dataLine = array('hrsWorked'=>$hrsWorked, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>$eligible, 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs']); if ($when2payStat == 'lieu' && $lieuDateTS > 0){ $dataLine[date('M j, Y', $lieuDateTS) . "|" . $userID] = array('hrsWorked'=>$hrsWorked, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>$eligible, 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs']); $dataLine[date('M j, Y', $statDateTS) . "|" . $userID] = array('hrsWorked'=>'', 'daysWorked'=>'', 'statHrs'=>'', 'holName'=>$holName, 'eligible'=>'', 'minStatHrs'=>'', 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs']); } else { $dataLine[date('M j, Y', $statDateTS) . "|" . $userID] = array('hrsWorked'=>$hrsWorked, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>$eligible, 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs']); } // echo __line__."-m_master_data: data <pre>"; print_r($dataLine); echo "</pre>"; return $dataLine; } //end Stat_Hours_BC method //===================================================================================================== //===================================================================================================== public function Stat_Hours_NL($userID, $firstDayTS, $statDateTS, $lieuDateTS, $holName, $when2payStat){ $data = array(); // timestamps for the 30 days prior to the stat $dateTS1 = $statDateTS - (60*60*24*21); $dateTS2 = $statDateTS - 1; $dateTS2plus6 = $statDateTS + (60*60*24*6); //=== GET SCHEDULE AND PUNCHES 6 DAYS AFTER STAT FOR FIRST & LAST RULE ====== // $schedRows = $this->get_schedule($userID, '', '', '', $dateTS1, $dateTS2plus6, ''); $punchRows = $this->get_punch_hx($userID, '', '', '', $dateTS1, $dateTS2plus6, ''); $rows = array(); foreach ($schedRows as $key => $schedRow){ if (is_array($punchRows[$key]) && $schedRow['dateTS'] < $statDateTS){ $rows[$key] = array_replace($schedRow, $punchRows[$key]); } } foreach ($rows as $key => $row){ if ($row['punch_meal'] == 'no'){ $mealHrs = $row['SHD_mealHrs1']; if ($row['paid_brk'] == 'no'){ $rows[$key]['PCH_netHrs'] -= $mealHrs; $rows[$key]['PCH_payableHrs'] -= $mealHrs; } } } // echo __LINE__.": userID=" . $userID .", statDateTS=" . date('M j, Y', $statDateTS) . " lieuDateTS=" . date('M j, Y', $lieuDateTS) . ", dateTS1=" . date('His M j, Y', $dateTS1) ." - " . date('His M j, Y', $dateTS2) . "<br>"; // echo __LINE__."<pre>"; print_r($rows); echo "</pre>"; $eligible = ''; $hrsWorked = 0; $daysWorked = 0; $User_Stat_Pay = new User_Stat_Pay(); $statRows = $User_Stat_Pay->search($_SESSION['PID'], $userID, $statDateTS, $statDateTS + 3600*24, '', 'effectiveTS DESC'); if (isset($statRows[0])){ $statRow = $statRows[0]; } else { $statRow = array('stat_payID'=>'', 'userID'=>$userID, 'practiceID'=>$_SESSION['PID'], 'way2pay'=>'', 'when2pay'=>'', 'includeInHrs'=>'', 'includeInCmsion'=>'', 'pay'=>'', 'hours'=>'', 'effectiveTS'=>'', 'expireTS'=>''); } // echo __LINE__."<pre>"; print_r($statRows); echo "</pre>"; // must have been hired at least 30 days prior to Stat and be employed at the time of the Stat foreach ($rows as $key => $row){ // == get hours worked from punches or taken as paid vacation if ($row['pay_basis'] == 'hours' && ($row['awayPaid'] > 0 || $row['PCH_payableHrs'] > 0)){ // echo __LINE__.$key.": " . $row['PCH_payableHrs'] . $row['awayPaid']."<br>"; $hrsWorked += floatval($row['awayPaid']) + floatval($row['PCH_payableHrs']); $daysWorked++; // get hours from schedule } else if ($row['pay_basis'] != 'hours' && ($row['awayPaid'] > 0 || $row['SHD_payableHrs'] > 0)){ $hrsWorked += $row['SHD_payableHrs']; $daysWorked++; } $firstDayTS = $row['firstDayTS']; if ($row['firstDayTS'] + 60*60*24*60 > $statDateTS){ $eligible = "<span class='important'>X</span> New hire "; } $minStatHrs = $row['minStatHrs']; } if (strtotime(date('M j, Y', $firstDayTS) . " + 30 days") > $statDateTS ){ $eligible = "<span class='important'>X [new hire]</span> "; } // average hours worked per day $statHrs = 0; if ($daysWorked > 0){ $statHrs = round($hrsWorked / $daysWorked, 2); } // echo __line__.": " . $userID . ", hrsWorked=" . $hrsWorked . ", daysWorked=" . $daysWorked ." | firstDayTS=" . date('M j, Y', $firstDayTS) . " - " . date('M j, Y', $statDateTS) .", statHrs=" . $statHrs . "<br>"; $fl_result = $this->first_last_rule($userID, $statDateTS, $schedRows, $punchRows); if ($fl_result){ $eligible = ''; } else if (!$fl_result && $schedRows[date('M j, Y', $statDateTS) . "|" . $userID]['punch_shift'] == 'yes'){ // did not work the last & first schedule shift before and after the stat $eligible = "<span class='comment r_txt'>X [FL Rule]</span> "; } // if staff get paid minimum hours and minimum is greater than hours earned if ($minStatHrs > $statHrs){ $statHrs = $minStatHrs; } // eligible for stat pay // echo __LINE__.": " . $hrsWorked." " . $daysWorked ." ". $statHrs."<br>"; // echo __line__.": " . $when2payStat ." - " . $lieuDateTS . "<br>"; if ($when2payStat == 'lieu' && $lieuDateTS > 0){ $dataLine[date('M j, Y', $lieuDateTS) . "|" . $userID] = array('hrsWorked'=>$hrsWorked, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>$eligible, 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs'], 'includeInHrs'=>$statRow['includeInHrs']); $dataLine[date('M j, Y', $statDateTS) . "|" . $userID] = array('hrsWorked'=>'', 'daysWorked'=>'', 'statHrs'=>'', 'holName'=>$holName, 'eligible'=>'', 'minStatHrs'=>'', 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs'], 'includeInHrs'=>$statRow['includeInHrs']); } else { $dataLine[date('M j, Y', $statDateTS) . "|" . $userID] = array('hrsWorked'=>$hrsWorked, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>$eligible, 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs'], 'includeInHrs'=>$statRow['includeInHrs']); } // echo __line__."-m_master_data: data <pre>"; print_r($dataLine); echo "</pre>"; return $dataLine; } // end function Stat_Hours_NL //===================================================================================================== //===================================================================================================== /* statDateTS = date of stat holiday */ public function Stat_Hours_NS($userID, $firstDayTS, $statDateTS, $lieuDateTS, $holName, $when2payStat){ /* employees must have worked or had paid vacation for 15 of the 30 calendar days preceeding the stat AND satisfy the FIRST AND LAST RULE */ $data = array(); // timestamps for the 30 days prior to the stat $dateTS1 = $statDateTS - (60*60*24*31); $dateTS2 = $statDateTS - 1; $dateTS2plus6 = $statDateTS + (60*60*24*6); //=== GET SCHEDULE AND PUNCHES 6 DAYS AFTER STAT FOR FIRST & LAST RULE ====== // $schedRows = $this->get_schedule($userID, '', '', '', $dateTS1, $dateTS2plus6, ''); $punchRows = $this->get_punch_hx($userID, '', '', '', $dateTS1, $dateTS2plus6, ''); $rows = array(); foreach ($schedRows as $key => $schedRow){ if (is_array($punchRows[$key]) && $schedRow['dateTS'] < $statDateTS){ $rows[$key] = array_replace($schedRow, $punchRows[$key]); } } foreach ($rows as $key => $row){ if ($row['punch_meal'] == 'no'){ $mealHrs = $row['SHD_mealHrs1']; if ($row['paid_brk'] == 'no'){ $rows[$key]['PCH_netHrs'] -= $mealHrs; $rows[$key]['PCH_payableHrs'] -= $mealHrs; } } } // echo __LINE__.": userID=" . $userID .", statDateTS=" . date('M j, Y', $statDateTS) . " lieuDateTS=" . date('M j, Y', $lieuDateTS) . ", dateTS1=" . date('His M j, Y', $dateTS1) ." - " . date('His M j, Y', $dateTS2) . "<br>"; // echo __LINE__."<pre>"; print_r($rows); echo "</pre>"; $eligible = ''; $hrsWorked = 0; $daysWorked = 0; $User_Stat_Pay = new User_Stat_Pay(); $statRows = $User_Stat_Pay->search($_SESSION['PID'], $userID, $statDateTS, $statDateTS + 3600*24, '', 'effectiveTS DESC'); $statRow = $statRows[0]; // echo __LINE__."<pre>"; print_r($statRow); echo "</pre>"; // must have been hired at least 30 days prior to Stat and be employed at the time of the Stat foreach ($rows as $key => $row){ // == get hours worked from punches or taken as paid vacation if ($row['pay_basis'] == 'hours' && ($row['awayPaid'] > 0 || $row['PCH_payableHrs'] > 0)){ // echo __LINE__.$key.": " . $row['PCH_payableHrs'] . $row['awayPaid']."<br>"; $hrsWorked += floatval($row['awayPaid']) + floatval($row['PCH_payableHrs']); $daysWorked++; // get hours from schedule } else if ($row['pay_basis'] == 'no' && ($row['awayPaid'] > 0 || $row['SHD_payableHrs'] > 0)){ $hrsWorked += $row['SHD_payableHrs']; $daysWorked++; } $firstDayTS = $row['firstDayTS']; if ($row['firstDayTS'] + 60*60*24*60 > $statDateTS){ $eligible = "<span class='important'>X</span> New hire "; } $minStatHrs = $row['minStatHrs']; } // average hours worked per day $statHrs = 0; if ($daysWorked > 0){ $statHrs = round($hrsWorked / $daysWorked, 2); } // echo __line__.": " . $userID . " - isCasual=" . $isCasual . ", hrsWorked=" . $hrsWorked . ", daysWorked=" . $daysWorked .", min4PartTime=" . $min4PartTime . " | firstDayTS=" . date('M j, Y', $firstDayTS) . " - " . date('M j, Y', $statDateTS) .", statHrs=" . $statHrs . "<br>"; $fl_result = $this->first_last_rule($userID, $statDateTS, $schedRows, $punchRows); if ($fl_result && $daysWorked >= 15){ $eligible = ''; } else if (!$fl_result){ // did not work the last & first schedule shift before and after the stat $eligible = "<span class='comment r_txt'>X [FL Rule]</span> "; } else if ($daysWorked < 15){ //didn't work at least 15 days in the 30 days prior to stat $eligible = "<span class='comment r_txt'>X [" . $daysWorked ."]</span> "; } // if staff get paid minimum hours and minimum is greater than hours earned if ($minStatHrs > $statHrs){ $statHrs = $minStatHrs; } // eligible for stat pay // echo __LINE__.": " . $hrsWorked." " . $daysWorked ." ". $statHrs."<br>"; // echo __line__.": " . $when2payStat ." - " . $lieuDateTS . "<br>"; if ($when2payStat == 'lieu' && $lieuDateTS > 0){ $dataLine[date('M j, Y', $lieuDateTS) . "|" . $userID] = array('hrsWorked'=>$hrsWorked, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>$eligible, 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs'], 'includeInHrs'=>$statRow['includeInHrs']); $dataLine[date('M j, Y', $statDateTS) . "|" . $userID] = array('hrsWorked'=>'', 'daysWorked'=>'', 'statHrs'=>'', 'holName'=>$holName, 'eligible'=>'', 'minStatHrs'=>'', 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs'], 'includeInHrs'=>$statRow['includeInHrs']); } else { $dataLine[date('M j, Y', $statDateTS) . "|" . $userID] = array('hrsWorked'=>$hrsWorked, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>$eligible, 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs'], 'includeInHrs'=>$statRow['includeInHrs']); } // echo __line__."-m_master_data: data <pre>"; print_r($dataLine); echo "</pre>"; return $dataLine; } // end function Stat_Hours_NS //===================================================================================================== //===================================================================================================== public function Stat_Hours_NB($userID, $firstDayTS, $statDateTS, $lieuDateTS, $holName, $when2payStat){ $data = array(); // timestamps for the 30 days prior to the stat $dateTS1 = $statDateTS - (60*60*24*31); $dateTS2 = $statDateTS - 1; $dateTS2plus6 = $statDateTS + (60*60*24*6); //=== GET SCHEDULE AND PUNCHES 6 DAYS AFTER STAT FOR FIRST & LAST RULE ====== // $schedRows = $this->get_schedule($userID, '', '', '', $dateTS1, $dateTS2plus6, ''); $punchRows = $this->get_punch_hx($userID, '', '', '', $dateTS1, $dateTS2plus6, ''); $rows = array(); foreach ($schedRows as $key => $schedRow){ if (is_array($punchRows[$key]) && $schedRow['dateTS'] < $statDateTS){ $rows[$key] = array_replace($schedRow, $punchRows[$key]); } } foreach ($rows as $key => $row){ if ($row['punch_meal'] == 'no'){ $mealHrs = $row['SHD_mealHrs1']; if ($row['paid_brk'] == 'no'){ $rows[$key]['PCH_netHrs'] -= $mealHrs; $rows[$key]['PCH_payableHrs'] -= $mealHrs; } } } // echo __LINE__.": userID=" . $userID .", statDateTS=" . date('M j, Y', $statDateTS) . " lieuDateTS=" . date('M j, Y', $lieuDateTS) . ", dateTS1=" . date('His M j, Y', $dateTS1) ." - " . date('His M j, Y', $dateTS2) . "<br>"; // echo __LINE__."<pre>"; print_r($rows); echo "</pre>"; $eligible = ''; $hrsWorked = 0; $daysWorked = 0; $User_Stat_Pay = new User_Stat_Pay(); $statRows = $User_Stat_Pay->search($_SESSION['PID'], $userID, $statDateTS, $statDateTS + 3600*24, '', 'effectiveTS DESC'); $statRow = $statRows[0]; // echo __LINE__."<pre>"; print_r($statRow); echo "</pre>"; // must have been hired at least 30 days prior to Stat and be employed at the time of the Stat foreach ($rows as $key => $row){ // == get hours worked from punches or taken as paid vacation if ($row['pay_basis'] == 'hours' && ($row['awayPaid'] > 0 || $row['PCH_payableHrs'] > 0)){ // echo __LINE__.$key.": " . $row['PCH_payableHrs'] . $row['awayPaid']."<br>"; $hrsWorked += floatval($row['awayPaid']) + floatval($row['PCH_payableHrs']); $daysWorked++; // get hours from schedule } else if ($row['pay_basis'] == 'no' && ($row['awayPaid'] > 0 || $row['SHD_payableHrs'] > 0)){ $hrsWorked += $row['SHD_payableHrs']; $daysWorked++; } $firstDayTS = $row['firstDayTS']; if ($row['firstDayTS'] + 60*60*24*60 > $statDateTS){ $eligible = "<span class='important'>X</span> New hire "; } $minStatHrs = $row['minStatHrs']; } $isCasual = "false"; $normalHrs = 20 * 8.8; // 20 days x 8.8 hours/day $min4PartTime = round($normalHrs / 3, 2); // casual/temp employees must have worked for at leaset 6 months if ($hrsWorked < $min4PartTime){ $isCasual = "true"; } else { $isCasual = "false"; } // casual/temporary staff must have been employeed at least 6 months to be elibible if (strtotime(date('M j, Y', $firstDayTS) . " + 6 months") > $statDateTS && $isCasual == "true"){ $eligible = "<span class='important'>X [new hire]</span> "; } // average hours worked per day $statHrs = 0; if ($daysWorked > 0){ $statHrs = round($hrsWorked / $daysWorked, 2); } // echo __line__.": " . $userID . " - isCasual=" . $isCasual . ", hrsWorked=" . $hrsWorked . ", daysWorked=" . $daysWorked .", min4PartTime=" . $min4PartTime . " | firstDayTS=" . date('M j, Y', $firstDayTS) . " - " . date('M j, Y', $statDateTS) .", statHrs=" . $statHrs . "<br>"; $fl_result = $this->first_last_rule($userID, $statDateTS, $schedRows, $punchRows); if ($fl_result && $daysWorked >= 15){ $eligible = ''; } else if (!$fl_result){ // did not work the last & first schedule shift before and after the stat $eligible = "<span class='comment r_txt'>X [FL Rule]</span> "; } else if ($daysWorked < 15){ //didn't work at least 15 days in the 30 days prior to stat $eligible = "<span class='comment r_txt'>X [" . $daysWorked ."]</span> "; } // if staff get paid minimum hours and minimum is greater than hours earned if ($minStatHrs > $statHrs){ $statHrs = $minStatHrs; } // eligible for stat pay // echo __LINE__.": " . $hrsWorked." " . $daysWorked ." ". $statHrs."<br>"; // echo __line__.": " . $when2payStat ." - " . $lieuDateTS . "<br>"; if ($when2payStat == 'lieu' && $lieuDateTS > 0){ $dataLine[date('M j, Y', $lieuDateTS) . "|" . $userID] = array('hrsWorked'=>$hrsWorked, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>$eligible, 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs'], 'includeInHrs'=>$statRow['includeInHrs']); $dataLine[date('M j, Y', $statDateTS) . "|" . $userID] = array('hrsWorked'=>'', 'daysWorked'=>'', 'statHrs'=>'', 'holName'=>$holName, 'eligible'=>'', 'minStatHrs'=>'', 'alwaysPayStat'=>$statRow[0]['pay'], 'includeInHrs'=>$statRow['includeInHrs'], 'includeInHrs'=>$statRow['includeInHrs']); } else { $dataLine[date('M j, Y', $statDateTS) . "|" . $userID] = array('hrsWorked'=>$hrsWorked, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>$eligible, 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay'], 'includeInHrs'=>$statRow['includeInHrs'], 'includeInHrs'=>$statRow['includeInHrs']); } // echo __line__."-m_master_data: data <pre>"; print_r($dataLine); echo "</pre>"; return $dataLine; } // end function Stat_Hours_NB //===================================================================================================== //===================================================================================================== /* statDateTS = date of stat holiday */ public function Stat_Hours_ON($dateTS, $holName){ // echo __line__."Stat_Hours_ON: ".date('M j, Y', $dateTS)." ".$holName."<br>"; $User_Schedule = new User_Schedule; $Punch_Clock = new Punch_Clock; $User_Punch_Policy = new User_Punch_Policy; $Users = new Users; $User_Stat_Pay = new User_Stat_Pay; $data = array(); $stat_minus_4_weeks = $dateTS - (60*60*24*28); $dateTS1 = $stat_minus_4_weeks; $dateTS2 = $dateTS + (60*60*12); // get hours for the 4-week period $schedRows = $this->get_schedule($userID, '', '', '', $dateTS1, $dateTS2, ''); $punchRows = $this->get_punch_hx($userID, '', '', '', $dateTS1, $dateTS2, ''); // echo __line__."-m_master_data: <pre>"; print_r($punchRows); echo "</pre>"; $fl_rule = $this->first_last_rule($dateTS); // echo __line__.": <pre>".print_r($fl_rule)."</pre>"; $uRows = $Users->search($_SESSION['PID'], $userID, '', '', '', '', $jobAreaID, $dateTS1, $dateTS2, '', '', 'lName'); foreach ($uRows as $userID => $uRow){ $hrsWorked = 0; $daysWorked = 20; // calculate the hours paid over the last 4 weeks; //user stat policy $statRows = $Stat_Pay->search($_SESSION['PID'], $userID, $dateTS1, $dateTS2, '', ''); $statRow = $statRows[0]; $ppRows = $User_Punch_Policy->get($userID, $dateTS, '', $_SESSION['PID']); // get hours punched if (isset($ppRows)){ if ($ppRows['pay_basis'] == 'hours'){ if ($ppRows['paid_brk'] == 'Yes'){ foreach ($punchRows as $key => $punchRow){ if ($punchRow['userID'] == $userID && $punchRow['grossHrs'] > 0){ $hrsWorked += $punchRow['grossHrs']; } } } else { foreach ($punchRows as $key => $punchRow){ if ($punchRow['userID'] == $userID && $punchRow['netHrs'] > 0){ $hrsWorked += $punchRow['netHrs']; } } } // get hours scheduled } else { if ($ppRows['paid_brk'] == 'Yes'){ foreach($schedRows as $key => $schedRow){ if ($schedRow['userID'] == $userID && $schedRow['grossHrs'] > 0){ $hrsWorked += $schedRow['grossHrs']; } } } else { foreach($schedRows as $key => $schedRow){ if ($schedRow['userID'] == $userID && $schedRow['netHrs'] > 0){ $hrsWorked += $schedRow['netHrs']; } } } } } // get away paid for all Staff_Away foreach($schedRows as $key => $schedRow){ if ($schedRow['userID'] == $userID && $schedRow['awayPaid'] == 'Yes'){ if ($schedRow['awayHours'] > 0){ $hrsWorked += $schedRow['awayHours']; } else { $hrsWorked += $schedRow['netHrs']; } } } $statHrs = $hrsWorked / $daysWorked; // entitled to stat pay $eligible = "<span id='col33' class='important'>"; if ($fl_rule[$userID] != ''){ $eligible .= "X"; } else { $eligible .= " "; } $eligible .= "</span>"; $data[date('M j, Y', $dateTS)."|".$userID] = array('name'=>$uRow['fName']." ".$uRow['lName'], 'hrsWorked'=>$hrsWorked, 'days_worked'=>'n/a', 'statHrs'=>round($statHrs,2), 'statTS'=>$dateTS, 'holName'=>$holName, 'eligible' => $eligible, 'alwaysPayStat'=>$statRow['pay'], 'minStatHrs'=>$statRow['hours']); } // echo __line__."-m_master_data: data <pre>"; print_r($data); echo "</pre>"; return $data; } // end function Stat_Hours_NS //===================================================================================================== //===================================================================================================== public function Stat_Hours_AB($dateTS, $holName){ $statHrs_arr = array(); $dateTS1 = $dateTS - (60*60*24*31); $dateTS2 = $dateTS - (60*60*12); $stat_minus_28_days = $dateTS - (60*60*24*28); $User_Schedule = new User_Schedule; $Punch_Clock = new Punch_Clock; $User_Punch_Policy = new User_Punch_Policy; $Users = new Users; $User_Stat_Pay = new User_Stat_Pay; $ppRows = $User_Punch_Policy->get('', $dateTS, '', $_SESSION['PID']); // echo __line__."-m_master_data: ppRows<pre>"; print_r($ppRows); echo "</pre>"; $uRows = $Users->search($_SESSION['PID'], $userID, '', '', '', '', $jobAreaID, $dateTS1, $dateTS2, '', '', 'lName'); // echo __line__."-m_master_data: uRows<pre>"; print_r($uRows); echo "</pre>"; // get paid hours for the 30-day period $schedRows = $this->get_schedule($userID, '', '', '', $dateTS1, $dateTS2, ''); $punchRows = $this->get_punch_hx($userID, '', '', '', $dateTS1, $dateTS2, ''); $day_count = array(); // echo __line__.": <Pre>"; print_r($schedRows); echo "</pre>"; foreach ($schedRows as $key => $schedRow){ if (isset($ppRows[$schedRow['userID']])){ if ($schedRow['netHrs']> 0 && $ppRows[$schedRow['userID']]['pay_basis'] == 'No'){ if (!isset($day_count[$schedRow['userID']])){ $day_count[$schedRow['userID']]['days'] = 1; $day_count[$schedRow['userID']]['hours'] = $schedRow['netHrs']; } else { $day_count[$schedRow['userID']]['days']++; $day_count[$schedRow['userID']]['hours'] += $schedRow['netHrs']; } } } if ($schedRow['awayPaid'] == 'Yes'){ if (!isset($day_count[$schedRow['userID']])){ $day_count[$schedRow['userID']]['days'] = 1; $day_count[$schedRow['userID']]['hours'] = $schedRow['awayHours']; } else { $day_count[$schedRow['userID']]['days']++; $day_count[$schedRow['userID']]['hours'] += $schedRow['awayHours']; } } } $punchRows = $this->get_punches($stat_minus_28_days, $dateTS2); foreach ($punchRows as $key => $punchRow){ if (isset($punchRow['userID'])){ if ($punchRow['netHrs'] > 0 && $ppRows[$punchRow['userID']]['pay_basis'] == 'hours'){ if (!isset($day_count[$punchRow['userID']])){ $day_count[$punchRow['userID']]['days'] = 1; $day_count[$punchRow['userID']]['hours'] = $punchRow['netHrs']; } else { $day_count[$punchRow['userID']]['days'] ++; $day_count[$punchRow['userID']]['hours'] += $punchRow['netHrs']; } } } } // echo __line__."-m_master_data: schedRows<pre>"; print_r($day_count); echo "</pre>"; $fl_rule = $this->first_last_rule($dateTS); foreach ($uRows as $userID => $uRow){ $days_worked = 0; $hrsWorked = 0; //user stat policy $statRow = $User_Stat_Pay->get('', $userID, $dateTS, ''); if (isset($day_count[$userID])){ if ($day_count[$userID]['days'] > 0){ $statHrs = round(($day_count[$userID]['hours'] * 1.04) * 0.05,2); if (isset($fl_rule[$userID])){ $eligible = $fl_rule[$userID]; } } else { $statHrs = 0; } } else { $statHrs = 0; } if (!isset($eligible)){ $eligible = ''; } $statHrs_arr[$userID] = array('name'=>$uRow['fName']." ".$uRow['lName'], 'hrsWorked'=>$hrsWorked, 'days_worked'=>$days_worked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>$eligible, 'alwaysPayStat'=>$statRow['pay'], 'minStatHrs'=>$statRow['hours']); } return $statHrs_arr; } // end method Stat_Hours_AB //===================================================================================================== //===================================================================================================== // returns array where key = userID, value = X if they did not satisfy FL Rule, empty if they did public function first_last_rule($u_ID, $dateTS, $FL_scheds, $FL_punch){ // dateTS is the date of the stat holiday date_default_timezone_set($_SESSION['timeZone']); $result = false; // echo __line__ . "<pre>"; print_r($FL_scheds); echo "</pre>"; // get dates of Last and First scheduled work days foreach ($FL_scheds as $key => $FL_sched){ // echo __line__ . " key=" . $key . ", " . date('His M j, Y', $FL_sched['dateTS']) . " - " . date('his M j, Y', $dateTS) . " | " . $FL_sched['SHD_netHrs'] . ", " . $FL_sched['awayType'] . ", " . $FL_sched['office'] .", " . $FL_sched['holIsObserved'] . "<br>"; // get the last scheduled shift before the stat (filtering out closures) if ($FL_sched['dateTS'] < $dateTS && $FL_sched['SHD_netHrs'] > 0 && $FL_sched['awayType'] != 'paid' && ($FL_sched['office'] == 'open' || $FL_sched['holIsObserved'] == 'no')){ $lastTS = $FL_sched['dateTS']; // last day scheduled after stat } // get the first scheduled shift after the stat if ($FL_sched['dateTS'] > $dateTS && $FL_sched['SHD_netHrs'] > 0 && $FL_sched['awayType'] != 'paid' && ($FL_sched['office'] == 'open' || $FL_sched['holIsObserved'] == 'no')){ $firstTS = $FL_sched['dateTS'] + 60*60*23 + 60*59 + 59; // first day scheduled after stat break; } } // echo __line__."-m_master_data: key=" . $key . "<br>"; // echo __line__. " last day before=" . date('His M j, Y', $lastTS).", first day after = " . date('His M j, Y', $firstTS) . "<br>"; $result = true; // if they don't have payable hours (either work or paid away time) on both of these days they do not satisfy rule if ((isset($lastTS) && isset($firstTS)) && (($FL_punch[date('M j, Y', $lastTS)."|" . $u_ID]['PCH_payableHrs'] <= 0 && $FL_scheds[date('M j, Y', $lastTS)."|" . $u_ID]['awayPaidUnpaid'] != 'paid') || ($FL_punch[date('M j, Y', $firstTS)."|" . $u_ID]['PCH_payableHrs'] <= 0 && $FL_scheds[date('M j, Y', $firstTS)."|" . $u_ID]['awayPaidUnpaid'] != 'paid'))){ $result = false; } return $result; } // end first_last_rule function //===================================================================================================== //===================================================================================================== public function week_OT_BC($wkTotPayableArr, $wkTotRegHrsArr, $wkTotOtHrsArr, $userID, $ave_agree, $reg_hrs_per_wk){ $data = array(); // echo "<div id='col100'>"; // echo __line__.": <pre>"; print_r($wkTotPayableArr); echo "</pre>"; if ($ave_agree == 'Y'){ $max_hrs_day = 12; } else { $max_hrs_day = 8; } foreach ($wkTotPayableArr as $key => $time){ if ($time > $max_hrs_day){ $wkTotPayableArr[$key] = $max_hrs_day; } } $sum = array_sum($wkTotPayableArr); // echo __line__.": "; print_r($wkTotPayableArr); echo "</pre>"; // echo $sum."</div>"; if ($sum > $reg_hrs_per_wk){ $otPayable += ($sum - $reg_hrs_per_wk) + array_sum($wkTotOtHrsArr); $regPayable = $reg_hrs_per_wk; } else { $regPayable = $sum; if (isset($wkTotOtHrsArr)){ $otPayable += array_sum($wkTotOtHrsArr); } else { $otPayable = ''; } } $data[$userID] = array('regPayable'=>$regPayable, 'otPayable'=>$otPayable); return $data; } //===================================================================================================== //===================================================================================================== public function OT_AB(){ } // end OT_AB //===================================================================================================== //===================================================================================================== public function week_OT($wkTotNetHrsArr, $userID, $reg_hrs_per_wk){ // echo __line__.": ".$wkTotNetHrsArr[$userID]." ".$reg_hrs_per_wk."<br>"; if (isset($wkTotNetHrsArr[$userID])){ if ($wkTotNetHrsArr[$userID] > $reg_hrs_per_wk){ $otPayable = $wkTotNetHrsArr[$userID] - $reg_hrs_per_wk; $regPayable = $reg_hrs_per_wk; } else { $regPayable = $wkTotNetHrsArr[$userID]; $otPayable = ''; } } else { $regPayable = ''; $otPayable = ''; } $data[$userID] = array('regPayable'=>$regPayable, 'otPayable'=>$otPayable); // echo "<pre>"; print_r($data); echo "</pre>"; return $data; } } ?>
© 2026 UnknownSec