HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot//www.shooperm.com/Modules/Attendance/Repositories/HolidayRepository.php
<?php

namespace Modules\Attendance\Repositories;

use Carbon\CarbonPeriod;
use DateTime;
use Modules\Attendance\Entities\Attendance;
use Carbon\Carbon;
use Illuminate\Support\Facades\Session;
use Modules\Attendance\Entities\Holiday;
use Modules\RolePermission\Entities\Role;
use Modules\RolePermission\Repositories\RoleRepository;

class HolidayRepository implements HolidayRepositoryInterface
{
    public function all()
    {
        return Holiday::all();
    }

    public function create(array $data)
    {

        Holiday::where('year', $data['year'])->delete();

        foreach ($data['holiday_name'] as $key => $name) {

            if ($data['holiday_name'][$key]) {
                Holiday::create([
                    'year' => $data['year'],
                    'name' => $data['holiday_name'][$key],
                    'type' => $data['type'][$key],
                    'date' => $data['type'][$key] == 0 ? Carbon::parse($data['date'][$key])->format('Y-m-d') : Carbon::parse($data['start_date'][$key])->format('Y-m-d') . ',' . Carbon::parse($data['end_date'][$key])->format('Y-m-d'),
                ]);

                $date = $data['type'][$key] == 0 ? $data['date'][$key] : $data['start_date'][$key] . ',' . $data['end_date'][$key];
                $attendance_repo = new AttendanceRepository();
                $roles = Role::where('id', '>', 1)->where('type', 'admin')->orWhere('type', 'staff')->get();
                $attendance_repo->attendanceByDate($date,$data['type'][$key]);
                foreach ($roles as $role) {
                    $users = $attendance_repo->get_user_by_role($role->id);
                    $dates =[];

                    if ($data['type'][$key] == 1)
                    {
                    $period =  CarbonPeriod::create(Carbon::parse($data['start_date'][$key])->format('Y-m-d'), Carbon::parse($data['end_date'][$key])->format('Y-m-d'));
                    foreach ($period as $date)
                        $dates[] = $date->format('Y-m-d');
                    }

                    foreach ($users as $k => $user) {

                        if ($data['type'][$key] == 0)
                        {
                            $attendance_user = new Attendance;
                            $attendance_user->user_id = $user->id;
                            $attendance_user->date = Carbon::parse($data['date'][$key]);
                            $attendance_user->day = Carbon::parse($data['date'][$key])->format('l');
                            $attendance_user->month = Carbon::parse($data['date'][$key])->format('F');
                            $attendance_user->year = Carbon::parse($data['date'][$key])->year;
                            $attendance_user->role_id = $role->id;
                            $attendance_user->attendance = 'H';
                            $attendance_user->note = "Holiday for {$name}";
                            $attendance_user->save();
                        }
                        else{
                            foreach ($dates as $date)
                            {
                                $attendance_user = new Attendance;
                                $attendance_user->user_id = $user->id;
                                $attendance_user->date = $date;
                                $attendance_user->day = Carbon::parse($date)->format('l');
                                $attendance_user->month = Carbon::parse($date)->format('F');
                                $attendance_user->year = Carbon::parse($date)->year;
                                $attendance_user->role_id = $role->id;
                                $attendance_user->attendance = 'H';
                                $attendance_user->note = "Holiday for {$name}";
                                $attendance_user->save();
                            }
                        }

                    }

                }
            }
        }

    }

    public function find($id)
    {
        return Holiday::find($id);
    }

    public function year($year)
    {
        $year = isset($year) ? $year : Carbon::now()->year;
        return Holiday::where('year', $year)->get();
    }

    public function specificYear($year)
    {
        return Holiday::where('year', $year)->get();
    }

    public function copyYear($selected_year)
    {
        $holidays = Holiday::where('year', Carbon::create($selected_year)->subYears(1)->year)->get();
        if(count($holidays) > 0){
            foreach ($holidays as $key => $holiday) {
                $start_date=$end_date=$single_date= '';
                if ($holiday->type == 1)
                {
                    $range = explode(',',$holiday->date);
                    $start_date = Carbon::parse($range[0])->addYears(1)->format('Y-m-d');
                    $end_date = Carbon::parse($range[1])->addYears(1)->format('Y-m-d');
                }
                else
                    $single_date = Carbon::parse($holiday->date)->addYears(1)->format('Y-m-d');
                $holiday_date =$holiday->type == 0 ? $single_date :$start_date.','.$end_date ;
                Holiday::create([
                    'year' => date('Y'),
                    'name' => $holiday->name,
                    'type' => $holiday->type,
                    'date' => $holiday_date
                ]);
                $attendance_repo = new AttendanceRepository();
                $attendance_repo->attendanceByDate($holiday_date,$holiday->type);
                $roles = Role::where('id', '>', 1)->where('type', 'admin')->orWhere('type', 'staff')->get();
                foreach ($roles as $role) {
                    $users = $attendance_repo->get_user_by_role($role->id);
                    $dates =[];

                    if ($holiday->type == 1)
                    {
                        $date = explode(',',$holiday_date);
                        $period =  CarbonPeriod::create($date[0], $date[1]);
                        foreach ($period as $date)
                            $dates[] = $date->format('Y-m-d');
                    }

                    foreach ($users as $k => $user) {

                        if ($holiday->type == 0)
                        {
                            $attendance_user = new Attendance;
                            $attendance_user->user_id = $user->id;
                            $attendance_user->date = $single_date;
                            $attendance_user->day = Carbon::parse($single_date)->format('l');
                            $attendance_user->month = Carbon::parse($single_date)->format('F');
                            $attendance_user->year = Carbon::parse($single_date)->year;
                            $attendance_user->role_id = $role->id;
                            $attendance_user->attendance = 'H';
                            $attendance_user->note = "Holiday for {$holiday->name}";
                            $attendance_user->save();
                        }
                        else{
                            foreach ($dates as $date)
                            {
                                $attendance_user = new Attendance;
                                $attendance_user->user_id = $user->id;
                                $attendance_user->date = $date;
                                $attendance_user->day = Carbon::parse($date)->format('l');
                                $attendance_user->month = Carbon::parse($date)->format('F');
                                $attendance_user->year = Carbon::parse($date)->year;
                                $attendance_user->role_id = $role->id;
                                $attendance_user->attendance = 'H';
                                $attendance_user->note = "Holiday for {$holiday->name}";
                                $attendance_user->save();
                            }

                        }

                    }

                }
            }
            return true;
        }
        return false;

    }

    public function getHoliday($date)
    {
        return Holiday::where('date', $date)->latest()->first();
    }
}