Server IP : 103.191.208.50 / Your IP : 216.73.216.53 Web Server : LiteSpeed System : Linux orion.herosite.pro 4.18.0-553.53.1.lve.el8.x86_64 #1 SMP Wed May 28 17:01:02 UTC 2025 x86_64 User : celkcksm ( 1031) PHP Version : 7.4.33 Disable Function : show_source, system, shell_exec, passthru, popen, exec MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/celkcksm/demo.ncriptech.com/../hrms.ncriptech.com/app/Repositories/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
<?php namespace App\Repositories; use Carbon\Carbon; use App\Models\Role\Role; use App\Models\Hrm\Shift\Shift; use Illuminate\Support\Facades\Log; use App\Models\Hrm\Attendance\Holiday; use App\Models\Hrm\Attendance\Weekend; use App\Models\Hrm\Department\Department; use Illuminate\Database\Eloquent\Builder; use App\Helpers\CoreApp\Traits\DateHandler; use App\Models\Hrm\Attendance\DutySchedule; use App\Helpers\CoreApp\Traits\ApiReturnFormatTrait; use App\Models\coreApp\Relationship\RelationshipTrait; use App\Repositories\Hrm\Department\DepartmentRepository; class DutyScheduleRepository { use RelationshipTrait, ApiReturnFormatTrait, DateHandler; protected $dutySchedule; public function __construct(DutySchedule $dutySchedule) { $this->dutySchedule = $dutySchedule; } public function getShifts() { return Shift::query()->where('company_id', getCurrentCompany())->get(); } public function index() { $data['title'] = 'Duty Schedule'; $data['schedules'] = DutySchedule::query()->where('company_id', getCurrentCompany())->get(); $data['shifts'] = $this->getShifts(); return $data; } public function create() { $data['title'] = 'Create Duty Schedule'; $data['shifts'] = Shift::query()->where('company_id', getCurrentCompany())->where('status_id', 1)->get(); return $data; } public function show($id) { $data['title'] = 'Edit Duty Schedule'; $data['shifts'] = Shift::query()->where('company_id', getCurrentCompany())->where('status_id', 1)->get(); $data['duty_schedule'] = DutySchedule::find($id); return $data; } public function store($request) { try { foreach ($request->shift_id as $key => $item) { if ($this->isExistsWhenStore($this->dutySchedule, 'shift_id', $item)) { $request['company_id'] = getCurrentCompany(); if ($request->end_on_same_date == 1) { $end_date = date('Y-m-d'); } else { $end_date = date('Y-m-d', strtotime('+1 day')); } $start_time = date('Y-m-d') . ' ' . $request->start_time . ':00'; $end_time = $end_date . ' ' . $request->end_time . ':00'; $to = \Carbon\Carbon::createFromFormat('Y-m-d H:s:i', $start_time); $from = \Carbon\Carbon::createFromFormat('Y-m-d H:s:i', $end_time); $diff_in_minutes = $to->diffInMinutes($from); $request['hour'] = $diff_in_minutes / 60; $request['shift_id'] = $item; $this->dutySchedule->create($request->all()); } } return true; } catch (\Throwable $th) { Log::error($th->getMessage()); return false; } } public function update($request) { try { $dutySchedule = $this->dutySchedule->where('id', $request->duty_schedule_id)->first(); $dutySchedule->shift_id = $request->shift_id; $dutySchedule->consider_time = $request->consider_time; $dutySchedule->start_time = $request->start_time; $dutySchedule->end_time = $request->end_time; $dutySchedule->hour = $request->hour; $dutySchedule->end_on_same_date = $request->end_on_same_date; $dutySchedule->status_id = $request->status_id; $dutySchedule->save(); return true; } catch (\Throwable $th) { Log::error($th); return false; } } public function distroy($duty_schedule_id) { try { $dutySchedule = $this->dutySchedule->find($duty_schedule_id); $dutySchedule->delete(); return true; } catch (\Throwable $th) { Log::error($th); } } public function dutyScheduleDataTable($request) { $dutySchedule = DutySchedule::query()->where('company_id', getCurrentCompany()); $dutySchedule->when(\request()->get('shift'), function (Builder $builder) { return $builder->whereHas('shift', function ($builder) { return $builder->where('id', request()->get('shift')); }); }); $dutySchedule = $dutySchedule->get(); return datatables()->of($dutySchedule) ->addColumn('department', function ($data) { return @$data->shift->name; }) ->addColumn('start_time', function ($data) { if ($data->start_time) { return showTime($data->start_time); } }) ->addColumn('end_time', function ($data) { if ($data->end_time) { return showTime($data->end_time); } }) ->addColumn('hour', function ($data) { if ($data->hour) { return $data->hour; } }) ->addColumn('consider_time', function ($data) { if ($data->consider_time) { return $data->consider_time; } }) ->addColumn('status', function ($data) { if ($data->status) { return $data->status; } }) ->addColumn('status', function ($data) { return '<span class="badge badge-' . @$data->status->class . '">' . @$data->status->name . '</span>'; }) ->addColumn('action', function ($data) { $action_button = ''; $edit = _trans('common.Edit'); $delete = _trans('common.Delete'); if (hasPermission('schedule_update')) { $action_button .= actionButton($edit, route('dutySchedule.show', $data->id), 'profile'); } if (hasPermission('schedule_delete')) { $action_button .= actionButton($delete, '__globalDelete(' . $data->id . ',`hrm/duty/schedule/delete/`)', 'delete'); } $button = '<div class="flex-nowrap"> <div class="dropdown"> <button class="btn btn-white dropdown-toggle align-text-top action-dot-btn" data-boundary="viewport" data-toggle="dropdown"> <i class="fas fa-ellipsis-v"></i> </button> <div class="dropdown-menu dropdown-menu-right">' . $action_button . '</div> </div> </div>'; return $button; }) ->rawColumns(array('department', 'start_time', 'end_time', 'hour', 'consider_time', 'status', 'action')) ->make(true); } public function getUserToDaySchedule() { $userSchedule = $this->dutySchedule->query() ->where('company_id', getCurrentCompany()) ->where('shift_id', auth()->user()->shift_id) ->first(); if ($userSchedule) { $user_duty_schedule = [ 'start_time' => [ 'hour' => (int) date('H', strtotime($userSchedule->start_time)), 'min' => (int) date('i', strtotime($userSchedule->start_time)), 'sec' => (int) date('s', strtotime($userSchedule->start_time)), ], 'end_time' => [ 'hour' => (int) date('H', strtotime($userSchedule->end_time)), 'min' => (int) date('i', strtotime($userSchedule->end_time)), 'sec' => (int) date('s', strtotime($userSchedule->end_time)), ], 'list_of_start_datetime' => $this->officeDaysTimeOfMonth($userSchedule->start_time, 1000000), 'list_of_end_datetime' => $this->officeDaysTimeOfMonth($userSchedule->end_time, 2000000), ]; } else { $user_duty_schedule = [ 'start_time' => [ 'hour' => 0, 'min' => 0, 'sec' => 0, ], 'end_time' => [ 'hour' => 0, 'min' => 0, 'sec' => 0, ], ]; } return $user_duty_schedule; } public function officeDaysTimeOfMonth($time, $number) { $thisMonthArray = []; // $thisMonthArray = $this->getSelectedMonthDays(now()->format('Y-m')); $thisMonthArray = $this->getNext30Days(); foreach ($thisMonthArray as $key => $item) { $day = Carbon::parse($item); $todayDateInSqlFormat = $day->format('Y-m-d'); $weekEnds = Weekend::where(['company_id' => getCurrentCompany(), 'is_weekend' => 'yes'])->pluck('name')->toArray(); $todayDateName = strtolower($day->format('l')); if (in_array($todayDateName, $weekEnds)) { //$dailyReports[] = "Weekend"; continue; } else { $isHoliday = Holiday::where('company_id', getCurrentCompany()) ->where('start_date', '<=', $todayDateInSqlFormat) ->where('end_date', '>=', $todayDateInSqlFormat) ->select('start_date', 'end_date') ->first(); if ($isHoliday) { //$dailyReports[] = "Holiday"; continue; } else { $timeString = (int) date('H', strtotime($time)) . ":" . (int) date('i', strtotime($time)); //$dailyReports[] = $todayDateInSqlFormat." ".$timeString; $unique_id = $number + ($key + 1); $dailyReports[] = [ 'id' => $unique_id, 'datetime' => $todayDateInSqlFormat . " " . $timeString, ]; } } } return $dailyReports; } //new functions function fields() { return [ _trans('common.ID'), _trans('common.Shift'), _trans('common.Start Time'), _trans('common.End Time'), _trans('common.Hours'), _trans('attendance.Consider Time'), _trans('common.Status'), _trans('common.Action'), ]; } function table($request) { // Log::info($request); $data = $this->dutySchedule->query()->where('company_id', getCurrentCompany()); if ($request->from && $request->to) { $data = $data->whereBetween('created_at', start_end_datetime($request->from, $request->to)); } if ($request->search) { $data = $data->whereHas('shift', function ($builder) use ($request) { return $builder->where('name', 'like', '%' . $request->search . '%'); }); } $data = $data->orderBy('id', 'DESC')->paginate($request->limit ?? 2); return [ 'data' => $data->map(function ($data) { $action_button = ''; if (hasPermission('schedule_update')) { $action_button .= actionButton(_trans('common.Edit'), route('dutySchedule.show', $data->id), 'profile'); } if (hasPermission('schedule_delete')) { $action_button .= actionButton(_trans('common.Delete'), '__globalDelete(' . $data->id . ',`hrm/duty/schedule/delete/`)', 'delete'); } $button = ' <div class="dropdown dropdown-action"> <button type="button" class="btn-dropdown" data-bs-toggle="dropdown" aria-expanded="false"> <i class="fa-solid fa-ellipsis"></i> </button> <ul class="dropdown-menu dropdown-menu-end"> ' . $action_button . ' </ul> </div>'; return [ 'id' => $data->id, 'shift' => $data->shift->name, 'start_time' => showTime($data->start_time), 'end_time' => showTime($data->end_time), 'hour' => $data->hour, 'consider_time' => $data->consider_time, 'status' => '<span class="badge badge-' . @$data->status->class . '">' . @$data->status->name . '</span>', 'action' => $button ]; }), 'pagination' => [ 'total' => $data->total(), 'count' => $data->count(), 'per_page' => $data->perPage(), 'current_page' => $data->currentPage(), 'total_pages' => $data->lastPage(), 'pagination_html' => $data->links('backend.pagination.custom')->toHtml(), ], ]; } public function destroyAll($request) { try { if (@$request->ids) { $duty_schedule = $this->dutySchedule->where('company_id', auth()->user()->company_id)->whereIn('id', $request->ids)->delete(); return $this->responseWithSuccess(_trans('message.Duty schedule delete successfully.'), $duty_schedule); } else { return $this->responseWithError(_trans('message.Duty schedule not found'), [], 400); } } catch (\Throwable $th) { return $this->responseWithError($th->getMessage(), [], 400); } } }