Esempio n. 1
0
 public static function payment(int $id, $user_id, string $company_id) : array
 {
     $company_shift_start = Company::where('id', $company_id)->select('shift_day_start as day', 'shift_night_start as night')->first();
     $roster = Roster::find($id)->users()->where('users.id', $user_id)->first();
     if (count($roster) > 0 && $roster->pivot->real_start_time != null && $roster->pivot->real_start_time != null) {
         $start_str = strtotime($roster->pivot->real_start_time);
         $end_str = strtotime($roster->pivot->real_end_time);
         $arr_times = [];
         $payment = 0;
         $time = 0;
         for ($i = $start_str; $i <= $end_str; $i += 300) {
             $current_checking_time = date("Y-m-d H:i:s", $i);
             $custom_payment_amount = Payment::custom($current_checking_time);
             if ($custom_payment_amount == 0) {
                 $id = date("N", $i) - 1;
                 if (Common::isTimeBetween(date("H:i:s", $i), $company_shift_start->day, $company_shift_start->night)) {
                     $id .= "_day";
                 } else {
                     $id .= "_night";
                 }
                 if ($roster->pivot->is_supervisor == 1) {
                     $id .= "_supervisor";
                 } else {
                     $id .= "_worker";
                 }
                 !isset($arr_times[$id]) ? $arr_times[$id] = 1 : ($arr_times[$id] += 1);
             } else {
                 $payment += $custom_payment_amount * (1 / 12);
                 $time += 1 / 12;
             }
         }
         foreach ($arr_times as $key => $time_count) {
             list($day, $period, $type) = explode('_', $key);
             $amount = Payment::week($day, $period, $type, $company_id);
             $payment += $amount * (5 / 60 * $time_count);
             $time += $time_count;
             //return var_dump($amount);
         }
         return ['payment' => number_format((double) $payment, 2, '.', '') ?? 0, 'time' => $time];
     }
     return ['payment' => 0, 'time' => 0];
 }