Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 11 |
CRAP | |
0.00% |
0 / 194 |
| LeaveApiController | |
0.00% |
0 / 1 |
|
0.00% |
0 / 11 |
1980 | |
0.00% |
0 / 194 |
| index | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| getLeaveRequests | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 6 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| store | |
0.00% |
0 / 1 |
342 | |
0.00% |
0 / 77 |
|||
| show | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| edit | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| update | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
| destroy | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| getLeaveCount | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| updateLeaveRequest | |
0.00% |
0 / 1 |
110 | |
0.00% |
0 / 42 |
|||
| getLeaveReport | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 51 |
|||
| <?php | |
| namespace App\Http\Controllers\Api; | |
| use Illuminate\Http\Request; | |
| use App\Http\Controllers\Controller; | |
| use App\Models\Admin\Leave; | |
| use App\Models\Auth\User; | |
| use App\Models\Leave\ApplyLeave; | |
| use App\Models\Leave\LeaveEntitlement; | |
| use App\Models\Admin\Weekend; | |
| use Illuminate\Support\Facades\Validator; | |
| use Session; | |
| use Carbon\Carbon; | |
| use Auth; | |
| use DB; | |
| use Illuminate\Support\Facades\Log; | |
| use App\Notifications\AppNotifications; | |
| //use App\Models\NotificationModel\NotificationList; | |
| use App\Notifications\ApplyLeaveNotifications; | |
| use App\Models\Leave\RejectedLeave; | |
| use App\Models\Admin\Team; | |
| use App\Helpers\LeaveHelper; | |
| class LeaveApiController extends Controller | |
| { | |
| /** | |
| * Display a listing of the resource. | |
| * | |
| * @return \Illuminate\Http\Response | |
| */ | |
| public function index(Request $request) | |
| { | |
| $leaves = Leave::all(); | |
| return response()->json([ | |
| 'status' =>200, | |
| 'leaves' => $leaves | |
| ]); | |
| } | |
| public function getLeaveRequests(Request $request) { | |
| if( auth()->user()->can('Administration Module') ) { | |
| $appliedleave = ApplyLeave::where('status', 'pending')->orderBy('created_at','DESC')->get(); | |
| return response()->json([ | |
| 'status' =>200, | |
| 'leaves' => $appliedleave | |
| ]); | |
| }else{ | |
| return response()->json(['status' => '404', 'message'=> 'you not have right permission to call this api']); | |
| } | |
| } | |
| /** | |
| * Show the form for creating a new resource. | |
| * | |
| * @return \Illuminate\Http\Response | |
| */ | |
| public function create() | |
| { | |
| } | |
| /** | |
| * Store a newly created resource in storage. | |
| * | |
| * @param \Illuminate\Http\Request $request | |
| * @return \Illuminate\Http\Response | |
| */ | |
| public function store(Request $request) | |
| { | |
| $to_date= ''; $from_date=''; | |
| if($request->from_date){ | |
| $from_date = Carbon::parse( Carbon::createFromFormat( config('settings.php_date_format') , $request->from_date ) )->format('Y-m-d'); | |
| } | |
| if($request->from_date){ | |
| $to_date = Carbon::parse( Carbon::createFromFormat( config('settings.php_date_format') , $request->to_date ) )->format('Y-m-d'); | |
| } | |
| $t = $to_date; $f = $from_date; | |
| $request->request->add(['f' =>$f ]); | |
| $request->request->add(['t' =>$t ]); | |
| if($request->leavetype == 'full_day'){ | |
| $validator = Validator::make($request->all(), [ | |
| 'reason' => 'required', | |
| 'f' => 'required|unique:apply_leaves,from_date,' . $f . ',id,user_id,' . Auth::user()->id, | |
| 't' => 'required|unique:apply_leaves,to_date,' . $t . ',id,user_id,' . Auth::user()->id, | |
| ]); | |
| }else{ | |
| $validator = Validator::make($request->all(), [ | |
| 'reason' => 'required', | |
| 'f' => 'required|unique:apply_leaves,from_date,' . $f . ',id,user_id,' . Auth::user()->id, | |
| 'halfDayType' => 'required' ]); | |
| } | |
| if ($validator->fails()) | |
| { | |
| if ($validator->messages()->has('reason')) | |
| { | |
| return response()->json(['status' => '422', 'message'=> 'Reason field is required']); | |
| }else if($validator->messages()->has('halfDayType')){ | |
| return response()->json(['status' => '422', 'message'=> 'Duration field is required']); | |
| }else{ | |
| return response()->json(['status' => '422', 'message'=> 'Already Taken Leave On This Date!']); | |
| } | |
| return response()->json($validator->errors()); | |
| } | |
| else{ | |
| $leaveBalance= LeaveHelper::getEntitlementLeave(Auth::user()->id, $request->leave_id); | |
| if($leaveBalance < $request->leave_length && LeaveHelper::checkTotalLeaves($request->leave_id)){ | |
| return response()->json(['status' => '200', 'message'=> ' Not Enough Leave Balance!']); | |
| } | |
| $leave = new ApplyLeave(); | |
| $leave->from_date = $from_date; | |
| if($request->leavetype == 'full_day'){ | |
| $leave->to_date = $to_date; | |
| }else{ | |
| $leave->to_date = $leave->from_date; | |
| } | |
| $leave->leave_length = $request->leave_length; | |
| $leave->leave_type = $request->leavetype; | |
| $leave->half_day_type = $request->halfDayType; | |
| if($leave->leave_type == "half_day") { | |
| $leave->leave_length = 0.5; | |
| $leave_type = "Half Day"; | |
| $leave->half_day_type = $request->halfDayType; | |
| } | |
| if($leave->leave_type == "full_day") { | |
| $leave->half_day_type = null; | |
| $leave_type = "Full Day"; | |
| } | |
| $leave->reason = $request->reason; | |
| $leave->is_process = 'false'; | |
| $leave->status = 'Pending'; | |
| $leave->user_id = Auth::user()->id; | |
| $leave->leave_id = $request->leave_id; | |
| $leave->save(); | |
| LeaveHelper::updateLeaveBalance($leave->leave_id ,$leave->leave_length); | |
| //get user team | |
| $user = Auth::user(); | |
| // $userAttendanceTeam =$user->userdetail->teams; | |
| // foreach($userAttendanceTeam as $userTeam) | |
| // { | |
| // $userInTeam = $userTeam->team; | |
| // } | |
| //primary team name | |
| $userInTeam = $user->userdetail->primaryTeamName->team; | |
| //notification users | |
| // $notificationList = NotificationList::firstOrFail(); | |
| // $usersToNotifyList = $notificationList->users; | |
| $user = User::find(Auth::user()->id); | |
| //mail notifications | |
| $subjectLine = 'AMS Notification : '.$leave_type." Leave requested by ".$user->name . ' ' . $user->lastName.' for '.$request->from_date; | |
| $mailArr = null; | |
| if($leave->leave_type == "full_day") | |
| { | |
| $mailArr = [$subjectLine, $userInTeam, $user->name.' '. $user->lastName, $leave_type ,$request->from_date, $request->to_date]; | |
| }else{ | |
| $mailArr = [$subjectLine, $userInTeam, $user->name.' '. $user->lastName, $leave_type ,ucwords(str_replace("_", " ", $leave->half_day_type)),$request->from_date]; | |
| } | |
| //app notifications | |
| $title = "Leave Request"; | |
| $message = $leave_type." requested by ".$user->name . ' ' . $user->lastName; | |
| $actionUrl = 'leave-report.index'; | |
| //primary reporting manager | |
| $primary_reporting_manager_id = $user->userdetail->primary_reporting_manager_id; | |
| //secondary reporting manager | |
| $secondaryManagers = $user->userdetail->secondaryManager; | |
| if ($primary_reporting_manager_id != 0) { | |
| //primary reporting manager | |
| $primary_reporting_manager = User::find($primary_reporting_manager_id); | |
| //check if user is exists | |
| if(!empty($primary_reporting_manager)){ | |
| $primary_reporting_manager->notify(new AppNotifications( | |
| [ | |
| $title, | |
| $message, | |
| $actionUrl | |
| ] | |
| )); | |
| //mail notification | |
| $primary_reporting_manager->notify(new ApplyLeaveNotifications($mailArr)); | |
| } | |
| } | |
| //secondary reporting managers | |
| if (count($user->userdetail->secondaryManager) > 0) { | |
| foreach ($user->userdetail->secondaryManager as $secondaryManager) { | |
| if ($primary_reporting_manager_id != $secondaryManager->id){ | |
| $arr = null; | |
| $arr = [$title, $message, $actionUrl]; | |
| $secondaryManager->notify(new AppNotifications($arr)); | |
| //mail notification | |
| $secondaryManager->notify(new ApplyLeaveNotifications($mailArr)); | |
| } | |
| } | |
| } | |
| // else { | |
| // foreach ($usersToNotifyList as $notification_user) { | |
| // $arr = null; | |
| // $arr = [$title, $message, $actionUrl]; | |
| // $notification_user->notify(new AppNotifications($arr)); | |
| // //mail notification | |
| // $notification_user->notify(new ApplyLeaveNotifications($mailArr)); | |
| // } | |
| // } | |
| return response()->json([ 'status' => '200', 'message'=> ' Submit Leave Successfuly! ']); | |
| } | |
| } | |
| /** | |
| * Display the specified resource. | |
| * | |
| * @param int $id | |
| * @return \Illuminate\Http\Response | |
| */ | |
| public function show($id) | |
| { | |
| } | |
| /** | |
| * Show the form for editing the specified resource. | |
| * | |
| * @param int $id | |
| * @return \Illuminate\Http\Response | |
| */ | |
| public function edit($id) | |
| { | |
| // | |
| } | |
| /** | |
| * Update the specified resource in storage. | |
| * | |
| * @param \Illuminate\Http\Request $request | |
| * @param int $id | |
| * @return \Illuminate\Http\Response | |
| */ | |
| public function update(Request $request, $id) | |
| { | |
| $leaves = ApplyLeave::find($id); | |
| $leaves->is_process = 'true'; | |
| $leaves->update($request->all()); | |
| LeaveHelper::updateLeaveBalanceOnCancelling($leaves->status,$leaves->leave_id,$leaves->leave_length); | |
| return response()->json([ 'status' => '200', 'message'=> 'Cancel Leave Successful!']); | |
| } | |
| /** | |
| * Remove the specified resource from storage. | |
| * | |
| * @param int $id | |
| * @return \Illuminate\Http\Response | |
| */ | |
| public function destroy($id) | |
| { | |
| $leave = ApplyLeave::find($id); | |
| $leave->delete(); | |
| return response()->json([ 'status' => '200', 'message'=> 'Leave Deleted Successfully']); | |
| } | |
| public function getLeaveCount(Request $request) | |
| { | |
| $leaveBalance = LeaveHelper::getEntitlementLeave(Auth::user()->id,$request->leaveId); | |
| return response()->json([ | |
| 'leaveBalance'=> $leaveBalance, | |
| ]); | |
| } | |
| //**************** admin api ***********************************// | |
| public function updateLeaveRequest(Request $request, $id) { | |
| if( !auth()->user()->can('Administration Module') ) { | |
| if ($request->has('approver_comments')) { | |
| $status = $request->status_reject; | |
| $approver_comments = $request->approver_comments; | |
| } else { | |
| $approver_comments = null; | |
| return $status = $request->status; | |
| if ($status == '') { | |
| return response()->json(['status' => '422', 'message'=> 'Please select status and update']); | |
| //return redirect()->back()->with('warning', 'Please select status and update'); | |
| } | |
| } | |
| $leaves = ApplyLeave::find($id); | |
| //$leaves->is_process = 'true'; | |
| //$leaves->update(['status' => $status]); //dd($leaves); | |
| LeaveHelper::updateLeaveBalanceOnRejecting($leaves->user_id, $status, $leaves->leave_id, $leaves->leave_length); | |
| //notification to user | |
| $user = User::find($leaves->user_id); | |
| if($leaves->from_date == $leaves->to_date){ | |
| $leave_days = Carbon::parse($leaves->from_date)->format('jS M Y'); | |
| }else{ | |
| $leave_days = Carbon::parse($leaves->from_date)->format('jS M Y').' to '.Carbon::parse($leaves->to_date)->format('jS M Y'); | |
| } | |
| $leave_status=''; | |
| if ($status == 'Approve') { | |
| $leave_status = 'approved'; | |
| }else if($status == 'Reject'){ | |
| $leave_status = 'rejected'; | |
| } | |
| $title = "Leave request"; | |
| if ($request->has('approver_comments') && $status == 'Reject') { | |
| $rejected_leave = new RejectedLeave(); | |
| $rejected_leave->from_date = $leaves->from_date; | |
| $rejected_leave->to_date = $leaves->to_date; | |
| $rejected_leave->reason = $leaves->reason; | |
| $rejected_leave->is_process = 'true'; | |
| $rejected_leave->user_id = $leaves->user_id; | |
| $rejected_leave->leave_id = $leaves->leave_id; | |
| $rejected_leave->leave_length = $leaves->leave_length; | |
| $rejected_leave->leave_type = $leaves->leave_type; | |
| $rejected_leave->half_day_type = $leaves->half_day_type; | |
| $rejected_leave->approver_comments = $approver_comments; | |
| $rejected_leave->save(); | |
| $leaves->delete(); | |
| $message = 'Your leave request for '.$leave_days.' has been '. $leave_status.' due to '.$approver_comments; | |
| }else{ | |
| $message = 'Your leave request for '.$leave_days.' has been '. $leave_status; | |
| } | |
| $actionUrl = 'apply-leave.index'; | |
| $arr = null; | |
| $arr = [$title, $message, $actionUrl]; | |
| $user->notify(new AppNotifications($arr)); | |
| if ($status == 'Approve') { | |
| return response()->json(['status' => '200', 'message'=> 'Approve Leave Successful!']); | |
| //Session::flash('success', 'Approve Leave Successful!'); | |
| } else { | |
| return response()->json(['status' => '200', 'message'=> 'Reject Leave Successful!']); | |
| //Session::flash('warning', 'Reject Leave Successful!'); | |
| } | |
| //return redirect()->route('leave-report.index')->withErrors($this); | |
| return response()->json(['status' => '200', 'message'=> 'some error']); | |
| }else{ | |
| return response()->json(['status' => '404', 'message'=> 'you not have right permission to call this api']); | |
| } | |
| } | |
| public function getLeaveReport(Request $request) | |
| { | |
| if( !auth()->user()->can('Administration Module') ) { | |
| //return $request->month_year; | |
| $startDate = Carbon::parse('01-'.$request->month_year ,Config('app.timezone')); | |
| $startDate = $startDate->format('Y-m-d'); | |
| $endDate = Carbon::parse('01-'.$request->month_year ,Config('app.timezone'))->endOfMonth()->format('Y-m-d'); | |
| //$dateDayAdded = $date->addDay()->toDateString(); | |
| $teamId = $request->teamId; | |
| $columnHeaders = collect(['Employee Name','Team Name','Leave Type','Half Day Leave Type','Reason','From Date','To Date','Leave Length','Status']); | |
| if($teamId == 0) | |
| { | |
| // $leaveReport = DB::select('select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date, | |
| // (select date(a.to_date)) as to_date, a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status | |
| // from apply_leaves a | |
| // join user_details u on a.user_id = u.user_id | |
| // join team_user_detail tsd on tsd.user_detail_id = u.id | |
| // join teams t on t.id = tsd.team_id | |
| // join users us on us.id = u.user_id | |
| // where ((a.from_date between :startDate1 and :endDate1) | |
| // or (a.to_date between :startDate2 and :endDate2)) order by us.id,a.id', | |
| // ['startDate1'=>$startDate,'endDate1'=>$endDate, | |
| // 'startDate2'=>$startDate,'endDate2'=>$endDate]); | |
| $leaveReport = DB::select('select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date, | |
| (select date(a.to_date)) as to_date, a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status | |
| from apply_leaves a | |
| join user_details u on a.user_id = u.user_id | |
| join teams t on t.id = u.primary_team_id | |
| join users us on us.id = u.user_id | |
| where ((a.from_date between :startDate1 and :endDate1) | |
| or (a.to_date between :startDate2 and :endDate2)) order by us.id,a.id', | |
| ['startDate1'=>$startDate,'endDate1'=>$endDate, | |
| 'startDate2'=>$startDate,'endDate2'=>$endDate]); | |
| } | |
| else | |
| { | |
| // $leaveReport = DB::select(' select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date, | |
| // (select date(a.to_date)) as to_date,a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status | |
| // from apply_leaves a | |
| // join user_details u on a.user_id = u.user_id | |
| // join team_user_detail tsd on tsd.user_detail_id = u.id | |
| // join teams t on t.id = tsd.team_id | |
| // join users us on us.id = u.user_id | |
| // where t.id in (:teamId) and | |
| // ((a.from_date between :startDate1 and :endDate1) | |
| // or (a.to_date between :startDate2 and :endDate2)) order by us.id,a.id', | |
| // ['teamId' => $teamId,'startDate1'=>$startDate,'endDate1'=>$endDate, | |
| // 'startDate2'=>$startDate,'endDate2'=>$endDate]); | |
| $leaveReport = DB::select(' select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date, | |
| (select date(a.to_date)) as to_date,a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status | |
| from apply_leaves a | |
| join user_details u on a.user_id = u.user_id | |
| join teams t on t.id = u.primary_team_id | |
| join users us on us.id = u.user_id | |
| where t.id in (:teamId) and | |
| ((a.from_date between :startDate1 and :endDate1) | |
| or (a.to_date between :startDate2 and :endDate2)) order by us.id,a.id', | |
| ['teamId' => $teamId,'startDate1'=>$startDate,'endDate1'=>$endDate, | |
| 'startDate2'=>$startDate,'endDate2'=>$endDate]); | |
| } | |
| $leaveReportColl = collect($leaveReport); | |
| $leaveReportTempColl = collect([]); | |
| foreach($leaveReportColl as $data) | |
| { | |
| $leave = collect([]); | |
| $leave->name = $data->name; | |
| $leave->team = $data->team; | |
| $leave->reason = $data->reason; | |
| $leave->from_date = $data->from_date; | |
| $leave->to_date = $data->to_date; | |
| $leave->leave_length = $data->leave_length; | |
| $leave->status = $data->status; | |
| if($data->leave_type =='full_day') | |
| { | |
| $leave->leave_type = $data->leave_type ="Full Day"; | |
| } | |
| else | |
| { | |
| $leave->leave_type = $data->leave_type ="Half Day"; | |
| } | |
| if($data->half_day_type =='second_half') | |
| { | |
| $leave->half_day_type = $data->half_day_type ="Second Half"; | |
| } | |
| else | |
| if($data->half_day_type =='first_half') | |
| { | |
| $leave->half_day_type = $data->half_day_type ="First Half"; | |
| } | |
| else | |
| { | |
| $leave->half_day_type ='---'; | |
| } | |
| $leaveArr = array( | |
| "name" => $leave->name, | |
| "team" => $leave->team, | |
| "leave_type" => $leave->leave_type, | |
| "half_day_type" =>$leave->half_day_type, | |
| "reason" => $leave->reason, | |
| "from_date" => Carbon::parse($leave->from_date)->format(Config('settings.php_date_format')), | |
| "to_date" => Carbon::parse($leave->to_date)->format(Config('settings.php_date_format')), | |
| "leave_length" => $leave->leave_length, | |
| "status" => $leave->status, | |
| ); | |
| $leaveReportTempColl->push($leaveArr); | |
| $checkOutDate = null; | |
| $checkInDate = null; | |
| } | |
| $leaveReportColl = collect([]); | |
| $leaveReportColl = $leaveReportTempColl; | |
| $teams =Team::all(); | |
| $startDate = Carbon::parse($startDate)->format(Config('settings.php_date_format')); | |
| $endDate = Carbon::parse($endDate)->format(Config('settings.php_date_format')); | |
| return response()->json(['status' => '200', 'leaveReportColl' => $leaveReportColl, 'columnHeaders'=>$columnHeaders, 'startDate'=>$startDate, 'endDate'=>$endDate ]); | |
| }else{ | |
| return response()->json(['status' => '404', 'message'=> 'you not have right permission to call this api']); | |
| } | |
| } | |
| } |