Untitled
public function changeDTRStatus(Request $request) { $validated = $request->validate([ 'ids' => 'required|array|min:1', 'status' => 'required', 'remarks' => 'required_if:status,rejected' ]); $approver = auth()->user()->employee; if (!$approver || !$approver->approver_level) { return $this->sendError("You are not permitted to perform this action.", []); } $level = $approver->approver_level->level; $status = $request->get('status'); foreach ($request->get('ids') as $item) { $hasLevel2 = false; foreach ($item['approvers'] as $approver) { if ($approver['level'] == 2) { $hasLevel2 = true; break; } } if ($hasLevel2) { if ($level == '1') { $employeeData = DTRCorrection::with(['employee_name', 'employee_email', 'company', 'schedule'])->where('id', $item['id'])->first(); $employeeGroupID = EmployeePayroll::where('employee_id', $employeeData->employee_id)->first(); $cutoffArray = CutoffGeneration::where('company_id', $request->get('company_id')) ->where('group_id', $employeeGroupID->attendance_cutoff_maintenance_id) ->get(['cutoff', 'status']) ->toArray(); if ($cutoffArray && $cutoffArray[0]['status']) { $curYear = Carbon::now()->addMonths(1)->year; $monthStart = Carbon::parse(json_decode($cutoffArray[0]['cutoff'])->month)->month; $cutOffStart = explode('-', json_decode($cutoffArray[0]['cutoff'])->start_day)[1]; $cutOffEnd = explode('-', json_decode($cutoffArray[0]['cutoff'])->end_day)[1]; $start_day = Carbon::createFromDate($curYear, $monthStart, $cutOffStart)->format('Y-m-d'); $end_day = Carbon::createFromDate($curYear, $monthStart, $cutOffEnd)->format('Y-m-d'); $start_day_carbon = Carbon::parse($start_day); $end_day_carbon = Carbon::parse($end_day); $attendance_date = Carbon::parse($employeeData->attendance_date); if ($attendance_date->between($start_day_carbon, $end_day_carbon)) { return $this->sendError("The attendance cutoff period is over.", []); } } if ($status != 'approved') { $emailData = EmailMaintenance::where('slug', 'dtr-request-approved')->where('status', true)->first(); $emailTags = [ "[employee_name]" => $employeeData->employee_name->employee_name, "[date]" => $employeeData->attendance_date, "[schedule]" => $employeeData->schedule->name, "[clock_in]" => Carbon::createFromFormat('Y-m-d H:i:s', $employeeData->clock_in_at)->format('g:i A'), "[clock_out]" => Carbon::createFromFormat('Y-m-d H:i:s', $employeeData->clock_out_at)->format('g:i A'), "[reason]" => $employeeData->reason, "[company_name]" => $employeeData->company->name, "[date_created]" => $employeeData->created_at->format('m/d/y h:i A'), "[remarks]" => $request->get('remarks') ?? 'N/A', "[status]" => ucfirst($status) ]; $finalBody = $this->replacePlaceholders($emailData->body_content, $emailTags); $hrPersonnels = DB::table('employee_contacts as ec') ->leftJoin('employees as emp', 'ec.employee_id', '=', 'emp.id') ->leftJoin('roles_permissions_users as role', 'emp.user_id', '=', 'role.user_id') ->select('ec.email', 'emp.user_id') ->where('role.roles_permissions_id', 4) ->where('emp.company_id', $employeeData->company_id) ->pluck('ec.email'); $hrEmails = $hrPersonnels->implode(','); //$employeeData->employee_email->email Mail::to($employeeData->employee_email->email)->send(new EmailTemplate($finalBody, 'DTR Correction Request ' . ucfirst($status), $hrEmails)); $notifMessage = auth()->user()->employee_name->employee_name . ' ' . $status . ' your DTR correction request.'; Notifications::create([ 'company_id' => $employeeData->company_id, 'parent_id' => $employeeData->id, 'particular' => 'dtr-request', 'receipient_employee_id' => $employeeData->employee_id, 'message' => $notifMessage, 'type' => 'info', 'read' => false ]); $updateStatus = DTRCorrection::find($item['id']); $updateStatus->update([ 'status' => $status, 'remarks' => $request->get('remarks') ]); Notifications::create([ 'company_id' => $updateStatus->company_id, 'parent_id' => $updateStatus->id, 'particular' => 'dtr-request', 'receipient_employee_id' => $updateStatus->employee_id, 'message' => "Your DTR request dated {$updateStatus->attendance_date} has been rejected.", 'type' => 'info', 'read' => false ]); } $approverData = ApprovalHistory::where('approvals_parent_id', $item['id'])->where('level', $level)->where('type', 'dtr-request'); $approverData->update([ 'status' => $status, ]); } else { $employeeData = DTRCorrection::with(['employee_name', 'employee_email', 'company', 'schedule'])->where('id', $item['id'])->first(); $employeeGroupID = EmployeePayroll::where('employee_id', $employeeData->employee_id)->first(); $cutoffArray = CutoffGeneration::where('company_id', $request->get('company_id')) ->where('group_id', $employeeGroupID->attendance_cutoff_maintenance_id) ->get(['cutoff', 'status']) ->toArray(); if ($cutoffArray && $cutoffArray[0]['status']) { $curYear = Carbon::now()->addMonths(1)->year; $monthStart = Carbon::parse(json_decode($cutoffArray[0]['cutoff'])->month)->month; $cutOffStart = explode('-', json_decode($cutoffArray[0]['cutoff'])->start_day)[1]; $cutOffEnd = explode('-', json_decode($cutoffArray[0]['cutoff'])->end_day)[1]; $start_day = Carbon::createFromDate($curYear, $monthStart, $cutOffStart)->format('Y-m-d'); $end_day = Carbon::createFromDate($curYear, $monthStart, $cutOffEnd)->format('Y-m-d'); $start_day_carbon = Carbon::parse($start_day); $end_day_carbon = Carbon::parse($end_day); $attendance_date = Carbon::parse($employeeData->attendance_date); if ($attendance_date->between($start_day_carbon, $end_day_carbon)) { return $this->sendError("The attendance cutoff period is over.", []); } } $approverData = ApprovalHistory::where('approvals_parent_id', $item['id'])->where('level', $level)->where('type', 'dtr-request'); $approverData->update([ 'status' => $status, ]); $employeeData->update([ 'status' => $status, 'remarks' => $request->get('remarks') ]); $emailData = EmailMaintenance::where('slug', 'dtr-request-approved')->where('status', true)->first(); $emailTags = [ "[employee_name]" => $employeeData->employee_name->employee_name, "[date]" => $employeeData->attendance_date, "[schedule]" => $employeeData->schedule->name, "[clock_in]" => Carbon::createFromFormat('Y-m-d H:i:s', $employeeData->clock_in_at)->format('g:i A'), "[clock_out]" => Carbon::createFromFormat('Y-m-d H:i:s', $employeeData->clock_out_at)->format('g:i A'), "[reason]" => $employeeData->reason, "[company_name]" => $employeeData->company->name, "[date_created]" => $employeeData->created_at->format('m/d/y h:i A'), "[remarks]" => $request->get('remarks') ?? 'N/A', "[status]" => ucfirst($status) ]; $finalBody = $this->replacePlaceholders($emailData->body_content, $emailTags); $hrPersonnels = DB::table('employee_contacts as ec') ->leftJoin('employees as emp', 'ec.employee_id', '=', 'emp.id') ->leftJoin('roles_permissions_users as role', 'emp.user_id', '=', 'role.user_id') ->select('ec.email', 'emp.user_id') ->where('role.roles_permissions_id', 4) ->where('emp.company_id', $employeeData->company_id) ->pluck('ec.email'); $hrEmails = $hrPersonnels->implode(','); //$employeeData->employee_email->email Mail::to($employeeData->employee_email->email)->send(new EmailTemplate($finalBody, 'DTR Correction Request ' . ucfirst($status), $hrEmails)); $notifMessage = auth()->user()->employee_name->employee_name . ' ' . $status . ' your DTR correction request.'; Notifications::create([ 'company_id' => $employeeData->company_id, 'parent_id' => $employeeData->id, 'particular' => 'dtr-request', 'receipient_employee_id' => $employeeData->employee_id, 'message' => $notifMessage, 'type' => 'info', 'read' => false ]); } } else { $employeeData = DTRCorrection::with(['employee_name', 'employee_email', 'company', 'schedule'])->where('id', $item['id'])->first(); $employeeGroupID = EmployeePayroll::where('employee_id', $employeeData->employee_id)->first(); $cutoffArray = CutoffGeneration::where('company_id', $request->get('company_id')) ->where('group_id', $employeeGroupID->attendance_cutoff_maintenance_id) ->get(['cutoff', 'status']) ->toArray(); if ($cutoffArray && $cutoffArray[0]['status']) { $curYear = Carbon::now()->addMonths(1)->year; $monthStart = Carbon::parse(json_decode($cutoffArray[0]['cutoff'])->month)->month; $cutOffStart = explode('-', json_decode($cutoffArray[0]['cutoff'])->start_day)[1]; $cutOffEnd = explode('-', json_decode($cutoffArray[0]['cutoff'])->end_day)[1]; $start_day = Carbon::createFromDate($curYear, $monthStart, $cutOffStart)->format('Y-m-d'); $end_day = Carbon::createFromDate($curYear, $monthStart, $cutOffEnd)->format('Y-m-d'); $start_day_carbon = Carbon::parse($start_day); $end_day_carbon = Carbon::parse($end_day); $attendance_date = Carbon::parse($employeeData->attendance_date); if ($attendance_date->between($start_day_carbon, $end_day_carbon)) { return $this->sendError("The attendance cutoff period is over.", []); } } $approverData = ApprovalHistory::where('approvals_parent_id', $item['id'])->where('level', $level)->where('type', 'dtr-request'); $approverData->update([ 'status' => $status, ]); $employeeData->update([ 'status' => $status, 'remarks' => $request->get('remarks') ]); $emailData = EmailMaintenance::where('slug', 'dtr-request-approved')->where('status', true)->first(); $emailTags = [ "[employee_name]" => $employeeData->employee_name->employee_name, "[date]" => $employeeData->attendance_date, "[schedule]" => $employeeData->schedule->name ?? "Default Schedule", "[clock_in]" => $employeeData->clock_in_at ? Carbon::createFromFormat('Y-m-d H:i:s', $employeeData->clock_in_at)->format('g:i A') : "N/A", "[clock_out]" => $employeeData->clock_out_at ? Carbon::createFromFormat('Y-m-d H:i:s', $employeeData->clock_out_at)->format('g:i A') : "N/A", "[reason]" => $employeeData->reason ?? "", "[company_name]" => $employeeData->company->name, "[date_created]" => $employeeData->created_at->format('m/d/y h:i A'), "[remarks]" => $request->get('remarks') ?? 'N/A', "[status]" => ucfirst($status) ]; $finalBody = $this->replacePlaceholders($emailData->body_content, $emailTags); $hrPersonnels = DB::table('employee_contacts as ec') ->leftJoin('employees as emp', 'ec.employee_id', '=', 'emp.id') ->leftJoin('roles_permissions_users as role', 'emp.user_id', '=', 'role.user_id') ->select('ec.email', 'emp.user_id') ->where('role.roles_permissions_id', 4) ->where('emp.company_id', $employeeData->company_id) ->pluck('ec.email'); $hrEmails = $hrPersonnels->implode(','); //$employeeData->employee_email->email Mail::to($employeeData->employee_email->email)->send(new EmailTemplate($finalBody, 'DTR Correction Request ' . ucfirst($status), $hrEmails)); $notifMessage = auth()->user()->employee_name->employee_name . ' ' . $status . ' your DTR correction request.'; Notifications::create([ 'company_id' => $employeeData->company_id, 'parent_id' => $employeeData->id, 'particular' => 'dtr-request', 'receipient_employee_id' => $employeeData->employee_id, 'message' => $notifMessage, 'type' => 'info', 'read' => false ]); } } return $this->sendResponse([], "Change status of DTR Corrections."); }
Leave a Comment