/home/techb158/ileadtechnology.com/SSM/app/Repositories/employee
NameSizeModeActions
AttendanceRepository.php218030644editdlrm
EmployeeAccountRepository.php54950644editdlrm
EmployeeDesignationRepository.php97780644editdlrm
EmployeeDocumentRepository.php66330644editdlrm
EmployeeImportRepository.php226550644editdlrm
EmployeeQualificationRepository.php65050644editdlrm
EmployeeRepository.php322690644editdlrm
EmployeeTermRepository.php88320644editdlrm
LeaveAllocationRepository.php126610644editdlrm
LeaveRequestRepository.php216110644editdlrm
PayrollRepository.php213830644editdlrm
PayrollTemplateRepository.php113260644editdlrm
PayrollTransactionRepository.php176240644editdlrm
SalaryRepository.php115880644editdlrm
Edit: /home/techb158/ileadtechnology.com/SSM/app/Repositories/employee/LeaveAllocationRepository.php (12661B)
leave_allocation = $leave_allocation; $this->leave_type = $leave_type; $this->employee = $employee; $this->leave_allocation_detail = $leave_allocation_detail; $this->leave_request = $leave_request; } /** * Find leave allocation with given id or throw an error. * * @param integer $id * @return LeaveAllocation */ public function findOrFail($id) { $leave_allocation = $this->leave_allocation->info()->filterBySession()->filterById($id)->first(); if (! $leave_allocation) { throw ValidationException::withMessages(['message' => trans('employee.could_not_find_leave_allocation')]); } return $leave_allocation; } /** * Find leave allocation with given uuid or throw an error. * * @param string $uuid * @return LeaveAllocation */ public function findByUuidOrFail($uuid) { $leave_allocation = $this->leave_allocation->info()->filterBySession()->whereUuid($uuid)->first(); if (! $leave_allocation) { throw ValidationException::withMessages(['message' => trans('employee.could_not_find_leave_allocation')]); } return $leave_allocation; } /** * Find employee leave allocation with given id or throw an error. * * @param array $params * @return LeaveAllocation */ public function employeeLeaveAllocation($params) { if (! \Auth::user()->can('request-leave')) { throw ValidationException::withMessages(['message' => trans('general.permission_denied')]); } $id = gv($params, 'id', optional(\Auth::user()->Employee)->id); if (! $id) { throw ValidationException::withMessages(['message' => trans('general.invalid_input')]); } $employee = $this->employee->findOrFail($id); if (\Auth::user()->Employee->id != $id) { $this->employee->isAccessible($employee); } return $this->leave_allocation->info()->filterBySession()->filterByEmployeeId($employee->id)->get(); } /** * Get all filtered data * * @param array $params * @return LeaveAllocation */ public function getData($params) { $sort_by = gv($params, 'sort_by', 'created_at'); $order = gv($params, 'order', 'desc'); $employee_id = gv($params, 'employee_id'); $employee_id = is_array($employee_id) ? $employee_id : ($employee_id ? explode(',', $employee_id) : []); $query = $this->leave_allocation->info()->filterBySession(); if (count($employee_id)) { $query->whereIn('employee_id', $employee_id); } return $query->orderBy($sort_by, $order); } /** * Paginate all leave allocations using given params. * * @param array $params * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator */ public function paginate($params) { $page_length = gv($params, 'page_length', config('config.page_length')); return $this->getData($params)->paginate($page_length); } /** * Get all filtered data for printing * * @param array $params * @return LeaveAllocation */ public function print($params) { return $this->getData($params)->get(); } /** * Get leave allocation filters. * * @return Array */ public function getFilters() { $leave_types = $this->leave_type->selectAll(); $employees = $this->employee->getAccessibleEmployeeList(); return compact('leave_types','employees'); } /** * Get leave allocation pre requisite. * * @return Array */ public function getPreRequisite() { return $this->getFilters(); } /** * Create a new leave allocation. * * @param array $params * @return void */ public function create($params = array()) { $this->validateLeaveTypes($params); $leave_allocation = $this->leave_allocation->forceCreate($this->formatParams($params)); $this->updateLeaveAllocationDetail($leave_allocation, $params); } /** * Update leave allocation details * * @param LeaveAllocation $leave_allocation * @param array $params * @return void */ private function updateLeaveAllocationDetail(LeaveAllocation $leave_allocation, $params) { $leave_types = gv($params, 'leave_types', []); $leave_allocation_details = $leave_allocation->LeaveAllocationDetails; foreach ($leave_types as $index => $leave_type) { $leave_allocation_detail = $this->leave_allocation_detail->firstOrCreate([ 'employee_leave_allocation_id' => $leave_allocation->id, 'employee_leave_type_id' => gv($leave_type, 'id') ]); $leave_allocation_detail->allotted = gv($leave_type, 'allotted', 0); $leave_allocation_detail->save(); } } /** * Validate leave types * * @param array $params * @return void */ private function validateLeaveTypes($params) { $leave_types = gv($params, 'leave_types', []); foreach ($leave_types as $index => $leave_type) { $allotted = gv($leave_type, 'allotted', 0); if (! isInteger($allotted)) { throw ValidationException::withMessages([$index.'_leave_type' => trans('validation.integer', ['attribute' => gv($leave_type, 'name')])]); } if ($allotted < 0) { throw ValidationException::withMessages([$index.'_leave_type' => trans('validation.min.numeric', ['attribute' => gv($leave_type, 'name'), 'min' => $allotted])]); } } } /** * Prepare given params for inserting into database. * * @param array $params * @param string $type * @return array */ private function formatParams($params, $leave_allocation_id = null) { $employee_id = gv($params, 'employee_id'); $start_date = toDate(gv($params, 'start_date')); $end_date = toDate(gv($params, 'end_date')); $description = gv($params, 'description'); $employee = $this->employee->findOrFail($employee_id); $this->employee->isAccessible($employee); $back_date_query = $this->leave_allocation->filterByEmployeeId($employee_id); if ($leave_allocation_id) { $back_date_query->where('id','!=',$leave_allocation_id); } if ($back_date_query->where('start_date','<=',$start_date)->count()) { throw ValidationException::withMessages(['message' => trans('employee.leave_allocation_exists_for_previous_date')]); } $overlapping_query = $this->leave_allocation->filterByEmployeeId($employee_id); if ($leave_allocation_id) { $overlapping_query->where('id','!=',$leave_allocation_id); } $overlapping = $overlapping_query->where(function ($q) use ($start_date, $end_date) { $q->where(function($q1) use($start_date, $end_date) { $q1->where('start_date','<=',$start_date)->where('end_date','>=',$end_date); })->orWhere(function($q2) use($start_date) { $q2->where('start_date','<=',$start_date)->where('end_date','>',$start_date); })->orWhere(function($q2) use($end_date) { $q2->where('start_date','<',$end_date)->where('end_date','>=',$end_date); })->orWhere(function($q3) use($start_date, $end_date) { $q3->where('start_date','>',$start_date)->where('end_date','<',$end_date); }); })->count(); if ($overlapping) { throw ValidationException::withMessages(['start_date' => trans('employee.leave_allocation_overlapping')]); } $formatted = [ 'employee_id' => gv($params, 'employee_id'), 'start_date' => toDate(gv($params, 'start_date')), 'end_date' => toDate(gv($params, 'end_date')), 'description' => gv($params, 'description'), 'options' => [] ]; if (! $leave_allocation_id) { $formatted['uuid'] = Str::uuid(); } return $formatted; } /** * Update given leave allocation. * * @param LeaveAllocation $leave_allocation * @param array $params * * @return LeaveAllocation */ public function update(LeaveAllocation $leave_allocation, $params) { $this->validateLeaveTypes($params); $leave_requests = $this->leave_request->filterByEmployeeId($leave_allocation->employee_id)->where('start_date','>=', toDate($leave_allocation->start_date))->where('end_date','<=', toDate($leave_allocation->end_date))->get(); $first_leave_request = $leave_requests->sortBy('start_date')->first(); $last_leave_request = $leave_requests->sortByDesc('end_date')->first(); if ($leave_requests->count() && (gv($params, 'start_date') > toDate($first_leave_request->start_date) || gv($params, 'end_date') < toDate($last_leave_request->end_date))) { throw ValidationException::withMessages(['message' => trans('employee.leave_allocation_limit_date_between', ['start_date' => showDate($first_leave_request->start_date), 'end_date' => showDate($last_leave_request->end_date)])]); } $leave_types = gv($params, 'leave_types', []); $leave_allocation_details = $leave_allocation->leaveAllocationDetails; foreach ($leave_types as $index => $leave_type) { $allotted = gv($leave_type, 'allotted', 0); $leave_allocation_detail = $leave_allocation_details->firstWhere('employee_leave_type_id', gv($leave_type, 'id')); if (! $leave_allocation_detail) { continue; } if ($allotted < $leave_allocation_detail->used) { throw ValidationException::withMessages(['message' => trans('employee.leave_balance_less_than_allotted', ['name' => $leave_allocation->employee->name, 'leave_type' => gv($leave_type, 'name'), 'used' => $leave_allocation_detail->used, 'allotted' => $allotted])]); } } $params['employee_id'] = $leave_allocation->employee_id; $leave_allocation->forceFill($this->formatParams($params, $leave_allocation->id))->save(); $this->updateLeaveAllocationDetail($leave_allocation, $params); return $leave_allocation; } /** * Find leave allocation is deletable or not. * * @param string $uuid * @return bool|null */ public function deletable($uuid) { $leave_allocation = $this->findByUuidOrFail($uuid); $leave_requests = $this->leave_request->filterByEmployeeId($leave_allocation->employee_id)->where('start_date','>=', toDate($leave_allocation->start_date))->where('end_date','<=', toDate($leave_allocation->end_date))->get(); if ($leave_requests->count()) { throw ValidationException::withMessages(['message' => trans('employee.leave_allocation_associated_with_leave_request')]); } return $leave_allocation; } /** * Delete leave allocation. * * @param integer $id * @return bool|null */ public function delete(LeaveAllocation $leave_allocation) { return $leave_allocation->delete(); } /** * Delete multiple leave allocations. * * @param array $ids * @return bool|null */ public function deleteMultiple($ids) { return $this->leave_allocation->whereIn('id', $ids)->delete(); } }