Untitled
unknown
plain_text
a year ago
16 kB
7
Indexable
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.");
}Editor is loading...
Leave a Comment