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]; }
public function update(Request $request, $user_id) { $this->validate($request, ['real_start.*' => ['regex:/[0-9]{2}\\/[0-9]{2}\\/[0-9]{4}\\s[0-9]{1,2}:[0-9]{2}\\s(AM|PM)\\s-\\s[0-9]{2}\\/[0-9]{2}\\/[0-9]{4}\\s[0-9]{1,2}:[0-9]{2}\\s(AM|PM)/'], 'real_end.*' => ['regex:/[0-9]{2}\\/[0-9]{2}\\/[0-9]{4}\\s[0-9]{1,2}:[0-9]{2}\\s(AM|PM)\\s-\\s[0-9]{2}\\/[0-9]{2}\\/[0-9]{4}\\s[0-9]{1,2}:[0-9]{2}\\s(AM|PM)/']]); $start_times_arr = $request->get('real_start'); $end_times_arr = $request->get('real_end'); if (count(array_filter($start_times_arr)) > 0) { foreach ($start_times_arr as $roster_id => $time) { $start = $time; $end = $end_times_arr[$roster_id]; $roster = Roster::find($roster_id)->users(); //return var_dump($roster->pivot); if ($start != null && $start != "") { $roster->updateExistingPivot($user_id, ['real_start_time' => Common::formatDateTimeForSQL($start)]); } if ($end != null && $end != "") { $roster->updateExistingPivot($user_id, ['real_end_time' => Common::formatDateTimeForSQL($end)]); } //$roster->save(); } } return redirect()->back()->with(['message' => 'Data successfully updated']); }
public function addUsers($id, Request $request) { $users = $request->input('users'); $roster_data = Roster::where('id', '=', $id)->first(); $roster = Roster::find($id)->users(); foreach ($users as $user) { $roster->attach($user); Notification::add($user, 'CREATE_EVENT', ['start' => Common::formatDateTimeForSQL($roster_data->start_time), 'end' => Common::formatDateTimeForSQL($roster_data->end_time), 'admin_id' => Auth::user()->id]); } return response()->json(Roster::where('id', $id)->with('users')->first()->toArray()['users'], 200); }