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-1.php
<?php class Master_Data { private $Database; private $db_table = 'pr_away_types'; function __construct(){ global $Database; $this->Database = $Database; } //===================================================================================================== //===================================================================================================== public function get_schedule($userID, $groupID, $jobAreaID, $punch_shift, $dateTS1, $dateTS2){ // echo __LINE__.": u=" . $userID." | g=" . $groupID." | j=". $jobAreaID." | p=". $punch_shift ." dTS1=".date('His M j/y', $dateTS1). " | dTS2=" . date('His M j/y', $dateTS2)."<br>"; $Users = new Users; $Meal_Punch_Policy = new Meal_Punch_Policy; $Default_Schedule = new Default_Schedule; $Schedule_Ad_Hoc = new Schedule_Ad_Hoc; $Schedule_Note = new Schedule_Note; $Office_Closures = new Office_Closures; $Staff_Away = new Staff_Away; $Pr_Away_Types = new Pr_Away_Types; $User_Vacation = new User_Vacation; if (isset($_SESSION['timeZone'])){ date_default_timezone_set($_SESSION['timeZone']); } else { date_default_timezone_set('Canada/Pacific'); } $allDataArr = array(); if ($dateTS1 > 0 && $dateTS2 >= $dateTS1){ if ($dateTS2 <= 0){ $dateTS2 = strtotime('tomorrow') - 1; } // get Meal/Punch Policy $ppRows = array(); $pupoRows = $Meal_Punch_Policy->get($userID, $dateTS1, ''); if ($userID > 0){ $punchPolicyRows[$userID] = $pupoRows; } else { $punchPolicyRows = array(); foreach ($pupoRows as $key => $pupoRow){ $punchPolicyRows[$pupoRow['userID']] = $pupoRow; } } // echo __LINE__.": <pre>"; print_r($punchPolicyRows); echo "</pre>"; for ($t=$dateTS1; $t<=$dateTS2; $t+=60*60*24){ foreach ($punchPolicyRows as $uID => $ppRow){ $allDataArr[date('M j, Y', $t)."|". $ppRow['userID']] = array('dateTS'=>$t, 'userID'=>$uID, 'punch_shift'=>$ppRow['punch_shift'], 'punch_meal'=>$ppRow['punch_meal'], 'num_brks'=>$ppRow['num_brks'], 'paid_brk'=>$ppRow['paid_brk']); if ($ppRow['effectiveTS'] <= $t && ($ppRow['expireTS'] == 0 || $ppRow['expireTS'] > $t)){ $ppRows2[$uID] = $ppRow; $ppRows[date('M j, Y', $t)."|".$uID] = $ppRow; } } } // echo __LINE__.": <pre>allDataArr:"; print_r($allDataArr); echo "</pre>"; // echo __line__."-m_master_data- users_arr: punch_shift=" . $punch_shift."<pre>"; print_r($ppRows); echo "</pre>"; // get all closures & stats for the time period == staff could work on a stat so holidays are not necessarily closed // holRows[groupID][date] = closureID, holName, percent_pay, stat (Yes/No), observed(Yes/No) $holRows = $Office_Closures->get_date_range($dateTS1, $dateTS2); // get all active employees $usersArr = $Users->get($userID, $groupID, 'all', $jobAreaID, $dateTS1, $dateTS2); // echo __line__."-m_master_data- users_arr: " . count($usersArr)."<pre>"; print_r($usersArr); echo "</pre>"; // filter users by pay policy (hourly vs. salaried) foreach ($usersArr as $uID => $user){ if ($punch_shift != '' && $ppRows2[$uID]['punch_shift'] != $punch_shift){ // echo __LINE__.": " . $uID.": " . $punch_shift ." " . $ppRows[$uID]['punch_shift'].", groupID=" . $groupID.", parentGrpID=". $_SESSION['parentGrpID']." / "; print_r($user['userGroups']); echo "<br>"; unset($usersArr[$uID]); } } // echo __line__."-m_master_data- users_arr: " . count($usersArr)." <pre>"; print_r($usersArr); echo "</pre>"; $users_arr = array(); foreach ($usersArr as $uID => $user){ if ($user['jobTitle'] == 'Dentist' || $user['jobTitle'] == 'Associate'){ $users_arr[$user['userID']]['name'] = $user['prefix']." ".substr($user['fName'],0,1)." ".$user['lName']; } else { $users_arr[$user['userID']]['name'] = $user['fName']." ".$user['lName']; } $users_arr[$user['userID']]['userGroups'] = $user['userGroups']; $users_arr[$user['userID']]['firstDayTS'] = $user['firstDayTS']; } // echo __line__."-m_master_data- users_arr: " . count($usersArr)." <pre>"; print_r($usersArr); 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>"; // is paid Vacation paid every paycheque or as a regular day $vacPolicy_arr = $User_Vacation->get($userID, $dateTS1, $dateTS2, ''); $vacPolicyArr = array(); foreach ($vacPolicy_arr as $key => $vacPolicyRow){ for ($t=$dateTS1; $t<=$dateTS2; $t+=60*60*24){ if ($vacPolicyRow['effectiveTS'] <= $t && ($vacPolicyRow['expireTS'] == 0 || $vacPolicyRow['expireTS'] > $t)){ $key = date('M j, Y', $t)."|".$vacPolicyRow['userID']; $vacPolicyArr[$key]['way2payVac'] = $vacPolicyRow['way2pay']; $vacPolicyArr[$key]['vacRate'] = $vacPolicyRow['rate']; $vacPolicyArr[$key]['inclPaidVac'] = $vacPolicyRow['inclPaidVac']; $vacPolicyArr[$key]['inclPaidAway'] = $vacPolicyRow['inclPaidAway']; } } } // echo __LINE__."-m_master_data: vacPolicyArr<pre>"; print_r($vacPolicyArr); echo "</pre>"; // build array of default schedules for specified week; $defScheds = $Default_Schedule->get('', $dateTS1, $dateTS2, '', ''); $dScheds = array(); foreach ($defScheds as $key => $defSched){ // echo __line__.": ".$defSched['userID'] ." ".array_key_exists($defSched['userID'], $usersArr)."<br>"; if (array_key_exists($defSched['userID'], $usersArr)){ // 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($users_arr[$value['userID']])){ $start1 = ''; if ($value['start1'] != ''){ $start1 = str_pad($value['start1'],4, '0', STR_PAD_LEFT); } $finish1 = ''; if ($value['finish1'] != ''){ $finish1 = str_pad($value['finish1'],4, '0', STR_PAD_LEFT); } $start2 = ''; if ($value['start2'] != ''){ $start2 = str_pad($value['start2'],4, '0', STR_PAD_LEFT); } $finish2 = ''; if ($value['finish2'] != ''){ $finish2 = str_pad($value['finish2'],4, '0', STR_PAD_LEFT); } $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>"; $awayTypesArr = $Pr_Away_Types->get_4_menu($groupID); $awayPaidArr = $Pr_Away_Types->get_4_paidMenu(); // echo __line__.": m_master_data saRows count=<pre> "; print_r($awayTypesArr); echo "</pre>"; $saRows = array(); $saRows = $Staff_Away->get('', $dateTS1, $dateTS2, '', ''); // echo __line__.": m_master_data saRows count=<pre> "; print_r($saRows); echo "</pre>"; 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($users_arr[$saRow['userID']]) && $saRow['startTS'] - 3600 <= $t && $saRow['endTS'] >= $t && $saRow['status'] == 'confirmed'){ if (isset($saRows[date('M j, Y', $t)."|".$saRow['userID']])){ $saRows[date('M j, Y', $t)."|".$saRow['userID']]['stAwayID'] .= "|".$saRow['stAwayID']; $saRows[date('M j, Y', $t)."|".$saRow['userID']]['awayTypeID'] .= "|".$saRow['awayTypeID']; $saRows[date('M j, Y', $t)."|".$saRow['userID']]['awayType'] .= ", ".$awayTypesArr[$saRow['awayTypeID']]; $saRows[date('M j, Y', $t)."|".$saRow['userID']]['awayPaidUnpaid'] .= "|".$awayPaidArr[$saRow['awayTypeID']]; $saRows[date('M j, Y', $t)."|".$saRow['userID']]['hours'] .= "|".$saRow['hours']; $saRows[date('M j, Y', $t)."|".$saRow['userID']]['note'] .= "|".$saRow['note']; $saRows[date('M j, Y', $t)."|".$saRow['userID']]['bankedTimeUsed'] .= "|".$saRow['bankedTimeUsed']; } else { $saRows[date('M j, Y', $t)."|".$saRow['userID']] = array('stAwayID'=>$saRow['stAwayID'], 'userID'=>$saRow['userID'], 'awayTypeID'=>$saRow['awayTypeID'], 'awayType'=>$awayTypesArr[$saRow['awayTypeID']], 'awayPaidUnpaid'=>$awayPaidArr[$saRow['awayTypeID']], '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 __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){ //populate allDataArr with default schedule if ($dSched['effectiveTS'] <= $t && ($dSched['expireTS'] > $t || $dSched['expireTS'] == 0)){ $dayNum = date('w', $t); $key = date('M j, Y', $t)."|".$dSched['userID']; $allDataArr[$key]['name'] = $users_arr[$dSched['userID']]['name']; $allDataArr[$key]['jobAreaID'] = $usersArr[$dSched['userID']]['jobAreaID']; $allDataArr[$key]['userGroups'] = $usersArr[$dSched['userID']]['userGroups']; $allDataArr[$key]['firstDayTS'] = $usersArr[$dSched['userID']]['firstDayTS']; $allDataArr[$key]['ave_agree'] = $dSched['ave_agree']; $allDataArr[$key]['way2payVac'] = $vacPolicyArr[$key]['way2payVac']; $allDataArr[$key]['vacRate'] = $vacPolicyArr[$key]['vacRate']; $allDataArr[$key]['inclPaidVac'] = $vacPolicyArr[$key]['inclPaidVac']; $allDataArr[$key]['inclPaidAway'] = $vacPolicyArr[$key]['inclPaidAway']; // office is not closed for the day if (!isset($closedRows[date('M j, Y', $t)])){ $starts1arr = explode("|", $dSched['starts1']); $prepsEnd1arr = explode("|", $dSched['prepsEnd1']); $finishes1Arr = explode("|", $dSched['finishes1']); $starts2arr = explode("|", $dSched['starts2']); $finishes2Arr = explode("|", $dSched['finishes2']); $prepsEnd2arr = explode("|", $dSched['prepsEnd2']); $meal_min1Arr = explode("|", $dSched['meal_min1']); $meal_min2Arr = explode("|", $dSched['meal_min2']); if (isset($starts1arr[$dayNum])){ $allDataArr[$key]['SHD_DF-start1'] = $starts1arr[$dayNum]; } if (isset($prepsEnd1arr[$dayNum])){ $allDataArr[$key]['SHD_DF-prepsEnd1'] = $prepsEnd1arr[$dayNum]; } if (isset($finishes1Arr[$dayNum])){ $allDataArr[$key]['SHD_DF-finish1'] = $finishes1Arr[$dayNum]; } if (isset($starts2arr[$dayNum])){ $allDataArr[$key]['SHD_DF-start2'] = $starts2arr[$dayNum]; } if (isset($prepsEnd2arr[$dayNum])){ $allDataArr[$key]['SHD_DF-prepsEnd2'] = $prepsEnd2arr[$dayNum]; } if (isset($finishes2Arr[$dayNum])){ $allDataArr[$key]['SHD_DF-finish2'] = $finishes2Arr[$dayNum]; } if (isset($meal_min1Arr[$dayNum])){ $allDataArr[$key]['SHD_DF-meal_min1'] = $meal_min1Arr[$dayNum]; } if (isset($meal_min2Arr[$dayNum])){ $allDataArr[$key]['SHD_DF-meal_min2'] = $meal_min2Arr[$dayNum]; } $allDataArr[$key]['office'] = 'open'; } else { $allDataArr[$key]['office'] = 'closed'; } } } // echo __line__."<pre>allDataArr: "; print_r($allDataArr); echo "</pre>"; foreach ($users_arr as $userID => $uRow){ //populate allDataArr with ad hoc schedule $key = date('M j, Y', $t)."|".$userID; 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'] = ''; } } } // echo "<br>".__line__."-m_master_data: (get_schedule) 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; if (is_array($row['userGroups'])){ foreach ($row['userGroups'] as $gID => $percent){ if (isset($holRows[$gID][date('M j, Y', $row['dateTS'])])){ $allDataArr[$key]['holName'] = $holRows[$gID][date('M j, Y', $row['dateTS'])]['holName']; $allDataArr[$key]['holIsStat'] = $holRows[$gID][date('M j, Y', $row['dateTS'])]['stat']; $allDataArr[$key]['holIsObserved'] = $holRows[$gID][date('M j, Y', $row['dateTS'])]['observed']; $allDataArr[$key]['holIsPaid'] = $holRows[$gID][date('M j, Y', $row['dateTS'])]['paid']; $allDataArr[$key]['holPercentPay'] = $holRows[$gID][date('M j, Y', $row['dateTS'])]['percent_pay']; } } } else { $allDataArr[$key]['holName'] = ''; $allDataArr[$key]['holIsStat'] = ''; $allDataArr[$key]['holIsObserved'] = ''; $allDataArr[$key]['holIsPaid'] = ''; $allDataArr[$key]['holPercentPay'] = ''; } // echo __LINE__.": " . $key . " | " . isset($saRows[$key]) ."<br>"; // calculate grossHrs, meal_min, netHrs & target from scheduled hours 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 { $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 ($row['SHD_DF-prepsEnd1'] > 0){ $prepsEnd1TS = strtotime(substr($key, 0, strpos($key,'|')).", ".$row['SHD_DF-prepsEnd1']); } if ($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_grossHrs'] = $SHD_grossHrs; if ($SHD_meal_min1 != ''){ $allDataArr[$key]['SHD_mealHrs1'] = $SHD_meal_min1 / 60; } else { $allDataArr[$key]['SHD_mealHrs1'] = 0; } if ($meal_min2 != ''){ $allDataArr[$key]['SHD_mealHrs2'] = $SHD_meal_min2 / 60; } else { $allDataArr[$key]['SHD_mealHrs2'] = 0; } $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); $allDataArr[$key]['SHD_netHrs'] = $SHD_netHrs; $SHD_payableHrs = $SHD_netHrs; if ($row['paid_brk'] == 'yes'){ $SHD_payableHrs = $SHD_grossHrs; } $allDataArr[$key]['SHD_payableHrs'] = $SHD_payableHrs; // //========== away time =============== 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'] = $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'] = $SHD_payableHrs; } } } } else { // $allDataArr[$key]['awayPaidUnpaid'] = $saRows[$key]['awayPaidUnpaid']; if ($saRows[$key]['awayPaidUnpaid'] == 'paid' && $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'] = $SHD_payableHrs; } } else if ($saRows[$key]['awayPaidUnpaid'] == 'unpaid' && $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'] = $SHD_payableHrs; } } } $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'] -= $saRows[$key]['bankedTimeUsed']; } 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]['SHD_payableHrs'] = $SHD_grossHrs; // meal breaks are not paid - deduct meal break time to get SHD_netHrs if ($ppRows[$key]['paid_brk'] == 'no'){ $allDataArr[$key]['SHD_payableHrs'] = $SHD_netHrs; } } } // echo __line__.": m_master_data<pre>"; print_r($allDataArr); echo "</pre>"; return $allDataArr; } // end get_schedule method //===================================================================================================== //===================================================================================================== public function get_punch_hx($userID, $groupID, $jobAreaID, $punch_shift, $dateTS1, $dateTS2){ $Users = new Users; $Punch_Clock = new Punch_Clock; $Punch_Cx = new Punch_Cx; $Meal_Punch_Policy = new Meal_Punch_Policy; $Staff_Away = new Staff_Away; $Pr_Away_Types = new Pr_Away_Types; $data = array(); date_default_timezone_set($_SESSION['timeZone']); if ($dateTS2 <= 0){ $dateTS2 = $dateTS1 + 60*60*24*14; } if ($dateTS1 > 0){ // echo __LINE__."==========: (" . $dateTS1.") " . date('His M j, Y', $dateTS1)." - " . date('His M j, Y', $dateTS2) ."<br>"; // get Meal/Punch Policy $ppRows = array(); $pupoRows = $Meal_Punch_Policy->get($userID, $dateTS1, ''); if ($userID > 0){ $punchPolicyRows[$userID] = $pupoRows; } else { $punchPolicyRows = array(); foreach ($pupoRows as $key => $pupoRow){ $punchPolicyRows[$pupoRow['userID']] = $pupoRow; } } foreach ($punchPolicyRows as $uID => $ppRow){ for ($t=$dateTS1; $t<=$dateTS2; $t+=60*60*24){ if ($ppRow['effectiveTS'] <= $t && ($ppRow['expireTS'] == 0 || $ppRow['expireTS'] > $t)){ $ppRows[date('M j, Y', $t)."|" .$uID] = $ppRow; $ppRows2[$uID] = $ppRow; } } } // echo __line__."-m_master_data- users_arr: punch_shift=" . $punch_shift."<pre>"; print_r($ppRows2); echo "</pre>"; // get all active employees $usersArr = $Users->get($userID, '', 'all', $jobAreaID, $dateTS1, $dateTS2); // echo __line__."-m_master_data- users_arr: " . count($usersArr)."<pre>"; print_r($usersArr); echo "</pre>"; // filter usersArr by hourly or salaried foreach ($usersArr as $uID => $user){ if ($punch_shift != '' && $ppRows2[$uID]['punch_shift'] != $punch_shift){ unset($usersArr[$uID]); } } // echo __line__."-m_master_data- users_arr: " . count($usersArr)." <pre>"; print_r($usersArr); echo "</pre>"; $users_arr = array(); foreach ($usersArr as $uID => $user){ if ($user['jobTitle'] == 'Dentist' || $user['jobTitle'] == 'Associate'){ $users_arr[$user['userID']]['name'] = $user['prefix'] . " " .substr($user['fName'],0,1)." ".$user['lName']; } else { $users_arr[$user['userID']]['name'] = $user['fName']." ".$user['lName']; } $users_arr[$user['userID']]['userGroups'] = $user['userGroups']; $users_arr[$user['userID']]['firstDayTS'] = $user['firstDayTS']; } // echo __line__."-m_master_data- users_arr: " . count($users_arr)." <pre>"; print_r($users_arr); echo "</pre>"; $awayTypesArr = $Pr_Away_Types->get_4_menu($groupID); $awayPaidArr = $Pr_Away_Types->get_4_paidMenu(); $saRows = array(); $saRows = $Staff_Away->get('', $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($users_arr[$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']], 'awayPaidUnpaid'=>$awayPaidArr[$saRow['awayTypeID']], '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 ($users_arr as $uID => $uRow){ // echo " (". __line__." ".$uID .")<br>"; $key = date('M j, Y', $t)."|". $uID; $data[$key] = array('userID'=>$uID, 'dateTS'=>$t, 'name'=>$uRow['name'], 'userGroups'=>$uRow['userGroups'], 'paid_brk'=>$ppRows[$key]['paid_brk'], 'punch_shift'=>$ppRows[$key]['punch_shift'], 'punch_meal'=>$ppRows[$key]['punch_meal'], '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'=>''); } } // echo __line__.": data: <pre>"; print_r($data);echo "</pre>"; $punchRows = $Punch_Clock->get($userID, $dateTS1, $dateTS2, ''); // echo __line__."-m_master_data: userID=".$userID." punchRows<pre>"; print_r($punchRows); echo "</pre>"; foreach ($punchRows as $key => $punchRow){ for ($t = $dateTS1; $t<=$dateTS2; $t += 60*60*24){ if (date('M j, Y', $punchRow['dateTS']) == date('M j, Y', $t)){ $punchRows[date('M j, Y', $t) . "|".$punchRow['userID']] = $punchRow; } unset($punchRows[$key]); } } $cxRows = $Punch_Cx->get($userID, '', $dateTS1, $dateTS2, '', ''); // echo __line__."-m_master_data: cxRows ". count($cxRows)."<pre>"; print_r($cxRows); echo "</pre>"; foreach ($cxRows as $key => $cxRow){ // echo __LINE__.": " . date('h:i M j, Y', $cxRow['dateTS']) . " - ". $cxRow['userID'] ."<br>"; for ($t = $dateTS1; $t <= $dateTS2; $t += 60*60*24){ if (date('M j, Y', $cxRow['dateTS']) == date('M j, Y', $t)){ $cxRows[date('M j, Y', $t) . "|".$cxRow['userID']][$cxRow['whichPunch']] = $cxRow; } unset($cxRows[$key]); } } 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']; } if (isset($cxRows[$key])){ foreach ($cxRows[$key] as $whichPunch => $cxRow){ $data[$key]['PCX_' . $whichPunch] = $cxRow['punchTime']; $data[$key]["XID_". $whichPunch] = $cxRow['punchcxID']; } } } // echo __line__."-m_master_data: data<pre>"; print_r($data); 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 && $inMeal1 < $outMeal1) || ($outMeal2 > 0 && $inMeal2 < $outMeal2)){ $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 ($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']; $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 data array <pre>"; print_r($data["Feb 22, 2021|143"]); echo "</pre>"; return $data; } // end get_punch_hx method //===================================================================================================== //===================================================================================================== public function get_staff_hours($userID, $groupID, $jobAreaID, $punch_shift, $dateTS1, $dateTS2){ $Empl_Standards = new Empl_Standards; $Users = new Users; $Staff_Away = new Staff_Away; $Time_Bank = new Time_Bank; $Stat_Pay = new Stat_Pay; // echo __LINE__.": u=" . $userID." | g=" . $groupID." | j=". $jobAreaID." | p=". $punch_shift ." dTS1=".date('His M j/y', $dateTS1). " | dTS2=" . date('His M j/y', $dateTS2)."<br>"; date_default_timezone_set($_SESSION['timeZone']); // echo __LINE__.": m_master ". $dateTS1." (".date('His M j, Y', $dateTS1).")<br>"; $empSt = $Empl_Standards->get('', $_SESSION['prov'], $dateTS1, $dateTS2); // echo __line__."-m_master_data: empSt<pre>"; print_r($empSt); echo "</pre>"; $punch_arr = array(); $punch_arr = $this->get_punch_hx($userID, $groupID, $jobAreaID, $punch_shift, $dateTS1, $dateTS2); // echo __line__."-m_master_data: punch_arr<pre>"; print_r($punch_arr); echo "</pre>"; $sched_arr = array(); $sched_arr = $this->get_schedule($userID, $groupID, $jobAreaID, $punch_shift, $dateTS1, $dateTS2); // echo __line__."-m_master_data: sched_arr<pre>"; print_r($sched_arr); echo "</pre>"; // is stat paid every paycheque or as a regular day $statPay_arr = $Stat_Pay->get('', $userID, $dateTS1, $dateTS2); foreach ($statPay_arr as $key => $statPayRow){ $statPay_arr[$statPayRow['userID']]['way2pay'] = $statPayRow['way2pay']; $statPay_arr[$statPayRow['userID']]['includeStatPay'] = $statPayRow['includeStatPay']; $statPay_arr[$statPayRow['userID']]['alwaysPayStat'] = $statPayRow['pay']; unset($statPay_arr[$key]); } // echo __LINE__."-m_master_data: stat_pay<pre>"; print_r($statPay_arr); echo "</pre>"; // has any time been banked in this pay period $bankedRows = $Time_Bank->get('', '', $dateTS1, $dateTS2); // echo __LINE__."-m_master_data: bankedRows<pre>"; print_r($bankedRows); echo "</pre>"; $bankedTime_arr = array(); foreach ($bankedRows as $bankedRow){ if ($bankedRow['credit'] > 0){ $bankedTime_arr[$bankedRow['userID']] = array('type'=>$bankedRow['type'], 'credit'=>$bankedRow['credit']); } } // echo __LINE__."-m_master_data: bankedTime_arr<pre>"; print_r($bankedTime_arr); echo "</pre>"; $all_hours_arr = array(); foreach ($sched_arr as $key => $row){ for($d = $dateTS1; $d <= $dateTS2; $d+= 60*60*24){ $all_hours_arr[date('M j, Y', $d)."|". $row['userID']] = array('dateTS'=>$row['dateTS'], 'userID'=>$row['userID'], 'name'=>$row['name'], 'way2payStat'=>$statPay_arr[$row['userID']]['way2pay'], 'includeStatPay'=>$statPay_arr[$row['userID']]['includeStatPay'], 'alwaysPayStat'=>$statPay_arr[$row['userID']]['alwaysPayStat']); } } // echo __LINE__."-m_master_data: all_hours_arr<pre>"; print_r($all_hours_arr); echo "</pre>"; $totalPaidHrsArr = array(); // for overview report Hours Worked // parse scheduled hours into all_hours_array foreach ($sched_arr as $key => $row){ $all_hours_arr[$key]['dateTS'] = $row['dateTS']; $all_hours_arr[$key]['userID'] = $row['userID']; $all_hours_arr[$key]['name'] = $row['name']; $all_hours_arr[$key]['jobAreaID'] = $row['jobAreaID']; $all_hours_arr[$key]['userGroups'] = $row['userGroups']; $all_hours_arr[$key]['firstDayTS'] = $row['firstDayTS']; $all_hours_arr[$key]['punch_shift'] = $row['punch_shift']; $all_hours_arr[$key]['punch_meal'] = $row['punch_meal']; $all_hours_arr[$key]['paid_brk'] = $row['paid_brk']; $all_hours_arr[$key]['ave_agree'] = $row['ave_agree']; $all_hours_arr[$key]['office'] = $row['office']; $all_hours_arr[$key]['way2payVac'] = $row['way2payVac']; $all_hours_arr[$key]['vacRate'] = $row['vacRate']; $all_hours_arr[$key]['inclPaidVac'] = $row['inclPaidVac']; $all_hours_arr[$key]['inclPaidAway'] = $row['inclPaidAway']; $all_hours_arr[$key]['stat2bank'] = 0; $all_hours_arr[$key]['SHD_start1'] = $row['SHD_DF-start1']; if ($row['SHD_AH-start1'] != ''){ $all_hours_arr[$key]['SHD_start1'] = $row['SHD_AH-start1']; } $all_hours_arr[$key]['SHD_prepEnd1'] = $row['SHD_DF-prepsEnd1']; $all_hours_arr[$key]['SHD_finish1'] = $row['SHD_DF-finish1']; if ($row['SHD_AH-finish1'] != ''){ $all_hours_arr[$key]['SHD_finish1'] = $row['SHD_AH-finish1']; } $all_hours_arr[$key]['SHD_start2'] = $row['SHD_DF-start2']; if ($row['SHD_AH-start2'] != ''){ $all_hours_arr[$key]['SHD_start2'] = $row['SHD_AH-start2']; } $all_hours_arr[$key]['SHD_prepEnd2'] = $row['SHD_DF-prepsEnd2']; $all_hours_arr[$key]['SHD_finish2'] = $row['SHD_DF-finish2']; if ($row['SHD_AH-finish2'] != ''){ $all_hours_arr[$key]['SHD_finish2'] = $row['SHD_AH-finish2']; } $all_hours_arr[$key]['SHD_meal_min1'] = $row['SHD_DF-meal_min1']; if ($row['SHD_AH-meal_min1'] != ''){ $all_hours_arr[$key]['SHD_meal_min1'] = $row['SHD_AH-meal_min1']; } $all_hours_arr[$key]['SHD_meal_min2'] = $row['SHD_DF-meal_min2']; if ($row['SHD_AH-meal_min2'] != ''){ $all_hours_arr[$key]['SHD_meal_min2'] = $row['SHD_AH-meal_min2']; } $all_hours_arr[$key]['SHD_grossHrs'] = $row['SHD_grossHrs']; $all_hours_arr[$key]['SHD_netHrs'] = $row['SHD_netHrs']; $all_hours_arr[$key]['SHD_payableHrs'] = $row['SHD_payableHrs']; $all_hours_arr[$key]['holName'] = $row['holName']; $all_hours_arr[$key]['holIsStat'] = $row['holIsStat']; $all_hours_arr[$key]['holIsObserved'] = $row['holIsObserved']; $all_hours_arr[$key]['holIsPaid'] = $row['holIsPaid']; $all_hours_arr[$key]['holPercentPay'] = $row['holPercentPay']; $all_hours_arr[$key]['awayType'] = $row['awayType']; $all_hours_arr[$key]['awayPaid'] = $row['awayPaid']; $all_hours_arr[$key]['awayUnpaid'] = $row['awayUnpaid']; $all_hours_arr[$key]['awayFromBank'] = $row['awayFromBank']; $all_hours_arr[$key]['awayComment'] = $row['awayComment']; $all_hours_arr[$key]['awayHours'] = $row['awayHours']; // get stat hours for office closures if ($statRows['way2pay'] != 'percent' && ($row['holPercentPay'] > 0 || $row['holIsStat'] == 'Yes')){ if (isset($bankedTime_arr[$row['userID']])){ if ($bankedTime_arr[$row['userID']]['type'] == 'stat'){ $all_hours_arr[$key]['stat2bank'] = $bankedTime_arr[$row['userID']]['credit']; } } if ($_SESSION['prov'] == 'BC'){ $statRows[$key] = $this->Stat_Hours_BC($row['userID'], $row['firstDayTS'], $row['dateTS'], $row['holName']); } else if ($_SESSION['prov'] == 'NL'){ $statRows[$key] = $this->Stat_Hours_NL($row['userID'], $row['firstDayTS'], $row['dateTS'], $row['holName']); } else if ($_SESSION['prov'] == 'NS'){ $statRows = $this->Stat_Hours_NS($row['dateTS'], $row['holName']); } else if ($_SESSION['prov'] == 'AB'){ $statRows = $this->Stat_Hours_AB($row['dateTS'], $row['holName']); } else if ($_SESSION['prov'] == 'ON'){ $statRows = $this->Stat_Hours_ON($row['dateTS'], $row['holName']); } else if ($_SESSION['prov'] == 'NB'){ $statRows[$key] = $this->Stat_Hours_NB($row['userID'], $row['dateTS'], $row['holName']); } } } // echo __line__."-m_master_data: statRows<pre>"; print_r($statRows); echo "</pre>"; // 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']; // echo __LINE__.": " . $all_hours_arr[$key]['punch_meal'] ."<br>"; if ($all_hours_arr[$key]['punch_meal'] == 'no'){ $mealHrs = floatval($all_hours_arr[$key]['SHD_meal_min1']) / 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<pre>"; print_r($all_hours_arr); echo "</pre>"; // echo __line__." master [get_staff_hours] userID=". $userID.", groupID=".$groupID.", jobAreaID=". $jobAreaID.", punch_shift=".$punch_shift.", dateTS1=". $dateTS1." (".date('M j, Y', $dateTS1)."), dateTS2=".$dateTS2."<br>"; foreach ($all_hours_arr as $key => $row){ // Stat Holiday Eligibility if ($row['way2payStat'] != 'percent'){ $all_hours_arr[$key]['statHrs'] = $statRows[$key]['statHrs'] - $all_hours_arr[$key]['stat2bank']; $all_hours_arr[$key]['eligible'] = $statRows[$key]['eligible']; $all_hours_arr[$key]['daysWorked'] = $statRows[$key]['daysWorked']; $all_hours_arr[$key]['alwaysPayStat'] = $statRows[$key]['alwaysPayStat']; $all_hours_arr[$key]['minStatHrs'] = $statRows[$key]['minStatHrs']; $statHrs = $statRows[$key]['statHrs'] - $all_hours_arr[$key]['stat2bank']; if (floatval($statRows[$key]['minStatHrs']) > $statRows[$key]['statHrs']){ $statHrs = $statRows[$key]['minStatHrs']; } } else { $all_hours_arr[$key]['statHrs'] = ''; } $dayPayableTotal = 0; if ($row['punch_shift'] == 'yes'){ // echo __LINE__.": " . $key ." = " . isset($statRows[$key]) . " - " . $statHrs ."<br>"; if ((isset($statRows[$key]) && $statRows[$key]['includeStatPay'] == 'yes' && $statRows[$key]['eligible'] == '') || $statRows[$key]['alwaysPayStat'] == 'yes'){ $dayPayableTotal = ($row['holPercentPay'] * floatval($statHrs) / 100); } else if ($row['awayFromBank'] > 0 || ($row['awayType'] != 'Vacation' && $row['awayPaid'] > 0 && $row['inclPaidAway'] == 'yes') || ($row['awayType'] == 'Vacation' && $row['awayPaid'] > 0 && $row['inclPaidVac'] == 'yes')){ $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; } $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; // calculate daily regular and OT for staff on an averaging agreement if ($row['ave_agree'] == 'Y' && $row['holName'] == ''){ if ($row['SHD_payableHrs'] > 0 ){ if ($dayPayableTotal > $row['SHD_payableHrs'] && $empSt['reg_hrs_per_day'] > $row['SHD_payableHrs']){ $all_hours_arr[$key]['regPayable'] = $empSt['reg_hrs_per_day']; $all_hours_arr[$key]['otPayable'] = $dayPayableTotal - $empSt['reg_hrs_per_day']; } else if ($dayPayableTotal > $row['SHD_payableHrs'] && $empSt['reg_hrs_per_day'] <= $row['SHD_payableHrs']){ $all_hours_arr[$key]['regPayable'] = $row['SHD_payableHrs']; $all_hours_arr[$key]['otPayable'] = $dayPayableTotal - $row['SHD_payableHrs']; } } 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 regular hours $all_hours_arr[$key]['regPayable'] = $emtSt['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'] == ''){ // 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']; } } 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']; } } $this->totalPaidHrsArr = $totalPaidHrsArr; // echo __line__."-m_master_data: [all_hours_arr]<pre>"; print_r($all_hours_arr); echo "</pre>"; $week = 1; $count = 0; foreach ($all_hours_arr as $key => $row){ if ($count == 0){ $day = date('D', $row['dateTS']); } if ($day == date('D', $row['dateTS']) && $count > count($all_hours_arr) / 7){ $week = 2; } $count ++; // echo __line__.": day=" . $day . " week=" . $week ." date=". date('D', $row['dateTS']) ." count=" . $count ."<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']]['punch_shift'] = $row['punch_shift']; $weekTotals[$week][$row['userID']]['paid_brk'] = $row['paid_brk']; $weekTotals[$week][$row['userID']]['way2payStat'] = $row['way2payStat']; $weekTotals[$week][$row['userID']]['includeStatPay'] = $row['includeStatPay']; $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']]['stat2bank'] = $row['stat2bank']; } if ($row['stat2bank'] > 0){ $weekTotals[$week][$row['userID']]['stat2bank'] += $row['stat2bank']; } 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 (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['punchAlert'] != ''){ $weekTotals[$week][$row['userID']]['punchAlert'] = $row['punchAlert']; } else if (!isset($weekTotals[$week][$row['userID']]['punchAlert'])){ $weekTotals[$week][$row['userID']]['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 { $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'){ if (isset($weekTotals[$week][$row['userID']]['statHrs'])){ $weekTotals[$week][$row['userID']]['statHrs'] += floatval($row['statHrs']); $weekTotals[$week][$row['userID']]['eligible'] .= $row['eligible']; } else { $weekTotals[$week][$row['userID']]['statHrs'] = floatval($row['statHrs']); $weekTotals[$week][$row['userID']]['eligible'] = $row['eligible']; } } else { // 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']; } else { $weekTotals[$week][$row['userID']]['statHrs'] = floatval($row['totalPaidHrs'] * .04); $weekTotals[$week][$row['userID']]['eligible'] = $row['eligible']; } } 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__.": <pre>"; print_r($weekTotals); echo "</pre>"; // ======== calculate weekly overtime if ($empSt['reg_hrs_per_wk'] > 0){ foreach ($weekTotals as $key => $wkTot){ foreach ($wkTot as $userID => $k){ if ($k['way2payStat'] == 'percent' && $k['includeStatPay'] == 'yes'){ $weekTotals[$key][$userID]['regPayable'] += $k['statHrs']; $weekTotals[$key][$userID]['totalPaidHrs'] += $k['statHrs']; } if (!isset($weekTotals[$week][$row['userID']]['weeklyOTpayable'])){ $weekTotals[$week][$row['userID']]['weeklyOTpayable'] = 0; } if ($k['regPayable'] > $empSt['reg_hrs_per_wk']){ $weekTotals[$key][$userID]['regPayable'] = $empSt['reg_hrs_per_wk']; $weekTotals[$key][$userID]['otPayable'] += $k['regPayable'] - $empSt['reg_hrs_per_wk']; $weekTotals[$key][$userID]['weeklyOTpayable'] += round($k['regPayable'] - $empSt['reg_hrs_per_wk'], 2); } } } } $this->weekTotals = $weekTotals; // echo __line__."-m_master_data [get_staffHours] weekTotals: <pre>"; print_r($weekTotals[2][441]); echo "</pre>"; // ========= BUILD ARRAY OF TOTALS FOR THE PAY PERIOD ================ foreach ($weekTotals as $key => $wkTot){ foreach ($wkTot as $userID => $wt){ $bankedRows = $Time_Bank->get('', '', $dateTS1, $dateTS2); foreach ($bankedRows as $key => $value){ $type = $value['type']; if ($type == ''){ $type = $value['bankID']; } // there could be multiple credits if stat and reg or ot were banked in same pay period $bankedTimeArr[$value['userID']][$type] = $value; } // echo __line__."-m_master_data [get_staffHours] weekTotals: <pre>"; print_r($bankedRows); echo "</pre>"; if (!isset($payPeriodTotals[$userID]['regPayable'])){ $payPeriodTotals[$userID]['name'] = $wt['name']; $payPeriodTotals[$userID]['ave_agree'] = $wt['ave_agree']; $payPeriodTotals[$userID]['regPayable'] = floatval($wt['regPayable']); // can be net or gross depending on policy $payPeriodTotals[$userID]['punch_shift'] = $wt['punch_shift']; $payPeriodTotals[$userID]['PCH_payableHrs'] = floatval($wt['PCH_payableHrs']); $payPeriodTotals[$userID]['PCH_grossHrs'] = floatval($wt['PCH_grossHrs']); $payPeriodTotals[$userID]['PCH_mealHrs'] = floatval($wt['PCH_mealHrs']); $payPeriodTotals[$userID]['PCH_netHrs'] = floatval($wt['PCH_netHrs']); $payPeriodTotals[$userID]['totalPaidHrs'] = floatval($wt['totalPaidHrs']); $payPeriodTotals[$userID]['way2payStat'] = $wt['way2payStat']; $payPeriodTotals[$userID]['includeStatPay'] = $wt['includeStatPay']; } else { $payPeriodTotals[$userID]['totalPaidHrs'] += floatval($wt['totalPaidHrs']); $payPeriodTotals[$userID]['PCH_grossHrs'] += floatval($wt['PCH_grossHrs']); $payPeriodTotals[$userID]['PCH_mealHrs'] += floatval($wt['PCH_mealHrs']); $payPeriodTotals[$userID]['PCH_netHrs'] += floatval($wt['PCH_netHrs']); $payPeriodTotals[$userID]['regPayable'] += floatval($wt['regPayable']); $payPeriodTotals[$userID]['PCH_payableHrs'] += floatval($wt['PCH_payableHrs']); } if ($wkTot['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__.": " .$payPeriodTotals[$userID]['totalPaidHrs'] ."<br>"; 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]['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]['statHrs'])){ $payPeriodTotals[$userID]['statHrs'] = floatval($wt['statHrs']); $payPeriodTotals[$userID]['eligible'] = $wt['eligible']; } else { $payPeriodTotals[$userID]['statHrs'] += floatval($wt['statHrs']); $payPeriodTotals[$userID]['eligible'] .= $wt['eligible']; } if ($payPeriodTotals[$userID]['punchAlert'] == ''){ $payPeriodTotals[$userID]['punchAlert'] = $wt['punchAlert']; } $payPeriodTotals[$userID]['bankedTimeUsed'] = 0; if (!is_array($groupID)){ $groupID = explode('|', $groupID); } foreach ($groupID as $gID){ if ($_SESSION['staffCanBank'][$gID] == 'enabled'){ // echo __LINE__.": <pre>"; print_r($bankedTimeArr[$userID]); echo "</pre>"; if (!isset($payPeriodTotals[$userID]['reg2bank'])){ $payPeriodTotals[$userID]['reg2bank'] = $bankedTimeArr[$userID]['reg']['credit']; } if (!isset($payPeriodTotals[$userID]['ot2bank'])){ $payPeriodTotals[$userID]['ot2bank'] = $bankedTimeArr[$userID]['OT']['credit']; } if (!isset($payPeriodTotals[$userID]['ot2bank'])){ $payPeriodTotals[$userID]['stat2bank'] = $bankedTimeArr[$userID]['stat']['credit']; } if (!isset($payPeriodTotals[$userID]['bank_balance'])){ $bank_balance = $Time_Bank->get_balance_forward($userID, '', ''); if ($bank_balance == 0){ $bank_balance = ''; } $payPeriodTotals[$userID]['bank_balance'] = $bank_balance; } } } } } //=========== calculate percent stat pay for Pay Period ========================== // ========== calculate Extra Time for Pay period =================== foreach ($payPeriodTotals as $userID => $ppTot){ $payPeriodTotals[$userID]['totalPaidHrs'] += $ppTot['bankedTimeUsed']; $payPeriodTotals[$userID]['regPayable'] += $ppTot['bankedTimeUsed']; // echo __line__.": " .$ppTot['bankedTimeUsed'] ."<br>"; // 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; } } $this->payPeriodTotals = $payPeriodTotals; // echo __line__."-m_master_data [get_staffHours] all_hours_arr: <pre>"; print_r($payPeriodTotals); 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; } } //===================================================================================================== //===================================================================================================== // 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, $groupID, $jobAreaID, $punch_shift, $dateTS1, $dateTS2){ $Prod_Rate = new Prod_Rate; $Open_Time = new Open_Time; $OT_Settings = new OT_Settings; $Revenue = new Revenue; $Users = new Users; $data = array(); $uRows = $Users->get_4_menu($userID, $groupID, $jobAreaID, $punch_shift, '', ''); // echo __LINE__.": " . $jobAreaID ."<pre>"; print_r($uRows); echo "</pre>"; $prodRatesArr = $Prod_Rate->get('', $dateTS1, $dateTS2, ''); // echo __line__."-m_master_data: prodRates <pre>"; print_r($prodRatesArr); echo "</pre>"; for ($t=$dateTS1; $t<=$dateTS2; $t+=60*60*24){ foreach ($uRows as $uID => $uRow){ if ($uRow['prodRate'] != ''){ $key = date('M j, Y', $t)."|". $uID; $data[$key]['dateTS'] = $t; $data[$key]['name'] = $uRow['name']; $data[$key]['jobAreaID'] = $uRow['jobAreaID']; } } } // echo __LINE__.": " . $dateTS1 ." (" . date('His M j, Y', $dateTS1).") - ". $dateTS2 ." (" . date('His M j, Y', $dateTS2) . ")<br>"; for ($t = $dateTS1; $t <= $dateTS2; $t+= 60*60*24){ foreach ($prodRatesArr as $key => $p){ if ($p['effectiveTS'] < $t && ($p['expireTS'] == 0 || $p['expireTS'] >= $t) && isset($uRows[$p['userID']])){ $prodRates[date('M j, Y', $t) . "|" . $p['userID']] = array('userID'=>$p['userID'], 'rate'=>$p['rate']); } } } // echo __line__."-m_master_data: prodRates <pre>"; print_r($prodRates); echo "</pre>"; $otCats = $OT_Settings->get_4_menu($groupID); $openTimeArr = $Open_Time->get($userID, date('M j, Y', $dateTS1), date('M j, Y', $dateTS2), '', '', ''); $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, $groupID, '', $jobAreaID, $dateTS1, $dateTS2, ''); // echo __LINE__.": master_data (dashboard) revRows <pre>"; print_r($revRows); echo "</pre>"; $schedArr = $this->get_schedule($userID, $groupID, $jobAreaID, $punch_shift, $dateTS1, $dateTS2); // echo __LINE__.": master_data (dashboard) schedArr <pre>"; print_r($schedArr); echo "</pre>"; $punchArr = $this->get_punch_hx($userID, $groupID, $jobAreaID, $punch_shift, $dateTS1, $dateTS2); for ($t=$dateTS1; $t<=$dateTS2; $t+=60*60*24){ foreach ($schedArr as $sKey => $sRow){ // echo __LINE__.": ". $sKey . " - "; print_r($sRow['userGroups']); echo "<p>"; $key = date('M j, Y', $t)."|".$sRow['userID']; if ($sKey == $key){ $data[$key]['dateTS'] = $sRow['dateTS']; $data[$key]['name'] = $uRows[$sRow['userID']]['name']; $data[$key]['producerID'] = $sRow['userID']; $data[$key]['jobAreaID'] = $uRows[$sRow['userID']]['jobAreaID']; if (!is_array($uRows[$sRow['userID']]['userGroups'])){ $data[$key]['groupID'] = $_SESSION['parentGrpID']; } else { $data[$key]['groupID'] = $uRows['userGroups']; } $data[$key]['punch_shift'] = $sRow['punch_shift']; $data[$key]['punch_meal'] = $sRow['punch_meal']; $data[$key]['paid_brk'] = $sRow['paid_brk']; $data[$key]['SHD_payableHrs'] = $sRow['SHD_payableHrs']; } } foreach ($punchArr as $key => $pRow){ $data[$key]['dateTS'] = $pRow['dateTS']; $data[$key]['name'] = $uRows[$pRow['userID']]['name']; $data[$key]['producerID'] = $pRow['userID']; $data[$key]['jobAreaID'] = $uRows[$pRow['userID']]['jobAreaID']; if (count($uRows[$pRow['userID']]['userGroups']) <= 0){ $data[$key]['groupID'] = $_SESSION['parentGrpID']; } else { $data[$key]['groupID'] = $uRows['userGroups']; } $data[$key]['punch_shift'] = $pRow['punch_shift']; $data[$key]['punch_meal'] = $pRow['punch_meal']; $data[$key]['paid_brk'] = $pRow['paid_brk']; $data[$key]['PCH_payableHrs'] = $pRow['PCH_payableHrs']; } } foreach ($prodRates as $key => $r){ $data[$key]['prodRate'] = $r['rate']; } // echo __LINE__." master_data dashboard data <pre>"; print_r($data); echo "</pre>"; foreach ($data as $key => $d){ $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 ($d['punch_shift'] == 'yes'){ $hours = $d['PCH_payableHrs']; } else { $hours = $d['SHD_payableHrs']; } $data[$key]['hrsAtWork'] = $hours; $otMin = 0; $OTreason = ''; if (isset($openTime[$key])){ $otMin = $openTime[$key]['min']; $data[$key]['OTreason'] = $openTime[$key]['reason']; // if (isset($data[$key]['otTotal'])){ // $data[$key]['otTotal'] += $otMin; // } else { // $data[$key]['otTotal'] = $otMin; // } } $data[$key]['OTmin'] = $otMin; $productiveHours = $hours - $otMin/60; $data[$key]['productiveHours'] = $productiveHours; $target = 0; if (isset($d['prodRate'])){ $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 (($data[$key]['amtProd'] <= 0 && $target <= 0 && $otMin <= 0) || !isset($d['prodRate'])){ // echo __LINE__.": " . $key ."<br>"; 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, $dateTS, $holName) { $Stat_Pay = new Stat_Pay; $data = array(); // timestamps for the 30 days prior to the stat $dateTS1 = $dateTS - (60*60*24*31); $dateTS2 = $dateTS - 1; $schedRows = $this->get_schedule($userID, '', '', '', $dateTS1, $dateTS2); $punchRows = $this->get_punch_hx($userID, '', '', '', $dateTS1, $dateTS2); $rows = array(); foreach ($schedRows as $key => $schedRow){ $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 = $Stat_Pay->get('', $userID, $dateTS1, $dateTS2); $statRow = $statRows[0]; // echo __LINE__."<pre>"; print_r($statRow); echo "</pre>"; $dataLine = array('hrsWorked'=>0, 'daysWorked'=>0, 'statHrs'=>0, 'holName'=>$holName, 'eligible'=>'', 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay']); // 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){ if ($row['punch_shift'] == 'yes' && ($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++; } else if ($row['punch_shift'] == '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']); // $data[date('M j, Y', $dateTS)."|".$row['userID']] = $dataLine; // echo __line__."-m_master_data: data <pre>"; print_r($data); echo "</pre>"; return $dataLine; } //end Stat_Hours_BC method //===================================================================================================== //===================================================================================================== public function Stat_Hours_NL($userID, $firstDayTS, $dateTS, $holName){ $Stat_Pay = new Stat_Pay; $statHrs_arr = array(); $dateTS1 = $dateTS - (60*60*24*31); $dateTS2 = $dateTS - (60*60*12); $stat_minus_21_days = strtotime(date('M j, Y', $dateTS)." - 21 days"); //user stat policy $statRows = $Stat_Pay->get('', $userID, $dateTS1, $dateTS2); $statRow = $statRows[0]; $dataLine = array('hrsWorked'=>0, 'daysWorked'=>0, 'statHrs'=>0, 'holName'=>$holName, 'eligible'=>'', 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay']); // if they have been employeed for longer than 30 days prior to the stat validate First & Last Rule // echo __LINE__.": " . date('His M j, Y', $firstDayTS) ."<br>"; if ($firstDayTS + (60*60*24*30) < $dateTS){ // calculate average hours // echo __LINE__.": " . date('His M j, Y', $stat_minus_21_days)." - " . date('His M j, Y', $dateTS) ."<br>"; $row = array(); $punch_rows = $this->get_punch_hx($userID, '', '', '', $stat_minus_21_days, $dateTS); $sched_rows = $this->get_schedule($userID, '', '', '', $stat_minus_21_days, $dateTS); // echo __LINE__.': Master_Data sched_rows <pre>'; print_r($punch_rows); echo "</pre>"; foreach ($punch_rows as $key => $pRow){ $mealHrs = $sched_rows[$key]['SHD_mealHrs']; $PCH_payableHrs = $pRow['PCH_payableHrs']; if ($row['punch_meal'] == 'no'){ if ($pRow['paid_brk'] == 'no'){ $PCH_payableHrs = $pRow['PCH_payableHrs'] - $mealHrs; } } if ($PCH_payableHrs > 0){ $row[$key] = $PCH_payableHrs; } } foreach ($sched_rows as $key => $sRow){ if ($sRow['awayPaid'] > 0){ $row[$key] = $sRow['awayPaid']; } } $total = 0; foreach ($row as $hours){ $total += $hours; } $statHrs = 0; if (count($row) > 0){ $statHrs = $total / count($row); } // echo __line__."-m_master_data: punch_rows<pre>"; print_r($row); echo "</pre>"; $fl_result = $this->first_last_rule($userID, $dateTS); if ($fl_result){ $dataLine = array('hrsWorked'=>$total, 'daysWorked'=>count($row), 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>'', 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay']); } else { // did not work the last & first schedule shift before and after the stat $dataLine = array('hrsWorked'=>$total, 'daysWorked'=>count($row), 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>"<span class='comment r_txt'>X</span> ", 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay']); } } else { // have not been employed for 30 days prior to stat if (!is_array($row)){ $daysWorked = 0; } else { $daysWorked = count($row); } $dataLine = array('hrsWorked'=>$total, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>"<span class='comment b_txt'>X</span> ", 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay']); } return $dataLine; } // end function Stat_Hours_NL //===================================================================================================== //===================================================================================================== /* dateTS = date of stat holiday */ public function Stat_Hours_NS($dateTS, $holName){ $Default_Schedule = new Default_Schedule; $Punch_Clock = new Punch_Clock; $Meal_Punch_Policy = new Meal_Punch_Policy; $Users = new Users; $Stat_Pay = new Stat_Pay; $data = array(); $stat_minus_30_days = $dateTS - (60*60*24*30); $dateTS1 = $dateTS - (60*60*24*31); $dateTS2 = $dateTS - (60*60*12); // get away hours for the 30-day period $schedRows = $this->get_schedule($dateTS1, $dateTS2); // hours punched for the 30-day period $punchRows = $this->get_punches($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->get('', $_SESSION['PID'], '', '', '', $dateTS, $dateTS + 3600*24); foreach ($uRows as $userID => $uRow){ $hrsWorked = 0; $daysWorked = 0; // calculate the average hours paid over the last 30 days; //user stat policy $statRow = $Stat_Pay->get('', $userID, $dateTS, ''); $ppRows = $Meal_Punch_Policy->get($userID, $dateTS, '', $_SESSION['PID']); // get hours punched if (isset($ppRows['punch_shift'])){ if ($ppRows['punch_shift'] == 'Yes'){ if ($ppRows['paid_brk'] == 'Yes'){ foreach ($punchRows as $key => $punchRow){ if ($punchRow['userID'] == $userID && $punchRow['grossHrs'] > 0){ $hrsWorked += $punchRow['grossHrs']; $daysWorked++; } } } else { foreach ($punchRows as $key => $punchRow){ if ($punchRow['userID'] == $userID && $punchRow['netHrs'] > 0){ $hrsWorked += $punchRow['netHrs']; $daysWorked++; } } } // get hours scheduled } else { if ($ppRows['paid_brk'] == 'Yes'){ foreach($schedRows as $key => $schedRow){ if ($schedRow['userID'] == $userID && $schedRow['grossHrs'] > 0){ $hrsWorked += $schedRow['grossHrs']; $daysWorked++; } } } else { foreach($schedRows as $key => $schedRow){ if ($schedRow['userID'] == $userID && $schedRow['netHrs'] > 0){ $hrsWorked += $schedRow['netHrs']; $daysWorked++; } } } } } // 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 += $hrsWorked; } $daysWorked++; } } $statHrs = ''; if ($daysWorked > 0){ $statHrs = $hrsWorked / $daysWorked; } // entitled to stat pay $eligible = "<span class='col-4 centre comment'>(".$daysWorked.")</span> <span class='col-4 important'>"; if ($daysWorked < 15 || $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'=>$daysWorked, 'statHrs'=>round($statHrs,2), '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_NB($userID, $dateTS, $holName){ $Stat_Pay = new Stat_Pay; $data = array(); // timestamps for the 30 days prior to the stat $dateTS1 = $dateTS - (60*60*24*31); $dateTS2 = $dateTS - 1; $schedRows = $this->get_schedule($userID, '', '', '', $dateTS1, $dateTS2); $punchRows = $this->get_punch_hx($userID, '', '', '', $dateTS1, $dateTS2); $rows = array(); foreach ($schedRows as $key => $schedRow){ $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 = $Stat_Pay->get('', $userID, $dateTS1, $dateTS2); $statRow = $statRows[0]; // echo __LINE__."<pre>"; print_r($statRow); echo "</pre>"; $dataLine = array('hrsWorked'=>0, 'daysWorked'=>0, 'statHrs'=>0, 'holName'=>$holName, 'eligible'=>'', 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay']); // 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){ if ($row['punch_shift'] == 'yes' && ($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++; } else if ($row['punch_shift'] == 'no' && ($row['awayPaid'] > 0 || $row['SHD_payableHrs'] > 0)){ $hrsWorked += $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 // echo __LINE__.": " . $hrsWorked." " . $daysWorked ." ". $statHrs."<br>"; $dataLine = array('hrsWorked'=>$hrsWorked, 'daysWorked'=>$daysWorked, 'statHrs'=>$statHrs, 'holName'=>$holName, 'eligible'=>'', 'minStatHrs'=>$statRow['hours'], 'alwaysPayStat'=>$statRow['pay'], 'includeStatPay'=>$statRow['includeStatPay']); // $data[date('M j, Y', $dateTS)."|".$row['userID']] = $dataLine; // echo __line__."-m_master_data: data <pre>"; print_r($data); echo "</pre>"; return $dataLine; } //===================================================================================================== //===================================================================================================== /* dateTS = date of stat holiday */ public function Stat_Hours_ON($dateTS, $holName){ // echo __line__."Stat_Hours_ON: ".date('M j, Y', $dateTS)." ".$holName."<br>"; $Default_Schedule = new Default_Schedule; $Punch_Clock = new Punch_Clock; $Meal_Punch_Policy = new Meal_Punch_Policy; $Users = new Users; $Stat_Pay = new Stat_Pay; $data = array(); $stat_minus_4_weeks = $dateTS - (60*60*24*28); $dateTS1 = $stat_minus_4_weeks; $dateTS2 = $dateTS - (60*60*12); // get away hours for the 4-week period $schedRows = $this->get_schedule($dateTS1, $dateTS2); // hours punched for the 4-week period $punchRows = $this->get_punches($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->get('', $_SESSION['PID'], '', '', '', $dateTS, $dateTS + 3600*24); foreach ($uRows as $userID => $uRow){ $hrsWorked = 0; $daysWorked = 20; // calculate the hours paid over the last 4 weeks; //user stat policy $statRow = $Stat_Pay->get('', $userID, $dateTS, ''); $ppRows = $Meal_Punch_Policy->get($userID, $dateTS, '', $_SESSION['PID']); // get hours punched if (isset($ppRows['punch_shift'])){ if ($ppRows['punch_shift'] == 'Yes'){ 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); $Default_Schedule = new Default_Schedule; $Punch_Clock = new Punch_Clock; $Meal_Punch_Policy = new Meal_Punch_Policy; $Users = new Users; $Stat_Pay = new Stat_Pay; $ppRows = $Meal_Punch_Policy->get('', $dateTS, '', $_SESSION['PID']); // echo __line__."-m_master_data: ppRows<pre>"; print_r($ppRows); echo "</pre>"; $uRows = $Users->get('', $_SESSION['PID'], '', '', '', $dateTS, $dateTS + 3600*24); // echo __line__."-m_master_data: uRows<pre>"; print_r($uRows); echo "</pre>"; // get paid away hours for the 30-day period $schedRows = $this->get_schedule($stat_minus_28_days, $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']]['punch_shift'] == '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']]['punch_shift'] == 'Yes'){ 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 = $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($userID, $dateTS){ // dateTS is the date of the stat holiday date_default_timezone_set($_SESSION['timeZone']); // validation date range for First/Last rule $stat_minus_2wk = $dateTS - (60*60*24*14); $stat_plus_2wk = $dateTS + (60*60*24*14); // get dates of Last and First scheduled work days $FL_scheds = $this->get_schedule($userID, '', '', '', $stat_minus_2wk, $stat_plus_2wk); // echo __line__."-m_master_data: sched_rows<pre>"; print_r($sched_rows); echo "</pre>"; foreach ($FL_scheds as $key => $FL_sched){ // get the last scheduled shift before the stat (filtering out closures) if ($FL_sched['dateTS'] < $dateTS && $FL_sched['SHD_netHrs'] > 0 && $FL_sched['awayType'] == ''){ $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'] == ''){ $firstTS = $FL_sched['dateTS'] + 60*60*23 + 60*59 + 59; // first day scheduled after stat break; } } // echo __line__."-m_master_data: last day before=" . date('His M j, Y', $lastTS).", first day after = " . date('His M j, Y', $firstTS) . "<br>"; // get hours worked from last day before to first day after (inclusive); $FL_punch = $this->get_punch_hx($userID, '', '', '', $lastTS, $firstTS); // echo __line__."-m_master_data: punch_rows<pre>"; print_r($punch_rows); echo "</pre>"; $result = true; // if they don't have payable hours on both of these days they do not satisfy rule if ($FL_punch[date('M j, Y', $lastTS)."|" . $userID]['PCH_payableHrs'] <= 0 || $FL_punch[date('M j, Y', $firstTS)."|" . $userID]['PCH_payableHrs'] <= 0){ $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); 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