Untitled

 avatar
unknown
plain_text
17 days ago
16 kB
3
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.");

    }
Leave a Comment