PK-Z Providers/AppServiceProvider.phpnu[configureRateLimiting(); $this->routes(function () { Route::middleware('api') ->prefix('api') ->group(base_path('routes/api.php')); Route::middleware('web') ->group(base_path('routes/web.php')); }); } /** * Configure the rate limiters for the application. * * @return void */ protected function configureRateLimiting() { RateLimiter::for('api', function (Request $request) { return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); }); } } PK-Z||&Providers/BroadcastServiceProvider.phpnu[ */ protected $policies = [ // 'App\Models\Model' => 'App\Policies\ModelPolicy', ]; /** * Register any authentication / authorization services. * * @return void */ public function boot() { $this->registerPolicies(); // } } PK-Z)("Providers/EventServiceProvider.phpnu[> */ protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, ], ]; /** * Register any events for your application. * * @return void */ public function boot() { // } /** * Determine if events and listeners should be automatically discovered. * * @return bool */ public function shouldDiscoverEvents() { return false; } } PK-ZkCfConsole/Kernel.phpnu[command('queue:work --queue=high,default')->everyMinute()->withoutOverlapping(); } /** * Register the commands for the application. */ protected function commands(): void { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } protected $commands = [ \App\Console\Commands\ServeWithCustomPort::class, ]; } PK-Zj Http/Middleware/TrustProxies.phpnu[|string|null */ protected $proxies; /** * The headers that should be used to detect proxies. * * @var int */ protected $headers = Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_AWS_ELB; } PK-ZEK Http/Middleware/Authenticate.phpnu[expectsJson()) { return route('auth.index'); } } } PK-Zgh@@#Http/Middleware/VerifyCsrfToken.phpnu[ */ protected $except = [ // ]; } PK-Z~}}Http/Middleware/TrimStrings.phpnu[ */ protected $except = [ 'current_password', 'password', 'password_confirmation', ]; } PK-Z7mm+Http/Middleware/RedirectIfAuthenticated.phpnu[check()) { return redirect(RouteServiceProvider::HOME); } } return $next($request); } } PK-Z{{nn4Http/Middleware/PreventRequestsDuringMaintenance.phpnu[ */ protected $except = [ // ]; } PK-ZL{ ttHttp/Middleware/TrustHosts.phpnu[ */ public function hosts() { return [ $this->allSubdomainsOfApplicationUrl(), ]; } } PK-Z"q33"Http/Middleware/EncryptCookies.phpnu[ */ protected $except = [ // ]; } PK-ZGf%Http/Middleware/ValidateSignature.phpnu[ */ protected $except = [ // 'fbclid', // 'utm_campaign', // 'utm_content', // 'utm_medium', // 'utm_source', // 'utm_term', ]; } PK-Zs! ! Http/Kernel.phpnu[ */ protected $middleware = [ // \App\Http\Middleware\TrustHosts::class, \App\Http\Middleware\TrustProxies::class, \Illuminate\Http\Middleware\HandleCors::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]; /** * The application's route middleware groups. * * @var array> */ protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; /** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array */ protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'signed' => \App\Http\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, ]; } PK-Z9'Http/Controllers/TemplateController.phpnu[template = new Template(); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { if(Bouncer::can('view-template')){ $page_title = "Templates"; return view('admin.templates.index')->with(['page_title' => $page_title]); } else { abort(403,'Unauthorized'); } } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $questions = Questions::where('status',"=",1)->get()->all(); $page_title = "Create Template"; return view('admin.templates.create',compact('questions'))->with(['page_title' => $page_title]); } public function fetchall(Request $request){ $array_data['search_keyword'] = $request->search['value']; if(empty($request->search_type)){ $array_data['search_type'] = ""; } else { $array_data['search_type'] = json_decode($request->search_type,true)[0]; } // dd($array_data['search_type']); $array_data['sort'] = $request->order[0]['dir']; $array_data['order'] = $request->columns[$request->order[0]['column']]['data']; $array_data['offset'] = $request->start; $array_data['limit'] = $request->length; $array_data['offset_limit'] = " LIMIT {$array_data['offset']},{$array_data['limit']}"; $array_data['sort'] = " ORDER BY {$array_data['order']} {$array_data['sort']} "; $array_data['search'] = ""; // dd($request->search_type); if (!empty($array_data['search_keyword'])) { // $array_data['search_keyword'] = "1"; // $array_data['search'] = " AND ? "; // } else { switch ($array_data['search_type']) { // case "ID": // $array_data['search'] = " AND id = {$array_data['search_keyword']} "; // break; case "Template Name": $array_data['search'] = " AND title LIKE '%{$array_data['search_keyword']}%' "; break; } } // dd($array_data['search']); $array_data['where'] = ""; $data = $request->data; if(!empty($data['active'])){ $array_data['where'] .= " AND active = {$data['active']} "; } $results = $this->template->getTemplates($array_data); // dd($results); $result['data'] = array(); foreach($results as $row){ // dd($row); $result['data'][] = array( "id" => $row->id, "title" => $row->title ); } // dd($system); $result['draw'] = $request->draw; $result['recordsTotal'] = $this->template->getTemplatesCount($array_data)[0]->Count; $result['recordsFiltered'] = $this->template->getTemplatesFilteredCount($array_data)[0]->FilteredCount; // dd($result); return response()->json($result); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $request->validate([ 'title' => 'required', 'questionArr' => 'required' ],[ 'title.required' => "Please provide a Template Name", 'questionArr.required' => "Please provide a list of questions" ]); $questions = explode(",",$request->questionArr); $result = $this->template; $result->title = $request->title; $result->q_id = json_encode($questions); $result->active = 1; $result->status = 1; $result->save(); $array_data = [ "id" => Auth::user()->id, "action" => "create", "message" => Auth::user()->id . " has created a template." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success","result"=>$result],200); } public function select2fetchAll(){ $template = DB::table('templates') ->select('id','title')->get(); $data['results'] = []; foreach($template as $row){ $data['results'][] = [ "id" => $row->id, "text" => $row->title ]; } return response()->json($data); } public function fetchTemplate(){ $template = Template::all(); dd($template); } /** * Display the specified resource. * * @param \App\Models\Template $template * @return \Illuminate\Http\Response */ public function show(Template $template) { // } /** * Show the form for editing the specified resource. * * @param \App\Models\Template $template * @return \Illuminate\Http\Response */ public function edit($id) { $template = Template::findOrFail($id); $questions = Questions::select('id','title')->where('status',"=",1)->get(); $page_title = "Edit Template"; return view('admin.templates.edit',compact('template','questions'))->with(['page_title' => $page_title]); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\Template $template * @return \Illuminate\Http\Response */ public function update(Request $request) { // dd($request->all()); $questions = explode(",",$request->questionArr); $result = Template::where('id', $request->id) ->update([ 'title' => $request->title, 'q_id' => json_encode($questions) ]); $array_data = [ "id" => Auth::user()->id, "action" => "update", "message" => Auth::user()->id . " has updated a template." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success", "result"=>$result],200); } /** * Remove the specified resource from storage. * * @param \App\Models\Template $template * @return \Illuminate\Http\Response */ public function destroy(Request $request) { $res = Questionnaire::where('t_id', $request->id)->count(); if($res > 0){ return response()->json(['message'=>"This template is already in use. Deletion is not possible"], 400); } else { $result = Template::where('id', $request->id) ->update([ 'active' => null, 'status' => null ]); $array_data = [ "id" => Auth::user()->id, "action" => "destroy", "message" => Auth::user()->id . " has deleted a template." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success", "result"=>$result]); } } } PK-Z= U%%%%,Http/Controllers/QuestionnaireController.phpnu[questionnaire = new Questionnaire(); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { if(Bouncer::can('view-questionnaire')){ $page_title = "Survey Forms"; return view('admin.questionnaires.index')->with(['page_title' => $page_title]); } else { abort(403,'Unauthorized'); } } public function getQs(Request $request){ $id = $request->id; $tmp = Template::select('q_id')->where('id',$id)->get(); if(!empty($tmp[0]->q_id)){ $q_id = array_map('intval',json_decode($tmp[0]->q_id)); foreach($q_id as $row){ $result = (new QuestionsController)->getQs($row); $array['questions'][] = [ $result[0]->title ]; } return response()->json($array); } } public function fetchall(Request $request){ $array_data['search_keyword'] = $request->search['value']; if(empty($request->search_type)){ $array_data['search_type'] = ""; } else { $array_data['search_type'] = json_decode($request->search_type,true)[0]; } $array_data['sort'] = $request->order[0]['dir']; $array_data['order'] = $request->columns[$request->order[0]['column']]['data']; $array_data['offset'] = $request->start; $array_data['limit'] = $request->length; $array_data['offset_limit'] = " LIMIT {$array_data['offset']},{$array_data['limit']}"; $array_data['sort'] = " ORDER BY {$array_data['order']} {$array_data['sort']} "; $array_data['search'] = ""; if (!empty($array_data['search_keyword'])) { switch ($array_data['search_type']) { case "System Name": $array_data['search'] = " AND `system_name` LIKE '%{$array_data['search_keyword']}%' "; break; case "Template Name": $array_data['search'] = " AND `title` LIKE '%{$array_data['search_keyword']}%' "; break; } } $array_data['where'] = ""; $data = $request->data; if(!empty($data['active'])){ $array_data['where'] .= " AND active = {$data['active']} "; } $results = $this->questionnaire->getQuestionnaires($array_data); $result['data'] = array(); $count = 0; foreach($results as $row){ $result['data'][] = array( "q_id" => $row->q_id, "tmp_id" => $row->tmp_id, "q_count" => $row->q_count, "title" => $row->title, "sys_id" => $row->sys_id, "system_name" =>$row->system_name, "created_at" => date('Y-m-d',strtotime($row->created_at)) ); } $result['draw'] = $request->draw; $result['recordsTotal'] = $this->questionnaire->getQuestionnairesCount($array_data)[0]->Count; $result['recordsFiltered'] = $this->questionnaire->getQuestionnairesFilteredCount($array_data)[0]->FilteredCount; return response()->json($result); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $page_title = "Create Survey Form"; return view('admin.questionnaires.create')->with(['page_title' => $page_title]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $url = $request->url(); $base_url = explode("/",$url); if($request->t_id == "null"){ return response()->json(["message"=>"Please provide a template name"],402); } if($request->s_id == "null"){ return response()->json(["message"=>"Please choose a system"],402); } $check = Questionnaire::select('id') ->where([['s_id',"=",$request->s_id],['t_id',"=",$request->t_id]]) ->get(); if(empty($check[0])){ DB::table('questionnaires') ->insert([ 's_id' => $request->s_id, 't_id' => $request->t_id, 'instruction' => $request->instruction, 'status' => 1, 'active' => 1 ]); $link = new Link; $link->sys_id = $request->s_id; $link->tmp_id = $request->t_id; $link->link = url('/')."/search/s/".$request->s_id."/tid/".$request->t_id; $link->active = 1; $link->status = 1; $link->save(); $array_data = [ "id" => Auth::user()->id, "action" => "create", "message" => Auth::user()->id . " has created a questionnaire." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success"],200); } else { return response()->json(["message"=>"Either template or system is already in use. \n Please edit the template or create new one"],403); } } /** * Display the specified resource. * * @param \App\Models\Questionnaire $questionnaire * @return \Illuminate\Http\Response */ public function show(Questionnaire $questionnaire) { // } /** * Show the form for editing the specified resource. * * @param \App\Models\Questionnaire $questionnaire * @return \Illuminate\Http\Response */ public function edit($tmp_id,$sys_id) { $page_title = "Survery Form View"; $instruction = Questionnaire::select('instruction')->where([['t_id',$tmp_id],['s_id',$sys_id]])->first(); return view('admin.questionnaires.edit',compact('tmp_id','sys_id','instruction'))->with(['page_title' => $page_title]); } public function getQuestions(Request $request){ $q_title = []; $t_name = Template::select('title','q_id') ->where('id',"=",$request->t_id) ->get(); $s_name = System::select('system_name') ->where('id',"=",$request->s_id) ->get(); $questions = array_map('intval',json_decode($t_name[0]->q_id)); foreach($questions as $row){ $q = Questions::select('title')->where('id',$row)->get(); $q_title[] = [ $q[0]->title, ]; } $link = Link::select('link')->where([ ['tmp_id',"=",$request->t_id], ['sys_id',"=",$request->s_id], ])->get(); return response()->json([ "questions"=>$q_title, "template"=>$t_name[0]->title, "system"=>$s_name, "link"=>$link]); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\Questionnaire $questionnaire * @return \Illuminate\Http\Response */ public function update(Request $request) { // dd($request->all()); $result = Questionnaire::where([ ['t_id',"=",$request->t_id], ['s_id',"=",$request->s_id] ])->get(); $questionnaire = Questionnaire::findOrFail($result[0]->id); $questionnaire->instruction = $request->instruction; $questionnaire->save(); $array_data = [ "id" => Auth::user()->id, "action" => "update", "message" => Auth::user()->id . " has updated a questionnaire." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success"],200); } /** * Remove the specified resource from storage. * * @param \App\Models\Questionnaire $questionnaire * @return \Illuminate\Http\Response */ public function destroy(Request $request) { $result = Questionnaire::where([ ['t_id',"=",$request->tmp_id], ['s_id',"=",$request->sys_id] ])->update([ 'status' => null, ]); $array_data = [ "id" => Auth::user()->id, "action" => "delete", "message" => Auth::user()->id . " has deleted a questionnaire." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success"],200); } } PK-Z[v8&Http/Controllers/ProfileController.phpnu[with(['page_title'=>$page_title]); } public function updateProfile(Request $request){ $id = Auth::user()->id; $user = User::findOrFail($id); $request->validate([ 'user_first_name' => 'required', 'user_last_name' => 'required', 'user_email' => 'required' ],[ ]); if(!$request->password || !$request->password_confirmation){ $user->f_name = $request->user_first_name; $user->l_name = $request->user_last_name; $user->email = $request->user_email; $user->save(); $array_data = [ "id" => Auth::user()->id, "action" => "update", "message" => Auth::user()->id . " has updated their profile." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(['message'=>'profile updated'],200); } else { if($request->password !== $request->password_confirmation){ return response()->json(['password does not match'], 403); } else { $user->f_name = $request->user_first_name; $user->l_name = $request->user_last_name; $user->email = $request->user_email; $user->password = bcrypt($request->password); $user->save(); $array_data = [ "id" => Auth::user()->id, "action" => "update", "message" => Auth::user()->id . " has updated their password." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(['message'=>'profile updated'],200); } } } } PK-ZpHttp/Controllers/Controller.phpnu[current_datetime = date('Y-m-d H:i:s'); } } PK-Z_n.n.%Http/Controllers/AnswerController.phpnu[select('content')->first(); // $request->validate([ // 'f_name' => 'required', // 'l_name' => 'required', // 'email' => 'required', // 'comp_id' => 'required', // ],[ // ]); if(Auth::check()){ $questionsArr = []; $url = $request->url(); $url = explode("/",$url); // dd($url); $conditions = [ ['sys_id',$url[5]], ['tmp_id',$url[7]] ]; $conditions2 = [ ['s_id',$url[5]], ['t_id',$url[7]], ['status',1], ['active',1] ]; $conditions3 = [ ['user_id',Auth::user()->id], ['tmpt_id',$url[7]], ['syst_id',$url[5]] ]; $check = Link::where($conditions)->get(); $checkIfAlreadyResponded = Answer::where($conditions3)->first(); $qstnn_id = Questionnaire::select('id','instruction')->where([['s_id',$url[5]],['t_id',$url[7]]])->first(); if(!empty($check[0])){ if(!$checkIfAlreadyResponded){ $questions = Template::select('q_id')->where('id',$url[7])->get(); $questionnaire = array_map('intval',json_decode($questions[0]->q_id)); $system_title = System::select('system_name')->where('id',"=",$url[5])->get(); foreach($questionnaire as $row){ $questions = Questions::select('title')->where('id',$row)->get(); $questionsArr['questions'][] = [ 'title' => $questions[0]->title, 'qst_id' => $row ]; } $s_id = $url[5]; $t_id = $url[7]; $q_id = $qstnn_id->id; $instruction = $qstnn_id->instruction; return view('users.verify',compact('questionsArr','t_id','s_id','q_id','system_title','instruction'))->with(['page_title' => $page_title]); } else { return view()->make('message.error',['message' => '

You responded already!

'])->with(['page_title' => $page_title]); } } else { abort(404); } } else { session(['url.intended' => url()->current()]); return redirect('userlogin')->with(['disclaimer'=>$disclaimer]); } } public function getAnswer(Request $request){ $arr = json_decode($request->stars); $result = []; foreach ($arr as $subArr) { $index0 = $subArr[0]; if (!isset($result[$index0])) { $result[$index0] = $subArr; } else { $result[$index0] = $subArr; } } $result = array_values($result); usort($result, function($a, $b) { return $a[0] - $b[0]; }); $result = array_values($result); // dd($result); $qst = []; $ans = []; // dd($result); foreach($result as $row){ $qsts = $row[0]; $qst[] = $qsts; } foreach($result as $row){ $ansr = $row[1]; $ans[] = $ansr; } // foreach($result as $row){ $answer = Answer::insertGetId([ 'user_id' => Auth::user()->id, 'tmpt_id' => $request->t_id, 'syst_id' => $request->s_id, 'qstnn_id' => $request->q_id, 'qst_id' => json_encode($qst), 'rating' => json_encode($ans), 'comment' => $request->comment ]); // } $agent = new Agent(); if($agent->isDesktop()){ DB::table('device_access')->where('id',1) ->increment('pc',1); } if($agent->isMobile()){ DB::table('device_access')->where('id',1) ->increment('mobile',1); } if($agent->isTablet()){ DB::table('device_access')->where('id',1) ->increment('tablet',1); } $email = $this->emailResponse($answer); return response()->json(['message'=>"Success"],200); // if($email == 1){ // return response()->json(['message'=>"success"],200); // } else { // return response()->json(['message'=>"error"],403); // } } public function employeeLogin(Request $request){ // dd($request->all()); $request['type'] = "ratee"; $request->validate([ 'f_name' => 'required|string|max:20', 'l_name' => 'required|string|max:20', 'email' => 'required|string|max:35|ends_with:@autohubgroup.com', 'comp_id' => 'required|integer' ],[ 'f_name.required' => "First Name is required", 'f_name.string' => "First Name should not contain any integer value", 'l_name.required' => "Last Name is required", 'l_name.string' => "Last Name should not contain any integer value", 'email.required' => "Email is required", 'comp_id.integer' => "Please choose a company" ]); $user = User::select('id')->where([['f_name',"=",$request->f_name],['l_name',"=",$request->l_name], ['email',"=",$request->email]])->first(); if(empty($user)){ $request->validate([ 'f_name' => 'required|string|max:20', 'l_name' => 'required|string|max:20', 'email' => 'required|string|max:35|ends_with:@autohubgroup.com|unique:users,email', 'comp_id' => 'required|integer' ],[ 'f_name.required' => "First Name is required", 'f_name.string' => "First Name should not contain any integer value", 'l_name.required' => "Last Name is required", 'l_name.string' => "Last Name should not contain any integer value", 'email.required' => "Email is required", 'email.unique' => "This email has been registered already", 'comp_id.integer' => "Please choose a company" ]); $user = User::create([ 'f_name' => ucfirst(strtolower($request->f_name)), 'l_name' => ucfirst(strtolower($request->l_name)), 'email' => $request->email, 'comp_id' => $request->comp_id, 'password' => " ", 'type' => "ratee" ]); Auth::login($user); } else { Auth::login($user); } $rdr = explode("/",session('url.intended')); $link = "/".$rdr[3]."/".$rdr[4]."/".$rdr[5]."/".$rdr[6]."/".$rdr[7]; return response()->json($link); } public function emailResponse($answer){ $result = Answer::findOrFail($answer); $questions = json_decode($result->qst_id); $qs = []; $template = Template::findOrFail($result->tmpt_id); $user = Auth::user()->l_name . ", " . Auth::user()->f_name; $info = [ 'template' => $template['title'], 'user' => $user, 'email' => Auth::user()->email ]; foreach($questions as $key => $id){ $title = Questions::select('title')->where('id',$id)->first(); $ans = json_decode($result->rating); // dd($ans); $qs[] = [$title['title'],$ans[$key]]; } $to = Auth::user()->email; $subject = "Survey Response"; $headers = "From: Autohub Group of Companies Inc.\r\n"; $headers .= "Content-Type: text/html\r\n"; $message = view('mail.response',['qs' => $qs,'info' => $info, 'comment' => $result->comment])->render(); try { $emailResponse = mail($to, $subject, $message, $headers); if ($emailResponse) { // Email sent successfully $this->emailResponseManagement(Auth::user()->id, $result->id, Auth::user()->email, NOW(), 1); return 1; } else { // Email failed to send $this->emailResponseManagement(Auth::user()->id, $result->id, Auth::user()->email, NOW(), 0); return 0; } } catch (\Exception $e) { // Handle the exception $errorMessage = $e->getMessage(); $this->emailResponseManagement(Auth::user()->id, $result->id, Auth::user()->email, NOW(), 0); return 0; } } public function emailResponseManagement($id,$answer,$email,$created_at,$status){ DB::table('email_responses')->insert([ 'user' => $id, 'ans' => $answer, 'email' => $email, 'created_at' => $created_at, 'status' => $status ]); } public function resendEmail(Request $request){ $result = DB::table('email_responses')->where('id',$request->id)->first(); //get the info of the failed email response // dd($result); $res = Answer::findOrFail($result->ans); $questions = json_decode($res->qst_id); $qs = []; $template = Template::findOrFail($res->tmpt_id); $user = User::where('id',$res->user_id)->first(); $info = [ 'template' => $template['title'], 'user' => $user->f_name . " " . $user->l_name, 'email' => $request->email ]; foreach($questions as $key => $id){ $title = Questions::select('title')->where('id',$id)->first(); $ans = json_decode($res->rating); // dd($ans); $qs[] = [$title['title'],$ans[$key]]; } $to = $request->email; $subject = "Survey Response"; $headers = "From: Autohub Group of Companies Inc.\r\n"; $headers .= "Content-Type: text/html\r\n"; $message = view('mail.response',['qs' => $qs,'info' => $info, 'comment' => $res->comment])->render(); try { $emailResponse = mail($to, $subject, $message, $headers); if ($emailResponse) { // Email sent successfully $this->emailResponseManagement($user->id, $res->id, $request->email, NOW(), 1); return 1; } else { // Email failed to send $this->emailResponseManagement($user->id, $res->id, $request->email, NOW(), 0); return 0; } } catch (\Exception $e) { // Handle the exception $errorMessage = $e->getMessage(); $this->emailResponseManagement($user->id, $res->id, $request->email, NOW(), 0); return 0; } } }PK-Zyll#Http/Controllers/AuthController.phpnu[auth = new ModelsAuth; $this->quest = new Questions; $this->tmp = new Template; $this->sys = new System; $this->qst = new Questionnaire; $this->ans = new Answer; $this->user = new User; } public function disclaimer(){ $page_title = "Disclaimer"; return view('admin.disclaimer.index')->with(['page_title'=>$page_title]); } public function updateDisclaimer(Request $request){ DB::table('disclaimer')->where('id',1) ->update([ 'content' => $request->disclaimer ]); return response()->json(['message'=>"Success"],200); } public function getCompany(Request $request){ $data = []; $term = $request->search; $response = DB::table('companies') ->where(function($query) use ($term){ $query->orWhere('comp_name', 'like', '%'.$term.'%') ->orWhere('comp_code','like',''.$term.''); }) ->get(); foreach($response as $item){ $data['results'][] = [ 'id' => $item->id, 'text' => $item->comp_name . "( " .$item->comp_code .")", ]; }; return response()->json($data); } public function roles(){ $page_title = "User Management"; return view('admin.user_management.roles')->with(['page_title' => $page_title]); } public function fetchRoles(Request $request){ $array_data['search_keyword'] = $request->search['value']; if(empty($request->search_type)){ $array_data['search_type'] = ""; } else { $array_data['search_type'] = json_decode($request->search_type,true)[0]; } $array_data['sort'] = $request->order[0]['dir']; $array_data['order'] = $request->columns[$request->order[0]['column']]['data']; $array_data['offset'] = $request->start; $array_data['limit'] = $request->length; $array_data['offset_limit'] = " LIMIT {$array_data['offset']},{$array_data['limit']}"; $array_data['sort'] = " ORDER BY {$array_data['order']} {$array_data['sort']} "; $array_data['search'] = ""; if (!empty($array_data['search_keyword'])) { switch ($array_data['search_type']) { case "ID": $array_data['search'] = " AND id = {$array_data['search_keyword']} "; break; } } $array_data['where'] = ""; $data = $request->data; if(!empty($data['active'])){ $array_data['where'] .= " AND active = {$data['active']} "; } $results = $this->auth->getRoles($array_data); $result['data'] = array(); foreach($results as $row){ $result['data'][] = array( "id" => $row->id, "name" => $row->name, "title" => $row->title ); } $result['draw'] = $request->draw; $result['recordsTotal'] = $this->auth->getRolesCount($array_data)[0]->Count; $result['recordsFiltered'] = $this->auth->getRolesFilteredCount($array_data)[0]->FilteredCount; return response()->json($result); } public function addRole(){ $page_title = "Create Role"; return view('admin.user_management.add_role')->with(['page_title'=>$page_title]); } public function addNewRole(Request $request){ // dd($request->all()); $role = Bouncer::role()->firstOrCreate([ 'name' => Str::slug($request->name,'-'), 'title' => $request->title, // 'status' => $request->stat ]); if($role){ $selectedAbilities = $request->abilities; $abilities = []; foreach($selectedAbilities as $ability){ $abilities[] = $ability['nodeId']; } $role->allow($abilities); // if($request->stat == 1){ // $role->status = 1; // $role->save(); // } return response()->json(['message'=>"Success"],201); } } public function editRole($id){ $role = Bouncer::role()->where('id',$id)->firstOrFail(); $page_title = "Edit ".$role->title; return view('admin.user_management.edit_role')->with(['page_title'=>$page_title]); } public function fetchUsers(Request $request){ $array_data['search_keyword'] = $request->search['value']; if(empty($request->search_type)){ $array_data['search_type'] = ""; } else { $array_data['search_type'] = json_decode($request->search_type,true)[0]; } $array_data['sort'] = $request->order[0]['dir']; $array_data['order'] = $request->columns[$request->order[0]['column']]['data']; $array_data['offset'] = $request->start; $array_data['limit'] = $request->length; $array_data['offset_limit'] = " LIMIT {$array_data['offset']},{$array_data['limit']}"; $array_data['sort'] = " ORDER BY {$array_data['order']} {$array_data['sort']} "; $array_data['search'] = ""; if (!empty($array_data['search_keyword'])) { switch ($array_data['search_type']) { case "ID": $array_data['search'] = " AND id = {$array_data['search_keyword']} "; break; } } $array_data['where'] = ""; $data = $request->data; if(!empty($data['active'])){ $array_data['where'] .= " AND active = {$data['active']} "; } $results = $this->user->getUsers($array_data); $result['data'] = array(); foreach($results as $row){ $result['data'][] = array( "id" => $row->id, "name" => $row->f_name . " " . $row->l_name, ); } $result['draw'] = $request->draw; $result['recordsTotal'] = $this->user->getUsersCount($array_data)[0]->Count; $result['recordsFiltered'] = $this->user->getUsersFilteredCount($array_data)[0]->FilteredCount; return response()->json($result); } public function userIndex(){ if(Bouncer::can('update-user')){ $page_title = "User Access Management"; return view('admin.user_management.user_management')->with(['page_title' => $page_title]); } else { abort(403,'Unauthorized'); } } public function system_setup(){ return view('admin.user_management.system_setup')->with(['page_title'=>"System Setup"]); } public function email_response(){ return view('admin.user_management.email_responses')->with(['page_title'=>"Email Responses"]); } public function userEdit($id){ if(Bouncer::can('update-user')){ $name = User::where('id',$id)->first(); $page_title = $name->f_name . " " . $name->l_name; return view('admin.user_management.edit_user')->with(['page_title' => $page_title]); } else { abort(403,'Unauthorized'); } } public function getRole(){ $role = Roles::get(); // dd($role); } public function getAbilities($id){ $role = Bouncer::role()->where('id', $id)->firstOrFail(); $abilities = $role->getAbilities()->pluck('title'); $availableAbilities = Ability::whereNot('name','*')->get(); foreach($availableAbilities as $row){ $formattedAbility[] = [ 'id' => $row->id, 'text' => $row->title ]; } return response()->json(['abilities'=>$abilities,'availableAbilities'=>$formattedAbility]); } public function getAllAbilities(){ $abilities = Ability::get(); foreach($abilities as $item){ $formattedAbilities[] = [ 'id' => $item->id, 'text' => $item->title ]; } return response()->json(['abilities'=>$formattedAbilities]); } public function assignRoleToUser($id){ $usersCollection = []; $userWithRole = []; $role = Bouncer::role()->where('id', $id)->firstOrFail(); $title_page = "Assign ". $role->title; $usersWithRole = User::whereHas('roles', function ($query) use ($id) { $query->where('role_id', $id); })->get(); foreach($usersWithRole as $user){ $userWithRole[] = [ 'id' => $user->id, 'text'=> $user->f_name . " " . $user->l_name ]; } $users = User::select('id',DB::raw('concat(`f_name`," ",`l_name`) as name')) ->where('type',"!=","ratee")->get(); foreach($users as $user){ $usersCollection[] = [ 'id' => $user->id, 'text'=>$user->name ]; } return view('admin.user_management.assign_role')->with(['page_title'=>$title_page,'usersWithRole'=>$userWithRole,'users'=>$usersCollection]); } // public function updateUserAbilities(Request $request){ // $selectedAbilities = $request->abilities; // $user = User::find($request->id); // // $user->type = "admin"; // Bouncer::sync($user)->abilities([]); // foreach($selectedAbilities as $ability){ // Bouncer::allow($user)->to(strtolower(str_replace(' ','-', $ability['nodeText']))); // } // $user->save(); // return response()->json(['message'=>'success']); // } public function updateRoleAbilities(Request $request){ $abilities = $request->input('abilities'); if (!$abilities || !is_array($abilities) || empty($abilities)) { return response()->json(['message' => "Please select at least one ability"], 400); } $role = Bouncer::role()->where('id', $request->id)->first(); if (!$role) { return response()->json(['message' => "Role not found"], 404); } // Reset existing abilities // Bouncer::disallow($role)->everything(); $role->abilities()->detach(); // dd($role->getAbilities()); // Extract ability IDs $abilityIds = array_column($abilities, 'nodeId'); // Allow selected abilities $role->allow($abilityIds); return response()->json(['message' => 'Abilities updated successfully']); // if(!($request->abilities)){ // return response()->json(['message'=>"Please Select at least one ability"],403); // } // $role = Bouncer::role()->where('id',$request->id)->firstOrFail(); // if($role){ // $bouncer = Bouncer::disallow($role)->everything(); // } // $selectedAbilities = $request->abilities; // $abilities = []; // foreach($selectedAbilities as $ability){ // $abilities[] = $ability['nodeId']; // } // $role->allow($abilities); // return response()->json(['message'=>'success']); } public function updateUserRole(Request $request, $id){ $role = Roles::findOrFail($id); foreach($request->selectedUsers as $user){ $userEntity = User::findOrFail($user['nodeId']); $userEntity->roles()->detach(); // Detach existing roles $userEntity->roles()->attach($role); // Assign the new role to the user } return response()->json(['message'=>"Success"],200); } public function companies(Request $request){ $array_data['search_keyword'] = $request->search['value']; if(empty($request->search_type)){ $array_data['search_type'] = ""; } else { $array_data['search_type'] = json_decode($request->search_type,true)[0]; } // dd($array_data['search_type']); $array_data['sort'] = $request->order[0]['dir']; $array_data['order'] = $request->columns[$request->order[0]['column']]['data']; $array_data['offset'] = $request->start; $array_data['limit'] = $request->length; $array_data['offset_limit'] = " LIMIT {$array_data['offset']},{$array_data['limit']}"; $array_data['sort'] = " ORDER BY {$array_data['order']} {$array_data['sort']} "; $array_data['search'] = ""; // dd($request->search_type); if (!empty($array_data['search_keyword'])) { // $array_data['search_keyword'] = "1"; // $array_data['search'] = " AND ? "; // } else { switch ($array_data['search_type']) { // case "ID": // $array_data['search'] = " AND id = {$array_data['search_keyword']} "; // break; case "Code": $array_data['search'] = " AND comp_code LIKE '%{$array_data['search_keyword']}%' "; break; case "Company": $array_data['search'] = " AND comp_name LIKE '%{$array_data['search_keyword']}%' "; break; } } // dd($array_data['search']); $array_data['where'] = ""; $data = $request->data; if(!empty($data['active'])){ $array_data['where'] .= " AND active = {$data['active']} "; } $results = $this->auth->getCompanies($array_data); // dd($results); $result['data'] = array(); foreach($results as $row){ // dd($row); $result['data'][] = array( "id" => $row->id, "code" => $row->comp_code, "name" => $row->comp_name ); } // dd($system); $result['draw'] = $request->draw; $result['recordsTotal'] = $this->auth->getCompaniesCount($array_data)[0]->Count; $result['recordsFiltered'] = $this->auth->getCompaniesFilteredCount($array_data)[0]->FilteredCount; // dd($result); return response()->json($result); } public function dashBoard(){ $questions = $this->auth->getQuestions(); $templates = $this->auth->getTemplates(); $system = $this->auth->getSystems(); $qst = $this->auth->getQuestionnaires(); $devices = DB::table('device_access') ->first(); $rating = []; $res = []; $conditions = [ ['status',"=",1], ['active',"=",1] ]; $page_title = "Home"; // dd($topThreePerGroup); return view('index')->with(['questions'=>$questions,'templates'=>$templates,'systems'=>$system, 'qst'=>$qst, 'devices' => $devices, 'page_title' => $page_title]); } // public function default(){ // $averages = DB::table('answers') // ->select('tmpt_id','syst_id',DB::raw('AVG(JSON_EXTRACT(rating, "$[0]")) as average_rating')) // ->groupBy('syst_id','tmpt_id') // ->get(); // $data = []; // foreach($averages as $row){ // $templateTitle = Template::select('title')->where('id',$row->tmpt_id)->first(); // $systemTitle = System::select('system_name')->where('id',$row->syst_id)->first(); // $data['data'][] = [ // "template" => $templateTitle->title, // "system" => $systemTitle->system_name, // "average" => $row->average_rating // ]; // } // $groups = collect($data['data'])->groupBy('template'); // $topFivePerTemplate = []; // foreach ($groups as $template => $group) { // $topFive = $group->sortByDesc('average')->take(5)->shuffle()->toArray(); // $topFivePerTemplate[$template] = $topFive; // } // return response()->json($topFivePerTemplate); // } /** * 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) { // } /** * Display the specified resource. * * @param \App\Models\Auth $auth * @return \Illuminate\Http\Response */ public function show(Request $request) { // dd($request->all()); $start = null; $end = null; switch ($request->start_date) { case "weekly": $start = Carbon::now()->subWeek(1); $end = Carbon::now(); break; case "monthly": $start = Carbon::now()->subMonth(1); $end = Carbon::now(); break; case "yearly": $start = Carbon::now()->subYear(1); $end = Carbon::now(); break; default: $start = $request->start_date; $end = $request->end_date; break; } $id = $request->id; if(!($request->start_date) || !($request->end_date)){ // $start = $request->start_date; // $end = $request->end_date; // } else { $start = "1990-01-01"; $end = Carbon::now(); } // dd([$start,$end]); if(empty($id)){ $record = Template::inRandomOrder()->first(); $id = $record->id; } $averages = DB::table('answers') ->select('tmpt_id','syst_id',DB::raw('AVG(JSON_EXTRACT(rating, "$[0]")) as average_rating')) ->where('tmpt_id',"=",$id) ->whereBetween('created_at',[$start,$end]) ->groupBy('syst_id','tmpt_id') ->get(); $data = []; foreach($averages as $row){ $templateTitle = Template::select('title')->where('id',$row->tmpt_id)->first(); $systemTitle = System::select('system_name')->where('id',$row->syst_id)->first(); $data['data'][] = [ "template" => $templateTitle->title, "system" => $systemTitle->system_name, "average" => $row->average_rating ]; } $groups = collect($data['data'])->groupBy('template'); // dd($groups); // $topThreePerGroup = collect(); // foreach ($groups as $template => $group) { // $topThree = $group->sortByDesc('average')->take(5)->shuffle(); // $topThreePerGroup = $topThreePerGroup->merge($topThree); // } // $topThreePerGroup = $topThreePerGroup->toArray(); $topFivePerTemplate = []; foreach ($groups as $template => $group) { $topFive = $group->sortByDesc('average')->take(5)->shuffle()->toArray(); $topFivePerTemplate['result'] = $topFive; } $respondents = $this->getRespondents($id); $respondentsPerCompany = $this->getRespondentsPerCompany($id); // dd($respondentsPerCompany); return response()->json(['topFivePerTemplate' => $topFivePerTemplate, 'respondents' => $respondents, 'perCompany'=>$respondentsPerCompany]); } // public function passId($id){ // return $id; // } public function getRespondents($id){ $count = []; $data = DB::table('answers') ->select('syst_id', DB::raw('count(distinct user_id) as count')) ->where('tmpt_id',$id) ->groupBy('syst_id') ->get(); // dd($data->syst_id); foreach($data as $row){ $sys = System::select('system_name')->where('id',$row->syst_id)->first(); $count[] = [ 'system' => $sys->system_name, 'respondents' => $row->count ]; } return $count; } public function getRespondentsPerCompany($id){ $count = []; $data = DB::table('answers') ->select('companies.comp_code', DB::raw('count(distinct user_id) as count')) ->join('users','answers.user_id',"=",'users.id') ->join('companies','users.comp_id',"=",'companies.id') ->where('tmpt_id',$id) ->groupBy('companies.comp_code') ->get(); // dd($data); // return $data; foreach($data as $row){ $count[] = [ 'company' => $row->comp_code, 'respondents' => $row->count ]; } return $count; } /** * Show the form for editing the specified resource. * * @param \App\Models\Auth $auth * @return \Illuminate\Http\Response */ public function edit(Auth $auth) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\Auth $auth * @return \Illuminate\Http\Response */ public function update(Request $request, Auth $auth) { // } /** * Remove the specified resource from storage. * * @param \App\Models\Auth $auth * @return \Illuminate\Http\Response */ public function destroy(Auth $auth) { // } // public function login(Request $request){ // $request->validate([ // 'email' => 'required', // 'password' => 'required' // ]); // $credentials = $request->only('email','password'); // if(Auth::attempt($credentials)){ // return response()->json(["message"=>"success"],200); // } // return redirect('signup')->withSuccess('Data not valid'); // } public function login(Request $request){ $user = null; $request->validate([ 'email' => 'required', 'password' => 'required' ]); $url = 'https://autohub.ph/connect/api/v1/asa/api.php'; $parameters = array( 'key'=>"99797807845605376", 'username' => $request->email, 'password'=>$request->password, ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $op = curl_exec ($ch); $err = curl_error($ch); //if you need curl_close ($ch); $response = json_decode($op,true); // dd($response); if((!$response) || $response['status'] != 1){ $info = User::where('asa_id',"=",$request->email)->first(); if($info && password_verify($request->password,$info->password)){ Auth::login($info); $array_data = [ "id" => $info->id, "action" => "login", "message" => $info->id . " " . "has logged in." ]; $this->auditTrail($array_data); return response()->json(['message'=>"Success"]); } else { abort(419,"Invalid Credentials"); } } else { $user = User::where('asa_id',"=",$response['employee_id'])->first(); } if($user){ $user->update( [ 'f_name' => $response['u_fname'], 'l_name' => $response['u_lname'], 'email' => $response['email'], 'position' => $response['u_position'], 'password' => bcrypt($request->password) ] ); } else { $user = new User; $user->asa_id = $response['employee_id']; $user->f_name = $response['u_fname']; $user->l_name = $response['u_lname']; $user->email = $response['email']; $user->password = bcrypt($request->password); $user->type = "admin"; $user->save(); } $array_data = [ "id" => $user->id, "action" => "login", "message" => $user->id . " has logged in." ]; $this->auditTrail($array_data); Auth::login($user); return response()->json(["message"=>$user]); } public function register(Request $request){ $validator = Validator::make($request->all(),[ 'f_name' => ['required'], 'l_name' => ['required'], 'email' => ['required','email','unique:App\Models\User,email','ends_with:autohubgroup.com','regex:/^(?!test|t3st)[a-zA-Z0-9._-]+@/',], 'password' => 'required|confirmed|min:8', 'comp_id' => 'required' ],[ 'f_name.required' => "First Name is required", // 'f_name.regex' => "First Name is invalid", 'l_name.required' => "Last Name is required", // 'l_name.regex' => "Last Name is invalid" ]); if ($validator->passes()) { $user = new User(); $user->f_name = ucfirst(strtolower($request->f_name)); $user->l_name = ucfirst(strtolower($request->l_name)); $user->email = $request->email; $user->password = bcrypt($request->password); $user->type = "admin"; $user->comp_id = $request->comp_id; $user->save(); Auth::login($user); return response()->json(["message"=>"Success"],200); } return response()->json(["message"=>$validator->errors()],500); } public function importComp(){ $url = "https://autohub.ph/connect/api/v1/asa/api.php"; $params = [ 'key' => ' 99799116300681217', ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $op = curl_exec ($ch); $err = curl_error($ch); //if you need curl_close ($ch); $response = json_decode($op,true); $inserted = 0; $ignored = 0; foreach($response as $item){ $result = DB::table('companies')->insertOrIgnore([ 'id' => $item['comp_id'], 'comp_code' => $item['comp_code'], 'comp_name' => $item['comp_name'], 'created_at' => NOW(), 'active' => $item['comp_status'], 'status' => $item['comp_status'], ]); if($result){ $inserted++; }else{ $ignored++; } } if($inserted > 0){ return response()->json(['message' => $inserted.' rows inserted.']); }else{ return response()->json(['message' => 'Records up to date. '.$ignored.' rows ignored.']); } } public function customLogout(Request $request){ $user = Auth::user(); // dd($user); if($user){ Auth::logout($user); Session::invalidate(); Session::flush(); return redirect('/'); } } public function reportDashboard(){ return view('admin.reports.blank'); } public function qstDashboard(){ return view('admin.reports.qst_masterfile'); } public function qstnDashboard(){ return view('admin.reports.qstn_masterfile'); } public function avgperQstDashboard(){ return view('admin.reports.avg_per_qstn'); } public function qsttmpDashboard(){ return view('admin.reports.qstn_tmp_masterfile'); } public function sysDashboard(){ return view('admin.reports.sys_masterfile'); } public function tmpDashboard(){ return view('admin.reports.tmp_masterfile'); } public function tmpqstnDashboard(){ return view('admin.reports.tmpqstn_masterfile'); } public function rvwDashboard(){ return view('admin.reports.reviews'); } public function countSystem(){ return view('admin.reports.count_per_system'); } public function commentSummary(){ return view('admin.reports.comment_summary'); } public function qstReport(Request $request){ $array_data['type'] = $request->type; $array_data['search'] = ""; $array_data['where'] = ""; if(!empty($request->from_date) && !empty($request->to_date)){ $from = Carbon::parse($request->from_date); $to = Carbon::parse($request->to_date); $fromdate = $from->toDateString(); $todate = $to->toDateString(); $array_data['where'] .= " AND DATE(`questionnaires`.`created_at`) BETWEEN '$fromdate' AND '$todate' "; } $filter_data = [ $request->from_date ?? "", $request->to_date ?? "", ]; $results = $this->qst->reports($array_data); $response = $this->qst->pdf($results,'view',$filter_data); $pdf = App::make('dompdf.wrapper'); $pdf->loadView('layouts.reports.questionnaire',$response)->setPaper('long','landscape'); switch($array_data['type']){ case('view'): return $pdf->stream(); break; case('pdf'): return $pdf->download("SurveyForm_Masterfile"."-".date('Y-m-d').'.pdf'); break; case('csv'): $this->qst->csv($results); break; } } public function qstnReport(Request $request){ $array_data['type'] = $request->type; $array_data['search'] = ""; $array_data['where'] = ""; if(!empty($request->from_date) && !empty($request->to_date)){ $from = Carbon::parse($request->from_date); $to = Carbon::parse($request->to_date); $fromdate = $from->toDateString(); $todate = $to->toDateString(); $array_data['where'] .= " AND DATE(`created_at`) BETWEEN '$fromdate' AND '$todate' "; } $results = $this->quest->reports($array_data); $response = $this->quest->pdf($results,'view'); $pdf = App::make('dompdf.wrapper'); $pdf->loadView('layouts.reports.questions',$response); switch($array_data['type']){ case('view'): return $pdf->stream(); break; case('pdf'): return $pdf->download("Questions_Masterfile"."-". date('Y-m-d').'.pdf'); break; case('csv'): $this->quest->csv($results); break; } } public function avgPerQuestion(Request $request){ $array_data['type'] = $request->type; $array_data['search'] = ""; $array_data['where'] = ""; // if(empty($request->qst_id)){ // return response()->json(['message'=>'No Questionnaire Chosen!'],403); // } if(!empty($request->from_date) && !empty($request->to_date)){ $from = Carbon::parse($request->from_date); $to = Carbon::parse($request->to_date); $fromdate = $from->toDateString(); $todate = $to->toDateString(); $array_data['where'] .= " AND DATE(`answers`.`created_at`) BETWEEN '$fromdate' AND '$todate' "; } $data = $request->qst_id; // dd($data); if(!empty($data)){ $array_data['where'] .= " AND `answers`.`qstnn_id` = {$data}"; } if(!empty($request->comp_id)){ $array_data['where'] .= " AND `users`.`comp_id` = {$request->comp_id}"; } $comp = DB::table('companies')->where('id',$request->comp_id)->first(); $results = $this->ans->reports($array_data); $result = []; foreach($results as $row){ $qst_ids = json_decode($row->qst_id, true); $question_titles = []; $question_ids = []; foreach($qst_ids as $qst_id){ $question = Questions::select('id','title')->where('id',$qst_id)->first(); $question_ids[] = $question->id; $question_titles[] = $question->title; } $ratings = json_decode($row->rating); $paired_items = []; for ($i=0; $i < count($question_titles) ; $i++) { $paired_items[] = [ 'id' => $question_ids[$i], 'questions' => $question_titles[$i], 'rating' => $ratings[$i], ]; } // $paired_items[] = [ // array_sum($ratings)/count($ratings) // ]; // $result[] = [ // 'user_name' => $row->user_name, // 'template_title' => $row->template_title, // 'system_name' => $row->system_name, // // 'questions' => $question_titles, // 'ratings' => $paired_items, // ]; $paired_items_copy = array_map(function ($item) { return array_merge([], $item); }, $paired_items); $result[] = [ 'user_name' => $row->user_name, 'template_title' => $row->template_title, 'system_name' => $row->system_name, 'ratings' => $paired_items_copy, // Use the copy, not the original array ]; } // Calculate the average rating for each question $questionAverages = []; foreach ($result as $item) { $ratings = $item['ratings']; foreach ($ratings as $rating) { $questionId = $rating['id']; $ratingValue = $rating['rating']; if (!isset($questionAverages[$questionId])) { $questionAverages[$questionId] = [ 'id' => $rating['id'], 'question' => $rating['questions'], 'sum' => 0, 'count' => 0, 'average' => 0, ]; } $questionAverages[$questionId]['sum'] += $ratingValue; $questionAverages[$questionId]['count']++; } } // Calculate the average for each question foreach ($questionAverages as &$average) { $average['average'] = $average['count'] > 0 ? $average['sum'] / $average['count'] : 0; } // dd($questionAverages); // dd($result); $response = $this->ans->avgPerQstpdf($questionAverages,$result,$comp); $pdf = App::make('dompdf.wrapper'); $pdf->loadView('layouts.reports.average_per_question',$response); switch($array_data['type']){ case('view'): return $pdf->stream(); break; case('pdf'): return $pdf->download("Average-Per-Question-Masterfile".date('Y-m-d').'.pdf'); break; case('csv'): $this->ans->avgPerQstcsv($questionAverages,$result,$comp); break; } } public function qstntmpReport(Request $request){ $array_data['type'] = $request->type; $array_data['search'] = ""; $array_data['where'] = ""; if(!empty($request->from_date) && !empty($request->to_date)){ $from = Carbon::parse($request->from_date); $to = Carbon::parse($request->to_date); $fromdate = $from->toDateString(); $todate = $to->toDateString(); $array_data['where'] .= " AND DATE(`created_at`) BETWEEN '$fromdate' AND '$todate' "; } $results = $this->quest->reports($array_data); // Loop through each question // foreach($results as $question) { // // Retrieve the template titles that are related to this question // $pattern = '/(?<=\")(\d+)(?=\")/'; // // Get the template titles for this question // $templateTitles = Template::select('title') // ->whereRaw('JSON_CONTAINS(q_id, \'["' . $question->id . '"]\')') // ->where('status',1) // ->pluck('title') // ->toArray(); // // Add the template titles to the question object // $question->templateTitles = $templateTitles; // } // dd($results); $response = $this->quest->pdf2($results,'view'); $pdf = App::make('dompdf.wrapper'); $pdf->loadView('layouts.reports.questions_template',$response); switch($array_data['type']){ case('view'): return $pdf->stream(); break; case('pdf'): return $pdf->download("Questions_per_Template_Masterfile"."-". date('Y-m-d').'.pdf'); break; case('csv'): $this->quest->csv2($results); break; } } public function sysReport(Request $request){ $array_data['type'] = $request->type; $array_data['search'] = ""; $array_data['where'] = ""; if(!empty($request->from_date) && !empty($request->to_date)){ $from = Carbon::parse($request->from_date); $to = Carbon::parse($request->to_date); $fromdate = $from->toDateString(); $todate = $to->toDateString(); $array_data['where'] .= " AND DATE(`created_at`) BETWEEN '$fromdate' AND '$todate' "; } $results = $this->sys->reports($array_data); $response = $this->sys->pdf($results); $pdf = App::make('dompdf.wrapper'); $pdf->loadView('layouts.reports.systems',$response); switch($array_data['type']){ case('view'): return $pdf->stream(); break; case('pdf'): return $pdf->download("Systems_Masterfile"."-". date('Y-m-d').'.pdf'); break; case('csv'): $this->sys->csv($results); break; } } public function tmpReport(Request $request){ // dd($request->all()); $array_data['type'] = $request->type; $array_data['search'] = ""; $array_data['where'] = ""; if(!empty($request->from_date) && !empty($request->to_date)){ $from = Carbon::parse($request->from_date); $to = Carbon::parse($request->to_date); $fromdate = $from->toDateString(); $todate = $to->toDateString(); $array_data['where'] .= " AND DATE(`created_at`) BETWEEN '$fromdate' AND '$todate' "; } $results = $this->tmp->reports($array_data); $response = $this->tmp->pdf($results); $pdf = App::make('dompdf.wrapper'); $pdf->loadView('layouts.reports.templates',$response); switch($array_data['type']){ case('view'): return $pdf->stream(); break; case('pdf'): return $pdf->download("Templates_Masterfile." . date('Y-m-d H-i-sA').'.pdf'); break; case('csv'): $this->tmp->csv($results); break; } } public function tmpqstn(Request $request){ $array_data['type'] = $request->type; $array_data['search'] = ""; $array_data['where'] = ""; if(!empty($request->from_date) && !empty($request->to_date)){ $from = Carbon::parse($request->from_date); $to = Carbon::parse($request->to_date); $fromdate = $from->toDateString(); $todate = $to->toDateString(); $array_data['where'] .= " AND DATE(`created_at`) BETWEEN '$fromdate' AND '$todate' "; } $array_data['where'] .= "AND `id` = '{$request->tmp_id}'"; $results = $this->tmp->reportsTmpQstn($array_data); $q_id = json_decode($results[0]->q_id); foreach($q_id as $item){ $questions_title[] = Questions::select('title','created_at')->where('id',$item)->first() ->toArray(); } $results[0]->questions = $questions_title; $response = $this->tmp->pdfTmpQstn($results); $pdf = App::make('dompdf.wrapper'); $pdf->loadView('layouts.reports.templates_questions',$response) ->setPaper('legal','landscape'); switch($array_data['type']){ case('view'): return $pdf->stream(); break; case('pdf'): return $pdf->download("Templates_Masterfile." . date('Y-m-d H-i-sA').'.pdf'); break; case('csv'): $this->tmp->csvTmpQstn($results); break; } } public function rvwReport(Request $request){ $array_data['type'] = $request->type; $array_data['search'] = ""; $array_data['where'] = ""; // if(empty($request->qst_id)){ // return response()->json(['message'=>'No Questionnaire Chosen!'],403); // } if(!empty($request->from_date) && !empty($request->to_date)){ $from = Carbon::parse($request->from_date); $to = Carbon::parse($request->to_date); $fromdate = $from->toDateString(); $todate = $to->toDateString(); $array_data['where'] .= " AND DATE(`answers`.`created_at`) BETWEEN '$fromdate' AND '$todate' "; } $data = $request->qst_id; // dd($data); if(!empty($data)){ $array_data['where'] .= " AND `answers`.`qstnn_id` = {$data}"; } if(!empty($request->comp_id)){ $array_data['where'] .= " AND `users`.`comp_id` = {$request->comp_id}"; } $comp = DB::table('companies')->where('id',$request->comp_id)->first(); $results = $this->ans->reports($array_data); $result = []; foreach($results as $row){ $qst_ids = json_decode($row->qst_id, true); $question_titles = []; $question_ids = []; foreach($qst_ids as $qst_id){ $question = Questions::select('id','title')->where('id',$qst_id)->first(); $question_ids[] = $question->id; $question_titles[] = $question->title; } $ratings = json_decode($row->rating); $paired_items = []; for ($i=0; $i < count($question_titles) ; $i++) { $paired_items[] = [ 'id' => $question_ids[$i], 'questions' => $question_titles[$i], 'rating' => $ratings[$i], ]; } // $paired_items[] = [ // array_sum($ratings)/count($ratings) // ]; $result[] = [ 'user_name' => $row->user_name, 'template_title' => $row->template_title, 'system_name' => $row->system_name, // 'questions' => $question_titles, 'ratings' => $paired_items, ]; } $response = $this->ans->pdf($result,'view',$comp); $pdf = App::make('dompdf.wrapper'); // $optionsArr = [ // 'isHtml5ParserEnabled' => true, // 'isRemoteEnabled' => true, // 'defaultPaperSize' => 'letter', // // add more options here as needed // ]; // $pdf->setOptions($optionsArr); $pdf->loadView('layouts.reports.reviews ',$response); switch($array_data['type']){ case('view'): return $pdf->stream(); break; case('pdf'): return $pdf->download(($result[0]->system_name ?? ' ') . " Respondents_Count-".date('Y-m-d').'.pdf'); break; case('csv'): $this->ans->csv($result); break; } } public function cprReport(Request $request){ $array_data['type'] = $request->type; $array_data['search'] = ""; $array_data['where'] = ""; $array_data['where2'] = ""; if(!empty($request->from_date) && !empty($request->to_date)){ $from = Carbon::parse($request->from_date); $to = Carbon::parse($request->to_date); $fromdate = $from->toDateString(); $todate = $to->toDateString(); $array_data['where'] .= " AND DATE(`ans`.`created_at`) BETWEEN '$fromdate' AND '$todate' "; } $data = $request->qstnn_id; if(!empty($data)){ $array_data['where'] .= " AND `ans`.`qstnn_id` = {$data}"; } $results = $this->ans->reports2($array_data); $id = $array_data['where2'] .= " AND `qstnn`.`id` = {$data}"; $titles = $this->ans->getTitles($id); // dd($titles); // dd($results); $newResults = array(); foreach($results as $row){ $ave = collect(json_decode($row->average)); $average = $ave->avg(); $newResults[] = [ 'user_name' => $row->user_name, 'template_title' => $row->title, 'system_name' => $row->system_name, 'rating' => round($average) ]; } $response = $this->ans->pdf2($newResults,$titles); $pdf = App::make('dompdf.wrapper'); $pdf->loadView('layouts.reports.counts',$response); switch($array_data['type']){ case('view'): return $pdf->stream(); break; case('pdf'): return $pdf->download(($results[0]->system_name ?? ' ') . " Respondents_Count-".date('Y-m-d').'.pdf'); break; case('csv'): $this->ans->csv2($results); break; } } public function commentsReport(Request $request){ // dd($request->all()); $array_data['type'] = $request->type; $array_data['search'] = ""; $array_data['where'] = ""; $array_data['where2'] = ""; if(!empty($request->from_date) && !empty($request->to_date)){ $from = Carbon::parse($request->from_date); $to = Carbon::parse($request->to_date); $fromdate = $from->toDateString(); $todate = $to->toDateString(); $array_data['where'] .= " AND DATE(`ans`.`created_at`) BETWEEN '$fromdate' AND '$todate' "; } $data = $request->qstnn_id; if(!empty($data)){ $array_data['where'] .= " AND ans.qstnn_id = {$data}"; } $results = $this->ans->reports3($array_data); $id = $array_data['where2'] .= " AND `qstnn`.`id` = {$data}"; $titles = $this->ans->getTitles($id); $pdfResult = []; foreach($results as $row){ $pdfResult[] = [ 'user_name' => $row->user_name, 'template_title' => $row->title, 'system_name' => $row->system_name, 'comment' => $row->comment ]; } $response = $this->ans->pdf3($pdfResult, $titles); $pdf = App::make('dompdf.wrapper'); $pdf->loadView('layouts.reports.comment_summary',$response); switch($array_data['type']){ case('view'): return $pdf->stream(); break; case('pdf'): return $pdf->download($titles[0]->system_name . "Comment_Summary-".date('Y-m-d').'.pdf'); break; case('csv'): $this->ans->csv3($results, $titles); break; } } public function fetchQst(){ $qst = Questionnaire::where([['status',"=",1],['active',"=",1]])->get(); $data['results'] = []; foreach($qst as $row){ $template_name = Template::select('title')->where('id',$row->t_id)->first(); $system_name = System::select('system_name')->where('id',$row->s_id)->first(); $data['results'][] = [ "id" => $row->id, "text" => $template_name->title. " " . "(". $system_name->system_name .")" ]; } return response()->json($data); } public function fetchTMP(){ $template = Template::where([['status',"=",1],['active',"=",1]])->get(); // dd($template); $data['results'] = []; foreach($template as $row){ $data['results'][] = [ "id" => $row->id, "text" => $row->title ]; } return response()->json($data); } public function forget(){ return view('auth.forget'); } public function forgetPassword(Request $request){ if($request->validate([ 'email' => ['required','email','ends_with:autohubgroup.com'], ])){ $message = $this->getEmail($request->email); if($message == "success"){ return response()->json(['message' => "we have sent a reset link on your email."],200); } else { return response()->json(['message' => $message],403); } } else { // return response()->json(['error' => $errors], 422); } } public function getEmail($email){ $user = User::where([['email',"=",$email]])->first(); $token = uniqid() . Str::random(8); $link = url('/')."/password-forget/".$email."/".$token; if(!empty($user)){ DB::table('forget_password')->insert([ "email" => $email, "token" => $token, "link" => $link, ]); $data = ['link' => $link]; $to = $email; $subject = "Reset Password"; $headers = "From: Autohub Group of Companies Inc.\r\n"; $headers .= "Content-Type: text/html\r\n"; $message = view('mail.reset-password',$data)->render(); mail($to, $subject, $message, $headers); // Mail::send('mail.reset-password',$data, function($message) use ($email){ // $message->to($email,$email)->subject('Reset Password'); // $message->from('ahub56702@gmail.com','AutoHub Group of Companies, Inc.'); // }); return "success"; } else { return "no user found"; } } public function renderResetPassword(){ $url = url()->full(); $token = explode('/',$url); // dd($token[5]); $check = DB::table('forget_password')->where([['link','like','%'.$url.'%'],['token',$token[5]]])->first(); // dd($check); if(empty($check->token)){ abort(419); } else { $id = User::select('id')->where('email','like','%'.$check->email.'%')->first(); return view('auth.reset-password')->with(['id' => $id]); } } public function resetPassword(Request $request){ $url = $request->url; $token = explode('/',$url); // dd($token[5]); if($request->validate([ 'password' => 'required|confirmed', ])){ User::where('id',$request->id) ->update([ 'password' => bcrypt($request->password) ]); DB::table('forget_password')->where([['link','like','%'.$url.'%'],['token',$token[5]]]) ->update(['token'=>null,'deleted_at' => now()]); return response()->json(['message'=>'Success'],200); } else { return response()->json(['message'=>'Error'],403); } } public function emails(Request $request){ $array_data['search_keyword'] = $request->search['value']; if(empty($request->search_type)){ $array_data['search_type'] = ""; } else { $array_data['search_type'] = json_decode($request->search_type,true)[0]; } $array_data['sort'] = $request->order[0]['dir']; $array_data['order'] = $request->columns[$request->order[0]['column']]['data']; $array_data['offset'] = $request->start; $array_data['limit'] = $request->length; $array_data['offset_limit'] = " LIMIT {$array_data['offset']},{$array_data['limit']}"; $array_data['sort'] = " ORDER BY {$array_data['order']} {$array_data['sort']} "; $array_data['search'] = ""; $array_data['where'] = ""; $data = $request->data; if(($data['status']) !== "NULL"){ $array_data['where'] .= " AND `email_responses`.`status` = {$data['status']} "; } $results = $this->auth->getEmails($array_data); $result['data'] = array(); foreach($results as $row){ $result['data'][] = array( "id" => $row->id, "user_name" => $row->user_name, "email" => $row->email, "created_at" => $row->created_at, "status" => $row->status ); } $result['draw'] = $request->draw; $result['recordsTotal'] = $this->auth->getEmailsCount($array_data)[0]->Count; $result['recordsFiltered'] = $this->auth->getEmailsFilteredCount($array_data)[0]->FilteredCount; return response()->json($result); } public function auditTrail($array_data){ $type = $array_data['id']; $action = $array_data['action']; $message = $array_data['message']; $result = DB::table('audit_trail') ->insert([ 'usr' => $type, 'action' => $message ]); } public function templateSelect2fetchAll(){ $template = DB::table('templates') ->select('id','title')->get(); $data['results'] = []; foreach($template as $row){ $data['results'][] = [ "id" => $row->id, "text" => $row->title ]; } return response()->json($data); } }PK-ZAɧ(Http/Controllers/QuestionsController.phpnu[question = new Questions(); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { if(Bouncer::can('view-question')){ $page_title = "Questions"; return view('admin.questions.questions')->with(['page_title' => $page_title]); } else { abort(403,'Unauthorized'); } } public function getQs($val){ return Questions::select('title')->where('id',$val)->get(); } public function fetchall(Request $request){ $array_data['search_keyword'] = $request->search['value']; if(empty($request->search_type)){ $array_data['search_type'] = ""; } else { $array_data['search_type'] = json_decode($request->search_type,true)[0]; } $array_data['sort'] = $request->order[0]['dir']; $array_data['order'] = $request->columns[$request->order[0]['column']]['data']; $array_data['offset'] = $request->start; $array_data['limit'] = $request->length; $array_data['offset_limit'] = " LIMIT {$array_data['offset']},{$array_data['limit']}"; $array_data['sort'] = " ORDER BY {$array_data['order']} {$array_data['sort']} "; $array_data['search'] = ""; if (!empty($array_data['search_keyword'])) { switch ($array_data['search_type']) { // case "ID": // $array_data['search'] = " AND id = {$array_data['search_keyword']} "; // break; case "Question": $array_data['search'] = " AND title LIKE '%{$array_data['search_keyword']}%' "; break; } } $array_data['where'] = ""; $data = $request->data; if(!empty($data['active'])){ $array_data['where'] .= " AND active = {$data['active']} "; } $results = $this->question->getQuestions($array_data); $result['data'] = array(); foreach($results as $row){ $result['data'][] = array( "id" => $row->id, "title" => $row->title ); } $result['draw'] = $request->draw; $result['recordsTotal'] = $this->question->getQuestionsCount($array_data)[0]->Count; $result['recordsFiltered'] = $this->question->getQuestionsFilteredCount($array_data)[0]->FilteredCount; return response()->json($result); } /** * 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) { // dd($request->all()); $request->validate([ 'title' => 'required' ],[ 'title.required'=>"Please provide a question title" ]); $result = $this->question; $result->title = $request->title; $result->active = 1; $result->status = 1; $result->save(); $array_data = [ "id" => Auth::user()->id, "action" => "create", "message" => Auth::user()->id . " has created a question." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success","result"=>$result],200); } /** * Display the specified resource. * * @param \App\Models\Questions $questions * @return \Illuminate\Http\Response */ public function show(Questions $questions) { } /** * Show the form for editing the specified resource. * * @param \App\Models\Questions $questions * @return \Illuminate\Http\Response */ public function edit(Request $request) { $result = Questions::findOrFail($request->id); return response()->json($result); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\Questions $questions * @return \Illuminate\Http\Response */ public function update(Request $request) { $result = Questions::where('id',$request->id) ->update([ 'title' => $request->title ]); $array_data = [ "id" => Auth::user()->id, "action" => "updated", "message" => Auth::user()->id . " has updated a question." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success", "result"=>$result]); } /** * Remove the specified resource from storage. * * @param \App\Models\Questions $questions * @return \Illuminate\Http\Response */ public function destroy(Request $request) { $res = Template::where('q_id', 'like', '%"'.$request->id.'"%')->count(); if($res > 0){ return response()->json(['message'=>"This question is already in use. Deletion is not possible"], 400); } else { $result = Questions::where('id',$request->id) ->update([ 'active' => null, 'status' => null ]); // foreach($res as $row){ // $data = json_decode($row->q_id); // $index = array_search($result, $data); // if($index !== false){ // array_splice($data, $index, 1); // $row->q_id = json_encode($data); // $row->save(); // } // } $array_data = [ "id" => Auth::user()->id, "action" => "destroy", "message" => Auth::user()->id . " has deleted a question." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success", "result"=>$result]); } } }PK-ZGcc%Http/Controllers/SystemController.phpnu[system = new System(); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { if(Bouncer::can('view-system')){ $page_title = "Systems"; return view('admin.systems.system')->with(['page_title' => $page_title]); } else { abort(403,'Unauthorized'); } } public function fetchall(Request $request){ $array_data['search_keyword'] = $request->search['value']; if(empty($request->search_type)){ $array_data['search_type'] = ""; } else { $array_data['search_type'] = json_decode($request->search_type,true)[0]; } // dd($array_data['search_type']); $array_data['sort'] = $request->order[0]['dir']; $array_data['order'] = $request->columns[$request->order[0]['column']]['data']; $array_data['offset'] = $request->start; $array_data['limit'] = $request->length; $array_data['offset_limit'] = " LIMIT {$array_data['offset']},{$array_data['limit']}"; $array_data['sort'] = " ORDER BY {$array_data['order']} {$array_data['sort']} "; $array_data['search'] = ""; // dd($request->search_type); if (!empty($array_data['search_keyword'])) { // $array_data['search_keyword'] = "1"; // $array_data['search'] = " AND ? "; // } else { switch ($array_data['search_type']) { case "ID": $array_data['search'] = " AND id = {$array_data['search_keyword']} "; break; case "System Name": $array_data['search'] = " AND system_name LIKE '%{$array_data['search_keyword']}%' "; break; } } // dd($array_data['search']); $array_data['where'] = ""; $data = $request->data; if(!empty($data['active'])){ $array_data['where'] .= " AND active = {$data['active']} "; } $results = $this->system->getSystems($array_data); // dd($results); $result['data'] = array(); foreach($results as $row){ // dd($row); $result['data'][] = array( "id" => $row->id, "system_name" => $row->system_name ); } // dd($system); $result['draw'] = $request->draw; $result['recordsTotal'] = $this->system->getSystemsCount($array_data)[0]->Count; $result['recordsFiltered'] = $this->system->getSystemsFilteredCount($array_data)[0]->FilteredCount; // dd($result); return response()->json($result); } public function select2fetchAll(){ $system = System::select('id','system_name')->get(); $data['results'] = []; foreach($system as $row){ $data['results'][] = [ "id" => $row->id, "text" => $row->system_name ]; } return response()->json($data); } /** * 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) { $request->validate([ 'name' => 'required' ],[ 'name.required' => "Please provide a System Name" ]); $result = $this->system; $result->system_name = $request->name; $result->active = 1; $result->status = 1; $result->save(); $array_data = [ "id" => Auth::user()->id, "action" => "create", "message" => Auth::user()->id . " has created a system." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success","result"=>$result],200); } /** * Display the specified resource. * * @param \App\Models\System $system * @return \Illuminate\Http\Response */ public function show(System $system) { // } /** * Show the form for editing the specified resource. * * @param \App\Models\System $system * @return \Illuminate\Http\Response */ public function edit(Request $request) { $result = System::findOrFail($request->id); return response()->json($result); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\System $system * @return \Illuminate\Http\Response */ public function update(Request $request) { $result = System::where('id',$request->id) ->update([ 'system_name' => $request->name ]); $array_data = [ "id" => Auth::user()->id, "action" => "update", "message" => Auth::user()->id . " has updated a system." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success", "result"=>$result]); } /** * Remove the specified resource from storage. * * @param \App\Models\System $system * @return \Illuminate\Http\Response */ public function destroy(Request $request) { $systemInTemplate = Questionnaire::where('s_id',$request->id)->count(); if($systemInTemplate > 0){ return response()->json(['message'=>"The system is already in use. Deletion is not possible"], 400); } else { $result = System::where('id',$request->id) ->update([ 'active' => null, 'status' => null ]); $array_data = [ "id" => Auth::user()->id, "action" => "destroy", "message" => Auth::user()->id . " has deleted a system." ]; $result = (new AuthController)->auditTrail($array_data); return response()->json(["message"=>"Success", "result"=>$result]); } } } PK-Z mExceptions/Handler.phpnu[, \Psr\Log\LogLevel::*> */ protected $levels = [ // ]; /** * A list of the exception types that are not reported. * * @var array> */ protected $dontReport = [ // ]; /** * A list of the inputs that are never flashed to the session on validation exceptions. * * @var array */ protected $dontFlash = [ 'current_password', 'password', 'password_confirmation', ]; /** * Register the exception handling callbacks for the application. * * @return void */ public function register() { $this->reportable(function (Throwable $e) { // }); } } PK-Z=Y Models/System.phpnu[getSystemQuery(), $fields, $array_data['search'], $array_data['where'], $array_data['sort'], $array_data['offset_limit'] ); return DB::select($query); } public function getSystemsCount($array_data){ $fields = " COUNT(1) as Count "; $query = sprintf( $this->getSystemQuery(), $fields, '', $array_data['where'], '', '' ); return DB::select($query); } public function getSystemsFilteredCount($array_data){ $fields = " COUNT(1) as FilteredCount "; $query = sprintf( $this->getSystemQuery(), $fields, $array_data['search'], $array_data['where'], '', '' ); return DB::select($query); } public function getSystemsReportQuery(){ return "SELECT %s FROM systems WHERE 1 AND `status` = 1 AND active = 1 %s "; } public function reports($array_data){ $fields = " system_name, DATE_FORMAT(`created_at`,'%M %e, %Y') as created_at "; $query = sprintf( $this->getSystemsReportQuery(), $fields, $array_data['where'], ); // dd($query); return DB::select($query); } public function pdf($results){ $data = []; $grpData = new \stdClass(); $grpData->list = $results; $grpData->total = sizeOf($results); array_push($data, $grpData); $report_title = "Systems Masterfile"; $reportData = [ 'data' => $data, 'webpage_title' => "Systems Report", 'report_title' => $report_title, 'table_headers' => ['No.','System Name', 'Date Created'], 'table_body' => ['system_name','created_at'] ]; return $reportData; } public function csv($results){ // dd($results); $systems = []; $systems[] = ['No.','System Name', 'Date Created']; $inc = 0; foreach($results as $row){ $systems[] = [ $inc+=1, $row->system_name, $row->created_at ]; } $filename = "Systems_Masterfile"."-". date('Y-m-d').'.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="'.$filename.'"'); $f = fopen('php://output', 'wb'); if ($f === false) { die('Error opening the file ' .$filename); } if(empty($systems[1])){ $arr = [ "No data to show" ]; fputcsv($f, $arr); } else { foreach ($systems as $row) { fputcsv($f, $row, ','); } } fclose($f); } } PK-Z;)Models/Questionnaire.phpnu[getQuestionnaireQuery(), $fields, $array_data['search'], $array_data['where'], $array_data['sort'], $array_data['offset_limit'] ); // dd($query); return DB::select($query); } public function getQuestionnairesCount($array_data){ // $fields = " tmp.id "; $fields = " COUNT(1) as Count "; $query = sprintf( $this->getQuestionnaireQuery(), $fields, '', $array_data['where'], '', '' ); //dd($query); // return DB::select("SELECT COUNT(1) as Count FROM (".$query.") foo"); return DB::select($query); } public function getQuestionnairesFilteredCount($array_data){ // $fields = " tmp.id "; $fields = " COUNT(1) as FilteredCount "; $query = sprintf( $this->getQuestionnaireQuery(), $fields, $array_data['search'], $array_data['where'], '', '' ); return DB::select($query); } public function getQuestionnairesReportQuery(){ return "SELECT %s FROM questionnaires INNER JOIN templates ON questionnaires.t_id = templates.id INNER JOIN systems ON questionnaires.s_id = systems.id INNER JOIN links ON templates.id = links.tmp_id AND systems.id = links.sys_id WHERE 1 AND `questionnaires`.`status` = 1 AND questionnaires.active = 1 %s "; } public function reports($array_data){ $fields = " CONCAT(templates.title,' (',JSON_LENGTH(templates.q_id),' question/s)') as title, systems.system_name,questionnaires.*,links.link "; $query = sprintf( $this->getQuestionnairesReportQuery(), $fields, $array_data['where'], ); // dd($query); return DB::select($query); } public function pdf($results, $type, $filter_data){ $data = []; $grpData = new \stdClass(); $grpData->list = $results; $grpData->total = sizeOf($results); array_push($data, $grpData); $report_title = "Survey Form Masterfile"; $reportData = [ 'data' => $data, 'date_from' => $filter_data[0], 'date_to' => $filter_data[1], 'webpage_title' => "Survey Form Report", 'report_title' => $report_title, 'table_headers' => ['No.','Template','System','Date Created','Link','Instruction'], 'table_body' => ['title','system_name','created_at','link','instruction'] ]; return $reportData; } public function csv($results){ $questionnaire = []; $questionnaire[] = ['No.','Template','System','Date Created','Link','Instruction']; $inc = 0; foreach($results as $row){ $questionnaire[] = [ $inc+=1, $row->title, $row->system_name, $row->created_at, $row->link, $row->instruction ]; } $filename = "SurveyForm_Masterfile"."-".date('Y-m-d').'.csv'; // $filename = "Questions_Masterfile"."-". date('Y-m-d').'.csv'; // dd($questions); header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="'.$filename.'"'); $f = fopen('php://output', 'wb'); if ($f === false) { die('Error opening the file ' .$filename); } if(empty($questionnaire[1])){ $arr = [ "No data to show" ]; fputcsv($f,$arr); } else { foreach($questionnaire as $row){ fputcsv($f, $row, ','); } } fclose($f); } } PK-Z>X=/7/7Models/Answer.phpnu[getQuestionnairesReportQuery(), $fields, $array_data['where'] ); // dd($query); return DB::select($query); } public function countsQuery(){ return "SELECT %s FROM answers `ans` INNER JOIN `systems` `s` on `s`.`id` = `ans`.`syst_id` INNER JOIN `templates` `t` on `t`.`id` = `ans`.`tmpt_id` INNER JOIN `users` `u` on `u`.`id` = `ans`.`user_id` WHERE 1 %s -- GROUP BY qstnn_id, syst_id, tmpt_id, user_name "; } public function reports2($array_data){ // dd($array_data); // $fields = " qstnn_id, syst_id, tmpt_id, CONCAT(users.f_name,' ',users.l_name) as user_name, systems.system_name, templates.title, AVG(SUBSTRING(answers.rating, 2, LENGTH(answers.rating)-2)) as average"; $fields = " `t`.`title`, `s`.`system_name`,CONCAT(`u`.`f_name`,' ',`u`.`l_name`) as `user_name`, `ans`.`rating` as `average`, `ans`.`created_at` "; $query = sprintf( $this->countsQuery(), $fields, $array_data['where'] ); // dd($query); return DB::select($query); } public function commentsQuery(){ return "SELECT %s FROM answers `ans` INNER JOIN `systems` `s` on `s`.`id` = `ans`.`syst_id` INNER JOIN `templates` `t` on `t`.`id` = `ans`.`tmpt_id` INNER JOIN `users` `u` on `u`.`id` = `ans`.`user_id` WHERE 1 %s "; } public function reports3($array_data){ // dd("dito"); $fields = " `t`.`title`, `s`.`system_name`, CONCAT(`u`.`f_name`,' ',`u`.`l_name`) as `user_name`, `ans`.`comment`, `ans`.`created_at` "; $query = sprintf( $this->commentsQuery(), $fields, $array_data['where'] ); return DB::select($query); } public function pdf($results,$type,$comp){ $data = []; $grpData = new \stdClass(); $grpData->list = $results; $grpData->total = sizeOf($results); array_push($data,$grpData); // dd($results[0]['template_title']); $report_title = "Rating Summary"; // ,'Template','System' // ,'template_title','system_name' $reportData = [ 'data' => $data, 'webpage_title' => "Reviews Report", 'company' => $comp->comp_name ?? "", 'template_name' => $results[0]['template_title'] ?? "", 'system_name' => $results[0]['system_name'] ?? "", 'report_title' => $report_title, 'table_headers' => ['No.','User','Response'], 'table_body' => ['user_name'] ]; // dd($data); return $reportData; } public function avgPerQstpdf($results,$result,$comp){ $data = []; // dd($results); $grpData = new \stdClass(); $grpData->list = $results; $grpData->total = sizeOf($results); array_push($data,$grpData); // dd($results[0]['template_title']); $report_title = "Average per Question Summary"; $table_body = []; foreach ($results as $average) { $table_body[] = [ $average['id'], // Question Id $average['question'], // Question $average['count'], // Count number_format($average['average'], 2), // Average ]; } $reportData = [ 'data' => $data, 'webpage_title' => "Reviews Report", 'company' => $comp->comp_name ?? "", 'template_name' => $result[0]['template_title'] ?? "", 'system_name' => $result[0]['system_name'] ?? "", 'report_title' => $report_title, 'table_headers' => ['No.','Question Id', 'Question', 'Count', 'Average'], // 'table_body' => ['id','question','count','average'] 'table_body' => $table_body ]; // dd($reportData); return $reportData; } public function pdf2($results,$titles){ // dd($titles); $data = []; $grpData = new \stdClass(); $grpData->list = $results; $grpData->total = sizeOf($results); array_push($data,$grpData); $report_title = ($results[0]['system_name'] ?? ' ') . " Respondents Count"; $reportData = [ 'data' => $data, 'webpage_title' => "Reviews Report", 'report_title' => $report_title, 'system_name' => $titles[0]->system_name, 'template_name' => $titles[0]->title, 'table_headers' => ['No.','Name','Average'], 'table_body' => ['user_name','rating'] ]; return $reportData; } public function pdf3($results,$titles){ $data = []; $grpData = new \stdClass(); $grpData->list = $results; $grpData->total = sizeOf($results); array_push($data,$grpData); $report_title = ($results[0]['system_name'] ?? ' ') . " Comment Summary Report"; $reportData = [ 'data' => $data, 'webpage_title' => "Comments Summary Report", 'report_title' => $report_title, 'system_name' => $titles[0]->system_name, 'template_name' => $titles[0]->title, 'table_headers' => ['No.','Name','Comment'], 'table_body' => ['user_name','comment'] ]; return $reportData; } // public function csv($result){ // // dd($result); // $inc = 0; // $response = []; // $response[] = [ // 'No.','User','Template Name','System Name', 'Question', 'Rating' // ]; // foreach($result as $key => $row){ // for($i=0; $i < count($row['ratings']); $i++){ // // print_r($row['ratings'][$i]['questions']); // // exit; // $response[] = [ // $inc+=1, // $row['user_name'], // $row['template_title'], // $row['system_name'], // $row['ratings'][$i]['questions'], // $row['ratings'][$i]['rating'] // ]; // } // // foreach($row['ratings'] as $r => $question){ // } // // dd($response); // $file_name = ($result[0]->system_name ?? ' ') . " Respondents_Count-".date('Y-m-d').'.csv'; // // dd($file_name); // header('Content-Type: text/csv'); // header('Content-Disposition: attachment; filename="'.$file_name.'"'); // $f = fopen('php://output', 'wb'); // if($f === false){ // die('Error opening the file '.$file_name); // } // if(empty($response[1])){ // $arr = [ // "No data to show" // ]; // fputcsv($f,$arr); // } else { // foreach($response as $row){ // fputcsv($f, $row, ','); // } // } // fclose($f); // } public function csv($result){ $inc = 0; $response = []; $response[] = [ 'No.','User','Template Name','System Name', 'Question', 'Rating' ]; $totalRatings = 0; $totalCount = 0; foreach($result as $key => $row){ for($i=0; $i < count($row['ratings']); $i++){ $rating = $row['ratings'][$i]['rating']; $totalRatings += $rating; $totalCount++; $response[] = [ $inc+=1, $row['user_name'], $row['template_title'], $row['system_name'], $row['ratings'][$i]['questions'], $rating ]; } } // Calculate average rating $averageRating = ($totalCount > 0) ? ($totalRatings / $totalCount) : 0; // Add row for average rating $response[] = [ '', '', '', '', 'Average Rating', round($averageRating,0) ]; $file_name = ($result[0]->system_name ?? ' ') . " Respondents_Count-".date('Y-m-d').'.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="'.$file_name.'"'); $f = fopen('php://output', 'wb'); if($f === false){ die('Error opening the file '.$file_name); } if(empty($response[1])){ $arr = [ "No data to show" ]; fputcsv($f,$arr); } else { foreach($response as $row){ fputcsv($f, $row, ','); } } fclose($f); } public function csv2($results){ // dd($results); $response = []; $response[] = [ 'No.','User','Average' ]; foreach($results as $key => $result){ $ave = json_decode($result->average); $average = array_reduce($ave, function($carry, $number) { return $carry + $number; }, 0) / count($ave); $round = round($average,0); $response[] = [ $key+=1, $result->user_name, $round ]; } $file_name = ($results[0]->system_name ?? ' ') . " Respondents_Count-".date('Y-m-d').'.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="'.$file_name.'"'); $f = fopen('php://output', 'wb'); if($f === false){ die('Error opening the file '.$file_name); } if(empty($response[1])){ $arr = [ "No data to show" ]; fputcsv($f,$arr); } else { foreach($response as $row){ fputcsv($f, $row, ','); } } fclose($f); } public function csv3($results, $titles){ $response = []; $response[] = [ 'No.','User','Comment' ]; foreach($results as $key => $row){ $response[] = [ $key+=1, $row->user_name, $row->comment ]; } $file_name = "Comment_Summary-".date('Y-m-d').'.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="'.$file_name.'"'); $f = fopen('php://output', 'wb'); if($f === false){ die('Error opening the file '.$file_name); } if(empty($response[1])){ $arr = [ "No data to show" ]; fputcsv($f,$arr); } else { foreach($response as $row){ fputcsv($f, $row, ','); } } fclose($f); } public function avgPerQstcsv($array_data,$result,$comp){ // dd($array_data); $response = []; $response[] = ['No.','Question Id', 'Question', 'Count', 'Average']; $inc = 0; foreach($array_data as $key => $row){ $inc++; $response[] = [ $inc, $row['id'], $row['question'], $row['count'], number_format($row['average'],2), ]; } $file_name = "Average_Per_Question_Summary-".date('Y-m-d').'.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="'.$file_name.'"'); $f = fopen('php://output', 'wb'); if($f === false){ die('Error opening the file '.$file_name); } fputcsv($f,["Template Name:","System Name:","Company:"],','); fputcsv($f,[$result[0]['template_title'],$result[0]['system_name'],$comp->comp_name ?? "None"],','); if(empty($response[1])){ $arr = [ "No data to show" ]; fputcsv($f,$arr); } else { foreach($response as $row){ fputcsv($f, $row, ','); } } fclose($f); } } PK-ZOʙModels/Auth.phpnu[getCompanyQuery(), $fields, $array_data['search'], $array_data['where'], $array_data['sort'], $array_data['offset_limit'] ); return DB::select($query); } public function getCompaniesCount($array_data){ $fields = " COUNT(1) as Count "; $query = sprintf( $this->getCompanyQuery(), $fields, '', $array_data['where'], '', '' ); return DB::select($query); } public function getCompaniesFilteredCount($array_data){ $fields = " COUNT(1) as FilteredCount "; $query = sprintf( $this->getCompanyQuery(), $fields, $array_data['search'], $array_data['where'], '', '' ); return DB::select($query); } public function getEmailsQuery(){ return "SELECT %s FROM email_responses INNER JOIN users `u` on `u`.`id` = email_responses.user WHERE 1 %s %s %s %s "; } public function getEmails($array_data){ // dd($array_data); $fields = " `email_responses`.`id`, CONCAT(`u`.`f_name`, ' ', `u`.`l_name`) as `user_name`, `email_responses`.`email`, `email_responses`.`created_at`, `email_responses`.`status` "; $query = sprintf( $this->getEmailsQuery(), $fields, $array_data['search'], $array_data['where'], $array_data['sort'], $array_data['offset_limit'] ); return DB::select($query); } public function getEmailsCount($array_data){ $fields = " COUNT(1) as Count "; $query = sprintf( $this->getEmailsQuery(), $fields, '', $array_data['where'], '', '' ); return DB::select($query); } public function getEmailsFilteredCount($array_data){ $fields = " COUNT(1) as FilteredCount "; $query = sprintf( $this->getEmailsQuery(), $fields, $array_data['search'], $array_data['where'], '', '' ); return DB::select($query); } public function getRolesQuery(){ return "SELECT %s FROM `roles` WHERE 1 %s %s %s %s "; } public function getRoles($array_data){ $fields = " `roles`.`id`, `roles`.`name`, `roles`.`title` "; $query = sprintf( $this->getRolesQuery(), $fields, $array_data['search'], $array_data['where'], $array_data['sort'], $array_data['offset_limit'] ); return DB::select($query); } public function getRolesCount($array_data){ $fields = " COUNT(1) as Count "; $query = sprintf( $this->getRolesQuery(), $fields, '', $array_data['where'], '', '' ); return DB::select($query); } public function getRolesFilteredCount($array_data){ $fields = " COUNT(1) as FilteredCount "; $query = sprintf( $this->getRolesQuery(), $fields, $array_data['search'], $array_data['where'], '', '' ); return DB::select($query); } } PK-ZttModels/Questions.phpnu[getQuestionsQuery(), $fields, $array_data['search'], $array_data['where'], $array_data['sort'], $array_data['offset_limit'] ); return DB::select($query); } public function getQuestionsCount($array_data){ $fields = " COUNT(1) as Count "; $query = sprintf( $this->getQuestionsQuery(), $fields, '', $array_data['where'], '', '' ); return DB::select($query); } public function getQuestionsFilteredCount($array_data){ $fields = " COUNT(1) as FilteredCount "; $query = sprintf( $this->getQuestionsQuery(), $fields, $array_data['search'], $array_data['where'], '', '' ); return DB::select($query); } public function getQuestionsReportQuery(){ return "SELECT %s FROM questions WHERE 1 AND `status` = 1 AND active = 1 %s "; } public function reports($array_data){ $fields = " id, title, DATE_FORMAT(`created_at`,'%M %e, %Y') as created_at "; $query = sprintf( $this->getQuestionsReportQuery(), $fields, $array_data['where'], ); // dd($query); return DB::select($query); } public function pdf($results,$type){ $data = []; $grpData = new \stdClass(); $grpData->list = $results; $grpData->total = sizeOf($results); array_push($data, $grpData); $report_title = "Questions Masterfile"; $reportData = [ 'data' => $data, 'webpage_title' => "Questions Report", 'report_title' => $report_title, 'table_headers' => ['No.','Question', 'Date Created'], 'table_body' => ['title','created_at'], // 'img' => $base64 ]; return $reportData; } public function pdf2($results){ $data = []; $grpData = new \stdClass(); $grpData->list = $results; $grpData->total = sizeOf($results); array_push($data, $grpData); $report_title = "Question per Template Masterfile"; $reportData = [ 'data' => $data, 'webpage_title' => "Questions Report", 'report_title' => $report_title, // 'table_headers' => ['No.','Question','Templates', 'Date Created'], // 'table_body' => ['title','templateTitles','created_at'], 'table_headers' => ['No.','Question', 'Date Created'], 'table_body' => ['title','created_at'], // 'img' => $base64 ]; return $reportData; } public function csv($results){ // dd($results); $questions = []; $questions[] = ['No.','Question','Date Created']; $inc = 0; foreach ($results as $row) { $questions[] = [ $inc+=1, $row->title, $row->created_at ]; } $filename = "Questions_Masterfile"."-". date('Y-m-d').'.csv'; // dd($questions); header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="'.$filename.'"'); $f = fopen('php://output', 'wb'); if ($f === false) { die('Error opening the file ' .$filename); } if(empty($questions[1])){ $arr = [ "No data to show" ]; fputcsv($f, $arr); } else { foreach ($questions as $row) { fputcsv($f, $row, ','); } } fclose($f); } public function csv2($results){ // dd($results); $questions = []; $questions[] = ['No.','Question Title', 'Template', 'Date Created']; $inc = 0; foreach ($results as $row) { $templateTitles = implode(', ', $row->templateTitles); $questions[] = [ $inc+=1, $row->title, $templateTitles, $row->created_at ]; } $filename = "Questions_per_Template_Masterfile"."-". date('Y-m-d').'.csv'; // dd($questions); header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="'.$filename.'"'); $f = fopen('php://output', 'wb'); if ($f === false) { die('Error opening the file ' .$filename); } if(empty($questions[1])){ $arr = [ "No data to show" ]; fputcsv($f, $arr); } else { foreach ($questions as $row) { fputcsv($f, $row, ','); } } fclose($f); } } PK-Z\h3 3 Models/User.phpnu[ */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', 'password' => 'hashed', ]; public function getJWTIdentifier() { return $this->getKey(); } public function getJWTCustomClaims() { return [ 'email'=>$this->email, 'name'=>$this->name ]; } protected $with = ['roles', 'employees', 'department_access', 'employee_profile_picture']; public function roles() { return $this->belongsToMany( Role::class, UserRole::class, 'user_id', 'role_id' ); } public function department_access() { return $this->belongsToMany( Department::class, DepartmentAccess::class, 'user_id', 'department_id' ); } public function employees(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function employee_profile_picture(): BelongsTo { return $this->belongsTo(EmployeeProfilePicture::class, 'employee_id', 'employee_id') ->select(['employee_id', 'attachment']); } } PK-ZBg6Models/Template.phpnu[getTemplateQuery(), $fields, $array_data['search'], $array_data['where'], $array_data['sort'], $array_data['offset_limit'] ); return DB::select($query); } public function getTemplatesCount($array_data){ $fields = " COUNT(1) as Count "; $query = sprintf( $this->getTemplateQuery(), $fields, '', $array_data['where'], '', '' ); return DB::select($query); } public function getTemplatesFilteredCount($array_data){ $fields = " COUNT(1) as FilteredCount "; $query = sprintf( $this->getTemplateQuery(), $fields, $array_data['search'], $array_data['where'], '', '' ); return DB::select($query); } public function getTemplatesReportQuery(){ return "SELECT %s FROM templates WHERE 1 AND `status` = 1 AND active = 1 %s "; } public function reports($array_data){ $fields = " * "; $query = sprintf( $this->getTemplatesReportQuery(), $fields, $array_data['where'] ); return DB::select($query); } public function pdf($results){ $data = []; $grpData = new \stdClass(); $grpData->list = $results; $grpData->total = sizeOf($results); array_push($data,$grpData); $report_title = "Templates Masterfile"; $reportData = [ 'data' => $data, 'webpage_title' => "Templates Report", 'report_title' => $report_title, 'table_headers' => ['No.', 'Template Name', 'Date Created'], 'table_body' => ['title','created_at'] ]; return $reportData; } public function csv($results){ $templates = []; $templates[] = ['No.','Title', 'Date Created']; $inc = 0; foreach($results as $row){ $templates[] = [ $inc+=1, $row->title, $row->created_at, ]; } $filename = "Templates_Masterfile." . date('Y-m-d H-i-sA').'.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="'.$filename.'"'); $f = fopen('php://output', 'wb'); if ($f === false) { die('Error opening the file ' .$filename); } if(empty($templates[1])){ $arr = [ "No data to show" ]; fputcsv($f, $arr); } else { foreach ($templates as $row) { fputcsv($f, $row, ','); } } fclose($f); } public function reportsTmpQstn($array_data){ $fields = " * "; $query = sprintf( $this->getTemplatesReportQuery(), $fields, $array_data['where'] ); return DB::select($query); } // public function pdfTmpQstn($results){ // // dd($results); // $data = []; // $grpData = new \stdClass(); // $grpData->list = $results; // $grpData->total = sizeOf($results); // array_push($data,$grpData); // $report_title = "Templates Masterfile"; // $reportData = [ // 'data' => $data, // 'webpage_title' => "Templates Report", // 'report_title' => $report_title, // 'table_headers' => ['No.', 'Questions', 'Date Created'], // 'table_body' => ['title','created_at'] // ]; // return $reportData; // } public function pdfTmpQstn($results) { $data = []; $grpData = new \stdClass(); // $grpData->no = 1; $grpData->list = $results; $grpData->total = sizeOf($results); array_push($data,$grpData); // $grpData->title = $results[0]->title; // $grpData->created_at = $results[0]->created_at; // $grpData->questions = $results[0]->questions; // array_push($data, $grpData); $report_title = "Template Questions Masterfile"; $reportData = [ 'data' => $data, 'webpage_title' => "Template Questions Masterfile", 'template_title' => $results[0]->title, 'report_title' => $report_title, 'table_headers' => ['No.', 'Questions', 'Date Created'], 'table_body' => ['title', 'created_at'], ]; return $reportData; } public function csvTmpQstn($results){ $templates = []; $templates[] = ['No.','Questions','Date Created']; $inc = 0; foreach($results as $row){ $templates[] = [ $inc+=1, $row->title, $row->created_at ]; } $filename = "Template_Questions_Masterfile"."-".date('Y-m-d').'.csv'; header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="'.$filename.'"'); $f = fopen('php://output', 'wb'); if ($f === false) { die('Error opening the file ' .$filename); } if(empty($templates[1])){ $arr = [ "No data to show" ]; fputcsv($f,$arr); } else { foreach($templates as $row){ fputcsv($f, $row, ','); } // fputcsv($f,$templates[0]->title,','); } fclose($f); } } PK-ZP̯Models/Link.phpnu[call('serve', [ '--port' => 8005, // Set your custom port here ]); } } PKyZ\|Http/Middleware/CustomAuth.phpnu[bearerToken(); $staticToken = env('JWT_SECRET'); if ($token === $staticToken) { return $next($request); } try { if ($user = JWTAuth::parseToken()->authenticate()) { $request->attributes->set('user', $user); return $next($request); } } catch (\Exception $e) { return response()->json(['error' => 'Unauthorized'], 401); } return response()->json(['error' => 'Unauthorized'], 401); } } PKyZdFD)D)%Http/Controllers/ReportController.phpnu[all()); switch($request->modules){ case '1': return $this->generateLeaveReport($request); break; case '2': return $this->generateOvertimeReport($request); break; default: return response()->json(['message' => 'You need to select module']); } } public function generateLeaveReport($request) { // Validate the request DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'from_date' => 'required|date', 'to_date' => 'required|date', 'leave_id' => 'nullable|integer', 'status' => 'nullable|string', ]); // Start the query $query = DB::table('employee_leaves') ->join('employees', 'employee_leaves.employee_id', '=', 'employees.employee_id') ->join('leave_types', 'employee_leaves.leave_id', '=', 'leave_types.id'); // Apply filters if ($request->filled('leave_id')) { $query->where('employee_leaves.leave_id', $request->leave_id); } if ($request->filled('status')) { $query->where('employee_leaves.status', $request->status); } if ($request->filled('from_date') && $request->filled('to_date')) { $fromDate = Carbon::parse($request->from_date)->startOfDay(); $toDate = Carbon::parse($request->to_date)->endOfDay(); $query->whereBetween('employee_leaves.date_from', [$fromDate, $toDate]); $query->whereBetween('employee_leaves.date_to', [$fromDate, $toDate]); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Conditionally include status if 'status' is in $columns if (in_array('status', $selectedColumns)) { $transformedColumns[] = DB::raw(" CASE WHEN employee_leaves.status = 0 THEN 'Pending / For Recommendation' WHEN employee_leaves.status = 1 THEN 'For Approval' WHEN employee_leaves.status = 2 THEN 'Approved' ELSE 'Denied' END as status "); } // Handle transformed columns dynamically if (in_array('leave_id', $selectedColumns)) { $transformedColumns[] = 'leave_types.name as leave_id'; } if (in_array('without_pay', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_leaves.without_pay = 0 THEN 'No' ELSE 'Yes' END as without_pay"); } if (in_array('half_day', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_leaves.half_day = 0 THEN 'No' ELSE 'Yes' END as half_day"); } if (in_array('description', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_leaves.description as description'); } if (in_array('created_at', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_leaves.created_at as created_at'); } // Conditionally join employees for recommending_id if (in_array('recommending_id', $selectedColumns)) { $query->leftJoin('employees as recommending_employee', 'employee_leaves.recommending_id', '=', 'recommending_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(recommending_employee.firstname, ' ', recommending_employee.lastname) as recommending_id"); } // Conditionally join employees for approver_id if (in_array('approver_id', $selectedColumns)) { $query->leftJoin('employees as approver_employee', 'employee_leaves.approver_id', '=', 'approver_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(approver_employee.firstname, ' ', approver_employee.lastname) as approver_id"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as name"); $transformedColumns[] = "employees.employee_id"; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $leaves = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $leaves, 'total_hours' => $query->sum('hours'), // This line can also be used if not grouping 'total_days' => $query->sum('days'), // This line can also be used if not grouping ]); } public function generateOvertimeReport($request) { // dd($request->all()); // Validate the request DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'from_date' => 'required|date', 'to_date' => 'required|date', 'charge_to' => 'nullable|integer', 'status' => 'nullable|string', ]); // Start the query $query = DB::table('employee_overtimes') ->join('employees', 'employee_overtimes.employee_id', '=', 'employees.employee_id') ->leftjoin('companies', 'employee_overtimes.charge_to', '=', 'companies.id'); // Apply filters if ($request->filled('charge_to')) { $query->where('employee_overtimes.charge_to', $request->charge_to); } if ($request->filled('status')) { $query->where('employee_overtimes.status', $request->status); } if ($request->filled('from_date') && $request->filled('to_date')) { $fromDate = Carbon::parse($request->from_date)->startOfDay(); $toDate = Carbon::parse($request->to_date)->endOfDay(); $query->whereBetween('employee_overtimes.date_from', [$fromDate, $toDate]); $query->whereBetween('employee_overtimes.date_to', [$fromDate, $toDate]); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Conditionally include status if 'status' is in $columns if (in_array('status', $selectedColumns)) { $transformedColumns[] = DB::raw(" CASE WHEN employee_overtimes.status = 0 THEN 'Pending / For Recommendation' WHEN employee_overtimes.status = 1 THEN 'For Approval' WHEN employee_overtimes.status = 2 THEN 'Approved' ELSE 'Denied' END as status "); } // Handle transformed columns dynamically if (in_array('charge_to', $selectedColumns)) { $transformedColumns[] = 'companies.name as charge_to'; } if (in_array('meal', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_overtimes.meal = 0 THEN 'No' ELSE 'Yes' END as meal"); } if (in_array('transportation', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_overtimes.transportation = 0 THEN 'No' ELSE 'Yes' END as transportation"); } if (in_array('description', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_overtimes.description as description'); } if (in_array('created_at', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_overtimes.created_at as created_at'); } // Conditionally join employees for recommending_id if (in_array('recommending_id', $selectedColumns)) { $query->leftJoin('employees as recommending_employee', 'employee_overtimes.recommending_id', '=', 'recommending_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(recommending_employee.firstname, ' ', recommending_employee.lastname) as recommending_id"); } // Conditionally join employees for approver_id if (in_array('approver_id', $selectedColumns)) { $query->leftJoin('employees as approver_employee', 'employee_overtimes.approver_id', '=', 'approver_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(approver_employee.firstname, ' ', approver_employee.lastname) as approver_id"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as name"); $transformedColumns[] = "employees.employee_id"; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $leaves = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $leaves, 'total_hours' => $query->sum('hours'), // This line can also be used if not grouping ]); } } PKyZkk+Http/Controllers/ReportModuleController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = ReportModule::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(){ } } PKyZ).Http/Controllers/API/v1/TaxTableController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = TaxTable::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('period', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'period' => [ 'required', 'min:2' ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = TaxTable::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = TaxTable::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make( $request->all(), [ 'period' => [ 'required', 'min:2' ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = TaxTable::find($id); if (!$data) { return response()->json(['message' => "Record not found!"], 204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"], 201); } public function getShields() { $data = DB::table('employees as e') ->join('mtr_employeelist as mtre', 'e.employee_id', '=', 'mtre.employee_id') ->join('hrm_trn_empcompensation as compen', 'mtre.employee_no', '=', 'compen.employee_no') ->select('e.employee_id', 'mtre.fixed_pagibig_amount', 'mtre.tax_shield', 'mtre.sss_shield', 'mtre.pagibig_shield', 'mtre.philhealth_shield', 'mtre.present_all_times', 'mtre.fixed_pagibig', 'mtre.fixed_pagibig_amount_er', 'compen.payment_type') ->get(); foreach ($data as $employee) { $shields = json_encode([ 'tax' => $employee->tax_shield == 'Y' ? '1' : '0', 'sss' => $employee->sss_shield == 'Y' ? '1' : '0', 'pagibig' => $employee->pagibig_shield == 'Y' ? '1' : '0', 'philhealth' => $employee->philhealth_shield == 'Y' ? '1' : '0', ]); DB::table('salary_and_wages') ->where('employee_id', $employee->employee_id) ->update(['shields' => $shields]); } } } PKyZ;R16Http/Controllers/API/v1/ExaminationTakenController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = ExaminationTaken::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = ExaminationTaken::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('examination_takens')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = ExaminationTaken::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { // Get table name $tableName = $this->getTableName(); $data = ExaminationTaken::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('examination_takens')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = ExaminationTaken::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ9 1Http/Controllers/API/v1/AffiliationController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Affiliation::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('description', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = Affiliation::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', Rule::unique('affiliations')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Affiliation::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Affiliation::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', Rule::unique('affiliations')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Affiliation::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ!%_2Http/Controllers/API/v1/PagIbigTableController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = PagIbigTable::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'salary_min' => [ 'required', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = PagIbigTable::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = PagIbigTable::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'salary_min' => [ 'required', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = PagIbigTable::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ9.((-Http/Controllers/API/v1/CompanyController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', 'code'); $sortType = $request->input('sortType', 'asc'); // Generate a unique cache key based on request parameters $cacheKey = 'companies_' . md5(json_encode([ 'keyword' => $keyword, 'perPage' => $perPage, 'sortBy' => $sortBy, 'sortType' => $sortType, ])); // Check if data exists in cache, otherwise execute the query and cache the result $data = // Cache::remember($cacheKey, 60, function () use ($keyword, $perPage, $sortBy, $sortType) { // return Company::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }) ->when(!empty($sortBy) && !empty($sortType), function ($query) use ($sortBy, $sortType) { $query->orderBy($sortBy, $sortType); }) ->paginate($perPage); // }); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'code' => [ 'required', 'min:2', Rule::unique('companies')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Company::create($request->all()); DB::connection()->commit(); // Invalidate cache for 'companies_' key when a new company is added Cache::forget('companies_'); // Adjust cache key if necessary return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Company::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'code' => [ 'required', 'min:2', Rule::unique('companies')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); // Invalidate cache for 'companies_' key when a company is updated Cache::forget('companies_'); // Adjust cache key if necessary return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Company::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ+-Http/Controllers/API/v1/SiblingController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Sibling::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = Sibling::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Sibling::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Sibling::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Sibling::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ<,(X(XEHttp/Controllers/API/v1/ApproveAttendanceRequestsMobileController.phpnu[where('id', $request->id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } if($data->recommending_id != $request->officer_id && $data->approver_id != $request->officer_id){ return response()->json(['messages' => 'You are not the recommending or approving officer of this record.'], 404); } if($request->status == 99){ if($data->leave_id != 1){ $leave_credits = EmployeeLeaveCredits::where([ 'employee_id' => $data->employee_id, 'enabled' => 1, 'leave_type_id' => $data->leave_id ])->first(); $remaining_leave = $data->days + $leave_credits->remaining; $remaining_hours = $leave_credits->remaining + ($remaining_leave * 8); try { DB::connection()->beginTransaction(); $leave_credits->remaining = $remaining_leave; $leave_credits->hours = $remaining_hours; $leave_credits->save(); DB::connection()->commit(); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } } DB::beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all())->save(); $data->touch(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $this->sendNotification($employee_id_for_notification, $data); if($request->status == 2){ try{ $ledger = $data; $ledger->id = NULL; LeaveLedger::create($ledger->toArray()); } catch(Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function approve_overtime_request(Request $request) { $data = EmployeeOvertime::with(['employee'])->where('id', $request->id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } if($data->recommending_id != $request->officer_id && $data->approver_id != $request->officer_id){ return response()->json(['messages' => 'You are not the recommending or approving officer of this record.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $email_to = $this->getEmployeeEmailData($employee_id_for_notification); Notification::send($email_to, new Overtime($data)); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function approve_undertime_request(Request $request) { // $data = EmployeeUndertime::with(['employee'])->where('id', $id)->first(); $data = EmployeeUndertime::with(['employee'])->where('id', $request->id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } if($data->recommending_id != $request->officer_id && $data->approver_id != $request->officer_id){ return response()->json(['messages' => 'You are not the recommending or approving officer of this record.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new Undertime($data)); } else { try { $error = [ 'user_id' => $request->employee_id, 'model' => 'App\Model\EmployeeUndertime', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => $request->employee_id, 'model' => 'App\Model\EmployeeUndertime', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function approve_travel_request(Request $request) { // $data = EmployeeOb::with(['employee'])->where('id', $id)->first(); $data = EmployeeOb::with(['employee'])->where('id', $request->id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } if($data->recommending_id != $request->officer_id && $data->approver_id != $request->officer_id){ return response()->json(['messages' => 'You are not the recommending or approving officer of this record.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = ''; if($request->status == 1){ $employee_id_for_notification = $data->approver_id; } else if ($request->status == 2){ $employee_id_for_notification = $data->employee_id; } else if ($request->status == 99){ $employee_id_for_notification = $data->employee_id; } $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new Travel($data)); } else { try { $error = [ 'user_id' => $request->employee_id, 'model' => 'App\Model\EmployeeOb', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => $request->employee_id, 'model' => 'App\Model\EmployeeOb', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function approve_offset_availment_request(Request $request) { $data = EmployeeOffset::with(['employee'])->where('id', $request->id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } if($data->recommending_id != $request->officer_id && $data->approver_id != $request->officer_id){ return response()->json(['messages' => 'You are not the recommending or approving officer of this record.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; if($request->status == 99){ $offset = OffsetRemaining::where('employee_id', '=', $data->employee_id)->first(); if ($offset) { $offset->increment('remaining', $data->hours); } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new OffsetAvailment($data)); } else { try { $error = [ 'user_id' => $request->employee_id, 'model' => 'App\Model\EmployeeOffset', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => $request->employee_id, 'model' => 'App\Model\EmployeeOffset', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function approve_offset_earning_request(Request $request) { $data = EmployeeOffsetEarning::with(['employee'])->where('id', $request->id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } if($data->recommending_id != $request->officer_id && $data->approver_id != $request->officer_id){ return response()->json(['messages' => 'You are not the recommending or approving officer of this record.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; if($request->status == 2){ if(!OffsetRemaining::where('employee_id', '=', $data->employee_id)->exists()){ OffsetRemaining::create([ 'employee_id' => $data->employee_id, 'company_id' => $data->company_id, 'remaining' => $data->hours ]); } else { $offset = OffsetRemaining::where('employee_id', '=', $data->employee_id)->first(); if ($offset) { $offset->increment('remaining', $data->hours); } } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new OffsetEarning($data)); } else { try { $error = [ 'user_id' => $request->employee_id, 'model' => 'App\Model\EmployeeOffsetEarning', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => $request->employee_id, 'model' => 'App\Model\EmployeeOffsetEarning', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function approve_time_adjustment_request(Request $request) { // $data = EmployeeOb::with(['employee'])->where('id', $id)->first(); $data = EmployeeTimeAdjustment::with(['employee'])->where('id', $request->id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } if($data->recommending_id != $request->officer_id && $data->approver_id != $request->officer_id){ return response()->json(['messages' => 'You are not the recommending or approving officer of this record.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = ''; if($request->status == 1){ $employee_id_for_notification = $data->approver_id; } else if ($request->status == 2){ $employee_id_for_notification = $data->employee_id; } else if ($request->status == 99){ $employee_id_for_notification = $data->employee_id; } $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new TimeAdjustment($data)); } else { try { $error = [ 'user_id' => $request->employee_id, 'model' => 'App\Model\EmployeeTimeAdjustment', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => $request->employee_id, 'model' => 'App\Model\EmployeeTimeAdjustment', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function sendNotification($employee_id, $data) { $email_to = $this->getEmployeeEmailData($employee_id); if ($email_to) { Notification::send($email_to, new Leave($data)); } else { return response()->json_encode('Email To Not Found'); } } public function getEmployeeEmailData($id) { return User::where('employee_id', $id)->first(); } } PKyZO:q ,,1Http/Controllers/API/v1/WfhApprovalController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $currentEmp = $employee->employees ? $employee->employees->employee_id : ''; $data = EmployeeWfh::with(['recommending', 'approving', 'employee']) ->where(function ($query) use ($employee) { $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : '' ); }) ->where('enabled', 1) ->whereNull('deleted_at') ->select('employee_wfhs.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_wfhs AS el WHERE el.status IN (0, 1) AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS pending, (SELECT COUNT(*) FROM employee_wfhs AS el WHERE el.status = 2 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS approved, (SELECT COUNT(*) FROM employee_wfhs AS el WHERE el.status = 99 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS denied') ->orderBy('status', 'ASC') ->paginate($perPage); // dd($data); // dd(DB::getQueryLog()); return response()->json($data); } public function update(Request $request, int $id) { $data = EmployeeWfh::with(['employee'])->where('id', $id)->first(); if($request->status == 5){ $floatedTimelogs = WfhFloatedTimelog::where('employee_id', $data->employee_id)->whereDate('datetimelog', $data->date)->get(); $search = array('-', ' ', ':'); $replace = array('', '', ''); // Replace with a single blank space foreach($floatedTimelogs as $floatedLog){ $replaced = str_replace($search, $replace, $floatedLog['datetimelog']); Timelog::create([ 'employee_id' => $floatedLog['employee_id'], 'time_keeping_id' => $floatedLog['time_keeping_id'], 'in_out' => $floatedLog['in_out'], 'datetimelog' => $floatedLog['datetimelog'], 'ip_address' => $floatedLog['ip_address'], 'latitude' => $floatedLog['latitude'], 'longitude' => $floatedLog['longitude'], 'sync_id' => $replaced.'-'.$data->employee_id.'-'.date('Ymd'), 'sync_at' => date('Y-m-d H:i:s'), 'image' => $floatedLog['image'] ]); WfhFloatedTimelog::where('id', $floatedLog['id'])->update([ 'employee_id' => $floatedLog['employee_id'], 'time_keeping_id' => $floatedLog['time_keeping_id'], 'in_out' => $floatedLog['in_out'], 'datetimelog' => $floatedLog['datetimelog'], 'ip_address' => $floatedLog['ip_address'], 'latitude' => $floatedLog['latitude'], 'longitude' => $floatedLog['longitude'], 'sync_id' => $replaced.'-'.$data->employee_id.'-'.date('Ymd'), 'sync_at' => date('Y-m-d H:i:s'), 'image' => $floatedLog['image'] ]); } } if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = ''; if($request->status == 1){ $employee_id_for_notification = $data->approver_id; } else if ($request->status == 2){ $employee_id_for_notification = $data->employee_id; } else if ($request->status == 99){ $employee_id_for_notification = $data->employee_id; } $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new Wfh($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeWfh', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeWfh', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateApprover(Request $request, int $id) { $data = EmployeeWfh::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $employee_id_for_notification = []; if($request->recommending_id != $data->recommending_id){ $employee_id_for_notification[] = $request->recommending_id; } if ($request->approver_id != $data->approver_id){ $employee_id_for_notification[] = $request->approver_id; } foreach($employee_id_for_notification as $employee_id){ $email_to = $this->getEmployeeEmailData($employee_id); try { if ($email_to) { Notification::send($email_to, new Wfh($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } public function HrValidation(Request $request,int $id){ $status = $request->status; $data = EmployeeWfh::with(['employee'])->where('id', $id)->first(); if(!$data){ return response()->json(['messages' => 'No data found.']); } $employee_id =Auth::user()->employees->employee_id; DB::beginTransaction(); try{ $data->validated_by = $employee_id; $data->validated_at = now(); $data->validated = $status; $data->deferred_reason = $request->reason; $data->save(); $email_to = $this->getEmployeeEmailData($data->employee_id); Notification::send($email_to, new Wfh($data)); DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZ_aݣ=Http/Controllers/API/v1/MonthlyScheduleApprovalController.phpnu[input('keyword', ''); // $perPage = $request->input('per_page', PHP_INT_MAX); // $sortBy = $request->input('sortBy', 'pending'); // $sortType = $request->input('sortType', 'desc'); // $data = EmployeeMonthlySchedule::with(['recommending', 'approving', 'department', 'leave_type']) // ->where(function ($query) use ($employee) { // $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') // ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : '' ); // }) // ->where('enabled', 1) // ->select('employee_monthly_schedules.*') // ->orderBy($sortBy, $sortType) // ->paginate($perPage); // return response()->json($data); $currentEmp = $employee->employees ? $employee->employees->employee_id : ''; $monthlyEmployeeScheduleRequest = EmployeeMonthlySchedule::with(['recommending', 'approving', 'department', 'requested']) ->where(function ($query) use ($employee) { $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : '' ); }) ->where('enabled', 1) ->select('employee_monthly_schedules.*') ->whereNull('deleted_at') ->selectRaw(' (SELECT COUNT(*) FROM employee_monthly_schedules AS ems WHERE ems.status IN (0, 1) AND (ems.recommending_id = '.$currentEmp.' OR ems.approver_id = '.$currentEmp.')) AS pending, (SELECT COUNT(*) FROM employee_monthly_schedules AS ems WHERE ems.status = 2 AND (ems.recommending_id = '.$currentEmp.' OR ems.approver_id = '.$currentEmp.')) AS approved, (SELECT COUNT(*) FROM employee_monthly_schedules AS ems WHERE ems.status = 99 AND (ems.recommending_id = '.$currentEmp.' OR ems.approver_id = '.$currentEmp.')) AS denied ') ->orderBy('status', 'ASC') ->get(); $decodedSchedules = []; foreach ($monthlyEmployeeScheduleRequest as $schedule) { $decodedData = json_decode($schedule->data, true); $decodedSchedules[] = [ 'id' => $schedule->id, 'department_name' => $schedule->department->name, 'department_id' => $schedule->department_id, 'department_ids' => $decodedData['department_ids'], 'entries' => $decodedData['entries'], 'status' => $schedule->status, 'validated' =>$schedule->validated, 'validated_by' =>$schedule->validated_by, 'validated_at' =>$schedule->validated_at, 'deferred_reason' => $schedule->deferred_reason, 'recommending' => $schedule->recommending, 'approving' => $schedule->approving, 'recommending_id' => $schedule->recommending_id, 'approver_id' => $schedule->approver_id, 'requested_by' => $schedule->requested_by, 'requested_name' => $schedule->requested->firstname.' '.$schedule->requested->lastname, 'created_at' => $schedule->created_at, 'updated_at' => $schedule->updated_at, 'pending' => $schedule->pending, 'approved' => $schedule->approved, 'denied' => $schedule->denied, ]; } // Return the decoded schedules as a JSON response return response()->json($decodedSchedules); } public function update(Request $request, int $id) { $data = EmployeeMonthlySchedule::with(['employee', 'requested'])->find($id); if($request->status == 2){ $scheduleData = json_decode($data->data, true); foreach ($scheduleData['entries'] as $entry) { foreach ($entry['employee'] as $employeeId) { $company_id = Employee::where('employee_id', $employeeId)->pluck('company_id'); DB::table('employee_schedules')->insert([ 'schedule_id' => $entry['schedule_id'], 'employee_id' => $employeeId, 'company_id' => $company_id[0], 'date_from' => $entry['date_from'], 'date_to' => $entry['date_to'], 'effectivity_date' => $entry['date_from'], 'created_at' => now(), 'updated_at' => now(), ]); } } } if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all())->save(); $data->touch(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function HrValidation(Request $request,int $id){ $status = $request->status; $data = EmployeeMonthlySchedule::with(['employee'])->where('id', $id)->first(); if(!$data){ return response()->json(['messages' => 'No data found.']); } $employee_id =Auth::user()->employees->employee_id; DB::beginTransaction(); try{ $data->validated_by = $employee_id; $data->validated_at = now(); $data->validated = $status; $data->deferred_reason = $request->reason; $data->save(); // $email_to = $this->getEmployeeEmailData($data->employee_id); // Notification::send($email_to, new Travel($data)); DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZM)00/Http/Controllers/API/v1/LeaveTypeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = LeaveType::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }) ->select('id', 'name', 'description', 'max_leave', 'enabled'); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function getLeaveType(Request $request) { // $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = LeaveType::select('id', 'name', 'description', 'max_leave', 'enabled')->get(); // if (!empty($sortBy) && !empty($sortType)) { // $data = $data->orderBy($sortBy, $sortType); // } // $data = $data->paginate($perPage); return response()->json($data); } public function getEmployeeLeaveType(Request $request) { $user = Auth::user(); $data = LeaveType::join('employee_leave_credits', 'leave_types.id', '=', 'employee_leave_credits.leave_type_id') ->select('leave_types.id', 'leave_types.name') ->where('employee_leave_credits.employee_id', $user->employee_id) ->where('employee_leave_credits.remaining', '>', '0.49') ->get(); // Check if Vacation Leave (id = 2) and Sick Leave (id = 3) exist $vacationLeaveExists = $data->contains('id', 2); $sickLeaveExists = $data->contains('id', 3); // Add Vacation Leave to the data if it doesn't exist if (!$vacationLeaveExists) { $data->push((object)[ 'id' => 2, 'name' => 'Vacation Leave', ]); } // Add Sick Leave to the data if it doesn't exist if (!$sickLeaveExists) { $data->push((object)[ 'id' => 3, 'name' => 'Sick Leave', ]); } // dd($data); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('leave_types')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = LeaveType::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = LeaveType::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('leave_types')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = LeaveType::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZrc  2Http/Controllers/API/v1/RequirementsController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Requirements::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('description', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = Requirements::with('requirement_list')->where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', Rule::unique('requirements')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $attachmentName = $this->handleAttachment($request); $data = Requirements::create([ "employee_id" => $request->employee_id, "description" => $request->description, "date_requested" => $request->date_requested, "last_submit_date" => $request->last_submit_date, "date_submitted" => $request->date_submitted, "expiration_date" => $request->expiration_date, "remarks" => $request->remarks, "requirement_list_id" => $request->requirement_list_id, "attachment" => $attachmentName ]); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request) { $id = $request->id; $data = Requirements::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', Rule::unique('requirements')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'requirements/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "requirements/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $data->employee_id = $request->employee_id; $data->employee_id = $request->employee_id; $data->description = $request->description; $data->date_requested = $request->date_requested; $data->last_submit_date = $request->last_submit_date; $data->date_submitted = $request->date_submitted; $data->expiration_date = $request->expiration_date; $data->remarks = $request->remarks; $data->requirement_list_id = $request->requirement_list_id; $data->attachment = $attachment_name; $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Requirements::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "requirements/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } } PKyZU?:Http/Controllers/API/v1/EmployeeLeaveCreditsController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); // Check if data exists in cache, otherwise execute the query and cache the result $data = EmployeeLeaveCredits::with(['leave_type','employee'])->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id','like',"{$keyword}%") ->orWhereHas('leave_type', fn($q) => $q->where('name','like',"%{$keyword}%")) ->orWhereHas('employee', fn($q) => $q->where('lastname', 'like',"%{$keyword}%") ->orWhere('middlename', 'like',"%{$keyword}%") ->orWhere('firstname', 'like',"%{$keyword}%")); }) ->when(!empty($sortBy) && !empty($sortType), function ($query) use ($sortBy, $sortType) { $query->orderBy($sortBy, $sortType); }); if($user->roles[0]->group_id != 1 && $user->roles[0]->group_id != 2) { $data->whereHas('employee', fn($q) => $q->where('dealer_id', $dealership_id)); } $data = $data->paginate($perPage); return response()->json($data); } public function show(Request $request, $id) { $employee_id = $request->input('employee_id'); // Check if data exists in cache, otherwise execute the query and cache the result $data = EmployeeLeaveCredits::with(['leave_type','employee']) ->where('employee_id', $employee_id); return response()->json($data); } public function store(Request $request) { // dd($request->all()); // Validate the incoming request data $company_id = Employee::where('employee_id', '=', $request->employee_id)->pluck('company_id')->first(); $request['company_id'] = $company_id; $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'leave_type_id' => [ 'required', ], 'hours' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { foreach ($request->employee_id as $employee) { $request['employee_id'] = $employee; $data = EmployeeLeaveCredits::create($request->all()); DB::connection()->commit(); } return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = EmployeeLeaveCredits::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'leave_type_id' => [ 'required', ], 'hours' => [ 'required', ], ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); // Invalidate cache for 'companies_' key when a company is updated Cache::forget('companies_'); // Adjust cache key if necessary return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeLeaveCredits::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ^3Http/Controllers/API/v1/MedicalRecordController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = MedicalRecord::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = MedicalRecord::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = MedicalRecord::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = MedicalRecord::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZK':P}P}>Http/Controllers/API/v1/AttendanceRequestsMobileController.phpnu[input('employee_id'); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $year = $request->input('year'); $status = $request->input('status'); $keyword = str_replace(" ", "%", $keyword); $data = EmployeeLeave::with([ 'employee' => fn($employee) => $employee->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'leave_type' => fn($leave_type) => $leave_type->select('id', 'name', 'enabled'), // 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'approving' => fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); }) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'leave_id', 'half_day', 'days', 'date_from', 'date_to', 'meridiem', 'hours', 'attachment', 'description', 'status', 'recommending_id', 'approver_id', 'approved_at' ) ->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->get(); // Add first name and last name to each result foreach ($data as $leave) { $leave->fname = $leave->employee->firstname ?? null; $leave->lname = $leave->employee->lastname ?? null; // Load recommending and approving as single objects $leave->recommending = $leave->recommending()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); $leave->approving = $leave->approving()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); } $usedCredits = EmployeeLeave::where([ 'employee_leaves.employee_id' => $employee_id, 'employee_leaves.enabled' => 1 ]) ->where('leave_id', '!=', '1') ->where('status', '!=', '99') ->join('leave_types', 'employee_leaves.leave_id', '=', 'leave_types.id') ->selectRaw('SUM(employee_leaves.days) as total, leave_types.name') ->groupBy('leave_types.name') ->get(); $pendingOrForApprovalCount = EmployeeLeave::where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); })->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); })->count(); $response = [ 'data' => $data, 'used_credits' => $usedCredits, 'pendingOrForApprovalCount' => $pendingOrForApprovalCount, ]; return response()->json($response); } public function overtime_request(Request $request) { // $employee_id = $request->input('employee_id'); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $year = $request->input('year'); $status = $request->input('status'); $data = EmployeeOvertime::with([ 'employee' => fn($employee) => $employee->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); }) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date_from', 'date_to', 'from_time', 'to_time', 'hours', 'charge_to', 'attachment', 'description', 'meal', 'transportation', 'status', 'recommending_id', 'approver_id', 'approved_at' ) ->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->get(); // Add first name and last name to each result foreach ($data as $overtime) { $overtime->fname = $overtime->employee->firstname ?? null; $overtime->lname = $overtime->employee->lastname ?? null; // Load recommending and approving as single objects $overtime->recommending = $overtime->recommending()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); $overtime->approving = $overtime->approving()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); } $pendingOrForApprovalCount = EmployeeOvertime::where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); })->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); })->count(); $response = [ 'data' => $data, 'pendingOrForApprovalCount' => $pendingOrForApprovalCount, ]; return response()->json($response); } public function undertime_request(Request $request) { // $employee_id = $request->input('employee_id'); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $year = $request->input('year'); $status = $request->input('status'); $data = EmployeeUndertime::with([ 'employee' => fn($employee) => $employee->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); }) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'from_time', 'to_time', 'hours', 'attachment', 'description', 'status', 'recommending_id', 'approver_id', 'approved_at' ) ->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->get(); // Add first name and last name to each result foreach ($data as $undertime) { $undertime->fname = $undertime->employee->firstname ?? null; $undertime->lname = $undertime->employee->lastname ?? null; // Load recommending and approving as single objects $undertime->recommending = $undertime->recommending()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); $undertime->approving = $undertime->approving()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); } $pendingOrForApprovalCount = EmployeeUndertime::where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); })->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); })->count(); $response = [ 'data' => $data, 'pendingOrForApprovalCount' => $pendingOrForApprovalCount, ]; return response()->json($response); } public function travel_request(Request $request) { // $employee_id = $request->input('employee_id'); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $year = $request->input('year'); $status = $request->input('status'); $data = EmployeeOb::with([ 'employee' => fn($employee) => $employee->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); }) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date_from', 'date_to', 'from_time', 'to_time', 'attachment', 'description', 'destination', 'status', 'recommending_id', 'approver_id', 'approved_at' ) ->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); }); // $data->where(['employee_id' => $employee_id]); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->get(); // Add first name and last name to each result foreach ($data as $travel) { $travel->fname = $travel->employee->firstname ?? null; $travel->lname = $travel->employee->lastname ?? null; // Load recommending and approving as single objects $travel->recommending = $travel->recommending()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); $travel->approving = $travel->approving()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); } $pendingOrForApprovalCount = EmployeeOb::where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); })->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); })->count(); $response = [ 'data' => $data, 'pendingOrForApprovalCount' => $pendingOrForApprovalCount, ]; return response()->json($response); } public function offset_availment_request(Request $request) { // $employee_id = $request->input('employee_id'); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $year = $request->input('year'); $status = $request->input('status'); $data = EmployeeOffset::with([ 'employee' => fn($employee) => $employee->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); }) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date_from', 'date_to', 'days', 'hours', 'attachment', 'description', 'status', 'recommending_id', 'approver_id', 'approved_at', ) ->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); }); $availableOffset = ''; $usedOffset = ''; // $data->where(['employee_id' => $employee_id]); $availableOffset = OffsetRemaining::where('employee_id', '=', $employee_id) ->pluck('remaining'); $usedOffset = EmployeeOffset::select(DB::raw('SUM(hours) as totalOffset')) ->where('employee_id', '=', $employee_id) ->where('status', '!=', '99') ->where('enabled', '=', '1') ->first(); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->get(); // Add first name and last name to each result foreach ($data as $availment) { $availment->fname = $availment->employee->firstname ?? null; $availment->lname = $availment->employee->lastname ?? null; // Load recommending and approving as single objects $availment->recommending = $availment->recommending()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); $availment->approving = $availment->approving()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); } $pendingOrForApprovalCount = EmployeeOffset::where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); })->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); })->count(); $response = [ 'data' => $data, 'available_offset' => $availableOffset, 'offset_used' => $usedOffset, 'pendingOrForApprovalCount' => $pendingOrForApprovalCount, ]; return response()->json($response); } public function offset_earning_request(Request $request) { $employee_id = $request->input('employee_id'); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $year = $request->input('year'); $status = $request->input('status'); $data = EmployeeOffsetEarning::with([ 'employee' => fn($employee) => $employee->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); }) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'hours', 'from_time', 'to_time', 'attachment', 'description', 'status', 'recommending_id', 'approver_id', 'approved_at', ) ->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); }); // $data->where(['employee_id' => $employee_id]); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->get(); // Add first name and last name to each result foreach ($data as $earning) { $earning->fname = $earning->employee->firstname ?? null; $earning->lname = $earning->employee->lastname ?? null; // Load recommending and approving as single objects $earning->recommending = $earning->recommending()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); $earning->approving = $earning->approving()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); } $availableOffset = []; $offsetRemaining = []; $availableOffset = EmployeeOffsetEarning::where([ 'employee_id' => $employee_id, 'enabled' => 1 ]) ->where('status', '=', '2') ->selectRaw('SUM(hours) as total') ->groupBy('employee_offset_earnings.hours') ->first(); $offsetRemaining = OffsetRemaining::where([ 'employee_id' => $employee_id, 'enabled' => 1 ]) ->select('remaining') ->first(); $pendingOrForApprovalCount = EmployeeOffsetEarning::where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); })->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); })->count(); $response = [ 'data' => $data, 'available_offset' => $availableOffset, 'offset_remaining' => $offsetRemaining, 'pendingOrForApprovalCount' => $pendingOrForApprovalCount, ]; return response()->json($response); } public function time_adjustment(Request $request) { $employee_id = $request->input('employee_id'); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $year = $request->input('year'); $status = $request->input('status'); $data = EmployeeTimeAdjustment::with([ 'employee' => fn($employee) => $employee->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), // 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); }) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'in_out', 'time', 'attachment', 'description', 'status', 'recommending_id', 'approver_id', 'approved_at' ) ->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); }); // $data->where(['employee_id' => $employee_id]); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->get(); // Add first name and last name to each result foreach ($data as $time_adjustment) { $time_adjustment->fname = $time_adjustment->employee->firstname ?? null; $time_adjustment->lname = $time_adjustment->employee->lastname ?? null; // Load recommending and approving as single objects $time_adjustment->recommending = $time_adjustment->recommending()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); $time_adjustment->approving = $time_adjustment->approving()->select('employee_id', 'asa_user_id', 'firstname', 'lastname')->first(); } $pendingOrForApprovalCount = EmployeeTimeAdjustment::where(function ($query) use ($employee_id) { $query->where('recommending_id', $employee_id ? $employee_id : '') ->orWhere('approver_id', $employee_id ? $employee_id : ''); })->where(function ($query) use ($employee_id) { $query->where(function ($subQuery) use ($employee_id) { $subQuery->where('recommending_id', $employee_id) ->where('status', 0); }) ->orWhere(function ($subQuery) use ($employee_id) { $subQuery->where('approver_id', $employee_id) ->whereIn('status', [0, 1]); }); })->count(); $response = [ 'data' => $data, 'pendingOrForApprovalCount' => $pendingOrForApprovalCount, ]; return response()->json($response); } public function offset_lists(Request $request) { $employee_id = $request->input('employee_id'); $year = $request->input('year'); $data = EmployeeOffsetEarning::with([ 'employee' => fn($employee) => $employee->select('employee_id', 'asa_user_id', 'firstname', 'lastname') ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'from_time', 'to_time', 'hours', 'attachment', 'description', 'status', 'recommending_id', 'approver_id', 'approved_at', ) ->where('employee_offset_earnings.employee_id', $employee_id); if(!empty($year)){ $data->whereYear('date', $year); } else { $year = date('Y'); $data->whereYear('date', $year); } $data = $data->get(); $totalHours = EmployeeOffsetEarning::where('employee_id', $employee_id) ->where('status', '!=', 99) ->whereYear('date', !empty($year) ? $year : date('Y')) ->sum('hours'); $offsetRemaining = OffsetRemaining::where([ 'employee_id' => $employee_id, 'enabled' => 1 ]) ->select('remaining') ->first(); $response = [ 'data' => $data, 'offset_remaining' => $offsetRemaining, 'total_hours' => $totalHours ]; return response()->json($response); } public function offset_availment_lists(Request $request) { $employee_id = $request->input('employee_id'); $year = $request->input('year'); $data = EmployeeOffset::with([ 'employee' => fn($employee) => $employee->select('employee_id', 'asa_user_id', 'firstname', 'lastname') ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date_from', 'date_to', 'from_time', 'to_time', 'hours', 'attachment', 'description', 'status', 'recommending_id', 'approver_id', 'approved_at', ) ->where('employee_offsets.employee_id', $employee_id); if(!empty($year)){ $data->whereYear('date_from', $year); $data->orWhereYear('date_to', $year); } else { $year = date('Y'); $data->whereYear('date_from', $year); $data->orWhereYear('date_to', $year); } $data = $data->get(); $totalHours = EmployeeOffset::where('employee_id', $employee_id) ->where('status', '!=', 99) ->whereYear('date_from', !empty($year) ? $year : date('Y')) ->orWhereYear('date_to', !empty($year) ? $year : date('Y')) ->sum('hours'); $offsetRemaining = OffsetRemaining::where([ 'employee_id' => $employee_id, 'enabled' => 1 ]) ->select('remaining') ->first(); $response = [ 'data' => $data, 'offset_remaining' => $offsetRemaining, 'total_hours' => $totalHours ]; return response()->json($response); } } PKyŻ.Http/Controllers/API/v1/PassportController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Passport::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('passport_id', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = Passport::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'passport_id' => [ 'required', 'min:2', Rule::unique('passports')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Passport::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Passport::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'passport_id' => [ 'required', 'min:2', Rule::unique('passports')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Passport::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZQyFF.Http/Controllers/API/v1/ApproverController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = OrganizationUnit::with( [ 'dealership' => function ($query) { $query->with([ 'dealership_approver' => function ($dealership_approver) { $dealership_approver->where('type', '=', 'dealership'); }, ]); }, 'group_division' => function ($query) { $query->with([ 'group_division_approver' => function ($group_division_approver) { $group_division_approver->where('type', '=', 'group'); }, ]); }, 'division' => function ($query2) { $query2->with([ 'division_approver' => function ($division_approver) { $division_approver->where('type', '=', 'division'); }, ]); }, 'department' => function ($query3) { $query3->with([ 'department_approver' => function ($department_approver) { $department_approver->where('type', '=', 'department'); }, ]); }, 'section' => function ($query4) { $query4->with([ 'section_approver' => function ($section_approver) { $section_approver->where('type', '=', 'section'); }, ]); }, ]); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function getEmployeeApprover(String $employee_id) { $employee = Employee::where([ 'employee_id' => $employee_id, 'enabled' => 1 ]) ->whereNull('date_resign') ->first(); // dd($employee_id); $approver = []; if($employee->classification_id == 1){ $approver_result = $this->getRankAndFileApprover($employee->employee_id); } else if ($employee->classification_id == 2) { $approver_result = $this->getSupervisorApprover($employee->employee_id); } else if ($employee->classification_id == 3) { $approver_result = $this->getManagerApprover($employee->employee_id); } $imploded_approver = implode(', ', $approver_result['endorser']); $cleanedApproverArray = array_map(function($item) { return str_replace(['["', '"]'], '', $item); }, $approver_result['endorser']); $endorser = Employee::whereIn('employee_id', $cleanedApproverArray)->whereNull('date_resign') ->get(); return response()->json($endorser); } public function getMrfApprover(Request $request) { // dd($request->dealership); $employee = Auth::user(); // dd($employee); $approver = []; if($employee->employees->classification_id == 1){ $approver_result = $this->getRankAndFileApprover($employee->employees->employee_id); } else if ($employee->employees->classification_id == 2) { $approver_result = $this->getSupervisorApprover($employee->employees->employee_id); } else if ($employee->employees->classification_id == 3) { $approver_result = $this->getManagerApprover($employee->employees->employee_id); } $imploded_approver = implode(', ', $approver_result['endorser']); $cleanedApproverArray = array_map(function($item) { return str_replace(['["', '"]'], '', $item); }, $approver_result['endorser']); $endorser = Employee::with('employee_profile')->whereIn('employee_id', $cleanedApproverArray) ->get(); $endorser = $endorser->map(function ($endorser) { if ($endorser->employee_profile && $endorser->employee_profile->attachment) { $endorser->attachment = asset('storage/employee-profile/' . $endorser->employee_profile->attachment); } // Always return the $endorser object return $endorser; }); return response()->json($endorser); } public function getRankAndFileApprover($employee_id) { // get all approver to array then remove the duplicate $approvers = []; $data = Employee::with(['sectionApprover' => function ($query) { $query->where('type', 'section'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->sectionApprover ? $data->sectionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['departmentApprover' => function ($query) { $query->where('type', 'department'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->departmentApprover ? $data->departmentApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['divisionApprover' => function ($query) { $query->where('type', 'division'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->divisionApprover ? $data->divisionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['groupDivisionApprover' => function ($query) { $query->where('type', 'group'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->groupDivisionApprover ? $data->groupDivisionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['dealershipApprover' => function ($query) { $query->where('type', 'dealership'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->dealershipApprover ? $data->dealershipApprover->approvers : 'LOREMIPSUM'; $flattenedApprovers = collect($approvers) ->filter(fn($item) => $item !== 'LOREMIPSUM') ->map(fn($item) => json_decode($item, true)) ->flatten() ->unique() ->toArray(); $currentUser = Auth::user(); // Query the final results $getTheFinalResult = Employee::select('employees.employee_id', 'role_company_access.company_id', 'role_company_access.dealership_id') ->join('users', 'users.employee_id', '=', 'employees.employee_id') ->join('user_roles', 'user_roles.user_id', '=', 'users.id') ->join('role_company_access', 'role_company_access.role_id', '=', 'user_roles.role_id') ->whereIn('employees.employee_id', $flattenedApprovers) ->where('role_company_access.dealership_id', $currentUser->employees->dealer_id) ->whereNull('employees.date_resign') ->get(); $finalApproverIds = $getTheFinalResult->pluck('employee_id')->toArray(); $formattedResult = collect($approvers) ->filter(function ($approver) { return $approver !== 'LOREMIPSUM' && !empty($approver); }) ->map(function ($approver) use ($finalApproverIds) { $ids = json_decode($approver, true); if (is_array($ids)) { return array_intersect($ids, $finalApproverIds); } return []; }) ->flatten() ->unique() ->values() ->map(fn($id) => json_encode([$id])) ->toArray(); // dd($formattedResult); return $result = [ 'endorser' => $formattedResult ]; } public function getSupervisorApprover($employee_id) { // get all approver to array then remove the duplicate $approvers = []; $data = Employee::with(['departmentApprover' => function ($query) { $query->where('type', 'department'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->departmentApprover ? $data->departmentApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['divisionApprover' => function ($query) { $query->where('type', 'division'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->divisionApprover ? $data->divisionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['groupDivisionApprover' => function ($query) { $query->where('type', 'group'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->groupDivisionApprover ? $data->groupDivisionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['dealershipApprover' => function ($query) { $query->where('type', 'dealership'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->dealershipApprover ? $data->dealershipApprover->approvers : 'LOREMIPSUM'; $flattenedApprovers = collect($approvers) ->filter(fn($item) => $item !== 'LOREMIPSUM') ->map(fn($item) => json_decode($item, true)) ->flatten() ->unique() ->toArray(); $currentUser = Auth::user(); // Query the final results $getTheFinalResult = Employee::select('employees.employee_id', 'role_company_access.company_id', 'role_company_access.dealership_id') ->join('users', 'users.employee_id', '=', 'employees.employee_id') ->join('user_roles', 'user_roles.user_id', '=', 'users.id') ->join('role_company_access', 'role_company_access.role_id', '=', 'user_roles.role_id') ->whereIn('employees.employee_id', $flattenedApprovers) ->where('role_company_access.dealership_id', $currentUser->employees->dealer_id) ->whereNull('employees.date_resign') ->get(); $finalApproverIds = $getTheFinalResult->pluck('employee_id')->toArray(); $formattedResult = collect($approvers) ->filter(function ($approver) { return $approver !== 'LOREMIPSUM' && !empty($approver); }) ->map(function ($approver) use ($finalApproverIds) { $ids = json_decode($approver, true); if (is_array($ids)) { return array_intersect($ids, $finalApproverIds); } return []; }) ->flatten() ->unique() ->values() ->map(fn($id) => json_encode([$id])) ->toArray(); return $result = [ 'endorser' => $formattedResult ]; } public function getManagerApprover($employee_id) { // get all approver to array then remove the duplicate $approvers = []; $data = Employee::with(['groupDivisionApprover' => function ($query) { $query->where('type', 'group'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->groupDivisionApprover ? $data->groupDivisionApprover->approvers : 'LOREMIPSUM'; $data = Employee::with(['dealershipApprover' => function ($query) { $query->where('type', 'dealership'); // Add your condition here }]) ->where('employee_id', $employee_id) ->whereNull('date_resign') ->first(); $approvers[] = $data->dealershipApprover ? $data->dealershipApprover->approvers : 'LOREMIPSUM'; // dd($approvers); $flattenedApprovers = collect($approvers) ->filter(fn($item) => $item !== 'LOREMIPSUM') ->map(fn($item) => json_decode($item, true)) ->flatten() ->unique() ->toArray(); $currentUser = Auth::user(); // Query the final results $getTheFinalResult = Employee::select('employees.employee_id', 'role_company_access.company_id', 'role_company_access.dealership_id') ->join('users', 'users.employee_id', '=', 'employees.employee_id') ->join('user_roles', 'user_roles.user_id', '=', 'users.id') ->join('role_company_access', 'role_company_access.role_id', '=', 'user_roles.role_id') ->whereIn('employees.employee_id', $flattenedApprovers) ->where('role_company_access.dealership_id', $currentUser->employees->dealer_id) ->whereNull('employees.date_resign') ->get(); $finalApproverIds = $getTheFinalResult->pluck('employee_id')->toArray(); $formattedResult = collect($approvers) ->filter(function ($approver) { return $approver !== 'LOREMIPSUM' && !empty($approver); }) ->map(function ($approver) use ($finalApproverIds) { $ids = json_decode($approver, true); if (is_array($ids)) { return array_intersect($ids, $finalApproverIds); } return []; }) ->flatten() ->unique() ->values() ->map(fn($id) => json_encode([$id])) ->toArray(); return $result = [ 'endorser' => $formattedResult ]; } public function update(Request $request, int $id) { // dd($id); $data = Approver::where('type_id', '=', $id) ->where('type', '=', $request->type) ->first(); $request['approvers'] = json_encode($request->approvers); // dd($request->all()); if (!$data) { $validator = Validator::make($request->all(), [ 'approvers' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Approver::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } else { $validator = Validator::make($request->all(), [ 'approvers' => [ 'required', ], ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } } PKyZM5Http/Controllers/API/v1/BenefitCategoryController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = BenefitCategory::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'code' => [ 'required', Rule::unique('benefit_categories')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = BenefitCategory::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = BenefitCategory::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'code' => [ 'required', Rule::unique('benefit_categories')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = BenefitCategory::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZi rr6Http/Controllers/API/v1/MedicalConditionController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = MedicalCondition::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('date', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = MedicalCondition::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'date' => [ 'required', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $attachmentName = $this->handleAttachment($request); $request['attachment'] = $attachmentName; // dd($attachmentName); // dd($request->all()); $data = MedicalCondition::create([ 'employee_id' => $request->employee_id, 'date' => $request->date, 'description' => $request->description, 'attachment' => $attachmentName, ]); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request) { $id = $request->id; $data = MedicalCondition::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'date' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'medical-condition/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "medical-condition/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $data->employee_id = $request->employee_id; $data->date = $request->date; $data->description = $request->description == "null" ? NULL : $request->description; $data->attachment = $attachment_name; $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = MedicalCondition::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "medical-condition/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } } PKyZO8Http/Controllers/API/v1/CharacterReferenceController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = CharacterReference::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = CharacterReference::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('character_references')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = CharacterReference::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = CharacterReference::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('character_references')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = CharacterReference::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ^J J 4Http/Controllers/API/v1/EmploymentTypeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmploymentType::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|unique:employment_types,name' ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = EmploymentType::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = EmploymentType::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmploymentType::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZD)A/uZuZ,Http/Controllers/API/v1/ReportController.phpnu[all()); // Mapping module numbers to report generation methods $reportGenerators = [ '1' => 'generateLeaveReport', '2' => 'generateOvertimeReport', '3' => 'generateMasterlistReport', '4' => 'generateSalariesReport', '5' => 'generateRolesReport', '6' => 'generateNoScheduleReport', '7' => 'generateAbsentReport', '8' => 'generateTardinessReport', '9' => 'generateBirthdaysReport', '10' => 'generateUndertimeReport', '11' => 'generateDTRReport', '12' => 'generateTravelReport', '13' => 'generateCompanyBenefitsReport', '14' => 'generateLeaveDetailed', '15' => 'generateContributionReport', '16' => 'generateMrfReport', '17' => 'generateApplicantReport', '18' => 'generatePafReport', '19' => 'generateOvertimeCompanyReport', '20' => 'generateLateApprovalReport', 'changeScheduleReport' => 'generatphpeChangeScheduleReport', 'cwsListReport' => 'generateCwsListReport', 'changeRestDay' => 'generateChangeRestDay', 'timeAdjustment' => 'generateTimeAdjustment', ]; $module = $request->modules; if (array_key_exists($module, $reportGenerators)) { $method = $reportGenerators[$module]; return $this->$method($request); } return response()->json(['message' => 'You need to select a valid module']); } public function generateLeaveReport($request) { DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'from_date' => 'required|date', 'to_date' => 'required|date', 'leave_id' => 'nullable|integer', 'status' => 'nullable|string', ]); // Start the query $query = DB::table('employee_leaves') ->join('employees', 'employee_leaves.employee_id', '=', 'employees.employee_id') ->join('leave_types', 'employee_leaves.leave_id', '=', 'leave_types.id'); // Apply filters if ($request->filled('leave_id')) { $query->where('employee_leaves.leave_id', $request->leave_id); } if ($request->filled('status')) { $query->where('employee_leaves.status', $request->status); } if ($request->filled('from_date') && $request->filled('to_date')) { $fromDate = Carbon::parse($request->from_date)->startOfDay(); $toDate = Carbon::parse($request->to_date)->endOfDay(); $query->whereBetween('employee_leaves.date_from', [$fromDate, $toDate]) ->whereBetween('employee_leaves.date_to', [$fromDate, $toDate]); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Dynamically add columns based on request if (in_array('status', $selectedColumns)) { $transformedColumns[] = DB::raw(" CASE WHEN employee_leaves.status = 0 THEN 'Pending / For Recommendation' WHEN employee_leaves.status = 1 THEN 'For Approval' WHEN employee_leaves.status = 2 THEN 'Approved' ELSE 'Denied' END as status "); } if (in_array('leave_id', $selectedColumns)) { $transformedColumns[] = 'leave_types.name as leave_id'; } if (in_array('without_pay', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_leaves.without_pay = 0 THEN 'No' ELSE 'Yes' END as without_pay"); } if (in_array('half_day', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_leaves.half_day = 0 THEN 'No' ELSE 'Yes' END as half_day"); } if (in_array('description', $selectedColumns)) { $transformedColumns[] = 'employee_leaves.description as description'; } if (in_array('created_at', $selectedColumns)) { $transformedColumns[] = 'employee_leaves.created_at as created_at'; } if (in_array('recommending_id', $selectedColumns)) { $query->leftJoin('employees as recommending_employee', 'employee_leaves.recommending_id', '=', 'recommending_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(recommending_employee.firstname, ' ', recommending_employee.lastname) as recommending_id"); } if (in_array('approver_id', $selectedColumns)) { $query->leftJoin('employees as approver_employee', 'employee_leaves.approver_id', '=', 'approver_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(approver_employee.firstname, ' ', approver_employee.lastname) as approver_id"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = 'employees.employee_id'; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $leaves = $query->get(); // Return the response as JSON return response()->json([ 'data' => $leaves, 'total_hours' => $query->sum('hours'), 'total_days' => $query->sum('days'), ]); } public function generateChangeScheduleReport($request) { DB::enableQueryLog(); $request->validate([ 'start_date' => 'required|date', 'end_date' => 'required|date', ]); $query = DB::table('employee_change_schedules') ->join('employees', 'employee_change_schedules.employee_id', '=', 'employees.employee_id') ->join('employees as recommending', 'employee_change_schedules.recommending_id', '=', 'recommending.employee_id') ->join('employees as approving', 'employee_change_schedules.approver_id', '=', 'approving.employee_id') ->select('employee_change_schedules.employee_id', 'employees.firstname', 'employees.lastname', 'employee_change_schedules.status', 'employee_change_schedules.dayoff', 'employee_change_schedules.from_time', 'employee_change_schedules.to_time', 'recommending.firstname as recommending_firstname', 'recommending.lastname as recommending_lastname', 'approving.firstname as approving_firstname', 'approving.lastname as approving_lastname') ->where('employee_change_schedules.status', 2); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { $employees = Employee::select('employee_id', 'firstname', 'lastname') ->whereIn('employee_id', $request->employee_id) ->get(); } if ($request->company_id) { $query->leftJoin('companies', 'companies.id', '=', 'employees.company_id'); $query->where('employees.company_id', $request->company_id); } if ($request->dealer_id) { $query->leftJoin('dealerships', 'dealerships.id', '=', 'employees.dealer_id'); $query->where('employees.dealer_id', $request->dealer_id); } if ($request->department_id) { $query->leftJoin('departments', 'departments.id', '=', 'employees.department_id'); $query->where('employees.department_id', $request->department_id); } if ($request->filled('date')) { $fromDate = Carbon::parse($request->start_date)->startOfDay(); $toDate = Carbon::parse($request->end_date)->endOfDay(); $query->whereBetween('employee_change_schedules.date', [$fromDate, $toDate]); } return response()->json([ 'data' => $query->get() ]); } public function generateCwsListReport($request) { DB::enableQueryLog(); $request->validate([ 'start_date' => 'required|date', 'end_date' => 'required|date', ]); $query = DB::table('employee_schedules') ->join('employees', 'employee_schedules.employee_id', '=', 'employees.employee_id') ->join('schedule_shifts', 'employee_schedules.schedule_id', '=', 'schedule_shifts.id') ->select('schedule_shifts.name', 'schedule_shifts.from_time', 'schedule_shifts.to_time', 'schedule_shifts.day_off', 'schedule_shifts.cws_from_time' , 'schedule_shifts.cws_to_time', 'schedule_shifts.cws_day', 'employees.firstname', 'employees.lastname', 'employees.employee_id', 'schedule_shifts.day_off' , 'schedule_shifts.cws_day', 'employee_schedules.effectivity_date') ->whereNotNull('schedule_shifts.cws_day'); // dd(DB::getQueryLog()); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { $employees = Employee::select('employee_id', 'firstname', 'lastname') ->whereIn('employee_id', $request->employee_id) ->get(); } if ($request->filled('resign_employee')) { $query->whereNotNull('employees.date_resign'); } else { $query->whereNull('employees.date_resign'); } if ($request->company_id) { $query->leftJoin('companies', 'companies.id', '=', 'employees.company_id'); $query->where('employees.company_id', $request->company_id); } if ($request->dealer_id) { $query->leftJoin('dealerships', 'dealerships.id', '=', 'employees.dealer_id'); $query->where('employees.dealer_id', $request->dealer_id); } if ($request->department_id) { $query->leftJoin('departments', 'departments.id', '=', 'employees.department_id'); $query->where('employees.department_id', $request->department_id); } if ($request->filled('start_date') && $request->filled('end_date')) { $fromDate = Carbon::parse($request->start_date)->startOfDay(); $toDate = Carbon::parse($request->end_date)->endOfDay(); if($request->filled('date') == 1){ $query->whereBetween('employee_schedules.date_from', [$fromDate, $toDate]); } else { $query->whereBetween('employee_schedules.effectivity_date', [$fromDate, $toDate]); } } return response()->json([ 'data' => $query->get() ]); } public function generateChangeRestDay($request) { DB::enableQueryLog(); $request->validate([ 'start_date' => 'required|date', 'end_date' => 'required|date', ]); $query = DB::table('employee_change_schedules') ->join('employees', 'employee_change_schedules.employee_id', '=', 'employees.employee_id') ->join('employees as recommending', 'employee_change_schedules.recommending_id', '=', 'recommending.employee_id') ->join('employees as approving', 'employee_change_schedules.approver_id', '=', 'approving.employee_id') ->select('employee_change_schedules.employee_id', 'employees.firstname', 'employees.lastname', 'employee_change_schedules.status', 'employee_change_schedules.dayoff', 'employee_change_schedules.from_time', 'employee_change_schedules.to_time', 'recommending.firstname as recommending_firstname', 'recommending.lastname as recommending_lastname', 'approving.firstname as approving_firstname', 'approving.lastname as approving_lastname', 'employee_change_schedules.date') ->where('employee_change_schedules.dayoff', 1) ->where('employee_change_schedules.status', 2); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { $employees = Employee::select('employee_id', 'firstname', 'lastname') ->whereIn('employee_id', $request->employee_id) ->get(); } if ($request->filled('resign_employee')) { $query->whereNotNull('employees.date_resign'); } else { $query->whereNull('employees.date_resign'); } if ($request->company_id) { $query->leftJoin('companies', 'companies.id', '=', 'employees.company_id'); $query->where('employees.company_id', $request->company_id); } if ($request->dealer_id) { $query->leftJoin('dealerships', 'dealerships.id', '=', 'employees.dealer_id'); $query->where('employees.dealer_id', $request->dealer_id); } if ($request->department_id) { $query->leftJoin('departments', 'departments.id', '=', 'employees.department_id'); $query->where('employees.department_id', $request->department_id); } if ($request->filled('start_date') && $request->filled('end_date')) { $fromDate = Carbon::parse($request->start_date)->startOfDay(); $toDate = Carbon::parse($request->end_date)->endOfDay(); $query->whereBetween('employee_change_schedules.date', [$fromDate, $toDate]); } return response()->json([ 'data' => $query->get() ]); } public function generateTimeAdjustment($request) { DB::enableQueryLog(); $request->validate([ 'start_date' => 'required|date', 'end_date' => 'required|date', ]); $query = DB::table('employee_time_adjustments') ->join('employees', 'employee_time_adjustments.employee_id', '=', 'employees.employee_id') ->join('employees as recommending', 'employee_time_adjustments.recommending_id', '=', 'recommending.employee_id') ->join('employees as approving', 'employee_time_adjustments.approver_id', '=', 'approving.employee_id') ->select('employee_time_adjustments.employee_id', 'employees.firstname', 'employees.lastname', 'employee_time_adjustments.status', 'employee_time_adjustments.in_out', 'employee_time_adjustments.time', 'recommending.firstname as recommending_firstname', 'recommending.lastname as recommending_lastname', 'approving.firstname as approving_firstname', 'approving.lastname as approving_lastname', 'employee_time_adjustments.date'); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { $employees = Employee::select('employee_id', 'firstname', 'lastname') ->whereIn('employee_id', $request->employee_id) ->get(); } if ($request->company_id) { $query->leftJoin('companies', 'companies.id', '=', 'employees.company_id'); $query->where('employees.company_id', $request->company_id); } if ($request->dealer_id) { $query->leftJoin('dealerships', 'dealerships.id', '=', 'employees.dealer_id'); $query->where('employees.dealer_id', $request->dealer_id); } if ($request->filled('start_date') && $request->filled('end_date')) { $fromDate = Carbon::parse($request->start_date)->startOfDay(); $toDate = Carbon::parse($request->end_date)->endOfDay(); $query->whereBetween('employee_time_adjustments.date', [$fromDate, $toDate]); } return response()->json([ 'data' => $query->get() ]); } public function generateOvertimeReport($request) { // dd($request->all()); // Validate the request DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'from_date' => 'required|date', 'to_date' => 'required|date', 'charge_to' => 'nullable|integer', 'status' => 'nullable|string', ]); // Start the query $query = DB::table('employee_overtimes') ->join('employees', 'employee_overtimes.employee_id', '=', 'employees.employee_id') ->leftjoin('companies', 'employee_overtimes.charge_to', '=', 'companies.id'); // Apply filters if ($request->filled('charge_to')) { $query->where('employee_overtimes.charge_to', $request->charge_to); } if ($request->filled('status')) { $query->where('employee_overtimes.status', $request->status); } if ($request->filled('from_date') && $request->filled('to_date')) { $fromDate = Carbon::parse($request->from_date)->startOfDay(); $toDate = Carbon::parse($request->to_date)->endOfDay(); $query->whereBetween('employee_overtimes.date_from', [$fromDate, $toDate]); $query->whereBetween('employee_overtimes.date_to', [$fromDate, $toDate]); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Conditionally include status if 'status' is in $columns if (in_array('status', $selectedColumns)) { $transformedColumns[] = DB::raw(" CASE WHEN employee_overtimes.status = 0 THEN 'Pending / For Recommendation' WHEN employee_overtimes.status = 1 THEN 'For Approval' WHEN employee_overtimes.status = 2 THEN 'Approved' ELSE 'Denied' END as status "); } // Handle transformed columns dynamically if (in_array('charge_to', $selectedColumns)) { $transformedColumns[] = 'companies.name as charge_to'; } if (in_array('meal', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_overtimes.meal = 0 THEN 'No' ELSE 'Yes' END as meal"); } if (in_array('transportation', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_overtimes.transportation = 0 THEN 'No' ELSE 'Yes' END as transportation"); } if (in_array('description', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_overtimes.description as description'); } if (in_array('created_at', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_overtimes.created_at as created_at'); } // Conditionally join employees for recommending_id if (in_array('recommending_id', $selectedColumns)) { $query->leftJoin('employees as recommending_employee', 'employee_overtimes.recommending_id', '=', 'recommending_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(recommending_employee.firstname, ' ', recommending_employee.lastname) as recommending_id"); } // Conditionally join employees for approver_id if (in_array('approver_id', $selectedColumns)) { $query->leftJoin('employees as approver_employee', 'employee_overtimes.approver_id', '=', 'approver_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(approver_employee.firstname, ' ', approver_employee.lastname) as approver_id"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $overtime = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $overtime, 'total_hours' => $query->sum('hours'), // This line can also be used if not grouping ]); } public function generateMasterlistReport($request) { DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'date_hired_from' => 'required|date', 'date_hired_to' => 'required|date' ]); $query = DB::table('employees') ->join('personal_information', 'personal_information.employee_id', '=', 'employees.employee_id', 'left') ->whereNull('employees.date_resign'); if ($request->filled('date_hired_from') && $request->filled('date_hired_to')) { $fromDate = Carbon::parse($request->date_hired_from)->startOfDay(); $toDate = Carbon::parse($request->date_hired_to)->endOfDay(); $query->whereBetween('employees.date_hired', [$fromDate, $toDate]); } $personalInformationColumns = ['age', 'gender', 'religion', 'tin', 'philhealth', 'citizenship', 'sss', 'pagibig', 'civil_status', 'hair_color', 'blood_type', 'eye_color', 'height', 'weight']; $selectedColumns = array_map(function($column) use ($personalInformationColumns) { if (in_array($column, $personalInformationColumns)) { return 'personal_information.' . $column; } return 'employees.' . $column; }, $request->columns); $transformedColumns = []; if (in_array('employees.company_id', $selectedColumns)) { $query->leftJoin('companies', 'companies.id', '=', 'employees.company_id'); $transformedColumns[] = DB::raw("companies.name as company_id"); if ($request->company_id) { $query->where('employees.company_id', $request->company_id); } } if (in_array('employees.position_id', $selectedColumns)) { $query->leftJoin('job_titles', 'job_titles.id', '=', 'employees.position_id'); $transformedColumns[] = DB::raw("job_titles.name as position_id"); } if (in_array('employees.dealer_id', $selectedColumns)) { $query->leftJoin('dealerships', 'dealerships.id', '=', 'employees.dealer_id'); $transformedColumns[] = DB::raw("dealerships.name as dealer_id"); if ($request->dealer_id) { $query->where('employees.companydealer_id_id', $request->dealer_id); } } if (in_array('employees.classification_id', $selectedColumns)) { $query->leftJoin('job_classifications', 'job_classifications.id', '=', 'employees.classification_id'); $transformedColumns[] = DB::raw("job_classifications.name as classification_id"); } if (in_array('employees.employment_status_id', $selectedColumns)) { $query->leftJoin('employment_types', 'employment_types.id', '=', 'employees.employment_status_id'); $transformedColumns[] = DB::raw("employment_types.name as employment_status_id"); } if (in_array('employees.group_id', $selectedColumns)) { $query->leftJoin('groups', 'groups.id', '=', 'employees.group_id'); $transformedColumns[] = DB::raw("groups.name as group_id"); } if (in_array('employees.division_id', $selectedColumns)) { $query->leftJoin('divisions', 'divisions.id', '=', 'employees.division_id'); $transformedColumns[] = DB::raw("divisions.name as division_id"); } if (in_array('employees.department_id', $selectedColumns)) { $query->leftJoin('departments', 'departments.id', '=', 'employees.department_id'); $transformedColumns[] = DB::raw("departments.name as department_id"); } if (in_array('employees.section_id', $selectedColumns)) { $query->leftJoin('sections', 'sections.id', '=', 'employees.section_id'); $transformedColumns[] = DB::raw("sections.name as section_id"); } if (in_array('employees.office_id', $selectedColumns)) { $query->leftJoin('offices', 'offices.id', '=', 'employees.office_id'); $transformedColumns[] = DB::raw("offices.name as office_id"); } if (in_array('employees.unit_id', $selectedColumns)) { $query->leftJoin('units', 'units.id', '=', 'employees.unit_id'); $transformedColumns[] = DB::raw("units.name as unit_id"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $masterlist = $query->get(); // dd($transformedColumns); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $masterlist, ]); } public function generateSalariesReport($request) { // Validate the request DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'salary_effectivity_date' => 'required|date', ]); // Start the query $query = DB::table('salary_and_wages') ->join('employees', 'salary_and_wages.employee_id', '=', 'employees.employee_id'); if ($request->filled('salary_effectivity_date')) { $fromDate = Carbon::parse($request->salary_effectivity_date)->startOfDay(); $query->where('salary_and_wages.salary_effectivity_date', '>=', $fromDate); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Handle transformed columns dynamically if ($request->filled('payroll_rate')) { $query->where('salary_and_wages.payroll_rate', $request->payroll_rate); } if ($request->filled('salary_rate')) { $query->whereBetween('salary_and_wages.salary_rate', [$request->salary_rate['min'], $request->salary_rate['max']]); } if ($request->filled('payment_type')) { $query->where('salary_and_wages.payment_type', $request->payment_type); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $salaries = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $salaries ]); } public function generateRolesReport(Request $request) { // Enable query logging for debugging DB::enableQueryLog(); // Validate the request $request->validate([ 'columns' => 'required|array', ]); // Start building the query $query = DB::table('employees') ->join('users', 'employees.employee_id', '=', 'users.employee_id') ->join('user_roles', 'users.id', '=', 'user_roles.user_id') ->join('roles', 'user_roles.role_id', '=', 'roles.id') ->join('role_permissions', 'roles.id', '=', 'role_permissions.role_id') ->join('permissions', 'role_permissions.permission_id', '=', 'permissions.id') ->join('modules', 'role_permissions.module_id', '=', 'modules.id') ->join('menus', 'modules.menu_id', '=', 'menus.id') ->where('modules.system_id', 3) ->where('menus.enabled', 1) ->where('users.employee_id', '!=', 'sadmin') ->groupBy('roles.id', 'roles.name', 'modules.id', 'modules.name', 'menus.system_id', 'employees.firstname', 'employees.lastname', 'employees.employee_id'); if ($request->company_id) { $query->where('employees.company_id', $request->company_id); } if ($request->dealer_id) { $query->where('employees.dealer_id', $request->dealer_id); } // Selected columns from the request $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; if (in_array('roles_name', $selectedColumns)) { $transformedColumns[] = DB::raw("roles.name as roles_name"); } if (in_array('menu_name', $selectedColumns)) { $transformedColumns[] = DB::raw("menus.name as menu_name"); } if (in_array('menu_description', $selectedColumns)) { $transformedColumns[] = DB::raw("modules.description as menu_description"); } // Always include these columns $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; // Add the GROUP_CONCAT for permissions $transformedColumns[] = DB::raw("GROUP_CONCAT(DISTINCT permissions.name ORDER BY permissions.id SEPARATOR ', ') as menu_permission"); // Filter out unwanted columns $excludedColumns = ['description', 'created_at']; $selectedColumns = array_diff($selectedColumns, $excludedColumns); // Add transformed columns to the query $query->select(array_merge($transformedColumns)); $query->orderBy('employees.lastname', 'ASC'); $query->orderBy('employees.employee_id', 'ASC'); // Execute the query and get results $roles = $query->get(); // Optional: Uncomment this to view the executed SQL query // dd(DB::getQueryLog()); // Return the results as JSON return response()->json([ 'data' => $roles, ]); } public function generateNoScheduleReport($request) { DB::enableQueryLog(); $query = DB::table('employees') ->leftJoin('employee_schedules', 'employees.employee_id', '=', 'employee_schedules.employee_id') ->where('employee_schedules.employee_id', NULL) ->where('employees.enabled', 1); $transformedColumns = []; if ($request->company_id) { $query->leftJoin('companies', 'companies.id', '=', 'employees.company_id'); $query->where('employees.company_id', $request->company_id); } if ($request->dealer_id) { $query->leftJoin('dealerships', 'dealerships.id', '=', 'employees.dealer_id'); $query->where('employees.dealer_id', $request->dealer_id); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; $query->select($transformedColumns); $noSchedule = $query->get(); // Return the response as JSON return response()->json([ 'data' => $noSchedule ]); } public function generateAbsentReport($request) { set_time_limit(300); // Prevents timeout DB::enableQueryLog(); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { // Fetch employees individually $employees = Employee::select('employee_id', 'firstname', 'lastname') ->whereIn('employee_id', $request->employee_id) ->whereNull('date_resign') ->get(); } else { $employeeList = Employee::where('enabled', 1) ->whereNull('date_resign'); if ($request->company_id) { $employeeList->where('company_id', $request->company_id); } if ($request->dealer_id) { $employeeList->where('dealer_id', $request->dealer_id); } // Get all employees that match the criteria $employees = $employeeList->select('employee_id', 'firstname', 'lastname')->get(); } $employeeAttendance = new EmployeeAttendanceController(); $start_date = new DateTime($request->start_date); $end_date = new DateTime($request->end_date); $end_date->modify('+1 day'); $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $data = []; foreach ($employees as $employee) { $employeeData = []; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $timelogs = $employeeAttendance->getTimelog($formattedDate, $employee->time_keeping_id); $schedule = $employeeAttendance->getSchedule($formattedDate, $employee->employee_id); $holiday = $employeeAttendance->getHoliday($formattedDate, $employee, $schedule); $leave = $employeeAttendance->getLeave($formattedDate, $employee->employee_id); $absent = $employeeAttendance->addAbsenceData($employeeData, $timelogs, $leave, $holiday, $schedule, $formattedDate); if ($absent) { $employeeData[] = $formattedDate; } } $data[] = [ 'employee_id' => $employee->employee_id, 'firstname' => $employee->firstname, 'lastname' => $employee->lastname, 'absent' => $employeeData, ]; } return response()->json([ 'data' => $data ]); } public function generateTardinessReport($request) { DB::enableQueryLog(); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { // Fetch employees individually $employees = Employee::select('employee_id', 'firstname', 'lastname') ->whereIn('employee_id', $request->employee_id) ->get(); } else { $employeeList = Employee::where('enabled', 1); if ($request->company_id) { $employeeList->where('company_id', $request->company_id); } if ($request->dealer_id) { $employeeList->where('dealer_id', $request->dealer_id); } // Get all employees that match the criteria $employees = $employeeList->select('employee_id', 'firstname', 'lastname')->get(); } $employeeAttendance = new EmployeeAttendanceController(); $start_date = new DateTime($request->start_date); $end_date = new DateTime($request->end_date); $end_date->modify('+1 day'); $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $data = []; foreach ($employees as $employee) { $employeeData = []; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $timelogs = $employeeAttendance->getTimelog($formattedDate, $employee->employee_id); $schedule = $employeeAttendance->getSchedule($formattedDate, $employee->employee_id); $leave = $employeeAttendance->getLeave($formattedDate, $employee->employee_id); $halfDayLeave = $leave && $leave->half_day == 1; $ob = $employeeAttendance->getOB($formattedDate, $employee->employee_id); $offsetAvailment = $employeeAttendance->getOffsetAvailment($formattedDate, $employee->employee_id); $tardiness = $employeeAttendance->getTardiness($timelogs, $schedule, $halfDayLeave, $ob, $offsetAvailment, $employee->classification_id); if ($tardiness) { $employeeData[] = $formattedDate.'|'.$tardiness; } } $data[] = [ 'employee_id' => $employee->employee_id, 'firstname' => $employee->firstname, 'lastname' => $employee->lastname, 'tardiness' => $employeeData, ]; } return response()->json([ 'data' => $data ]); } public function generateBirthdaysReport($request) { $employeeList = Employee::where('employees.enabled', 1) ->join('personal_information', 'employees.employee_id', '=', 'personal_information.employee_id'); if ($request->company_id) { $employeeList->where('company_id', $request->company_id); } if ($request->dealer_id) { $employeeList->where('dealer_id', $request->dealer_id); } $employees = $employeeList->select('employees.employee_id', 'firstname', 'lastname', 'birth_date') ->whereRaw('MONTH(birth_date) IN (' . implode(',', $request->month) . ')') ->get(); return response()->json([ 'data' => $employees ]); } public function generateMrfReport($request) { $mrfList = Mrf::with([ 'company', 'jobtitle', 'employmenttype', 'requestor', 'recommendor', 'endorser', 'approver', 'employee', 'nature', 'job_classification' ])->where('enabled', 1); if ($request->status_id) { $mrfList->where('status', $request->status_id); } if ($request->company_id) { $mrfList->where('company_id', $request->company_id); } if ($request->job_title_id) { $mrfList->where('job_title', $request->job_title_id); } if ($request->job_classification_id) { $mrfList->where('classification', $request->job_classification_id); } if ($request->type_id) { $mrfList->where('nature_of_request', $request->type_id); } if ($request->filled('start_date') && $request->filled('end_date')) { $fromDate = Carbon::parse($request->start_date)->startOfDay(); $toDate = Carbon::parse($request->end_date)->endOfDay(); $mrfList->whereBetween('mrf.created_at', [$fromDate, $toDate]); } $mrfList = $mrfList->get(); return response()->json([ 'data' => $mrfList ]); } public function generatePafReport($request) { DB::enableQueryLog(); $data = PersonnelActionForm::with([ 'employee', 'type_of_movement', 'requestor', 'recommendor', 'endorser', 'approver', 'unit', ])->select('personnel_action_forms.id', 'jt_prev.name as prev_position_name', 'jt_next.name as next_position_name', 'personnel_action_forms.*') ->join('job_titles as jt_prev', 'personnel_action_forms.position_id', '=', 'jt_prev.id') ->join('job_titles as jt_next', 'personnel_action_forms.position' , '=', 'jt_next.id'); if ($request->employee_id) { $data->whereHas('employee', function ($query) use ($request) { $query->where('employee_id', $request->employee_id); }); } if ($request->status_id) { $data->where('status', $request->status_id); } if ($request->company_id) { $data->whereHas('employee', function ($query) use ($request) { $query->where('company_id', $request->company_id); }); $data->where('company_id', $request->company_id); } if ($request->company_id) { $data->whereHas('employee', function ($query) use ($request) { $query->where('classification_id', $request->job_classification_id); }); } if ($request->dealer_id) { $data->whereHas('employee', function ($query) use ($request) { $query->where('dealer_id', $request->dealer_id); }); } if ($request->division_id) { $data->whereHas('employee', function ($query) use ($request) { $query->where('division_id', $request->division_id); }); } if ($request->department_id) { $data->whereHas('employee', function ($query) use ($request) { $query->where('department_id', $request->department_id); }); } if ($request->section_id) { $data->whereHas('employee', function ($query) use ($request) { $query->where('section_id', $request->section_id); }); } if ($request->filled('start_date') && $request->filled('end_date')) { $fromDate = Carbon::parse($request->start_date)->startOfDay(); $toDate = Carbon::parse($request->end_date)->endOfDay(); $data->whereBetween('personnel_action_forms.created_at', [$fromDate, $toDate]); } // dd(DB::getQueryLog()); $mrfList = $data->get(); return response()->json([ 'data' => $mrfList ]); } public function generateApplicantReport($request) { // dd($request->priceRange[0]); DB::enableQueryLog(); $mrfList = Applicant::with([ 'mrf' ])->where('enabled', 1); if ($request->status_id) { $mrfList->where('status', $request->status_id); } if ($request->job_title_id) { $mrfList->whereHas('mrf', function ($query) use ($request) { $query->where('job_title', $request->job_title_id); }); } $mrfList->whereBetween('last_salary', [$request->priceRange[0], $request->priceRange[1]]); $mrfList = $mrfList->get(); // dd(DB::getQueryLog()); return response()->json([ 'data' => $mrfList ]); } public function generateUndertimeReport($request) { DB::enableQueryLog(); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { $employees = Employee::select('employee_id', 'firstname', 'lastname') ->whereIn('employee_id', $request->employee_id) ->get(); } else { $employeeList = Employee::where('enabled', 1); if ($request->company_id) { $employeeList->where('company_id', $request->company_id); } if ($request->dealer_id) { $employeeList->where('dealer_id', $request->dealer_id); } // Get all employees that match the criteria $employees = $employeeList->select('employee_id', 'firstname', 'lastname')->get(); } $employeeAttendance = new EmployeeAttendanceController(); $start_date = new DateTime($request->start_date); $end_date = new DateTime($request->end_date); $end_date->modify('+1 day'); $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $data = []; foreach ($employees as $employee) { $employeeData = []; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $timelogs = $employeeAttendance->getTimelog($formattedDate, $employee->employee_id); $schedule = $employeeAttendance->getSchedule($formattedDate, $employee->employee_id); $ob = $employeeAttendance->getOB($formattedDate, $employee->employee_id); $workSuspension = $employeeAttendance->getWorkSuspension($formattedDate); $wfhRecord = EmployeeWfh::whereNotNull('attachment')->where(['employee_id'=> $employee->employee_id, 'date'=>$formattedDate, 'status'=>2, 'validated'=>1])->first(); $leave = $employeeAttendance->getLeave($formattedDate, $employee->employee_id); $offsetAvailment = $employeeAttendance->getOffsetAvailment($formattedDate, $employee->employee_id); $halfDayLeave = $leave && $leave->half_day == 1; $undertime = $employeeAttendance->getUndertime($timelogs, $schedule, $workSuspension, $formattedDate, $ob, $offsetAvailment, $wfhRecord, $halfDayLeave); if ($undertime) { $employeeData[] = $formattedDate.'|'.$undertime; } } $data[] = [ 'employee_id' => $employee->employee_id, 'firstname' => $employee->firstname, 'lastname' => $employee->lastname, 'undertime' => $employeeData, ]; } return response()->json([ 'data' => $data ]); } public function generateDTRReport($request) { $end_date = date('Y-m-d', strtotime($request->end_date . '+1 day')); $employeeQuery = Employee::select('employee_id', 'firstname', 'lastname', 'company_id', 'dealer_id') ->with([ 'timelog' => function ($query) use ($request, $end_date) { $query->whereBetween('datetimelog', [$request->start_date, $end_date]); }, 'company:id,name', 'dealership:id,name', ]) ->where('enabled', 1); if ($request->filled('employee_id') && is_array($request->employee_id)) { $employeeQuery->whereIn('employee_id', $request->employee_id); } else { if ($request->filled('company_id')) { $employeeQuery->where('company_id', $request->company_id); } if ($request->filled('dealer_id')) { $employeeQuery->where('dealer_id', $request->dealer_id); } } $results = []; $employeeQuery->chunk(100, function ($employees) use (&$results) { foreach ($employees as $employee) { $results[] = $employee; } }); return response()->json([ 'data' => $results, ]); } public function generateTravelReport($request) { DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'from_date' => 'required|date', 'to_date' => 'required|date', 'status' => 'nullable|string', ]); // Start the query $query = DB::table('employee_obs') ->join('employees', 'employee_obs.employee_id', '=', 'employees.employee_id'); if ($request->company_id) { $query->where('employees.company_id', $request->company_id); } if ($request->dealer_id) { $query->where('employees.dealer_id', $request->dealer_id); } if ($request->filled('status')) { $query->where('employee_obs.status', $request->status); } if ($request->filled('from_date') && $request->filled('to_date')) { $fromDate = Carbon::parse($request->from_date)->startOfDay(); $toDate = Carbon::parse($request->to_date)->endOfDay(); $query->whereBetween('employee_obs.date_from', [$fromDate, $toDate]); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Conditionally include status if 'status' is in $columns if (in_array('status', $selectedColumns)) { $transformedColumns[] = DB::raw(" CASE WHEN employee_obs.status = 0 THEN 'Pending / For Recommendation' WHEN employee_obs.status = 1 THEN 'For Approval' WHEN employee_obs.status = 2 THEN 'Approved' ELSE 'Denied' END as status "); } if (in_array('date_from', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_obs.date_from as date_from'); } if (in_array('date_to', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_obs.date_to as date_to'); } if (in_array('description', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_obs.description as description'); } if (in_array('created_at', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_obs.created_at as created_at'); } // Conditionally join employees for recommending_id if (in_array('recommending_id', $selectedColumns)) { $query->leftJoin('employees as recommending_employee', 'employee_obs.recommending_id', '=', 'recommending_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(recommending_employee.firstname, ' ', recommending_employee.lastname) as recommending_id"); } // Conditionally join employees for approver_id if (in_array('approver_id', $selectedColumns)) { $query->leftJoin('employees as approver_employee', 'employee_obs.approver_id', '=', 'approver_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(approver_employee.firstname, ' ', approver_employee.lastname) as approver_id"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'date_from'; }); $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'date_to'; }); $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $ob = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $ob, ]); } public function generateCompanyBenefitsReport($request) { $data = []; $employeeCountPerCompany = DB::table('employees as e') ->join('companies as c', 'e.company_id', '=', 'c.id') ->select('c.id', 'c.name', 'c.code', DB::raw('COUNT(e.company_id) as employee_count_per_company')) ->where('e.enabled', 1) ->groupBy('c.name', 'e.company_id') ->get(); foreach($employeeCountPerCompany as $company){ $data[$company->id]['company_id'] = $request->id; $data[$company->id]['company_name'] = $company->name; $data[$company->id]['company_code'] = $company->code; $data[$company->id]['employee_count'] = $company->employee_count_per_company; $employeeQuery = Employee::select('employee_id')->where('company_id', $request->id); $employee_ids = $employeeQuery->pluck('employee_id'); $vacation_counts = EmployeeLeave::where('leave_id', 2) ->whereIn('employee_id', $employee_ids) ->selectRaw(' SUM(CASE WHEN without_pay = 0 THEN days ELSE 0 END) as total_vl_wp, SUM(CASE WHEN without_pay = 1 THEN days ELSE 0 END) as total_vl_wop ') ->whereRaw('MONTH(date_from) IN (' . implode(',', $request->month) . ')') ->where('status', 2) ->first(); // TOTAL FOR VACATION LEAVE $data[$company->id]['total_vl_wp'] = $vacation_counts->total_vl_wp; $data[$company->id]['total_vl_wop'] = $vacation_counts->total_vl_wop; $sick_counts = EmployeeLeave::where('leave_id', 3) ->whereIn('employee_id', $employee_ids) ->selectRaw(' SUM(CASE WHEN without_pay = 0 THEN days ELSE 0 END) as total_sl_wp, SUM(CASE WHEN without_pay = 1 THEN days ELSE 0 END) as total_sl_wop ') ->whereRaw('MONTH(date_from) IN (' . implode(',', $request->month) . ')') ->where('status', 2) ->first(); // TOTAL FOR SICK LEAVE $data[$company->id]['total_sl_wp'] = $sick_counts->total_sl_wp; $data[$company->id]['total_sl_wop'] = $sick_counts->total_sl_wop; // TOTAL BEREAVEMENT LEAVE $data[$company->id]['total_bl_wop'] = 0; $total_amount_of_benefits = DB::table('employees as e') ->join('employee_benefits as eb', 'e.employee_id', '=', 'eb.employee_id') ->selectRaw(' SUM(CASE WHEN benefits_type_id = 3 THEN eb.amount ELSE 0 END) as meal_total, SUM(CASE WHEN benefits_type_id = 2 THEN eb.amount ELSE 0 END) as transpo_total, SUM(CASE WHEN benefits_type_id = 5 THEN eb.amount ELSE 0 END) as transpo_subsidy_total, SUM(CASE WHEN benefits_type_id = 17 THEN eb.amount ELSE 0 END) as transpo_allowance_total, SUM(CASE WHEN benefits_type_id = 18 THEN eb.amount ELSE 0 END) as company_car_total, SUM(CASE WHEN benefits_type_id = 19 THEN eb.amount ELSE 0 END) as gas_allowance_total, SUM(CASE WHEN benefits_type_id = 20 THEN eb.amount ELSE 0 END) as parking_total, SUM(CASE WHEN benefits_type_id = 21 THEN eb.amount ELSE 0 END) as company_uniform_total, SUM(CASE WHEN benefits_type_id = 22 THEN eb.amount ELSE 0 END) as sm_uniform_total, SUM(CASE WHEN benefits_type_id = 23 THEN eb.amount ELSE 0 END) as hmo_total, SUM(CASE WHEN benefits_type_id = 24 THEN eb.amount ELSE 0 END) as first_aid_total, SUM(CASE WHEN benefits_type_id = 25 THEN eb.amount ELSE 0 END) as ligpai_total, SUM(CASE WHEN benefits_type_id = 26 THEN eb.amount ELSE 0 END) as calamity_assistance_total, SUM(CASE WHEN benefits_type_id = 27 THEN eb.amount ELSE 0 END) as bereavement_assistance_total, SUM(CASE WHEN benefits_type_id = 28 THEN eb.amount ELSE 0 END) as intereset_fee_total, SUM(CASE WHEN benefits_type_id = 29 THEN eb.amount ELSE 0 END) as laptop_prog_total, SUM(CASE WHEN benefits_type_id = 30 THEN eb.amount ELSE 0 END) as company_outing_total, SUM(CASE WHEN benefits_type_id = 31 THEN eb.amount ELSE 0 END) as com_allowance_total, SUM(CASE WHEN benefits_type_id = 32 THEN eb.amount ELSE 0 END) as stay_in_total, SUM(CASE WHEN benefits_type_id = 33 THEN eb.amount ELSE 0 END) as shuttle_service_total ') ->where('e.enabled', 1) ->where('e.company_id', $request->id) ->whereMonth('eb.date_from', $request->month) ->first(); foreach($total_amount_of_benefits as $key => $amount_of_benefits){ $data[$company->id][$key] = $amount_of_benefits; } } return response()->json([ 'data' => array_values($data) ]); } public function generateLeaveDetailed($request) { $data = []; $employeeCountPerCompany = DB::table('employees as e') ->join('companies as c', 'e.company_id', '=', 'c.id') ->select('c.id', 'c.name', 'c.code', DB::raw('COUNT(e.company_id) as employee_count_per_company')) ->where('e.enabled', 1) ->groupBy('c.name', 'e.company_id') ->get(); foreach($employeeCountPerCompany as $company){ $data[$company->id]['company_id'] = $request->id; $data[$company->id]['company_name'] = $company->name; $data[$company->id]['company_code'] = $company->code; $data[$company->id]['employee_count'] = $company->employee_count_per_company; $employeeQuery = Employee::select('employee_id')->where('company_id', $request->id); $employee_ids = $employeeQuery->pluck('employee_id'); $vacation_counts = EmployeeLeave::where('leave_id', 2) ->whereIn('employee_id', $employee_ids) ->selectRaw(' SUM(CASE WHEN without_pay = 0 THEN days ELSE 0 END) as total_vl_wp, SUM(CASE WHEN without_pay = 1 THEN days ELSE 0 END) as total_vl_wop ') ->whereRaw('MONTH(date_from) IN (' . implode(',', $request->month) . ')') ->where('status', 2) ->first(); // TOTAL FOR VACATION LEAVE $data[$company->id]['total_vl_wp'] = $vacation_counts->total_vl_wp; $data[$company->id]['total_vl_wop'] = $vacation_counts->total_vl_wop; $sick_counts = EmployeeLeave::where('leave_id', 3) ->whereIn('employee_id', $employee_ids) ->selectRaw(' SUM(CASE WHEN without_pay = 0 THEN days ELSE 0 END) as total_sl_wp, SUM(CASE WHEN without_pay = 1 THEN days ELSE 0 END) as total_sl_wop ') ->whereRaw('MONTH(date_from) IN (' . implode(',', $request->month) . ')') ->where('status', 2) ->first(); // TOTAL FOR SICK LEAVE $data[$company->id]['total_sl_wp'] = $sick_counts->total_sl_wp; $data[$company->id]['total_sl_wop'] = $sick_counts->total_sl_wop; // TOTAL BEREAVEMENT LEAVE $data[$company->id]['total_bl_wop'] = 0; $vacation_reason_counts = EmployeeLeave::whereIn('employee_id', $employee_ids) ->selectRaw(' COUNT(CASE WHEN leave_reason_id = 1 THEN 1 ELSE NULL END) as total_personal_vl, COUNT(CASE WHEN leave_reason_id = 2 THEN 1 ELSE NULL END) as total_fr_vl, COUNT(CASE WHEN leave_reason_id = 3 THEN 1 ELSE NULL END) as total_rl_vl, COUNT(CASE WHEN leave_reason_id = 4 THEN 1 ELSE NULL END) as total_emergency_vl, COUNT(CASE WHEN leave_reason_id = 5 THEN 1 ELSE NULL END) as total_others_vl, COUNT(CASE WHEN leave_reason_id = 6 THEN 1 ELSE NULL END) as total_cd_sl, COUNT(CASE WHEN leave_reason_id = 7 THEN 1 ELSE NULL END) as total_msp_sl, COUNT(CASE WHEN leave_reason_id = 8 THEN 1 ELSE NULL END) as total_rd_sl, COUNT(CASE WHEN leave_reason_id = 9 THEN 1 ELSE NULL END) as total_eent_sl, COUNT(CASE WHEN leave_reason_id = 10 THEN 1 ELSE NULL END) as total_idi_sl, COUNT(CASE WHEN leave_reason_id = 11 THEN 1 ELSE NULL END) as total_hf_sl, COUNT(CASE WHEN leave_reason_id = 12 THEN 1 ELSE NULL END) as total_or_sl, COUNT(CASE WHEN leave_reason_id = 13 THEN 1 ELSE NULL END) as total_dr_sl, COUNT(CASE WHEN leave_reason_id = 14 THEN 1 ELSE NULL END) as total_others_sl ') ->whereRaw('MONTH(date_from) IN (' . implode(',', $request->month) . ')') ->where('status', 2) ->first(); // TOTAL FOR VACATION LEAVE REASON $data[$company->id]['total_personal_vl'] = $vacation_reason_counts->total_personal_vl; $data[$company->id]['total_fr_vl'] = $vacation_reason_counts->total_fr_vl; $data[$company->id]['total_rl_vl'] = $vacation_reason_counts->total_rl_vl; $data[$company->id]['total_emergency_vl'] = $vacation_reason_counts->total_emergency_vl; $data[$company->id]['total_others_vl'] = $vacation_reason_counts->total_others_vl; $data[$company->id]['total_cd_sl'] = $vacation_reason_counts->total_cd_sl; $data[$company->id]['total_msp_sl'] = $vacation_reason_counts->total_msp_sl; $data[$company->id]['total_rd_sl'] = $vacation_reason_counts->total_rd_sl; $data[$company->id]['total_eent_sl'] = $vacation_reason_counts->total_eent_sl; $data[$company->id]['total_idi_sl'] = $vacation_reason_counts->total_idi_sl; $data[$company->id]['total_hf_sl'] = $vacation_reason_counts->total_hf_sl; $data[$company->id]['total_or_sl'] = $vacation_reason_counts->total_or_sl; $data[$company->id]['total_dr_sl'] = $vacation_reason_counts->total_dr_sl; $data[$company->id]['total_others_sl'] = $vacation_reason_counts->total_others_sl; } return response()->json([ 'data' => array_values($data) ]); } public function generateContributionReport($request) { // Validate the request DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'date_from' => 'required|date', 'date_to' => 'required|date', ]); // Start the query $query = DB::table('payroll_summaries') ->join('employees', 'payroll_summaries.employee_id', '=', 'employees.employee_id'); if ($request->filled('date_from')) { $fromDate = Carbon::parse($request->date_from)->startOfDay(); $toDate = Carbon::parse($request->date_to)->startOfDay(); $query->where('payroll_summaries.payroll_date', '>=', $fromDate)->where('payroll_summaries.payroll_date', '<=', $toDate); } if ($request->company_id) { $query->where('payroll_summaries.company_id', $request->company_id); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Handle transformed columns dynamically // if ($request->filled('payroll_rate')) { // $query->where('salary_and_wages.payroll_rate', $request->payroll_rate); // } // if ($request->filled('salary_rate')) { // $query->whereBetween('salary_and_wages.salary_rate', [$request->salary_rate['min'], $request->salary_rate['max']]); // } // if ($request->filled('payment_type')) { // $query->where('salary_and_wages.payment_type', $request->payment_type); // } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $salaries = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $salaries ]); } private function generateOvertimeCompanyReport($request){ // dd($request->all()); $departments = DB::table('departments') ->when($request->department_id, fn($query) => $query->where('id', $request->department_id) ) ->get(); $result =[]; foreach($departments as $department){ DB::enableQueryLog(); $data = \App\Models\ProcessedOvertime:: join('payroll_summaries as ps', fn($join) => $join->on( 'ps.employee_id','=','processed_overtimes.employee_id' )) ->join('payrolls','ps.payroll_date','=','payrolls.payroll_date') ->join('employees','processed_overtimes.employee_id','=','employees.employee_id') ->leftJoin('departments','processed_overtimes.department_id','=','departments.id') ->where('processed_overtimes.department_id',$department->id); // whereBetween('date',[$validated['from_date'], $validated['to_date']]) if($request->payroll_date){ $data = $data->whereIn('processed_overtimes.payroll_date',$request->payroll_date); } if($request->selectedCompanyId > 0 ){ $data = $data->where('processed_overtimes.company_id',$request->selectedCompanyId); } if($request->dealership_id > 0){ $data = $data->where('processed_overtimes.dealership_id',$request->dealership_id); } $data = $data->select( DB::raw("CONCAT(employees.firstname,' ',employees.lastname) as name"), // 'processed_overtimes.employee_id', DB::raw('departments.name as departments'), DB::raw('SUM(ps.overtime_total) as total_ot_pay'), DB::raw('SUM(ps.holiday_total) as holiday_total'), DB::raw('SUM(ps.restday_total) as dayOff_pay'), DB::raw('SUM(ps.night_diff_total) as night_diff_pay'), DB::raw('SUM(processed_overtimes.no_of_hours) as total_over_times'), DB::raw('COUNT(DISTINCT processed_overtimes.date) as frequency'), DB::raw('SUM(processed_overtimes.meal_amount) as total_meal'), DB::raw('SUM(processed_overtimes.transportation) as total_transpo'), DB::raw( '( SUM(ps.holiday_total) + SUM(ps.restday_total) + SUM(ps.night_diff_total) + SUM(processed_overtimes.meal_amount) + SUM(processed_overtimes.transportation) ) as row_total' ) ) ->groupBy( // 'employee_id', 'departments.name', DB::raw("CONCAT(employees.firstname, ' ', employees.lastname)") ) ->get(); // dd(DB::getQueryLog()); if($data->isNotEmpty()){ $result[$department->name] = $data; } } return response()->json(['data'=> $result]); } private function getPreviousCutOff($company_id,$payroll_date) { // var_dump($payroll_date); $salary_date = Carbon::parse($payroll_date)->format('j'); // var_dump($salary_date); $cut_off = \App\Models\CutoffSetting::where(fn($q) => $q->where('company_id', $company_id)->orWhereNull('company_id')) ->where('salary_day','!=', $salary_date) ->first(); // echo'
';print_r($cut_off);echo'
';
        $start_month = Carbon::parse($payroll_date)->format('Y-m');
        if($salary_date < $cut_off->salary_day){
            $start_month = Carbon::parse($start_month . '-01')->subMonth()->format('Y-m');
        }

        // var_dump('start month '.$start_month);
        // Adjust the logic based on the cutoff days
        if ($cut_off->day_start > $cut_off->day_end) {
            // When day_start is greater than day_end, start_month should be the previous month
          
            $start_month = Carbon::parse($start_month . '-01')->subMonth()->format('Y-m');
            $end_month = Carbon::parse($start_month . '-01')->addMonth()->format('Y-m');
        } else {
            // Otherwise, use the current month for both start and end
            $end_month = $start_month;
        }

        // Construct and format day_start and day_end with Y-m-d
        $day_start_date = Carbon::parse($start_month . '-' . $cut_off->day_start);
        $day_end_date = Carbon::parse($end_month . '-' . $cut_off->day_end);
        // dd(['start_month'=> $start_month,'end_month'=> $end_month,'day_start' => $day_start_date,'day_end' => $day_end_date]);
        // Generate array of dates from start to end
        $date_range = [];
        $current_date = $day_start_date->copy();

        while ($current_date->lte($day_end_date)) {
            $date_range[] = $current_date->format('Y-m-d');
            $current_date->addDay(); // Increment by 1 day
        }

        return [
            'cut_off' => $cut_off->cut_off,
            'start_date' => $day_start_date->format('Y-m-d'),
            'end_date' => $day_end_date->format('Y-m-d'),
            'date_range' => $date_range
        ];
    }

    private function generateLateApprovalReport(Request $request)
    {
        $cut_off ='';
        $cut_off = $this->getPreviousCutOff($request->selectedCompanyId,$request->payroll_date);
        // echo'
';print_r( $cut_off['date_range']);echo'
'; if ($request->type == 1) { $data = \App\Models\EmployeeLeave:: join('payroll_summaries as ps', fn($join) => $join->on( 'ps.employee_id', '=', 'employee_leaves.employee_id' )) ->join('employees', 'employee_leaves.employee_id', '=', 'employees.employee_id') ->join('employees as approver', 'employee_leaves.approver_id', '=', 'approver.employee_id') ->join('leave_types', 'employee_leaves.leave_id', '=', 'leave_types.id') ->join('leave_reasons', 'employee_leaves.leave_reason_id', '=', 'leave_reasons.id') ->join('companies','employee_leaves.company_id','companies.id') ->join('dealerships','employee_leaves.dealer_id','dealerships.id') ->where('employee_leaves.posted',0) ->where('employee_leaves.status', 2) ->whereIn('employee_leaves.date_from', $cut_off['date_range']) ->whereIn('employee_leaves.date_to', $cut_off['date_range']); // if ($request->payroll_date) { // // Apply payroll_date filter if provided // // $data = $data->whereIn('employee_leaves.payroll_date', $request->payroll_date); // } if ($request->employee_id > 0) { $data = $data->where('employee_leaves.employee_id', $request->employee_id); } if ($request->selectedCompanyId > 0) { $data = $data->where('employee_leaves.company_id', $request->selectedCompanyId); } if ($request->dealer_id > 0) { $data = $data->where('employee_leaves.dealership_id', $request->dealership_id); } $data = $data->select( DB::raw('companies.name as company'), DB::raw('dealerships.name as dealer'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as name"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname) as approver_name"), DB::raw('leave_types.name as leavetype'), DB::raw('leave_reasons.name as reason'), DB::raw('employee_leaves.date_from'), DB::raw('employee_leaves.date_to'), DB::raw('employee_leaves.hours'), DB::raw('employee_leaves.approved_at') ) ->groupBy( DB::raw('companies.name'), DB::raw('dealerships.name'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname)"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname)"), DB::raw('leave_types.name'), DB::raw('leave_reasons.name'), 'employee_leaves.date_from', 'employee_leaves.date_to', 'employee_leaves.hours', DB::raw('employee_leaves.approved_at') ) ->get(); return response()->json(['data' => $data]); }else if($request->type ==2){ $data = \App\Models\EmployeeOb:: join('employees', 'employee_obs.employee_id', '=', 'employees.employee_id') ->join('employees as approver', 'employee_obs.approver_id', '=', 'approver.employee_id') ->join('companies','employee_obs.company_id','companies.id') ->join('dealerships','employee_obs.dealer_id','dealerships.id') ->where('employee_obs.posted',0) ->where('employee_obs.status', 2) ->whereIn('employee_obs.date_from', $cut_off['date_range']) ->whereIn('employee_obs.date_to', $cut_off['date_range']); if ($request->employee_id > 0) { $data = $data->where('employee_obs.employee_id', $request->employee_id); } if ($request->selectedCompanyId > 0) { $data = $data->where('employee_obs.company_id', $request->selectedCompanyId); } if ($request->dealership_id > 0) { $data = $data->where('employee_obs.dealer_id', $request->dealership_id); } $data = $data->select( DB::raw('companies.name as company'), DB::raw('dealerships.name as dealer'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as name"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname) as approver_name"), DB::raw('TIMESTAMPDIFF(HOUR, employee_obs.from_time, employee_obs.to_time) as hours'), 'employee_obs.date_from', 'employee_obs.date_to', 'employee_obs.description', 'employee_obs.approved_at', ) ->groupBy( DB::raw('companies.name'), DB::raw('dealerships.name'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname)"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname)"), DB::raw('TIMESTAMPDIFF(HOUR, employee_obs.from_time, employee_obs.to_time)'), 'employee_obs.date_from', 'employee_obs.date_to', 'employee_obs.description', 'employee_obs.approved_at', ) ->get(); return response()->json(['data' => $data]); }else if($request->type ==3){ $data = \App\Models\EmployeeOvertime:: join('employees', 'employee_overtimes.employee_id', '=', 'employees.employee_id') ->join('employees as approver', 'employee_overtimes.approver_id', '=', 'approver.employee_id') ->join('companies','employee_overtimes.company_id','companies.id') ->join('dealerships','employee_overtimes.dealer_id','dealerships.id') ->where('employee_overtimes.posted',0) ->where('employee_overtimes.status', 2); // ->whereIn('employee_overtimes.date_from', $cut_off['date_range']) // ->whereIn('employee_overtimes.date_to', $cut_off['date_range']); if ($request->employee_id > 0) { $data = $data->where('employee_overtimes.employee_id', $request->employee_id); } if ($request->selectedCompanyId > 0) { $data = $data->where('employee_overtimes.company_id', $request->selectedCompanyId); } if ($request->dealership_id > 0) { $data = $data->where('employee_overtimes.dealer_id', $request->dealership_id); } $data = $data->select( DB::raw('companies.name as company'), DB::raw('dealerships.name as dealer'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as name"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname) as approver_name"), 'employee_overtimes.date_from', 'employee_overtimes.date_to', 'employee_overtimes.hours', 'employee_overtimes.description', 'employee_overtimes.approved_at', ) ->groupBy( DB::raw('companies.name'), DB::raw('dealerships.name'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname)"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname)"), 'employee_overtimes.date_from', 'employee_overtimes.date_to', 'employee_overtimes.description', 'employee_overtimes.approved_at', 'employee_overtimes.hours', ) ->get(); return response()->json(['data' => $data]); }else if($request->type ==4){ $data = \App\Models\EmployeeTimeAdjustment:: join('employees', 'employee_time_adjustments.employee_id', '=', 'employees.employee_id') ->join('employees as approver', 'employee_time_adjustments.approver_id', '=', 'approver.employee_id') ->join('companies','employee_time_adjustments.company_id','companies.id') ->join('dealerships','employee_time_adjustments.dealer_id','dealerships.id') ->where('employee_time_adjustments.posted',0) ->where('employee_time_adjustments.status', 2) ->whereIn('employee_time_adjustments.date', $cut_off['date_range']); if ($request->employee_id > 0) { $data = $data->where('employee_time_adjustments.employee_id', $request->employee_id); } if ($request->selectedCompanyId > 0) { $data = $data->where('employee_time_adjustments.company_id', $request->selectedCompanyId); } if ($request->dealership_id > 0) { $data = $data->where('employee_time_adjustments.dealer_id', $request->dealership_id); } $data = $data->select( DB::raw('companies.name as company'), DB::raw('dealerships.name as dealer'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as name"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname) as approver_name"), 'employee_time_adjustments.date', 'employee_time_adjustments.description', 'employee_time_adjustments.approved_at', DB::raw("IF(in_out = 1, 'In', 'Out') as `In/Out`") ) ->groupBy( DB::raw('companies.name'), DB::raw('dealerships.name'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname)"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname)"), 'employee_time_adjustments.date', 'employee_time_adjustments.description', 'employee_time_adjustments.approved_at', DB::raw("IF(in_out = 1, 'In', 'Out')") ) ->get(); return response()->json(['data' => $data]); }else if($request->type == 5){ $data = \App\Models\EmployeeChangeSchedule:: join('employees', 'employee_change_schedules.employee_id', '=', 'employees.employee_id') ->join('employees as approver', 'employee_change_schedules.approver_id', '=', 'approver.employee_id') ->join('companies','employee_change_schedules.company_id','companies.id') ->join('dealerships','employee_change_schedules.dealer_id','dealerships.id') ->where('employee_change_schedules.posted',0) ->where('employee_change_schedules.status', 2) ->whereIn('employee_change_schedules.date', $cut_off['date_range']); // ->whereIn('employee_overtimes.date_to', $cut_off['date_range']); if ($request->employee_id > 0) { $data = $data->where('employee_change_schedules.employee_id', $request->employee_id); } if ($request->selectedCompanyId > 0) { $data = $data->where('employee_change_schedules.company_id', $request->selectedCompanyId); } if ($request->dealership_id > 0) { $data = $data->where('employee_change_schedules.dealer_id', $request->dealership_id); } $data = $data->select( DB::raw('companies.name as company'), DB::raw('dealerships.name as dealer'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as name"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname) as approver_name"), DB::raw('(TIMESTAMPDIFF(HOUR, employee_change_schedules.from_time, employee_change_schedules.to_time) +1) as hours'), 'employee_change_schedules.date', 'employee_change_schedules.description', 'employee_change_schedules.approved_at', ) ->groupBy( DB::raw('companies.name'), DB::raw('dealerships.name'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname)"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname)"), 'employee_change_schedules.date', 'employee_change_schedules.description', 'employee_change_schedules.approved_at', DB::raw('(TIMESTAMPDIFF(HOUR, employee_change_schedules.from_time, employee_change_schedules.to_time) +1)') ) ->get(); return response()->json(['data' => $data]); }else if($request->type == 6){ $data = \App\Models\EmployeeOffset:: join('employees', 'employee_offsets.employee_id', '=', 'employees.employee_id') ->join('employees as approver', 'employee_offsets.approver_id', '=', 'approver.employee_id') ->join('companies','employee_offsets.company_id','companies.id') ->join('dealerships','employee_offsets.dealer_id','dealerships.id') ->where('employee_offsets.posted',0) ->where('employee_offsets.status', 2); // ->whereIn('employee_offsets.date_from', $cut_off['date_range']) // ->whereIn('employee_offsets.date_to', $cut_off['date_range']); if ($request->employee_id > 0) { $data = $data->where('employee_offsets.employee_id', $request->employee_id); } if ($request->selectedCompanyId > 0) { $data = $data->where('employee_offsets.company_id', $request->selectedCompanyId); } if ($request->dealership_id > 0) { $data = $data->where('employee_offsets.dealership_id', $request->dealership_id); } $data = $data->select( DB::raw('companies.name as company'), DB::raw('dealerships.name as dealer'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as name"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname) as approver_name"), 'employee_offsets.date_from', 'employee_offsets.date_to', 'employee_offsets.hours', 'employee_offsets.description', 'employee_offsets.approved_at', ) ->groupBy( DB::raw('companies.name'), DB::raw('dealerships.name'), DB::raw('employees.employee_id'), DB::raw("CONCAT(employees.firstname, ' ', employees.lastname)"), DB::raw("CONCAT(approver.firstname, ' ', approver.lastname)"), 'employee_offsets.date_from', 'employee_offsets.date_to', 'employee_offsets.description', 'employee_offsets.approved_at', 'employee_offsets.hours', ) ->get(); return response()->json(['data' => $data]); } } } PKyZM++4Http/Controllers/API/v1/TravelApprovalController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $currentEmp = $employee->employees ? $employee->employees->employee_id : ''; if ($employee->roles[0]->group_id == 1) { $data = EmployeeOb::with(['recommending', 'approving', 'employee']) ->where('enabled', 1) ->where('status', 2) ->select('employee_obs.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_obs AS el WHERE el.status = 0 AND el.recommending_id = employee_obs.recommending_id AND el.approver_id = employee_obs.approver_id) AS pending, (SELECT COUNT(*) FROM employee_obs AS el WHERE el.status = 2 AND el.recommending_id = employee_obs.recommending_id AND el.approver_id = employee_obs.approver_id) AS approved, (SELECT COUNT(*) FROM employee_obs AS el WHERE el.status = 99 AND el.recommending_id = employee_obs.recommending_id AND el.approver_id = employee_obs.approver_id) AS denied ') ->orderBy('status', 'ASC') ->paginate($perPage); } else { $data = EmployeeOb::with(['recommending', 'approving', 'employee']) ->where(function ($query) use ($employee) { $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : '' ); }) ->where('enabled', 1) ->whereNull('deleted_at') ->select('employee_obs.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_obs AS el WHERE el.status IN (0, 1) AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS pending, (SELECT COUNT(*) FROM employee_obs AS el WHERE el.status = 2 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS approved, (SELECT COUNT(*) FROM employee_obs AS el WHERE el.status = 99 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS denied') ->orderBy('status', 'ASC') ->paginate($perPage); } return response()->json($data); } public function update(Request $request, int $id) { $data = EmployeeOb::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $request['status'] = $request->status['status']; DB::connection()->beginTransaction(); // dd($request->all()); try { $request['transpo'] = ($request->transportation && $request->transportation !== 'null' && $request->transportation !== 'false' && trim($request->transportation) !== '' ? 1 : 0); $request['meal'] = ($request->meal && $request->meal !== 'null' && $request->meal !== 'false' && trim($request->meal) !== '' ? 1 : 0); $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = ''; if($request->status == 1){ $employee_id_for_notification = $data->approver_id; } else if ($request->status == 2){ $employee_id_for_notification = $data->employee_id; } else if ($request->status == 99){ $employee_id_for_notification = $data->employee_id; } $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new Travel($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeOb', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeOb', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateApprover(Request $request, int $id) { $data = EmployeeOb::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $employee_id_for_notification = []; if($request->recommending_id != $data->recommending_id){ $employee_id_for_notification[] = $request->recommending_id; } if ($request->approver_id != $data->approver_id){ $employee_id_for_notification[] = $request->approver_id; } foreach($employee_id_for_notification as $employee_id){ $email_to = $this->getEmployeeEmailData($employee_id); try { if ($email_to) { Notification::send($email_to, new Travel($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } public function HrValidation(Request $request,int $id){ $status = $request->status; $data = EmployeeOb::with(['employee'])->where('id', $id)->first(); if(!$data){ return response()->json(['messages' => 'No data found.']); } $employee_id =Auth::user()->employees->employee_id; DB::beginTransaction(); try{ $data->validated_by = $employee_id; $data->validated_at = now(); $data->validated = $status; $data->meal = $request->meal; $data->transportation = $request->transportation; $data->deferred_reason = $request->reason; $data->meal_amount = ($request->meal_amount ? $request->meal_amount : null); $data->transportation_amount = ($request->transportation_amount ? $request->transportation_amount : null); $data->save(); $email_to = $this->getEmployeeEmailData($data->employee_id); Notification::send($email_to, new Travel($data)); DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZﱮ`0Http/Controllers/API/v1/DepartmentController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Department::with('division')->where(function ($query) use ($keyword) { $keyword = str_replace(" ","%",$keyword); $query->where('name','like','%'. $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if(!empty($sortBy) && !empty($sortType)){ $data = $data->orderby($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $validator = Validator::make($request->all(), [ 'division_id' => 'required', 'name' => 'required|min:2|unique:departments,name' ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Department::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Display the specified resource. */ public function show(string $id) { // } /** * Update the specified resource in storage. */ public function update(Request $request, string $id) { $data = Department::where('id',$id)->first(); if(!$data){ return response()->json(['messages'=> "No data found."],404); } $validator = Validator::make($request->all(), [ 'division_id' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('departments')->ignore($id)->whereNull('deleted_at') ], ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try{ $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'messages' => "Record successfully updated!", "status" => "success", "data" => $data ],201); }catch(Throwable $e){ DB::connection()->rollback(); return response()->json([ 'messages' => "Unable to process request. Please try again.", 'status' => false, 'data' => $data ]); } } /** * Remove the specified resource from storage. */ public function destroy(string $id) { $data = Department::find($id); if(!$data) { return response()->json(['message' => "Record not found!",204]); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],200); } } PKyZ@-{2Http/Controllers/API/v1/AnnouncementController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); // Generate a unique cache key based on request parameters $cacheKey = 'announcements_' . md5(json_encode([ 'keyword' => $keyword, 'perPage' => $perPage, 'sortBy' => $sortBy, 'sortType' => $sortType, ])); // Check if data exists in cache, otherwise execute the query and cache the result $data = Cache::remember($cacheKey, 60, function () use ($keyword, $perPage, $sortBy, $sortType) { return Announcement::with('company')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('description', 'like', '%' . $keyword . '%'); }) ->when(!empty($sortBy) && !empty($sortType), function ($query) use ($sortBy, $sortType) { $query->orderBy($sortBy, $sortType); }) ->paginate($perPage); }); return response()->json($data); } public function show(Request $request) { $user = Auth::user(); $data = Announcement::where('expired_at', '>', now())->where('company_id', $user->default_company_id)->first(); return response()->json($data); } public function store(Request $request) { $user = Auth::user(); $request['created_by'] = $user->id; // Validate the incoming request data $validator = Validator::make($request->all(), [ 'title' => [ 'required', 'min:2', Rule::unique('announcements')->whereNull('deleted_at') ] ]); if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Announcement::create($request->all()); DB::connection()->commit(); Cache::forget('announcements_'); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Announcement::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', Rule::unique('announcements')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); // Invalidate cache for 'announcements_' key when a Announcement is updated Cache::forget('announcements_'); // Adjust cache key if necessary return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Announcement::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZQxo2Http/Controllers/API/v1/ReportModuleController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = ReportModule::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(){ } } PKyZxII;Http/Controllers/API/v1/EmployeeOffsetEarningController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeOffsetEarning::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'from_time', 'to_time', 'hours', 'attachment', 'description', 'denied_reason', 'status', 'recommending_id', 'allow_higher_approval', 'approver_id', 'approved_at', 'recommended_at', 'created_at' ) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($employee->roles[0]['group_id'] != 1){ $data->where(['employee_id' => $employee->employee_id]); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); $availableOffset = []; $offsetRemaining = []; if ($employee->roles[0]['group_id'] != 1) { $availableOffset = EmployeeOffsetEarning::where([ 'employee_id' => $employee->employee_id, 'enabled' => 1 ]) ->where('status', '=', '2') ->selectRaw('SUM(hours) as total') ->groupBy('employee_offset_earnings.hours') ->first(); $offsetRemaining = OffsetRemaining::where([ 'employee_id' => $employee->employee_id, 'enabled' => 1 ]) ->select('remaining') ->first(); } $response = [ 'data' => $data, 'available_offset' => $availableOffset, 'offset_remaining' => $offsetRemaining ]; return response()->json($response); } public function getOffsetEarningList(Request $request) { // $employee = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); $data = EmployeeOffsetEarning::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'employee'=> fn($employee) => $employee->select('employee_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'from_time', 'to_time', 'hours', 'attachment', 'description', 'denied_reason', 'status', 'validated', 'validated_by', 'validated_at', 'deferred_reason', 'recommending_id', 'allow_higher_approval', 'approver_id', 'approved_at', 'recommended_at', 'created_at' ) ->where('status',2) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($dealership_id) $data = $data->where('dealer_id', $dealership_id); $data = $data->paginate($perPage); $response = [ 'data' => $data, ]; return response()->json($response); } public function store(Request $request) { $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date' => "required", 'from_time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $attachmentName = $this->handleAttachment($request); $Status = EmployeeOffsetEarning::create([ 'employee_id' => $user->employee_id, 'company_id' => $user->employees->company_id, 'dealer_id' => $user->employees->dealer_id, 'date' => $request->date, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'hours' => $request->hours, 'description' => $request->description, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'allow_higher_approval' => $allow_higher_approval, 'approver_id' => $request->approver_id, 'status' => 0, ]); // if(!OffsetRemaining::where('employee_id', '=', $user->employee_id)->exists()){ // OffsetRemaining::create([ // 'employee_id' => $user->employee_id, // 'company_id' => $user->employees->employee_id, // 'remaining' => $request->hours // ]); // } else { // $offset = OffsetRemaining::where('employee_id', '=', $user->employee_id)->first(); // if ($offset) { // $offset->increment('remaining', $request->hours); // } // } // dd(); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); // $email_to = $this->getEmployeeEmailData($request->recommending_id); // Notification::send($email_to, new OffsetEarning($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-offset-earning/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { // dd($request->all()); $id = $request->id; $data = EmployeeOffsetEarning::where('id', $id)->first(); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date' => "required|date", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-offset-earning/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-offset-earning/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $data->employee_id = $user->employee_id; $data->hours = $request->hours; $data->from_time = $request->from_time; $data->to_time = $request->to_time; $data->description = $request->description; $data->allow_higher_approval = $allow_higher_approval; $data->attachment = $attachment_name; $data->save(); // $offsetRemaining = OffsetRemaining::where('employee_id', '=', $user->employee_id)->first(); // dd($offsetRemaining); // if($request->hours > $data->hours){ // $hours = $request->hours - $data->hours; // } DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeOffsetEarning::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function removeAttachment(Request $request) { $id = $request->id; $attachment = $request->attachment; $data = EmployeeOffsetEarning::where('id', $id)->first(); $data->attachment = NULL; $data->save(); DB::connection()->commit(); $attachment_file_path = 'employee-offset-earning/' . $request->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } public function getTitoOrWFH(Request $request){ $attendance = new EmployeeAttendanceController(); $timelog = $attendance->getTimelog($request->date, $request->time_keeping_id); $wfhRecord = EmployeeWfh::where(['employee_id'=> $request->employee_id, 'date'=>$request->date, 'status'=>2, 'validated'=>1]) ->first(); $schedule = $attendance->getSchedule($request->date, $request->employee_id); $ob = $attendance->getOB($request->date, $request->employee_id); if($wfhRecord) { if($schedule){ if($schedule->schedule->cws != ''){ $to_time = $schedule->schedule->cws_to_time; $from_time = $schedule->schedule->cws_from_time; } else { $to_time = $schedule->schedule->to_time; $from_time = $schedule->schedule->from_time; } return response()->json([ 'from_time' => $from_time, 'to_time' => $to_time, 'hours' => $wfhRecord->hours >= 8 ? $wfhRecord->hours - 1 : $wfhRecord->hours ]); } } $dayOfWeek = date('l', strtotime($request->date)); $daysArray = explode(',', $schedule->schedule->day_off); if (in_array($dayOfWeek, $daysArray) && $ob) { $schedule_out = $schedule->schedule->to_time; $time_in = $timelog->filter(fn($tl) => $tl->in_out=='I')->first(); $time_out = $timelog->filter(fn($tl) => $tl->in_out=='O')->first(); if($timelog->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() && $timelog->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty()){ if(date('H:i:s', strtotime($time_in->datetimelog)) >= $ob->from_time){ $time_in = date('H:i:s', strtotime($time_in->datetimelog)); } else { $time_in = $ob->from_time; } if(date('H:i:s', strtotime($time_out)) >= $ob->to_time){ $time_out = date('H:i:s', strtotime($time_out->datetimelog)); } else { $time_out = $ob->to_time; } } else if($timelog->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() && $timelog->filter(fn($tl) => $tl->in_out=='I')->isEmpty()){ if(date('H:i:s', strtotime($time_out)) >= $ob->to_time){ $time_out = date('H:i:s', strtotime($time_out->datetimelog)); } else { $time_out = $ob->to_time; } } else if($timelog->filter(fn($tl) => $tl->in_out=='O')->isEmpty() && $timelog->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty()){ if(date('H:i:s', strtotime($time_in->datetimelog)) >= $ob->from_time){ $time_in = date('H:i:s', strtotime($time_in->datetimelog)); } else { $time_in = $ob->from_time; } } $schedTimeIn = new DateTime($request->date . ' ' . $time_in); $schedTimeOut = new DateTime($request->date . ' ' . $time_out); $interval = $schedTimeIn->diff($schedTimeOut); return $interval; } if($timelog && ($timelog->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() || $ob) && $schedule) { $dayOfWeek = date('l', strtotime($request->date)); $daysArray = explode(',', $schedule->schedule->day_off); $daysCWSArray = explode(',', $schedule->schedule->cws_day); if(in_array($dayOfWeek,$daysCWSArray)) { $schedule_out = $schedule->schedule->cws_to_time; } elseif(!in_array($dayOfWeek, $daysArray)) { $schedule_out = $schedule->schedule->to_time; } $time_out = $timelog->filter(fn($tl) => $tl->in_out=='O')->first(); $time_out = $time_out->datetimelog; if($ob) { if($timelog->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty()){ $datetime = $timelog->filter(fn($tl) => $tl->in_out=='O')->first(); if(date('H:i:s', strtotime($datetime)) <= $ob->to_time){ $schedule_out = $datetime; } else { $schedule_out = $ob->to_time; } } else { $schedule_out = $ob->to_time; } } $schedule_out_date = new DateTime($request->date . ' ' . $schedule_out); $time_out_date = new DateTime($time_out); // Calculate the difference $interval = $schedule_out_date->diff($time_out_date); // Convert to decimal hours $decimalHours = $interval->h + ($interval->i / 60) + ($interval->s / 3600); // If the difference is negative, make it negative if ($interval->invert) { $decimalHours *= -1; } return response()->json([ 'from_time' => date('H:i', strtotime($schedule_out)), 'to_time' => date('H:i', strtotime($time_out)), 'hours' => $decimalHours ]); // return $interval; } } } PKyZ~I>I>*Http/Controllers/API/v1/MenuController.phpnu[input('per_page',PHP_INT_MAX); $keyword = $request->input('keyword', ''); $keyword = str_replace(" ","%",$keyword); $data = Menu::with(['system']) ->where(fn($q) => $q->where('name', 'like', '%'.$keyword.'%') ->orWhere('description', 'like', '%'.$keyword.'%') ->orWhereHas('system', fn($qs) => $qs->where('name', 'like', '%'.$keyword.'%') ->orWhere('code', 'like', '%'.$keyword.'%')) ) ->orderBy('name'); $data = $data->paginate($perPage); return response()->json($data); } public function list(Request $request) { $data = Menu::with(['system'])->orderByDesc('sort')->get(); return response()->json(["data" => $data]); } /** * dealership a newly created resource in storage. */ public function dealership(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|unique:menus,name' ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Menu::create($request->all()); DB::connection()->commit(); return response()->json($data); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Store a newly created resource in storage. */ public function store(Request $request) { /** Validate the incoming request data */ $validator = Validator::make($request->only(['name']), [ 'name' => "required|unique:menus,name" ]); if ($validator->fails()) { if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } } DB::connection()->beginTransaction(); try { $request_data = array_merge($request->all(), [ 'parent_id' => $request->parent_id ?? 0, 'created_at' => $this->current_datetime, 'updated_at' => $this->current_datetime]); $menu = Menu::create($request_data); DB::connection()->commit(); return response()->json([ 'message' => 'Saved successfully!', 'data' => $menu ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Display the specified resource. */ public function show(int $id) { $data = Menu::find($id); if (!$data) { return response()->json(['messages' => 'No data found.'], 202); } return response()->json($data); } public function all(Request $request) { DB::enableQueryLog(); $keyword = $request->input('keyword', ''); $keyword = str_replace(" ","%",$keyword); $parents = Menu::with(['system'])->where(['parent_id' => 0, 'enabled' => 1]); // $parents->where(fn($q) => // $q->where('name', 'like', '%'.$keyword.'%') // ->orWhere('name', 'like', '%'.$keyword.'%') // ->orWhereHas('system', fn($qs) => $qs->where('name', 'like', '%'.$keyword.'%') // ->orWhere('code', 'like', '%'.$keyword.'%')) // ); $parents = $parents->get(); $data = Menu::with(['system'])->select('menus.*', 'parent.name as parent_name') ->orderBy('menus.parent_id')->orderByRaw('CAST(menus.sort AS UNSIGNED) ASC') ->leftJoin('menus as parent', 'parent.id', '=', 'menus.parent_id'); $data->where(fn($q) => $q->where('menus.name', 'like', '%'.$keyword.'%') ->orWhere('parent.name', 'like', '%'.$keyword.'%') ->orWhereHas('system', fn($qs) => $qs->where('name', 'like', '%'.$keyword.'%') ->orWhere('code', 'like', '%'.$keyword.'%')) ); $data = $data->get(); // dd(DB::getQueryLog()); // $data = $data->toArray(); // dd($data); // $menus = []; // foreach($parents as $row) { // $child = array_filter($data, function ($child) use ($row) { // return $child['parent_id'] == $row['id']; // }); // $self = array_filter($data, function ($child) use ($row) { // return $child['id'] == $row['id']; // }); // if(!empty($child) || !empty($self)) { // $menus[] = [ // 'parent' => $row, // 'child' => !empty($child) ? $child : null, // ]; // } // } $menus = $parents->map(fn($parent) => [ 'parent' => $parent, 'child' => $data->filter(fn($child) => $child['parent_id'] == $parent['id'])->isNotEmpty() ? $data->filter(fn($child) => $child['parent_id'] == $parent['id'])->values() : null ])->filter(fn($menu) => (stripos($menu['parent']['name'], $keyword) !== false || $menu['child'] !== null))->values()->toArray(); return response()->json([ 'data' => $menus ]); } /** * Update the specified resource in storage. */ public function update(Request $request, int $id) { $data = Menu::find($id); if (!$data) { return response()->json(['messages' => 'No data found.'], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill(array_merge( $request->all(), [ 'parent_id' => $request->parent_id ?? 0, 'updated_at' => $this->current_datetime, ] )); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'data' => $data ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Remove the specified resource from storage. */ public function destroy(string $id) { $data = Menu::find($id); if (!$data) { return response()->json(['messages' => 'No data found.'], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->delete(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Record successfully deleted.', 'data' => $data, ]); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function userMenu(Request $request, $user_id) { $user = User::find($user_id); $parents = collect(); $data = collect(); $system_id = $request->system_id ?? null; $role_groups = $user->roles->pluck('group_id')->toArray(); DB::enableQueryLog(); $groups = RoleGroup::whereIn('id', $role_groups) ->where(fn($q) => $q->where('system_id',$system_id)->orWhereNull('system_id')) ->get()->pluck('id')->toArray(); if (in_array(1, $role_groups)) { DB::enableQueryLog(); $data = Menu::select('menus.*') ->distinct('menu.id') ->orderBy('menus.parent_id') ->orderByRaw('CAST(menus.sort AS UNSIGNED) ASC') ->join('modules', 'menus.id', '=', 'modules.menu_id') ->where('menus.enabled', '1') ->where(fn($q) => $q->where('modules.system_id', $system_id) ->orWhereNull('modules.system_id') ) ; $data= $data->get(); // dd(DB::getQueryLog()); $parent_ids = $data->filter(fn($item) => $item['parent_id'] === 0) ->pluck('id') ->merge($data->pluck('parent_id')) ->unique(); $parents = Menu::whereIn('id', $parent_ids)->get(); } else { $roles = $user->roles->filter(fn($role) => in_array($role['group_id'], $role_groups))->pluck('id')->toArray(); // dd($roles); $roles = $roles ?? []; // If $roles is a variable, make sure it's an array if(empty($request->input('companies', []))){ $companies = (array) $request->input('company_id'); } else { $companies = $request->input('companies', []); } if(empty($request->input('dealerships', []))){ $dealerships = (array) $request->input('dealership_id'); } else { $dealerships = $request->input('dealerships', []); } DB::enableQueryLog(); $data = Menu::select('menus.*') ->distinct('menu.id') ->orderBy('menus.parent_id') ->orderByRaw('CAST(menus.sort AS UNSIGNED) ASC') ->join('modules', 'menus.id', '=', 'modules.menu_id') ->join('role_permissions', function ($join) use ($companies, $dealerships, $roles) { $join->on('modules.id', '=', 'role_permissions.module_id') ->on(function ($joinc) use ($companies) { $joinc->whereIn('role_permissions.company_id', $companies) ->orWhere('role_permissions.company_id', '=', 0); }) ->on(function ($join2) use ($dealerships) { $join2->whereIn('role_permissions.dealership_id', $dealerships) ->orWhere('role_permissions.dealership_id', '=', 0); }) ->whereIn('role_permissions.role_id', $roles); }) ->where('menus.enabled', '1') ->where(function ($q) use ($system_id) { $q->where('modules.system_id', $system_id) ->orWhereNull('modules.system_id'); }); $data= $data->get(); // dd($data->toArray()); // dd(DB::getQueryLog()); $parent_ids = $data->filter(fn($item) => $item['parent_id'] === 0) ->pluck('id') ->merge($data->pluck('parent_id')) ->unique(); $parents = Menu::whereIn('id', $parent_ids)->get(); } $menus = $parents ->sortBy('sort') // Sort the parents by the 'sort' field ->map(fn($parent) => [ 'parent' => $parent, 'child' => $data->filter(fn($child) => $child['parent_id'] == $parent['id'])->isNotEmpty() ? $data ->filter(fn($child) => $child['parent_id'] == $parent['id']) ->sortBy('sort') // Sort the children by the 'sort' field ->values() : null ])->filter(fn($menu) => $menu['child'] !==null || ($menu['parent']['url'] !== '#' && !empty($menu['parent']['url']))) ->values() ->toArray(); // $menus = $parents->map(fn($parent) => [ // 'parent' => $parent, // 'child' => $data->filter(fn($child) => $child['parent_id'] == $parent['id'])->isNotEmpty() // ? $data->filter(fn($child) => $child['parent_id'] == $parent['id'])->values() // : null // ])->filter(fn($menu) => $menu['child'] !== null || ($menu['parent']['url'] !== '#' && !empty($menu['parent']['url'])))->values()->toArray(); return response()->json([ 'status' => true, 'message' => 'All menus', 'data' => $menus ]); } // public function userMenu(Request $request, $user_id) // { // // dd($request->input('ou_code')); // // \DB::enableQueryLog(); // $user = User::find($user_id); // if($user->roles[0]->level == 100) { // $data = Menu::select('menus.*', 'parent.name as parent_name') // ->orderBy('menus.parent_id')->orderByRaw('CAST(menus.sort AS UNSIGNED) ASC') // ->leftJoin('menus as parent', 'parent.id', '=', 'menus.parent_id') // ->where('menus.enabled', '1'); // } // else { // $data = Menu::select('menus.*', 'parent.name as parent_name','parent.icon AS parent_icon','parent.sort as parent_sort', 'parent.url as parent_url') // ->orderBy('menus.parent_id')->orderByRaw('CAST(menus.sort AS UNSIGNED) ASC') // ->leftJoin('menus as parent', 'parent.id', '=', 'menus.parent_id') // // ->leftJoin('user_menu_access as umc', 'umc.id', '=', 'menus.id') // // ->where('umc.user_id', $user_id) // // ->where('umc.ou_code', $request->input('ou_code')) // ->where('menus.enabled', '1'); // } // if ($request->keyword) { // $keyword = "%$request->keyword%"; // $data->where(function($query) use ($keyword) { // $query->where('menus.name', 'like', $keyword) // ->orWhere('parent.name', 'like', $keyword); // }); // } // $data = $data->get(); // // dd(\DB::getQueryLog()); // $data = $data->toArray(); // // dd($data); // $menus = []; // $parents = array_filter($data, function ($parent) { // return $parent['parent_id'] == 0; // }); // foreach($parents as $row) { // $menus[] = [ // 'parent' => $row, // 'child' => array_filter($data, function ($child) use ($row) { // return $child['parent_id'] == $row['id']; // }), // ]; // } // return response()->json([ // 'status' => true, // 'message' => 'All menus', // 'data' => $menus // ]); // } } PKyZ:cxcx3Http/Controllers/API/v1/EmployeeLeaveController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $keyword = str_replace(" ", "%", $keyword); $data = EmployeeLeave::with([ 'leave_type' => fn($leave_type) => $leave_type->select('id', 'name', 'enabled'), 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'leave_id', 'half_day', 'days', 'date_from', 'date_to', 'meridiem', 'hours', 'hours_deducted', 'without_pay', 'credit_to_vl', 'leave_reason_id', 'attachment', 'description', 'denied_reason', 'status', 'recommending_id', 'approver_id', 'allow_higher_approval', 'recommended_at', 'approved_at', 'created_at' ) ->where(function ($query) use ($keyword) { if ($keyword) { $query->where('column_name', 'like', "%{$keyword}%"); } }); if ($employee->roles[0]['group_id'] != 1) { $data->where('employee_id', $employee->employee_id); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $usedCredits = []; $withoutPayCredits = []; if ($employee->roles[0]['group_id'] != 1) { $usedCredits = EmployeeLeave::where([ 'employee_leaves.employee_id' => $employee->employee_id, 'employee_leaves.enabled' => 1, 'employee_leaves.without_pay'=> 0 ]) ->where('leave_id', '!=', '1') ->where('status', '!=', '99') ->join('leave_types', 'employee_leaves.leave_id', '=', 'leave_types.id') ->selectRaw('SUM(employee_leaves.days) as total, leave_types.name, leave_types.id') ->groupBy('leave_types.name', 'leave_types.id') ->get(); $withoutPayCredits = EmployeeLeave::where([ 'employee_leaves.employee_id' => $employee->employee_id, 'employee_leaves.enabled' => 1, 'employee_leaves.without_pay'=> 1 ]) ->where('status', '2') ->join('leave_types', 'employee_leaves.leave_id', '=', 'leave_types.id') ->selectRaw('SUM(employee_leaves.days) as total, leave_types.name, leave_types.id') ->groupBy('leave_types.name', 'leave_types.id') ->get(); } $data = $data->paginate($perPage); $response = [ 'data' => $data, 'used_credits' => $usedCredits, 'used_withoutpay' => $withoutPayCredits, ]; return response()->json($response); } public function getLeaveList(Request $request) { // $employee = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); $keyword = str_replace(" ", "%", $keyword); $data = EmployeeLeave::with([ 'leave_type' => fn($leave_type) => $leave_type->select('id', 'name', 'enabled'), 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'employee'=> fn($employee) => $employee->select('employee_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'leave_id', 'half_day', 'days', 'date_from', 'date_to', 'meridiem', 'hours', 'hours_deducted', 'without_pay', 'credit_to_vl', 'leave_reason_id', 'attachment', 'description', 'denied_reason', 'status', 'recommending_id', 'approver_id', 'allow_higher_approval', 'recommended_at', 'approved_at', 'created_at' ) ->where('status',2); if($dealership_id) $data = $data->where('dealer_id', $dealership_id); $data = $data->paginate($perPage); $response = [ 'data' => $data ]; return response()->json($response); } public function getLeaveCredits(Request $request) { if ($request->input('employee_id')) { $employee_id = $request->input('employee_id'); $employeeRecord = Employee::where('employee_id', $employee_id)->first(); } else { $user = Auth::user(); $employee_id = $user->employees->employee_id; $employeeRecord = Employee::where('employee_id', $employee_id)->first(); } $data = EmployeeLeaveCredits::with([ 'leave_type' => fn($query) => $query->select('id', 'name'), 'employee' => fn($employee) => $employee->select('employee_id', 'employment_status_id') ]) ->where([ 'employee_id' => $request->id ? $request->id : $employee_id, 'enabled' => 1 ]) ->select( 'employee_leave_credits.employee_id', 'employee_leave_credits.leave_type_id', 'employee_leave_credits.remaining', 'employee_leave_credits.hours' ) ->get(); // Define the leave types and their default values $leaveTypesToCheck = [ 2 => ['name' => 'Vacation Leave', 'remaining' => 0, 'hours' => 0], // Leave type 2 3 => ['name' => 'Sick Leave', 'remaining' => 0, 'hours' => 0] // Leave type 3 ]; // Get the existing leave_type_ids from the data $existingLeaveTypes = $data->pluck('leave_type_id')->toArray(); // Check if any required leave types (2 or 3) are missing foreach ($leaveTypesToCheck as $leaveTypeId => $defaultValues) { if (!in_array($leaveTypeId, $existingLeaveTypes)) { // Create a new instance of EmployeeLeaveCredits model with default values $newCredit = new EmployeeLeaveCredits([ 'employee_id' => $employee_id, // Assuming $employee_id is defined 'leave_type_id' => $leaveTypeId, 'remaining' => $defaultValues['remaining'], 'hours' => $defaultValues['hours'] ]); // Create a new LeaveType model to associate with the new credit $leaveType = new LeaveType([ 'id' => $leaveTypeId, 'name' => $defaultValues['name'] ]); // Set the relationship properly using the model $newCredit->setRelation('leave_type', $leaveType); // Add the new model to the collection $data->push($newCredit); } } // Now $data will contain both leave_type_id 2 and 3, with their respective names // If no records are found, return the same structure with empty values if ($data->isEmpty() || $employeeRecord->employment_status_id != 1) { $leaveData = LeaveType::where('enabled', 1)->get(); // dd($leaveData); $emptyData = []; foreach($leaveData as $data){ $emptyData[] = [ 'employee_id' => $employee_id, 'leave_type_id' => '', 'remaining' => '0', 'hours' => '0', 'leave_type' => [ 'id' => $data['id'], 'name' => $data['name'] ] ]; } return response()->json($emptyData); } return response()->json($data); } public function store(Request $request) { $credits_from = 0; $credits_to = 0; $without_pay = ($request->without_pay && $request->without_pay !== 'null' && $request->without_pay !== 'false' && trim($request->without_pay) !== '' ? 1 : 0); $credit_to_vl = ($request->credit_to_vl && $request->credit_to_vl !== 'null' && $request->credit_to_vl !== 'false' && trim($request->credit_to_vl) !== '' ? 1 : 0); $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $user = Auth::user(); $hours_deducted = 0; if($without_pay != 1){ $leave_credits = EmployeeLeaveCredits::where([ 'employee_id' => $user->employees->employee_id, 'enabled' => 1, 'leave_type_id' => $credit_to_vl ? 2 : $request->leave_id ])->first(); if($leave_credits) { // $remaining_leave = $leave_credits->remaining - $request->days; if(floor($request->hours) > $leave_credits->hours){ $remaining_hours = $leave_credits->hours - floor($leave_credits->hours); $remaining_leave = $remaining_hours / 8; $hours_deducted = floor($leave_credits->hours); } else { $remaining_leave = $leave_credits->remaining - $request->days; $remaining_hours = $leave_credits->hours - ($request->days * 8); $hours_deducted = $request->days * 8; } $credits_from = $leave_credits->remaining; $credits_to = $remaining_leave; try { DB::connection()->beginTransaction(); $leave_credits->remaining = $remaining_leave; $leave_credits->hours = $remaining_hours; $leave_credits->save(); DB::connection()->commit(); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } } $validator = Validator::make($request->all(), [ 'leave_id' => 'required', 'half_day' => 'required', 'date_from' => 'required|date', 'date_to' => 'required|date', ]); if ($validator->fails()) { return response()->json([ 'status' => false, 'message' => $validator->errors()->first(), 'errors' => $validator->errors() ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::beginTransaction(); try { $attachmentName = $this->handleAttachment($request); $status = EmployeeLeave::create([ 'leave_id' => $request->leave_id, 'without_pay' => $without_pay, 'credit_to_vl' => $credit_to_vl, 'employee_id' => $user->employee_id, 'company_id' => $user->employees->company_id, 'credits_from' => $credits_from, 'credits_to' => $credits_to, 'dealer_id' => $user->employees->dealer_id, 'half_day' => $request->half_day, 'date_from' => $request->date_from, 'date_to' => $request->date_to, 'days' => $request->days, 'hours' => $request->hours, 'hours_deducted' => $hours_deducted, 'meridiem' => $request->meridiem, 'allow_higher_approval' => $allow_higher_approval, 'leave_reason_id' => $request->leave_reason_id, 'description' => $request->description != 'null' ? $request->description : NULL, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::commit(); $status->load(['employee', 'leave_type']); $emailTo = $this->getEmployeeEmailData($request->recommending_id); Notification::send($emailTo, new Leave($status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $status ], Response::HTTP_CREATED); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } public function getHolidaysAndDaysOff(Request $request) { // dd($request->all()); $user = Auth::user(); $scheduleController = new EmployeeAttendanceController(); $start_date = new DateTime($request->date_from); $end_date = new DateTime($request->date_to); $end_date->modify('+1 day'); $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $hoursTotal = 0; $length = iterator_count($period); $index = 0; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $schedule = $scheduleController->getSchedule($formattedDate, $user->employee_id); $holiday = $scheduleController->getHoliday($formattedDate,$user->employee,$schedule); // dd($schedule->schedule->flexible); $dayOfWeek = date('l', strtotime($formattedDate)); if ($schedule) { $daysArray = explode(',', $schedule->schedule->day_off); // Convert string to array } else { $daysArray = []; // Or any default value } if(!$holiday && !in_array($dayOfWeek, $daysArray)){ $daysCWSArray = explode(',', $schedule->schedule->cws_day); if(in_array($dayOfWeek, $daysCWSArray)){ $fromTime = new DateTime($schedule->schedule['cws_from_time']); $toTime = new DateTime($schedule->schedule['cws_to_time']); } else { $fromTime = new DateTime($schedule->schedule['from_time']); $toTime = new DateTime($schedule->schedule['to_time']); } $interval = $fromTime->diff($toTime); $hours = $interval->h + ($interval->days * 24); // Calculate total hours $hoursMinusOne = $hours - 1; if($request->half_day == 1){ if($index == 0){ $hoursMinusOne = $hoursMinusOne / 2; } } else if ($request->half_day == 2) { if($index == $length - 1){ $hoursMinusOne = $hoursMinusOne / 2; } } $schedule->schedule->flexible ? $hoursMinusOne = 8 : ''; $hoursTotal += $hoursMinusOne; } $index++; } // dd($hoursTotal); return response()->json($hoursTotal); } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-leave/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { $id = $request->id; $data = EmployeeLeave::where('id', $id)->first(); $user = Auth::user(); $credits_from = 0; $credits_to = 0; $hours_deducted = 0; $without_pay = ($request->without_pay && $request->without_pay !== 'null' && $request->without_pay !== 'false' && trim($request->without_pay) !== '' ? 1 : 0); $credit_to_vl = ($request->credit_to_vl && $request->credit_to_vl !== 'null' && $request->credit_to_vl !== 'false' && trim($request->credit_to_vl) !== '' ? 1 : 0); $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); if($data->leave_id != $request->leave_id){ $change_leave_credits = EmployeeLeaveCredits::where([ 'employee_id' => $user->employees->employee_id, 'enabled' => 1, 'leave_type_id' => $data->leave_id ])->first(); if($change_leave_credits){ try { DB::connection()->beginTransaction(); $change_leave_credits->remaining = ($data->hours_deducted + $change_leave_credits->hours) / 8; $change_leave_credits->hours = $data->hours_deducted + $change_leave_credits->hours; $change_leave_credits->save(); DB::connection()->commit(); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } } if($request->leave_id != 1){ if($data->leave_id != $request->leave_id){ $leave_credits = EmployeeLeaveCredits::where([ 'employee_id' => $user->employees->employee_id, 'enabled' => 1, 'leave_type_id' => $request->leave_id ])->first(); if(floor($request->hours) > $leave_credits->hours){ $remaining_hours = $leave_credits->hours - floor($leave_credits->hours); $remaining_leave = $remaining_hours / 8; $hours_deducted = floor($leave_credits->hours); } else { $remaining_leave = $leave_credits->remaining - $request->days; $remaining_hours = $leave_credits->hours - ($request->days * 8); $hours_deducted = $request->days * 8; } $credits_from = $leave_credits->remaining; $credits_to = $remaining_leave; try { DB::connection()->beginTransaction(); $leave_credits->remaining = $remaining_leave; $leave_credits->hours = $remaining_hours; $leave_credits->save(); DB::connection()->commit(); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } else { $leave_credits = EmployeeLeaveCredits::where([ 'employee_id' => $user->employees->employee_id, 'enabled' => 1, 'leave_type_id' => $request->leave_id ])->first(); if($leave_credits){ if($data->hours_deducted != 0){ $hours = $request->hours; $totalHoursWithRemainingLeave = $data->hours_deducted + $leave_credits->hours; // dd($data->hours_deducted. ' - '.$hours); if($data->hours_deducted >= $hours){ $remaining_hours = $totalHoursWithRemainingLeave - $hours; $remaining_leave = $remaining_hours / 8; $hours_deducted = $hours; } else { $remaining_hours = $totalHoursWithRemainingLeave - $data->hours_deducted; $remaining_leave = $remaining_hours / 8; if($data->hours_deducted >= $hours){ $hours_deducted = $hours; } else { $hours_deducted = $data->hours_deducted; } } } $credits_from = $leave_credits->remaining; $credits_to = $remaining_leave; // dd($hours_deducted); // if($request->days > $data->days){ // $temp_remaining_days = $request->days - $data->days; // if($temp_remaining_days <= $leave_credits->remaining){ // $remaining_leave = $leave_credits->remaining - $temp_remaining_days; // } else { // return response()->json([ // 'status' => false, // 'message' => 'Unable to process request. Please try again.' // ], Response::HTTP_INTERNAL_SERVER_ERROR); // } // } else if ($request->days < $data->days){ // $temp_remaining_days = $request->days - $data->days; // $remaining_leave = $temp_remaining_days + $leave_credits->remaining; // } else { // // dd($leave_credits->remaining); // $remaining_leave = $leave_credits->remaining; // } // $credits_from = $leave_credits->remaining; // $credits_to = $remaining_leave; // $remaining_hours = $leave_credits->remaining - ($remaining_leave * 8); // dd($remaining_hours); try { DB::connection()->beginTransaction(); $leave_credits->remaining = $remaining_leave; $leave_credits->hours = $remaining_hours; $leave_credits->save(); DB::connection()->commit(); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } } } $validator = Validator::make($request->all(), [ 'leave_id' => "required", 'half_day' => "required", 'date_from' => "required|date", 'date_to' => "required|date", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-leave/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-leave/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $data->leave_id = $request->leave_id; $data->without_pay = $without_pay; $data->credit_to_vl = $credit_to_vl; $data->employee_id = $user->employee_id; $data->half_day = $request->half_day; $data->date_from = $request->date_from; $data->date_to = $request->date_to; $data->days = $request->days; $data->hours = $request->hours; $data->hours_deducted = $hours_deducted; $data->meridiem = $request->meridiem; $data->credits_from = $credits_from; $data->credits_to = $credits_to; $data->leave_reason_id = $request->leave_reason_id; $data->allow_higher_approval = $allow_higher_approval; $data->description = $request->description == "null" ? NULL : $request->description; $data->recommending_id = $request->recommending_id; $data->approver_id = $request->approver_id; $data->attachment = $attachment_name; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeLeave::find($id); if($data->without_pay != 1){ $leave_credits = EmployeeLeaveCredits::where([ 'employee_id' => $data->employee_id, 'enabled' => 1, 'leave_type_id' => $data->credit_to_vl ? 2 : $data->leave_id ])->first(); $remaining_leave = $leave_credits->remaining + ($data->hours_deducted / 8); $remaining_hours = $leave_credits->hours + $data->hours_deducted; // dd($remaining_leave); try { DB::connection()->beginTransaction(); $leave_credits->remaining = $remaining_leave; $leave_credits->hours = $remaining_hours; $leave_credits->save(); DB::connection()->commit(); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"], 200); } public function removeAttachment(Request $request) { $id = $request->id; $attachment = $request->attachment; $data = EmployeeLeave::where('id', $id)->first(); $data->attachment = NULL; $data->save(); DB::connection()->commit(); $attachment_file_path = 'employee-leave/' . $request->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZx5Http/Controllers/API/v1/TrainingHistoryController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = TrainingHistory::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('company', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = TrainingHistory::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = TrainingHistory::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = TrainingHistory::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = TrainingHistory::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ665Http/Controllers/API/v1/RequirementListController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = RequirementList::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|unique:requirement_lists,name' ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = RequirementList::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = RequirementList::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('requirement_lists')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = RequirementList::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZʠ.Http/Controllers/API/v1/ReligionController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Religion::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|unique:visa_types,name' ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Religion::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Religion::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('visa_types')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Religion::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ]nkY3Y34Http/Controllers/API/v1/EmployeeOffsetController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeOffset::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date_from', 'date_to', 'from_time', 'to_time', 'days', 'hours', 'attachment', 'description', 'denied_reason', 'status', 'recommending_id', 'allow_higher_approval', 'approver_id', 'recommended_at', 'approved_at', 'created_at' ) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); $availableOffset = ''; $usedOffset = ''; if($employee->roles[0]['group_id'] != 1){ $data->where(['employee_id' => $employee->employee_id]); $availableOffset = OffsetRemaining::where('employee_id', '=', $employee->employee_id) ->pluck('remaining'); $usedOffset = EmployeeOffset::select(DB::raw('SUM(hours) as totalOffset')) ->where('employee_id', '=', $employee->employee_id) ->where('status', '!=', '99') ->where('enabled', '=', '1') ->first(); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); $response = [ 'data' => $data, 'available_offset' => $availableOffset, 'offset_used' => $usedOffset ]; // dd($response); return response()->json($response); } public function getOffsetAvailmentList(Request $request) { // $employee = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); $data = EmployeeOffset::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'employee'=> fn($employee) => $employee->select('employee_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date_from', 'date_to', 'from_time', 'to_time', 'days', 'hours', 'attachment', 'description', 'denied_reason', 'status', 'validated', 'validated_by', 'validated_at', 'deferred_reason', 'recommending_id', 'allow_higher_approval', 'approver_id', 'recommended_at', 'approved_at', 'created_at' ) ->where('status',2) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($dealership_id) $data = $data->where('dealer_id', $dealership_id); $data = $data->paginate($perPage); $response = [ 'data' => $data, ]; // dd($response); return response()->json($response); } public function store(Request $request) { $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date_from' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $attachmentName = $this->handleAttachment($request); $Status = EmployeeOffset::create([ 'employee_id' => $user->employee_id, 'company_id' => $user->employees->company_id, 'dealer_id' => $user->employees->dealer_id, 'date_from' => $request->date_from, 'date_to' => $request->date_to, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'hours' => $request->hours, 'description' => $request->description, 'attachment' => $attachmentName, 'allow_higher_approval' => $allow_higher_approval, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); if(!OffsetRemaining::where('employee_id', '=', $Status->employee_id)->exists()){ OffsetRemaining::create([ 'employee_id' => $Status->employee_id, 'company_id' => $Status->company_id, 'remaining' => $request->hours ]); } else { $offset = OffsetRemaining::where('employee_id', '=', $Status->employee_id)->first(); if ($offset) { $offset->decrement('remaining', $request->hours); } } DB::connection()->commit(); // Load the relationships $Status->load(['employee']); // $email_to = $this->getEmployeeEmailData($request->recommending_id); // Notification::send($email_to, new OffsetAvailment($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-offset/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { // dd($request->all()); $id = $request->id; $data = EmployeeOffset::where('id', $id)->first(); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date' => "required|date", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-offset/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-offset/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $data->employee_id = $user->employee_id; $data->date_from = $request->date_from; $data->date_to = $request->date_to; $data->from_time = $request->from_time; $data->to_time = $request->to_time; $data->hours = $request->hours; $data->description = $request->description; $data->allow_higher_approval = $allow_higher_approval; $data->attachment = $attachment_name; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeOffset::find($id); $offset = OffsetRemaining::where('employee_id', '=', $data->employee_id)->first(); if ($offset) { $offset->increment('remaining', $data->hours); } if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function removeAttachment(Request $request) { $id = $request->id; $attachment = $request->attachment; $data = EmployeeOffset::where('id', $id)->first(); $data->attachment = NULL; $data->save(); DB::connection()->commit(); $attachment_file_path = 'employee-offset/' . $request->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZoxV V =Http/Controllers/API/v1/OffsetAvailmentApprovalController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $currentEmp = $employee->employees ? $employee->employees->employee_id : ''; $data = EmployeeOffset::with(['recommending', 'approving', 'employee']) ->where(function ($query) use ($employee) { $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : '' ); }) ->where('enabled', 1) ->whereNull('deleted_at') ->select('employee_offsets.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_offsets AS el WHERE el.status IN (0, 1) AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS pending, (SELECT COUNT(*) FROM employee_offsets AS el WHERE el.status = 2 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS approved, (SELECT COUNT(*) FROM employee_offsets AS el WHERE el.status = 99 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS denied') ->orderBy('status', 'ASC') ->paginate($perPage); // dd($data); // dd(DB::getQueryLog()); return response()->json($data); } public function update(Request $request, int $id) { $data = EmployeeOffset::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; if($request->status == 99){ $offset = OffsetRemaining::where('employee_id', '=', $data->employee_id)->first(); if ($offset) { $offset->increment('remaining', $data->hours); } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new OffsetAvailment($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeOffset', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeOffset', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateApprover(Request $request, int $id) { $data = EmployeeOffset::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $employee_id_for_notification = []; if($request->recommending_id != $data->recommending_id){ $employee_id_for_notification[] = $request->recommending_id; } if ($request->approver_id != $data->approver_id){ $employee_id_for_notification[] = $request->approver_id; } foreach($employee_id_for_notification as $employee_id){ $email_to = $this->getEmployeeEmailData($employee_id); try { if ($email_to) { Notification::send($email_to, new OffsetAvailment($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZZ$$<Http/Controllers/API/v1/ChangeScheduleApprovalController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $currentEmp = $employee->employees ? $employee->employees->employee_id : ''; $data = EmployeeChangeSchedule::with(['recommending', 'approving', 'employee']) ->where(function ($query) use ($employee) { $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : '' ); }) ->where('enabled', 1) ->whereNull('deleted_at') ->select('employee_change_schedules.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_change_schedules AS el WHERE el.status IN (0, 1) AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS pending, (SELECT COUNT(*) FROM employee_change_schedules AS el WHERE el.status = 2 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS approved, (SELECT COUNT(*) FROM employee_change_schedules AS el WHERE el.status = 99 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS denied') ->orderBy('status', 'ASC') ->paginate($perPage); // dd($data); // dd(DB::getQueryLog()); return response()->json($data); } public function update(Request $request, int $id) { $data = EmployeeChangeSchedule::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new ChangeSchedule($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeChangeSchedule', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeChangeSchedule', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateApprover(Request $request, int $id) { $data = EmployeeChangeSchedule::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $employee_id_for_notification = []; if($request->recommending_id != $data->recommending_id){ $employee_id_for_notification[] = $request->recommending_id; } if ($request->approver_id != $data->approver_id){ $employee_id_for_notification[] = $request->approver_id; } foreach($employee_id_for_notification as $employee_id){ $email_to = $this->getEmployeeEmailData($employee_id); try { if ($email_to) { Notification::send($email_to, new ChangeSchedule($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeChangeSchedule', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeChangeSchedule', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } public function HrValidation(Request $request,int $id){ $status = $request->status; $data = EmployeeChangeSchedule::with(['employee'])->where('id', $id)->first(); if(!$data){ return response()->json(['messages' => 'No data found.']); } $employee_id =Auth::user()->employees->employee_id; DB::beginTransaction(); try{ $data->validated_by = $employee_id; $data->validated_at = now(); $data->validated = $status; $data->deferred_reason = $request->reason; $data->save(); $email_to = $this->getEmployeeEmailData($data->employee_id); Notification::send($email_to, new ChangeSchedule($data)); DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZѬ::0Http/Controllers/API/v1/EmployeeObController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeOb::with([ 'employee', 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date_from', 'date_to', 'from_time', 'to_time', 'attachment', 'allow_higher_approval', 'destination', 'description', 'denied_reason', 'meal', 'meal_amount', 'transportation', 'transportation_amount', 'status', 'charge_to', 'validated', 'validated_by', 'validated_at', 'deferred_reason', 'recommending_id', 'approver_id', 'recommended_at', 'approved_at', 'created_at', 'validated' ) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($employee->roles[0]['group_id'] != 1){ $data->where(['employee_id' => $employee->employee_id]); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } // $data = $data->get(); $data = $data->paginate($perPage); $month = date('m'); $year = date('Y'); $totalOBForThisMonth = EmployeeOb::where(function($query) use ($month, $year) { $query->where(function($q) use ($month, $year) { $q->whereMonth('date_from', $month) ->whereYear('date_from', $year); })->orWhere(function($q) use ($month, $year) { $q->whereMonth('date_to', $month) ->whereYear('date_to', $year); }); }) ->where('enabled', 1) ->where('status', 2) ->where('employee_id', $employee->employee_id) ->count() ?? 0; $totalOBForThisYear = EmployeeOb::where(function($query) use ($year) { $query->whereYear('date_from', $year) ->orWhereYear('date_to', $year); }) ->where('enabled', 1) ->where('status', 2) ->where('employee_id', $employee->employee_id) ->count(); // First, get the count of days that match the criteria for the month and year $totalDays = EmployeeOb::where(function($query) use ($month, $year) { $query->where(function($q) use ($month, $year) { $q->whereMonth('date_from', $month) ->whereYear('date_from', $year); })->orWhere(function($q) use ($month, $year) { $q->whereMonth('date_to', $month) ->whereYear('date_to', $year); }); }) ->where('enabled', 1) ->where('status', 2) ->where('employee_id', $employee->employee_id) ->count(); // Get the number of days in the specified month and year $daysInMonth = Carbon::createFromDate($year, $month)->daysInMonth; // Calculate the average, using the days in the current month $averageOBForThisMonth = $daysInMonth > 0 ? $totalDays / $daysInMonth : 0; return response()->json([ 'data' => $data, 'total_ob_for_the_month' => $totalOBForThisMonth, 'total_ob_for_the_year' => $totalOBForThisYear, 'avg_ob_for_the_month' => number_format($averageOBForThisMonth, 1), ]); } public function getObList(Request $request) { // $employee = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); $data = EmployeeOb::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'employee'=> fn($employee) => $employee->select('employee_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date_from', 'date_to', 'from_time', 'to_time', 'attachment', 'allow_higher_approval', 'destination', 'description', 'denied_reason', 'status', 'meal', 'meal_amount', 'transportation', 'transportation_amount', 'charge_to', 'validated', 'validated_by', 'validated_at', 'deferred_reason', 'recommending_id', 'approver_id', 'recommended_at', 'approved_at', 'created_at', 'validated' ) ->where('status',2) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($dealership_id) $data = $data->where('dealer_id', $dealership_id); // $data = $data->get(); $data = $data->paginate($perPage); return response()->json([ 'data' => $data, ]); } public function store(Request $request) { $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date_from' => "required", 'date_to' => "required", 'from_time' => "required", 'to_time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $attachmentName = $this->handleAttachment($request); $Status = EmployeeOb::create([ 'employee_id' => $user->employee_id, 'company_id' => $user->employees->company_id, 'dealer_id' => $user->employees->dealer_id, 'date_from' => $request->date_from, 'date_to' => $request->date_to, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'destination' => $request->destination, 'description' => $request->description, 'attachment' => $attachmentName, 'allow_higher_approval' => $allow_higher_approval, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, 'charge_to' => $request->charge_to, ]); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); $email_to = $this->getEmployeeEmailData($request->recommending_id); Notification::send($email_to, new Travel($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-ob/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { // dd($request->all()); $id = $request->id; $data = EmployeeOb::where('id', $id)->first(); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date_from' => "required|date", 'date_to' => "required|date", 'from_time' => "required", 'to_time' => "required", 'charge_to' => "required" ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-ob/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-ob/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $data->employee_id = $user->employee_id; $data->date_from = $request->date_from; $data->date_to = $request->date_to; $data->from_time = $request->from_time; $data->to_time = $request->to_time; $data->destination = $request->destination; $data->allow_higher_approval = $allow_higher_approval; $data->description = $request->description; $data->attachment = $attachment_name; $data->charge_to = $request->charge_to; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeOb::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function removeAttachment(Request $request) { $id = $request->id; $attachment = $request->attachment; $data = EmployeeOb::where('id', $id)->first(); $data->attachment = NULL; $data->save(); DB::connection()->commit(); $attachment_file_path = 'employee-ob/' . $request->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZ56Q'Q'3Http/Controllers/API/v1/LeaveApprovalController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', 'pending'); $sortType = $request->input('sortType', 'desc'); $currentEmp = $employee->employees ? $employee->employees->employee_id : ''; $data = EmployeeLeave::with(['recommending', 'approving', 'employee', 'leave_type']) ->where(function ($query) use ($employee) { $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : '' ); }) ->where('enabled', 1) ->whereNull('deleted_at') ->select('employee_leaves.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_leaves AS el WHERE el.status IN (0, 1) AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.')) AS pending, (SELECT COUNT(*) FROM employee_leaves AS el WHERE el.status = 2 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.')) AS approved, (SELECT COUNT(*) FROM employee_leaves AS el WHERE el.status = 99 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.')) AS denied ') ->orderBy('status', 'ASC') ->get(); // dd($data); // dd(DB::getQueryLog()); return response()->json($data); } public function update(Request $request, int $id) { $data = EmployeeLeave::with(['employee', 'leave_type'])->find($id); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } if($request->status == 99){ if($data->without_pay != 1){ $leave_credits = EmployeeLeaveCredits::where([ 'employee_id' => $data->employee_id, 'enabled' => 1, 'leave_type_id' => $data->leave_id ])->first(); $remaining_leave = $leave_credits->remaining + $data->days; $remaining_hours = $leave_credits->hours + ($data->days * 8); try { DB::connection()->beginTransaction(); $leave_credits->remaining = $remaining_leave; $leave_credits->hours = $remaining_hours; $leave_credits->save(); DB::connection()->commit(); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } } DB::beginTransaction(); try { $now = date('Y-m-d H:i:s'); if ($request->status == 2) { $request['approved_at'] = $now; } elseif ($request->status == 1) { $request['recommended_at'] = $now; } if ($data->fill($request->all())->save()) { $data->touch(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $this->sendNotification($employee_id_for_notification, $data); if ($request->status == 2) { try { $leaveName = LeaveType::where('id', $data->leave_id)->pluck('name')->first(); $ledger = [ 'employee_id' => $data->employee_id, 'company_id' => $data->company_id, 'dealer_id' => $data->dealer_id, 'leave_id' => $data->id, 'date_from' => $data->date_from, 'date_to' => $data->date_to, 'credits_from' => $data->credits_from, 'credits_to' => $data->credits_to, 'credit' => $data->without_pay == 1 ? '0' : $data->days, 'hours' => $data->without_pay == 1 ? '0' : $data->hours, 'leave_type' => $data->leave_id, 'leave_name' => $leaveName . ($data->credit_to_vl == 1 ? ' - Credited to VL' : ''), 'date_applied' => date('Y-m-d'), ]; LeaveLedger::create($ledger); } catch(Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } else { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to save employee leave data.' ], 500); } } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateApprover(Request $request, int $id) { $data = EmployeeLeave::with(['employee', 'leave_type'])->find($id); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::beginTransaction(); try { $employee_ids_for_notification = array_filter([ $request->recommending_id != $data->recommending_id ? $request->recommending_id : null, $request->approver_id != $data->approver_id ? $request->approver_id : null, ]); foreach ($employee_ids_for_notification as $employee_id) { $this->sendNotification($employee_id, $data); } $data->fill($request->all())->save(); $data->touch(); DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function HrValidation(Request $request,int $id){ $status = $request->status; $data = EmployeeLeave::with('employee','leave_type')->find($id); if(!$data){ return response()->json(['messages' => 'No data found.']); } $employee_id =Auth::user()->employees->employee_id; DB::beginTransaction(); try{ $data->validated_by = $employee_id; $data->validated_at = now(); $data->validated = $status; $data->denied_reason = $request->reason; $this->sendNotification($data->employee_id, $data); $data->save(); // $data->touch(); // $email_to = $this->getEmployeeEmailData($data->employee_id); DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function sendNotification($employee_id, $data) { $email_to = $this->getEmployeeEmailData($employee_id); if ($email_to) { Notification::send($email_to, new Leave($data)); } else { $this->logNotificationError('Email To Not Found'); } } private function logNotificationError($message) { try { NotificationErrorLog::create([ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => $message ]); DB::commit(); } catch (Throwable $e) { DB::rollback(); } } public function getEmployeeEmailData($id) { return User::where('employee_id', $id)->first(); } } PKyZ*1Http/Controllers/API/v1/CitizenshipController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Citizenship::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|unique:citizenships,name' ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Citizenship::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Citizenship::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('citizenships')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Citizenship::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ  2Http/Controllers/API/v1/DocumentTypeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = DocumentType::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('description', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|unique:document_types,name' ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = DocumentType::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = DocumentType::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('document_types')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = DocumentType::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ3Http/Controllers/API/v1/ExpiredOffsetController.phpnu[input('keyword', ''); /**search keyword */ $perPage = $request->input('per_page',PHP_INT_MAX); /**items per page, default all records for dropdown purpose */ $sortBy = $request->input('sortBy', null); /**sorting by field */ $sortType = $request->input('sortType', 'ASC'); /**sort type */ $keyword = str_replace(' ','%', $keyword); /**search keyword */ /**Fetch records */ $data = User::where(fn ($q) => $q->where('first_name', 'like', '%' . $keyword . '%') ->orWhere('last_name', 'like', '%' . $keyword . '%') ->orWhere('name', 'like', '%' . $keyword . '%') ->orWhere('username', 'like', '%' . $keyword . '%') ->orWhere('email', 'like', '%' . $keyword . '%') ->orWhere('employee_id', 'like', '%' . $keyword . '%') ->orWhereHas('roles', fn($qr) => $qr->where('name', 'like', '%' . $keyword . '%')) ); /**If sorting */ if ($sortBy) { $data = $data->orderBy($sortBy, $sortType); } /**paginate */ $data = $data->paginate($perPage); /**send response */ return response()->json($data, 200); } /** * Display the specified resource. */ public function show(string $user_id) { $department_access = DepartmentAccess::find($user_id); $dept_ids = []; foreach($department_access as $departmentaccess){ $dept_ids[] = $departmentaccess; } /**Find user by id */ $user = User::find($user_id); if($user) { /**If record found, send response with record */ return response()->json([ 'data' => $user, ], 200); } /**otherwise send response with no record found*/ return response()->json(['status' => false, 'messages' => 'No data found.'], 202); } public function login(Request $request) { $request->validate([ 'username' => 'required', 'password' => 'required', ]); /**validate token */ $token = Auth::attempt($request->only('username', 'password')); /** If invalid, response unauthorized */ if (!$token) { return response()->json([ 'message' => 'Unauthorized', ], 401); } /**if valid fetch record */ $user = Auth::user(); /**response with record */ return response()->json([ 'user' => $user, 'token' => $token, ],200); } /**Saving record */ public function store(Request $request) { $user = User::where('employee_id','=',$request->employee_id)->orWhere('asa_id','=',$request->employee_id)->first(); if(!$user) return response()->json([ 'message' => 'Employee do not have ASA account yet.', ], 422); // Validate the incoming request data $validator = Validator::make($request->all(), [ 'employee_id' => 'required', 'roles' => 'required', ]); if ($validator->fails()) { /**If validation failed, response with error messages */ $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'message' => (reset($first))[0], 'errors' => $errors ], 422); } /**If passed validation, begin the transaction */ DB::connection()->beginTransaction(); try { /**Save User role/s */ foreach($request->roles as $role) { UserRole::updateOrCreate( [ 'user_id' => $user->id, 'role_id' => $role, ], [ 'user_id' => $user->id, 'role_id' => $role, ], ); } /**Commit the transactions */ DB::connection()->commit(); /**Response with success message */ return response()->json([ 'message' => 'Record Successfully added!', ], 201); } catch (\Throwable $e) { /**If something wrong happens, rollback the transactios */ DB::connection()->rollback(); /**Response with error message */ return response()->json([ 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } public function update(Request $request, int $id) { /**Find the user by id */ $data = User::find($id); /**If no record found, response with error message */ if (!$data) { return response()->json(['messages' => 'No data found.'], 422); } /**If has record, begin the transaction */ DB::connection()->beginTransaction(); try { /**fill the updated data */ $data->fill($request->all()); /**Save updated data */ $data->save(); /**apply the update */ $data->touch(); /**find Role in UserRole */ $userRole = UserRole::where('user_id', $data->id); /**then delete the current record */ $userRole->delete(); /**If has roles */ if($request['roles']) { /**put all submitted roles into container*/ $roles = []; foreach($request->roles as $role) { $roles[] = array("user_id"=>$data->id, "role_id"=>$role, "created_at"=>$data->updated_at, "updated_at"=>$data->updated_at); } /**Insert roles */ UserRole::insert($roles); } $deptAccess = DepartmentAccess::where('user_id', $data->id); $deptAccess->delete(); $departments = []; if($request->departments) { foreach($request->departments as $department) { $departments[] = [ 'user_id' => $data->id, 'department_id' => $department, 'created_at' => $data->updated_at, 'updated_at' => $data->updated_at, ]; } } DepartmentAccess::insert($departments); /**Commit all transactions */ DB::connection()->commit(); /**response with update success */ return response()->json([ 'message' => 'Record Successfully updated!', 'data' => $data, ], 201); } catch (\Throwable $e) { /**If something wrong happens, rollback all transactions */ DB::connection()->rollback(); /**response with error message */ return response()->json([ 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } public function filtered(Request $request) { $system_id = $request->input('system_id', null); $group_id = $request->input('role_group_id', null); $dealer_id = $request->input('dealer_id', null); /**Fetch records */ DB::enableQueryLog(); $data = User::without(['roles', 'employees', 'department_access', 'employee_profile_picture']); if($system_id) { $data = $data->whereHas('roles', fn($q) => $q->whereHas('group', fn($q2) => $q2->where('system_id', $system_id))); } if($group_id) { $data = $data->whereHas('roles', fn($q) => $q->where('group_id', $group_id)); } if($dealer_id) { $data = $data->whereHas('roles', fn($q) => $q->whereHas('company_access', fn($q2) => $q2->where('dealership_id', $dealer_id))); } $data = $data->get(); // dd(DB::getQueryLog()); /**send response */ return response()->json($data, 200); } } PKyZڑDHttp/Controllers/API/v1/ContactPersonInCaseOfEmergencyController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = YourModelHere::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique(TableNameHere)->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = YourModelHere::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { // Get table name $tableName = $this->getTableName(); $data = YourModelHere::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique(TableNameHere)->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = YourModelHere::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ-//1Http/Controllers/API/v1/LeaveReasonController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = LeaveReason::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }) ->select('id', 'leave_id', 'name', 'enabled'); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('leave_reasons')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = LeaveReason::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = LeaveReason::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('leave_reasons')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = LeaveReason::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZFbb-Http/Controllers/API/v1/SectionController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Section::with('department')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'department_id' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('sections')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Section::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Section::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'department_id' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('sections')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Section::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZyf-f-1Http/Controllers/API/v1/EmployeeWfhController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeWfh::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'hours', 'attachment', 'description', 'denied_reason', 'status', 'validated_by', 'validated_at', 'validated', 'deferred_reason', 'recommending_id', 'allow_higher_approval', 'approver_id', 'approved_at', 'recommended_at', 'created_at' ) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($employee->roles[0]['group_id'] != 1){ $data->where(['employee_id' => $employee->employee_id]); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function getWfhList(Request $request) { // $employee = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); $data = EmployeeWfh::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'employee'=> fn($employee) => $employee->select('employee_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'hours', 'attachment', 'description', 'denied_reason', 'status', 'validated_by', 'validated_at', 'validated', 'deferred_reason', 'recommending_id', 'allow_higher_approval', 'approver_id', 'approved_at', 'recommended_at', 'created_at' ) ->where('status',2) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($dealership_id) $data = $data->where('dealer_id', $dealership_id); $data = $data->paginate($perPage); return response()->json($data); } public function checkIfWfh(Request $request){ $wfh = DB::table('employee_wfhs') ->where('employee_id', $request->employee_id) ->where('date', date('Y-m-d')) ->where('enabled', 1) ->where('status', '>=', 2) ->count(); return $wfh; } public function store(Request $request) { // dd($request->all()); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date' => "required|date", 'hours' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $attachmentName = $this->handleAttachment($request); $Status = EmployeeWfh::create([ 'employee_id' => $user->employee_id, 'company_id' => $user->employees->company_id, 'dealer_id' => $user->employees->dealer_id, 'date' => $request->date, 'hours' => $request->hours, 'description' => $request->description, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'allow_higher_approval' => $allow_higher_approval, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); // $email_to = $this->getEmployeeEmailData($request->recommending_id); // Notification::send($email_to, new Wfh($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-wfh/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { // dd($request->all()); $id = $request->id; $data = EmployeeWfh::where('id', $id)->first(); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date' => "required|date", 'hours' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-wfh/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-wfh/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $data->employee_id = $user->employee_id; $data->date = $request->date; $data->hours = $request->hours; $data->description = $request->description; $data->allow_higher_approval = $allow_higher_approval; $data->attachment = $attachment_name; $data->status = $request->status; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeWfh::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"], 201); } public function removeAttachment(Request $request) { $id = $request->id; $attachment = $request->attachment; $data = EmployeeWfh::where('id', $id)->first(); $data->attachment = NULL; $data->save(); DB::connection()->commit(); $attachment_file_path = 'employee-wfh/' . $request->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZ,/4Http/Controllers/API/v1/PayrollSettingController.phpnu[json($data); } public function show(string $id) { $data = PayrollSetting::where('id', '=',$id)->first(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'night_differential_rate' => 'required', 'pagibig_settings_frequency' => 'required', // 'pagibig_settings_basis' => 'required', 'sss_settings_frequency' => 'required', // 'sss_settings_basis' => 'required', 'philhealth_settings_frequency' => 'required', // 'philhealth_settings_basis' => 'required', 'withholding_tax_settings_frequency' => 'required', // 'withholding_tax_settings_basis' => 'required', 'tax_table_basis' => 'required', 'working_days_per_year' => 'required', 'payment_type' => 'required', // 'cola_range_from' => 'required', // 'cola_range_to' => 'required', 'minimum_wage_for_tax_exemption' => 'required', 'night_differential_from' => 'required', 'night_differential_to' => 'required', 'overtime_minute_from' => 'required', 'overtime_minute_to' => 'required', 'late_grace_period' => 'required', 'undertime_grace_period' => 'required', 'undertime_minute_from' => 'required', 'undertime_minute_to' => 'required', // 'max_undertime_minute' => 'required', // 'gross_income_formula' => 'required', ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], 422); } DB::connection()->beginTransaction(); try { $data = PayrollSetting::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $validator = Validator::make($request->all(), [ 'night_differential_rate' => 'required', 'pagibig_settings_frequency' => 'required', // 'pagibig_settings_basis' => 'required', 'sss_settings_frequency' => 'required', // 'sss_settings_basis' => 'required', 'philhealth_settings_frequency' => 'required', // 'philhealth_settings_basis' => 'required', 'withholding_tax_settings_frequency' => 'required', // 'withholding_tax_settings_basis' => 'required', 'tax_table_basis' => 'required', 'working_days_per_year' => 'required', 'payment_type' => 'required', // 'cola_range_from' => 'required', // 'cola_range_to' => 'required', 'minimum_wage_for_tax_exemption' => 'required', 'night_differential_from' => 'required', 'night_differential_to' => 'required', 'overtime_minute_from' => 'required', 'overtime_minute_to' => 'required', 'late_grace_period' => 'required', 'late_grace_period_manager' => 'required', 'undertime_minute_from' => 'required', 'undertime_minute_to' => 'required', // 'max_undertime_minute' => 'required', // 'gross_income_formula' => 'required', ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = PayrollSetting::where('id', $id)->first(); if($data) { $data->fill($request->all()); $data->save(); $data->touch(); } else { PayrollSetting::create($request->all()); } DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully saved!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } public function destroy(int $id) { $data = PayrollSetting::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ.7::7Http/Controllers/API/v1/UndertimeApprovalController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $currentEmp = $employee->employees ? $employee->employees->employee_id : ''; $data = EmployeeUndertime::with(['recommending', 'approving', 'employee']) ->where(function ($query) use ($employee) { $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : ''); }) ->where('enabled', 1) ->whereNull('deleted_at') ->select('employee_undertimes.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_undertimes AS el WHERE el.status IN (0, 1) AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS pending, (SELECT COUNT(*) FROM employee_undertimes AS el WHERE el.status = 2 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS approved, (SELECT COUNT(*) FROM employee_undertimes AS el WHERE el.status = 99 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS denied ') ->orderBy('status', 'ASC') ->paginate(); // dd($data); // dd(DB::getQueryLog()); return response()->json($data); } public function update(Request $request, int $id) { $data = EmployeeUndertime::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new Undertime($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeUndertime', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeUndertime', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateApprover(Request $request, int $id) { $data = EmployeeUndertime::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $employee_id_for_notification = []; if($request->recommending_id != $data->recommending_id){ $employee_id_for_notification[] = $request->recommending_id; } if ($request->approver_id != $data->approver_id){ $employee_id_for_notification[] = $request->approver_id; } foreach($employee_id_for_notification as $employee_id){ $email_to = $this->getEmployeeEmailData($employee_id); try { if ($email_to) { Notification::send($email_to, new Undertime($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZ {-{-0Http/Controllers/API/v1/AsaMeetingController.phpnu[id])) { $attendeesData = []; DB::enableQueryLog(); $attendees = DB::select('SELECT ama.employee_id, epp.attachment, CONCAT(e.firstname, " ", e.lastname) as fullname, ama.status FROM asa_meeting_attendees ama LEFT JOIN employee_profile_pictures epp ON ama.employee_id = epp.employee_id LEFT JOIN employees e ON ama.employee_id = e.employee_id WHERE ama.meeting_id = ?', [$meeting->id]); // dd(DB::getQueryLog()); foreach($attendees as $attendee){ if(!in_array($attendee->employee_id, $attendeesData)){ $attendeesData['employee_id'][] = $attendee->employee_id; $attendeesData['attachment'][] = $attendee->attachment == null ? '' : asset('storage/employee-profile/' . $attendee->attachment); $attendeesData['fullname'][] = $attendee->fullname; $attendeesData['status'][] = $attendee->status; } } $meetingsWithAttendees[$meeting->id] = [ 'id' => $meeting->id, 'employee_id' => $meeting->employee_id, 'meeting_title' => $meeting->meeting_title, 'start_datetime' => $meeting->start_datetime, 'end_datetime' => $meeting->end_datetime, 'room_id' => $meeting->room_id, 'color' => $meeting->color, 'employee_invited' => $attendeesData['employee_id'], 'attendees' => $attendeesData, ]; } // dd($attendeesData['employee_id']); if ($meeting->employee_id !== null) { $meetingsWithAttendees[$meeting->id]['employee_invited'][] = $meeting->employee_id; } } foreach ($meetingsWithAttendees as &$meeting) { $meeting['employee_invited'] = json_encode($meeting['employee_invited']); } // dd($meeting); $meetingsAttendee = DB::select(' SELECT ama.id as attendee_id, am.employee_id, am.id as meeting_id, am.meeting_title, am.start_datetime, am.end_datetime, am.color, am.room_id FROM asa_meeting_attendees ama LEFT JOIN asa_meetings am ON ama.meeting_id = am.id WHERE ama.employee_id = ? AND ama.status != 99 AND ama.status != 0 ', [$employee_id]); $meetingsData = []; foreach ($meetingsAttendee as $record) { if (!isset($meetingsData[$record->meeting_id])) { $attendeesData = []; $attendees = DB::select('SELECT ama.employee_id, epp.attachment, CONCAT(e.firstname, " ", e.lastname) as fullname, ama.status FROM asa_meeting_attendees ama LEFT JOIN employee_profile_pictures epp ON ama.employee_id = epp.employee_id LEFT JOIN employees e ON ama.employee_id = e.employee_id WHERE ama.meeting_id = ?', [$record->meeting_id]); foreach($attendees as $attendee){ if(!in_array($attendee->employee_id, $attendeesData)){ $attendeesData['employee_id'][] = $attendee->employee_id; $attendeesData['attachment'][] = $attendee->attachment == null ? '' : asset('storage/employee-profile/' . $attendee->attachment); $attendeesData['fullname'][] = $attendee->fullname; $attendeesData['status'][] = $attendee->status; } } $meetingsData[$record->meeting_id] = [ 'meeting_id' => $record->meeting_id, 'employee_id' => $record->employee_id, 'meeting_title' => $record->meeting_title, 'start_datetime' => $record->start_datetime, 'end_datetime' => $record->end_datetime, 'room_id' => $record->room_id, 'color' => $record->color, 'employee_invited' => [], 'attendees' => $attendeesData, ]; } } // dd($meetingsData); // foreach ($meetingsData as &$meeting) { // $meeting['attendees'] = json_encode($meeting['attendees']); // } $meetingsData = array_values($meetingsData); $meetingsAttendee = array_values($meetingsAttendee); $data = [ 'meetingsWithAttendees' => $meetingsWithAttendees, 'meetingsData' => $meetingsData ]; // dd($data); return response()->json($data); } public function getRoomAvailability(Request $request) { // dd($request->all()); DB::enableQueryLog(); $data = DB::select('SELECT `start_datetime`, `end_datetime` FROM `asa_meetings` WHERE `room_id` = ? AND DATE(`start_datetime`) = ?', [$request->room_id, $request->date]); // dd(DB::getQueryLog()); return response()->json($data); } public function getMeetingInvitation(Request $request) { $user = Auth::user(); if($user->roles[0]->group_id == 1){ $employee_id = 'admin'; } else { $employee_id = $user->employees->employee_id; } DB::enableQueryLog(); // Define the current page and items per page $currentPage = Paginator::resolveCurrentPage(); $perPage = 15; // Number of items per page // Build the query using Query Builder $query = DB::table('asa_meetings as am') ->join('asa_meeting_attendees as ama', 'am.id', '=', 'ama.meeting_id') ->select('ama.id', 'am.meeting_title', 'am.room_id', 'am.start_datetime', 'am.end_datetime', 'ama.status') ->where('ama.employee_id', $employee_id) ->where('am.enabled', 1) ->where('ama.enabled', 1); // Paginate the results $data = $query->paginate($perPage, ['*'], 'page', $currentPage); return response()->json($data); } public function store(Request $request) { // dd($request->all()); $user = Auth::user(); // Validate request $validatedData = $request->validate([ 'title' => 'required|string|max:255', 'employee_invited' => 'required|array', 'start_time' => 'required', 'end_time' => 'required', ]); // Prepare and insert meeting data // dd($request->color); $meeting = AsaMeeting::create([ 'meeting_title' => $validatedData['title'], 'employee_id' => $user->employees->employee_id, 'start_datetime' => $request['start_datetime'].' '.$validatedData['start_time'], 'end_datetime' => $request['start_datetime'].' '.$validatedData['end_time'], 'color' => $request->color, 'room_id' => $request->room_id, 'date_created' => now(), 'update_at' => now(), 'fullname' => $user->first_name, ' ', $user->last_name ]); // dd($meeting); // Find the employees $employees = User::whereIn('employee_id', $validatedData['employee_invited'])->get(); // Send notifications to each employee foreach ($employees as $employee) { Notification::send($employee, new NotificationsAsaMeeting($meeting)); AsaMeetingAttendee::create([ 'meeting_id' => $meeting->id, 'employee_id' => $employee->employee_id, 'date_sent' => now(), ]); } return response()->json(['meeting_id' => $meeting->id]); } public function update(Request $request, int $id){ $asa_meeting = AsaMeeting::findOrFail($id); // $asa_meeting-> } public function updateMeetingConfirmation(Request $request, int $id){ $asa_meeting = AsaMeetingAttendee::findOrFail($id); DB::connection()->beginTransaction(); try { $asa_meeting->fill($request->all()); $asa_meeting->save(); $asa_meeting->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $asa_meeting, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(string $id) { // Start a database transaction DB::connection()->beginTransaction(); try { // Find the record $data = AsaMeeting::find($id); // Check if the record was found if (!$data) { DB::connection()->rollBack(); return response()->json(['messages' => 'No data found.'], Response::HTTP_UNPROCESSABLE_ENTITY); } // Update the record $data->update(['enabled' => 0]); // Touch the record to update the timestamp // $data->save(); $data->touch(); // Commit the transaction DB::connection()->commit(); // Return a success response return response()->json([ 'status' => true, 'message' => 'Record successfully updated.', 'data' => $data, ]); } catch (Throwable $e) { // Rollback the transaction if there's an error DB::connection()->rollBack(); // Return an error response return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZL4Http/Controllers/API/v1/SalaryAndWagesController.phpnu[select(DB::raw("CONCAT(firstname, ' ', lastname) as full_name"), 'employees.*') ->where('employees.employee_id', '=', $id)->first(); return response()->json($data); } public function store(Request $request, string $employee_id) { $shieldsData = [ "tax" => $request->tax ? 1 : 0, "sss" => $request->sss ? 1 : 0, "pagibig" => $request->pagibig ? 1 : 0, "philhealth" => $request->philhealth ? 1 : 0 ]; $request['shields'] = json_encode($shieldsData); $employeeExists = SalaryAndWages::where('employee_id', $employee_id)->exists(); $validator = Validator::make($request->all(), [ 'salary_rate' => [ 'required', 'min:1', ], ]); if($employeeExists){ $data = SalaryAndWages::where('employee_id', $employee_id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } else { /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = SalaryAndWages::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } } PKyZ:3~++6Http/Controllers/API/v1/OvertimeApprovalController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $currentEmp = $employee->employees ? $employee->employees->employee_id : ''; if ($employee->roles[0]->group_id == 1) { $data = EmployeeOvertime::with(['recommending', 'approving', 'employee']) ->where('enabled', 1) ->where('status', 2) ->select('employee_overtimes.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_overtimes AS el WHERE el.status = 0 AND el.recommending_id = employee_overtimes.recommending_id AND el.approver_id = employee_overtimes.approver_id) AS pending, (SELECT COUNT(*) FROM employee_overtimes AS el WHERE el.status = 2 AND el.recommending_id = employee_overtimes.recommending_id AND el.approver_id = employee_overtimes.approver_id) AS approved, (SELECT COUNT(*) FROM employee_overtimes AS el WHERE el.status = 99 AND el.recommending_id = employee_overtimes.recommending_id AND el.approver_id = employee_overtimes.approver_id) AS denied ') ->orderBy('status', 'ASC') ->get($perPage); } else { $data = EmployeeOvertime::with(['recommending', 'approving', 'employee']) ->where(function ($query) use ($employee) { $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : ''); }) ->where('enabled', 1) ->whereNull('deleted_at') ->select('employee_overtimes.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_overtimes AS el WHERE el.status IN (0, 1) AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS pending, (SELECT COUNT(*) FROM employee_overtimes AS el WHERE el.status = 2 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS approved, (SELECT COUNT(*) FROM employee_overtimes AS el WHERE el.status = 99 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS denied ') ->orderBy('status', 'ASC') ->get(); } return response()->json($data); } public function update(Request $request, int $id) { $data = EmployeeOvertime::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); $request['status'] = $request->status['status']; try { $transpo = ($request->transportation && $request->transportation !== 'null' && $request->transportation !== 'false' && trim($request->transportation) !== '' ? 1 : 0); $meal = ($request->meal && $request->meal !== 'null' && $request->meal !== 'false' && trim($request->meal) !== '' ? 1 : 0); $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new Overtime($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeOvertime', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeOvertime', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateApprover(Request $request, int $id) { $data = EmployeeOvertime::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $employee_id_for_notification = []; if($request->recommending_id != $data->recommending_id){ $employee_id_for_notification[] = $request->recommending_id; } if ($request->approver_id != $data->approver_id){ $employee_id_for_notification[] = $request->approver_id; } foreach($employee_id_for_notification as $employee_id){ $email_to = $this->getEmployeeEmailData($employee_id); try { if ($email_to) { Notification::send($email_to, new Overtime($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeOvertime', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeOvertime', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } public function HrValidation(Request $request,int $id){ $status = $request->status; $data = EmployeeOvertime::with(['employee'])->where('id', $id)->first(); if(!$data){ return response()->json(['messages' => 'No data found.']); } $employee_id =Auth::user()->employees->employee_id; DB::beginTransaction(); try{ $data->validated_by = $employee_id; $data->validated_at = now(); $data->validated = $status; $data->meal = $request->meal; $data->transportation = $request->transportation; $data->deferred_reason = $request->reason; $data->meal_amount = ( $request->meal ? $request->meal_amount : 0); $data->transportation_amount = ($request->transportation ? $request->transportation_amount : 0); $data->save(); $email_to = $this->getEmployeeEmailData($data->employee_id); Notification::send($email_to, new Overtime($data)); DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZDaTT+Http/Controllers/API/v1/AuditController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Audit::with('employee')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('user_id', 'like', '%' . $keyword . '%'); // $query->where('employees.firstname', 'like', '%' . $keyword . '%'); // $query->where('employees.lastname', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); // $audit = Audit::all(); } } PKyZ0% *Http/Controllers/API/v1/FileController.phpnu[f != null) { $filePath = storage_path('app/'.$request->d.'/'. $request->f); if (file_exists($filePath)) { $path = storage_path('app/'.$request->d.'/'.$request->f); if(!Storage::exists($request->d.'/'.$request->f)){ abort(404); } $file = Storage::get($request->d.'/'.$request->f); $type = Storage::mimeType($request->d.'/'.$request->f); return Response::make($file,200)->header("Content-Type", $type); } else { // return response()->json([], 404); // return response()->json(['error' => 'File not found'], 404); // return response()->json(['error' => 'File not found'], 204); return response()->json([ 'message' => 'File not found', 'status' => false, ], 204); } } else { return response()->json(['error' => 'File not specified'], 400); } } public function downloadFile($file) { $filePath = storage_path('app/proposal/' . $file); if (file_exists($filePath)) { $url = Storage::disk('local')->url('proposal/' . $file); return response()->json(['url' => $url]); } else { return response()->json(['message' => "File not found.", 'error' => 'File not found.'], 404); } } private function getMimeType($extension) { switch ($extension) { case 'pdf': return 'application/pdf'; case 'jpg': case 'jpeg': return 'image/jpeg'; case 'png': return 'image/png'; case 'xls': case 'xlsx': return 'application/vnd.ms-excel'; default: return 'application/octet-stream'; // Default MIME type for unknown file types } } } PKyZ{޽,,0Http/Controllers/API/v1/PermissionController.phpnu[input('per_page',PHP_INT_MAX); $keyword = $request->input('keyword', ''); $data = Permission::where(function ($query) use ($keyword) { $query->where('code', 'like', '%'.$keyword.'%') ->orWhere('name', 'like', '%'.$keyword.'%') ->orWhere('description', 'like', '%'.$keyword.'%'); })->orderBy('name')->paginate($perPage); return response()->json($data); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { /** Validate the incoming request data */ $validator = Validator::make($request->only(['code', 'name']), [ 'code' => [ 'required', 'max:20', Rule::unique('permissions')->whereNull('deleted_at'), ], 'name' => [ 'required', Rule::unique('permissions')->whereNull('deleted_at') ], ]); if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $permission = Permission::create([ 'code' => $request->code, 'name' => strtoupper($request->name), 'description' => $request->description, 'active' => $request->active, 'created_by_id' => $request->created_by_id, 'created_at' => $this->current_datetime, 'updated_at' => $this->current_datetime ]); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $permission ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { return response()->json([ 'status' => true, 'message' => 'Permission info', 'data' => Permission::find($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) { /** Validate the incoming request data */ $validator = Validator::make(array_merge($request->only(['code', 'name']), ['id' => $id]), [ 'id' => 'required|exists:permissions,id', 'code' => [ 'required', 'max:20', Rule::unique('permissions')->ignore($id)->whereNull('deleted_at') ], 'name' => [ 'required', Rule::unique('permissions')->ignore($id)->whereNull('deleted_at') ], ]); if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { // update $permission = Permission::find($id); $permission->code = $request->code; $permission->name = strtoupper($request->name); if($request->description) $permission->description = $request->description; if($request->is_active) $permission->is_active = $request->is_active; $permission->updated_at = $this->current_datetime; $permission->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Updated successfully!', 'data' => $permission ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function SaveRolePermissions(Request $request) { $validator = Validator::make($request->only(['id']), [ 'id' => "required|exists:roles,id" ]); if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { //check if has role permissions $rolePermission = RolePermission::where([ 'role_id' => $request->id, 'company_id' => $request->company_id, ]); if($request->dealership_id) { $rolePermission->where(fn($query) => $query->where('dealership_id', $request->dealership_id) ->orWhere('dealership_id', 0) ); } // if($request->department_id) { // $rolePermission->where(fn ($query) => // $query->where('department_id', $request->department_id) // ->orWhere('department_id', 0) // ); // } if($request->system_id) { $rolePermission->whereHas('module', fn ($query) => $query->where('system_id', $request->system_id) ); } $rolePermission->delete(); $role_permission = []; foreach($request->modules as $module) { foreach($module['permissions'] as $permission) { $role_permission[] = array( 'role_id'=>$request->id, 'company_id'=>$request->company_id, 'dealership_id'=>$request->dealership_id ?? 0, 'department_id'=>$request->department_id ?? 0, 'module_id'=>$module['id'], 'permission_id'=>$permission['id'], 'created_at'=>$this->current_datetime, 'updated_at'=>$this->current_datetime, ); } } RolePermission::insert($role_permission); DB::connection()->commit(); return response()->json([ 'message' => 'Saved successfully!', 'data' => $request->id ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_UNPROCESSABLE_ENTITY); } } function getAllRolePermissions(Request $request) { try { $rolePermission = RolePermission::all(); return response()->json([ 'status' => true, 'data' => $rolePermission ]); } catch (Throwable $e) { return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } function getRolePermissions(string $role_id) { try { $rolePermission = RolePermission::where('role_id', $role_id)->get(); return response()->json([ 'data' => $rolePermission ],200); } catch (Throwable $e) { return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } function CompanyPermissions(Request $request) { try { DB::enableQueryLog(); $rolePermission = collect(); $roles = \App\Models\Role::with(['company_access'])->whereIn('id', $request->roles)->get(); // dd($roles->toArray()); foreach($roles->toArray() as $role) { $role_id = $role['id']; foreach($role['company_access'] as $access) { $company_id = $access['company_id']; $dealership_id = $access['dealership_id']; // DB::enableQueryLog(); $permission = RolePermission::with(['module','permission']) ->where('role_id', $role_id) ->where('company_id', $company_id) ->where(fn($q) =>$q->where('dealership_id', $dealership_id)->orWhere('dealership_id','0')) ->get(); // dd(DB::getQueryLog()); if($permission) $rolePermission = $rolePermission->merge($permission); } } return response()->json([ 'data' => $rolePermission ]); } catch (Throwable $e) { return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Remove the specified resource from storage. */ public function destroy(int $id) { $data = Permission::find($id); if(!$data) { return response()->json(['message' => 'Record not found!'],204); } $data->delete(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully deleted!', ], 200); } } PKyZ=337Http/Controllers/API/v1/EmployeeUndertimeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeUndertime::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'from_time', 'to_time', 'hours', 'attachment', 'description', 'denied_reason', 'status', 'recommending_id', 'allow_higher_approval', 'approver_id', 'recommended_at', 'approved_at', 'created_at' ) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($employee->roles[0]['group_id'] != 1){ $data->where(['employee_id' => $employee->employee_id]); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); $month = date('m'); $year = date('Y'); $totalUTForThisMonth = EmployeeUndertime::select(DB::raw("SUM(hours) as total_hours")) ->where(function($query) use ($month, $year) { $query->where(function($q) use ($month, $year) { $q->whereMonth('date', $month) ->whereYear('date', $year); }); }) ->where('enabled', 1) ->where('status', 2) ->where('employee_id', $employee->employee_id) ->first(); $totalUTForThisYear = EmployeeUndertime::select(DB::raw("SUM(hours) as total_hours")) ->where(function($query) use ($year) { $query->whereYear('date', $year); }) ->where('enabled', 1) ->where('status', 2) ->where('employee_id', $employee->employee_id) ->first(); $averageUTForThisMonth = EmployeeUndertime::select(DB::raw("SUM(hours) as total_hours")) ->where(function($query) use ($month, $year) { $query->where(function($q) use ($month, $year) { $q->whereMonth('date', $month) ->whereYear('date', $year); }); }) ->where('enabled', 1) ->where('status', 2) ->where('employee_id', $employee->employee_id) ->avg('hours') ?? 0; // Return 0 if no records found return response()->json([ 'data' => $data, 'total_ut_for_the_month' => $totalUTForThisMonth, 'total_ut_for_the_year' => $totalUTForThisYear, 'avg_ut_for_the_month' => number_format($averageUTForThisMonth, 1), ]); } public function getUndertimeList(Request $request) { // $employee = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); $data = EmployeeUndertime::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'employee'=> fn($employee) => $employee->select('employee_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'from_time', 'to_time', 'hours', 'attachment', 'description', 'denied_reason', 'status', 'recommending_id', 'allow_higher_approval', 'approver_id', 'recommended_at', 'approved_at', 'created_at' ) ->where('status',2) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($dealership_id) $data = $data->where('dealer_id', $dealership_id); $data = $data->paginate($perPage); return response()->json([ 'data' => $data, ]); } public function store(Request $request) { // dd(($request->transportation) ? 1 : 0); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date' => "required|date", 'from_time' => "required", 'to_time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $attachmentName = $this->handleAttachment($request); $Status = EmployeeUndertime::create([ 'employee_id' => $user->employee_id, 'company_id' => $user->employees->company_id, 'dealer_id' => $user->employees->dealer_id, 'date' => $request->date, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'hours' => $request->hours, 'description' => $request->description, 'allow_higher_approval' => $allow_higher_approval, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); $email_to = $this->getEmployeeEmailData($request->recommending_id); Notification::send($email_to, new Undertime($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-undertime/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { // dd($request->all()); $id = $request->id; $data = EmployeeUndertime::where('id', $id)->first(); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date' => "required|date", 'from_time' => "required", 'to_time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-undertime/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-undertime/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $data->employee_id = $user->employee_id; $data->date = $request->date; $data->from_time = $request->from_time; $data->to_time = $request->to_time; $data->hours = $request->hours; $data->description = $request->description; $data->allow_higher_approval = $allow_higher_approval; $data->attachment = $attachment_name; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeUndertime::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function removeAttachment(Request $request) { $id = $request->id; $attachment = $request->attachment; $data = EmployeeUndertime::where('id', $id)->first(); $data->attachment = NULL; $data->save(); DB::connection()->commit(); $attachment_file_path = 'employee-undertime/' . $request->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZr.Http/Controllers/API/v1/LoanTypeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = LoanType::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('loan_types')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = LoanType::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = LoanType::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('loan_types')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = LoanType::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ+F5Http/Controllers/API/v1/DocumentTrackerController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = DocumentTracker::with([ 'employee:employee_id,firstname,lastname', 'sent_to:employee_id,firstname,lastname', 'supporting_document:id,module_name' ])->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('document_id', 'like', '%' . $keyword . '%'); })->where('employee_id', $user->employee_id) ->orWhere('send_to', $user->employee_id); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { $user = Auth::user(); $validator = Validator::make($request->all(), [ 'send_to' => "required", 'document_id' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "document-tracker/".$attachment_name; if(Storage::disk('local')->put($path, file_get_contents($image))) { DB::connection()->beginTransaction(); try { $Status = DocumentTracker::create([ 'employee_id' => $user->employee_id, 'send_to' => $request->send_to, 'document_id' => $request->document_id, 'remarks' => $request->remarks, 'attachment' => $attachment_name, ]); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } else { return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } public function update(Request $request) { // dd($request->all()); $id = $request->id; $user = Auth::user(); $data = DocumentTracker::where('id', $id)->first(); $validator = Validator::make($request->all(), [ 'send_to' => "required", 'document_id' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'document-tracker/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "document-tracker/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $data->employee_id = $user->employee_id; $data->send_to = $request->send_to; $data->document_id = $request->document_id; $data->remarks = $request->remarks; $data->attachment = $attachment_name; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = DocumentTracker::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZuu7Http/Controllers/API/v1/AttendancePostingController.phpnu[input('keyword', null); if($keyword) $keyword = str_replace(' ','%', $keyword); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', null); $sortType = $request->input('sortType', null); $data = AttendancePosting::with(['company','dealership']) ->when($keyword, fn($q) => $q->whereHas('company', fn($qc) => $qc->where('name', 'like', '%'.$keyword.'%'))->orWhereHas('dealership', fn($qc) => $qc->where('name', 'like', '%'.$keyword.'%'))->orWhere('payroll_date', 'like', $keyword.'%')) ->when($sortBy, fn ($q) => $q->orderBy($sortBy, $sortType)) ->paginate($perPage); return response()->json($data); } /** * Store a newly created resource in storage. */ public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'payroll_date' => 'required|date_format:Y-m-d', 'company_id' => 'required', 'dealership_id' => 'required', ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], 422); } DB::connection()->beginTransaction(); try { $data = AttendancePosting::where(['payroll_date' => $request->payroll_date, 'company_id' => $request->company_id, 'dealership_id' => $request->dealership_id])->first(); if($data) { $data->touch(); $reference_no = $data->reference_no; } else { $prefix = join('-',[ 'ATP', \App\Models\Dealership::find($request->dealership_id)->code ]); /**get reference code */ do { $reference_no = CommonHelper::generateReferenceCode($prefix); } while (AttendancePosting::where('reference_no',$reference_no)->exists()); $data = AttendancePosting::create(array_merge( $request->except(['details']), [ 'reference_no' => $reference_no ] )); } foreach($request->details as $detail) { AttendancePostingDtls::where(['header_id' => $data->id, 'employee_id' => $detail['employee_id']])->delete(); $dtls = AttendancePostingDtls::create(array_merge( $detail, [ 'header_id' => $data->id, 'reference_no' => $data->reference_no, ] )); /** Update processed details */ $where = ['payroll_date' => $request->payroll_date, 'employee_id' => $detail['employee_id']]; $updateData = ['header_id' => $data->id]; ProcessedTimelog::where($where)->update($updateData); ProcessedAbsent::where($where)->update($updateData); ProcessedTardiness::where($where)->update($updateData); ProcessedUndertime::where($where)->update($updateData); ProcessedOvertime::where($where)->update($updateData); ProcessedLeave::where($where)->update($updateData); ProcessedHolidayRestdayDuty::where($where)->update($updateData); ProcessedDailyWorkHours::where($where)->update($updateData); ProcessedSchedule::where($where)->update($updateData); ProcessedOb::where($where)->update($updateData); ProcessedOffsetAvailment::where($where)->update($updateData); } DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', 'data' => $data ],201); } catch (\Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } /** * Display the specified resource. */ public function show(Request $request, string $payroll_date) { $company_id = $request->company_id; $data = AttendancePostingDtls::select('dealership_id', 'department_id') ->whereHas('header', fn($q) => $q->where(['payroll_date' => $payroll_date, 'company_id' => $company_id])) ->distinct() ->orderBy('dealership_id') ->orderBy('department_id') ->get() // Fetch all records ->map(function ($item) use($payroll_date, $company_id) { $posted = AttendancePosting::where(['payroll_date' => $payroll_date, 'company_id' => $company_id,'dealership_id'=>$item['dealership_id']])->whereNotNull('posted_at')->first(); $item->posted = $posted ? true : false; return $item; }); // dd(DB::getQueryLog()); return response()->json($data, 200); } /** * Update the specified resource in storage. */ public function update(Request $request, int $id) { $data = AttendancePosting::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } // Validate the incoming request data $validator = Validator::make($request->all(), [ 'payroll_date' => 'required|date_format:Y-m-d', ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], 422); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Remove the specified resource from storage. */ public function destroy(int $id) { $data = AttendancePosting::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); try { $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getProcessedRecords(Request $request) { $where = $request->toArray(); $header = AttendancePosting::with(['dealership'])->where($where)->first(); DB::enableQueryLog(); $details = AttendancePostingDtls::with(['employee','department'])->where([ 'company_id' => $request->company_id, 'dealership_id' => $request->dealership_id, ]) ->wherehas('header', fn($q) => $q->where($where))->orderBy('department_id')->get(); // dd(DB::getQueryLog()); $timelogs = ProcessedTimelog::where($where)->orderBy('department_id')->get(); $absences = ProcessedAbsent::where($where)->orderBy('department_id')->get(); $tardiness= ProcessedTardiness::where($where)->orderBy('department_id')->get(); $undertimes = ProcessedUndertime::where($where)->orderBy('department_id')->get(); $overtimes = ProcessedOvertime::where($where)->orderBy('department_id')->get(); $night_differentials = ProcessedNightDifferential::where($where)->orderBy('department_id')->get(); $leaves = ProcessedLeave::where($where)->orderBy('department_id')->get(); $obs = ProcessedOb::where($where)->orderBy('department_id')->get(); $offsets = ProcessedOffsetAvailment::where($where)->orderBy('department_id')->get(); $holidayRestdays = ProcessedHolidayRestdayDuty::where($where)->orderBy('department_id')->get(); $dailyWorkHours = ProcessedDailyWorkHours::where($where)->orderBy('department_id')->get(); $schedules = ProcessedSchedule::where($where)->orderBy('department_id')->get(); return response()->json(['header'=>$header, 'details' => $details, 'attendance' => [ 'timelog' => $timelogs, 'absent' => $absences, 'tardiness' => $tardiness, 'undertime' => $undertimes, 'overtime' => $overtimes, 'night_differential' => $night_differentials, 'leave' => $leaves, 'ob' => $obs, 'offset' => $offsets, 'holiday' => $holidayRestdays, 'schedule' => $schedules, 'dailyWorkHours' => $dailyWorkHours, ]]); } public function updateTimelog(Request $request) { DB::beginTransaction(); try { $where = [ 'payroll_date' =>$request->payroll_date, 'company_id' =>$request->company_id, 'dealership_id' =>$request->dealership_id, 'employee_id' => $request->employee_id, 'date' => $request->date, ]; $whereDetail = [ 'company_id' =>$request->company_id, 'dealership_id' =>$request->dealership_id, 'employee_id' => $request->employee_id, ]; $updateData =[ 'payroll_date' =>$request->payroll_date, 'company_id' =>$request->company_id, 'dealership_id' =>$request->dealership_id, 'department_id' =>$request->department_id, 'employee_id' => $request->employee_id, 'date' => $request->date, 'time' => $request->time, 'in_out' => $request->in_out, 'reason' => $request->reason, 'created_by' => Auth::user()->employee_id, ]; TimelogEdit::updateOrCreate($where, $updateData); DB::commit(); // $timelog = ProcessedTimelog::where($where)->where('in_out', $request->in_out)->first(); // // DB::enableQueryLog(); // if(!is_null($timelog)) { // ProcessedTimelog::where($where)->where('in_out', $request->in_out)->update($updateData); // } else { // ProcessedTimelog::create($updateData); // } // // dd(DB::getQueryLog()); // // dd($timelog); // /**Fetch existing processed records */ // $timelogs = ProcessedTimelog::where($where)->get(); // $schedule = ProcessedSchedule::where($where)->first(); // $tardiness= ProcessedTardiness::where($where)->first(); // $undertime = ProcessedUndertime::where($where)->first(); // $detail = AttendancePostingDtls::where($whereDetail)->first(); // /**Update tardiness */ // if($request->in_out = 'I' && $timelogs && !is_null($timelogs->first(fn($tl) => $tl->in_out == 'I'))) { // $timelog = $timelogs->first(fn($tl) => $tl->in_out == 'I'); // $timeIn = Carbon::parse($timelog['date'].' '.$timelog['time']); // $schedIn = Carbon::parse($schedule->date. ' '.$schedule->sched_in); // $interval = $timeIn->diff($schedIn); // $schedIn->add(new DateInterval('PT6M')); // Add 5 minutes grace period // $minutes_tardy = 0; // if ($timeIn > $schedIn) { // // Calculate the difference // // return $interval->format('%I minutes'); // $minutes = (int) ltrim($interval->format('%i'), '0'); // $minutes_tardy = floor($minutes); // } // $minutes_differ = 0; // $minutes_differ = $minutes_tardy - ($tardiness ? $tardiness->no_of_minutes : 0); // // dd($minutes_tardy); // if($minutes_tardy ==0 && $tardiness) { // ProcessedTardiness::where($where)->delete(); // } elseif ($minutes_tardy > 0) { // ProcessedTardiness::updateOrCreate($where, // array_merge($where,[ // 'no_of_minutes' => $minutes_tardy, // ])); // } // $updated_minutes = ($detail ? $detail->minutes_late : 0) + $minutes_differ; // AttendancePostingDtls::where($whereDetail)->update(['minutes_undertime' => $updated_minutes]); // } // /**if request is out, update undertime*/ // if($request->in_out = 'O' && $timelogs && !is_null($timelogs->first(fn($tl) => $tl->in_out == 'O'))) { // $timelog = $timelogs->first(fn($tl) => $tl->in_out == 'O'); // $timeOut = Carbon::parse($timelog->date.' '.$timelog->time); // $schedOut = Carbon::parse($schedule->date. ' '.$schedule->sched_out); // $interval = $schedOut->diff($timeOut); // $minutes_undertime = 0; // if ($schedOut > $timeOut) { // // Calculate the difference // // return $interval->format('%I minutes'); // $minutes = (int) ltrim($interval->format('%i'), '0'); // $minutes_undertime = floor($minutes); // } // $minutes_differ = 0; // $minutes_differ = $minutes_undertime - ($undertime ? $undertime->no_of_minutes : 0); // if($minutes_undertime ==0 && $undertime) { // ProcessedUndertime::where($where)->delete(); // } elseif ($minutes_undertime > 0) { // if(!is_null($undertime)) { // ProcessedUndertime::where($where)->update([ // 'no_of_minutes' => $minutes_undertime // ]); // } else { // $time_in = !is_null($timelogs->first(fn($tl) => $tl->in_out=='I')) ? $timelogs->first(fn($tl) => $tl->in_out=='I')->time : null; // $time_out = !is_null($timelogs->first(fn($tl) => $tl->in_out=='O')) ? $timelogs->first(fn($tl) => $tl->in_out=='O')->time : null; // ProcessedUndertime::create([ // 'payroll_date' =>$request->payroll_date, // 'company_id' =>$request->company_id, // 'dealership_id' =>$request->dealership_id, // 'department_id' =>$request->department_id, // 'employee_id' => $request->employee_id, // 'date' => $request->date, // 'no_of_minutes' => $minutes_undertime, // 'schedule_in' => $schedule->schedule_in, // 'schedule_out' => $schedule->schedule_out, // 'time_in' => $time_in, // 'time_out' => $time_out, // ]); // } // } // $updated_minutes = ($detail ? $detail->minutes_undertime : 0) + $minutes_differ; // AttendancePostingDtls::where($whereDetail)->update(['minutes_undertime' => $updated_minutes]); // } // DB::commit(); // unset($where['date']); // /**Fetch updated records before response */ // $timelogs = ProcessedTimelog::where($where)->get(); // $absences = ProcessedAbsent::where($where)->get(); // $tardiness= ProcessedTardiness::where($where)->get(); // $undertimes = ProcessedUndertime::where($where)->get(); // $overtimes = ProcessedOvertime::where($where)->get(); // $leaves = ProcessedLeave::where($where)->get(); // $holidayRestdays = ProcessedHolidayRestdayDuty::where($where)->get(); // $dailyWorkHours = ProcessedDailyWorkHours::where($where)->get(); // $schedules = ProcessedSchedule::where($where)->get(); // $details = AttendancePostingDtls::where($whereDetail)->first(); // $data = [ // 'timelog' => $timelogs, // 'absent' => $absences, // 'tardiness' => $tardiness, // 'undertime' => $undertimes, // 'overtime' => $overtimes, // 'leave' => $leaves, // 'holiday' => $holidayRestdays, // 'schedule' => $schedules, // 'dailyWorkHours' => $dailyWorkHours, // ]; return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', // 'data' => $data, // 'details' => $details, ],201); } catch (\Exception $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateAttendanceByEmployee(Request $request) { $payroll_date = $request->input('payroll_date'); $company_id = $request->input('company_id'); $dealership_id = $request->input('dealership_id'); $employee_id = $request->input('employee_id'); $date_from = $request->input('date_from', null); $date_to = $request->input('date_to', null); $date = $request->input('date', null); /**GEt timelogs */ $where = [ 'payroll_date' => $payroll_date, 'company_id' => $company_id, 'dealership_id' => $dealership_id, 'employee_id' => $employee_id, 'date' => $date, ]; $timelogs = ProcessedTimelog::where($where)->get(); $schedules = ProcessedSchedule::where($where)->first(); $tardiness= ProcessedTardiness::where($where)->first(); $undertimes = ProcessedUndertime::where($where)->first(); $overtimes = ProcessedOvertime::where($where)->first(); $leaves = ProcessedLeave::where($where)->first(); $holidayRestdays = ProcessedHolidayRestdayDuty::where($where)->first(); $absences = ProcessedAbsent::where($where)->first(); $dailyWorkHours = ProcessedDailyWorkHours::where($where)->first(); /**compute tardiness */ if($timelogs && $timelogs->filter(fn($tl) => $tl->in_out =='I')->isNotEmpty()) { $time_in = $timelogs->filter(fn($tl) => $tl->in_out=='I')->toArray(); $firstTimelogTime = Carbon::parse($time_in['date'].' '.$time_in['time']); $scheduledStartTime = Carbon::parse($schedules->data. ' '.$schedules->sched_in); $interval = $firstTimelogTime->diff($scheduledStartTime); } $scheduledStartTime->add(new DateInterval('PT6M')); // Add 5 minutes grace period $minutes_tardy = 0; if ($firstTimelogTime > $scheduledStartTime) { // Calculate the difference // return $interval->format('%I minutes'); $minutes = (int) ltrim($interval->format('%i'), '0'); $minutes_tardy = floor($minutes); } if($minutes_tardy ==0 && $tardiness) { ProcessedTardiness::where($where)->delete(); } elseif ($minutes_tardy > 0) { ProcessedTardiness::updateOrCreate($where, array_merge($where,[ 'no_of_minutes' => $minutes_tardy, '' ])); } } /** * Post specified resource in storage. */ public function postRecord(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'payroll_date' => 'required|date_format:Y-m-d', ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], 422); } $payroll_date = $request->input('payroll_date'); $company_id = $request->input('company_id'); $dealership_id = $request->input('dealership_id'); $data = AttendancePosting::where(['payroll_date' => $payroll_date, 'company_id' => $company_id, 'dealership_id' => $dealership_id])->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $data->fill(['posted_at' => $this->current_datetime, 'posted_by'=>auth()->user()->employee_id]); $data->save(); $data->touch(); /**Update the requests as posted */ EmployeeLeave::where(['company_id' => $data->company_id, 'dealer_id' => $data->dealership_id, 'processed' => 1])->where('date_to','>=',$data->start_date) ->where('date_to', '<=', $data->end_date) ->whereNull('posting_id') ->update(['posted' => 1, 'posting_id'=>$data->id]); EmployeeOvertime::where(['company_id' => $data->company_id, 'dealer_id' => $data->dealership_id, 'processed' => 1])->where('date_to','>=',$data->start_date) ->where('date_to', '<=', $data->end_date) ->whereNull('posting_id') ->update(['posted' => 1, 'posting_id'=>$data->id]); EmployeeOb::where(['company_id' => $data->company_id, 'dealer_id' => $data->dealership_id, 'processed' => 1])->where('date_to','>=',$data->start_date) ->where('date_to', '<=', $data->end_date) ->whereNull('posting_id') ->update(['posted' => 1, 'posting_id'=>$data->id]); EmployeeOffset::where(['company_id' => $data->company_id, 'dealer_id' => $data->dealership_id, 'processed' => 1])->where('date_to','>=',$data->start_date) ->where('date_to', '<=', $data->end_date) ->whereNull('posting_id') ->update(['posted' => 1, 'posting_id'=>$data->id]); EmployeeTimeAdjustment::where(['company_id' => $data->company_id, 'dealer_id' => $data->dealership_id, 'processed' => 1])->where('date','>=',$data->start_date) ->where('date', '<=', $data->end_date) ->whereNull('posting_id') ->update(['posted' => 1, 'posting_id'=>$data->id]); EmployeeChangeSchedule::where(['company_id' => $data->company_id, 'dealer_id' => $data->dealership_id, 'processed' => 1])->where('date','>=',$data->start_date) ->where('date', '<=', $data->end_date) ->whereNull('posting_id') ->update(['posted' => 1, 'posting_id'=>$data->id]); // EmployeeOffset::where(['company_id' => $data->company_id, 'dealer_id' => $data->dealership_id, 'processed' => 1])->where('date_to','>=',$data->start_date)->where('date_to', '<=', $data->end_date)->whereNull('posting_id')->update(['posted' => 1, 'posting_id'=>$data->id]); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Post specified resource in storage. */ public function unpostRecord(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'payroll_date' => 'required|date_format:Y-m-d', ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], 422); } $payroll_date = $request->input('payroll_date'); $company_id = $request->input('company_id'); $dealership_id = $request->input('dealership_id'); $data = AttendancePosting::where(['payroll_date' => $payroll_date, 'company_id' => $company_id, 'dealership_id' => $dealership_id])->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $data->fill(['posted_at' => null, 'posted_by'=>auth()->user()->employee_id]); $data->save(); $data->touch(); /**Update the requests as posted */ EmployeeLeave::where('posting_id', $data->id)->update(['posted' => 0, 'posting_id'=>null]); EmployeeOvertime::where('posting_id', $data->id)->update(['posted' => 0, 'posting_id'=>null]); EmployeeOb::where('posting_id', $data->id)->update(['posted' => 0, 'posting_id'=>null]); EmployeeOffset::where('posting_id', $data->id)->update(['posted' => 0, 'posting_id'=>null]); EmployeeTimeAdjustment::where('posting_id', $data->id)->update(['posted' => 0, 'posting_id'=>null]); EmployeeChangeSchedule::where('posting_id', $data->id)->update(['posted' => 0, 'posting_id'=>null]); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getTimelogRecords(Request $request) { $employee_id = $request->employee_id; $time_keeping_id = $request->time_keeping_id; $date = $request->date; $in_out = $request->in_out; try { $timelogs = Timelog::where('time_keeping_id', $time_keeping_id) ->whereDate('datetimelog',$date) ->get(); $time_adjustments = EmployeeTimeAdjustment::where(['employee_id' => $employee_id, 'date'=>$date, 'in_out' => $in_out]) ->first(); $timelog_edit = TimelogEdit::where(['employee_id' => $employee_id, 'date'=>$date, 'in_out' => $in_out]) ->first(); return response()->json([ 'timelogs' => $timelogs, 'time_adjustments' => $time_adjustments, 'timelog_edit' => $timelog_edit, ], 200); } catch (\Exception $e) { return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZ/a&&6Http/Controllers/API/v1/EmployeeScheduleController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); DB::enableQueryLog(); $data = EmployeeSchedule::with(['employee', 'schedule', 'employee.dealership'])->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id','like',"{$keyword}%") ->orWhereHas('schedule', fn($q) => $q->where('name','like',"%{$keyword}%")) ->orWhereHas('employee', fn($q) => $q->where('lastname', 'like',"%{$keyword}%") ->orWhere('middlename', 'like',"%{$keyword}%") ->orWhere('firstname', 'like',"%{$keyword}%")); }); if($user->roles[0]->group_id != 1 && $user->roles[0]->group_id != 2) { $data->whereHas('employee', fn($q) => $q->where('dealer_id', $dealership_id)); } $data = $data->paginate($perPage); // dd(DB::getQueryLog()); return response()->json($data); } public function show(Request $request, string $id) { // dd('bla'); $user = Auth::user(); $data = EmployeeSchedule::where('employee_id', $user->employee_id)->exists(); return response()->json($data); } public function store(Request $request) { // dd($request->all()); $request['effectivity_date'] = $request->date_from; // dd($request->all()); // Validate the incoming request data $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'schedule_id' => [ 'required', ], 'date_from' => [ 'required', ], 'effectivity_date' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { foreach ($request->employee_id as $employee) { $request['employee_id'] = $employee; $company = Employee::select('company_id')->where('employee_id', '=', $employee)->first(); $request['company_id'] = $company->company_id; $data = EmployeeSchedule::create($request->all()); DB::connection()->commit(); } return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = EmployeeSchedule::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'schedule_id' => [ 'required', ], 'date_from' => [ 'required', ], 'effectivity_date' => [ 'required', ], ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); // Invalidate cache for 'companies_' key when a company is updated Cache::forget('companies_'); // Adjust cache key if necessary return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeSchedule::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function getEmployeeWorkingHoursForChangeSchedule(Request $request) { // dd($request->all()); $user = Auth::user(); $scheduleController = new EmployeeAttendanceController(); $start_date = new DateTime($request->date_from); $end_date = new DateTime($request->date_to); $end_date->modify('+1 day'); $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $hoursTotal = 0; $length = iterator_count($period); $index = 0; $hoursArray = []; // Array to store $hoursMinusOne values foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $schedule = $scheduleController->getSchedule($formattedDate, $user->employee_id); $holiday = $scheduleController->getHoliday($formattedDate, $user->employee, $schedule); $dayOfWeek = date('l', strtotime($formattedDate)); if ($schedule) { $daysArray = explode(',', $schedule->schedule->day_off); // Convert string to array } else { $daysArray = []; // Or any default value } if (!$holiday && !in_array($dayOfWeek, $daysArray)) { $daysCWSArray = explode(',', $schedule->schedule->cws_day); $daysShiftingArray = explode(',', $schedule->schedule->shifting_day); if (in_array($dayOfWeek, $daysCWSArray)) { $fromTime = new DateTime($schedule->schedule['cws_from_time']); $toTime = new DateTime($schedule->schedule['cws_to_time']); } else if (in_array($dayOfWeek, $daysShiftingArray)) { $fromTime = new DateTime($schedule->schedule['shifting_from_time']); $toTime = new DateTime($schedule->schedule['shifting_to_time']); } else { $fromTime = new DateTime($schedule->schedule['from_time']); $toTime = new DateTime($schedule->schedule['to_time']); } $interval = $fromTime->diff($toTime); $hours = $interval->h + ($interval->days * 24); // Calculate total hours $hoursMinusOne = $hours - 1; if ($request->half_day == 1) { if ($index == 0) { $hoursMinusOne = $hoursMinusOne / 2; } } else if ($request->half_day == 2) { if ($index == $length - 1) { $hoursMinusOne = $hoursMinusOne / 2; } } $schedule->schedule->flexible ? $hoursMinusOne = 8 : ''; $hoursArray[] = $hoursMinusOne; // Store the value of $hoursMinusOne $hoursTotal += $hoursMinusOne; } $index++; } // Check if all $hoursMinusOne values are the same $allSame = count(array_unique($hoursArray)) === 1; if ($allSame) { return response()->json([ 'message' => 'All value are same', 'status' => 'success', 'hoursTotal' => $hoursTotal, ],201); } else { return response()->json([ 'status' => false, 'message' => 'All value are not the same', 'hoursTotal' => '' ]); } } } PKyZ$$<Http/Controllers/API/v1/TimeAdjustmentApprovalController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $currentEmp = $employee->employees ? $employee->employees->employee_id : ''; $data = EmployeeTimeAdjustment::with(['recommending', 'approving', 'employee']) ->where(function ($query) use ($employee) { $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : ''); }) ->where('enabled', 1) ->whereNull('deleted_at') ->select('employee_time_adjustments.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_time_adjustments AS ems WHERE ems.status IN (0, 1) AND (ems.recommending_id = '.$currentEmp.' OR ems.approver_id = '.$currentEmp.') AND ems.deleted_at IS NULL) AS pending, (SELECT COUNT(*) FROM employee_time_adjustments AS ems WHERE ems.status = 2 AND (ems.recommending_id = '.$currentEmp.' OR ems.approver_id = '.$currentEmp.') AND ems.deleted_at IS NULL) AS approved, (SELECT COUNT(*) FROM employee_time_adjustments AS ems WHERE ems.status = 99 AND (ems.recommending_id = '.$currentEmp.' OR ems.approver_id = '.$currentEmp.') AND ems.deleted_at IS NULL) AS denied ') ->orderBy($sortBy, $sortType) ->get(); // dd($data); // dd(DB::getQueryLog()); return response()->json($data); } public function update(Request $request, int $id) { $data = EmployeeTimeAdjustment::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new TimeAdjustment($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeTimeAdjustment', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeTimeAdjustment', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateApprover(Request $request, int $id) { $data = EmployeeTimeAdjustment::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $employee_id_for_notification = []; if($request->recommending_id != $data->recommending_id){ $employee_id_for_notification[] = $request->recommending_id; } if ($request->approver_id != $data->approver_id){ $employee_id_for_notification[] = $request->approver_id; } foreach($employee_id_for_notification as $employee_id){ $email_to = $this->getEmployeeEmailData($employee_id); try { if ($email_to) { Notification::send($email_to, new TimeAdjustment($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeTimeAdjustment', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeTimeAdjustment', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } public function HrValidation(Request $request,int $id){ $status = $request->status; $data = EmployeeTimeAdjustment::with(['employee'])->where('id', $id)->first(); if(!$data){ return response()->json(['messages' => 'No data found.']); } $employee_id =Auth::user()->employees->employee_id; DB::beginTransaction(); try{ $data->validated_by = $employee_id; $data->validated_at = now(); $data->validated = $status; $data->deferred_reason = $request->reason; $data->save(); $email_to = $this->getEmployeeEmailData($employee_id); Notification::send($email_to, new TimeAdjustment($data)); DB::commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZ/8Http/Controllers/API/v1/EmployeeSuspensionController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeSuspension::with(['employee'])->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'date_from' => [ 'required', ], 'date_to' => [ 'required', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $employee_info = Employee::select('company_id', 'dealer_id')->where('employee_id', $request->employee_id)->first(); $request['company_id'] = $employee_info->company_id; $request['dealer_id'] = $employee_info->dealer_id; $request['employee_id'] = $request->employee_id; $data = EmployeeSuspension::create($request->all()); DB::connection()->commit(); // $data = EmployeeSuspension::create($request->all()); // DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = EmployeeSuspension::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'date_from' => [ 'required', ], 'date_to' => [ 'required', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeSuspension::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ[s3Http/Controllers/API/v1/ScheduleShiftController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = ScheduleShift::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // dd($request->all()); // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('schedule_shifts')->whereNull('deleted_at') ], 'day_off' => 'required|array|min:1', // Ensure day_off is an array and has at least one day 'day_off.*' => 'in:Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday' // Ensure days are valid ]); // If validation fails, return with error message if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } // Convert day_off array to comma-separated string $dayOffString = implode(',', $request->day_off); $request->merge(['day_off' => $dayOffString]); $shiftingOffString = implode(',', $request->shifting_day); $request->merge(['shifting_day' => $shiftingOffString]); $wfhString = implode(',', $request->wfh); $request->merge(['wfh' => $wfhString]); // Uncomment for debugging if needed // dd($request->all()); DB::connection()->beginTransaction(); try { // Create the record in the database $data = ScheduleShift::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = ScheduleShift::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('schedule_shifts')->ignore($id)->whereNull('deleted_at') ], 'day_off' => 'required|array|min:1', // Ensure day_off is an array and has at least one day 'day_off.*' => 'in:Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday', // Ensure days are valid ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } // Convert day_off array to comma-separated string $dayOffString = implode(',', $request->day_off); $request->merge(['day_off' => $dayOffString]); $shiftingOffString = implode(',', $request->shifting_day); $request->merge(['shifting_day' => $shiftingOffString]); $wfhString = implode(',', $request->wfh); $request->merge(['wfh' => $wfhString]); DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = ScheduleShift::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZinput('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); $data = EmployeeBenefits::with(['employee', 'benefit']) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id', 'like', '%' . $keyword . '%'); }) ->whereHas('benefit'); // Exclude rows without a benefit if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } if ($request->id) { $data->where('employee_id', $request->id); } if($user->roles[0]->group_id != 1 && $user->roles[0]->group_id != 2) { $data->whereHas('employee', fn($q) => $q->where('dealer_id', $dealership_id)); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'date_from' => [ 'required', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { foreach ($request->employee_id as $employee) { $employee_info = Employee::select('company_id', 'dealer_id')->where('employee_id', $employee)->first(); $request['company_id'] = $employee_info->company_id; $request['dealer_id'] = $employee_info->dealer_id; $request['employee_id'] = $employee; $data = EmployeeBenefits::create($request->all()); DB::connection()->commit(); } // $data = EmployeeBenefits::create($request->all()); // DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = EmployeeBenefits::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'date_from' => [ 'required', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeBenefits::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ$b  =Http/Controllers/API/v1/AttendanceRequestStatusController.phpnu[employees->employee_id; $data = [ 'leave' => $this->getStatusCounts(EmployeeLeave::class, $employeeId), 'monthly_schedule' => $this->getStatusCounts(EmployeeMonthlySchedule::class, $employeeId), 'time_adjustment' => $this->getStatusCounts(EmployeeTimeAdjustment::class, $employeeId), 'overtime' => $this->getStatusCounts(EmployeeOvertime::class, $employeeId), 'undertime' => $this->getStatusCounts(EmployeeUndertime::class, $employeeId), 'wfh' => $this->getStatusCounts(EmployeeWfh::class, $employeeId), 'change_schedule' => $this->getStatusCounts(EmployeeChangeSchedule::class, $employeeId), 'ob' => $this->getStatusCounts(EmployeeOb::class, $employeeId), 'offset_earning' => $this->getStatusCounts(EmployeeOffsetEarning::class, $employeeId), 'offset_availment' => $this->getStatusCounts(EmployeeOffset::class, $employeeId), ]; return response()->json($data); } private function getStatusCounts($model, $employeeId) { return $model::where(function ($query) use ($employeeId) { $query->where('recommending_id', $employeeId) ->orWhere('approver_id', $employeeId); }) ->where('enabled', 1) ->selectRaw(' COUNT(CASE WHEN status = 0 THEN 1 END) AS pending, COUNT(CASE WHEN status = 1 THEN 1 END) AS for_approval, COUNT(CASE WHEN status = 2 THEN 1 END) AS approved, COUNT(CASE WHEN status = 99 THEN 1 END) AS denied ') ->first() ->toArray(); } } ?>PKyZ6T_%%=Http/Controllers/API/v1/EmployeeMonthlyScheduleController.phpnu[where('requested_by', $user->employee_id) ->get(); $decodedSchedules = []; foreach ($monthlyEmployeeScheduleRequest as $schedule) { $decodedData = json_decode($schedule->data, true); $decodedSchedules[] = [ 'id' => $schedule->id, 'department_name' => $schedule->department->name, 'department_id' => $schedule->department_id, 'department_ids' => $decodedData['department_ids'], 'entries' => $decodedData['entries'], 'recommending' => $schedule->recommending, 'approving' => $schedule->approving, 'recommending_id' => $schedule->recommending_id, 'approver_id' => $schedule->approver_id, 'status' => $schedule->status, 'validated' =>$schedule->validated, 'validated_by' =>$schedule->validated_by, 'validated_at' =>$schedule->validated_at, 'deferred_reason' => $schedule->deferred_reason, 'created_at' => $schedule->created_at, 'updated_at' => $schedule->updated_at, ]; } // Return the decoded schedules as a JSON response return response()->json($decodedSchedules); } public function store(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'department' => 'required|array', 'department.*' => 'integer|exists:departments,id', 'entries' => 'required|array', 'entries.*.employee' => 'required|array', 'entries.*.schedule_id' => 'required|integer|exists:schedule_shifts,id', 'entries.*.date_from' => 'required|date', 'entries.*.date_to' => 'nullable|date|after_or_equal:entries.*.date_from', ]); $combinedEntry = [ 'department_ids' => $validated['department'], 'entries' => [], ]; foreach ($validated['entries'] as $entry) { $currentEntry = [ 'schedule_id' => $entry['schedule_id'], 'date_from' => $entry['date_from'], 'date_to' => $entry['date_to'], 'employee' => $entry['employee'], ]; $combinedEntry['entries'][] = $currentEntry; } $jsonEntry = json_encode($combinedEntry); $schedule = EmployeeMonthlySchedule::create([ 'department_id' => $validated['department'][0], 'data' => $jsonEntry, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'requested_by' => $user->employee_id, 'created_at' => now(), 'updated_at' => now(), ]); // Return a success response return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $schedule ],201); // return response()->json(['message' => 'Employee Monthly Schedule saved successfully.'], 201); } public function update(Request $request, $id) { $user = Auth::user(); // Find the existing EmployeeMonthlySchedule by ID $schedule = EmployeeMonthlySchedule::findOrFail($id); // Validate the incoming request $validated = $request->validate([ 'department' => 'required|array', 'department.*' => 'integer|exists:departments,id', 'entries' => 'required|array', 'entries.*.employee' => 'required|array', 'entries.*.schedule_id' => 'required|integer|exists:schedule_shifts,id', 'entries.*.date_from' => 'required|date', 'entries.*.date_to' => 'nullable|date|after_or_equal:entries.*.date_from', ]); // Prepare the combined structure with updated data $combinedEntry = [ 'department_ids' => $validated['department'], // Updated department IDs 'entries' => [], ]; // Loop through entries to update foreach ($validated['entries'] as $entry) { $currentEntry = [ 'schedule_id' => $entry['schedule_id'], 'date_from' => $entry['date_from'], 'date_to' => $entry['date_to'], 'employee' => $entry['employee'], // Updated employees ]; $combinedEntry['entries'][] = $currentEntry; } // Convert the combined structure to JSON $jsonEntry = json_encode($combinedEntry); // Update the existing schedule record $schedule->update([ 'department_id' => $validated['department'][0], // Use the first department ID or change as needed 'data' => $jsonEntry, // Updated JSON data 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'requested_by' => $user->employee_id, // Update requested_by if necessary 'updated_at' => now(), // Automatically update timestamp ]); // Return a success response return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $schedule ],201); // return response()->json(['message' => 'Employee Monthly Schedule updated successfully.'], 200); } public function destroy(int $id) { $data = EmployeeMonthlySchedule::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function getMonthlySchedList(Request $request) { $user = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); // Base query with eager loading $query = EmployeeMonthlySchedule::with('recommending', 'approving','department:id,name') ->where(['status' => 2]) ->where(function ($query) use ($keyword) { if (!empty($keyword)) { $keyword = str_replace(' ', '%', $keyword); // Replace spaces with % $query->where('data', 'LIKE', "%$keyword%") ->orWhereHas('department', function ($query) use ($keyword) { $query->where('name', 'LIKE', "%$keyword%"); }); } }); // Apply dealership filtering if provided if (!empty($dealership_id)) { $query->where('dealership_id', $dealership_id); } // Apply sorting if (!empty($sortBy) && in_array($sortType, ['asc', 'desc'])) { $query->orderBy($sortBy, $sortType); } // Get paginated results $monthlyEmployeeSchedules = $query->paginate($perPage); // Decode JSON data and transform results $decodedSchedules = $monthlyEmployeeSchedules->map(function ($schedule) { $decodedData = json_decode($schedule->data, true); return [ 'id' => $schedule->id, 'department_name' => $schedule->department->name ?? null, 'department_id' => $schedule->department_id, 'department_ids' => $decodedData['department_ids'] ?? [], 'entries' => $decodedData['entries'] ?? [], 'recommending' => $schedule->recommending, 'approving' => $schedule->approving, 'recommending_id' => $schedule->recommending_id, 'approver_id' => $schedule->approver_id, 'status' => $schedule->status, 'validated' =>$schedule->validated, 'validated_by' =>$schedule->validated_by, 'validated_at' =>$schedule->validated_at, 'deferred_reason' => $schedule->deferred_reason, 'requested_by' => $schedule->requested_by, 'requested_name' => $schedule->requested->firstname.' '.$schedule->requested->lastname, 'created_at' => $schedule->created_at, 'updated_at' => $schedule->updated_at, ]; }); // Return paginated data as JSON return response()->json([ 'data' => $decodedSchedules, 'current_page' => $monthlyEmployeeSchedules->currentPage(), 'per_page' => $monthlyEmployeeSchedules->perPage(), 'total' => $monthlyEmployeeSchedules->total(), ]); } } PKyZr331Http/Controllers/API/v1/BenefitTypeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = BenefitType::with('benefit_sub_category:id,code,name')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { $basic = ($request->basic && $request->basic !== 'null' && $request->basic !== 'false' && trim($request->basic) !== '' ? 1 : 0); $taxable = ($request->taxable && $request->taxable !== 'null' && $request->taxable !== 'false' && trim($request->taxable) !== '' ? 1 : 0); $request['basic'] = $basic; $request['taxable'] = $taxable; // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('benefit_types')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = BenefitType::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function checkIfFixedAmount(int $id){ $isFixed = BenefitType::where('id', $id)->pluck('fixed_amount'); dd($isFixed); return $isFixed; } public function update(Request $request, int $id) { $data = BenefitType::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $basic = ($request->basic && $request->basic !== 'null' && $request->basic !== 'false' && trim($request->basic) !== '' ? 1 : 0); $taxable = ($request->taxable && $request->taxable !== 'null' && $request->taxable !== 'false' && trim($request->taxable) !== '' ? 1 : 0); $request['basic'] = $basic; $request['taxable'] = $taxable; $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('benefit_types')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = BenefitType::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ2Http/Controllers/API/v1/PayrollItemsController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = PayrollItems::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('description', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { $taxable = ($request->taxable && $request->taxable !== 'null' && $request->taxable !== 'false' && trim($request->taxable) !== '' ? 1 : 0); $thirteenth_month = ($request->thirteenth_month && $request->thirteenth_month !== 'null' && $request->thirteenth_month !== 'false' && trim($request->thirteenth_month) !== '' ? 1 : 0); $request['taxable'] = $taxable; $request['thirteenth_month'] = $thirteenth_month; // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('payroll_items')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = PayrollItems::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = PayrollItems::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $taxable = ($request->taxable && $request->taxable !== 'null' && $request->taxable !== 'false' && trim($request->taxable) !== '' ? 1 : 0); $thirteenth_month = ($request->thirteenth_month && $request->thirteenth_month !== 'null' && $request->thirteenth_month !== 'false' && trim($request->thirteenth_month) !== '' ? 1 : 0); $request['taxable'] = $taxable; $request['thirteenth_month'] = $thirteenth_month; $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('payroll_items')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = PayrollItems::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZdtD$"$";Http/Controllers/API/v1/OffsetEarningApprovalController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $currentEmp = $employee->employees ? $employee->employees->employee_id : ''; $data = EmployeeOffsetEarning::with(['recommending', 'approving', 'employee']) ->where(function ($query) use ($employee) { $query->where('recommending_id', $employee->employees ? $employee->employees->employee_id : '') ->orWhere('approver_id', $employee->employees ? $employee->employees->employee_id : '' ); }) ->where('enabled', 1) ->whereNull('deleted_at') ->select('employee_offset_earnings.*') ->selectRaw(' (SELECT COUNT(*) FROM employee_offset_earnings AS el WHERE el.status IN (0, 1) AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS pending, (SELECT COUNT(*) FROM employee_offset_earnings AS el WHERE el.status = 2 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS approved, (SELECT COUNT(*) FROM employee_offset_earnings AS el WHERE el.status = 99 AND (el.recommending_id = '.$currentEmp.' OR el.approver_id = '.$currentEmp.') AND el.deleted_at IS NULL) AS denied') ->orderBy('status', 'ASC') ->paginate($perPage); // dd($data); // dd(DB::getQueryLog()); return response()->json($data); } public function update(Request $request, int $id) { $data = EmployeeOffsetEarning::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $now = date('Y-m-d H:i:s'); ($request->status == 2 ? $request['approved_at'] = $now : $request->status == 1) ? $request['recommended_at'] = $now : ''; if($request->status == 2){ if(!OffsetRemaining::where('employee_id', '=', $data->employee_id)->exists()){ OffsetRemaining::create([ 'employee_id' => $data->employee_id, 'company_id' => $data->company_id, 'remaining' => $data->hours ]); } else { $offset = OffsetRemaining::where('employee_id', '=', $data->employee_id)->first(); if ($offset) { $offset->increment('remaining', $data->hours); } } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; $email_to = $this->getEmployeeEmailData($employee_id_for_notification); try { if ($email_to) { Notification::send($email_to, new OffsetEarning($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeOffsetEarning', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeOffsetEarning', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateApprover(Request $request, int $id) { $data = EmployeeOffsetEarning::with(['employee'])->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $employee_id_for_notification = []; if($request->recommending_id != $data->recommending_id){ $employee_id_for_notification[] = $request->recommending_id; } if ($request->approver_id != $data->approver_id){ $employee_id_for_notification[] = $request->approver_id; } foreach($employee_id_for_notification as $employee_id){ $email_to = $this->getEmployeeEmailData($employee_id); try { if ($email_to) { Notification::send($email_to, new OffsetEarning($data)); } else { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => 'Email To Not Found' ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } catch (\Exception $e) { try { $error = [ 'user_id' => Auth::id(), 'model' => 'App\Model\EmployeeLeave', 'message' => $e->getMessage() ]; $data = NotificationErrorLog::create($error); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); } } } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZ0k;Http/Controllers/API/v1/EducationalBackgroundController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EducationalBackground::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('school', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = EducationalBackground::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'school' => [ 'required', 'min:2' ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = EducationalBackground::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = EducationalBackground::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'school' => [ 'required', 'min:2' ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EducationalBackground::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ^顳8Http/Controllers/API/v1/AsaMeetingAttendeeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = ResignationLetter::with('employee:employee_id,firstname,lastname')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id', 'like', '%' . $keyword . '%'); $query->where('resignation_date', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // dd($request->all()); $validator = Validator::make($request->all(), [ 'employee_id' => "required", 'resignation_date' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::beginTransaction(); try { $attachmentName = $this->handleAttachment($request); if (ResignationLetter::where('employee_id', $request->employee_id)->exists()) { ResignationLetter::where('employee_id', $request->employee_id)->update(['enabled' => 0]); } $Status = ResignationLetter::create([ 'employee_id' => $request->employee_id, 'resignation_date' => $request->resignation_date, 'reason' => $request->reason, 'attachment' => $attachmentName, ]); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } private function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time().'_'.$image->getClientOriginalName(); $path = "resignation-letter/".$attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { // dd($request->all()); $id = $request->id; $data = ResignationLetter::where('id', $id)->first(); $validator = Validator::make($request->all(), [ 'employee_id' => "required", 'resignation_date' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'resignation-letter/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "resignation-letter/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $data->employee_id = $request->employee_id; $data->resignation_date = $request->resignation_date; $data->reason = $request->reason; $data->attachment = $attachment_name; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = ResignationLetter::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ19Http/Controllers/API/v1/PersonalInformationController.phpnu[input('keyword', ''); // $perPage = $request->input('per_page',PHP_INT_MAX); // $sortBy = $request->input('sortBy', ''); // $sortType = $request->input('sortType', ''); // $data = PersonalInformation::where(function ($query) use ($keyword) { // $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); // }); // if (!empty($sortBy) && !empty($sortType)) { // $data = $data->orderBy($sortBy, $sortType); // } // $data = $data->paginate($perPage); // return response()->json($data); // } public function show(string $id) { $data = Employee::with([ 'personal_information', 'personal_information.citizenship', 'personal_information.civil_status', 'personal_information.religion' ]) ->select(DB::raw("CONCAT(firstname, ' ', lastname) as full_name"), 'employees.*') ->where('employees.employee_id', '=', $id)->first(); return response()->json($data); } public function store(Request $request, string $employee_id) { // dd($request->all()); $employeeExists = PersonalInformation::where('employee_id', $employee_id)->exists(); $validator = Validator::make($request->all(), [ // 'passport_id' => [ // 'required', // 'min:1', // ], ]); // dd($employeeExists); if($employeeExists){ $data = PersonalInformation::where('employee_id', $employee_id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } else { /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = PersonalInformation::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } } PKyZ%3Http/Controllers/API/v1/DeductionTypeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = DeductionType::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('deduction_types')->whereNull('deleted_at') ], 'type' => [ 'required', ], 'taxable' => [ 'required', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $request['type'] = $request['type'] == "Addition" ? '1' : '0'; $request['taxable'] = $request['taxable'] == "Yes" ? '1' : '0'; $data = DeductionType::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = DeductionType::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('deduction_types')->ignore($id)->whereNull('deleted_at') ], 'type' => [ 'required', ], 'taxable' => [ 'required', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = DeductionType::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ- K^^;Http/Controllers/API/v1/BiometricNotificationController.phpnu[get(); // print_r($request->input('success')); try { Notification::send($users , new BiometricConnection($request->all())); return response()->json([ 'status' => true, 'message' => 'Notification sent successfully!', 'status_code' => 200, ], 200); } catch (\Exception $e) { return response()->json([ 'status' => false, 'message' => 'Failed to send notification: ' . $e->getMessage(), 'status_code' => 500, ], 500); } } } PKyZcXv??6Http/Controllers/API/v1/EmployeeOvertimeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeOvertime::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date_from', 'date_to', 'from_time', 'to_time', 'hours', 'charge_to', 'attachment', 'description', 'denied_reason', 'meal', 'meal_amount', 'transportation', 'transportation_amount', 'status', 'validated_at', 'validated_by', 'validated', 'deferred_reason', 'recommending_id', 'allow_higher_approval', 'approver_id', 'recommended_at', 'approved_at', 'created_at' ) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($employee->roles[0]['group_id'] != 1){ $data->where(['employee_id' => $employee->employee_id]); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); $month = date('m'); $year = date('Y'); $totalOTForThisMonth = EmployeeOvertime::select(DB::raw("SUM(hours) as total_hours")) ->where(function($query) use ($month, $year) { $query->where(function($q) use ($month, $year) { $q->whereMonth('date_from', $month) ->whereYear('date_from', $year); })->orWhere(function($q) use ($month, $year) { $q->whereMonth('date_to', $month) ->whereYear('date_to', $year); }); }) ->where('enabled', 1) ->where('status', 2) ->where('employee_id', $employee->employee_id) ->first(); $totalOTForThisYear = EmployeeOvertime::select(DB::raw("SUM(hours) as total_hours")) ->where(function($query) use ($year) { $query->whereYear('date_from', $year) ->orWhereYear('date_to', $year); }) ->where('enabled', 1) ->where('status', 2) ->where('employee_id', $employee->employee_id) ->first(); $averageOTForThisMonth = EmployeeOvertime::select(DB::raw("SUM(hours) as total_hours")) ->where(function($query) use ($month, $year) { $query->where(function($q) use ($month, $year) { $q->whereMonth('date_from', $month) ->whereYear('date_from', $year); })->orWhere(function($q) use ($month, $year) { $q->whereMonth('date_to', $month) ->whereYear('date_to', $year); }); }) ->where('enabled', 1) ->where('status', 2) ->where('employee_id', $employee->employee_id) ->avg('hours') ?? 0; // Return 0 if no records found return response()->json([ 'data' => $data, 'total_ot_for_the_month' => $totalOTForThisMonth, 'total_ot_for_the_year' => $totalOTForThisYear, 'avg_ot_for_the_month' => number_format($averageOTForThisMonth, 1), ]); } public function getOvertimeList(Request $request) { $employee = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); $payrollSettings = \App\Models\PayrollSetting::select('overtime_meal_amount','overtime_meal_every_hours')->first(); // dd($payrollSettings->overtime_meal_amount); $data = EmployeeOvertime::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'employee'=> fn($employee) => $employee->select('employee_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date_from', 'date_to', 'from_time', 'to_time', 'hours', 'charge_to', 'attachment', 'description', 'denied_reason', 'meal', 'meal_amount', 'transportation', 'transportation_amount', 'status', 'validated_at', 'validated_by', 'validated', 'deferred_reason', 'recommending_id', 'allow_higher_approval', 'approver_id', 'recommended_at', 'approved_at', 'created_at' ) ->where('status',2) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($dealership_id) $data = $data->where('dealer_id', $dealership_id); $data = $data->paginate($perPage); return response()->json([ 'data' => $data, 'PayrollSettings' => $payrollSettings ]); } public function store(Request $request) { $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date_from' => "required|date", 'date_to' => "required|date", 'from_time' => "required", 'to_time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $transpo = ($request->transportation && $request->transportation !== 'null' && $request->transportation !== 'false' && trim($request->transportation) !== '' ? 1 : 0); $meal = ($request->meal && $request->meal !== 'null' && $request->meal !== 'false' && trim($request->meal) !== '' ? 1 : 0); $meal_amount = ($request->meal && $request->meal !== 'null' && $request->meal !== 'false' && trim($request->meal) !== '' ? 60 : 0); $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $attachmentName = $this->handleAttachment($request); $Status = EmployeeOvertime::create([ 'employee_id' => $user->employee_id, 'company_id' => $user->employees->company_id, 'dealer_id' => $user->employees->dealer_id, 'date_from' => $request->date_from, 'date_to' => $request->date_to, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'hours' => $request->hours, 'charge_to' => $request->charge_to, 'allow_higher_approval' => $allow_higher_approval, 'meal' => $meal, 'transportation' => $transpo, 'meal_amount' => $meal_amount, 'description' => $request->description, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); // dd($Status); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); $email_to = $this->getEmployeeEmailData($request->recommending_id); Notification::send($email_to, new Overtime($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-overtime/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { $id = $request->id; $data = EmployeeOvertime::where('id', $id)->first(); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date_from' => "required|date", 'date_to' => "required|date", 'from_time' => "required", 'to_time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-overtime/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-overtime/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $transpo = ($request->transportation && $request->transportation !== 'null' && $request->transportation !== 'false' && trim($request->transportation) !== '' ? 1 : 0); $meal = ($request->meal && $request->meal !== 'null' && $request->meal !== 'false' && trim($request->meal) !== '' ? 1 : 0); $meal_amount = ($request->meal && $request->meal !== 'null' && $request->meal !== 'false' && trim($request->meal) !== '' ? 60 : 0); $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $data->employee_id = $user->employee_id; $data->date_from = $request->date_from; $data->date_to = $request->date_to; $data->from_time = $request->from_time; $data->to_time = $request->to_time; $data->charge_to = $request->charge_to == 'null' ? NULL : $request->charge_to; $data->allow_higher_approval = $allow_higher_approval; $data->meal = $meal; $data->transportation = $transpo; $data->meal_amount = $meal_amount; $data->hours = $request->hours; $data->description = $request->description; $data->attachment = $attachment_name; $data->recommending_id = $request->recommending_id; $data->approver_id = $request->approver_id; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeOvertime::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function removeAttachment(Request $request) { $id = $request->id; $attachment = $request->attachment; $data = EmployeeOvertime::where('id', $id)->first(); $data->attachment = NULL; $data->save(); DB::connection()->commit(); $attachment_file_path = 'employee-overtime/' . $request->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZ*.Http/Controllers/API/v1/LocalityController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Locality::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('province', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } } PKyZF//?Http/Controllers/API/v1/PremiumOvertimePaySettingController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = PremiumOvertimePaySetting::with('holiday_type')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'code' => [ 'required', 'min:2', Rule::unique('premium_overtime_pay_settings')->whereNull('deleted_at') ], 'name' => [ 'required', 'min:2', Rule::unique('premium_overtime_pay_settings')->whereNull('deleted_at') ], 'percentage' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = PremiumOvertimePaySetting::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = PremiumOvertimePaySetting::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'code' => [ 'required', 'min:2', Rule::unique('premium_overtime_pay_settings')->ignore($id)->whereNull('deleted_at') ], 'name' => [ 'required', 'min:2', Rule::unique('premium_overtime_pay_settings')->ignore($id)->whereNull('deleted_at') ], 'percentage' => 'required', ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = PremiumOvertimePaySetting::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZp;;9Http/Controllers/API/v1/PersonnelActionFormController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = PersonnelActionForm::with([ 'employee', 'type_of_movement', 'requestor', 'recommendor', 'endorser', 'approver', ]) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); })->where(function ($query) use ($keyword) { $query->orWhereHas('employee', function ($q) use ($keyword) { $q->where('employee_id', 'like', "%$keyword%"); }) ->orWhereHas('employee', function ($q) use ($keyword) { $q->where('firstname', 'like', "%$keyword%") ->orWhere('lastname', 'like', "%$keyword%"); }); }); if ($employee->roles[0]->group_id !== 1) { switch ($employee->employees->classification_id) { case 2: $data->where('requested_by', $employee->employee_id); break; case 3: if ($employee->employees->position_id == 21) { $data->where('endorsed_by', $employee->employee_id) ->where('status', '>=', 1) ->orWhere('requested_by', $employee->employee_id); } else { $data->where('recommended_by', $employee->employee_id) ->orWhere('requested_by', $employee->employee_id); } break; case 4: $data->where('approved_by', $employee->employee_id) ->where('status', '>=', 2) ->orWhere('requested_by', $employee->employee_id); break; } } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); // dd($data); return response()->json($data); } /** * Display a listing of the resource. */ public function show($employee_id) { // // dd($employee_id); $data = PersonnelActionForm::with([ 'employee', 'type_of_movement', 'requestor', 'recommendor', 'endorser', 'approver', ])->select('personnel_action_forms.id', 'jt_prev.name as prev_position_name', 'jt_next.name as next_position_name', 'personnel_action_forms.*') ->join('job_titles as jt_prev', 'personnel_action_forms.position_id', '=', 'jt_prev.id') ->join('job_titles as jt_next', 'personnel_action_forms.position' , '=', 'jt_next.id') ->where('personnel_action_forms.employee_id', '=', $employee_id) ->where('personnel_action_forms.status', '=', '3') ->get(); // dd($data); // // Get the raw SQL query // $sql = $data->toSql(); // // // Get the bindings // $bindings = $data->getBindings(); // // // Display the query with bindings // dd(vsprintf(str_replace('?', '%s', $sql), array_map('addslashes', $bindings))); return response()->json($data); } public function store(Request $request) { // Iniialize the supporting documents here $supporting_documents = []; $supporting_documents_id = []; if ($request->hasFile('supporting_documents')) { $documents = $request->file('supporting_documents'); // dd($documents); foreach ($documents as $index => $documentArr) { $attachment_name = time().'_'.$documentArr->getClientOriginalName(); // Push the the attachment_name on $supporting_documents $supporting_documents[] = $attachment_name; $path = "paf/".$attachment_name; Storage::disk('local')->put($path, file_get_contents($documentArr)); } } $documents_id = $request->supporting_documents_id; if($documents_id){ foreach($documents_id as $index => $documents_idArr){ $supporting_documents_id[] = $documents_idArr; } } $user = Auth::user(); $validator = Validator::make($request->all(), [ 'company_id' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $status = PersonnelActionForm::create([ 'company_id' => $request->company_id, 'employee_id' => $request->employee_id, 'employment_status_id' => $request->employment_status_id, 'position_id' => $request->position_id, 'unit_id' => $request->unit_id, 'jg_step' => $request->jg_step, 'present_salary' => $request->present_salary, 'allowance' => $request->allowance, 'nature_of_request_id' => $request->nature_of_request_id, 'position' => $request->position, 'unit' => $request->unit, 'salary_increase_to' => $request->salary_increase_to, 'salary_increment' => $request->salary_increment, 'honorarium' => $request->honorarium, 'peso' => $request->peso, 'incentive' => $request->incentive, 'commission' => $request->commission, 'benefits' => $request->benefits, 'supporting_documents' => json_encode($supporting_documents), 'supporting_documents_id' => json_encode($supporting_documents_id), 'effectivity' => $request->effectivity, 'other' => $request->other, 'inclusive_period' => $request->inclusive_period, 'immediate_head' => $request->immediate_head, 'justification_request' => $request->justification_request, 'requested_by' => $request->requested_by, 'recommended_by' => $request->recommended_by, 'concurred_by' => $request->concurred_by, 'endorsed_by' => $request->endorsed_by, 'approved_by' => $request->approved_by, ]); DB::connection()->commit(); // dd($request->all()); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request) { $id = $request->id; $data = PersonnelActionForm::where('id', $id)->first(); if($request->status == 99){ $request['status'] = 0; } // dd($request->status); // Initialize the supporting documents here $supporting_documents = []; $supporting_documents_id = []; if ($request->hasFile('supporting_documents')) { $documents = $request->file('supporting_documents'); if (is_array($documents)) { foreach ($documents as $index => $documentArr) { $attachment_name = time() . '_' . $documentArr->getClientOriginalName(); // Push the attachment_name on $supporting_documents $supporting_documents[] = $attachment_name; $path = "paf/" . $attachment_name; Storage::disk('local')->put($path, file_get_contents($documentArr)); } } } $documents_id = $request->supporting_documents_id; if ($documents_id && is_array($documents_id)) { foreach ($documents_id as $index => $documents_idArr) { $supporting_documents_id[] = $documents_idArr; } } $user = Auth::user(); $validator = Validator::make($request->all(), [ 'company_id' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if ($data->attachment != $request->attachment) { $attachment_file_path = 'paf/' . $data->attachment; if (Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time() . '_' . $image->getClientOriginalName(); $path = "paf/" . $attachment_name; if (!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message' => "Failed to upload attachment"], 304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $data->company_id = $request->company_id; $data->employee_id = $request->employee_id; $data->employment_status_id = $request->employment_status_id; $data->position_id = $request->position_id; $data->unit_id = $request->unit_id; $data->jg_step = $request->jg_step != 'null' ? $request->jg_step : NULL; $data->present_salary = $request->present_salary; $data->allowance = $request->allowance != 'null' ? $request->allowance : NULL; $data->nature_of_request_id = $request->nature_of_request_id; $data->position = $request->position; $data->unit = $request->unit != 'null' ? $request->unit : NULL; $data->salary_increase_to = $request->salary_increase_to; $data->salary_increment = $request->salary_increment != 'null' ? $request->salary_increment : NULL; $data->honorarium = $request->honorarium != 'null' ? $request->honorarium : NULL; $data->peso = $request->peso != 'null' ? $request->peso : NULL; $data->incentive = $request->incentive != 'null' ? $request->incentive : NULL; $data->commission = $request->commission != 'null' ? $request->commission : NULL; $data->benefits = $request->benefits; $data->supporting_documents = json_encode($supporting_documents); $data->supporting_documents_id = json_encode($supporting_documents_id); $data->effectivity = $request->effectivity; $data->other = $request->other != 'null' ? $request->other : NULL; $data->inclusive_period = $request->inclusive_period != 'null' ? $request->inclusive_period : NULL; $data->immediate_head = $request->immediate_head; $data->status = $request->status; $data->justification_request = $request->justification_request != 'null' ? $request->justification_request : NULL; $data->requested_by = $request->requested_by; $data->recommended_by = $request->recommended_by; $data->concurred_by = $request->concurred_by != 'null' ? $request->concurred_by : NULL; $data->endorsed_by = $request->endorsed_by; $data->approved_by = $request->approved_by; // dd($data); $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateStatus(Request $request, $id) { $data = PersonnelActionForm::find($id); if (!$data) { return response()->json(['message' => 'No data found.'], 404); } DB::beginTransaction(); try { $request->status == 3 ? $request['approved_at'] = date('Y-m-d') : ''; $data->fill($request->all()); $data->save(); DB::commit(); // $employee_id_for_notification = $this->getEmployeeIdForNotification($request->status, $data); // $this->sendNotificationToEmployee($employee_id_for_notification, $data); return response()->json([ 'message' => 'Record successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Exception $e) { DB::rollBack(); return $this->exceptionResponse($e); } } public function destroy(int $id) { $data = PersonnelActionForm::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ ;**8Http/Controllers/API/v1/EmployeeLeaveController copy.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeLeave::with([ 'leave_type', 'recommending', 'approving', ])->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); }); if($employee->roles[0]['group_id'] != 1){ $data->where(['employee_id' => $employee->employee_id]); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function getApprover() { $employee = Auth::user(); // dd($employee); $result = []; $approvers = ''; if($employee->employees->classification_id == 1){ $approver_result = $this->getRankAndFileApprover($employee->employees->employee_id); } else if ($employee->employees->classification_id == 2) { $approver_result = $this->getSupervisorApprover($employee->employees->employee_id); } return $approver_result; } public function getRankAndFileApprover($employee_id) { // get all approver to array then remove the duplicate $approvers = []; $data = Employee::with('unitApprover') ->where('employee_id', $employee_id) ->first(); $approvers[] = $data->unitApprover ? $data->unitApprover->approvers : ''; $data = Employee::with('sectionApprover') ->where('employee_id', $employee_id) ->first(); $approvers[] = $data->sectionApprover ? $data->sectionApprover->approvers : ''; $data = Employee::with('departmentApprover') ->where('employee_id', $employee_id) ->first(); $approvers[] = $data->departmentApprover? $data->departmentApprover->approvers : ''; $data = Employee::with('divisionApprover') ->where('employee_id', $employee_id) ->first(); $approvers[] = $data->divisionApprover ? $data->divisionApprover->approvers : ''; $data = Employee::with('groupDivisionApprover') ->where('employee_id', $employee_id) ->first(); $approvers[] = $data->groupDivisionApprover ? $data->groupDivisionApprover->approvers : ''; $data = Employee::with('dealershipApprover') ->where('employee_id', $employee_id) ->first(); $approvers[] = $data->dealershipApprover ? $data->dealershipApprover->approvers : ''; return $result = [ 'endorser' => $approvers ]; } public function getSupervisorApprover($employee_id) { // get all approver to array then remove the duplicate $approvers = []; $data = Employee::with('departmentApprover') ->where('employee_id', $employee_id) ->first(); $approvers[] = $data->departmentApprover ? $data->departmentApprover->approvers : ''; $data = Employee::with('divisionApprover') ->where('employee_id', $employee_id) ->first(); $approvers[] = $data->divisionApprover ? $data->divisionApprover->approvers : ''; $data = Employee::with('groupDivisionApprover') ->where('employee_id', $employee_id) ->first(); $approvers[] = $data->groupDivisionApprover ? $data->groupDivisionApprover->approvers : ''; $data = Employee::with('dealershipApprover') ->where('employee_id', $employee_id) ->first(); $approvers[] = $data->dealershipApprover ? $data->dealershipApprover->approvers : ''; return $result = [ 'endorser' => $approvers ]; } public function store(Request $request) { $user = Auth::user(); $validator = Validator::make($request->all(), [ 'leave_id' => 'required', 'half_day' => 'required', 'date_from' => 'required|date', 'date_to' => 'required|date', ]); if ($validator->fails()) { return response()->json([ 'status' => false, 'message' => $validator->errors()->first(), 'errors' => $validator->errors() ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::beginTransaction(); try { $attachmentName = $this->handleAttachment($request); $status = EmployeeLeave::create([ 'leave_id' => $request->leave_id, 'employee_id' => $user->employee_id, 'company_id' => $user->employees->company_id, 'half_day' => $request->half_day, 'date_from' => $request->date_from, 'date_to' => $request->date_to, 'days' => $request->days, 'description' => $request->description, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::commit(); $status->load(['employee', 'leave_type']); $emailTo = $this->getEmployeeEmailData($request->recommending_id); Notification::send($emailTo, new Leave($status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $status ], Response::HTTP_CREATED); } catch (Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } private function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-leave/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { // dd($request->all()); $id = $request->id; $data = EmployeeLeave::where('id', $id)->first(); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'leave_id' => "required", 'half_day' => "required", 'date_from' => "required|date", 'date_to' => "required|date", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-leave/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-leave/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $data->leave_id = $request->leave_id; $data->employee_id = $user->employee_id; $data->half_day = $request->half_day; $data->date_from = $request->date_from; $data->date_to = $request->date_to; $data->days = $request->days; $data->description = $request->description; $data->recommending_id = $request->recommending_id; $data->approver_id = $request->approver_id; $data->attachment = $attachment_name; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeLeave::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZp/Http/Controllers/API/v1/RoleGroupController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $keyword = str_replace(" ", "%", $keyword); $data = RoleGroup::with(['system'])->where(fn($q) => $q->where('name', 'like', '%' . $keyword . '%') ->orWhereHas('system', fn($qs) => $qs->where('name', 'like', '%'.$keyword.'%') ->orWhere('code', 'like', '%'.$keyword.'%')) ); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('role_groups')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { // dd($request->system_id); // foreach ($request->system_id as $systems) { // $request['system_id'] = $systems; $data = RoleGroup::create($request->all()); // DB::connection()->commit(); // } // $data = RoleGroup::create($request->all()); // DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (\Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = RoleGroup::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('role_groups')->ignore($id)->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (\Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = RoleGroup::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],200); } } PKyZ"3-Http/Controllers/API/v1/TimelogController.phpnu[input('keyword', ''); // $perPage = $request->input('per_page', PHP_INT_MAX); // $sortBy = $request->input('sortBy', ''); // $sortType = $request->input('sortType', ''); // // Generate a unique cache key based on request parameters // $cacheKey = 'companies_' . md5(json_encode([ // 'keyword' => $keyword, // 'perPage' => $perPage, // 'sortBy' => $sortBy, // 'sortType' => $sortType, // ])); // // Check if data exists in cache, otherwise execute the query and cache the result // $data = Cache::remember($cacheKey, 60, function () use ($keyword, $perPage, $sortBy, $sortType) { // return Timelog::where(function ($query) use ($keyword) { // $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%') // ->orWhere('code', 'like', '%' . $keyword . '%'); // }) // ->when(!empty($sortBy) && !empty($sortType), function ($query) use ($sortBy, $sortType) { // $query->orderBy($sortBy, $sortType); // }) // ->paginate($perPage); // }); // return response()->json($data); // } public function getEmployeeTimelogs(string $id) { $year = date('Y'); $data = Timelog::where('employee_id', '=', $id)->whereYear('datetimelog', $year)->get(); // dd($data); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'time_keeping_id' => [ 'required', ], 'datetimelog' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } dd($request->all()); DB::connection()->beginTransaction(); try { $data = Timelog::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function sync_bio(Request $request) { $employee = EmployeeSync::where('employee_id', '=', $request->time_keeping_id)->first(); if ($employee) { $request['employee_id'] = $employee->employee_id; } else { $request['employee_id'] = $request->time_keeping_id; } // dd($request->all()); // Validate the incoming request data $validator = Validator::make($request->all(), [ 'time_keeping_id' => [ 'required', ], 'datetimelog' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } // dd($request->all()); DB::connection()->beginTransaction(); try { $data = TimelogSync::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function show(Request $request) { $dateTo = date('Y-m-d', strtotime($request->dateTo . '+1 day')); $query = Employee::with([ 'timelog' => function ($query) use ($request, $dateTo) { $query->whereBetween('datetimelog', [$request->dateFrom, $dateTo]); }, 'company', 'department' ])->where(['enabled' => 1]); if (!empty($request->employee_id)) { $query->where('employee_id', $request->employee_id); } if (!empty($request->department_id)) { $query->where('department_id', $request->department_id); } $data = $query->get(); return response()->json($data); } public function destroy(int $id) { $data = Timelog::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZOzgg/Http/Controllers/API/v1/AutoLoginController.phpnu[user_id); try { // Decrypt the token $decryptedToken = Crypt::decryptString($request->user_id); // dd($decryptedToken); // Retrieve the user based on the decrypted ID $user = User::where('id', unserialize($decryptedToken))->first(); if ($user !== null) { // Automatically log in the user without requiring the password (since you trust the token) Auth::login($user); // Generate a token (if using JWT or similar system) $token = Auth::tokenById($user->id); // If you're using JWT, use this for token generation // Assuming the profile picture URL is needed, and `employee_profile_picture_url` is an accessor in the User model $profilePictureUrl = $user->employee_profile_picture; // This accessor should be defined in the User model // Prepare user data with profile picture URL $userData = $user->toArray(); $userData['profile_picture_url'] = $profilePictureUrl ? asset('storage/employee-profile/' . $profilePictureUrl->attachment) : ''; // dd($userData); return response()->json([ 'user' => $userData, 'authorization' => [ 'token' => $token, 'type' => 'bearer', ] ]); } else { return response()->json(['error' => 'User not found.'], 404); } } catch (\Exception $e) { return response()->json(['error' => 'Invalid token or an error occurred.', 'details' => $e->getMessage()], 400); } } } PKyZؠUU,Http/Controllers/API/v1/OfficeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Office::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'section_id' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('offices')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Office::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Office::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'section_id' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('offices')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Office::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ ٲ-Http/Controllers/API/v1/LicenseController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = License::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('description', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = License::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = License::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = License::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = License::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZP!`--<Http/Controllers/API/v1/EmployeeChangeScheduleController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeChangeSchedule::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'date_to', 'from_time', 'to_time', 'dayoff', 'dayoff_date', 'attachment', 'description', 'status', 'validated_by', 'validated_at', 'validated', 'deferred_reason', 'recommending_id', 'allow_higher_approval', 'approver_id', 'approved_at', 'recommended_at', 'created_at' ) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($employee->roles[0]['group_id'] != 1){ $data->where(['employee_id' => $employee->employee_id]); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function getChangeScheduleList(Request $request) { // $employee = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); DB::enableQueryLog(); $data = EmployeeChangeSchedule::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'employee'=> fn($employee) => $employee->select('employee_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'date_to', 'from_time', 'to_time', 'dayoff', 'dayoff_date', 'attachment', 'description', 'status', 'validated', 'validated_by', 'validated_at', 'deferred_reason', 'recommending_id', 'allow_higher_approval', 'approver_id', 'approved_at', 'recommended_at', 'created_at' ) ->where('status',2) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($dealership_id) $data = $data->where('dealer_id', $dealership_id); // $data = $data->get(); $data = $data->paginate($perPage); // dd(DB::getQueryLog()); return response()->json(['data'=> $data]); } public function store(Request $request) { $dayoff = ($request->dayoff && $request->dayoff !== 'null' && $request->dayoff !== 'false' && trim($request->dayoff) !== '' ? 1 : 0); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date' => "required|date", 'from_time' => $dayoff ? "" : "required", 'to_time' => $dayoff ? "" :"required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $attachmentName = $this->handleAttachment($request); $Status = EmployeeChangeSchedule::create([ 'employee_id' => $user->employee_id, 'company_id' => $user->employees->company_id, 'dealer_id' => $user->employees->dealer_id, 'date' => $request->date, 'date_to' => $request->date_to ?? null, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'dayoff' => $dayoff, 'dayoff_date' => $request->dayoff_date == 'null' ? null : $request->dayoff_date, 'description' => $request->description, 'attachment' => $attachmentName, 'allow_higher_approval' => $allow_higher_approval, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); $email_to = $this->getEmployeeEmailData($request->recommending_id); // Notification::send($email_to, new ChangeSchedule($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-overtime/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { $id = $request->id; $data = EmployeeChangeSchedule::where('id', $id)->first(); $user = Auth::user(); $dayoff = ($request->dayoff && $request->dayoff !== 'null' && $request->dayoff !== 'false' && trim($request->dayoff) !== '' ? 1 : 0); $validator = Validator::make($request->all(), [ 'date' => "required|date", 'from_time' => $dayoff ? "" : "required", 'to_time' => $dayoff ? "" :"required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-overtime/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-overtime/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $data->employee_id = $user->employee_id; $data->date = $request->date; $data->date_to = $request->date_to ?? null; $data->from_time = $request->from_time; $data->to_time = $request->to_time; $data->dayoff = $dayoff; $data->dayoff_date = $request->dayoff_date; $data->description = $request->description; $data->attachment = $attachment_name; $data->recommending_id = $request->recommending_id; $data->allow_higher_approval = $allow_higher_approval; $data->approver_id = $request->approver_id; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } public function destroy(int $id) { $data = EmployeeChangeSchedule::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZ0s~/Http/Controllers/API/v1/ClearanceController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Clearance::with('template')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('date_accepted', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { $validator = Validator::make($request->all(), [ 'employee_id' => 'required', 'clearance_template_id' => 'required', 'reason_id' => 'required', 'date_accepted' => 'required|date', 'effectivity_date' => 'required|date', 'from_date' => 'required|date', 'to_date' => 'required|date', 'attachment' => 'required', ]); if ($validator->fails()) { return response()->json([ 'status' => false, 'message' => $validator->errors()->first(), 'errors' => $validator->errors() ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::beginTransaction(); try { $attachmentName = $this->handleAttachment($request); $status = Clearance::create([ 'employee_id' => $request->employee_id, 'clearance_template_id' => $request->clearance_template_id, 'reason_id' => $request->reason_id, 'shared_services' => $request->shared_services, 'date_accepted' => $request->date_accepted, 'to_company' => $request->to_company, 'effectivity_date' => $request->effectivity_date, 'from_date' => $request->from_date, 'to_date' => $request->to_date, 'note' => $request->note, 'attachment' => $attachmentName, ]); DB::commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $status ], Response::HTTP_CREATED); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-clearance/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { $id = $request->id; $data = Clearance::where('id', $id)->first(); $validator = Validator::make($request->all(), [ 'employee_id' => 'required', 'clearance_template_id' => 'required', 'reason_id' => 'required', 'date_accepted' => 'required|date', 'effectivity_date' => 'required|date', 'from_date' => 'required|date', 'to_date' => 'required|date', 'attachment' => 'required', ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-clearance/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-clearance/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $data->employee_id = $request->employee_id; $data->clearance_template_id = $request->clearance_template_id; $data->reason_id = $request->reason_id; $data->shared_services = $request->shared_services; $data->date_accepted = $request->date_accepted; $data->to_company = $request->to_company; $data->effectivity_date = $request->effectivity_date; $data->from_date = $request->from_date; $data->to_date = $request->to_date; $data->note = $request->note; $data->attachment = $attachment_name; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Clearance::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function removeAttachment(Request $request) { $id = $request->id; $attachment = $request->attachment; $data = Clearance::where('id', $id)->first(); $data->attachment = NULL; $data->save(); DB::connection()->commit(); $attachment_file_path = 'employee-clearance/' . $request->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } } PKyZe*F1Http/Controllers/API/v1/TimelogEditController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = TimelogEdit::with(['employee','requested_by']) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id', 'like', $keyword . '%')->orWhere('date', 'like', $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function approve(int $id) { $data = TimelogEdit::find($id); /** If no record found return with error message */ if (!$data) { return response()->json([ 'status' => false, 'message' => 'Record not found!', ], 422); } DB::beginTransaction(); try { $data->fill([ 'approved' => 1, 'approved_by' => auth()->user()->employee_id, 'approved_at' => $this->current_datetime, ]); $data->touch(); $data->save(); $where = [ 'payroll_date' => $data->payroll_date, 'company_id' => $data->company_id, 'dealership_id' => $data->dealership_id, 'employee_id' => $data->employee_id, 'date' => $data->date, 'in_out' => $data->in_out, ]; $updateData =[ 'payroll_date' => $data->payroll_date, 'company_id' => $data->company_id, 'dealership_id' => $data->dealership_id, 'department_id' => $data->department_id, 'employee_id' => $data->employee_id, 'date' => $data->date, 'time' => $data->time, 'in_out' => $data->in_out, ]; $timelog = ProcessedTimelog::where($where)->first(); if(!is_null($timelog)) { ProcessedTimelog::where($where)->update($updateData); } else { ProcessedTimelog::create($updateData); } DB::commit(); return response()->json([ 'message' => 'Record Successfully approved!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = TimelogEdit::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ))8Http/Controllers/API/v1/DeviceRegistrationController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = DeviceRegistration::with('employee')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ // 'name' => [ // 'required', // 'min:2', // Rule::unique(TableNameHere)->whereNull('deleted_at') // ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = DeviceRegistration::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = DeviceRegistration::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ // 'name' => [ // 'required', // 'min:2', // Rule::unique(TableNameHere)->ignore($id)->whereNull('deleted_at') // ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = DeviceRegistration::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ~7Http/Controllers/API/v1/ClearanceTemplateController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = ClearanceTemplate::with('job_classification')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = ClearanceTemplate::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = ClearanceTemplate::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = ClearanceTemplate::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = ClearanceTemplate::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } }PKyZB#R2Http/Controllers/API/v1/NotificationController.phpnu[join('users', 'notifications.notifiable_id', '=', 'users.id'); // if ($user->employee_id != 1) { // $notificationsQuery->where('notifications.notifiable_id', '=', $user->id); // } $notifications = $notificationsQuery->select('notifications.*', 'users.name') ->paginate(10); // Here 10 is the number of items per page, you can adjust it // Return paginated data as JSON return response()->json($notifications); } public function show(Request $request, $employee_id) { $notifications = DB::table('notifications') ->join('users', 'notifications.notifiable_id' ,'users.id') ->where('users.employee_id', '=', $employee_id) ->limit(5) ->get(); return response()->json($notifications); } public function getNotificationForBell($employee_id) { $user = Auth::user(); $notifications = DB::table('notifications') ->join('users', 'notifications.notifiable_id', '=', 'users.id') ->leftJoin('employee_profile_pictures', function($join) { $join->on('employee_profile_pictures.employee_id', '=', DB::raw('JSON_UNQUOTE(JSON_EXTRACT(notifications.data, "$.created_by"))')); }) ->select('notifications.*', 'employee_profile_pictures.attachment') ->where('users.employee_id', '=', $employee_id) ->where('notifications.notifiable_id', '=', $user->id) ->orderBy('notifications.created_at', 'DESC') ->limit(7) ->get(); // Use the collection's map method to update the attachment URL $notifications = $notifications->map(function ($notification) { if ($notification->attachment) { $notification->attachment = asset('storage/employee-profile/' . $notification->attachment); } return $notification; }); $unreadCount = DB::table('notifications') ->join('users', 'notifications.notifiable_id', 'users.id') ->where('users.employee_id', '=', $employee_id) ->where('notifications.notifiable_id', '=', $user->id) ->whereNull('read_at') ->count(); return response()->json([ 'notifications' => $notifications, 'unread_count' => $unreadCount ]); } public function update(string $id) { DB::connection()->beginTransaction(); try { // Retrieve the first matching notification or throw an exception if not found $notification = DB::table('notifications')->where('id', '=', $id)->first(); if (!$notification) { throw new ModelNotFoundException("Notification not found."); } // Update the read_at field DB::table('notifications')->where('id', '=', $id)->update(['read_at' => now()]); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $notification ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZIŨ5Http/Controllers/API/v1/NatureOfRequestController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = NatureOfRequest::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('request_for', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('nature_of_requests')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = NatureOfRequest::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = NatureOfRequest::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('nature_of_requests')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = NatureOfRequest::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZd.Http/Controllers/API/v1/JobTitleController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = JobTitle::with('job_classification')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('description', 'like', '%' . $keyword . '%') ->orWhere('salary_grade', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } /** * Store a newly created resource in storage. */ public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'job_classification_id' => 'required', 'name' => 'required|min:2|unique:job_titles,name' ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = JobTitle::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Update the specified resource in storage. */ public function update(Request $request, int $id) { $data = JobTitle::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (\Exception $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Remove the specified resource from storage. */ public function destroy(int $id) { $data = JobTitle::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZi%M 7Http/Controllers/API/v1/JobClassificationController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = JobClassification::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('description', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } } PKyZ{l))>Http/Controllers/API/v1/AdjustmentsAndDeductionsController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = AdjustmentsAndDeductions::with(['employee:employee_id,firstname,lastname', 'payroll_item:id,name']) ->whereHas('employee', function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // format keyword for partial matching $query->where('employee_id', 'like', '%' . $keyword . '%') ->orWhere('firstname', 'like', '%' . $keyword . '%') ->orWhere('lastname', 'like', '%' . $keyword . '%'); }); // Handling sorting if (!empty($sortBy) && !empty($sortType)) { // Check if the sortBy is 'fullname', then sort by both firstname and lastname if ($sortBy === 'fullname') { $data = $data->join('employees', 'adjustments_and_deductions.employee_id', '=', 'employees.employee_id') ->orderBy('employees.firstname', $sortType) ->orderBy('employees.lastname', $sortType); } else { $data = $data->orderBy($sortBy, $sortType); } } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { $recurring = ($request->recurring && $request->recurring !== 'null' && $request->recurring !== 'false' && trim($request->recurring) !== '' ? 1 : 0); $request['recurring'] = $recurring; // Validate the incoming request data $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'payroll_item_id' => [ 'required', ], 'date_from' => [ 'required', ], 'amount' => [ 'required', ], 'frequency' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { foreach ($request->employee_id as $employee) { $employee_info = Employee::select('company_id', 'dealer_id')->where('employee_id', $employee)->first(); $request['company_id'] = $employee_info->company_id; $request['dealer_id'] = $employee_info->dealer_id; $request['employee_id'] = $employee; $data = AdjustmentsAndDeductions::create($request->all()); DB::connection()->commit(); } // $data = AdjustmentsAndDeductions::create($request->all()); // DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = AdjustmentsAndDeductions::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $recurring = ($request->recurring && $request->recurring !== 'null' && $request->recurring !== 'false' && trim($request->recurring) !== '' ? 1 : 0); $request['recurring'] = $recurring; $validator = Validator::make($request->all(), [ 'employee_id' => [ 'required', ], 'payroll_item_id' => [ 'required', ], 'date_from' => [ 'required', ], 'amount' => [ 'required', ], 'frequency' => [ 'required', ], ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = AdjustmentsAndDeductions::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ AA*Http/Controllers/API/v1/UnitController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Unit::with('section')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'section_id' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('units')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Unit::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Unit::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'section_id' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('units')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Unit::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ4aa6Http/Controllers/API/v1/OrganizationUnitController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = OrganizationUnit::with([ 'dealership', 'group_division', 'department', 'division', 'section', ])->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'dealership_id' => [ 'required', ], 'department_id' => [ 'required', ], 'section_id' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = OrganizationUnit::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = OrganizationUnit::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'dealership_id' => [ 'required', ], 'department_id' => [ 'required', ], 'section_id' => [ 'required', ], ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = OrganizationUnit::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ2L- . .*Http/Controllers/API/v1/RoleController.phpnu[input('per_page',PHP_INT_MAX); $keyword = $request->input('keyword', ''); $system_id = $request->input('system_id', null); $sortBy = $request->input('sortBy', null); $sortType = $request->input('sortType', null); $data = Role::with(['group', ])->where(fn ($q) => $q->where('name', 'like', '%'.$keyword.'%') ->orWhere('description', 'like', '%'.$keyword.'%')) ->when($system_id, fn ($qs) => $qs->whereHas('group', fn($q) => $q->where('system_id', '=', $system_id)->orWhereNull('system_id'))) ->when($sortBy, fn($qs) => $qs->orderBy($sortBy, $sortType)) ->paginate($perPage); return response()->json($data); } /** * Get all role info * */ public function show($id) { return response()->json([ 'status' => true, 'message' => 'Role info', 'data' => Role::where('id', '=', $id)->first() ]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('roles')->whereNull('deleted_at'), ] ]); if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ]); } DB::connection()->beginTransaction(); try { $role = Role::create($request->all()); //save company access if($request['companies']) { // dd($request->companies); foreach($request->companies as $company_id) { $dealerships = []; if($request['dealerships']) { foreach($request->dealerships as $dealer_id) { $dealership = Dealership::find($dealer_id); if($dealership->company_id == $company_id) { $dealerships[] = [ 'role_id' => $role->id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'created_at' => $role->created_at, 'updated_at' => $role->updated_at, ]; } } } // dd($dealerships); if(!empty($dealerships)) { RoleCompanyAccess::insert($dealerships); } else { RoleCompanyAccess::create([ 'role_id' => $role->id, 'company_id' => $company_id, 'dealership_id' => 0, 'created_at' => $role->created_at, 'updated_at' => $role->updated_at, ]); } } } DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Role saved successfully!', 'data' => $role ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $data = Role::find($id); if (!$data) { return response()->json(['messages' => 'No data found.'], 202); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('roles')->ignore($id)->whereNull('deleted_at'), ] ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill(array_merge($request->all(),['updated_at' => $this->current_datetime])); $data->save(); $data->touch(); //find Role in CompanyAccess $roleCompanyAccess = RoleCompanyAccess::where('role_id', $data->id); $roleCompanyAccess->delete(); //save company access if($request['companies']) { foreach($request->companies as $company_id) { $dealerships = []; if($request['dealerships']) { foreach($request->dealerships as $dealer_id) { $dealership = Dealership::find($dealer_id); if($dealership->company_id == $company_id) { $dealerships[] = [ 'role_id' => $data->id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'created_at' => $data->updated_at, 'updated_at' => $data->updated_at, ]; } } } if(!empty($dealerships)) { RoleCompanyAccess::insert($dealerships); } else { RoleCompanyAccess::create([ 'role_id' => $data->id, 'company_id' => $company_id, 'dealership_id' => 0, 'created_at' => $data->updated_at, 'updated_at' => $data->updated_at, ]); } } } DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Role updated successfully!', 'data' => $data ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // if ( ! _userAccess('can.delete.roles')) { // return response()->json([ // 'status' => false, // 'message' => 'Unauthorized.' // ]); // } $validator = Validator::make(['id' => $id], [ 'id' => 'required|exists:id' ]); if ($validator->fails()) { return response()->json([ 'status' => false, 'message' => 'Validation error', 'data' => $validator->errors() ]); } DB::connection()->beginTransaction(); try { $role = Role::find($id); $role->delete(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => '"'.$role->name.'" deleted successfully!', 'data' => $role ]); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function RoleCompanyAccess(Request $request, $id) { $data = RoleCompanyAccess::select('role_company_access.company_id', 'role_company_access.dealership_id', DB::raw("companies.name AS company_name"), DB::raw("dealerships.name AS dealership_name")) ->orderBy('companies.name') ->leftJoin('companies', 'role_company_access.company_id', '=', 'companies.id') ->leftJoin('dealerships', 'role_company_access.dealership_id', '=', 'dealerships.id') ->where('role_company_access.role_id', $id) ->get(); // if($id != 1) { // $data = $data->toArray(); // } else { // $data = Store::select('dealerships.id', 'dealerships.name') // ->orderBy('dealerships.name') // ->get(); // $data = $data->toArray(); // array_unshift($data,['company_id'=>'all','name'=>'ALL']); // } return response()->json([ 'status' => true, 'role' => Role::find($id), 'data' => $data ]); } public function AllRoleCompanyAccess(Request $request) { $role_ids = $request->input('role_ids'); if(!in_array(1, $role_ids)) { $data = RoleCompanyAccess::select('dealerships.id','dealerships.name')->distinct('dealerships.name') ->orderBy('dealerships.name') ->leftJoin('dealerships', 'role_company_access.company_id', '=', 'dealerships.id') ->whereIn('role_company_access.role_id', $role_ids) ->get(); /**if has all access get all dealerships */ if(in_array(0,array_column($data->toArray(),'company_id'))) { $data = Dealership::select('dealerships.*') ->orderBy('dealerships.name') ->get(); } } else { $data = Dealership::select('dealerships.*') ->orderBy('dealerships.name') ->get(); } return response()->json([ 'status' => true, 'roles' => Role::find($role_ids), 'data' => $data ]); } /** * Get module access assigned to role and store * */ // public function dealershipPermissions($id, $company_id) // { // $data = Role::dealershipPermissions($id, $company_id); // $data = Arr::pluck($data, 'name'); // return response()->json([ // 'status' => true, // 'message' => 'Assigned Permissions list', // 'data' => $data // ]); // } } PKyZԛuqq,Http/Controllers/API/v1/ModuleController.phpnu[input('per_page',PHP_INT_MAX); $keyword = $request->input('keyword', ''); $keyword = str_replace(' ', '%', $keyword); $data = Module::with(['menu', 'system'])->where(fn ($q) => $q->where('name', 'like', '%'.$keyword.'%') ->orWhereHas('system', fn($qs) => $qs->where('name', 'like', '%'.$keyword.'%') ->orWhere('code', 'like', '%'.$keyword.'%')) )->orderBy('name')->paginate($perPage); // dd(DB::getQueryLog()); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'code' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('modules')->whereNull('deleted_at') ], 'code' => [ 'required', 'min:2', Rule::unique('modules')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Module::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Module::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'code' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('modules')->ignore($id)->whereNull('deleted_at') ], 'code' => [ 'required', 'min:2', Rule::unique('modules')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Module::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZhO48Http/Controllers/API/v1/ReportModuleColumnController.phpnu[get(); return response()->json($data); } } PKyZACGCG)Http/Controllers/API/v1/MrfController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Mrf::with([ 'company', 'jobtitle', 'employmenttype', 'requestor', 'recommendor', 'endorser', 'approver', 'employee' ])->where(function ($query) use ($keyword) { $query->whereHas('jobtitle', function ($q) use ($keyword) { $q->where('name', 'like', "%$keyword%"); }) ->orWhereHas('company', function ($q) use ($keyword) { $q->where('name', 'like', "%$keyword%"); }) ->orWhereHas('employmenttype', function ($q) use ($keyword) { $q->where('name', 'like', "%$keyword%"); }) ->orWhereHas('requestor', function ($q) use ($keyword) { $q->where('firstname', 'like', "%$keyword%") ->orWhere('lastname', 'like', "%$keyword%"); }); }); try{ switch ($employee->employees->classification_id) { case 2: $data->where('requested_by', $employee->employee_id); break; case 3: if ($employee->employees->position_id == 540 || $employee->employees->position_id == 21) { $data->where('endorsed_by', $employee->employee_id) ->where('status', '>=', 1) ->orWhere('requested_by', $employee->employee_id); } else { $data->where('recommended_by', $employee->employee_id) ->orWhere('requested_by', $employee->employee_id); } break; case 4: $data->where('approved_by', $employee->employee_id) ->where('status', '>=', 2) ->orWhere('requested_by', $employee->employee_id); break; } } catch(Throwable $e) { } if (!empty($sortBy) && !empty($sortType)) { $data->orderBy($sortBy, $sortType); } $data->where('enabled', 1); $data = $data->paginate($perPage); return response()->json($data); } public function showApprovedMrf(Request $request) { $employee = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Mrf::with([ 'company', 'jobtitle', 'employmenttype', 'requestor', 'recommendor', 'endorser', 'approver', 'employee' ])->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); }); try{ switch ($employee->employees->classification_id) { case 2: $data->where('requested_by', $employee->employee_id); break; case 3: if ($employee->employees->position_id == 540 || $employee->employees->position_id == 21) { $data->where('endorsed_by', $employee->employee_id) ->where('status', '>=', 1) ->orWhere('requested_by', $employee->employee_id); } else { $data->where('recommended_by', $employee->employee_id) ->orWhere('requested_by', $employee->employee_id); } break; case 4: $data->where('approved_by', $employee->employee_id) ->where('status', '>=', 2) ->orWhere('requested_by', $employee->employee_id); break; } } catch(Throwable $e) { } if (!empty($sortBy) && !empty($sortType)) { $data->orderBy($sortBy, $sortType); } $data->where('enabled', 1)->where('status', 3); $data = $data->paginate($perPage); // dd($data); return response()->json($data); } public function showOpenPositionMrf(Request $request) { $data = Mrf::with('jobtitle:id,name')->select('job_title')->distinct()->get(); return response()->json($data); } public function showMrfWithApplicants() { $mrfs = Mrf::with([ 'applicants' => function($query) { $query->where('applicants.status', 0); $query->where('applicants.blocklist', 0); }, 'company', 'jobtitle' ])->get(); if ($mrfs->isEmpty()) { return response()->json([ 'message' => 'No Mrf records found.' ], 404); } $response = $mrfs->map(function($mrf) { return [ 'mrf' => $mrf, 'applicant_count' => $mrf->applicants->count(), 'applicants' => $mrf->applicants ]; }); return response()->json($response); } public function showArchiveApplicants(Request $request) { // dd($request->all()); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $mrfs = Mrf::with([ 'applicants' => function ($query) { $query->onlyTrashed(); // Get only soft-deleted applicants }, 'company', 'jobtitle', ]) ->where(function ($query) use ($keyword) { $query->whereHas('jobtitle', function ($q) use ($keyword) { $q->where('name', 'like', "%$keyword%"); }) ->orWhereHas('company', function ($q) use ($keyword) { $q->where('name', 'like', "%$keyword%"); }); }) ->whereHas('applicants', function ($query) use ($keyword) { // Ensure soft-deleted applicants and apply the keyword filter $query->onlyTrashed(); }) ->get(); // if ($mrfs->isEmpty()) { // $mrfs = []; // // return response()->json([ // // 'message' => 'No Mrf records with trashed applicants found.' // // ], 404); // } $response = $mrfs->map(function ($mrf) { return [ 'mrf' => $mrf, 'trashed_applicant_count' => $mrf->applicants->count(), 'trashed_applicants' => $mrf->applicants ]; }); return response()->json($response); } public function showBlocklistApplicants(Request $request) { $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $mrfs = Mrf::with([ 'applicants' => function ($query) { $query->where('blocklist', 1); }, 'company', 'jobtitle' ]) ->where(function ($query) use ($keyword) { $query->whereHas('jobtitle', function ($q) use ($keyword) { $q->where('name', 'like', "%$keyword%"); }) ->orWhereHas('company', function ($q) use ($keyword) { $q->where('name', 'like', "%$keyword%"); }); }) ->whereHas('applicants', function ($query) { $query->where('blocklist', 1); })->get(); $response = $mrfs->map(function ($mrf) { return [ 'mrf' => $mrf, 'trashed_applicant_count' => $mrf->applicants->count(), 'trashed_applicants' => $mrf->applicants ]; }); return response()->json($response); } public function show($id) { $data = Mrf::with(['company', 'jobtitle', 'employmenttype'])->find($id); if (!$data) { return response()->json(['message' => 'Record not found'], 404); } return response()->json($data); } public function store(Request $request) { $validator = Validator::make($request->all(), [ 'company_id' => "required", ]); if ($validator->fails()) { return $this->validationErrorResponse($validator); } DB::beginTransaction(); try { $attachment_name = $this->handleFileUpload($request->file('supporting_document'), 'mrf'); $status = Mrf::create($this->prepareMrfData($request, $attachment_name)); DB::commit(); $status->load(['employee']); $this->sendNotification($request, $status); // dd(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $status ], 201); } catch (Exception $e) { DB::rollBack(); return $this->exceptionResponse($e); } } public function update(Request $request) { $data = Mrf::find($request->id); if($request->status == 99){ $now = date('Y-m-d H:i:s'); $request['status'] = 0; $request['denied_at'] = $now; } if (!$data) { return response()->json(['message' => 'Record not found'], 404); } $validator = Validator::make($request->all(), [ 'company_id' => "required", ]); if ($validator->fails()) { return $this->validationErrorResponse($validator); } DB::beginTransaction(); try { $attachment_name = $request->supporting_document; if ($data->supporting_document != $request->supporting_document) { $this->deleteFile('mrf/' . $data->supporting_document); $attachment_name = $this->handleFileUpload($request->file('supporting_document'), 'mrf'); } $data->fill($this->prepareMrfData($request, $attachment_name)); $data->save(); DB::commit(); return response()->json([ 'status' => true, 'message' => 'Updated successfully!', 'data' => $data ], 201); } catch (Exception $e) { DB::rollBack(); return $this->exceptionResponse($e); } } public function updateStatus(Request $request, $id) { // dd($request->all()); $data = Mrf::find($id); if (!$data) { return response()->json(['message' => 'No data found.'], 404); } DB::beginTransaction(); try { $now = date('Y-m-d H:i:s'); switch ($request->status) { case 3: $request['approved_at'] = $now; break; case 1: $request['recommended_at'] = $now; break; case 2: $request['endorsed_at'] = $now; break; } $request->status == 3 ? $request['approved_at'] = date('Y-m-d') : ''; $data->fill($request->all()); $data->save(); DB::commit(); $employee_id_for_notification = $this->getEmployeeIdForNotification($request->status, $data); $this->sendNotificationToEmployee($employee_id_for_notification, $data); return response()->json([ 'message' => 'Record successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Exception $e) { DB::rollBack(); return $this->exceptionResponse($e); } } public function closeMrf(Request $request, $id) { // dd($request->all()); $data = Mrf::find($id); if (!$data) { return response()->json(['message' => 'No data found.'], 404); } DB::beginTransaction(); try { $now = date('Y-m-d'); $request['closed_at'] = $now; $request['enabled'] = 0; $data->fill($request->all()); $data->save(); DB::commit(); return response()->json([ 'message' => 'Record successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Exception $e) { DB::rollBack(); return $this->exceptionResponse($e); } } public function destroy($id) { $data = Mrf::find($id); if (!$data) { return response()->json(['message' => "Record not found!"], 204); } DB::beginTransaction(); try { $data->delete(); DB::commit(); return response()->json(['message' => "Record successfully deleted!"], 201); } catch (Exception $e) { DB::rollBack(); return $this->exceptionResponse($e); } } private function handleFileUpload($file, $path) { if ($file) { $attachment_name = time() . '_' . $file->getClientOriginalName(); $storagePath = "$path/$attachment_name"; Storage::disk('local')->put($storagePath, file_get_contents($file)); return $attachment_name; } return ''; } private function deleteFile($path) { if (Storage::exists($path)) { Storage::delete($path); } } private function prepareMrfData($request, $attachment_name) { return [ 'company_id' => $request->company_id, 'nature_of_request' => $request->nature_of_request, 'classification' => $request->classification, 'job_title' => $request->job_title, 'salary_grade' => $request->salary_grade, 'salary' => $request->salary, 'replacement_position_number' => $request->replacement_position_number, 'employee_name_to_be_replaced1' => $request->employee_name_to_be_replaced1, 'nature_of_seperation1' => $request->nature_of_seperation1, 'date_of_seperation1' => $request->date_of_seperation1, 'new_position_number' => $request->new_position_number, 'date_needed' => $request->date_needed, 'employment_status' => $request->employment_status, 'supporting_document' => $attachment_name, 'document_type' => $request->document_type, 'working_position_title' => $request->working_position_title, 'inclusive_period' => $request->inclusive_period, 'justification' => $request->justification, 'job_design' => $request->job_design, 'requested_by' => $request->requested_by, 'recommended_by' => $request->recommended_by, 'endorsed_by' => $request->endorsed_by, 'approved_by' => $request->approved_by, 'status' => $request->status ]; } private function sendNotification($request, $status) { $email_to = match ($request->status) { 2 => $this->getEmployeeEmailData($request->approved_by), 1 => $this->getEmployeeEmailData($request->endorsed_by), default => $this->getEmployeeEmailData($request->recommended_by), }; if ($email_to) { Notification::send($email_to, new MrfNotification($status)); } } private function getEmployeeIdForNotification($status, $data) { return match ($status) { 3 => $data->requested_by, 2 => $data->approved_by, 1 => $data->endorsed_by, default => $data->recommended_by, }; } private function sendNotificationToEmployee($employee_id, $status) { $email_to = $this->getEmployeeEmailData($employee_id); if ($email_to) { Notification::send($email_to, new MrfNotification($status)); } } private function getEmployeeEmailData($employee_id) { return User::whereHas('employees', function ($query) use ($employee_id) { $query->where('employee_id', $employee_id); })->get(); } private function validationErrorResponse($validator) { return response()->json([ 'status' => false, 'message' => 'Validation failed!', 'error' => $validator->errors() ], 422); } private function exceptionResponse($exception) { return response()->json([ 'status' => false, 'message' => 'An error occurred!', 'error' => $exception->getMessage() ], 500); } } PKyZكC  AHttp/Controllers/API/v1/CompetenciesTalentsInteressController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = YourModelHere::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique(TableNameHere)->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = YourModelHere::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { // Get table name $tableName = $this->getTableName(); $data = YourModelHere::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique(TableNameHere)->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = YourModelHere::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZޓ8Http/Controllers/API/v1/BenefitSubCategoryController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = BenefitSubCategory::with('benefit_category')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'code' => [ 'required', Rule::unique('benefit_sub_categories')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = BenefitSubCategory::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = BenefitSubCategory::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'code' => [ 'required', Rule::unique('benefit_sub_categories')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = BenefitSubCategory::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ4,1Http/Controllers/API/v1/HolidayTypeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = HolidayType::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } } PKyZD:A99/Http/Controllers/API/v1/PhicTableController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = PhicTable::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('salary_range', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'salary_range' => [ 'required', 'min:2', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = PhicTable::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = PhicTable::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'salary_range' => [ 'required', 'min:2', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = PhicTable::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ(@//:Http/Controllers/API/v1/EmployeeCompensationController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeCompensation::with(['employee'])->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // $taxable = ($request->taxable && $request->taxable !== 'null' && $request->taxable !== 'false' && trim($request->taxable) !== '' ? 1 : 0); // $request['taxable'] = $taxable; // // Validate the incoming request data // $validator = Validator::make($request->all(), [ // 'name' => [ // 'required', // 'min:2', // Rule::unique('payroll_items')->whereNull('deleted_at') // ] // ]); // /** If validation fails return with error message */ // if ($validator->fails()) { // $errors = $validator->errors(); // $first = $errors->getMessages(); // return response()->json([ // 'status' => false, // 'message' => (reset($first))[0], // 'errors' => $errors // ], Response::HTTP_UNPROCESSABLE_ENTITY); // } $employee_info = Employee::select('company_id', 'dealer_id')->where('employee_id', $request->employee_id)->first(); $request['company_id'] = $employee_info->company_id; $request['dealer_id'] = $employee_info->dealer_id; DB::connection()->beginTransaction(); try { $data = EmployeeCompensation::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = EmployeeCompensation::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } // $taxable = ($request->taxable && $request->taxable !== 'null' && $request->taxable !== 'false' && trim($request->taxable) !== '' ? 1 : 0); // $request['taxable'] = $taxable; // $validator = Validator::make($request->all(), // [ // 'name' => [ // 'required', // 'min:2', // Rule::unique('payroll_items')->ignore($id)->whereNull('deleted_at') // ] // ] // ); // /** If validation fails return with error message */ // if ($validator->fails()) { // $errors = $validator->errors(); // $first = $errors->getMessages(); // return response()->json([ // 'status' => false, // 'message' => (reset($first))[0], // 'errors' => $errors // ], Response::HTTP_UNPROCESSABLE_ENTITY); // } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeCompensation::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZh**4Http/Controllers/API/v1/WorkSuspensionController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = WorkSuspension::with('dealership', 'company')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('date', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'reason' => [ 'required', 'min:2', ], 'date' => [ 'required', 'min:2', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = WorkSuspension::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = WorkSuspension::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'reason' => [ 'required', 'min:2', ], 'date' => [ 'required', 'min:2', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = WorkSuspension::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ$W.Http/Controllers/API/v1/ChildrenController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Children::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = Children::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Children::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Children::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Children::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZy*B.Http/Controllers/API/v1/DivisionController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Division::with('group_division')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('divisions')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Division::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Division::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('divisions')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Division::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ ۱<Http/Controllers/API/v1/AttendanceDenyRequestsController.phpnu[update($request, $request->id); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); // $data = EmployeeLeave::with(['employee', 'leave_type'])->find($request->id); // if($data->status == 99){ // return response()->json(['messages' => 'This leave request already denied.'], 404); // } // if (!$data) { // return response()->json(['messages' => 'No data found.'], 404); // } // $request['status'] = 99; // if($request->status == 99){ // if($data->leave_id != 1){ // $leave_credits = EmployeeLeaveCredits::where([ // 'employee_id' => $data->employee_id, // 'enabled' => 1, // 'leave_type_id' => $data->leave_id // ])->first(); // $remaining_leave = $data->days + $leave_credits->remaining; // $updateData = [ // 'remaining' => $remaining_leave // ]; // try { // DB::connection()->beginTransaction(); // $leave_credits->remaining = $remaining_leave; // $leave_credits->save(); // DB::connection()->commit(); // } catch(Throwable $e) { // DB::rollBack(); // return response()->json([ // 'status' => false, // 'message' => 'Unable to process request. Please try again.', // 'data' => $e->getMessage() // ], Response::HTTP_INTERNAL_SERVER_ERROR); // } // } // } // DB::beginTransaction(); // try { // $request->status == 2 ? $request['approved_at'] = date('Y-m-d') : ''; // $data->fill($request->all())->save(); // $data->touch(); // $employee_id_for_notification = $request->status == 1 ? $data->approver_id : $data->employee_id; // $send_notification = new LeaveApprovalController(); // $send_notification->sendNotification($employee_id_for_notification, $data); // DB::commit(); // return response()->json([ // 'message' => 'Record Successfully updated!', // 'status' => 'success', // 'data' => $data, // ], 201); // } catch (Throwable $e) { // DB::rollback(); // return response()->json([ // 'status' => false, // 'message' => 'Unable to process request. Please try again.', // 'data' => $e->getMessage() // ]); // } } public function overtime_request(Request $request) { $overtimeUpdate = new OvertimeApprovalController(); $request['status'] = 99; $overtimeUpdate->update($request, $request->id); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } public function undertime_request(Request $request) { $undertimeUpdate = new UndertimeApprovalController(); $request['status'] = 99; $undertimeUpdate->update($request, $request->id); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } public function travel_request(Request $request) { $travelUpdate = new TravelApprovalController(); $request['status'] = 99; $travelUpdate->update($request, $request->id); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } public function offset_availment_request(Request $request) { $offsetAvailmentUpdate = new OffsetAvailmentApprovalController(); $request['status'] = 99; $offsetAvailmentUpdate->update($request, $request->id); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } public function offset_earning_request(Request $request) { $offsetEarningUpdate = new OffsetEarningApprovalController(); $request['status'] = 99; $offsetEarningUpdate->update($request, $request->id); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', ],201); } } PKyZXX,Http/Controllers/API/v1/ReportControllerJsonnu[all()); // Mapping module numbers to report generation methods $reportGenerators = [ '1' => 'generateLeaveReport', '2' => 'generateOvertimeReport', '3' => 'generateMasterlistReport', '4' => 'generateSalariesReport', '5' => 'generateRolesReport', '6' => 'generateNoScheduleReport', '7' => 'generateAbsentReport', '8' => 'generateTardinessReport', '9' => 'generateBirthdaysReport', '10' => 'generateUndertimeReport', '11' => 'generateDTRReport', '12' => 'generateTravelReport', '13' => 'generateCompanyBenefitsReport', '14' => 'generateLeaveDetailed', '15' => 'generateContributionReport', '16' => 'generateOvertimeCompanyReport' ]; $module = $request->modules; if (array_key_exists($module, $reportGenerators)) { $method = $reportGenerators[$module]; return $this->$method($request); } return response()->json(['message' => 'You need to select a valid module']); } public function generateLeaveReport($request) { DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'from_date' => 'required|date', 'to_date' => 'required|date', 'leave_id' => 'nullable|integer', 'status' => 'nullable|string', ]); // Start the query $query = DB::table('employee_leaves') ->join('employees', 'employee_leaves.employee_id', '=', 'employees.employee_id') ->join('leave_types', 'employee_leaves.leave_id', '=', 'leave_types.id'); // Apply filters if ($request->filled('leave_id')) { $query->where('employee_leaves.leave_id', $request->leave_id); } if ($request->filled('status')) { $query->where('employee_leaves.status', $request->status); } if ($request->filled('from_date') && $request->filled('to_date')) { $fromDate = Carbon::parse($request->from_date)->startOfDay(); $toDate = Carbon::parse($request->to_date)->endOfDay(); $query->whereBetween('employee_leaves.date_from', [$fromDate, $toDate]) ->whereBetween('employee_leaves.date_to', [$fromDate, $toDate]); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Dynamically add columns based on request if (in_array('status', $selectedColumns)) { $transformedColumns[] = DB::raw(" CASE WHEN employee_leaves.status = 0 THEN 'Pending / For Recommendation' WHEN employee_leaves.status = 1 THEN 'For Approval' WHEN employee_leaves.status = 2 THEN 'Approved' ELSE 'Denied' END as status "); } if (in_array('leave_id', $selectedColumns)) { $transformedColumns[] = 'leave_types.name as leave_id'; } if (in_array('without_pay', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_leaves.without_pay = 0 THEN 'No' ELSE 'Yes' END as without_pay"); } if (in_array('half_day', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_leaves.half_day = 0 THEN 'No' ELSE 'Yes' END as half_day"); } if (in_array('description', $selectedColumns)) { $transformedColumns[] = 'employee_leaves.description as description'; } if (in_array('created_at', $selectedColumns)) { $transformedColumns[] = 'employee_leaves.created_at as created_at'; } if (in_array('recommending_id', $selectedColumns)) { $query->leftJoin('employees as recommending_employee', 'employee_leaves.recommending_id', '=', 'recommending_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(recommending_employee.firstname, ' ', recommending_employee.lastname) as recommending_id"); } if (in_array('approver_id', $selectedColumns)) { $query->leftJoin('employees as approver_employee', 'employee_leaves.approver_id', '=', 'approver_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(approver_employee.firstname, ' ', approver_employee.lastname) as approver_id"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = 'employees.employee_id'; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $leaves = $query->get(); // Return the response as JSON return response()->json([ 'data' => $leaves, 'total_hours' => $query->sum('hours'), 'total_days' => $query->sum('days'), ]); } public function generateOvertimeReport($request) { // dd($request->all()); // Validate the request DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'from_date' => 'required|date', 'to_date' => 'required|date', 'charge_to' => 'nullable|integer', 'status' => 'nullable|string', ]); // Start the query $query = DB::table('employee_overtimes') ->join('employees', 'employee_overtimes.employee_id', '=', 'employees.employee_id') ->leftjoin('companies', 'employee_overtimes.charge_to', '=', 'companies.id'); // Apply filters if ($request->filled('charge_to')) { $query->where('employee_overtimes.charge_to', $request->charge_to); } if ($request->filled('status')) { $query->where('employee_overtimes.status', $request->status); } if ($request->filled('from_date') && $request->filled('to_date')) { $fromDate = Carbon::parse($request->from_date)->startOfDay(); $toDate = Carbon::parse($request->to_date)->endOfDay(); $query->whereBetween('employee_overtimes.date_from', [$fromDate, $toDate]); $query->whereBetween('employee_overtimes.date_to', [$fromDate, $toDate]); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Conditionally include status if 'status' is in $columns if (in_array('status', $selectedColumns)) { $transformedColumns[] = DB::raw(" CASE WHEN employee_overtimes.status = 0 THEN 'Pending / For Recommendation' WHEN employee_overtimes.status = 1 THEN 'For Approval' WHEN employee_overtimes.status = 2 THEN 'Approved' ELSE 'Denied' END as status "); } // Handle transformed columns dynamically if (in_array('charge_to', $selectedColumns)) { $transformedColumns[] = 'companies.name as charge_to'; } if (in_array('meal', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_overtimes.meal = 0 THEN 'No' ELSE 'Yes' END as meal"); } if (in_array('transportation', $selectedColumns)) { $transformedColumns[] = DB::raw("CASE WHEN employee_overtimes.transportation = 0 THEN 'No' ELSE 'Yes' END as transportation"); } if (in_array('description', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_overtimes.description as description'); } if (in_array('created_at', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_overtimes.created_at as created_at'); } // Conditionally join employees for recommending_id if (in_array('recommending_id', $selectedColumns)) { $query->leftJoin('employees as recommending_employee', 'employee_overtimes.recommending_id', '=', 'recommending_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(recommending_employee.firstname, ' ', recommending_employee.lastname) as recommending_id"); } // Conditionally join employees for approver_id if (in_array('approver_id', $selectedColumns)) { $query->leftJoin('employees as approver_employee', 'employee_overtimes.approver_id', '=', 'approver_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(approver_employee.firstname, ' ', approver_employee.lastname) as approver_id"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $overtime = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $overtime, 'total_hours' => $query->sum('hours'), // This line can also be used if not grouping ]); } public function generateMasterlistReport($request) { DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'date_hired_from' => 'required|date', 'date_hired_to' => 'required|date' ]); $query = DB::table('employees') ->join('personal_information', 'personal_information.employee_id', '=', 'employees.employee_id'); if ($request->filled('date_hired_from') && $request->filled('date_hired_to')) { $fromDate = Carbon::parse($request->date_hired_from)->startOfDay(); $toDate = Carbon::parse($request->date_hired_to)->endOfDay(); $query->whereBetween('employees.date_hired', [$fromDate, $toDate]); } $personalInformationColumns = ['age', 'gender', 'religion', 'tin', 'philhealth', 'citizenship', 'sss', 'pagibig', 'civil_status', 'hair_color', 'blood_type', 'eye_color', 'height', 'weight']; $selectedColumns = array_map(function($column) use ($personalInformationColumns) { if (in_array($column, $personalInformationColumns)) { return 'personal_information.' . $column; } return 'employees.' . $column; }, $request->columns); $transformedColumns = []; if (in_array('employees.company_id', $selectedColumns)) { $query->leftJoin('companies', 'companies.id', '=', 'employees.company_id'); $transformedColumns[] = DB::raw("companies.name as company_id"); } if (in_array('employees.position_id', $selectedColumns)) { $query->leftJoin('job_titles', 'job_titles.id', '=', 'employees.position_id'); $transformedColumns[] = DB::raw("job_titles.name as position_id"); } if (in_array('employees.dealer_id', $selectedColumns)) { $query->leftJoin('dealerships', 'dealerships.id', '=', 'employees.dealer_id'); $transformedColumns[] = DB::raw("dealerships.name as dealer_id"); } if (in_array('employees.employment_status_id', $selectedColumns)) { $query->leftJoin('job_classifications', 'job_classifications.id', '=', 'employees.employment_status_id'); $transformedColumns[] = DB::raw("job_classifications.name as employment_status_id"); } if (in_array('employees.group_id', $selectedColumns)) { $query->leftJoin('groups', 'groups.id', '=', 'employees.group_id'); $transformedColumns[] = DB::raw("groups.name as group_id"); } if (in_array('employees.division_id', $selectedColumns)) { $query->leftJoin('divisions', 'divisions.id', '=', 'employees.division_id'); $transformedColumns[] = DB::raw("divisions.name as division_id"); } if (in_array('employees.department_id', $selectedColumns)) { $query->leftJoin('departments', 'departments.id', '=', 'employees.department_id'); $transformedColumns[] = DB::raw("departments.name as department_id"); } if (in_array('employees.section_id', $selectedColumns)) { $query->leftJoin('sections', 'sections.id', '=', 'employees.section_id'); $transformedColumns[] = DB::raw("sections.name as section_id"); } if (in_array('employees.unit_id', $selectedColumns)) { $query->leftJoin('units', 'units.id', '=', 'employees.unit_id'); $transformedColumns[] = DB::raw("units.name as unit_id"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $masterlist = $query->get(); // dd($transformedColumns); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $masterlist, ]); } public function generateSalariesReport($request) { // Validate the request DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'salary_effectivity_date' => 'required|date', ]); // Start the query $query = DB::table('salary_and_wages') ->join('employees', 'salary_and_wages.employee_id', '=', 'employees.employee_id'); if ($request->filled('salary_effectivity_date')) { $fromDate = Carbon::parse($request->salary_effectivity_date)->startOfDay(); $query->where('salary_and_wages.salary_effectivity_date', '>=', $fromDate); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Handle transformed columns dynamically if ($request->filled('payroll_rate')) { $query->where('salary_and_wages.payroll_rate', $request->payroll_rate); } if ($request->filled('salary_rate')) { $query->whereBetween('salary_and_wages.salary_rate', [$request->salary_rate['min'], $request->salary_rate['max']]); } if ($request->filled('payment_type')) { $query->where('salary_and_wages.payment_type', $request->payment_type); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $salaries = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $salaries ]); } public function generateRolesReport($request) { // Validate the request DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', ]); // Start the query $query = DB::table('employees') ->join('users', 'employees.employee_id', '=', 'users.employee_id') ->join('user_roles', 'users.id', '=', 'user_roles.user_id') ->join('roles', 'user_roles.role_id', '=', 'roles.id') ->join('role_permissions', 'roles.id', '=', 'role_permissions.role_id') ->join('modules', 'role_permissions.module_id', '=', 'modules.id') ->join('menus', 'modules.menu_id', '=', 'menus.id') ->where('menus.system_id', 3); // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; if (in_array('roles_name', $selectedColumns)) { $transformedColumns[] = DB::raw("roles.name as roles_name"); } if (in_array('menu_name', $selectedColumns)) { $transformedColumns[] = DB::raw("menus.name as menu_name"); } if (in_array('menu_description', $selectedColumns)) { $transformedColumns[] = DB::raw("menus.description as menu_description"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns // $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($transformedColumns); // Fetch the results $roles = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $roles ]); } public function generateNoScheduleReport($request) { DB::enableQueryLog(); $query = DB::table('employees') ->leftJoin('employee_schedules', 'employees.employee_id', '=', 'employee_schedules.employee_id') ->where('employee_schedules.employee_id', NULL) ->where('employees.enabled', 1); $transformedColumns = []; if ($request->company_id) { $query->leftJoin('companies', 'companies.id', '=', 'employees.company_id'); $query->where('employees.company_id', $request->company_id); } if ($request->dealer_id) { $query->leftJoin('dealerships', 'dealerships.id', '=', 'employees.dealer_id'); $query->where('employees.dealer_id', $request->dealer_id); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; $query->select($transformedColumns); $noSchedule = $query->get(); // Return the response as JSON return response()->json([ 'data' => $noSchedule ]); } public function generateAbsentReport($request) { DB::enableQueryLog(); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { // Fetch employees individually $employees = Employee::select('employee_id', 'firstname', 'lastname') ->whereIn('employee_id', $request->employee_id) ->get(); } else { $employeeList = Employee::where('enabled', 1); if ($request->company_id) { $employeeList->where('company_id', $request->company_id); } if ($request->dealer_id) { $employeeList->where('dealer_id', $request->dealer_id); } // Get all employees that match the criteria $employees = $employeeList->select('employee_id', 'firstname', 'lastname')->get(); } $employeeAttendance = new EmployeeAttendanceController(); $start_date = new DateTime($request->start_date); $end_date = new DateTime($request->end_date); $end_date->modify('+1 day'); $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $data = []; foreach ($employees as $employee) { $employeeData = []; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $timelogs = $employeeAttendance->getTimelog($formattedDate, $employee->employee_id); $schedule = $employeeAttendance->getSchedule($formattedDate, $employee->employee_id); $holiday = $employeeAttendance->getHoliday($formattedDate); $leave = $employeeAttendance->getLeave($formattedDate, $employee->employee_id); $absent = $employeeAttendance->addAbsenceData($employeeData, $timelogs, $leave, $holiday, $schedule, $formattedDate); if ($absent) { $employeeData[] = $formattedDate; } } $data[] = [ 'employee_id' => $employee->employee_id, 'firstname' => $employee->firstname, 'lastname' => $employee->lastname, 'absent' => $employeeData, ]; } return response()->json([ 'data' => $data ]); } public function generateTardinessReport($request) { DB::enableQueryLog(); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { // Fetch employees individually $employees = Employee::select('employee_id', 'firstname', 'lastname') ->whereIn('employee_id', $request->employee_id) ->get(); } else { $employeeList = Employee::where('enabled', 1); if ($request->company_id) { $employeeList->where('company_id', $request->company_id); } if ($request->dealer_id) { $employeeList->where('dealer_id', $request->dealer_id); } // Get all employees that match the criteria $employees = $employeeList->select('employee_id', 'firstname', 'lastname')->get(); } $employeeAttendance = new EmployeeAttendanceController(); $start_date = new DateTime($request->start_date); $end_date = new DateTime($request->end_date); $end_date->modify('+1 day'); $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $data = []; foreach ($employees as $employee) { $employeeData = []; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $timelogs = $employeeAttendance->getTimelog($formattedDate, $employee->employee_id); $schedule = $employeeAttendance->getSchedule($formattedDate, $employee->employee_id); $tardiness = $employeeAttendance->getTardiness($timelogs, $schedule); if ($tardiness) { $employeeData[] = $formattedDate.'|'.$tardiness; } } $data[] = [ 'employee_id' => $employee->employee_id, 'firstname' => $employee->firstname, 'lastname' => $employee->lastname, 'tardiness' => $employeeData, ]; } return response()->json([ 'data' => $data ]); } public function generateBirthdaysReport($request) { $employeeList = Employee::where('employees.enabled', 1) ->join('personal_information', 'employees.employee_id', '=', 'personal_information.employee_id'); if ($request->company_id) { $employeeList->where('company_id', $request->company_id); } if ($request->dealer_id) { $employeeList->where('dealer_id', $request->dealer_id); } $employees = $employeeList->select('employees.employee_id', 'firstname', 'lastname', 'birth_date') ->whereRaw('MONTH(birth_date) IN (' . implode(',', $request->month) . ')') ->get(); return response()->json([ 'data' => $employees ]); } public function generateUndertimeReport($request) { DB::enableQueryLog(); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { $employees = Employee::select('employee_id', 'firstname', 'lastname') ->whereIn('employee_id', $request->employee_id) ->get(); } else { $employeeList = Employee::where('enabled', 1); if ($request->company_id) { $employeeList->where('company_id', $request->company_id); } if ($request->dealer_id) { $employeeList->where('dealer_id', $request->dealer_id); } // Get all employees that match the criteria $employees = $employeeList->select('employee_id', 'firstname', 'lastname')->get(); } $employeeAttendance = new EmployeeAttendanceController(); $start_date = new DateTime($request->start_date); $end_date = new DateTime($request->end_date); $end_date->modify('+1 day'); $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $data = []; foreach ($employees as $employee) { $employeeData = []; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $timelogs = $employeeAttendance->getTimelog($formattedDate, $employee->employee_id); $schedule = $employeeAttendance->getSchedule($formattedDate, $employee->employee_id); $undertime = $employeeAttendance->getUndertime($timelogs, $schedule); if ($undertime) { $employeeData[] = $formattedDate.'|'.$undertime; } } $data[] = [ 'employee_id' => $employee->employee_id, 'firstname' => $employee->firstname, 'lastname' => $employee->lastname, 'undertime' => $employeeData, ]; } return response()->json([ 'data' => $data ]); } public function generateDTRReport($request) { $end_date = date('Y-m-d', strtotime($request->end_date . '+1 day')); $employees = []; if ($request->filled('employee_id') && is_array($request->employee_id) && !empty($request->employee_id)) { $employeeList = Employee::select('employee_id', 'firstname', 'lastname', 'company_id', 'dealer_id')->with([ 'timelog' => function ($query) use ($request, $end_date) { $query->whereBetween('datetimelog', [$request->start_date, $end_date]); }, 'company:id,name', 'dealership:id,name' ]) ->whereIn('employee_id', $request->employee_id) ->where(['enabled' => 1]); // $employees = Employee::select('employee_id', 'firstname', 'lastname') // ->whereIn('employee_id', $request->employee_id) // ->get(); } else { $employeeList = Employee::select('employee_id', 'firstname', 'lastname')->with([ 'timelog' => function ($query) use ($request, $end_date) { $query->whereBetween('datetimelog', [$request->start_date, $end_date]); }, 'company', 'department' ])->where(['enabled' => 1]); // $employeeList = Employee::where('enabled', 1); if ($request->company_id) { $employeeList->where('company_id', $request->company_id); } if ($request->dealer_id) { $employeeList->where('dealer_id', $request->dealer_id); } // Get all employees that match the criteria $employees = $employeeList->select('employee_id', 'firstname', 'lastname')->get(); } $data = $employeeList->get(); return response()->json([ 'data' => $data ]); } public function generateTravelReport($request) { DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'from_date' => 'required|date', 'to_date' => 'required|date', 'status' => 'nullable|string', ]); // Start the query $query = DB::table('employee_obs') ->join('employees', 'employee_obs.employee_id', '=', 'employees.employee_id'); if ($request->company_id) { $query->where('employees.company_id', $request->company_id); } if ($request->dealer_id) { $query->where('employees.dealer_id', $request->dealer_id); } if ($request->filled('status')) { $query->where('employee_obs.status', $request->status); } if ($request->filled('from_date') && $request->filled('to_date')) { $fromDate = Carbon::parse($request->from_date)->startOfDay(); $toDate = Carbon::parse($request->to_date)->endOfDay(); $query->whereBetween('employee_obs.date_from', [$fromDate, $toDate]); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Conditionally include status if 'status' is in $columns if (in_array('status', $selectedColumns)) { $transformedColumns[] = DB::raw(" CASE WHEN employee_obs.status = 0 THEN 'Pending / For Recommendation' WHEN employee_obs.status = 1 THEN 'For Approval' WHEN employee_obs.status = 2 THEN 'Approved' ELSE 'Denied' END as status "); } if (in_array('date_from', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_obs.date_from as date_from'); } if (in_array('date_to', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_obs.date_to as date_to'); } if (in_array('description', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_obs.description as description'); } if (in_array('created_at', $selectedColumns)) { $transformedColumns[] = DB::raw('employee_obs.created_at as created_at'); } // Conditionally join employees for recommending_id if (in_array('recommending_id', $selectedColumns)) { $query->leftJoin('employees as recommending_employee', 'employee_obs.recommending_id', '=', 'recommending_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(recommending_employee.firstname, ' ', recommending_employee.lastname) as recommending_id"); } // Conditionally join employees for approver_id if (in_array('approver_id', $selectedColumns)) { $query->leftJoin('employees as approver_employee', 'employee_obs.approver_id', '=', 'approver_employee.employee_id'); $transformedColumns[] = DB::raw("CONCAT(approver_employee.firstname, ' ', approver_employee.lastname) as approver_id"); } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'date_from'; }); $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'date_to'; }); $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $ob = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $ob, ]); } public function generateCompanyBenefitsReport($request) { $data = []; $employeeCountPerCompany = DB::table('employees as e') ->join('companies as c', 'e.company_id', '=', 'c.id') ->select('c.id', 'c.name', 'c.code', DB::raw('COUNT(e.company_id) as employee_count_per_company')) ->where('e.enabled', 1) ->groupBy('c.name', 'e.company_id') ->get(); foreach($employeeCountPerCompany as $company){ $data[$company->id]['company_id'] = $request->id; $data[$company->id]['company_name'] = $company->name; $data[$company->id]['company_code'] = $company->code; $data[$company->id]['employee_count'] = $company->employee_count_per_company; $employeeQuery = Employee::select('employee_id')->where('company_id', $request->id); $employee_ids = $employeeQuery->pluck('employee_id'); $vacation_counts = EmployeeLeave::where('leave_id', 2) ->whereIn('employee_id', $employee_ids) ->selectRaw(' SUM(CASE WHEN without_pay = 0 THEN days ELSE 0 END) as total_vl_wp, SUM(CASE WHEN without_pay = 1 THEN days ELSE 0 END) as total_vl_wop ') ->whereRaw('MONTH(date_from) IN (' . implode(',', $request->month) . ')') ->where('status', 2) ->first(); // TOTAL FOR VACATION LEAVE $data[$company->id]['total_vl_wp'] = $vacation_counts->total_vl_wp; $data[$company->id]['total_vl_wop'] = $vacation_counts->total_vl_wop; $sick_counts = EmployeeLeave::where('leave_id', 3) ->whereIn('employee_id', $employee_ids) ->selectRaw(' SUM(CASE WHEN without_pay = 0 THEN days ELSE 0 END) as total_sl_wp, SUM(CASE WHEN without_pay = 1 THEN days ELSE 0 END) as total_sl_wop ') ->whereRaw('MONTH(date_from) IN (' . implode(',', $request->month) . ')') ->where('status', 2) ->first(); // TOTAL FOR SICK LEAVE $data[$company->id]['total_sl_wp'] = $sick_counts->total_sl_wp; $data[$company->id]['total_sl_wop'] = $sick_counts->total_sl_wop; // TOTAL BEREAVEMENT LEAVE $data[$company->id]['total_bl_wop'] = 0; $total_amount_of_benefits = DB::table('employees as e') ->join('employee_benefits as eb', 'e.employee_id', '=', 'eb.employee_id') ->selectRaw(' SUM(CASE WHEN benefits_type_id = 3 THEN eb.amount ELSE 0 END) as meal_total, SUM(CASE WHEN benefits_type_id = 2 THEN eb.amount ELSE 0 END) as transpo_total, SUM(CASE WHEN benefits_type_id = 5 THEN eb.amount ELSE 0 END) as transpo_subsidy_total, SUM(CASE WHEN benefits_type_id = 17 THEN eb.amount ELSE 0 END) as transpo_allowance_total, SUM(CASE WHEN benefits_type_id = 18 THEN eb.amount ELSE 0 END) as company_car_total, SUM(CASE WHEN benefits_type_id = 19 THEN eb.amount ELSE 0 END) as gas_allowance_total, SUM(CASE WHEN benefits_type_id = 20 THEN eb.amount ELSE 0 END) as parking_total, SUM(CASE WHEN benefits_type_id = 21 THEN eb.amount ELSE 0 END) as company_uniform_total, SUM(CASE WHEN benefits_type_id = 22 THEN eb.amount ELSE 0 END) as sm_uniform_total, SUM(CASE WHEN benefits_type_id = 23 THEN eb.amount ELSE 0 END) as hmo_total, SUM(CASE WHEN benefits_type_id = 24 THEN eb.amount ELSE 0 END) as first_aid_total, SUM(CASE WHEN benefits_type_id = 25 THEN eb.amount ELSE 0 END) as ligpai_total, SUM(CASE WHEN benefits_type_id = 26 THEN eb.amount ELSE 0 END) as calamity_assistance_total, SUM(CASE WHEN benefits_type_id = 27 THEN eb.amount ELSE 0 END) as bereavement_assistance_total, SUM(CASE WHEN benefits_type_id = 28 THEN eb.amount ELSE 0 END) as intereset_fee_total, SUM(CASE WHEN benefits_type_id = 29 THEN eb.amount ELSE 0 END) as laptop_prog_total, SUM(CASE WHEN benefits_type_id = 30 THEN eb.amount ELSE 0 END) as company_outing_total, SUM(CASE WHEN benefits_type_id = 31 THEN eb.amount ELSE 0 END) as com_allowance_total, SUM(CASE WHEN benefits_type_id = 32 THEN eb.amount ELSE 0 END) as stay_in_total, SUM(CASE WHEN benefits_type_id = 33 THEN eb.amount ELSE 0 END) as shuttle_service_total ') ->where('e.enabled', 1) ->where('e.company_id', $request->id) ->whereMonth('eb.date_from', $request->month) ->first(); foreach($total_amount_of_benefits as $key => $amount_of_benefits){ $data[$company->id][$key] = $amount_of_benefits; } } return response()->json([ 'data' => array_values($data) ]); } public function generateLeaveDetailed($request) { $data = []; $employeeCountPerCompany = DB::table('employees as e') ->join('companies as c', 'e.company_id', '=', 'c.id') ->select('c.id', 'c.name', 'c.code', DB::raw('COUNT(e.company_id) as employee_count_per_company')) ->where('e.enabled', 1) ->groupBy('c.name', 'e.company_id') ->get(); foreach($employeeCountPerCompany as $company){ $data[$company->id]['company_id'] = $request->id; $data[$company->id]['company_name'] = $company->name; $data[$company->id]['company_code'] = $company->code; $data[$company->id]['employee_count'] = $company->employee_count_per_company; $employeeQuery = Employee::select('employee_id')->where('company_id', $request->id); $employee_ids = $employeeQuery->pluck('employee_id'); $vacation_counts = EmployeeLeave::where('leave_id', 2) ->whereIn('employee_id', $employee_ids) ->selectRaw(' SUM(CASE WHEN without_pay = 0 THEN days ELSE 0 END) as total_vl_wp, SUM(CASE WHEN without_pay = 1 THEN days ELSE 0 END) as total_vl_wop ') ->whereRaw('MONTH(date_from) IN (' . implode(',', $request->month) . ')') ->where('status', 2) ->first(); // TOTAL FOR VACATION LEAVE $data[$company->id]['total_vl_wp'] = $vacation_counts->total_vl_wp; $data[$company->id]['total_vl_wop'] = $vacation_counts->total_vl_wop; $sick_counts = EmployeeLeave::where('leave_id', 3) ->whereIn('employee_id', $employee_ids) ->selectRaw(' SUM(CASE WHEN without_pay = 0 THEN days ELSE 0 END) as total_sl_wp, SUM(CASE WHEN without_pay = 1 THEN days ELSE 0 END) as total_sl_wop ') ->whereRaw('MONTH(date_from) IN (' . implode(',', $request->month) . ')') ->where('status', 2) ->first(); // TOTAL FOR SICK LEAVE $data[$company->id]['total_sl_wp'] = $sick_counts->total_sl_wp; $data[$company->id]['total_sl_wop'] = $sick_counts->total_sl_wop; // TOTAL BEREAVEMENT LEAVE $data[$company->id]['total_bl_wop'] = 0; $vacation_reason_counts = EmployeeLeave::whereIn('employee_id', $employee_ids) ->selectRaw(' COUNT(CASE WHEN leave_reason_id = 1 THEN 1 ELSE NULL END) as total_personal_vl, COUNT(CASE WHEN leave_reason_id = 2 THEN 1 ELSE NULL END) as total_fr_vl, COUNT(CASE WHEN leave_reason_id = 3 THEN 1 ELSE NULL END) as total_rl_vl, COUNT(CASE WHEN leave_reason_id = 4 THEN 1 ELSE NULL END) as total_emergency_vl, COUNT(CASE WHEN leave_reason_id = 5 THEN 1 ELSE NULL END) as total_others_vl, COUNT(CASE WHEN leave_reason_id = 6 THEN 1 ELSE NULL END) as total_cd_sl, COUNT(CASE WHEN leave_reason_id = 7 THEN 1 ELSE NULL END) as total_msp_sl, COUNT(CASE WHEN leave_reason_id = 8 THEN 1 ELSE NULL END) as total_rd_sl, COUNT(CASE WHEN leave_reason_id = 9 THEN 1 ELSE NULL END) as total_eent_sl, COUNT(CASE WHEN leave_reason_id = 10 THEN 1 ELSE NULL END) as total_idi_sl, COUNT(CASE WHEN leave_reason_id = 11 THEN 1 ELSE NULL END) as total_hf_sl, COUNT(CASE WHEN leave_reason_id = 12 THEN 1 ELSE NULL END) as total_or_sl, COUNT(CASE WHEN leave_reason_id = 13 THEN 1 ELSE NULL END) as total_dr_sl, COUNT(CASE WHEN leave_reason_id = 14 THEN 1 ELSE NULL END) as total_others_sl ') ->whereRaw('MONTH(date_from) IN (' . implode(',', $request->month) . ')') ->where('status', 2) ->first(); // TOTAL FOR VACATION LEAVE REASON $data[$company->id]['total_personal_vl'] = $vacation_reason_counts->total_personal_vl; $data[$company->id]['total_fr_vl'] = $vacation_reason_counts->total_fr_vl; $data[$company->id]['total_rl_vl'] = $vacation_reason_counts->total_rl_vl; $data[$company->id]['total_emergency_vl'] = $vacation_reason_counts->total_emergency_vl; $data[$company->id]['total_others_vl'] = $vacation_reason_counts->total_others_vl; $data[$company->id]['total_cd_sl'] = $vacation_reason_counts->total_cd_sl; $data[$company->id]['total_msp_sl'] = $vacation_reason_counts->total_msp_sl; $data[$company->id]['total_rd_sl'] = $vacation_reason_counts->total_rd_sl; $data[$company->id]['total_eent_sl'] = $vacation_reason_counts->total_eent_sl; $data[$company->id]['total_idi_sl'] = $vacation_reason_counts->total_idi_sl; $data[$company->id]['total_hf_sl'] = $vacation_reason_counts->total_hf_sl; $data[$company->id]['total_or_sl'] = $vacation_reason_counts->total_or_sl; $data[$company->id]['total_dr_sl'] = $vacation_reason_counts->total_dr_sl; $data[$company->id]['total_others_sl'] = $vacation_reason_counts->total_others_sl; } return response()->json([ 'data' => array_values($data) ]); } public function generateContributionReport($request) { // Validate the request DB::enableQueryLog(); $request->validate([ 'columns' => 'required|array', 'date_from' => 'required|date', 'date_to' => 'required|date', ]); // Start the query $query = DB::table('payroll_summaries') ->join('employees', 'payroll_summaries.employee_id', '=', 'employees.employee_id'); if ($request->filled('date_from')) { $fromDate = Carbon::parse($request->date_from)->startOfDay(); $toDate = Carbon::parse($request->date_to)->startOfDay(); $query->where('payroll_summaries.payroll_date', '>=', $fromDate)->where('payroll_summaries.payroll_date', '<=', $toDate); } if ($request->company_id) { $query->where('payroll_summaries.company_id', $request->company_id); } // Set the selected columns $selectedColumns = $request->columns; // Prepare transformed columns $transformedColumns = []; // Handle transformed columns dynamically // if ($request->filled('payroll_rate')) { // $query->where('salary_and_wages.payroll_rate', $request->payroll_rate); // } // if ($request->filled('salary_rate')) { // $query->whereBetween('salary_and_wages.salary_rate', [$request->salary_rate['min'], $request->salary_rate['max']]); // } // if ($request->filled('payment_type')) { // $query->where('salary_and_wages.payment_type', $request->payment_type); // } $transformedColumns[] = DB::raw("CONCAT(employees.firstname, ' ', employees.lastname) as fullname"); $transformedColumns[] = "employees.employee_id"; // Remove 'description' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'description'; }); // Remove 'created_at' from selectedColumns if present $selectedColumns = array_filter($selectedColumns, function ($column) { return $column !== 'created_at'; }); // Merge selected columns with transformed columns $finalColumns = array_merge($selectedColumns, $transformedColumns); // Select the final columns $query->select($finalColumns); // Fetch the results $salaries = $query->get(); // dd(DB::getQueryLog()); // Return the response as JSON return response()->json([ 'data' => $salaries ]); } private function generateOvertimeCompanyReport($request){ // dd($request->all()); $departments = DB::table('departments') ->when($request->department_id, fn($query) => $query->where('id', $request->department_id) ) ->get(); $result =[]; foreach($departments as $department){ DB::enableQueryLog(); $data = \App\Models\ProcessedOvertime:: join('payroll_summaries as ps', fn($join) => $join->on( 'ps.employee_id','=','processed_overtimes.employee_id' )) ->join('payrolls','ps.payroll_date','=','payrolls.payroll_date') ->join('employees','processed_overtimes.employee_id','=','employees.employee_id') ->leftJoin('departments','processed_overtimes.department_id','=','departments.id') ->where('processed_overtimes.department_id',$department->id); // whereBetween('date',[$validated['from_date'], $validated['to_date']]) if($request->payroll_date){ $data = $data->whereIn('processed_overtimes.payroll_date',$request->payroll_date); } if($request->selectedCompanyId > 0 ){ $data = $data->where('processed_overtimes.company_id',$request->selectedCompanyId); } if($request->dealership_id > 0){ $data = $data->where('processed_overtimes.dealership_id',$request->dealership_id); } $data = $data->select( DB::raw("CONCAT(employees.firstname,' ',employees.lastname) as name"), // 'processed_overtimes.employee_id', DB::raw('departments.name as departments'), DB::raw('SUM(ps.overtime_total) as total_ot_pay'), DB::raw('SUM(ps.holiday_total) as holiday_total'), DB::raw('SUM(ps.restday_total) as dayOff_pay'), DB::raw('SUM(ps.night_diff_total) as night_diff_pay'), DB::raw('SUM(processed_overtimes.no_of_hours) as total_over_times'), DB::raw('COUNT(DISTINCT processed_overtimes.date) as frequency'), DB::raw('SUM(processed_overtimes.meal_amount) as total_meal'), DB::raw('SUM(processed_overtimes.transportation) as total_transpo'), DB::raw( '( SUM(ps.holiday_total) + SUM(ps.restday_total) + SUM(ps.night_diff_total) + SUM(processed_overtimes.meal_amount) + SUM(processed_overtimes.transportation) ) as row_total' ) ) ->groupBy( // 'employee_id', 'departments.name', DB::raw("CONCAT(employees.firstname, ' ', employees.lastname)") ) ->get(); // dd(DB::getQueryLog()); if($data->isNotEmpty()){ $result[$department->name] = $data; } } return response()->json(['data'=> $result]); } } PKyZRL<7Http/Controllers/API/v1/EmploymentHistoryController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmploymentHistory::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('company', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = EmploymentHistory::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'company' => [ 'required', 'min:2', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = EmploymentHistory::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = EmploymentHistory::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'company' => [ 'required', 'min:2', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmploymentHistory::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ%  1Http/Controllers/API/v1/CivilStatusController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = CivilStatus::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|unique:visa_types,name' ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = CivilStatus::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = CivilStatus::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('visa_types')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = CivilStatus::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ1[W W 3Http/Controllers/API/v1/CutoffSettingController.phpnu[input('keyword', null); if($keyword) $keyword = str_replace(' ','%', $keyword); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', null); $sortType = $request->input('sortType', null); $data = CutoffSetting::with(['company']) ->when($keyword, fn($q) => $q->whereHas('company', fn($qc) => $qc->where('name', 'like', '%'.$keyword.'%'))) ->when($sortBy, fn ($q) => $q->orderBy($sortBy, $sortType)) ->paginate($perPage); return response()->json($data); } /** * Store a newly created resource in storage. */ public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'cut_off' => [ 'required', ], 'day_start' => [ 'required', ], 'day_end' => [ 'required', ], 'salary_day' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], 402); } DB::connection()->beginTransaction(); try { $data = CutoffSetting::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (\Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Display the specified resource. */ public function show(CutoffSetting $cutoffSetting) { // } /** * Show the form for editing the specified resource. */ public function edit(CutoffSetting $cutoffSetting) { // } /** * Update the specified resource in storage. */ public function update(Request $request, CutoffSetting $cutoffSetting) { // } /** * Remove the specified resource from storage. */ public function destroy(CutoffSetting $cutoffSetting) { // } } PKyZHttp/Controllers/API/v1/AttendanceCreationMobileController.phpnu[employee_id)->get(); $request = $this->getApprover($user, $request); if($request->leave_id != 1){ $leave_credits = EmployeeLeaveCredits::where([ 'employee_id' => $user[0]->employee_id, 'enabled' => 1, 'leave_type_id' => $request->leave_id ])->first(); if($request->days > 2 && strlen($request->attachment) == 0){ return response()->json([ 'status' => false, 'message' => 'Medical certificate is required' ]); } $requestDataForGettingOfHours = new Request([ 'employee_id' => $user[0]->employee_id, 'date_from' => $request->date_from, 'date_to' => $request->date_to, ]); $getHours = $this->getHoursForLeaveDependsOnSchedule($requestDataForGettingOfHours); $content = $getHours->getContent(); // dd($content); if($content == "false"){ return response()->json([ 'status' => false, 'message' => 'Schedule is required' ]); } // Get the content of the JsonResponse $hours = $getHours->getContent(); if($request->half_day == 1){ $hours = $hours / 2; } $days = $hours / 8; $without_pay = 0; try { DB::connection()->beginTransaction(); if($leave_credits){ if($days > $leave_credits->remaining && $leave_credits->remaining < 0.5){ $without_pay = 1; } if($days > $leave_credits->remaining && $leave_credits->remaining > 0.49){ return response()->json([ 'status' => false, 'message' => 'Days must not exceed the available credits', 'remaining' => $leave_credits->remaining ]); } else { if($leave_credits->remaining > 0.49){ $remaining_leave = $leave_credits->remaining - $days; $remaining_hours = $leave_credits->hours - $hours; $updateData = [ 'remaining' => $remaining_leave ]; $leave_credits->remaining = $remaining_leave; $leave_credits->hours = $remaining_hours; $leave_credits->save(); } } } else { $without_pay = 1; } DB::connection()->commit(); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } $validator = Validator::make($request->all(), [ 'leave_id' => 'required', 'half_day' => 'required', 'date_from' => 'required|date', 'date_to' => 'required|date', ]); if ($validator->fails()) { return response()->json([ 'status' => false, 'message' => $validator->errors()->first(), 'errors' => $validator->errors() ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::beginTransaction(); try { $attachmentOnLeave = new EmployeeLeaveController(); $attachmentName = $attachmentOnLeave->handleAttachment($request); $status = EmployeeLeave::create([ 'leave_id' => $request->leave_id, 'employee_id' => $user[0]->employee_id, 'company_id' => $user[0]->company_id, 'dealer_id' => $user[0]->dealer_id, 'half_day' => $request->half_day, 'date_from' => $request->date_from, 'date_to' => $request->date_to, 'without_pay' => $without_pay, 'days' => $days, 'hours' => $hours, 'description' => $request->description != 'null' ? $request->description : NULL, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::commit(); $status->load(['employee', 'leave_type']); $emailTo = $attachmentOnLeave->getEmployeeEmailData($request->recommending_id); Notification::send($emailTo, new Leave($status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', ], Response::HTTP_CREATED); } catch (Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } public function overtime_request(Request $request) { $user = Employee::where('employee_id', $request->employee_id)->get(); $request = $this->getApprover($user, $request); $validator = Validator::make($request->all(), [ 'date_from' => "required|date", 'date_to' => "required|date", 'from_time' => "required", 'to_time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $fromTime = new DateTime($request->from_time); $toTime = new DateTime($request->to_time); $interval = $fromTime->diff($toTime); $totalMinutes = $interval->h * 60 + $interval->i; $decimalHours = $totalMinutes / 60; $attachmentOnOvertime = new EmployeeOvertimeController(); $attachmentName = $attachmentOnOvertime->handleAttachment($request); $Status = EmployeeOvertime::create([ 'employee_id' => $user[0]->employee_id, 'company_id' => $user[0]->company_id, 'dealer_id' => $user[0]->dealer_id, 'date_from' => $request->date_from, 'date_to' => $request->date_to, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'hours' => $decimalHours, 'charge_to' => $request->charge_to, 'meal' => $request->meal, 'transportation' => $request->transportation, 'description' => $request->description, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); $email_to = $attachmentOnOvertime->getEmployeeEmailData($request->recommending_id); Notification::send($email_to, new Overtime($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function undertime_request(Request $request) { $user = Employee::where('employee_id', $request->employee_id)->get(); $request = $this->getApprover($user, $request); $validator = Validator::make($request->all(), [ 'date' => "required|date", 'from_time' => "required", 'to_time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } try { $fromTime = new DateTime($request->from_time); $toTime = new DateTime($request->to_time); $interval = $fromTime->diff($toTime); $totalMinutes = $interval->h * 60 + $interval->i; $decimalHours = $totalMinutes / 60; $attachmentOnUndertime = new EmployeeUndertimeController(); $attachmentName = $attachmentOnUndertime->handleAttachment($request); $Status = EmployeeUndertime::create([ 'employee_id' => $user[0]->employee_id, 'company_id' => $user[0]->company_id, 'dealer_id' => $user[0]->dealer_id, 'date' => $request->date, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'hours' => $decimalHours, 'description' => $request->description, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); $email_to = $attachmentOnUndertime->getEmployeeEmailData($request->recommending_id); Notification::send($email_to, new Undertime($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function travel_request(Request $request) { $user = Employee::where('employee_id', $request->employee_id)->get(); $request = $this->getApprover($user, $request); $validator = Validator::make($request->all(), [ 'date_from' => "required", 'date_to' => "required", 'from_time' => "required", 'to_time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $attachmentOnTravel = new EmployeeObController(); $attachmentName = $attachmentOnTravel->handleAttachment($request); $Status = EmployeeOb::create([ 'employee_id' => $user[0]->employee_id, 'company_id' => $user[0]->company_id, 'dealer_id' => $user[0]->dealer_id, 'date_from' => $request->date_from, 'date_to' => $request->date_to, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'destination' => $request->destination, 'description' => $request->description, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); $email_to = $attachmentOnTravel->getEmployeeEmailData($request->recommending_id); Notification::send($email_to, new Travel($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function offset_availment_request(Request $request) { $user = Employee::where('employee_id', $request->employee_id)->get(); $request = $this->getApprover($user, $request); $availableOffset = OffsetRemaining::where('employee_id', '=', $request->employee_id) ->pluck('remaining'); $fromTime = new DateTime($request->from_time); $toTime = new DateTime($request->to_time); if($request->date_from != $request->date_to){ $requestDataForGettingOfHours = new Request([ 'employee_id' => $user[0]->employee_id, 'date_from' => $request->date_from, 'date_to' => $request->date_to, ]); $getHours = $this->getHoursForLeaveDependsOnSchedule($requestDataForGettingOfHours); $decimalHours = $getHours->getContent(); if($decimalHours == "false"){ return response()->json([ 'status' => false, 'message' => 'Schedule is required' ]); } } else { $interval = $fromTime->diff($toTime); $totalMinutes = $interval->h * 60 + $interval->i; $decimalHours = $totalMinutes / 60; $decimalHours = (float) $decimalHours; } if($decimalHours > $availableOffset[0]){ return response()->json([ 'status' => false, 'message' => 'Hours must not exceed the available hours', 'total_request_hours' => $decimalHours, 'hours_remaining' => $availableOffset[0] ]); } // dd($request->all()); $validator = Validator::make($request->all(), [ 'date_from' => "required", 'date_to' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $attachmentOnOffsetAvailment = new EmployeeOffsetController(); $attachmentName = $attachmentOnOffsetAvailment->handleAttachment($request); $Status = EmployeeOffset::create([ 'employee_id' => $user[0]->employee_id, 'company_id' => $user[0]->company_id, 'dealer_id' => $user[0]->dealer_id, 'date_from' => $request->date_from, 'date_to' => $request->date_to, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'hours' => $decimalHours, 'description' => $request->description, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); if(!OffsetRemaining::where('employee_id', '=', $Status->employee_id)->exists()){ OffsetRemaining::create([ 'employee_id' => $Status->employee_id, 'company_id' => $Status->company_id, 'remaining' => $decimalHours ]); } else { $offset = OffsetRemaining::where('employee_id', '=', $Status->employee_id)->first(); if ($offset) { $offset->decrement('remaining', $decimalHours); } } DB::connection()->commit(); // Load the relationships $Status->load(['employee']); $email_to = $attachmentOnOffsetAvailment->getEmployeeEmailData($request->recommending_id); Notification::send($email_to, new OffsetAvailment($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function offset_earning_request(Request $request) { $user = Employee::where('employee_id', $request->employee_id)->get(); $request = $this->getApprover($user, $request); $validator = Validator::make($request->all(), [ 'date' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $attachmentOnOffsetEarning = new EmployeeOffsetEarningController(); $attachmentName = $attachmentOnOffsetEarning->handleAttachment($request); $fromTime = new DateTime($request->from_time); $toTime = new DateTime($request->to_time); $interval = $fromTime->diff($toTime); $totalMinutes = $interval->h * 60 + $interval->i; $decimalHours = $totalMinutes / 60; $Status = EmployeeOffsetEarning::create([ 'employee_id' => $user[0]->employee_id, 'company_id' => $user[0]->company_id, 'dealer_id' => $user[0]->dealer_id, 'date' => $request->date, 'from_time' => $request->from_time, 'to_time' => $request->to_time, 'hours' => $decimalHours, 'description' => $request->description, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); $email_to = $attachmentOnOffsetEarning->getEmployeeEmailData($request->recommending_id); Notification::send($email_to, new OffsetEarning($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } private function getApprover($user, $request) { $mrfApprover = new ApproverController(); if($user[0]->classification_id == 1){ $approver_results = $mrfApprover->getRankAndFileApprover($user[0]->employee_id); } else if ($user[0]->classification_id == 2) { $approver_results = $mrfApprover->getSupervisorApprover($user[0]->employee_id); } else if ($user[0]->classification_id == 3) { $approver_results = $mrfApprover->getManagerApprover($user[0]->employee_id); } $approver_results['endorser'] = array_diff($approver_results['endorser'], ["LOREMIPSUM"]); // Flatten the endorser array $cleanedApproverArray = []; foreach ($approver_results['endorser'] as $item) { // Remove square brackets and quotes, then split the string by commas $ids = explode(',', str_replace(['[', ']', '"'], '', $item)); $cleanedApproverArray = array_merge($cleanedApproverArray, $ids); } // Remove any duplicate IDs $cleanedApproverArray = array_unique($cleanedApproverArray); // Retrieve endorsers using the cleaned array $endorser = Employee::whereIn('employee_id', $cleanedApproverArray)->get(); if($user[0]->classification_id == 1){ foreach($endorser as $approver_result){ if($approver_result->classification_id == 2 || $approver_result->classification_id == 1){ $request['recommending_id'] = $approver_result->employee_id; } if($request['recommending_id'] == ''){ if($approver_result->classification_id == 3){ $request['recommending_id'] = $approver_result->employee_id; } } if($approver_result->classification_id == 3){ $request['approver_id'] = $approver_result->employee_id; } if($request['approver_id'] == ''){ if($approver_result->classification_id == 4){ $request['approver_id'] = $approver_result->employee_id; } } } } if($user[0]->classification_id == 2){ foreach($endorser as $approver_result){ if($approver_result->classification_id == 2 || $approver_result->classification_id == 1){ $request['recommending_id'] = $approver_result->employee_id; } if($request['recommending_id'] == ''){ if($approver_result->classification_id == 3){ $request['recommending_id'] = $approver_result->employee_id; } } if($approver_result->classification_id == 3){ $request['approver_id'] = $approver_result->employee_id; } if($request['approver_id'] == ''){ if($approver_result->classification_id == 4){ $request['approver_id'] = $approver_result->employee_id; } } } } if($user[0]->classification_id == 3){ foreach($endorser as $approver_result){ if($approver_result->classification_id == 3){ $request['recommending_id'] = $approver_result->employee_id; $request['approver_id'] = $approver_result->employee_id; } if($request['approver_id'] == ''){ if($approver_result->classification_id == 4){ $request['recommending_id'] = $approver_result->employee_id; $request['approver_id'] = $approver_result->employee_id; } } } } return $request; } public function getHoursForLeaveDependsOnSchedule(Request $request) { $user = Employee::where('employee_id', $request->employee_id)->get(); $scheduleController = new EmployeeAttendanceController(); $start_date = new DateTime($request->date_from); $end_date = new DateTime($request->date_to); $end_date->modify('+1 day'); $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $hoursTotal = 0; $length = iterator_count($period); $index = 0; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $holiday = $scheduleController->getHoliday($formattedDate); $schedule = $scheduleController->getSchedule($formattedDate, $user[0]->employee_id); if(!$schedule){ return response()->json(false); } $dayOfWeek = date('l', strtotime($formattedDate)); if ($schedule) { $daysArray = explode(',', $schedule->schedule->day_off); // Convert string to array } else { $daysArray = []; // Or any default value } if(!$holiday && !in_array($dayOfWeek, $daysArray)){ $daysCWSArray = explode(',', $schedule->schedule->cws_day); if(in_array($dayOfWeek, $daysCWSArray)){ $fromTime = new DateTime($schedule->schedule['cws_from_time']); $toTime = new DateTime($schedule->schedule['cws_to_time']); } else { $fromTime = new DateTime($schedule->schedule['from_time']); $toTime = new DateTime($schedule->schedule['to_time']); } $interval = $fromTime->diff($toTime); $hours = $interval->h + ($interval->days * 24); // Calculate total hours $hoursMinusOne = $hours - 1; if($request->half_day == 1){ if($index == 0){ $hoursMinusOne = $hoursMinusOne / 2; } } else if ($request->half_day == 2) { if($index == $length - 1){ $hoursMinusOne = $hoursMinusOne / 2; } } $hoursTotal += $hoursMinusOne; } $index++; } return response()->json($hoursTotal); } public function time_adjustment_request(Request $request) { $user = Employee::where('employee_id', $request->employee_id)->get(); $request = $this->getApprover($user, $request); $validator = Validator::make($request->all(), [ 'date' => "required", 'time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $attachmentOnTimeAdjustment = new EmployeeTimeAdjustmentController(); $attachmentName = $attachmentOnTimeAdjustment->handleAttachment($request); $Status = EmployeeTimeAdjustment::create([ 'employee_id' => $user[0]->employee_id, 'company_id' => $user[0]->company_id, 'dealer_id' => $user[0]->dealer_id, 'date' => $request->date, 'in_out' => $request->in_out, 'time' => $request->time, 'description' => $request->description, 'attachment' => $attachmentName, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); $email_to = $attachmentOnTimeAdjustment->getEmployeeEmailData($request->recommending_id); Notification::send($email_to, new TimeAdjustment($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZ@.-Http/Controllers/API/v1/OffenseController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Offense::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = Offense::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'code' => [ 'required', 'min:2', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $attachmentName = $this->handleAttachment($request); $data = Offense::create([ "employee_id" => $request->employee_id, "date_filed" => $request->date_filed, "code" => $request->code, "description" => $request->description, "penalty" => $request->penalty, "nature_of_incident" => $request->nature_of_incident, "case_status" => $request->case_status, "attachment" => $attachmentName ]); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request) { $id = $request->id; $data = Offense::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'code' => [ 'required', 'min:2', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'offenses/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "offenses/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $data->employee_id = $request->employee_id; $data->date_filed = $request->date_filed; $data->code = $request->code; $data->description = $request->description; $data->penalty = $request->penalty; $data->nature_of_incident = $request->nature_of_incident; $data->case_status = $request->case_status; $data->attachment = $attachment_name; $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Offense::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "offenses/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } } PKyZ0Http/Controllers/API/v1/DealershipController.phpnu[input('keyword', null); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', null); $sortType = $request->input('sortType', null); $includes = $request->input('includes', null); $with = ['company','departments']; $data = Dealership::with($with) ->when($keyword, fn ($q) => $q->where(fn($q2) => $q2->where('name', 'like', '%' . str_replace(" ", "%", $keyword) . '%')) ) ->when($sortBy, fn($q) => $q->orderBy($sortBy, $sortType)) ->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'company_id' => 'required', 'code' => [ Rule::unique('dealerships')->whereNull('deleted_at') ], 'name' => [ 'required', 'min:2', Rule::unique('dealerships')->whereNull('deleted_at') ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Dealership::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { // Find the dealership by its ID $data = Dealership::findOrFail($id); /** If not exists return with error message */ if (!$data) { return response()->json(['message' => 'Record not found.'], Response::HTTP_UNPROCESSABLE_ENTITY); } // Validate the incoming request data $validator = Validator::make($request->all(), [ 'code' => [ 'required', 'min:2', Rule::unique('dealerships')->ignore($id)->whereNull('deleted_at') ], 'name' => [ 'required', 'min:2', Rule::unique('dealerships')->ignore($id)->whereNull('deleted_at') ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Dealership::find($id); if(!$data) { return response()->json(['message' => "Record not found!",204]); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],200); } // public function companyList() // { // $company_list = Company::where('enabled',1)->get(['id','code','name']); // return $company_list; // } } PKyZ=,22=Http/Controllers/API/v1/AccumulatedLeaveCreditsController.phpnu[modify('+1 day'); $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $accumulation_settings = LeaveAccumulationSetting::where('enabled', 1)->get(); $employees = Employee::where('enabled', 1)->whereNull('date_resign')->get(); $data = []; $accumulated_leave_credits = []; $year = ''; $month = ''; $employeeAttendance = new EmployeeAttendanceController(); foreach ($employees as $employeeData) { // Initialize an array to store timelogs for this specific employee $daysRendered = 0; foreach ($period as $date) { $year = $date->format('Y'); $month = $date->format('m'); $formattedDate = $date->format('Y-m-d'); // Format the date in 'Y-m-d' // Get the timelog(s) for the employee on the current date $timelogs = $employeeAttendance->getTimelog($formattedDate, $employeeData['time_keeping_id']); // Ensure timelogs is an array or iterable if ($timelogs) { $inLog = false; $processedDates = []; // Array to track processed log dates foreach ($timelogs as $logs) { if (isset($logs->datetimelog) && isset($logs->in_out)) { $logDate = date('Y-m-d', strtotime($logs->datetimelog)); // Check if this logDate has already been processed if (in_array($logDate, $processedDates)) { continue; // Skip to the next iteration if the date is already processed } $inLog = false; if ($logDate === $formattedDate && $logs->in_out === 'I') { $inLog = true; } else { if (EmployeeTimeAdjustment::where('employee_id', $employeeData['employee_id']) ->where('status', 2) ->where('validated', 1) ->where('enabled', 1) ->where('date', $logDate) ->exists()) { $inLog = true; } } if ($inLog) { $employeeSchedule = $this->getSchedule($formattedDate, $employeeData['employee_id']); if ($employeeSchedule) { if ($employeeSchedule->schedule['cws_day']) { if ($employeeSchedule->schedule['cws_day'] != date('l', strtotime($formattedDate))) { $daysRendered += 1.25; } else { $daysRendered++; } } else { $daysRendered++; } } $processedDates[] = $logDate; } } } } } $currentDate = date('Y-m-d'); $dateHired = $employeeData['date_hired']; $newDateHired = new DateTime($dateHired); $newCurrentDate = new DateTime($currentDate); $interval = $newDateHired->diff($newCurrentDate); $yearsInService = $interval->y.'.'.$interval->d; $leaveAccumulation = []; $leaveAccumulationSettings = LeaveAccumulationSetting::where('years_from', '<=', $yearsInService) ->where('years_to', '>=', $yearsInService) ->where('classification_id', $employeeData['classification_id']) ->get(); foreach($leaveAccumulationSettings as $leaveAccumulationSetting){ $leaveCredits = 0; if($daysRendered != 0){ $leaveCreditDays = round($leaveAccumulationSetting->credits_days / 12, 3); if($daysRendered >= 16){ // earn the whole credits for the month $leaveCredits = $leaveCreditDays; } else if ($daysRendered <= 5){ // no credits must be earn $leaveCredits = 0; } else { // half of the credits will be earn $leaveCredits = $leaveCreditDays / 2; } } $updateOrInsertLeaveCredits = [ 'employee_id' => $employeeData['employee_id'], 'company_id' => $employeeData['company_id'], 'dealer_id' => $employeeData['dealer_id'], 'leave_type_id' => $leaveAccumulationSetting->leave_type, 'remaining' => $leaveCredits, 'hours' => round($leaveCredits * 8, 3), 'days_rendered' => $daysRendered, ]; if (EmployeeLeaveCredits::where('employee_id', $employeeData['employee_id']) ->where('leave_type_id', $leaveAccumulationSetting->leave_type) ->exists()) { // Fetch the existing leave credits record $leaveCreditsToUpdate = EmployeeLeaveCredits::where('employee_id', $employeeData['employee_id']) ->where('leave_type_id', $leaveAccumulationSetting->leave_type) ->first(); try { DB::connection()->beginTransaction(); // Increment the leave credits and hours $leaveCreditsToUpdate->remaining += $leaveCredits; $leaveCreditsToUpdate->hours += round($leaveCredits * 8, 3); // Save the updated record $leaveCreditsToUpdate->save(); DB::connection()->commit(); // Commit the transaction } catch (Throwable $e) { DB::rollBack(); // Rollback on failure return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } else { EmployeeLeaveCredits::create($updateOrInsertLeaveCredits); } $accumulated_leave_credits[] = [ 'employee_id' => $employeeData['employee_id'], 'company_id' => $employeeData['company_id'], 'dealer_id' => $employeeData['dealer_id'], 'year' => $year, 'month' => $month, 'leave_id' => $leaveAccumulationSetting->leave_type, 'accumulated_days' => $leaveCredits, 'accumulated_hours' => round($leaveCredits * 8, 3), 'days_rendered' => $daysRendered, 'max_credit' => $leaveAccumulationSetting->credits_days, 'created_at' => date('Y-m-d H:i:s'), ]; } } DB::beginTransaction(); try { // Use insert() to insert multiple records at once AccumulatedLeaveCredits::insert($accumulated_leave_credits); foreach($accumulated_leave_credits as $accumulated_leave_credit){ $leaveCredits = EmployeeLeaveCredits::where('leave_type_id', $accumulated_leave_credit['leave_id'])->where('employee_id', $accumulated_leave_credit['employee_id'])->exists(); $credits_from = 0; $credits_to = 0; if($leaveCredits) { $leaveCredits = EmployeeLeaveCredits::where('leave_type_id', $accumulated_leave_credit['leave_id'])->where('employee_id', $accumulated_leave_credit['employee_id'])->first(); $credits_from = $leaveCredits->remaining; // echo 'asdsadsaadasdasdd'; } $credits_to = $accumulated_leave_credit['accumulated_days']; $leaveName = LeaveType::where('id', $accumulated_leave_credit['leave_id'])->pluck('name')->first(); $ledger = [ 'employee_id' => $accumulated_leave_credit['employee_id'], 'company_id' => $accumulated_leave_credit['company_id'], 'dealer_id' => $accumulated_leave_credit['dealer_id'], 'leave_id' => '0', 'date_from' => date('Y-m-d'), 'date_to' => date('Y-m-d'), 'credits_from' => $credits_from == 0 ? 0 : abs($credits_from - $credits_to), 'credits_to' => abs($credits_from), 'credit' => 0, 'hours' => 0, 'leave_type' => $accumulated_leave_credit['leave_id'], 'leave_name' => $leaveName . ' - Earned', 'date_applied' => date('Y-m-d'), ]; LeaveLedger::create($ledger); } DB::commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $accumulated_leave_credits ], Response::HTTP_CREATED); } catch (Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } } public function getSchedule($date, $employee_id) { $employeeSchedule = EmployeeSchedule::with('schedule') ->where('date_from', '<=', $date) ->where('date_to', '>=', $date) ->where('effectivity_date', '<=', $date) ->where('employee_id', '=', $employee_id) ->whereHas('schedule') ->first(); if($employeeSchedule == null){ $employeeSchedule = EmployeeSchedule::with('schedule') ->where('effectivity_date', '<=', $date) ->where('employee_id', '=', $employee_id) ->orderBy('effectivity_date', 'desc') ->whereHas('schedule') ->first(); } return $employeeSchedule; } public function store(Request $request) { $data = AccumulatedLeaveCredits::create($request->all()); } } PKyZA؋,,2Http/Controllers/API/v1/EmployeeLoanController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeLoan::with( 'employee:id,employee_id,firstname,lastname', 'loan:id,name' )->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = Loan::where('employee_loan_id', '=', $id)->get(); return response()->json($data); } public function getRecordByEmployee(Request $request) { $employee = Auth::user(); // $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeLoan::with( 'employee:id,employee_id,firstname,lastname', 'loan:id,name' )->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('employee_id', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->where('employee_id', $employee->employee_id); $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { $validator = Validator::make($request->all(), [ 'employee_id' => "required", ]); if ($validator->fails()) { return $this->validationErrorResponse($validator); } $user = Employee::where('employee_id', $request->employee_id)->first(); DB::beginTransaction(); try { $attachment_name = $this->handleFileUpload($request->file('attachment'), 'employee-loans'); $status = EmployeeLoan::create([ 'employee_id' => $request->employee_id, 'company_id' => $user->company_id, 'dealer_id' => $user->dealer_id, 'loan_id' => $request->loan_id, 'amount' => $request->amount, 'frequency' => $request->frequency, 'term' => $request->term, 'monthly' => $request->monthly, 'effectivity_date' => $request->effectivity_date, 'attachment' => $attachment_name, 'balance' => $request->balance, 'remarks' => $request->remarks, ]); DB::commit(); for($term = 1; $term <= $request->term; $term++) { $addMonthly = Loan::create([ 'employee_loan_id' => $status->id, 'amount' => $status->monthly, ]); } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $status ], 201); } catch (Exception $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'An error occurred!', 'error' => $e->getMessage() ], 500); } } public function update(Request $request) { $id = $request->id; $data = EmployeeLoan::where('id', $id)->first(); // dd($request->all()); $validator = Validator::make($request->all(), [ 'employee_id' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-loans/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-loans/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $data->employee_id = $request->employee_id; $data->loan_id = $request->loan_id; $data->amount = $request->amount; $data->frequency = $request->frequency; $data->term = $request->term; $data->monthly = $request->monthly; $data->effectivity_date = $request->effectivity_date; $data->attachment = $attachment_name; $data->balance = $request->balance; $data->remarks = $request->remarks; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } private function validationErrorResponse($validator) { return response()->json([ 'status' => false, 'message' => 'Validation failed!', 'error' => $validator->errors() ], 422); } private function handleFileUpload($file, $path) { if ($file) { $attachment_name = time() . '_' . $file->getClientOriginalName(); $storagePath = "$path/$attachment_name"; Storage::disk('local')->put($storagePath, file_get_contents($file)); return $attachment_name; } return ''; } private function prepareMrfData($request, $attachment_name) { return [ 'company_id' => $request->company_id, 'nature_of_request' => $request->nature_of_request, 'classification' => $request->classification, 'job_title' => $request->job_title, 'salary_grade' => $request->salary_grade, 'salary' => $request->salary, 'replacement_position_number' => $request->replacement_position_number, 'employee_name_to_be_replaced1' => $request->employee_name_to_be_replaced1, 'nature_of_seperation1' => $request->nature_of_seperation1, 'date_of_seperation1' => $request->date_of_seperation1, 'new_position_number' => $request->new_position_number, 'date_needed' => $request->date_needed, 'employment_status' => $request->employment_status, 'supporting_document' => $attachment_name, 'document_type' => $request->document_type, 'working_position_title' => $request->working_position_title, 'inclusive_period' => $request->inclusive_period, 'justification' => $request->justification, 'job_design' => $request->job_design, 'requested_by' => $request->requested_by, 'recommended_by' => $request->recommended_by, 'endorsed_by' => $request->endorsed_by, 'approved_by' => $request->approved_by, 'status' => $request->status ]; } // private function sendNotification($request, $status) // { // $email_to = match ($request->status) { // 2 => $this->getEmployeeEmailData($request->approved_by), // 1 => $this->getEmployeeEmailData($request->endorsed_by), // default => $this->getEmployeeEmailData($request->recommended_by), // }; // if ($email_to) { // Notification::send($email_to, new MrfNotification($status)); // } // } public function activation(Request $request, int $id) { $data = EmployeeLoan::find($id); DB::connection()->beginTransaction(); try { $loan_paused_history = LoanPausedHistory::create([ 'employee_loan_id' => $data->id, 'date_pause' => $request->formType == 'pause' ? date('Y-m-d H:i:s') : null, 'date_resume' => $request->formType != 'pause' ? date('Y-m-d H:i:s') : null ]); DB::connection()->commit(); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } try { $data->paused = $request->formType == 'pause' ? 1 : 0; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeLoan::find($id); DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ--<Http/Controllers/API/v1/EmployeeTimeAdjustmentController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = EmployeeTimeAdjustment::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'in_out', 'time', 'attachment', 'description', 'status', 'validated_at', 'validated_by', 'validated', 'deferred_reason', 'recommending_id', 'allow_higher_approval', 'created_at', 'approver_id', 'recommended_at', 'approved_at' ) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($employee->roles[0]['group_id'] != 1){ $data->where(['employee_id' => $employee->employee_id]); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function getTimeAdjustmentList(Request $request) { // $employee = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $dealership_id = $request->input('dealership', null); $data = EmployeeTimeAdjustment::with([ 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'employee'=> fn($employee) => $employee->select('employee_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'date', 'in_out', 'time', 'attachment', 'description', 'status', 'validated_by', 'validated_at', 'validated', 'deferred_reason', 'recommending_id', 'allow_higher_approval', 'created_at', 'approver_id', 'recommended_at', 'approved_at' ) ->where('status',2) ->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); }); if($dealership_id) $data = $data->where('dealer_id', $dealership_id); $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // dd(($request->transportation) ? 1 : 0); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date' => "required|date", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $attachmentName = $this->handleAttachment($request); $Status = EmployeeTimeAdjustment::create([ 'employee_id' => $user->employee_id, 'company_id' => $user->employees->company_id, 'dealer_id' => $user->employees->dealer_id, 'date' => $request->date, 'in_out' => $request->in_out, 'time' => $request->time, 'description' => $request->description, 'attachment' => $attachmentName, 'allow_higher_approval' => $allow_higher_approval, 'recommending_id' => $request->recommending_id, 'approver_id' => $request->approver_id, 'status' => 0, ]); DB::connection()->commit(); // Load the relationships $Status->load(['employee']); // $email_to = $this->getEmployeeEmailData($request->recommending_id); // Notification::send($email_to, new TimeAdjustment($Status)); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function handleAttachment(Request $request) { if ($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachmentName = time() . '_' . $image->getClientOriginalName(); $path = "employee-time-adjustment/" . $attachmentName; if (Storage::disk('local')->put($path, file_get_contents($image))) { return $attachmentName; } throw new Exception('Unable to process attachment.'); } return ''; } public function update(Request $request) { $id = $request->id; $data = EmployeeTimeAdjustment::where('id', $id)->first(); $user = Auth::user(); $validator = Validator::make($request->all(), [ 'date' => "required|date", 'time' => "required", ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } $attachment_name = $request->attachment; if($data->attachment != $request->attachment) { $attachment_file_path = 'employee-time-adjustment/' . $data->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "employee-time-adjustment/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } } DB::connection()->beginTransaction(); try { $allow_higher_approval = ($request->allow_higher_approval && $request->allow_higher_approval !== 'null' && $request->allow_higher_approval !== 'false' && trim($request->allow_higher_approval) !== '' ? 1 : 0); $data->employee_id = $user->employee_id; $data->date = $request->date; $data->in_out = $request->in_out; $data->time = $request->time == null ? $request->time : NULL ; $data->description = $request->description == null ? $request->description : NULL ; $data->attachment = $attachment_name; $data->recommending_id = $request->recommending_id; $data->allow_higher_approval = $allow_higher_approval; $data->approver_id = $request->approver_id; $data->save(); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = EmployeeTimeAdjustment::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function removeAttachment(Request $request) { $id = $request->id; $attachment = $request->attachment; $data = EmployeeTimeAdjustment::where('id', $id)->first(); $data->attachment = NULL; $data->save(); DB::connection()->commit(); $attachment_file_path = 'employee-time-adjustment/' . $request->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $data ],201); } public function getEmployeeEmailData($id){ return User::where('employee_id', '=', $id)->first(); } } PKyZP-e-Http/Controllers/API/v1/HolidayController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Holiday::select( "holidays.id", "holidays.name", "holidays.from_date", "holidays.to_date", "holidays.description", "holidays.recurring", DB::raw("ht.id as holiday_type"), DB::raw("c.id as company_id"), DB::raw("d.id as dealership_id"), DB::raw("ht.name as holiday_type_name"), DB::raw("c.name as company_name"), DB::raw("d.name as dealership_name") ) ->join('holiday_types as ht','holidays.holiday_type', '=', 'ht.id') ->join('companies as c','holidays.company_id', '=', 'c.id', 'left') ->join('dealerships as d','holidays.dealership_id', '=', 'd.id', 'left') ->where(function ($query) use ($keyword){ $query->where('holidays.name', 'like', '%' . $keyword . '%') ->orWhere('ht.name', 'like', '%' . $keyword . '%') ->orWhere('c.name', 'like', '%' . $keyword . '%') ->orWhere('d.name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'holiday_type' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('holidays')->whereNull('deleted_at') ], 'from_date' => [ 'required', ], 'to_date' => [ 'required', ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Holiday::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Holiday::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'holiday_type' => [ 'required', ], 'name' => [ 'required', 'min:2', Rule::unique('holidays')->ignore($id)->whereNull('deleted_at') ], 'from_date' => [ 'required', ], 'to_date' => [ 'required', ], ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Holiday::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZi7ss.Http/Controllers/API/v1/EmployeeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $keyword = str_replace(" ", "%", $keyword); $dealership = $request->input('dealership', ''); // relationships to load $employeeRelations = [ 'section:id,code,name', 'position:id,code,name', 'company:id,code,name', 'classification:id,name', 'dealership:id,code,name', 'salary_grade:id,name', 'employment_type:id,code,name', 'group:id,code,name', 'division:id,code,name', 'department:id,code,name', 'office:id,code,name', 'locality:id,code,province,locality', 'chargeTo:id,code,name', 'salary_and_wages:id,salary_rate,position_exclusive_date,salary_effectivity_date,payroll_rate,payment_type,payroll_mode,bank_account,tax_exemption,fixed_pagibig_contribution,pagibig_ee,pagibig_er,charge_salary,cola,shields' ]; if ($user->roles[0]->group_id == 1 || $user->roles[0]->group_id == 2) { $data = Employee::with($employeeRelations) ->select( DB::raw("CONCAT(firstname, ' ', lastname) as full_name"), 'employees.id', 'employees.employee_id', 'employees.asa_user_id', 'employees.time_keeping_id', 'employees.firstname', 'employees.lastname', 'employees.middlename', 'employees.date_hired', 'employees.date_resign', 'employees.email', 'employees.mobile', 'employees.position_id', 'employees.company_id', 'employees.classification_id', 'employees.dealer_id', 'employees.job_grade_id', 'employees.office_id', 'employees.employment_status_id', 'employees.group_id', 'employees.division_id', 'employees.department_id', 'employees.section_id', 'employees.office_id', 'employees.flexible', 'employees.work_location_id', 'employees.confidential' ) ->where('employees.enabled', '=', '1') ->where('employees.employee_id', '!=', '') ->whereNull('employees.date_resign') ->where(function ($query) use ($keyword) { $query->where('employee_id', 'like', '%' . $keyword . '%') ->orWhere('firstname', 'like', '%' . $keyword . '%') ->orWhere('lastname', 'like', '%' . $keyword . '%'); }); } else { $approverHierarchy = Approver::where('approvers', 'like', '%"'.$user->employee_id.'"%')->get() ->groupBy('type')->map(fn($group) => $group->pluck('type_id')->toArray()); $data = Employee::with($employeeRelations) ->select( DB::raw("CONCAT(firstname, ' ', lastname) as full_name"), 'employees.id', 'employees.employee_id', 'employees.asa_user_id', 'employees.time_keeping_id', 'employees.firstname', 'employees.lastname', 'employees.middlename', 'employees.date_hired', 'employees.date_resign', 'employees.email', 'employees.mobile', 'employees.position_id', 'employees.company_id', 'employees.classification_id', 'employees.dealer_id', 'employees.job_grade_id', 'employees.office_id', 'employees.employment_status_id', 'employees.group_id', 'employees.division_id', 'employees.department_id', 'employees.section_id', 'employees.office_id', 'employees.flexible', 'employees.work_location_id', 'employees.confidential' ) ->where('employees.dealer_id', $dealership) // ->where('employees.employee_id', '!=', $user->employee_id) ->where('employees.enabled', '=', '1') ->whereNull('employees.date_resign') ->where(function ($query) use ($keyword) { $query->where('employee_id', 'like', '%' . $keyword . '%') ->orWhere('firstname', 'like', '%' . $keyword . '%') ->orWhere('lastname', 'like', '%' . $keyword . '%'); }) ->where(function ($query) use ($approverHierarchy) { $firstIteration = true; foreach ($approverHierarchy as $type => $ids) { $column = $type === 'dealership' ? 'dealer_id' : $type . '_id'; if ($firstIteration) { $query->whereIn('employees.' . $column, $ids); $firstIteration = false; } else { $query->orWhereIn('employees.' . $column, $ids); } } }); } $sortMappings = [ 'company.name' => ['table' => 'companies', 'column' => 'name', 'key' => 'company_id'], 'dealership.name' => ['table' => 'dealerships', 'column' => 'name', 'key' => 'dealer_id'], 'position.name' => ['table' => 'job_titles', 'column' => 'name', 'key' => 'position_id'], ]; if (array_key_exists($sortBy, $sortMappings)) { $mapping = $sortMappings[$sortBy]; $data = $data->join($mapping['table'], 'employees.' . $mapping['key'], '=', $mapping['table'] . '.id') ->orderBy($mapping['table'] . '.' . $mapping['column'], $sortType); } elseif (!empty($sortBy)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function employeeList(Request $request) { $user = Auth::user(); $keyword = $request->input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $keyword = str_replace(" ", "%", $keyword); $dealership = $request->input('dealership', ''); $isResigned = $request->input('is_resigned', ''); // dd($request->all()); // relationships to load $employeeRelations = [ 'section:id,code,name', 'position:id,code,name', 'company:id,code,name', 'classification:id,name', 'dealership:id,code,name', 'salary_grade:id,name', 'employment_type:id,code,name', 'group:id,code,name', 'division:id,code,name', 'department:id,code,name', 'office:id,code,name', 'locality:id,code,province,locality', 'chargeTo:id,code,name', 'salary_and_wages:id,salary_rate,position_exclusive_date,salary_effectivity_date,payroll_rate,payment_type,payroll_mode,bank_account,tax_exemption,fixed_pagibig_contribution,pagibig_ee,pagibig_er,charge_salary,cola,shields' ]; if ($user->roles[0]->group_id == 1) { $data = Employee::with($employeeRelations) ->select( DB::raw("CONCAT(lastname, ' ', firstname) as full_name"), 'employees.id', 'employees.employee_id', 'employees.asa_user_id', 'employees.time_keeping_id', 'employees.firstname', 'employees.lastname', 'employees.middlename', 'employees.date_hired', 'employees.date_resign', 'employees.email', 'employees.mobile', 'employees.position_id', 'employees.company_id', 'employees.classification_id', 'employees.dealer_id', 'employees.job_grade_id', 'employees.office_id', 'employees.employment_status_id', 'employees.group_id', 'employees.division_id', 'employees.department_id', 'employees.section_id', 'employees.office_id', 'employees.work_location_id', 'employees.flexible', 'employees.confidential' ) ->where('employees.enabled', '=', '1') ->where('employees.employee_id', '!=', '') ->when(!$isResigned, function ($query) { $query->whereNull('employees.date_resign'); }) ->where(function ($query) use ($keyword) { $query->where('employee_id', 'like', '%' . $keyword . '%') ->orWhere('firstname', 'like', '%' . $keyword . '%') ->orWhere('lastname', 'like', '%' . $keyword . '%'); }); } else { $data = Employee::with($employeeRelations) ->select( DB::raw("CONCAT(lastname, ', ', firstname) as full_name"), 'employees.id', 'employees.employee_id', 'employees.asa_user_id', 'employees.time_keeping_id', 'employees.firstname', 'employees.lastname', 'employees.middlename', 'employees.date_hired', 'employees.date_resign', 'employees.email', 'employees.mobile', 'employees.position_id', 'employees.company_id', 'employees.classification_id', 'employees.dealer_id', 'employees.job_grade_id', 'employees.office_id', 'employees.employment_status_id', 'employees.group_id', 'employees.division_id', 'employees.department_id', 'employees.section_id', 'employees.office_id', 'employees.work_location_id', 'employees.flexible', 'employees.confidential' ) ->where('employees.enabled', '=', '1') ->where('employees.employee_id', '!=', '') ->when(!$isResigned, function ($query) { $query->whereNull('employees.date_resign'); }) ->where(function ($query) use ($keyword, $dealership) { $query->where('employee_id', 'like', '%' . $keyword . '%') ->orWhere('firstname', 'like', '%' . $keyword . '%') ->orWhere('lastname', 'like', '%' . $keyword . '%'); }) ->where('employees.dealer_id', $dealership); // ->where('employees.employee_id', '!=', $user->employee_id); } $sortMappings = [ 'company.name' => ['table' => 'companies', 'column' => 'name', 'key' => 'company_id'], 'dealership.name' => ['table' => 'dealerships', 'column' => 'name', 'key' => 'dealer_id'], 'position.name' => ['table' => 'job_titles', 'column' => 'name', 'key' => 'position_id'], ]; if (array_key_exists($sortBy, $sortMappings)) { $mapping = $sortMappings[$sortBy]; $data = $data->join($mapping['table'], 'employees.' . $mapping['key'], '=', $mapping['table'] . '.id') ->orderBy($mapping['table'] . '.' . $mapping['column'], $sortType); } elseif (!empty($sortBy)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->get(); return response()->json($data); } public function store(Request $request) { DB::connection()->beginTransaction(); try { $requestData = $request->all()[0]; // Extract first item from array // Validate incoming data $validated = Validator::make($requestData, [ 'basic.employee_id' => 'required|unique:users,employee_id', 'basic.firstname' => 'required|string|max:255', 'basic.lastname' => 'required|string|max:255', 'basic.email' => 'required|email|unique:users,email', 'salary.salary_rate' => 'required|numeric', 'basic.classification_id' => 'required|integer', ])->validate(); // Create User $user = User::create([ 'employee_id' => $requestData['basic']['employee_id'], 'first_name' => $requestData['basic']['firstname'], 'last_name' => $requestData['basic']['lastname'], 'name' => $requestData['basic']['firstname'] . ' ' . $requestData['basic']['lastname'], 'username' => strtolower(trim($requestData['basic']['firstname'])) . strtolower(trim($requestData['basic']['lastname'])), 'email' => $requestData['basic']['email'], 'password' => Hash::make('defaultpassword123'), ]); if (!$user) { throw new Exception('Failed to create user.'); } // Assign Role $userRole = UserRole::create([ 'role_id' => match ($requestData['basic']['classification_id']) { 1 => '12', 2 => '14', 3 => '15', default => '15', }, 'user_id' => $user->id, ]); // Create Salary Record $salary = SalaryAndWages::create([ 'employee_id' => $requestData['basic']['employee_id'], 'salary_rate' => $requestData['salary']['salary_rate'], ]); // Add `date_hired` if missing $requestData['basic']['date_hired'] = $requestData['basic']['date_hired'] ?? date('Y-m-d'); // Create Employee Record $employee = Employee::create($requestData['basic']); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ], 201); } catch (Exception $e) { DB::connection()->rollback(); Log::error($e->getMessage()); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'error' => $e->getMessage(), ], 422); } } public function getAllEmployees(Request $request){ $company_id = $request->input('company_id', null); $dealership_id = $request->input('dealership_id', null); $department_id = $request->input('department_id', null); $data = Employee::where('enabled', '=', '1') ->whereNull('date_resign'); if($company_id) $data = $data->where('company_id', '=', $company_id); if($dealership_id) $data = $data->where('dealer_id', '=', $dealership_id); $data = $data->orderBy('lastname')->orderBy('firstname')->orderBy('middlename'); $data = $data->get(); return response()->json($data); } public function getEmployeesBasedOnDepartment(Request $request) { $data = Employee::where('enabled', '=', '1')->whereNull('date_resign')->whereIn('department_id', $request); $data = $data->get(); return response()->json($data); } /** * Display the specified resource. */ public function show(string $id) { $data = Employee::with([ 'section' => fn($section) => $section->select('sections.id', 'sections.code', 'sections.name') , 'position' => fn($position) => $position->select('job_titles.id', 'job_titles.code', 'job_titles.name') , 'company' => fn($company) => $company->select('companies.id', 'companies.code', 'companies.name') , 'classification' => fn($classification) => $classification->select('job_classifications.id', 'job_classifications.name') , 'dealership' => fn($dealership) => $dealership->select('dealerships.id', 'dealerships.code', 'dealerships.name') , 'salary_grade' => fn($salary_grade) => $salary_grade->select('salary_grades.id', 'salary_grades.name') , 'employment_type' => fn($employment_type) => $employment_type->select('employment_types.id', 'employment_types.code', 'employment_types.name') , 'group' => fn($group) => $group->select('groups.id', 'groups.code', 'groups.name') , 'division' => fn($division) => $division->select('divisions.id', 'divisions.code', 'divisions.name') , 'department' => fn($department) => $department->select('departments.id', 'departments.code', 'departments.name') , 'office' => fn($office) => $office->select('offices.id', 'offices.code', 'offices.name') , 'locality' => fn($locality) => $locality->select('localities.id', 'localities.code', 'localities.province', 'localities.locality') , 'salary_and_wages' => fn($salary_and_wages) => $salary_and_wages->select('salary_and_wages.id', 'salary_and_wages.employee_id', 'salary_and_wages.salary_rate','salary_and_wages.position_exclusive_date', 'salary_and_wages.salary_effectivity_date', 'salary_and_wages.payroll_rate', 'salary_and_wages.payroll_rate', 'salary_and_wages.payment_type', 'salary_and_wages.payroll_mode', 'salary_and_wages.bank_account', 'salary_and_wages.tax_exemption', 'salary_and_wages.fixed_pagibig_contribution', 'salary_and_wages.pagibig_ee', 'salary_and_wages.pagibig_er', 'salary_and_wages.charge_salary', 'salary_and_wages.cola', 'salary_and_wages.shields', 'salary_and_wages.tax_application') , 'employee_profile' => fn($employee_profile) => $employee_profile->select('employee_profile_pictures.id','employee_profile_pictures.employee_id','employee_profile_pictures.attachment') ]) ->select(DB::raw("CONCAT(firstname, ' ', lastname) as full_name"), 'employees.id', 'employees.employee_id', 'employees.asa_user_id', 'employees.time_keeping_id', 'employees.firstname', 'employees.lastname', 'employees.middlename', 'employees.date_hired', 'employees.date_resign', 'employees.email', 'employees.mobile', 'employees.position_id', 'employees.company_id', 'employees.classification_id', 'employees.dealer_id', 'employees.job_grade_id', 'employees.office_id', 'employees.employment_status_id', 'employees.group_id', 'employees.division_id', 'employees.department_id', 'employees.section_id', 'employees.office_id', 'employees.work_location_id', 'employees.flexible', 'employees.confidential') ->where('employees.employee_id', '=', $id) // ->where('employees.date_resign', NULL) ->first(); if($data->employee_profile) $data->employee_profile['attachment'] = asset('storage/employee-profile/' . $data->employee_profile['attachment']); // dd($data); return response()->json($data); } /** * Update the specified resource in storage. */ public function update(Request $request, int $id) { $request['position'] = ''; // dd($request->all()); $data = Employee::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'firstname' => [ 'required', 'min:1', ], 'lastname' => [ 'required', 'min:1', ], 'employee_id' => [ 'required', 'min:1', Rule::unique('employees')->ignore($id)->whereNull('deleted_at') ], 'time_keeping_id' => [ 'required', 'min:1', Rule::unique('employees')->ignore($id)->whereNull('deleted_at') ], 'company_id' => [ 'required', 'min:1', ] ]); // if($request->date_resign != null){ // dd($request->all()); // } /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Remove the specified resource from storage. */ public function destroy(string $id) { // } public function getHrManager(string $company_id) { $data = Employee::where([ 'company_id' => $company_id, 'position_id' => 540, 'enabled' => 1 ]) ->select(DB::raw("CONCAT(firstname, ' ', lastname) as full_name"), 'employee_id') ->first(); if (!$data) { $data = [ 'full_name' => 'Margarita Adeva', 'employee_id' => '60298' ]; } return response()->json($data); } public function imageUpload(Request $request) { $employee_id = $request->employee_id; $data = Employee::where('employee_id', $employee_id)->first(); $attachment_name = $request->attachment; if($request->hasFile('attachment')) { $image = $request->file('attachment'); $attachment_name = time().'_'.$image->getClientOriginalName(); $path = "/public/employee-profile/".$attachment_name; if(!Storage::disk('local')->put($path, file_get_contents($image))) { return response()->json(['message'=> "Failed to upload attachment"],304); } } else { $attachment_name = null; } DB::connection()->beginTransaction(); // dd($id); $employee_profile = EmployeeProfilePicture::where('employee_id', $data->employee_id)->first(); if(!empty($employee_profile)){ $attachment_file_path = '/public/employee-profile/' . $employee_profile->attachment; if(Storage::exists($attachment_file_path)) { Storage::delete($attachment_file_path); } try { $employee_profile->employee_id = $data->employee_id; $employee_profile->attachment = $attachment_name; $employee_profile->save(); // dd($employee_profile); DB::commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $employee_profile ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } else { try { $status = EmployeeProfilePicture::create([ 'employee_id' => $data->employee_id, 'attachment' => $attachment_name, ]); DB::commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $employee_profile ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } public function countDuplicatedEmail(Request $request){ $count = DB::table('employees') ->where('email', 'like', '%'.$request->email.'%') ->count(); return $count; } public function getCurrentScheduleProfile(Request $request){ $schedule = new EmployeeAttendanceController(); $scheduleData = $schedule->getSchedule(date('Y-m-d'), $request->employee_id); // dd($scheduleData); return response()->json($scheduleData); } public function getCurrentSchedule(Request $request){ $schedule = new EmployeeAttendanceController(); $time_keeping_id = Employee::where('employee_id', $request->employee_id)->pluck('time_keeping_id'); $scheduleData = $schedule->getSchedule($request->date_from, $request->employee_id); $timelogs = $schedule->getTimelog($request->date_from, $time_keeping_id); $timeIn = ""; $timeOut = ""; foreach($timelogs as $timelog){ if($timelog->in_out == "I"){ $timeIn = date('H:i:s', strtotime($timelog->datetimelog)); } if($timelog->in_out == "O"){ $timeOut = date('H:i:s', strtotime($timelog->datetimelog)); } } $timelogData = [ 'time_in' => $timeIn, 'time_out' => $timeOut ]; $scheduleDataFinal = [ 'from_time' => $scheduleData->schedule->from_time, 'to_time' => $scheduleData->schedule->to_time, 'day_off' => $scheduleData->schedule->day_off, 'wfh' => $scheduleData->schedule->wfh, 'cws_from_time' => $scheduleData->schedule->cws_from_time, 'cws_to_time' => $scheduleData->schedule->cws_to_time, 'cws_day' => $scheduleData->schedule->cws_day_off ]; return response()->json([ 'timelogs' => $timelogData, 'schedule' => $scheduleDataFinal ]); } public function passwordChecker(Request $request){ $password = $request->password; $user = Auth::user(); if(Hash::check($password, $user->password)){ return response()->json([ 'status' => true, 'message' => 'Password matched!' ]); } else { return response()->json([ 'status' => false, 'message' => 'Password does not match!' ]); } } public function updatePassword(Request $request) { $params = $request->input('params'); $validated = Validator::make($params, [ 'employee_id' => 'required', 'currentPassword' => 'required|string', 'newPassword' => 'required|string', 'confirmPassword' => 'required|string|same:newPassword', ])->validate(); // Use Eloquent to retrieve the user $user = \App\Models\User::whereHas('employees', function ($query) use ($validated) { $query->where('employee_id', $validated['employee_id']) ->whereNull('date_resign'); })->first(); if (!$user) { return response()->json([ 'status' => false, 'message' => 'User not found or no active employee linked.', ], 404); } // Update the password $user->password = Hash::make($validated['newPassword']); $user->save(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success' ],201); } } PKyZLz  6Http/Controllers/API/v1/PersonalInterestController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = PersonalInterest::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('description', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = PersonalInterest::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = PersonalInterest::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = PersonalInterest::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'description' => [ 'required', 'min:2', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = PersonalInterest::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ3Http/Controllers/API/v1/RoleMigrationController.phpnu[id; try { DB::beginTransaction(); // Fetch roles, permissions, and company access $roles = \App\Models\Role::where('id', $id)->get(); $rolesPermissions = DB::table('role_permissions')->where('role_id', $id)->get(); $roleCompanyAccess = DB::table('role_company_access')->where('role_id', $id)->get(); if ($roles->isEmpty() || $rolesPermissions->isEmpty() || $roleCompanyAccess->isEmpty()) { return response()->json([ 'message' => 'No roles, permissions, or company access found for the specified role ID.', 'status' => 'error', ], 404); } $insertDataPermissions = []; $insertDataCompanyAccess = []; foreach ($roles as $role) { $dealers = \App\Models\Dealership::whereNotIn('id', [35])->get(); foreach ($dealers as $dealer) { $roleName = match ($id) { 79 => 'CRM ' . trim($dealer->code) . ' - Manager', 85 => 'CRM ' . trim($dealer->code) . ' - SUPERVISOR', 84 => 'CRM ' . trim($dealer->code) . ' - ASSISTANT', default => 'CRM ' . trim($dealer->code), }; $roleInsert = \App\Models\Role::create([ 'name' => $roleName, 'group_id' => $role->group_id, 'created_at' => now(), 'updated_at' => now(), ]); foreach ($rolesPermissions as $rolePermission) { $insertDataPermissions[] = [ 'role_id' => $roleInsert->id, 'company_id' => $dealer->company_id, 'dealership_id' => $dealer->id, 'module_id' => $rolePermission->module_id, 'permission_id' => $rolePermission->permission_id, 'created_at' => now(), 'updated_at' => now(), ]; } foreach ($roleCompanyAccess as $roleComAccess) { $insertDataCompanyAccess[] = [ 'role_id' => $roleInsert->id, 'company_id' => $dealer->company_id, 'dealership_id' => $dealer->id, 'created_at' => now(), 'updated_at' => now(), ]; } } } // Chunk and insert permissions collect($insertDataPermissions)->chunk(500)->each(function ($chunk) { DB::table('role_permissions')->insert($chunk->toArray()); }); // Chunk and insert company access collect($insertDataCompanyAccess)->chunk(500)->each(function ($chunk) { DB::table('role_company_access')->insert($chunk->toArray()); }); DB::commit(); return response()->json([ 'message' => 'Record successfully added!', 'status' => 'success', ], 201); } catch (Exception $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'error' => $e->getMessage(), ], 500); } } // public function rolePermissions(Request $request) // { // $id = $request->id; // try { // DB::beginTransaction(); // // Fetch all role permissions for the given role ID // $rolesPermissions = DB::table('role_permissions')->where('role_id', $id)->get(); // if ($rolesPermissions->isEmpty()) { // return response()->json([ // 'message' => 'No permissions found for the specified role.', // 'status' => 'error', // ], 404); // } // $dealers = \App\Models\Dealership::whereNotIn('id', [35])->get(); // $insertData = []; // // Loop through each role permission and dealership to prepare the insert data // foreach ($rolesPermissions as $rolePermission) { // foreach ($dealers as $dealer) { // $roleDealer = \App\Models\Role::where() // $insertData[] = [ // 'role_id' => $id, // 'company_id' => $dealer->company_id, // 'dealership_id' => $dealer->id, // 'module_id' => $rolePermission->module_id, // 'permission_id' => $rolePermission->permission_id, // 'created_at' => now(), // 'updated_at' => now(), // ]; // } // } // // Batch insert to minimize database interactions // DB::table('role_permissions')->insert($insertData); // DB::commit(); // return response()->json([ // 'message' => 'Record successfully added!', // 'status' => 'success', // ], 201); // } catch (Exception $e) { // DB::rollBack(); // return response()->json([ // 'status' => 'error', // 'message' => 'Unable to process request. Please try again.', // 'error' => $e->getMessage(), // ], 500); // } // } } PKyZBH ,Http/Controllers/API/v1/FamilyController.phpnu[first(); return response()->json($data); } public function store(Request $request, string $employee_id) { // dd($request->all()); $employeeExists = Family::where('employee_id', $employee_id)->exists(); $validator = Validator::make($request->all(), [ // 'passport_id' => [ // 'required', // 'min:1', // ], ]); // dd($employeeExists); if($employeeExists){ $data = Family::where('employee_id', $employee_id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } else { /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Family::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } } PKyZG~~8Http/Controllers/API/v1/SupportingDocumentController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = SupportingDocument::select( 'document_types.name', 'supporting_documents.*' ) ->join('document_types', 'supporting_documents.document_id', '=', 'document_types.id') ->where(function ($query) use ($keyword) { $query->where('document_types.name', 'like', '%' . $keyword . '%') ->orWhere('supporting_documents.module_name', 'like', '%' . $keyword . '%'); }); // $data = DocumentType::where(function ($query) use ($keyword) { // $keyword = str_replace(" ", "%", $keyword); // $query->where('name', 'like', '%' . $keyword . '%'); // // ->orWhere('code', 'like', '%' . $keyword . '%'); // }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'module_name' => [ 'required', 'min:2', Rule::unique('supporting_documents')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = SupportingDocument::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = SupportingDocument::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'module_name' => [ 'required', 'min:2', Rule::unique('supporting_documents')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = SupportingDocument::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ h 5Http/Controllers/API/v1/OffsetRemainingController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); // Check if data exists in cache, otherwise execute the query and cache the result $data = OffsetRemaining::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); }) ->when(!empty($sortBy) && !empty($sortType), function ($query) use ($sortBy, $sortType) { $query->orderBy($sortBy, $sortType); }) ->paginate($perPage); return response()->json($data); } public function offsetExpiration() { $offsets = EmployeeOffset::where('approved_at', '<', Carbon::now()->subMonths(6)) ->where('status', 2) ->where('expired', 0) ->get(); foreach($offsets as $offset){ try{ DB::beginTransaction(); // Create expiration history $status = ExpiredOffset::create([ 'offset_id' => $offset->id, 'employee_id' => $offset->employee_id, 'company_id' => $offset->company_id, 'dealer_id' => $offset->dealer_id, 'date_expired' => date('Y-m-d'), 'hours' => $offset->hours, ]); // Update the offset remaining table $updateOffRemaining = OffsetRemaining::where('employee_id', $offset->employee_id)->first(); $updateOffRemaining->remaining = $updateOffRemaining->remaining - $offset->hours; $updateOffRemaining->save(); // Update the offset to expired $updateOffsetToExpired = EmployeeOffset::findOrFail($offset->id); $updateOffsetToExpired->expired = true; $updateOffsetToExpired->save(); DB::commit(); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } return response()->json([ 'status' => true, 'message' => 'Saved successfully!', ], Response::HTTP_CREATED); } } PKyZ"/::*Http/Controllers/API/v1/VisaController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Visa::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('visa_id', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function show(string $id) { $data = Visa::where('employee_id', '=',$id)->get(); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'visa_id' => [ 'required', 'min:2', Rule::unique('visas')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Visa::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Visa::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'visa_id' => [ 'required', 'min:2', Rule::unique('visas')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Visa::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZHf.Http/Controllers/API/v1/SssTableController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = SssTable::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'compensation_from' => [ 'required', ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = SssTable::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = SssTable::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'compensation_from' => [ 'required', ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = SssTable::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ.Http/Controllers/API/v1/VisaTypeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = VisaType::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|unique:visa_types,name' ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = VisaType::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = VisaType::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('visa_types')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = VisaType::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZ 4Http/Controllers/API/v1/TypeOfMovementController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = TypeOfMovement::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('request_for', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } } PKyZN@@)Http/Controllers/API/v1/AppController.phpnu[input('per_page',PHP_INT_MAX); $keyword = $request->input('keyword', ''); $data = Apps::with(['modules'])->where(fn($q) => $q->where('name', 'like', '%'.$keyword.'%') ) ->where('enabled',1) ->orderBy('name')->paginate($perPage); return response()->json($data); } /** * Store a newly created resource in storage. */ public function store(Request $request) { /** Validate the incoming request data */ $validator = Validator::make($request->only(['name']), [ 'name' => [ 'required', Rule::unique('apps')->whereNull('deleted_at'), ], ]); if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::beginTransaction(); try { $request_data = array_merge($request->all(), ['created_at' => $this->current_datetime, 'updated_at' => $this->current_datetime]); $module = Apps::create($request_data); DB::commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $module ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function show($id) { return response()->json([ 'status' => true, 'message' => 'App info', 'data' => Apps::find($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) { /** Fetch the record first to check if it exists */ $data = Apps::find($id); /** If not exists return with error message */ if (!$data) { return response()->json(['message' => 'Record not found.'], Response::HTTP_UNPROCESSABLE_ENTITY); } /** Validate the incoming request data */ $validator = Validator::make(array_merge($request->only(['name']), ['id' => $id]), [ 'name' => [ 'required', Rule::unique('apps')->ignore($id)->whereNull('deleted_at'), ], ]); if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::beginTransaction(); try { // update $request_data = array_merge($request->all(), ['updated_at' => $this->current_datetime]); $data->fill($request_data); $data->save(); $data->touch(); DB::commit(); return response()->json([ 'status' => true, 'message' => 'Updated successfully!', 'data' => $data ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Remove the specified resource from storage. */ public function destroy(int $id) { $data = Apps::find($id); if(!$data) { return response()->json(['message' => 'Record not found!'],204); } $data->delete(); DB::commit(); return response()->json([ 'message' => 'Record Successfully deleted!', ], 200); } public function saveAppsStorage(Request $request) { /** Validate the incoming request data */ $validator = Validator::make($request->all(), [ 'employee_id' => 'required', 'system_id' => 'required', 'data' => 'required' ]); if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::beginTransaction(); try { // create AppsStorage::where([ 'employee_id' => $request->employee_id, 'system_id' => $request->system_id, ])->delete(); $data = AppsStorage::create($request->all()); DB::commit(); return response()->json([ 'status' => true, 'message' => 'Updated successfully!', 'data' => $data ], 201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getAppsStorage(Request $request) { try { // DB::enableQueryLog(); $data = AppsStorage::where('system_id', $request->system_id) ->where('employee_id', $request->employee_id) ->first(); // dd(DB::getQueryLog()); return response()->json($data, 200); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } } PKyZ 22/Http/Controllers/API/v1/ApplicantController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); // $data = Applicant::with( // ['job' => function () { // }, 'jobtitle']) // ->where(function ($query) use ($keyword) { $data = Applicant::with(['job', 'job.jobtitle', 'process_history'])->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('firstname', 'like', '%' . $keyword . '%'); $query->orWhere('middlename', 'like', '%' . $keyword . '%'); $query->orWhere('lastname', 'like', '%' . $keyword . '%'); })->where('blocklist', 0); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // dd($request->all()); $validator = Validator::make($request->all(), [ 'firstname' => "required", 'lastname' => "required", 'address' => "required", 'contact_number' => "required", 'email' => "required", 'cover_letter' => "required", 'resume' => 'required|mimes:jpg,jpeg,png,csv,xlx,xls,pdf,xlsx,docx|max:5120' ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } if($request->hasFile('resume')) { // dd($request->file('resume')); $image = $request->file('resume'); $resume_name = time().'_'.$image->getClientOriginalName(); $path = "applicant/".$resume_name; if(Storage::disk('local')->put($path, file_get_contents($image))) { DB::connection()->beginTransaction(); try { $Status = Applicant::create([ 'job_id' => $request->job_id, 'firstname' => $request->firstname, 'lastname' => $request->lastname, 'address' => $request->address, 'contact_number' => $request->contact_number, 'email' => $request->email, 'last_position' => $request->last_position, 'last_salary' => $request->last_salary, 'cover_letter' => $request->cover_letter, 'resume' => $resume_name, 'status' => 0, ]); $mrf = Mrf::with('company:id,email', 'jobtitle:id,name')->select('company_id','job_title')->where('id', $request->job_id)->first(); $dataForEmail = $Status; // dd($mrf); $dataForEmail['position'] = $mrf->jobtitle->name; // Get the company email $companyEmail = $mrf->company->email; // Send the notification directly to the email address Notification::route('mail', $companyEmail)->notify(new JobApplication($dataForEmail)); DB::connection()->commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $Status ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } else { return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } // public function store(Request $request) // { // // Validate the incoming request data // $validator = Validator::make($request->all(), [ // 'name' => [ // 'required', // ] // ]); // /** If validation fails return with error message */ // if ($validator->fails()) { // $errors = $validator->errors(); // $first = $errors->getMessages(); // return response()->json([ // 'status' => false, // 'message' => (reset($first))[0], // 'errors' => $errors // ], Response::HTTP_UNPROCESSABLE_ENTITY); // } // DB::connection()->beginTransaction(); // try { // $data = Applicant::create($request->all()); // DB::connection()->commit(); // return response()->json([ // 'message' => 'Record Successfully added!', // 'status' => 'success', // ],201); // } catch (Throwable $e) { // DB::connection()->rollback(); // return response()->json([ // 'status' => false, // 'message' => 'Unable to process request. Please try again.', // 'data' => $e->getMessage() // ]); // } // } public function update(Request $request, int $id) { $data = Applicant::withTrashed()->where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ // 'name' => [ // 'required', // 'min:2', // Rule::unique('applicants')->ignore($id)->whereNull('deleted_at') // ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $request['deleted_at'] = null; // Fill other attributes $data->fill($request->except('deleted_at')); // Explicitly set deleted_at to null $data->deleted_at = null; $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function updateStatus(Request $request, int $id) { // dd($request->all()); $data = Applicant::where('id', $id)->first(); $applicant_history = ApplicantProcessHistory::create([ 'applicant_id' => $id, 'action_id' => $request->status, 'action_made' => date('Y-m-d') ]); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ // 'name' => [ // 'required', // 'min:2', // Rule::unique('applicants')->ignore($id)->whereNull('deleted_at') // ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { if($request->status == 4){ $request['offered_date'] = date("Y-m-d"); } if($request->status == 5){ $request['status'] = 0; $request['blocklist'] = 1; $request['blocklisted_date'] = date("Y-m-d"); } $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function blocklist(Request $request, int $id) { $data = Applicant::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ // 'name' => [ // 'required', // 'min:2', // Rule::unique('applicants')->ignore($id)->whereNull('deleted_at') // ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $request['blocklist'] = 1; $request['blocklisted_date'] = date("Y-m-d"); // dd($request->all()); $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Applicant::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } public function newEmployee(string $employee_id){ $user = Employee::where('employee_id', $employee_id); } } PKyZÒ ww8Http/Controllers/API/v1/EmployeeAttendanceController.phpnu[employees); $start_date = new DateTime($request->start_date); $end_date = new DateTime($request->end_date); $end_date->modify('+1 day'); // Include the end date in the range //Check if employee is always present $isAlwaysPresent = $this->alwaysPresent($user->employee_id); // Create a DatePeriod object $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $presentDays = 0; $data = []; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); // Get Timelogs $timelogs = $this->getTimelog($formattedDate, $user->employees->time_keeping_id); $this->addTimelogData($data, $timelogs, $formattedDate); // Get Time Adjustment $timeAdjustment = $this->getTimeAdjustments($formattedDate, $user->employee_id); $this->addTimeAdjustmentData($data, $timeAdjustment, $formattedDate); // Get Schedule $schedule = $this->getSchedule($formattedDate, $user->employee_id); if(!$isAlwaysPresent){ $this->addScheduleData($data, $schedule, $formattedDate, $user->employee_id); } // Get Holiday $holiday = $this->getHoliday($formattedDate, $user->employees, $schedule); $this->addHolidayData($data, $holiday, $formattedDate); // Get Work Suspension $workSuspension = $this->getWorkSuspension($formattedDate); $this->addWorkSuspensionData($data, $workSuspension, $formattedDate); // GET WFH $wfhRecord = EmployeeWfh::whereNotNull('attachment')->where(['employee_id'=> $user->employee_id, 'date'=>$formattedDate, 'status'=>2, 'validated'=>1])->first(); $this->addWfhData($data, $wfhRecord, $formattedDate); // Get Leave $leave = $this->getLeave($formattedDate, $user->employee_id); if(!$holiday){ $this->addLeaveData($data, $leave, $formattedDate); } //get OB $ob = $this->getOB($formattedDate, $user->employee_id); $this->addOBData($data, $ob, $formattedDate); //get Offset Availment $offsetAvailment = $this->getOffsetAvailment($formattedDate, $user->employee_id); $this->addOffsetAvailmentData($data, $offsetAvailment, $formattedDate); // Get Overtime $overtime = $this->getOvertime($formattedDate, $user->employee_id); $this->addOvertimeData($data, $overtime, $formattedDate); if(!$isAlwaysPresent){ // Check Tardiness $halfDayLeave = $leave && $leave->half_day == 1; $tardiness = $this->getTardiness($timelogs, $schedule, $halfDayLeave, $ob, $offsetAvailment, $user->employees->classification_id); $this->addTardinessData($data, $tardiness, $formattedDate); // Get Undertime $undertime = $this->getUndertime($timelogs, $schedule, $workSuspension, $formattedDate, $ob, $offsetAvailment, $wfhRecord, $halfDayLeave); $this->addUndertimeData($data, $undertime, $formattedDate); if(!$ob && !$offsetAvailment){ $this->addAbsenceData($data, $timelogs, $leave, $holiday, $schedule, $formattedDate); } } // Check if present if ($this->isPresent($timelogs, $leave, $holiday, $schedule, $formattedDate)) { $presentDays++; } } // dd($presentDays); return response()->json($data); } public function getDailyAttedance() { $user = Auth::user(); $day = date('d'); $start_date = ''; $end_date = ''; // dd($day); if($day >= 6 && $day <= 20){ $start_date = new DateTime(date('Y-m-6')); $end_date = new DateTime(date('Y-m-20')); } else if ($day >= 21 && $day >= 5){ $start_date = new DateTime(date('Y-m-21')); $end_date = new DateTime(date('Y-m-5')); $end_date->modify('+1 month'); } // Create a DatePeriod object $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $presentDays = 0; $data = []; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); // Get Timelogs $timelogs = $this->getTimelog($formattedDate, $user->employee_id); $this->addTimelogData($data, $timelogs, $formattedDate); } // dd($data); return response()->json($data); } public function addTimelogData(&$data, $timelogs, $date) { if ($timelogs) { foreach ($timelogs as $timelog) { $data['timelog'][] = [ 'title' => $timelog->in_out ? ($timelog->in_out == "I" ? date('H:ia', strtotime($timelog->datetimelog)) . " In" : date('H:ia', strtotime($timelog->datetimelog)) . " Out") : "", 'date' => $date, 'className' => (!empty($timelog->adjustment) ? "bg-time-adjustment text-white" : ($timelog->in_out ? ($timelog->in_out == "I" ? 'bg-time-in text-white' : 'bg-time-out text-white') : "")) ]; } } } public function addScheduleData(&$data, $schedule, $date, $employee_id) { $dayoff = EmployeeChangeSchedule::where('dayoff_date', $date)->where('status', 2)->where('validated', 1)->first(); $employee_change_schedule = EmployeeChangeSchedule::where(fn($q) => $q->whereNull('date_to') ->where('date', $date) ->orWhere(fn($q) => $q->whereNotNull('date_to') ->where('date', '<=', $date) ->where('date_to', '>=', $date) ) ->where('status', 2) ->where('validated', 1) )->where('status', 2) ->where('validated', 1) ->where('employee_id', $employee_id)->first(); if(!empty($dayoff)){ $data['schedule'][] = [ 'id' => $date, 'date' => $date, 'title' => "Day Off", 'className' => 'bg-dayoff text-white', ]; } else if(!empty($employee_change_schedule)){ $data['schedule'][] = [ 'id' => $date, 'date' => $date, 'title' => date('H:i', strtotime($employee_change_schedule->from_time)) . '-' . date('H:i', strtotime($employee_change_schedule->to_time)), 'className' => 'bg-schedule text-white', ]; } if ($schedule && empty($dayoff) && empty($employee_change_schedule)) { $dayOfWeek = date('l', strtotime($date)); $daysArray = explode(',', $schedule->schedule->day_off); $daysShiftingArray = explode(',', $schedule->schedule->shifting_day); $daysWFHArray = explode(',', $schedule->schedule->wfh); $daysCWSArray = explode(',', $schedule->schedule->cws_day); $data['schedule'][] = [ 'id' => $date, 'date' => $date, 'title' => in_array($dayOfWeek, $daysArray) ? "Day Off" : ( in_array($dayOfWeek, $daysWFHArray) ? date('H:i', strtotime($schedule->schedule->from_time)) . '-' . date('H:i', strtotime($schedule->schedule->to_time)) . ' (WFH)' : ( in_array($dayOfWeek, $daysCWSArray) ? date('H:i', strtotime($schedule->schedule->cws_from_time)) . '-' . date('H:i', strtotime($schedule->schedule->cws_to_time)) : ( in_array($dayOfWeek, $daysShiftingArray) ? date('H:i', strtotime($schedule->schedule->shifting_from_time)) . '-' . date('H:i', strtotime($schedule->schedule->shifting_to_time)) : date('H:i', strtotime($schedule->schedule->from_time)) . '-' . date('H:i', strtotime($schedule->schedule->to_time)) ) ) ), 'start' => $date, 'className' => in_array($dayOfWeek, $daysArray) ? 'bg-dayoff text-white' : 'bg-schedule text-white', ]; } } public function addTimeAdjustmentData(&$data, $timeAdjustments, $date) { if ($timeAdjustments->isNotEmpty()) { foreach($timeAdjustments as $timeAdjustment){ $inOrOut = ''; if($timeAdjustment->in_out == 0){ $inOrOut = " In"; } else { $inOrOut = " Out"; } $data['timeAdjustment'][] = [ 'title' => date('H:ia', strtotime($timeAdjustment->time)).$inOrOut, 'date' => $date, 'className' => 'bg-time-adjustment text-white', ]; } // dd($timeAdjustment[0]); // $data['timeAdjustment'][] = [ // 'title' => $timeAdjustment->time .' '. $timeAdjustment->in_out == 1 ? "IN" : "OUT", // 'date' => $date, // 'className' => 'bg-time-adjustment text-white', // ]; } } public function addHolidayData(&$data, $holiday, $date) { if ($holiday) { $data['holiday'][] = [ 'title' => $holiday->name, 'from_date' => $holiday->from_date, 'to_date' => $holiday->to_date, 'date' => $date, 'recurring' => $holiday->recurring, 'className' => 'bg-holiday text-white', ]; } } public function addWorkSuspensionData(&$data, $workSuspension, $date) { if ($workSuspension) { $data['workSuspension'][] = [ 'title' => $workSuspension->reason, 'from_date' => $workSuspension->date, 'to_date' => $workSuspension->date, 'date' => $date, 'className' => 'bg-suspension text-white', ]; } } public function addLeaveData(&$data, $leave, $date) { if ($leave) { $halfday = ''; $without_pay = ''; if($leave->half_day == 1){ $halfday = ' (Half Day)'; } if($leave->without_pay == 1){ $without_pay = ' (Absent)'; } $data['leave'][] = [ 'title' => $leave->leave_type->name.$halfday.$without_pay, 'from_date' => $leave->from_date, 'to_date' => $leave->to_date, 'date' => $date, 'className' => 'bg-leave text-white', ]; // dd($data); } } public function addTardinessData(&$data, $tardiness, $date) { if ($tardiness) { $data['tardiness'][] = [ 'title' => $tardiness.' minutes', 'date' => $date, 'className' => 'bg-tardiness text-white', ]; } } public function addOvertimeData(&$data, $overtime, $date) { if ($overtime) { $data['overtime'][] = [ 'id' => $date, 'date' => $date, 'title' => date('H:i', strtotime($overtime->from_time)) . '-' . date('H:i', strtotime($overtime->to_time)), 'start' => $date, 'className' => 'bg-overtime text-white', ]; } } public function addWfhData(&$data, $wfhRecord, $date) { if ($wfhRecord) { // dd($ob); $data['wfhRecord'][] = [ 'title' => $wfhRecord->hours.' HOURS (WFH)', 'date' => $date, 'className' => 'bg-wfh text-white', ]; } } public function addOBData(&$data, $ob, $date) { if ($ob) { // dd($ob); $data['ob'][] = [ 'title' => date('H:i A', strtotime($ob->from_time)).' - '.date('H:i A', strtotime($ob->to_time)), 'date' => $date, 'className' => 'bg-ob text-white', ]; } } public function addOffsetAvailmentData(&$data, $offsetAvailment, $date) { if ($offsetAvailment) { // dd($ob); $data['offsetAvailment'][] = [ 'title' => date('H:i A', strtotime($offsetAvailment->from_time)).' - '.date('H:i A', strtotime($offsetAvailment->to_time)), 'date' => $date, 'className' => 'bg-offset-availment text-white', ]; } } public function addUndertimeData(&$data, $undertime, $date) { if ($undertime) { $data['undertime'][] = [ 'title' => $undertime.' minutes', 'date' => $date, 'className' => 'bg-undertime text-white', ]; } } private function alwaysPresent($employee_id){ $isAlwaysPresent = false; $data = SalaryAndWages::where('employee_id',$employee_id)->first(); if($data->always_present ==1){ $isAlwaysPresent = true; } return $isAlwaysPresent; } public function addAbsenceData(&$data, $timelogs, $leave, $holiday, $schedule, $date) { $dayoff = EmployeeChangeSchedule::where('dayoff_date', $date)->where('status', 2)->where('validated', 1)->first(); // if($holiday){ // dd($holiday); // } if($holiday && $holiday['isAbsentBeforeHoliday'] == true){ $dayOfWeek = date('l', strtotime($date)); $daysArray = explode(',', $schedule->schedule->day_off); // Convert string to array if (!in_array($dayOfWeek, $daysArray) && new DateTime($date) < new DateTime()) { $data['absent'][] = [ 'title' => "Absent", 'date' => $date, 'className' => 'bg-absent text-white', ]; } } if (!$timelogs->count() && !$leave && !$holiday && $schedule && empty($dayoff)) { $dayOfWeek = date('l', strtotime($date)); $daysArray = explode(',', $schedule->schedule->day_off); // Convert string to array if (!in_array($dayOfWeek, $daysArray) && new DateTime($date) < new DateTime()) { $data['absent'][] = [ 'title' => "Absent", 'date' => $date, 'className' => 'bg-absent text-white', ]; } } } public function getSchedule($date, $employee_id) { $dayOfWeek = Carbon::parse($date)->format('l'); $employeeSchedule = EmployeeSchedule::with('schedule') ->where('date_from', '<=', $date) ->where('date_to', '>=', $date) ->where('effectivity_date', '<=', $date) ->where('employee_id', '=', $employee_id) ->whereHas('schedule') ->first(); if($employeeSchedule == null){ $employeeSchedule = EmployeeSchedule::with('schedule') ->where('effectivity_date', '<=', $date) ->where('employee_id', '=', $employee_id) ->orderBy('effectivity_date', 'desc') ->whereHas('schedule') ->first(); } // if($date == '2024-12-21'){ $employee_change_schedule = EmployeeChangeSchedule::where(fn($q) => $q->whereNull('date_to') ->where('date', $date) ->orWhere(fn($q) => $q->whereNotNull('date_to') ->where('date', '<=', $date) ->where('date_to', '>=', $date) ) ->where('status', 2) ->where('validated', 1) )->where('status', 2) ->where('validated', 1) ->where('employee_id', $employee_id)->first(); // dd($employee_change_schedule['from_time']); if (!empty($employeeSchedule) && isset($employeeSchedule->schedule['shifting_day'])) { if ($dayOfWeek == $employeeSchedule->schedule['shifting_day']) { $employeeSchedule->schedule['from_time'] = $employeeSchedule->schedule['shifting_from_time']; $employeeSchedule->schedule['to_time'] = $employeeSchedule->schedule['shifting_to_time']; } } if(!empty($employee_change_schedule)){ $employeeSchedule->schedule['from_time'] = $employee_change_schedule['from_time']; $employeeSchedule->schedule['to_time'] = $employee_change_schedule['to_time']; } return $employeeSchedule; // return EmployeeSchedule::with('schedule') // ->where('date_from', '<=', $date) // ->where('date_to', '>=', $date) // ->where('effectivity_date', '<=', $date) // ->where('employee_id', '=', $employee_id) // ->first(); } public function getHoliday($date, $employee, $schedule) { $data = Holiday::where(fn($query) => $query->where('from_date', '<=', $date) ->where('to_date', '>=', $date) ->where('enabled', 1) ) ->orWhere(fn($query) => $query->where('recurring', 1) // Assuming a `recurring` column ->where(DB::raw('DATE_FORMAT(from_date, "%m-%d")'), '=', Carbon::parse($date)->format('m-d')) ->where('enabled', 1) ) ->first(); if($data && $data->holiday_type==3) { if(empty($employee->work_location_id) || $employee->work_location_id != $data->locality) { $data = null; } } if($schedule && $data){ $daysArray = explode(',', $schedule->schedule->day_off); // Convert string to array $date = $date; // Example starting date // dd($daysArray); do { $date = date('Y-m-d', strtotime($date . ' -1 day')); $dayOfWeek = date('l', strtotime($date)); // Get the day of the week $checkIfPreviousDateIsHoliday = Holiday::where(fn($query) => $query->where('from_date', '<=', $date) ->where('to_date', '>=', $date) ->where('enabled', 1) ) ->orWhere(fn($query) => $query->where('recurring', 1) // Assuming a `recurring` column ->where(DB::raw('DATE_FORMAT(from_date, "%m-%d")'), '=', Carbon::parse($date)->format('m-d')) ->where('enabled', 1) ) ->first(); } while (in_array($dayOfWeek, $daysArray) || $checkIfPreviousDateIsHoliday); // Continue if it's in $daysArray $newDate = $date; $leave = $this->getLeave($newDate, $employee->employee_id); $timelogs = $this->getTimelog($newDate, $employee->time_keeping_id); $ob = $this->getOB($newDate, $employee->employee_id); $offsetAvailment = $this->getOffsetAvailment($newDate, $employee->employee_id); $dayoff = EmployeeChangeSchedule::where('dayoff_date', $newDate)->where('status', 2)->where('validated', 1)->first(); if ($data && !$timelogs->count() && !$leave && $schedule && empty($dayoff) && !$ob && !$offsetAvailment) { $data['isAbsentBeforeHoliday'] = true; } else if($data && $leave && ($leave['without_pay'] == 1)) { $data['isAbsentBeforeHoliday'] = true; } } return $data; } public function getWorkSuspension($date) { return WorkSuspension::where('date', '<=', $date) ->where('date', '>=', $date) ->where('enabled', '=', 1) ->first(); } public function getLeave($date, $employee_id) { return EmployeeLeave::with('leave_type') ->where('employee_id', '=', $employee_id) ->where('date_from', '<=', $date) ->where('date_to', '>=', $date) ->where('enabled', '=', 1) ->where('status', '=', 2) ->first(); } // public function getTimelog($date, $employee_id) // { // return Timelog::select('employee_id', DB::raw("MIN(datetimelog) AS datetimelog"), 'time_keeping_id', 'in_out')->whereDate('datetimelog', $date) // ->where(fn($query) => $query->where('employee_id', $employee_id) // ->orWhere('time_keeping_id', $employee_id)) // ->groupBy('employee_id', DB::raw("DATE(datetimelog)"), 'time_keeping_id', 'in_out') // ->get(); // } public function getTimelog($date, $employee_id) { // Get the primary timelog records for the specified date and employee $timelog = $this->getPrimaryTimelog($date, $employee_id); // Get any applicable time adjustments $timeAdjustments = $this->getTimeAdjustments($date, $employee_id); // if($date == '2024-12-28'){ // dd($timelog); // } if ($timeAdjustments->isNotEmpty()) { // Get the time adjustments for IN and OUT $time_in = $this->getTimeAdjustmentByType($timeAdjustments, 0); $time_out = $this->getTimeAdjustmentByType($timeAdjustments, 1); // Create a map of the existing timelogs by in_out type for quick lookup $timelogMap = $timelog->keyBy('in_out'); // If there's a time adjustment for IN, update or add the IN timelog if ($time_in) { $timelogMap['I'] = (object)[ 'employee_id' => $employee_id, 'datetimelog' => $time_in, 'time_keeping_id' => $employee_id, // Assuming time_keeping_id is the same as employee_id 'in_out' => 'I', 'adjustment' => true, ]; } // If there's a time adjustment for OUT, update or add the OUT timelog if ($time_out) { $timelogMap['O'] = (object)[ 'employee_id' => $employee_id, 'datetimelog' => $time_out, 'time_keeping_id' => $employee_id, // Assuming time_keeping_id is the same as employee_id 'in_out' => 'O', 'adjustment' => true, ]; } // Convert the map back to a collection $timelog = collect($timelogMap->values()); } // Get any applicable time adjustments // DB::enableQueryLog(); $alteredTimelog = $this->getTimelogEdits($date, $employee_id); if ($alteredTimelog->isNotEmpty()) { $time_in = $this->getTimelogEditByType($alteredTimelog, "I"); $time_out = $this->getTimelogEditByType($alteredTimelog, "O"); $latestOut = $alteredTimelog->where('in_out', 'O')->sortByDesc('datetimelog')->first(); // Remove existing "O" entries $timelog = $timelog->reject(fn($t) => $t->in_out === "O")->values(); $alteredTimelog->each(function ($log) use ($timelog, $time_in, $time_out, $latestOut) { $logData = (object)[ 'employee_id' => $log->employee_id, 'datetimelog' => $this->getAlteredTime($log, $time_in, $time_out), 'time_keeping_id' => $log->time_keeping_id, 'in_out' => $log->in_out, ]; if ($log->in_out === "O") { // Only push the latest "O" entry if ($log->datetimelog === $latestOut->datetimelog) { $timelog->push($logData); } } else { // Push all other entries normally $timelog->push($logData); } }); } // if($date == '2024-12-28'){ // dd($timelog); // } return $timelog; } // Helper to retrieve primary timelog entries private function getPrimaryTimelog($date, $employee_id) { // return Timelog::select('employee_id', 'time_keeping_id', 'in_out', DB::raw("CASE WHEN in_out = 'I' THEN MIN(datetimelog) ELSE MAX(datetimelog) END AS datetimelog")) // ->whereDate('datetimelog', $date) // ->where(fn($query) => $query->where('employee_id', $employee_id) // ->orWhere('time_keeping_id', $employee_id)) // ->groupBy('employee_id', 'time_keeping_id', 'in_out') // ->get(); $data = []; $payrollSetting = PayrollSetting::first(); $nextDayLastTimeout = $payrollSetting->next_day_last_timeout ?? '00:00:00'; $nextDay = Carbon::parse($date)->addDay()->format('Y-m-d'); $timelogIn = Timelog::select('employee_id', 'time_keeping_id', 'in_out', DB::raw("MIN(datetimelog)AS datetimelog")) ->whereDate('datetimelog', $date) ->where('in_out', 'I') ->where(fn($query) => $query->where('employee_id', $employee_id) ->orWhere('time_keeping_id', $employee_id)) ->groupBy('employee_id', 'time_keeping_id', 'in_out') ->first(); if($timelogIn) { $timeIn = $timelogIn->datetimelog; $timeIn = Carbon::parse($timelogIn->datetimelog)->addMinutes(2)->format('Y-m-d H:i:s'); // if($employee_id=='2644' && $date=='2024-12-23') { DB:: flushQueryLog(); DB::enableQueryLog(); } $timelogOut = Timelog::select('employee_id', 'time_keeping_id', 'in_out', DB::raw("MIN(datetimelog)AS datetimelog")) ->whereDate('datetimelog', $date) ->where('datetimelog', '>', $timeIn) ->where('in_out', 'O') ->where(fn($query) => $query->where('employee_id', $employee_id) ->orWhere('time_keeping_id', $employee_id)) ->groupBy('employee_id', 'time_keeping_id', 'in_out') ->first(); // if($employee_id=='2644' && $date=='2024-12-23') dd(DB::getQueryLog()); } else { $timelogOut = Timelog::select('employee_id', 'time_keeping_id', 'in_out', DB::raw("MIN(datetimelog)AS datetimelog")) ->whereDate('datetimelog', $date) ->where('datetimelog', '>', $date.' '.$nextDayLastTimeout) ->where('in_out', 'O') ->where(fn($query) => $query->where('employee_id', $employee_id) ->orWhere('time_keeping_id', $employee_id)) ->groupBy('employee_id', 'time_keeping_id', 'in_out') ->first(); } if(!$timelogOut) { $timelogOut = Timelog::select('employee_id', 'time_keeping_id', 'in_out', DB::raw("MIN(datetimelog)AS datetimelog")) ->whereDate('datetimelog', $nextDay) ->where('datetimelog', '<', $nextDay.' '.$nextDayLastTimeout) ->where('in_out', 'O') ->where(fn($query) => $query->where('employee_id', $employee_id) ->orWhere('time_keeping_id', $employee_id)) ->groupBy('employee_id', 'time_keeping_id', 'in_out') ->first(); } // if($employee_id=='2644' && $date=='2024-12-23') { // $data = collect([])->when($timelogIn, fn($collection) => $collection->merge([$timelogIn])) // ->when($timelogOut, fn($collection) => $collection->merge([$timelogOut])); // dd($data->toArray()); // } return collect([])->when($timelogIn, fn($collection) => $collection->merge([$timelogIn])) ->when($timelogOut, fn($collection) => $collection->merge([$timelogOut])); } public function getTimeAdjustments($date, $employee_id) { return EmployeeTimeAdjustment::select('employee_id', 'date', 'time', 'in_out') ->where('employee_id', $employee_id) ->where('date', $date) ->where('status', 2) ->where('validated', 1) ->get(); } private function getTimelogEdits($date, $employee_id) { return TimelogEdit::select('employee_id', 'date', 'time', 'in_out') ->where('employee_id', $employee_id) ->where('date', $date) ->where('approved', 1) ->get(); } // Helper to filter time adjustments by in/out type private function getTimeAdjustmentByType($timeAdjustments, int $type) { return $timeAdjustments->filter(fn($item) => $item->in_out === $type) ->map(fn($item) => $item->date . ' ' . $item->time) ->first(); } private function getTimelogEditByType($timelogEdit, string $type) { return $timelogEdit->filter(fn($item) => $item->in_out === $type) ->map(fn($item) => $item->date . ' ' . $item->time) ->first(); } // Helper to get adjusted time if available, else fallback to original private function getAdjustedTime($log, $time_in, $time_out) { return match ($log->in_out) { 'I' => $time_in ?? $log->datetimelog, 'O' => $time_out ?? $log->datetimelog, default => $log->datetimelog, }; } // Helper to get adjusted time if available, else fallback to original private function getAlteredTime($log, $time_in, $time_out) { return match ($log->in_out) { 'I' => $time_in ?? $log->datetimelog, 'O' => $time_out ?? $log->datetimelog, default => $log->datetimelog, }; } public function getOB($date, $employee_id) { return EmployeeOb::where('employee_id', '=', $employee_id) ->where('date_from', '<=', $date) ->where('date_to', '>=', $date) ->where('enabled', '=', 1) ->where('status', '=', 2) ->where('validated', 1) ->first(); } public function getOffsetAvailment($date, $employee_id) { return EmployeeOffset::where('employee_id', '=', $employee_id) ->where('date_from', '<=', $date) ->where('date_to', '>=', $date) ->where('enabled', '=', 1) ->where('status', '=', 2) ->where('validated', 1) ->first(); } public function getTardiness($timelogs, $schedule, $halfDayLeave=false, $ob, $offsetAvailment, $classification_id) { $payrollSetting = PayrollSetting::first(); if ($timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() && $timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() && $schedule) { $firstTimelog = $timelogs->filter(fn($tl) => $tl->in_out=='I')->first(); $date = Carbon::parse($firstTimelog->datetimelog)->format('Y-m-d'); $dayOfWeek = date('l', strtotime($date)); $daysArray = explode(',', $schedule->schedule->day_off); $daysWFHArray = explode(',', $schedule->schedule->wfh); $daysCWSArray = explode(',', $schedule->schedule->cws_day); $schedule_in = ""; if(in_array($dayOfWeek,$daysCWSArray)) { $schedule_in = $schedule->schedule->cws_from_time; } elseif(!in_array($dayOfWeek, $daysArray)) { $schedule_in = $schedule->schedule->from_time; } if(($timelogs->filter(fn($tl) => $tl->in_out=='O')->isEmpty() && (!$ob && !$offsetAvailment)) && $schedule) { $schedule_out = ""; if(in_array($dayOfWeek,$daysCWSArray)) { $schedule_out = $schedule->schedule->cws_to_time; } elseif(!in_array($dayOfWeek, $daysArray)) { $schedule_out = $schedule->schedule->to_time; // $schedTimeIn = new DateTime($date . ' ' . $schedule_in); // $schedTimeOut = new DateTime($date . ' ' . $schedule_out); // // Calculate the difference between the two DateTime objects // $interval = $schedTimeOut->diff($schedTimeIn); // // Convert the interval to total minutes // $totalMinutes = ($interval->h * 60) + $interval->i; // // Use floor() if needed (though $totalMinutes is already an integer) // $totalMinutes = floor($totalMinutes) - 60; // // echo $employee_id; // // $minutes = ($interval->h * 60) + $interval->i; // return $totalMinutes; } // if($date == '2024-12-21'){ // dd($daysArray); // } } if ($ob && $ob->date_from == $date) { $obTimeStart = $date.' '.$ob->from_time; if (!$firstTimelog || new DateTime($obTimeStart) < new DateTime($firstTimelog->datetimelog)) { $firstTimelog->datetimelog = $obTimeStart; } } if ($offsetAvailment && $offsetAvailment->date_from == $date) { $offsetAvailmentTimeStart = $date.' '.$offsetAvailment->from_time; if (!$firstTimelog || new DateTime($offsetAvailmentTimeStart) < new DateTime($firstTimelog->datetimelog)) { $firstTimelog->datetimelog = $offsetAvailmentTimeStart; } } if ($firstTimelog && !empty($schedule_in)) { $firstTimelogTime = new DateTime($firstTimelog->datetimelog); $scheduledStartTime = new DateTime($date.' '.$schedule->schedule->from_time); $scheduledEndTime = new DateTime($date.' '.$schedule->schedule->to_time); $breakTimeStartTime = new DateTime($date.' 12:00:00'); $breakTimeEndTime = new DateTime($date.' 13:00:00'); $breakInterval = 0; if($firstTimelogTime>$breakTimeStartTime && $firstTimelogTime<$breakTimeEndTime) { $interval = $breakTimeStartTime->diff($scheduledStartTime); } else if($firstTimelog> $breakTimeEndTime) { $interval = $breakTimeStartTime->diff($scheduledStartTime); $interval2 = $firstTimelogTime->diff($breakTimeEndTime); $interval->h = $interval2->h; $interval->i = $interval2->i; } else { // Calculate the difference $interval = $firstTimelogTime->diff($scheduledStartTime); } /**If halfday leave */ if($halfDayLeave) { $workHours = $scheduledStartTime->diff($scheduledEndTime)->h - 1; if($interval->h >= $workHours/2) { /**if the interval exceeds half day, this means that the leave is at the start of schedule thus the timelog is after leave, then change the scheduledStartTime and recompute intervals */ $scheduledStartTime->add(new DateInterval('PT'.(($workHours/2)+1).'H')); $interval = $firstTimelogTime->diff($scheduledStartTime); } } /**THIS IS FOR TEST AND DEBUGGING ONLY */ // if($firstTimelog->employee_id == '2739' && Carbon::parse($firstTimelog->datetimelog)->format('Y-m-d')=='2024-12-23') { // // dd($firstTimelog); // dd(['timelogs' => $firstTimelog->datetimelog, 'schedule' => $scheduledStartTime, 'interval' => $interval]); // } // $scheduledStartTime->add(new DateInterval('PT'.$payrollSetting->late_grace_period.'M')); // Add 5 minutes grace period // $firstTimelogTimeFormatted = $firstTimelogTime->format('H:i:s'); // $scheduledStartTimeFormatted = $scheduledStartTime->format('H:i:s'); // if ($firstTimelogTime > $scheduledStartTime) { // $minutes = ($interval->h * 60) + $interval->i; // return floor($minutes); // } if($classification_id == '3') { $scheduledStartTime->add(new DateInterval('PT31M')); // Add 6 minutes grace period } else { $scheduledStartTime->add(new DateInterval('PT6M')); // Add 6 minutes grace period } $firstTimelogTimeFormatted = $firstTimelogTime->format('H:i:s'); $scheduledStartTimeFormatted = $scheduledStartTime->format('H:i:s'); if ($firstTimelogTime > $scheduledStartTime) { $minutes = ($interval->h * 60) + $interval->i; return floor($minutes); } } } return false; } public function getUndertime($timelogs, $schedule, $workSuspension, $formattedDate, $ob, $offsetAvailment, $wfhRecord, $halfDayLeave=false) { if ($timelogs && ($timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() || $ob || $offsetAvailment) && $schedule && !$workSuspension && !$halfDayLeave) { // dd($halfDayLeave); $lastTimelog = $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => $tl->datetimelog)->first(); $employee_id = $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => $tl->employee_id)->first(); if($ob && $ob->date_to == $formattedDate) { $obTimeEnd = $formattedDate.' '.$ob->to_time; if(!$lastTimelog || new DateTime($obTimeEnd) > new DateTime($lastTimelog)) { $lastTimelog = $obTimeEnd; } } if($offsetAvailment && $offsetAvailment->date_to == $formattedDate) { $offsetAvailmentTimeEnd = $formattedDate.' '.$offsetAvailment->to_time; if(!$lastTimelog || new DateTime($offsetAvailmentTimeEnd) > new DateTime($lastTimelog)) { $lastTimelog = $offsetAvailmentTimeEnd; } } $date = Carbon::parse($lastTimelog)->format('Y-m-d'); // if ($date == '2024-12-23' && $employee_id == '1922') { // dd($halfDayLeave); // } $dayOfWeek = date('l', strtotime($date)); $daysArray = explode(',', $schedule->schedule->day_off); $daysWFHArray = explode(',', $schedule->schedule->wfh); $daysCWSArray = explode(',', $schedule->schedule->cws_day); $schedule_out = ""; /**check if WFH and if has DAR */ $isWFH = in_array($dayOfWeek, $daysWFHArray); $validWFH = $wfhRecord && $wfhRecord->isNotEmpty(); if(in_array($dayOfWeek,$daysCWSArray)) { $schedule_in = $schedule->schedule->cws_from_time; $schedule_out = $schedule->schedule->cws_to_time; } elseif(!in_array($dayOfWeek, $daysArray)) { $schedule_in = $schedule->schedule->from_time; $schedule_out = $schedule->schedule->to_time; if(($timelogs->filter(fn($tl) => $tl->in_out=='I')->isEmpty() && !$ob && !$offsetAvailment) && $schedule && !$workSuspension) { $schedule_in = ""; if(in_array($dayOfWeek,$daysCWSArray)) { $schedule_in = $schedule->schedule->cws_from_time; } elseif(!in_array($dayOfWeek, $daysArray)) { $schedule_in = $schedule->schedule->from_time; } // $schedTimeIn = new DateTime($date . ' ' . $schedule_in); // $schedTimeOut = new DateTime($date . ' ' . $schedule_out); // // Calculate the difference between the two DateTime objects // $interval = $schedTimeOut->diff($schedTimeIn); // // Convert the interval to total minutes // $totalMinutes = ($interval->h * 60) + $interval->i; // // Use floor() if needed (though $totalMinutes is already an integer) // $totalMinutes = floor($totalMinutes) - 60; // dd($totalMinutes); // $minutes = ($interval->h * 60) + $interval->i; // return $totalMinutes; } } if ($lastTimelog && !empty($schedule_out)) { $lastTimelogTime = new DateTime($lastTimelog); $lastTimelogTime->setTime($lastTimelogTime->format('H'), $lastTimelogTime->format('i'), 0); $scheduledEndTime = new DateTime($date . ' ' . $schedule_out); $scheduledStartTime = new DateTime($date . ' ' . $schedule_in); $interval = $scheduledEndTime->diff($lastTimelogTime); $lastTimelogTimeFormatted = $lastTimelogTime->format('H:i:s'); $scheduledEndTimeFormatted = $scheduledEndTime->format('H:i:s'); // if($halfDayLeave) { // $workHours = $scheduledStartTime->diff($scheduledEndTime)->h - 1; // // dd($workHours); // if($interval->h >= $workHours/2) { /**if the interval exceeds half day, this means that the leave is at the start of schedule thus the timelog is after leave, then change the scheduledStartTime and recompute intervals */ // $scheduledEndTime->sub(new DateInterval('PT'.(($workHours/2)+1).'H')); // $interval = $scheduledEndTime->diff($lastTimelogTime); // $totalMinutes = ($interval->h * 60) + $interval->i + ($interval->s / 60); // // if($totalMinutes){ // // } // dd($interval); // } // /**THIS IS FOR TEST AND DEBUGGING ONLY */ // if($employee_id == '1922' && $date == '2024-12-23') { // // dd($firstTimelog); // dd(['timelogs' => $lastTimelog, 'schedule' => $scheduledEndTime, 'interval' => $interval]); // } // } if ($lastTimelogTime < $scheduledEndTime) { // Calculate the total difference in minutes, including seconds $totalMinutes = ($interval->h * 60) + $interval->i + ($interval->s / 60); // Round down to the nearest whole minute return floor($totalMinutes); } } } return false; } public function getOvertime($date, $employee_id) { return EmployeeOvertime::where('date_from', '<=', $date) ->where('date_to', '>=', $date) ->where('enabled', '=', 1) ->where('status', '=', 2) ->where('employee_id', '=', $employee_id) ->first(); } public function getAbsentTardinessHeadDashboard(Request $request) { $user = Auth::user(); $get_the_approver_hierarchy = Approver::where('approvers', 'like','%"'.$user->employee_id.'"%')->get(); $approver_hierarchy_result = []; foreach($get_the_approver_hierarchy as $data) { $approver_hierarchy_result['data'][$data->type][] = $data->type_id; } $members = []; $today = date('Y-m-d'); $processedEmployees = []; // Array to keep track of processed employees $wfhEmployees = []; // Array to keep track of processed employees foreach ($approver_hierarchy_result as $key => $data2) { // Loop through each organization type (dealership, division, group, etc.) foreach ($data2 as $key2 => $organization) { $key2 == 'dealership' ? $keys = 'dealer' : $keys = $key2; // Fetch employees based on the organization ID $employees = Employee::select('employee_id', DB::raw('CONCAT(firstname, " ", lastname) as fullname'), DB::raw('departments.name as department_name')) ->join('departments', 'employees.department_id', '=', 'departments.id') ->whereIn('employees.' . $keys . '_id', $organization) ->where('employees.employee_id', '!=', $user->employee_id) ->where('employees.enabled', '=', '1') ->whereNull('employees.date_resign') ->get(); foreach ($employees as $employee) { // Check if the employee has already been processed if (in_array($employee->employee_id, $processedEmployees)) { continue; // Skip if the employee has been processed } if(EmployeeWfh::whereDate('date', $today)->where('employee_id', $employee->employee_id)->exists()){ $wfhEmployees['employee']['employee_id'] = $employee->employee_id; $wfhEmployees['employee']['fullname'] = $employee->fullname; $wfhEmployees['employee']['department_name'] = $employee->department_name; } $processedEmployees[] = $employee->employee_id; // Mark the employee as processed $date = date('Y-m-d'); $timelogs = $this->getTimelog($date, $employee->employee_id); $schedule = $this->getSchedule($date, $employee->employee_id); $holiday = $this->getHoliday($date, $employee, $schedule); $leave = $this->getLeave($date, $employee->employee_id); $ob = $this->getLeave($date, $employee->employee_id); $offsetAvailment = $this->getOffsetAvailment($date, $employee->employee_id); $halfDayLeave = $leave && $leave->half_day == 1; $tardiness = $this->getTardiness($timelogs, $schedule, $halfDayLeave, $ob, $offsetAvailment, $employee->classification_id); // Check absence $isAbsent = $this->isAbsent($timelogs, $leave, $holiday, $schedule, $date); if ($tardiness) { $members['tardyMembers'][] = [ 'employee' => $employee, 'tardiness' => $tardiness, // for checking ]; } if ($isAbsent) { $members['absentMembers'][] = [ 'employee' => $employee, // 'absent' => $isAbsent // for checking ]; } } } // dd($wfhEmployees); } return response()->json([ 'members' => $members, 'wfhEmployees' => $wfhEmployees ]); } public function isAbsent($timelogs, $leave, $holiday, $schedule, $date) { // Check if there are no timelogs, no leave, no holiday, and it's not a day off if (!$timelogs->count() && !$leave && !$holiday) { if ($schedule) { // Proceed with accessing schedule->schedule $dayOfWeek = date('l', strtotime($date)); $daysArray = explode(',', $schedule->schedule->day_off); // Convert string to array } else { // Handle case where schedule is not found $dayOfWeek = date('l', strtotime($date)); $daysArray = []; // Or any default value } // dd($dayOfWeek); if (!in_array($dayOfWeek, $daysArray) && new DateTime($date) < new DateTime()) { return true; } } return false; } public function isPresent($timelogs, $leave, $holiday, $schedule, $date) { // Check if there are timelogs or it's a day off or holiday or leave if ($timelogs->count() > 0 || $leave || $holiday) { return true; } if ($schedule) { $dayOfWeek = date('l', strtotime($date)); $daysArray = explode(',', $schedule->schedule->day_off); // Convert string to array if (in_array($dayOfWeek, $daysArray)) { return true; // It's a day off } } return false; } public function addTITO(Request $request) { // dd($request->all()); DB::beginTransaction(); try { $request['datetimelog'] = date('Y-m-d H:i:s', strtotime($request->datetimelog)); $status = WfhFloatedTimelog::create($request->all()); DB::commit(); return response()->json([ 'status' => true, 'message' => 'Saved successfully!', 'data' => $status ], Response::HTTP_CREATED); } catch(Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } public function getProcessedAttendance(Request $request) { $getLastPayrollDate = ProcessedTimelog::where('employee_id', $request->employee_id)->orderBy('payroll_date', 'DESC')->first(); $timelogs = ProcessedTimelog::where('payroll_date', $getLastPayrollDate->payroll_date)->where('employee_id', $request->employee_id)->get(); $abensences = ProcessedAbsent::where('payroll_date', $getLastPayrollDate->payroll_date)->where('employee_id', $request->employee_id)->get(); $tardiness = ProcessedTardiness::where('payroll_date', $getLastPayrollDate->payroll_date)->where('employee_id', $request->employee_id)->get(); $result = []; foreach ($timelogs as $timelog) { // Check if the date already exists in the result array $date = $timelog['date']; if (isset($result[$date])) { // If the date exists and 'out' time is present, add it to the existing entry if ($timelog['in_out'] == 'O') { $result[$date]['name'] .= ' - ' . $timelog['time'] . ' OUT'; $result[$date]['has_out'] = true; // Mark that 'OUT' time exists } } else { // Create a new entry for 'in' or 'out' $result[$date] = [ 'date' => $timelog['date'], 'name' => $timelog['time'] . ($timelog['in_out'] == 'I' ? ' IN' : ' OUT'), 'title' => 'Present', 'has_in' => $timelog['in_out'] == 'I', // Mark if 'IN' exists 'has_out' => $timelog['in_out'] == 'O' // Mark if 'OUT' exists ]; } } // Post-processing to update title if 'IN' or 'OUT' is missing foreach ($result as &$entry) { if (empty($entry['has_in'])) { $entry['title'] = 'No Time In'; } elseif (empty($entry['has_out'])) { $entry['title'] = 'No Time Out'; } // Remove the markers as they are no longer needed unset($entry['has_in'], $entry['has_out']); } // To reset the array indices if needed $result = array_values($result); foreach($abensences as $absent){ $result[] = [ 'date' => $absent['date'], 'name' => $absent['no_of_days'] . ' Day/s', 'title' => 'Absent', ]; } foreach($tardiness as $tardy){ $result[] = [ 'date' => $tardy['date'], 'name' => $tardy['no_of_minutes']. ' Minutes', 'title' => 'Late', ]; } // Sort the result array by the 'date' key usort($result, function ($a, $b) { return strcmp($a['date'], $b['date']); }); return response()->json(array_values($result)); } // public function removeAttachment(Request $request, int $id) // { // $attachmentRequest = $ // } public function processAttendance(Request $request) { // dd($request->all());return; $employee_id =$request->employee_id; $company_id = $request->company_id; $dealer_id = $request->dealership_id; $department_id = $request->department_id; $payroll_date = $request->payroll_date; $start_date = new DateTime($request->start_date); $end_date = new DateTime($request->end_date); $end_date->modify('+1 day'); $payrollSetting = PayrollSetting::first(); // Create a DatePeriod object $period = new DatePeriod($start_date, new DateInterval('P1D'), $end_date); $presentDays = 0; $employee = Employee::where('employee_id', $employee_id)->first(); $isAlwaysPresent = $this->alwaysPresent($employee->employee_id); $data = [ 'timelog' => [], 'schedule' => [], 'holiday' => [], 'leave' => [], 'ob' => [], 'offsetAvailment' => [], 'undertime' => [], 'tardiness' => [], 'overtime' => [], 'night_differential' => [], 'absent' => [], 'dailyWorkHours' => [], 'days_present' => null, 'workDays' => null, 'isAlwaysPresent' => $isAlwaysPresent, ]; $where = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'payroll_date' => $payroll_date, ]; /**Delete temp record */ ProcessedLeave::where($where)->delete(); ProcessedTimelog::where($where)->delete(); ProcessedAbsent::where($where)->delete(); ProcessedUndertime::where($where)->delete(); ProcessedTardiness::where($where)->delete(); ProcessedOvertime::where($where)->delete(); ProcessedNightDifferential::where($where)->delete(); ProcessedDailyWorkHours::where($where)->delete(); ProcessedSchedule::where($where)->delete(); ProcessedOb::where($where)->delete(); ProcessedOffsetAvailment::where($where)->delete(); DB::beginTransaction(); try { foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); // Get Timelogs $schedule = $this->getSchedule($formattedDate, $employee_id); $timelogs = $this->getTimelog($formattedDate, $employee_id); $timelogData = []; if($timelogs) { $timelogData = $timelogs->map(fn($tl) => [ 'employee_id' => $employee_id, 'time_keeping_id' => $tl->time_keeping_id ?? null, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'time' => Carbon::parse($tl->datetimelog)->format('H:i:s'), 'in_out' => $tl->in_out, ] ); foreach($timelogData as $timelog) { $tlog = ProcessedTimelog::create($timelog); // dd($tlog); $data['timelog'][] = $tlog; } } // $this->addTimelogData($data, $timelogs, $formattedDate); // Get Holiday $holiday = $this->getHoliday($formattedDate, $employee, $schedule); $isHoliday = false; $isAbsentBeforeHoliday = false; if($holiday) { $isHoliday = true; // if($holiday->holiday_type=='3') { // $dealers = explode(',',$holiday->dealership_ids); // if(!in_array($dealer_id, $dealers)) { // $isHoliday = false; // } // } } if($holiday && $holiday['isAbsentBeforeHoliday'] == true){ $isAbsentBeforeHoliday = true; } // Get Schedule $schedule = $this->getSchedule($formattedDate, $employee_id); // echo'
';print_r($schedule);echo'
'; $workSuspension = $this->getWorkSuspension($formattedDate); $dayoff = EmployeeChangeSchedule::where('dayoff_date', $formattedDate)->where('validated', 1)->where('status', 2)->first(); $employee_change_schedule = EmployeeChangeSchedule::where(fn($q) => $q->whereNull('date_to') ->where('date', $formattedDate) ->orWhere(fn($q) => $q->whereNotNull('date_to') ->where('date', '<=', $formattedDate) ->where('date_to', '>=', $formattedDate) ) ->where('status', 2) ->where('validated', 1) )->where('status', 2) ->where('validated', 1) ->where('employee_id', $employee_id)->first(); // if($employee_id=='60638') { // dd($schedule->toArray()); // } $scheduleData = []; $schedule_in = ""; $schedule_out = ""; $isRestDay = false; if(!$isAlwaysPresent) { if(!empty($dayoff)){ $isRestDay = true; $scheduleData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'schedule_in' => $schedule_in, 'schedule_out' => $schedule_out, 'cws' => 0, 'wfh' => 0, 'restday' => $isRestDay, 'duty_hours' => 0, 'holiday' => $isHoliday ? $holiday->name : null, 'holiday_type' => $isHoliday ? $holiday->holiday_type: null, ]; $data['schedule'][] = $scheduleData; } else if(!empty($employee_change_schedule)){ $startTime = Carbon::parse($formattedDate.' '.$employee_change_schedule->from_time); $endTime = Carbon::parse($formattedDate.' '.$employee_change_schedule->to_time); // Compute the difference in hours $hoursDifference = (int)$startTime->diffInHours($endTime); if($hoursDifference > 0) { $hoursDifference--; } $scheduleData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'schedule_in' => $employee_change_schedule->from_time, 'schedule_out' => $employee_change_schedule->to_time, 'cws' => 0, 'wfh' => 0, 'restday' => $isRestDay, 'duty_hours' => $hoursDifference, 'holiday' => $isHoliday ? $holiday->name : null, 'holiday_type' => $isHoliday ? $holiday->holiday_type: null, ]; $data['schedule'][] = $scheduleData; } elseif($schedule) { // if($schedule && $schedule->schedule == null) { // dd($schedule->toArray()); // } $dayOfWeek = date('l', strtotime($formattedDate)); $daysArray = explode(',', $schedule->schedule->day_off); $daysWFHArray = explode(',', $schedule->schedule->wfh); $daysCWSArray = explode(',', $schedule->schedule->cws_day); if(in_array($dayOfWeek,$daysCWSArray)) { $schedule_in = $schedule->schedule->cws_from_time; $schedule_out = $schedule->schedule->cws_to_time; } elseif(!in_array($dayOfWeek, $daysArray)) { $schedule_in = $schedule->schedule->from_time; $schedule_out = $schedule->schedule->to_time; } $isRestDay = in_array($dayOfWeek, $daysArray); $startTime = Carbon::parse($formattedDate.' '.$schedule_in); $endTime = Carbon::parse($formattedDate.' '.$schedule_out); // dd($formattedDate.' '.$schedule->schedule->from_time. ' | '.$formattedDate.' '.$schedule->schedule->to_time); // Compute the difference in hours $hoursDifference = (int)$startTime->diffInHours($endTime); if($hoursDifference > 0) { $hoursDifference--; } $scheduleData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'schedule_in' => $schedule_in, 'schedule_out' => $schedule_out, 'cws' => in_array($dayOfWeek, $daysCWSArray), 'wfh' => in_array($dayOfWeek, $daysWFHArray), 'restday' => $isRestDay, 'duty_hours' => $hoursDifference, 'holiday' => $isHoliday ? $holiday->name : null, 'holiday_type' => $isHoliday ? $holiday->holiday_type: null, ]; $data['schedule'][] = $scheduleData; ProcessedSchedule::create($scheduleData); } // if($employee_id == '1424') { // dd($scheduleData); // } } //GET WFH $wfhRecord = EmployeeWfh::whereNotNull('attachment')->where(['employee_id'=> $employee_id, 'date'=>$formattedDate, 'status'=>2, 'validated'=>1])->first(); // Get Leave $leaveHours = 0; $leave = $this->getLeave($formattedDate, $employee_id); if($leave) { $leaveHours = $leave->hours; $leaveData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'no_of_hours' => $leave->hours, 'type' => $leave->leave_id, 'without_pay' => $leave->without_pay, ]; ProcessedLeave::create($leaveData); $data['leave'][] = $leaveData; } // $this->addLeaveData($data, $leave, $formattedDate); $ob = $this->getOB($formattedDate, $employee_id); if($ob) { $obData = [ 'ob_id' => $ob->id, 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'from_time' => $ob->from_time, 'to_time' => $ob->to_time, 'meal' => $ob->meal, 'transportation' => $ob->transportation, 'meal_amount' => $ob->meal_amount, 'transportation_amount' => $ob->transportation_amount, 'description' => $ob->description, 'destination' => $ob->destination, ]; $data['ob'][] = $obData; ProcessedOb::create($obData); } $offsetAvailment = $this->getOffsetAvailment($formattedDate, $employee_id); if($offsetAvailment) { $offsetAvailmentData = [ 'offset_availment_id' => $offsetAvailment->id, 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'from_time' => $offsetAvailment->from_time, 'to_time' => $offsetAvailment->to_time, 'description' => $offsetAvailment->description, ]; $data['offsetAvailment'][] = $offsetAvailmentData; ProcessedOffsetAvailment::create($offsetAvailmentData); } // Check Tardiness $halfDayLeave = $leave && $leave->half_day == 1; $tardiness = $this->getTardiness($timelogs, $schedule, $halfDayLeave, $ob, $offsetAvailment, $employee->classification_id); if($tardiness && $tardiness < 60) { $tardinessData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'schedule_in' => $scheduleData['schedule_in'] ?? null, 'schedule_out' => $scheduleData['schedule_out'] ?? null, 'time_in' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='I')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : '', 'time_out' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : '', 'no_of_minutes' => $tardiness, ]; $data['tardiness'][] = $tardinessData; ProcessedTardiness::create($tardinessData); } // $this->addTardinessData($data, $tardiness, $formattedDate); // Get Undertime $undertime = $this->getUndertime($timelogs, $schedule, $workSuspension, $formattedDate, $ob, $offsetAvailment, $wfhRecord, $halfDayLeave); $undertime_minutes = 0; if($tardiness && $tardiness >= $payrollSetting->undertime_minute_from) { $undertime_minutes = $tardiness; } if($undertime) $undertime_minutes += $undertime; if($undertime_minutes > 0) { $undertimeData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'schedule_in' => $scheduleData['schedule_in'] ?? null, 'schedule_out' => $scheduleData['schedule_out'] ?? null, 'time_in' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='I')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, 'time_out' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, 'no_of_minutes' => $undertime_minutes, ]; ProcessedUndertime::create($undertimeData); $data['undertime'][] = $undertimeData; } // if ($formattedDate == '2024-12-23' && $employee_id == '1922') { // dd($data['undertime']); // } // Get Overtime and holiday pay $time_in = $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='I')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('Y-m-d H:i:s'))->first() : null; $time_out = $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('Y-m-d H:i:s'))->first() : null; $hoursWorked = 0; $regularHoursWorked = 0; $hoursOT = 0; $holidayRestdayHours = 0; if($time_in && $time_out) { $timeIn = Carbon::parse($time_in); $timeOut = Carbon::parse($time_out); $schedIn = !$isRestDay ? Carbon::parse($formattedDate.' '.$schedule_in) : null; $schedOut = !$isRestDay ? Carbon::parse($formattedDate.' '.$schedule_out) : null; // Set the start of work to the scheduled time-in if time-in is earlier than schedule if ($schedIn && $timeIn->lt($schedIn)) { $timeIn = $schedIn; } // Calculate hours worked between adjusted time-in and time-out $hoursWorked = (int)$timeIn->diffInHours($timeOut); if($hoursWorked>8) { $hoursWorked--; } if($schedOut) { /**get regular hours worked */ if($timeOut->lt($schedOut)) { $regularHoursWorked = (int)$timeIn->diffInHours($timeOut); $holidayRestdayHours = (int)$timeIn->diffInHours($timeOut); } else { $regularHoursWorked = (int)$timeIn->diffInHours($schedOut); $holidayRestdayHours = (int)$timeIn->diffInHours($schedOut); } if($holidayRestdayHours > 8) { $holidayRestdayHours--; } // Check if time-out is beyond the scheduled time-out for overtime calculation if ($timeOut->gt($schedOut)) { $interval = $schedOut->diff($timeOut); $minutes = (int) ltrim($interval->format('%i'), '0'); if($minutes >= $payrollSetting->overtime_minute_from) { /**if OT hours is equal or exceeds the minimum OT hours */ $hoursOT = (int)$schedOut->diffInHours($timeOut); } } if($regularHoursWorked > 8) { $regularHoursWorked--; } } else { $holidayRestdayHours = (int)$timeIn->diffInHours($timeOut); if($holidayRestdayHours > 8) { if($holidayRestdayHours > 9) { $hoursOT = $holidayRestdayHours - 9; } $holidayRestdayHours = 8; } } /**IF OT hours exceeds the MAX OT based on payroll settings */ if($hoursOT > 0 && $hoursOT > ceil($payrollSetting->overtime_minute_to/60)) { $hourOT = ceil($payrollSetting->overtime_minute_to/60); } } $holidayData = []; if($isHoliday && $timelogs->isNotEmpty() && $holidayRestdayHours > 0) { $regularhoursWorked = 0; /**reset regular hours, set holiday hours instead */ DB::enableQueryLog(); $holidaySetting = PremiumOvertimePaySetting::where([ 'isRestday' => $scheduleData['restday'] ?? 0, 'holiday_type_id' => $holiday->holiday_type ?? null, 'isOvertime' => 0 ])->first(); // if($employee_id == 60653 && !$holidaySetting) // { // dd(DB::getQueryLog()); // } $holidayData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'payment_setting_id' => $holidaySetting->id, 'payment_setting_name' => $holidaySetting->name, 'holiday_name' => $holiday->name, 'holiday_type' => $holiday->holiday_type, 'percentage' => $holidaySetting->percentage, 'no_of_hours' => $holidayRestdayHours, 'schedule_in' => $scheduleData['schedule_in'] ?? null, 'schedule_out' => $scheduleData['schedule_out'] ?? null, 'time_in' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='I')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, 'time_out' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, ]; $data['holiday'][] = $holidayData; ProcessedHolidayRestdayDuty::create($holidayData); } $overtime = $this->getOvertime($formattedDate, $employee_id); $overtimeData = []; if($overtime && $timelogs->isNotEmpty() && $overtime->charge_to == $company_id && !empty($scheduleData)) { // if($employee_id==60653 && $formattedDate=='2024-09-10') { // dd($overtime); // } DB::enableQueryLog(); $overtimeSetting = PremiumOvertimePaySetting::where([ 'isRestday' => $scheduleData['restday'] ?? 0, 'holiday_type_id' => $holidayData['type'] ?? null, 'isOvertime' => true ])->first(); // if($employee_id == '60623') { dd(DB::getQueryLog()); } // dd($formattedDate.' '.$schedule->schedule->from_time. ' | '.$formattedDate.' '.$schedule->schedule->to_time); // Compute the difference in hours /**IF RESTDAY DUTY */ if(isset($scheduleData['restday']) && $scheduleData['restday']==1) { $regularhoursWorked = 0; /**reset regular hours, set restday duty hours instead */ $holidaySetting = PremiumOvertimePaySetting::where([ 'isRestday' => 1, 'holiday_type_id' => $holiday->holiday_type ?? null, 'isOvertime' => 0 ])->first(); $holidayData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'no_of_hours' => $overtime->hours < $holidayRestdayHours ? $overtime->hours : $holidayRestdayHours, 'payment_setting_id' => $holidaySetting->id, 'payment_setting_name' => $holidaySetting->name, 'holiday_name' => $holiday->name ?? null, 'holiday_type' => $holiday->holiday_type ?? null, 'percentage' => $holidaySetting->percentage, 'schedule_in' => $scheduleData['schedule_in'] ?? null, 'schedule_out' => $scheduleData['schedule_out'] ?? null, 'time_in' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='I')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, 'time_out' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, ]; $data['holiday'][] = $holidayData; // if($employee_id=='2245' && $formattedDate=='2024-12-29') dd($data['holiday']); ProcessedHolidayRestdayDuty::create($holidayData); } if($hoursOT > 0) { $overtimeData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'no_of_hours' => $overtime->hours < $hoursOT ? $overtime->hours : $hoursOT, 'payment_setting_id' => $overtimeSetting->id, 'payment_setting_name' => $overtimeSetting->name, 'percentage' => $overtimeSetting->percentage, 'schedule_in' => $scheduleData['schedule_in'] ?? null, 'schedule_out' => $scheduleData['schedule_out'] ?? null, 'time_in' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='I')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, 'time_out' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, 'meal' => $overtime->meal, 'transportation' => $overtime->transportation, 'meal_amount' => $overtime->meal_amount, 'transportation_amount' => $overtime->transportation_amount, ]; $data['overtime'][] = $overtimeData; ProcessedOvertime::create($overtimeData); } } // $this->addOvertimeData($data, $overtime, $formattedDate); /**Night Differential */ if($time_out) { $nightDifferentialTime = Carbon::parse($formattedDate. $payrollSetting->night_differential_from); $timeOutTime = Carbon::parse($time_out); $night_diff_hours = 0; if($nightDifferentialTime->lt($timeOutTime)) { $night_diff_hours = (int)$nightDifferentialTime->diffInHours($timeOutTime); } if($night_diff_hours > 0) { $nightDiffData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'no_of_hours' => $night_diff_hours, 'payment_setting_id' => $holidayData['payment_setting_id'] ?? 0, 'payment_setting_name' => $holidayData['payment_setting_name'] ?? null, 'percentage' => ($holidayData['percentage'] ?? 100) * ($payrollSetting->night_differential_rate/100), 'schedule_in' => $scheduleData['schedule_in'] ?? null, 'schedule_out' => $scheduleData['schedule_out'] ?? null, 'time_in' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='I')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, 'time_out' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, ]; $data['night_differential'][] = $nightDiffData; ProcessedNightDifferential::create($nightDiffData); } } // Check Tardiness $halfDayLeave = $leave && $leave->half_day == 1; if(!$isAlwaysPresent){ $tardiness = $this->getTardiness($timelogs, $schedule, $halfDayLeave, $ob, $offsetAvailment, $employee->classification_id); if($tardiness && $tardiness < 60) { $tardinessData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'schedule_in' => $scheduleData['schedule_in'] ?? null, 'schedule_out' => $scheduleData['schedule_out'] ?? null, 'time_in' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='I')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : '', 'time_out' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : '', 'no_of_minutes' => $tardiness, ]; $data['tardiness'][] = $tardinessData; ProcessedTardiness::create($tardinessData); } // $this->addTardinessData($data, $tardiness, $formattedDate); // Get Undertime $undertime = $this->getUndertime($timelogs, $schedule, $workSuspension, $formattedDate, $ob, $offsetAvailment, $wfhRecord, $halfDayLeave); $undertime_minutes = 0; if($tardiness && $tardiness >= $payrollSetting->undertime_minute_from) { $undertime_minutes = $tardiness; } if($undertime) $undertime_minutes += $undertime; if($undertime_minutes > 0) { $undertimeData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'schedule_in' => $scheduleData['schedule_in'] ?? null, 'schedule_out' => $scheduleData['schedule_out'] ?? null, 'time_in' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='I')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, 'time_out' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='O')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='O')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, 'no_of_minutes' => $undertime_minutes, ]; ProcessedUndertime::create($undertimeData); $data['undertime'][] = $undertimeData; } // Check for Absenfce // if($employee_id==60653) { // dd(['date'=>$formattedDate, 'timelogsCount' => !$timelogs->count(), '!leave' => !$leave, '!holiday'=>!$holiday, 'schedule'=>$schedule]); // } if (!$timelogs->count() && !$leave && (!$isHoliday || $isAbsentBeforeHoliday) && $schedule && !$ob && !$offsetAvailment) { $dayOfWeek = date('l', strtotime($formattedDate)); $daysArray = explode(',', $schedule->schedule->day_off); // Convert string to array $daysWFHArray = explode(',', $schedule->schedule->wfh); /**check WFH if has DAR */ $isWFH = in_array($dayOfWeek, $daysWFHArray); $validWFH = $wfhRecord && $wfhRecord->isNotEmpty(); if (!in_array($dayOfWeek, $daysArray) && (!$isWFH || !$validWFH) && new DateTime($formattedDate) < new DateTime()) { $days_absent = 1; if($scheduleData['cws']==true) { $days_absent = $scheduleData['duty_hours'] / 8; } $absentData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'no_of_days' => $days_absent, 'schedule_in' => $scheduleData['schedule_in'], 'schedule_out' => $scheduleData['schedule_out'], 'time_in' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='I')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='I')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, 'time_out' => $timelogs && $timelogs->filter(fn($tl) => $tl->in_out=='0')->isNotEmpty() ? $timelogs->filter(fn($tl) => $tl->in_out=='0')->map(fn($tl) => Carbon::parse($tl->datetimelog)->format('H:i:s'))->first() : null, ]; ProcessedAbsent::create($absentData); $data['absent'][] = $absentData; } } } if($timelogs->isNotEmpty() && $schedule) { $dailyWorkHoursData = [ 'employee_id' => $employee_id, 'company_id' => $company_id, 'dealership_id' => $dealer_id, 'department_id' => $department_id, 'payroll_date' => $payroll_date, 'date' => $formattedDate, 'work_hours' => $regularHoursWorked, 'holiday_restday_hours' => $holidayRestdayHours, 'ot_hours' => $hoursOT, 'leave_hours' => $leaveHours, ]; $data['dailyWorkHours'][] = $dailyWorkHoursData; ProcessedDailyWorkHours::create($dailyWorkHoursData); } // $this->addAbsenceData($data, $timelogs, $leave, $holiday, $schedule, $formattedDate); // Check if present if ($this->isPresent($timelogs, $leave, $holiday, $schedule, $formattedDate)) { $presentDays++; $data['days_present'][] = $formattedDate; } /**Update the requests as processed */ EmployeeLeave::where('employee_id', $employee_id)->where('status', 2)->where('date_from','<=',$formattedDate)->where('date_to', '>=', $formattedDate)->update(['processed' => 1]); EmployeeOvertime::where('employee_id', $employee_id)->where('status', 2)->where('date_from','<=',$formattedDate)->where('date_to', '>=', $formattedDate)->update(['processed' => 1]); EmployeeOb::where('employee_id', $employee_id)->where('status', 2)->where('date_from','<=',$formattedDate)->where('date_to', '>=', $formattedDate)->update(['processed' => 1]); EmployeeOffset::where('employee_id', $employee_id)->where('status', 2)->where('date_from','<=',$formattedDate)->where('date_to', '>=', $formattedDate)->update(['processed' => 1]); EmployeeTimeAdjustment::where('employee_id', $employee_id)->where('status', 2)->where('date', $formattedDate)->update(['processed' => 1]); EmployeeChangeSchedule::where('employee_id', $employee_id)->where('status', 2)->where('validated', 1)->where('date', $formattedDate)->update(['processed' => 1]); // EmployeeOffset::where('employee_id', $employee_id)->where('status', 2)->where('date_from','<=',$formattedDate)->where('date_to', '>=', $formattedDate)->update(['processed' => 1]); } $data['workDays'] = $presentDays; // dd($presentDays); DB::commit(); return response()->json($data); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => $e->getMessage() // 'message' => 'Unable to process request. Please try again.', // 'data' => $e->getMessage() ], 422); } } } PKyZή+Http/Controllers/API/v1/GroupController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = Group::with('dealership')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('groups')->whereNull('deleted_at') ] ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Group::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = Group::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } $validator = Validator::make($request->all(), [ 'name' => [ 'required', 'min:2', Rule::unique('groups')->ignore($id)->whereNull('deleted_at') ] ] ); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = Group::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZXp$$1Http/Controllers/API/v1/PayrollDateController.phpnu[input('keyword', null); if($keyword) $keyword = str_replace(' ','%', $keyword); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', null); $sortType = $request->input('sortType', null); $data = PayrollDate::with(['company','dealership']) ->when($keyword, fn($q) => $q->whereHas('company', fn($qc) => $qc->where('name', 'like', '%'.$keyword.'%'))->orWhereHas('dealership', fn($qc) => $qc->where('name', 'like', '%'.$keyword.'%'))) ->when($sortBy, fn ($q) => $q->orderBy($sortBy, $sortType)) ->orderBy('payroll_date') ->paginate($perPage); return response()->json($data); } /** * Store a newly created resource in storage. */ public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'payroll_date' => 'required|date_format:Y-m-d', ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], 422); } DB::connection()->beginTransaction(); try { PayrollDate::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (\Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } /** * Store a batch of newly created resource in storage. */ public function storeBatch(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'start_month' => 'required|date_format:Y-m', 'end_month' => 'required|date_format:Y-m|after_or_equal:start_month', 'days' => 'required|array', 'days.*' => 'integer|min:1|max:31', // Days as integers (1-31 to handle months with different day ranges) ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], 422); } DB::connection()->beginTransaction(); try { $startMonth = Carbon::parse($request['start_month'] . '-01'); $endMonth = Carbon::parse($request['end_month'] . '-01'); $selectedDays = $request['days']; // Day numbers $dates = []; // Loop through each month in the range for ($month = $startMonth; $month->lte($endMonth); $month->addMonth()) { $daysInMonth = $month->daysInMonth; // Loop through each selected day and validate if it exists in the current month foreach ($selectedDays as $day) { if ($day <= $daysInMonth) { $currentDate = $month->copy()->day($day); $dates[] = $currentDate->format('Y-m-d'); } } } foreach($dates as $date) { $data = array_merge( $request->only(['company_id','dealership_id']), [ 'payroll_date' => $date ] ); PayrollDate::create($data); } DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (\Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } /** * Display the specified resource. */ public function show(PayrollDate $cutoffSetting) { // } /** * Update the specified resource in storage. */ public function update(Request $request, int $id) { $data = PayrollDate::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } // Validate the incoming request data $validator = Validator::make($request->all(), [ 'payroll_date' => 'required|date_format:Y-m-d', ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], 422); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } /** * Remove the specified resource from storage. */ public function destroy(int $id) { $data = PayrollDate::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); try { $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function getCutOff(Request $request) { $company_id = $request->company_id; $payroll_date = $request->payroll_date; $salary_date = Carbon::parse($payroll_date)->format('j'); $cut_off = \App\Models\CutoffSetting::where(fn($q) => $q->where('company_id', $company_id)->orWhereNull('company_id')) ->where('salary_day', $salary_date) ->first(); $start_month = Carbon::parse($payroll_date)->format('Y-m'); // Adjust the logic based on the cutoff days if ($cut_off->day_start > $cut_off->day_end) { // When day_start is greater than day_end, start_month should be the previous month $start_month = Carbon::parse($start_month . '-01')->subMonth()->format('Y-m'); $end_month = Carbon::parse($start_month . '-01')->addMonth()->format('Y-m'); } else { // Otherwise, use the current month for both start and end $end_month = $start_month; } // Construct and format day_start and day_end with Y-m-d $day_start_date = Carbon::parse($start_month . '-' . $cut_off->day_start); $day_end_date = Carbon::parse($end_month . '-' . $cut_off->day_end); // Generate array of dates from start to end $date_range = []; $current_date = $day_start_date->copy(); while ($current_date->lte($day_end_date)) { $date_range[] = $current_date->format('Y-m-d'); $current_date->addDay(); // Increment by 1 day } return response()->json([ 'cut_off' => $cut_off->cut_off, 'start_date' => $day_start_date->format('Y-m-d'), 'end_date' => $day_end_date->format('Y-m-d'), 'date_range' => $date_range ]); } } PKyZm00,Http/Controllers/API/v1/ImportController.phpnu[input('data'); $formData = $request->input('formData'); $attachmentName = ""; try { if (isset($formData['attachment']['preview'])) { $fileData = $formData['attachment']['preview']; if (preg_match('/^data:\w+\/\w+;base64,/', $fileData)) { $fileData = base64_decode(substr($fileData, strpos($fileData, ',') + 1)); } else { $fileData = $fileData; } // Generate a unique name and store the file $attachmentName = time() . '_imported_file.dat'; $path = "import-timelogs/" . $attachmentName; // Save file content Storage::disk('local')->put($path, $fileData); } // Save main record in the database $status = Import::create([ 'name' => $formData['name'], 'attachment' => $attachmentName, 'uploaded_by' => $formData['uploaded_by'], ]); DB::commit(); ImportTimelogsJob::dispatch($timelogs); // Dispatch job with timelogs return response()->json([ 'message' => 'Records are being processed.', 'status' => 'success', ], 201); } catch (Throwable $e) { DB::rollBack(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], Response::HTTP_INTERNAL_SERVER_ERROR); } } } PKyZ~m<8Http/Controllers/API/v1/DeductionFrequencyController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = DeductionFrequency::with('payroll_item')->where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('payroll_item_id', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'payroll_item_id' => [ Rule::unique('deduction_frequencies')->whereNull('deleted_at') ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = DeductionFrequency::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { // Find the DeductionFrequency by its ID $data = DeductionFrequency::findOrFail($id); /** If not exists return with error message */ if (!$data) { return response()->json(['message' => 'Record not found.'], Response::HTTP_UNPROCESSABLE_ENTITY); } // Validate the incoming request data $validator = Validator::make($request->all(), [ 'payroll_item_id' => [ Rule::unique('deduction_frequencies')->whereNull('deleted_at') ], ]); /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = DeductionFrequency::find($id); if(!$data) { return response()->json(['message' => "Record not found!",204]); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],200); } } PKyZ;?M M 1Http/Controllers/API/v1/LeaveLedgerController.phpnu[input('keyword', ''); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $keyword = str_replace(" ", "%", $keyword); DB::enableQueryLog(); $data = LeaveLedger::with([ 'employee' => fn($employee) => $employee->select('id', 'employee_id', DB::raw('CONCAT(firstname, " ", lastname) as full_name')), 'leave_type' => fn($leave_type) => $leave_type->select('id', 'name', 'enabled'), 'recommending' => fn($recommending) => $recommending->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), 'approving'=> fn($approving) => $approving->select('employee_id', 'asa_user_id', 'firstname', 'lastname'), ]) ->select( 'id', 'employee_id', 'company_id', 'dealer_id', 'leave_id', 'date_from', 'date_to', 'credits_from', 'credits_to', 'credit', 'hours', 'leave_type', 'leave_name', 'date_applied', ) ->where(function ($query) use ($keyword) { if ($keyword) { $query->where('column_name', 'like', "%{$keyword}%"); } }); if ($employee->roles[0]['group_id'] != 1) { $data->where('employee_id', $employee->employee_id); } if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); // dd($data); $response = [ 'data' => $data ]; return response()->json($response); } public function show(Request $request, $employee_id){ $data = LeaveLedger::where('employee_id', $employee_id)->get(); return response()->json($data); } } PKyZr8 8 1Http/Controllers/API/v1/SalaryGradeController.phpnu[input('keyword', ''); $perPage = $request->input('per_page',PHP_INT_MAX); $sortBy = $request->input('sortBy', ''); $sortType = $request->input('sortType', ''); $data = SalaryGrade::where(function ($query) use ($keyword) { $keyword = str_replace(" ", "%", $keyword); $query->where('name', 'like', '%' . $keyword . '%') ->orWhere('code', 'like', '%' . $keyword . '%'); }); if (!empty($sortBy) && !empty($sortType)) { $data = $data->orderBy($sortBy, $sortType); } $data = $data->paginate($perPage); return response()->json($data); } public function store(Request $request) { // Validate the incoming request data $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|unique:employment_types,name' ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = SalaryGrade::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function update(Request $request, int $id) { $data = SalaryGrade::where('id', $id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function destroy(int $id) { $data = SalaryGrade::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } } PKyZf'CNN-Http/Controllers/API/v1/PayrollController.phpnu[input('keyword', null); if($keyword) $keyword = str_replace(' ','%', $keyword); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', null); $sortType = $request->input('sortType', null); $data = Payroll::with(['company','dealership']) ->when($keyword, fn($q) => $q->whereHas('company', fn($qc) => $qc->where('name', 'like', '%'.$keyword.'%'))->orWhereHas('dealership', fn($qc) => $qc->where('name', 'like', '%'.$keyword.'%'))->orWhere('payroll_date', 'like', $keyword.'%')) ->when($sortBy, fn ($q) => $q->orderBy($sortBy, $sortType)) ->paginate($perPage); return response()->json($data); } /** * Store a newly created resource in storage. */ public function store(Request $request) { DB::connection()->beginTransaction(); try { $where = ['company_id' => $request->company_id, 'dealership_id' => $request->dealership_id, 'payroll_date' => $request->payroll_date]; $data = Payroll::where($where)->first(); if(!$data) { $prefix = join('-',[ 'PYRL', \App\Models\Dealership::find($request->dealership_id)->code ]); /**get reference code */ do { $reference_no = CommonHelper::generateReferenceCode($prefix); } while (Payroll::where('reference_no',$reference_no)->exists()); $data = Payroll::create(array_merge( $request->except(['details']), [ 'reference_no' => $reference_no ] )); } $data->touch(); /**Delete SUMMARY if any */ PayrollSummary::where($where)->delete(); foreach($request->details as $detail) { PayrollSummary::create(array_merge( $detail, [ 'payroll_id' => $data->id, 'reference_no' => $data->reference_no, ] )); } DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', 'data' => $data ],201); } catch (\Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } /** * Display the specified resource. */ public function show(int $id) { DB::enableQueryLog(); $data = PayrollSummary::with(['employee'])->where('payroll_id', $id)->get(); // dd(DB::getQueryLog()); return response()->json($data, 200); } /** * Display the specified resource. */ public function getSummary(Request $request, string $payroll_date) { DB::enableQueryLog(); $company_id = $request->company_id; $posted = AttendancePosting::where(['payroll_date' => $payroll_date, 'company_id' => $company_id])->whereNotNull('posted_at')->first(); $data = AttendancePostingDtls::select('dealership_id', 'department_id') ->whereHas('header', fn($q) => $q->where(['payroll_date' => $payroll_date, 'company_id' => $company_id])) ->distinct() ->orderBy('dealership_id') ->orderBy('department_id') ->get() // Fetch all records ->map(function ($item) use ($posted) { $item->posted_status = $posted ? true : false; return $item; }); // dd(DB::getQueryLog()); return response()->json($data, 200); } /** * Remove the specified resource from storage. */ public function destroy(int $id) { $data = AttendancePosting::find($id); if(!$data) { return response()->json(['message' => "Record not found!"],204); } DB::connection()->beginTransaction(); try { $data->delete(); DB::connection()->commit(); return response()->json(['message' => "Record successfully deleted!"],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function payrollDates(Request $request) { $company_id = $request->input('company_id'); $dealership_id = $request->input('dealership_id'); try { $payroll_dates = PayrollDate::where(fn($q) => $q->where('company_id', $company_id)->orWhereNull('company_id')) ->where(fn($q) => $q->where('dealer_id', $dealership_id)->orWhereNull('dealer_id')) ->whereNotExists(fn($q) => $q->select(DB::raw(1)) ->from('payrolls') ->whereRaw('payrolls.payroll_date = payroll_dates.payroll_date') // ->whereRaw('payrolls.company_id = payroll_dates.company_id') // ->whereRaw('payrolls.dealership_id = payroll_dates.dealer_id') ->where('payrolls.company_id', $company_id) ->where('payrolls.dealership_id', $dealership_id) ->whereNotNull('payrolls.posted_at') ) ->whereExists(fn($q) => $q->select(DB::raw(1)) ->from('attendance_postings') ->whereRaw('attendance_postings.payroll_date = payroll_dates.payroll_date') // ->whereRaw('attendance_postings.company_id = payroll_dates.company_id') // ->whereRaw('attendance_postings.dealership_id = payroll_dates.dealer_id') ->where('attendance_postings.company_id', $company_id) ->where('attendance_postings.dealership_id', $dealership_id) ->whereNotNull('attendance_postings.posted_at') ->whereNull('attendance_postings.released_at') )->get(); return response()->json($payroll_dates, 200); } catch (Throwable $e) { return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } public function adjustmentsAndDeductions(Request $request) { $cut_off = $request->input('cut_off'); $cut_off_start = $request->input('cut_off_start'); $cut_off_end = $request->input('cut_off_end'); $company_id = $request->input('company_id'); $dealership_id = $request->input('dealership_id'); DB::enableQueryLog(); $data = AdjustmentsAndDeductions::with([ 'employee' => fn($q) => $q->select('employee_id', 'firstname', 'middlename', 'lastname'), 'payroll_item' => fn($q) => $q->select('id', 'code', 'name', 'add_less', 'taxable', 'thirteenth_month') ]) ->where([ 'company_id' => $company_id, 'dealer_id' => $dealership_id, 'enabled' => 1 ]) ->where(fn($q) => $q->where('frequency', $cut_off == '1st' ? 1 : 2)->orWhere('frequency', 3)) ->where(function($q) use ($cut_off_start, $cut_off_end) { $q->where(function($q) use ($cut_off_start, $cut_off_end) { $q->where('recurring', 1) ->where('date_from', '<=', $cut_off_start)->where('date_to', '>=', $cut_off_end); }) ->orWhere(function($q) use ($cut_off_start, $cut_off_end) { $q->where('recurring', 0) ->whereBetween('date_from', [$cut_off_start, $cut_off_end]) ->whereBetween('date_to', [$cut_off_start, $cut_off_end]); }); }) ->get(); // dd(DB::getQueryLog()); return response()->json($data); } public function computePayroll(Request $request) { $payroll_date = $request->input('payroll_date'); $employee_id = $request->input('employee_id'); $company_id = $request->input('company_id'); $dealership_id = $request->input('dealership_id'); $cut_off = $request->input('cut_off','1st'); $cut_off_start = $request->input('cut_off_start',null); $cut_off_end = $request->input('cut_off_end',null); $work_days = $request->input('work_days', 0); $work_hours = $request->input('work_hours', 0); $leave_hours = $request->input('leave_hours', 0); $minutes_late = $request->input('minutes_late', 0); $minutes_undertime = $request->input('minutes_undertime', 0); $days_absent = $request->input('days_absent', 0); $overtime_totals = $request->input('overtime_totals',null); $night_diff_totals = $request->input('night_diff_totals',null); $holiday_totals = $request->input('holiday_totals',null); $adjustments = $request->input('adjustments', null); $prevPayroll = null; if($cut_off=='2nd') { $prevPayroll = PayrollSummary::where([ 'company_id' => $company_id, 'dealership_id' => $dealership_id, 'employee_id' => $employee_id, 'cut_off' => '1st', ]) ->whereHas('payroll', fn($q) => $q->whereNotNull('posted_at')) ->orderBy('payroll_date', 'desc')->first(); } $payrollSetting = PayrollSetting::first(); $salary = SalaryAndWages::where('employee_id', $employee_id)->first(); $shields = !empty($salary->shields) ? json_decode($salary->shields) : null; $totalWorkingDays = $payrollSetting->working_days_per_year; $salaryRate = $salary ? floatval($salary->salary_rate) : 0; $colaRate = $salary ? floatval($salary->cola) : 0; $dailyRate = $salary->payroll_rate == 'Monthly' ? ($salaryRate*12)/$totalWorkingDays : $salaryRate; $hourlyRate = $dailyRate/8; $cola = $colaRate * $work_days; // dd(['dailyRate:'.$dailyRate.' hourly:'.$hourlyRate]); $leave_pay = $leave_hours * $hourlyRate; $basic_pay = $salary->payroll_rate == 'Monthly' ? ($salaryRate/2) - $leave_pay : $dailyRate * $work_days; $late_amount = $minutes_late * ($hourlyRate/60); $undertime_amount = $minutes_undertime * ($hourlyRate/60); $absent_amount = floatval($days_absent) * ($dailyRate); $holiday_total = 0; $restday_total = 0; $restday_hours = 0; $overtime_total = 0; $overtime_hours = 0; $night_diff_total = 0; $night_diff_hours = 0; if($holiday_totals) { $holiday_totals = collect(json_decode($holiday_totals)); $holiday_totals = $holiday_totals->map(function ($holiday) use($hourlyRate, &$holiday_total, &$restday_total, &$restday_hours) { $paymentSetting = PremiumOvertimePaySetting::find($holiday->payment_setting_id); $amount = $holiday->no_of_hours * $hourlyRate * (($holiday->percentage-100)/100); if($paymentSetting->isRestday == 1) { $restday_total += $amount; $restday_hours += $holiday->no_of_hours; } else { $holiday_total += $amount; } return array_merge((array) $holiday, ['amount' => $amount, 'isRestday' => $paymentSetting->isRestday]); }); } $otMeal = 0; $otTranspo = 0; $otTranspoAmount = 0; if($overtime_totals) { $overtime_totals = collect(json_decode($overtime_totals)); $overtime_totals = $overtime_totals->map(function ($overtime) use($payrollSetting, $hourlyRate, &$overtime_total, &$otMeal, &$otTranspo) { $amount = $overtime->no_of_hours * $hourlyRate * ($overtime->percentage/100); $overtime_total += $amount; $otMeal += $payrollSetting->overtime_meal_amount * floor($overtime->no_of_hours/$payrollSetting->overtime_meal_every_hours); $otTranspo += $overtime->transportation ?? 0; return array_merge((array) $overtime, ['amount' => $amount]); }); $overtime_hours = $overtime_totals->sum('amount'); } if($night_diff_totals) { $night_diff_hours = $night_diff_totals->sum('amount'); $night_diff_totals = collect(json_decode($night_diff_totals)); $night_diff_totals = $night_diff_totals->map(function ($nightDiff) use($hourlyRate, &$night_diff_total) { $amount = $nightDiff->no_of_hours * $hourlyRate * ($nightDiff->percentage/100); $night_diff_total += $amount; return array_merge((array) $nightDiff, ['amount' => $amount]); }); } /**Processed OB if any */ $obMeal = 0; $obTranspo = 0; $obMealAmount = 0; $obTranspoAmount = 0; // if($employee_id=='60623') { $obMeal = ProcessedOb::where(['employee_id' => $employee_id, 'payroll_date'=>$payroll_date])->whereNotNull('header_id')->whereNotNull('meal_amount')->distinct('ob_id')->count(); $obTranspo = ProcessedOb::where(['employee_id' => $employee_id, 'payroll_date'=>$payroll_date])->whereNotNull('header_id')->whereNotNull('transportation_amount')->distinct('ob_id')->count(); DB::enableQueryLog(); $obMealAmount = ProcessedOb::where(['employee_id' => $employee_id, 'payroll_date'=>$payroll_date])->whereNotNull('header_id')->whereNotNull('meal_amount')->groupBy('ob_id')->sum('meal_amount'); // dd(DB::getQueryLog()); $obTranspoAmount = ProcessedOb::where(['employee_id' => $employee_id, 'payroll_date'=>$payroll_date])->whereNotNull('header_id')->whereNotNull('transportation_amount')->groupBy('ob_id')->sum('transportation_amount'); // dd($obMeal); // } /**BENEFITS */ $employee_benefits = EmployeeBenefits::with(['benefit'])->where('employee_id', $employee_id) ->where(fn($q) => $q->where('date_from','<=',$cut_off_end)->where(fn($q2) => $q2->where('date_to', '>=', $cut_off_start)->where('date_to','<=', $cut_off_end))) ->get(); $taxable_benefits_total = 0; $non_taxable_benefits_total = 0; $benefits = []; if($employee_benefits && $employee_benefits->isNotEmpty()) { $taxable_benefits_total = $employee_benefits->filter(fn($benefit) => $benefit['benefit']['taxable'] == 1) ->map(fn($benefit) => [ 'amount' => match($benefit['benefit']['basis']) { '1' => $benefit['amount'] / 2, '2' => $benefit['amount'] * $work_days, '3' => $benefit['amount'] * $work_hours } ]) ->sum('amount'); // dd($employee_benefits->toArray()); $non_taxable_benefits_total = $employee_benefits->filter(fn($benefit) => $benefit['benefit']['taxable'] == 0) ->map(fn($benefit) => [ 'amount' => match($benefit['benefit']['basis']) { '1' => $benefit['amount'] / 2, '2' => $benefit['amount'] * $work_days, '3' => $benefit['amount'] * $work_hours } ]) ->sum('amount'); $benefits = $employee_benefits->map(fn($benefit) => [ 'payroll_date' => $payroll_date, 'cut_off' => $cut_off, 'company_id' => $company_id, 'dealership_id' => $dealership_id, 'employee_id' => $employee_id, 'benefit_id' => $benefit['benefits_type_id'], 'benefit_name' => $benefit['benefit']['name'], 'benefit_amount' => $benefit['amount'], 'total_amount' => match($benefit['benefit']['basis']) { '1' => $benefit['amount'] / 2, '2' => $benefit['amount'] * $work_days, '3' => $benefit['amount'] * $work_hours }, 'basis' => match($benefit['benefit']['basis']) { '1' => 'cut-off', '2' => 'attendance', '3' => 'work hours' }, 'days_month' => match($benefit['benefit']['basis']) { '1' => '1/2', '2' => $work_days, }, 'addition' => $benefit['add_less'] == 1 ])->toArray(); } if($otMeal > 0) { $benefits[] = [ 'payroll_date' => $payroll_date, 'cut_off' => $cut_off, 'company_id' => $company_id, 'dealership_id' => $dealership_id, 'employee_id' => $employee_id, 'benefit_id' => 3, 'benefit_name' => 'Meal', 'benefit_amount' => $payrollSetting->overtime_meal_amount, 'total_amount' => $otMeal * $payrollSetting->overtime_meal_amount, 'basis' => 3, 'days_month' => $otMeal, 'addition' => 1, ]; $non_taxable_benefits_total += $otMeal * $payrollSetting->overtime_meal_amount; } if($otTranspo > 0) { if($payrollSetting->overtime_transpo_basis == 'fixed amount') { $benefits[] = [ 'payroll_date' => $payroll_date, 'cut_off' => $cut_off, 'company_id' => $company_id, 'dealership_id' => $dealership_id, 'employee_id' => $employee_id, 'benefit_id' => 17, 'benefit_name' => 'Transportation Allowance', 'benefit_amount' => $payrollSetting->overtime_transportation_amount, 'total_amount' => $otTranspo * $payrollSetting->overtime_transportation_amount, 'basis' => 3, 'days_month' => $otTranspo, 'addition' => 1, ]; $non_taxable_benefits_total += $otTranspo * $payrollSetting->overtime_transportation_amount; } else { $otTranspoAmount = ProcessedOvertime::where(['employee_id' => $employee_id, 'payroll_date' => $payroll_date])->whereNotNull('transportation_amount')->sum('transportation_amount'); $benefits[] = [ 'payroll_date' => $payroll_date, 'cut_off' => $cut_off, 'company_id' => $company_id, 'dealership_id' => $dealership_id, 'employee_id' => $employee_id, 'benefit_id' => 17, 'benefit_name' => 'Transportation Allowance', 'benefit_amount' => null, 'total_amount' => $otTranspoAmount, 'basis' => 3, 'days_month' => $otTranspo, 'addition' => 1, ]; $non_taxable_benefits_total += $otTranspoAmount; } } if($obMeal > 0) { $benefits[] = [ 'payroll_date' => $payroll_date, 'cut_off' => $cut_off, 'company_id' => $company_id, 'dealership_id' => $dealership_id, 'employee_id' => $employee_id, 'benefit_id' => 3, 'benefit_name' => 'Meal', 'benefit_amount' => null, 'total_amount' => $obMealAmount, 'basis' => 3, 'days_month' => $obMeal, 'addition' => 1, ]; $non_taxable_benefits_total += $obMealAmount; } if($obTranspo > 0) { $benefits[] = [ 'payroll_date' => $payroll_date, 'cut_off' => $cut_off, 'company_id' => $company_id, 'dealership_id' => $dealership_id, 'employee_id' => $employee_id, 'benefit_id' => 17, 'benefit_name' => 'Transportation Allowance', 'benefit_amount' => null, 'total_amount' => $obTranspoAmount, 'basis' => 3, 'days_month' => $obTranspo, 'addition' => 1, ]; $non_taxable_benefits_total += $obTranspoAmount; } // if($employee_id == 60653) dd($benefits); $gross_pay = $basic_pay + $leave_pay + $taxable_benefits_total + $holiday_total + $restday_total + $overtime_total + $night_diff_total - ($late_amount + $undertime_amount + $absent_amount); DB::enableQueryLog(); $sssTable = SssTable::where('compensation_from', '<=', $gross_pay + ($prevPayroll ? $prevPayroll->gross_pay : 0))->where('compensation_to', '>=', $gross_pay + ($prevPayroll ? $prevPayroll->gross_pay : 0))->first(); $sss_employee_share = 0; $sss_employer_share = 0; if($sssTable) { $sss_employee_share = $sssTable->total_ee - ($prevPayroll ? $prevPayroll->sss_employee_share : 0); $sss_employer_share = $sssTable->total_er; // if($employee_id == 69999){ // echo dd($sssTable); // } } $phicTable = PhicTable::where('salary_range', '<=',$salaryRate)->orderBy('salary_range', 'desc') ->first(); $philhealth_contribution = 0; if($phicTable) { $philhealth_contribution = ($salaryRate < 100000 ? ($salaryRate * ($phicTable->contribution_rate/100)/2) : 5000) / 2; } $pagibig_contribution = 100; $taxPeriod = $payrollSetting->tax_table_basis; $currentTaxable = $gross_pay - ($sss_employee_share + $philhealth_contribution + $pagibig_contribution); $prevTaxable = 0; if($taxPeriod=="monthly") { $prevTaxable = $prevPayroll ? $prevPayroll->taxable_amount : 0; } $taxable_amount = $currentTaxable + $prevTaxable; DB::enableQueryLog(); $taxTable = TaxTable::where('period', $taxPeriod) ->whereRaw('CAST(compensation_range AS DECIMAL(10, 2)) <= ?', [(float) $taxable_amount]) ->orderByRaw('CAST(compensation_range AS DECIMAL(10, 2)) DESC') ->first(); // $taxTable = TaxTable::where('period', $taxPeriod)->where('compensation_range', '<=', $taxable_amount)->orderBy('compensation_range', 'desc')->first(); // if($employee_id==60699){ // // dd(DB::getQueryLog()); // dd($taxTable); // } // dd($taxTable); $withholding_tax = 0; if($taxable_amount > 0 && $taxTable) { $basicTax = $taxTable->prescribed_withholding_tax; $compensationRange = $taxTable->compensation_range; $taxPercentage = $taxTable->percentage > 0 ? $taxTable->percentage/100 : 0; $addtlTax = $taxable_amount > $compensationRange ? ($taxable_amount - $compensationRange) * $taxPercentage : 0; if($taxPeriod=='monthly') { $withholding_tax = $basicTax + $addtlTax - ($prevPayroll ? $prevPayroll->withholding_tax : 0); } else { $withholding_tax = $basicTax + $addtlTax; } } // $taxable_amount = $taxable_amount - ($prevPayroll ? $prevPayroll->taxable_amount : 0); $income_after_tax = $currentTaxable - $withholding_tax; $non_taxable_additions = 0; //allowances and other benefits $non_taxable_deductions = 0; //loans, adjustments, etc /**get loans */ $loans=[]; $loans_total = 0; $employee_loans = EmployeeLoan::with(['loan']) ->where('employee_id', $employee_id) ->where('balance', '>', 0) ->where(fn($q)=> $q->where('frequency',$cut_off=='1st' ? 1 : 2)->orWhere('frequency',3)) ->where('effectivity_date', '<=', $cut_off_start) ->whereNotExists(fn($q) => $q->select(DB::raw(1)) ->from('loan_paused_histories') ->whereRaw('loan_paused_histories.employee_loan_id = employee_loans.id') ->where('loan_paused_histories.enabled', 1) ->where('loan_paused_histories.date_pause', '<=', $cut_off_end) ->where(fn($q2) => $q2->where('date_resume','<=',$cut_off_end)->orWhereNull('date_resume')) ) ->get(); if($employee_loans && $employee_loans->isNotEmpty()) { $loans = $employee_loans->map(fn($loan) => [ 'payroll_date' => $payroll_date, 'cut_off' => $cut_off, 'company_id' => $company_id, 'dealership_id' => $dealership_id, 'employee_id' => $employee_id, 'employee_loan_id' => $loan['id'], 'loan_type_id' => $loan['loan_id'], 'loan_type_name' => $loan['loan']['name'], 'amount' => match($loan['frequency']) { '3' => (($loan['monthly'] / 2) < $loan['balance']) ? $loan['monthly']/2 : $loan['balance'], default => $loan['month'] < $loan['balance'] ? $loan['monthly'] : $loan['balance'], }, ]); $loans_total = $loans->sum('amount'); } $adjustment_totals = 0; $other_deductions = 0; $adjustments = collect($adjustments); if($adjustments->isNotEmpty()) { $adjustment_totals = $adjustments->filter(fn($adjustment) => $adjustment['payroll_item']['add_less'] == 1)->sum('amount'); $other_deductions = $adjustments->filter(fn($adjustment) => $adjustment['payroll_item']['add_less'] == 2)->sum('amount'); } $non_taxable_additions += $adjustment_totals + $non_taxable_benefits_total; $non_taxable_deductions += $other_deductions + $loans_total; $net_pay = 0; if($salaryRate > 0) { $net_pay = $income_after_tax + $non_taxable_additions - $non_taxable_deductions; /**Add back shields to net pay */ if(isset($shields->tax) && $shields->tax==1) { $net_pay += $withholding_tax; } if(isset($shields->sss) && $shields->sss==1) { $net_pay += $sss_employee_share; } if(isset($shields->pagibig) && $shields->pagibig==1) { $net_pay += $pagibig_contribution; } if(isset($shields->philhealth) && $shields->philhealth==1) { $net_pay += $philhealth_contribution; } } // $details = $request->details; $data = array_merge($request->except([ 'cut_off_start', 'cut_off_end', 'work_days', 'work_hours', 'leave_hours', 'minutes_late', 'minutes_undertime', 'days_absent', ]), [ 'salary_rate' => $salaryRate, 'basic_pay' => $basic_pay, 'cola' => $cola, 'leave_pay' => $leave_pay, 'other_income' => $taxable_benefits_total, 'benefits_total' => $non_taxable_benefits_total, 'holiday_total' => $holiday_total, 'restday_total' => $restday_total, 'overtime_total' => $overtime_total, 'night_diff_total' => $night_diff_total, 'late_amount' => $late_amount, 'undertime_amount' => $undertime_amount, 'absent_amount' => $absent_amount, 'loans_total' => $loans_total, 'gross_pay' => $gross_pay, 'sss_employee_share' => $sss_employee_share, 'sss_employer_share' => $sss_employer_share, 'philhealth_contribution' => $philhealth_contribution, 'pagibig_contribution' => $pagibig_contribution, 'taxable_amount' => $currentTaxable, 'withholding_tax' => $withholding_tax, 'income_after_tax' => $income_after_tax, 'adjustment_totals' => $adjustment_totals, 'other_deductions' => $other_deductions, 'net_pay' => $net_pay, 'taxTable' => $taxTable, 'details' => [ 'cut_off_start' => $cut_off_start, 'cut_off_end' => $cut_off_end, 'work_days' => $work_days, 'work_hours' => $work_hours, 'restday_hours' => $restday_hours, 'overtime_hours' => $overtime_hours, 'night_diff_hours' => $night_diff_hours, // 'holiday_hours' => $holiday_hours, 'leave_hours' => $leave_hours, 'minutes_late' => $minutes_late, 'minutes_undertime' => $minutes_undertime, 'days_absent' => $days_absent, 'adjustments' => $adjustments, 'benefits' => $benefits, 'loans' => $loans, 'overtimes' => $overtime_totals, 'holidays' => $holiday_totals, 'night_differrentials' => $night_diff_totals, ] ]); return response()->json($data); } public function myPayslips(Request $request) { $employee_id = $request->input('employee_id'); $keyword = $request->input('keyword', null); if($keyword) $keyword = str_replace(' ','%', $keyword); $perPage = $request->input('per_page', PHP_INT_MAX); $sortBy = $request->input('sortBy', null); $sortType = $request->input('sortType', null); $data = Payroll::with(['company','dealership', 'summary' => fn($q) =>$q->where('employee_id', $employee_id)->with(['employee'])]) ->whereHas('summary', fn($q) => $q->where('employee_id',$employee_id)) ->whereNotNull('released_at') ->when($keyword, fn($q) => $q->whereHas('company', fn($qc) => $qc->where('name', 'like', '%'.$keyword.'%'))->orWhereHas('dealership', fn($qc) => $qc->where('name', 'like', '%'.$keyword.'%'))->orWhere('payroll_date', 'like', $keyword.'%')->orWhere('cut_off', 'like', $keyword.'%')) ->when($sortBy, fn ($q) => $q->orderBy($sortBy, $sortType)) ->paginate($perPage); return response()->json($data); } public function employeePayslips(Request $request) { $employee_id = $request->input('employee_id'); $payroll_date = $request->input('payroll_date', null); $payslips = Payroll::with(['company','dealership']) ->whereHas('summary', fn($q) => $q->where('employee_id',$employee_id)) ->when($payroll_date, fn($q) => $q->where('payroll_date', $payroll_date)) ->whereNotNull('released_at') ->orderBy('payroll_date', 'DESC') ->get(); $data = []; $data[0] = [ 'payroll_date' => null, 'company_id' => null, 'company_name' => null, 'dealer_id' => null, 'dealer_name' => null, 'cut_off' => null, 'date_released' => null, ]; $frontend_url = env('FRONTEND_URL'); $token = env('JWT_SECRET'); if($payslips && !empty($payslips->toArray())) { $data = $payslips->map(fn($row) => [ 'payroll_date' => $row['payroll_date'], 'company_id' => $row['company_id'], 'company_name' => $row['company']['name'], 'dealer_id' => $row['dealership_id'], 'dealer_name' => $row['dealership']['name'], 'cut_off' => $row['cut_off'], 'date_released' => $row['released_at'], 'link' => $frontend_url."/view-payslip?e=".$employee_id."&p=".$row['payroll_date']."&t=".$token, ]); } return response()->json($data); } public function employeePayrollDates(Request $request) { $employee_id = $request->input('employee_id'); $year = $request->input('year', date('Y')); $data = Payroll::select('payroll_date') ->when($year, fn($q) => $q->where('payroll_date','like',$year.'%')) ->whereHas('summary', fn($q) => $q->where('employee_id',$employee_id)) ->whereNotNull('released_at') ->orderBy('payroll_date','DESC') ->get(); if($data && $data->isNotEmpty()) { $data = $data->toArray(); } else { $data = [ [ 'payroll_date'=>null, ] ]; } return response()->json($data); } public function employeePayslipDetails(Request $request) { $payroll_date = $request->input('payroll_date'); $employee_id = $request->input('employee_id'); $summary = PayrollSummary::with(['employee','payroll' => fn($q) => $q->with(['company','dealership'])])->where(['payroll_date' => $payroll_date, 'employee_id' => $employee_id])->first(); $data = []; $data[0] = [ 'employee_id' => null, 'employee_name' => null, 'payroll_date' => null, 'company_id' => null, 'company_code' => null, 'company_name' => null, 'dealer_id' => null, 'dealer_code' => null, 'dealer_name' => null, 'cut_off' => null, 'date_released' => null, 'grossPay' => null, 'deductions' => null, 'netPay' => null, 'link' => null, ]; $frontend_url = env('FRONTEND_URL'); $token = env('JWT_SECRET'); if($summary) { $salary_rate = $summary->salary_rate; $basic_pay = $summary->basic_pay; $cola = $summary->cola; $other_income = $summary->other_income; $absent_amount = $summary->absent_amount; $late_amount = $summary->late_amount; $undertime_amount = $summary->undertime_amount; $overtime_amount = $summary->overtime_total; $night_diff_amount = $summary->night_diff_total; $leave_amount = $summary->leave_pay; $holiday_amount = !empty($summary->details['holidays'] ? collect($summary->details['holidays'])->sum('amount') : 0) ; $restday_amount = $summary->restday_total; $adjustments_amount = $summary->adjustments_total; $benefits_amount = $summary->benefits_total; $total_income = $basic_pay + $cola + $other_income + $overtime_amount + $night_diff_amount + $leave_amount + $holiday_amount + $restday_amount + $adjustments_amount + $benefits_amount - ($absent_amount + $late_amount + $undertime_amount); $sss_amount = $summary->sss_employee_share; $philhealth_amount = $summary->philhealth_contribution; $pagibig_amount = $summary->pagibig_contribution; $withholding_tax = $summary->withholding_tax; $other_deductions_amount = $summary->other_deductions; $loans_amount = $summary->loans_total; $total_deductions = $sss_amount + $philhealth_amount + $pagibig_amount + $withholding_tax + $other_deductions_amount + $loans_amount; $net_pay = $summary->net_pay; $cut_off = Carbon::parse($summary->payroll->cut_off_start)->format('M j'). ' to '.Carbon::parse($summary->payroll->cut_off_end)->format('M j'); $salary_date = Carbon::parse($payroll_date)->format('M j Y'); $employee_name = $summary->employee->firstname." ".$summary->employee->lastname; $data = [ 'employee_id' => $employee_id, 'employee_name' => $employee_name, 'payroll_date' => $salary_date, 'company_id' => $summary->company_id, 'company_code' => $summary->payroll->company->code, 'company_name' => $summary->payroll->company->name, 'dealer_id' => $summary->dealership_id, 'dealer_code' => $summary->payroll->dealership->code, 'dealer_name' => $summary->payroll->dealership->name, 'cut_off' => $cut_off, 'date_released' => $summary->payroll->released_at, 'grossPay' => number_format(round($total_income,2),2), 'deductions' => number_format(round($total_deductions,2),2), 'netPay' => number_format($net_pay,2), 'link' => $frontend_url."/view-payslip?e=".$employee_id."&p=".$payroll_date."&t=".$token, ]; return response()->json($data, 200); } } public function saveFile(Request $request) { // Validate the file $request->validate([ 'file' => 'required|file|mimes:xlsx' ]); // Save the file if ($request->file('file')) { $filePath = $request->file('file')->store('generated_payrolls', 'public'); return response()->json(['message' => 'File saved successfully', 'file' => $filePath], 201); } return response()->json(['message' => 'File upload failed'], 422); } public function viewFile(Request $request) { $filename = $request->filename; $folder = $request->folder; // Define the path to the file $filePath = "public/{$folder}/{$filename}"; // Check if the file exists in storage if (Storage::exists($filePath)) { // Return the file as a stream with appropriate headers for download return Storage::download($filePath, $filename, [ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', ]); } return response()->json(['message' => 'File not found'], 422); } public function post(int $id) { $data = Payroll::find($id); if(!$data) return response()->json(['message' => 'Record not found'], 204); DB::beginTransaction(); try { $data->fill(['posted_at' => $this->current_datetime, 'posted_by' => Auth::user()->employee_id]); $data->touch(); $data->save(); DB::commit(); return response()->json(['message' => "Record successfully released!"],201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } public function release(int $id) { $data = Payroll::find($id); if(!$data) return response()->json(['message' => 'Record not found'], 204); DB::beginTransaction(); try { $data->fill(['released_at' => $this->current_datetime, 'released_by' => Auth::user()->employee_id]); $data->touch(); $data->save(); DB::commit(); return response()->json(['message' => "Record successfully released!"],201); } catch (Throwable $e) { DB::rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } PKyZ׉3'Http/Controllers/API/AuthController.phpnu[json(['message'=>'success']); $request->validate([ // 'email' => 'required|string|email', 'username' => 'required|string', 'password' => 'required|string', ]); /**CHECK USER IF EXISTING IN THE CURRENT DB */ $user = User::where('employee_id', $request->username) ->orWhere('username', $request->username) ->first(); if($user !== null){ $token = Auth::attempt(['username' => $user->username, 'password' => $request->password]); /**IF NOT SUCCESSFULL PROMPT FOR ERROR MESSAGE */ if (!$token) { return response()->json([ 'message' => 'Unauthorized', ], 401); } $user = Auth::user(); // Assuming the profile picture URL is needed, and `employee_profile_picture_url` is an accessor in the User model $profilePictureUrl = $user->employee_profile_picture; // This accessor should be defined in the User model // Add profile picture URL to user data $userData = $user->toArray(); $userData['profile_picture_url'] = $profilePictureUrl != null ? asset('storage/employee-profile/' . $profilePictureUrl->attachment) : ''; return response()->json([ 'user' => $userData, 'authorization' => [ 'token' => $token, 'type' => 'bearer', ] ]); } else { /**ELSE, CHECK IF USER EXISTS IN THE OLD DB */ $data = \App\Models\OldDB\User::where('employee_id', $request['username'])->orWhere('u_name', $request->username)->first(); /**IF RECORD EXISTS IN THE OLD DB */ if(!$data) { return response()->json([ 'message' => 'Unauthorized', ], 401); } /**CHECK IF CORRECT PASSWORD */ $valid = $data->u_password == MD5($request['password']); /** If not correct password, response with error */ if(!$valid){ return response()->json([ 'message' => 'Invalid username and/or password', ], 401); } /**If correct password begin the transaction */ DB::connection()->beginTransaction(); try { /**CREATE RECORD TO NEW DB*/ $user = User::create([ 'employee_id' => $data['employee_id'], 'name' => $data['u_fname'].' '.$data['u_lname'], 'first_name' => $data['u_fname'], 'last_name'=>$data['u_lname'], 'username'=> $data['u_name'], 'email' => $data['email'], 'email_verified_at' => $this->current_datetime, 'default_company_id' => $data['company'], 'default_dealership_id' => $data['dealer'], 'password' => Hash::make($request->password), 'created_at'=> $this->current_datetime, ]); /**Commit db changes */ DB::connection()->commit(); $credentials = $request->only('username', 'password'); /**ATTEMPT TO LOGIN */ $token = Auth::attempt($credentials); /**IF NOT SUCCESSFULL PROMPT FOR ERROR MESSAGE */ if (!$token) { return response()->json([ 'message' => 'Unauthorized', ], 401); } /**IF SUCCESSFUL RETURN DATA WITH TOKEN */ $user = Auth::user(); return response()->json([ 'user' => $user, 'authorization' => [ 'token' => $token, 'type' => 'bearer', ] ]); } catch (\Throwable $e) { /**if error */ /**rollback db changes */ DB::connection()->rollback(); return response()->json([ 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ], 422); } } } public function register(Request $request) { $request->validate([ 'username' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:6', ]); $user = User::create([ 'username' => $request->username, 'email' => $request->email, 'password' => Hash::make($request->password), ]); return response()->json([ 'message' => 'User created successfully', 'user' => $user ]); } public function logout() { Auth::logout(); return response()->json([ 'message' => 'Successfully logged out', ]); } public function refresh() { return response()->json([ 'user' => Auth::user(), 'authorization' => [ 'token' => Auth::refresh(), 'type' => 'bearer', ] ]); } public function autoLogin(int $id) { $user = User::find($id); $token = Auth::login($user); /**IF NOT SUCCESSFULL PROMPT FOR ERROR MESSAGE */ if (!$token) { return response()->json([ 'message' => 'Unauthorized', ], 401); } return response()->json([ 'user' => $user, 'authorization' => [ 'token' => $token, 'type' => 'bearer', ] ]); } } PKyZKSw7Http/Controllers/LeaveAccumulationSettingController.phpnu[get(); return response()->json($data); } } PKyZ ꆉ3Http/Controllers/NonPersonnelEmployeeController.phpnu[first(); return response()->json($data); } public function store(Request $request, string $employee_id) { // dd($request->all()); $employeeExists = Family::where('employee_id', $employee_id)->exists(); $validator = Validator::make($request->all(), [ // 'passport_id' => [ // 'required', // 'min:1', // ], ]); // dd($employeeExists); if($employeeExists){ $data = Family::where('employee_id', $employee_id)->first(); if (!$data) { return response()->json(['messages' => 'No data found.'], 404); } /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data->fill($request->all()); $data->save(); $data->touch(); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully updated!', 'status' => 'success', 'data' => $data, ], 201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } else { /** If validation fails return with error message */ if ($validator->fails()) { $errors = $validator->errors(); $first = $errors->getMessages(); return response()->json([ 'status' => false, 'message' => (reset($first))[0], 'errors' => $errors ], Response::HTTP_UNPROCESSABLE_ENTITY); } DB::connection()->beginTransaction(); try { $data = Family::create($request->all()); DB::connection()->commit(); return response()->json([ 'message' => 'Record Successfully added!', 'status' => 'success', ],201); } catch (Throwable $e) { DB::connection()->rollback(); return response()->json([ 'status' => false, 'message' => 'Unable to process request. Please try again.', 'data' => $e->getMessage() ]); } } } } PKyZJPPNotifications/Overtime.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail','database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.overtime', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject('Overtime Notification'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { $title = null; $isApprover = false; if($this->overtime->validated == 1){ $title = "Your overtime application has been received and validated by HR"; }else if($this->overtime->validated == 99){ $title = "Your overtime application has been denied by HR"; }else if($this->overtime->status == 2){ $title = "Your overtime application has been approved"; }else if($this->overtime->status == 99){ $title = "Your overtime application has been denied "; }else{ $title = $this->overtime->employee->firstname . ' ' . $this->overtime->employee->lastname." Submitted Overtime Application"; $isApprover = true; } return [ 'overtime_id' => $this->overtime->id, 'status' => $this->overtime->status, 'approved_at' => $this->overtime->approved_at, 'message' => $this->message, 'title' => $title, 'url' => $isApprover ? 'attendance/overtime-approval' : 'attendance/overtime', 'created_by' => $this->overtime->employee_id ]; } private function generateMessage(): string { $fullname = $this->overtime->employee->firstname.' '.$this->overtime->employee->lastname; $date_from = $this->overtime->date_from; $date_to = $this->overtime->date_to; $from_time = $this->overtime->from_time; $to_time = $this->overtime->to_time; $created_at = Carbon::parse($this->overtime->created_at)->setTimezone('Asia/Shanghai'); switch ($this->overtime->status) { case 1: case 0: return $fullname.' filed overtime application dated "'.$date_from. '" to "'. $date_to.'" time from "'.$from_time.'" to "'.$to_time.'" for your validation.'; case 2: if($this->overtime->validated == 1){ return 'Your overtime application dated "'.$date_from. '" to "'. $date_to.'" time from "'.$from_time.'" to "'.$to_time.'" Hours has been received and validated by HR.'; }else if($this->overtime->validated == 99){ return 'Your overtime application dated "'.$date_from. '" to "'. $date_to.'" time from "'.$from_time.'" to "'.$to_time.'" Hours has been denied by HR.'; }else{ return 'Your overtime application dated "'.$date_from. '" to "'. $date_to.'" time from "'.$from_time.'" to "'.$to_time.'" has been approved.'; } case 99: return 'Your overtime application dated "'.$date_from. '" to "'. $date_to.'" time from "'.$from_time.'" to "'.$to_time.'" has been denied.'; default: return 'Unknown status.'; } } } PKyZ$e %Notifications/BiometricConnection.phpnu[biometricNotification = $biometricNotification; } /** * Get the notification's delivery channels. */ public function via(object $notifiable): array { return ['mail', 'database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.biometric', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), 'msg' => $this->generateMessage(), 'notifiable' => $notifiable, ]) ->subject('Biometric Notification'); } /** * Get the array representation of the notification. */ public function toArray(object $notifiable): array { return [ 'success' => $this->biometricNotification['success'] ?? null, 'failure' => $this->biometricNotification['failure'] ?? null, ]; } /** * Generate the notification message. */ private function generateMessage(): string { $success = $this->biometricNotification['success'] ?? []; $failure = $this->biometricNotification['failure'] ?? []; $message = "

Biometric Operation Report Dated: ".date('Y-m-d')."

"; // Success Section $message .= "

Success:

"; if (!empty($success)) { $message .= "
    "; foreach ($success as $successData) { $deviceName = $successData['device_name'] ?? 'Unknown Device'; $ipAddress = $successData['ipaddress'] ?? 'Unknown IP'; $message .= "
  • Device: $deviceName | IP: $ipAddress
  • "; } $message .= "
"; } else { $message .= "

No successful operations reported.

"; } // Failure Section $message .= "

Failed:

"; if (!empty($failure)) { $message .= "
    "; foreach ($failure as $failureData) { $deviceName = $failureData['device_name'] ?? 'Unknown Device'; $ipAddress = $failureData['ipaddress'] ?? 'Unknown IP'; $message .= "
  • Device: $deviceName | IP: $ipAddress
  • "; } $message .= "
"; } else { $message .= "

No failed operations reported.

"; } return $message; } } PKyZ Notifications/JobApplication.phpnu[applicant = $applicant; $this->message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.jobapplication', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, ]) ->subject('Job Application Notification'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { return [ // ]; } private function generateMessage(): string { $fullname = $this->applicant->firstname . ' ' . $this->applicant->lastname; $job_title = $this->applicant->position; $cover_letter = $this->applicant->cover_letter; return "$fullname submitted an application for the position of \"$job_title\". Applicant Covert Letter: $cover_letter"; } } PKyZ 东 Notifications/TimeAdjustment.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail','database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.time_adjustment', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject('Time Adjustment Notification'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { $title = null; $isApprover = false; if($this->timeAdjustment->validated == 1){ $title = "Your time adjustment application has been received and validated by HR"; }else if($this->timeAdjustment->validated == 99){ $title = "Your time adjustment application has been denied by HR"; }else if($this->timeAdjustment->status == 2){ $title = "Your time adjustment application has been approved"; }else if($this->timeAdjustment->status == 99){ $title = "Your time adjustment application has been denied "; }else{ $title = $this->timeAdjustment->employee->firstname . ' ' . $this->timeAdjustment->employee->lastname." Submitted Time Adjustment Application"; $isApprover = true; } return [ 'time_adjustment_id' => $this->timeAdjustment->id, 'status' => $this->timeAdjustment->status, 'approved_at' => $this->timeAdjustment->approved_at, 'message' => $this->message, 'title' => $title, 'url' => $isApprover ? 'attendance/time-adjustment-approval' : 'attendance/time-adjustment', 'created_by' => $this->timeAdjustment->employee_id ]; } private function generateMessage(): string { $fullname = $this->timeAdjustment->employee->firstname.' '.$this->timeAdjustment->employee->lastname; $date = $this->timeAdjustment->date; $from_time = $this->timeAdjustment->from_time; $to_time = $this->timeAdjustment->to_time; $created_at = Carbon::parse($this->timeAdjustment->created_at)->setTimezone('Asia/Shanghai'); switch ($this->timeAdjustment->status) { case 1: case 0: return $fullname.' filed time adjustment application dated "'.$date. '" for your validation.'; case 2: if($this->timeAdjustment->validated == 1){ return 'Your time adjustment application dated "'.$date. '" has been received and validated by HR.'; }else if($this->timeAdjustment->validated == 99){ return 'Your time adjustment application dated "'.$date. '" has been denied by HR.'; }else{ return 'Your time adjustment application dated "'.$date. '" has been approved.'; } case 99: return 'Your time adjustment application dated "'.$date. '" has been denied.'; default: return 'Unknown status.'; } } } PKyZx8 Notifications/Mrf.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail', 'database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { $notifiable->url = 'recruitment/mrf'; $notifiable->encrypted_id = Crypt::encrypt($notifiable->id); // dd($notifiable); return (new MailMessage) ->view('emails.mrf', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject('MRF Request'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { return [ 'mrf_id' => $this->mrf->id, 'status' => $this->mrf->status, 'approved_at' => $this->mrf->approved_at, 'message' => $this->message, 'title' => ($this->mrf->status == 3) ? "Your MRF request has been approved" : (($this->mrf->status == 99) ? "Your MRF request has been denied" : $this->mrf->employee->firstname . ' ' . $this->mrf->employee->lastname." Submitted MRF Application" ), 'url' => 'recruitment/mrf', 'created_by' => $this->mrf->employee_id ]; } private function generateMessage(): string { $fullname = $this->mrf->employee->firstname . ' ' . $this->mrf->employee->lastname; switch ($this->mrf->status) { case 0: case 1: return $fullname.' submitted MRF for your checking'; case 3: return 'Your requested MRF has been approved'; case 2: return "MRF has been submitted for your checking."; case 99: return "Your MRF request has been denied."; default: return 'Unknown status.'; } } } PKyZt)1ww Notifications/ChangeSchedule.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail','database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.change_schedule', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject('Change Schedule Notification'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { $title = null; $isApprover = false; if($this->change_schedule->validated == 1){ $title = "Your change schedule application has been received and validated by HR"; }else if($this->change_schedule->validated == 99){ $title = "Your change schedule application has been denied by HR"; }else if($this->change_schedule->status == 2){ $title = "Your change schedule application has been approved"; }else if($this->change_schedule->status == 99){ $title = "Your change schedule application has been denied "; }else{ $title = $this->change_schedule->employee->firstname . ' ' . $this->change_schedule->employee->lastname." Submitted Leave Application"; $isApprover = true; } return [ 'change_schedule_id' => $this->change_schedule->id, 'status' => $this->change_schedule->status, 'approved_at' => $this->change_schedule->approved_at, 'message' => $this->message, 'title' => $title, 'url' => $isApprover ? 'attendance/change-schedule-approval' : 'attendance/change-schedule', 'created_by' => $this->change_schedule->employee_id ]; } private function generateMessage(): string { $fullname = $this->change_schedule->employee->firstname.' '.$this->change_schedule->employee->lastname; $date = $this->change_schedule->date; $from_time = $this->change_schedule->from_time; $to_time = $this->change_schedule->to_time; $created_at = Carbon::parse($this->change_schedule->created_at)->setTimezone('Asia/Shanghai'); switch ($this->change_schedule->status) { case 1: case 0: return $fullname.' filed change schedule application dated "'.$date. '" from "'.$from_time.'" to "'.$to_time.'" for your validation.'; case 2: if($this->change_schedule->validated == 1){ return 'Your change schedule application dated "'.$date. '" from "'.$from_time.'" to "'.$to_time.'" has been received and validated by HR.'; }else if($this->change_schedule->validated == 99){ return 'Your change schedule application dated "'.$date. '" from "'.$from_time.'" to "'.$to_time.'" has been denied by HR.'; }else{ return 'Your change schedule application dated "'.$date. '" from "'.$from_time.'" to "'.$to_time.'" has been approved.'; } case 99: return 'Your change schedule application dated "'.$date. '" from "'.$from_time.'" to "'.$to_time.'" has been denied.'; default: return 'Unknown status.'; } } } PKyZ0066Notifications/Leave.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail', 'database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.leave', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject('Leave Notification'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { $title = null; $isApprover = false; if($this->leave->validated == 1){ $title = "Your leave application has been received and validated by HR"; }else if($this->leave->validated == 99){ $title = "Your leave application has been denied by HR"; }else if($this->leave->status == 2){ $title = "Your leave application has been approved"; }else if($this->leave->status == 99){ $title = "Your leave application has been denied"; }else{ $title = $this->leave->employee->firstname . ' ' . $this->leave->employee->lastname." Submitted Leave Application"; $isApprover = true; } return [ 'leave_id' => $this->leave->id, 'status' => $this->leave->status, 'approved_at' => $this->leave->approved_at, 'message' => $this->message, 'title' => $title, 'url' => $isApprover ? 'attendance/leave-approval' : 'attendance/leave', 'created_by' => $this->leave->employee_id ]; } /** * Generate the message based on leave status. */ private function generateMessage(): string { $fullname = $this->leave->employee->firstname . ' ' . $this->leave->employee->lastname; $date_from = $this->leave->date_from; $date_to = $this->leave->date_to; $leave_type = $this->leave->leave_type->name; $created_at = Carbon::parse($this->leave->created_at)->setTimezone('Asia/Shanghai'); switch ($this->leave->status) { case 1: case 0: return "$fullname filed a $leave_type application dated \"$date_from\" to \"$date_to\" for your validation."; case 2: if($this->leave->validated == 1){ return "Your application for $leave_type dated \"$date_from\" to \"$date_to\" has been received and alidated by HR."; }else if($this->leave->validated == 99){ return "Your application for $leave_type dated \"$date_from\" to \"$date_to\" has been denied by HR."; }else{ return "Your application for $leave_type dated \"$date_from\" to \"$date_to\" has been approved."; } case 99: return "Your application for $leave_type dated \"$date_from\" to \"$date_to\" has been denied."; default: return 'Unknown status.'; } } } PKyZF&w w !Notifications/OffsetAvailment.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail', 'database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.offset_availment', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject('Offset Availment Notification'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { return [ 'offset_availment_id' => $this->offsetAvailment->id, 'status' => $this->offsetAvailment->status, 'approved_at' => $this->offsetAvailment->approved_at, 'message' => $this->message, 'title' => ($this->offsetAvailment->status == 2) ? "Your offset availment application has been approved" : (($this->offsetAvailment->status == 99) ? "Your offset availment application has been denied" : $this->offsetAvailment->employee->firstname . ' ' . $this->offsetAvailment->employee->lastname." Submitted Offset Availment Application" ), 'url' => 'attendance/offset-approval', 'created_by' => $this->offsetAvailment->employee_id ]; } private function generateMessage(): string { $fullname = $this->offsetAvailment->employee->firstname.' '.$this->offsetAvailment->employee->lastname; $date = $this->offsetAvailment->date; $hours = $this->offsetAvailment->hours; switch ($this->offsetAvailment->status) { case 1: case 0: return $fullname.' filed offset availment application dated "'.$date. '" for "'.$hours.'".'; case 2: return 'Your offset availment dated "'.$date. '" for "'.$hours.'".'; case 99: return 'Your offset availment application dated "'.$date. '" for "'.$hours.'".'; default: return 'Unknown status.'; } } } PKyZ4ʶ Notifications/Wfh.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail', 'database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.wfh', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject('wfh Notification'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { $title = null; if($this->wfh->validated == 1){ $title = "Your wfh application has been received and validated by HR"; }else if($this->wfh->validated == 99){ $title = "Your wfh application has been denied by HR"; }else if($this->wfh->status == 2){ $title = "Your wfh application has been approved"; }else if($this->wfh->status == 99){ $title = "Your wfh application has been denied "; }else{ $title = $this->wfh->employee->firstname . ' ' . $this->wfh->employee->lastname." Submitted wfh Application"; } return [ 'wfh_id' => $this->wfh->id, 'status' => $this->wfh->status, 'approved_at' => $this->wfh->approved_at, 'message' => $this->message, 'title' => $title, 'url' => ($this->wfh->status == 2) ? 'attendance/wfh' : 'attendance/wfh-approval', 'created_by' => $this->wfh->employee_id ]; } private function generateMessage(): string { $fullname = $this->wfh->employee->firstname.' '.$this->wfh->employee->lastname; $date = $this->wfh->date; $hours = $this->wfh->hours; switch ($this->wfh->status) { case 1: case 0: return $fullname.' filed wfh application dated "'.$date. '" for '.$hours.' Hours for your validation.'; case 2: if($this->wfh->validated == 1){ return 'Your wfh application dated "'.$date. '" for '.$hours.' Hours has been received and validated by HR.'; }else if($this->wfh->validated == 99){ return 'Your wfh application dated "'.$date. '" for '.$hours.' Hours has been denied by HR.'; }else{ return 'Your wfh application dated "'.$date. '" for '.$hours.' Hours has been approved.'; } case 99: return 'Your wfh application dated "'.$date. '" for '.$hours.' Hours has been denied.'; default: return 'Unknown status.'; } } } PKyZ98 Notifications/OffsetEarning.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail', 'database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.offset_earning', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject('Offset Earning Notification'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { return [ 'offset_availment_id' => $this->offsetEarning->id, 'status' => $this->offsetEarning->status, 'approved_at' => $this->offsetEarning->approved_at, 'message' => $this->message, 'title' => ($this->offsetEarning->status == 2) ? "Your offset earning application has been approved" : (($this->offsetEarning->status == 99) ? "Your offset earning application has been denied" : $this->offsetEarning->employee->firstname . ' ' . $this->offsetEarning->employee->lastname." Submitted Offset Earning Application" ), 'url' => 'attendance/offset-approval', 'created_by' => $this->offsetEarning->employee_id ]; } private function generateMessage(): string { $fullname = $this->offsetEarning->employee->firstname.' '.$this->offsetEarning->employee->lastname; $date = $this->offsetEarning->date; $hours = $this->offsetEarning->hours; switch ($this->offsetEarning->status) { case 1: case 0: return $fullname.' filed offset earning application dated "'.$date. '" for "'.$hours.'". hours'; case 2: return 'Your offset earning dated "'.$date. '" for "'.$hours.'" hours has been approved'; case 99: return 'Your offset earning application dated "'.$date. '" for "'.$hours.'" hours has been deniedd'; default: return 'Unknown status.'; } } } PKyZ^־Notifications/AsaMeeting.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail', 'database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.asameeting', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject($this->asaMeeting->meeting_title); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { $user = Auth::user(); $fullname = $user->first_name . ' ' . $user->last_name; return [ 'asa_meeting_id' => $this->asaMeeting->id, 'message' => $this->message, 'title' => $fullname.' invited you for a meeting', 'url' => 'meeting-calendar/calendar', 'created_by' => $this->asaMeeting->employee_id ]; } /** * Generate the message based on leave status. */ private function generateMessage(): string { $user = Auth::user(); $fullname = $user->first_name . ' ' . $user->last_name; return $fullname.' invited you for a meeting on '.$this->asaMeeting->start_datetime.' to '.$this->asaMeeting->end_datetime.'.'; } } PKyZs| Notifications/Undertime.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail', 'database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.undertime', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject('Undertime Notification'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { return [ 'undertime_id' => $this->undertime->id, 'status' => $this->undertime->status, 'approved_at' => $this->undertime->approved_at, 'message' => $this->message, 'title' => ($this->undertime->status == 2) ? "Your undertime application has been approved" : (($this->undertime->status == 99) ? "Your undertime application has been denied" : $this->undertime->employee->firstname . ' ' . $this->undertime->employee->lastname." Submitted Undertime Application" ), 'url' => 'attendance/undertime', 'created_by' => $this->undertime->employee_id ]; } private function generateMessage(): string { $fullname = $this->undertime->employee->firstname.' '.$this->undertime->employee->lastname; $date = $this->undertime->date; $from_time = $this->undertime->from_time; $to_time = $this->undertime->to_time; switch ($this->undertime->status) { case 1: case 0: return $fullname.' filed undertime application dated "'.$date. '" time from "'.$from_time.'" to "'.$to_time.'" for your validation.'; case 2: return 'Your undertime application dated "'.$date. '" time from "'.$from_time.'" to "'.$to_time.'" has been approved.'; case 99: return 'Your undertime application dated "'.$date. '" time from "'.$from_time.'" to "'.$to_time.'" has been denied.'; default: return 'Unknown status.'; } } } PKyZc Notifications/Travel.phpnu[message = $this->generateMessage(); } /** * Get the notification's delivery channels. * * @return array */ public function via(object $notifiable): array { return ['mail', 'database']; } /** * Get the mail representation of the notification. */ public function toMail(object $notifiable): MailMessage { return (new MailMessage) ->view('emails.travel', [ 'headerImageUrl' => asset('images/AUTOHUB25_BANNER.png'), // URL of the image 'msg' => $this->message, 'notifiable' => $notifiable, ]) ->subject('OB/Travel Notification'); } /** * Get the array representation of the notification. * * @return array */ public function toArray(object $notifiable): array { $title = null; if($this->ob->validated == 1){ $title = "Your OB application has been received and validated by HR"; }else if($this->ob->validated == 99){ $title = "Your OB applicationn has been denied by HR"; }else if($this->ob->status == 2){ $title = "Your OB application has been approved"; }else if($this->ob->status == 99){ $title = "Your OB application has been denied "; }else{ $this->ob->employee->firstname . ' ' . $this->ob->employee->lastname." Submitted OB Application"; } return [ 'leave_id' => $this->ob->id, 'status' => $this->ob->status, 'approved_at' => $this->ob->approved_at, 'message' => $this->message, 'title' => $title, 'url' => 'attendance/official-business', 'created_by' => $this->ob->employee_id ]; } private function generateMessage(): string { $fullname = $this->ob->employee->firstname.' '.$this->ob->employee->lastname; $date = $this->ob->date; $from_time = $this->ob->from_time; $to_time = $this->ob->to_time; switch ($this->ob->status) { case 1: case 0: return $fullname.' filed ob application dated "'.$date. '" time from "'.$from_time.'" to "'.$to_time.'" for your validation.'; case 2: if($this->ob->validated == 1){ return 'Your ob application dated "'.$date. '" time from "'.$from_time.'" to "'.$to_time.'" has been received and validated by HR.'; }else if($this->ob->validated == 99){ return 'Your ob application dated "'.$date. '" time from "'.$from_time.'" to "'.$to_time.'" has been denied by HR.'; }else{ return 'Your ob application dated "'.$date. '" time from "'.$from_time.'" to "'.$to_time.'" has been approved.'; } case 99: return 'Your ob application dated "'.$date. '" time from "'.$from_time.'" to "'.$to_time.'" has been denied.'; default: return 'Unknown status.'; } } } PKyZpwwJobs/ImportTimelogsJob.phpnu[timelogs = $timelogs; } public function handle() { foreach ($this->timelogs as $timelog) { Timelog::create($timelog); } } } PKyZnif&Models/CompetenciesTalentsInteress.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZModels/Locality.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; }PKyZU;Models/EmployeeLeave.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function leave_type(): BelongsTo { return $this->belongsTo(LeaveType::class, 'leave_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } } PKyZ}CModels/TimelogSync.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } } PKyZ.UyModels/UserRole.phpnu[ */ protected $guarded = [ 'deleted_at', ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; } PKyZ0ƷModels/ClearanceTemplate.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function job_classification(): BelongsTo { return $this->belongsTo(JobClassification::class, 'job_classification_id'); } } PKyZ=>PRRModels/Apps.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; protected $with = [ 'modules' ]; /** * Get the group that owns the Module * */ public function modules() { return $this->hasMany( Module::class, 'system_id', )->where(fn ($q) => $q->where('system_id', $this->id) ->orWhereNull('system_id') ); } } PKyZo Models/Passport.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ00)Models/ContactPersonInCaseOfEmergency.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZxfModels/TaxTable.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ·Models/Group.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function dealership(): BelongsTo { return $this->belongsTo(Dealership::class, 'dealership_id'); } public function division(): HasMany { return $this->hasMany(Division::class, 'dealership_id'); } public function group_division_approver(): HasMany { return $this->hasMany(Approver::class, 'type_id'); } } PKyZ?rÆKKModels/Office.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZp3=Models/Sibling.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ,  Models/EmployeeUndertime.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } } PKyZom8Models/NotificationErrorLog.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZqModels/ScheduleShift.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZRުgModels/EmployeeOvertime.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } } PKyZ+fModels/EmployeeOb.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } } PKyZ_0Models/ProcessedTardiness.phpnu[ 'datetime', 'created_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ)i?Models/PagIbigTable.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZP6Models/WfhFloatedTimelog.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ%ʸModels/Section.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function department(): BelongsTo { return $this->belongsTo(Department::class, 'department_id'); } public function unit(): HasMany { return $this->hasMany(OrganizationUnit::class, 'section_id'); } public function section_approver(): HasMany { return $this->hasMany(Approver::class, 'type_id'); } } PKyZA( Models/Import.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ7`Models/WorkSuspension.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function company(): BelongsTo { return $this->belongsTo(Company::class, 'company_id'); } public function dealership(): BelongsTo { return $this->belongsTo(Dealership::class, 'dealership_id'); } } PKyZ+6Models/OrganizationUnit.phpnu[ 'date', 'created_at' => 'date', 'deleted_at' => 'date' ]; public function dealership(): BelongsTo { return $this->belongsTo(Dealership::class, 'dealership_id'); } public function group_division(): BelongsTo { return $this->belongsTo(Group::class, 'group_division_id'); } public function division(): BelongsTo { return $this->belongsTo(Division::class, 'division_id'); } public function department(): BelongsTo { return $this->belongsTo(Department::class, 'department_id'); } public function section(): BelongsTo { return $this->belongsTo(Section::class, 'section_id'); } public function unit(): BelongsTo { return $this->belongsTo(Unit::class, 'unit_id'); } public function approver(): HasMany { return $this->hasMany(Approver::class, 'type_id'); } } PKyZe*TT"Models/ApplicantProcessHistory.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; protected $hidden = [ 'created_at', 'updated_at', 'deleted_at', ]; }PKyZCS貚&Models/ProcessedHolidayRestdayDuty.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', 'approved_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function requested_by(): HasOne { return $this->hasOne(Employee::class, 'employee_id', 'created_by'); } public function approving(): HasOne { return $this->hasOne(Employee::class, 'employee_id', 'approver_id'); } } PKyZ5jjModels/EmployeeBenefits.phpnu[ 'date', 'created_at' => 'date', 'updated_at' => 'date', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function benefit(): BelongsTo { return $this->belongsTo(BenefitType::class, 'benefits_type_id'); } } PKyZ[DDModels/Audit.phpnu[ 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'user_id'); } } PKyZY VModels/DeviceRegistration.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } } PKyZЖٵModels/JobTitle.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function job_classification(): BelongsTo { return $this->belongsTo(JobClassification::class, 'job_classification_id'); } } PKyZMMModels/Religion.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZY5 5 Models/Mrf.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'requested_by', 'employee_id'); } public function company(): BelongsTo { return $this->belongsTo(Company::class, 'company_id'); } public function jobtitle(): BelongsTo { return $this->belongsTo(JobTitle::class, 'job_title'); } public function employmenttype(): BelongsTo { return $this->belongsTo(EmploymentType::class, 'employment_status'); } public function applicants(): HasMany { return $this->hasMany(Applicant::class, 'job_id', 'id'); } public function requestor(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'requested_by'); } public function recommendor(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommended_by'); } public function endorser(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'endorsed_by'); } public function approver(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approved_by'); } public function nature(): BelongsTo { return $this->belongsTo(NatureOfRequest::class, 'nature_of_request'); } public function job_classification(): BelongsTo { return $this->belongsTo(JobClassification::class, 'classification'); } } PKyZhModels/PayrollItems.phpnu[ 'date', 'created_at' => 'date', 'updated_at' => 'date', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } } PKyZ-66Models/DocumentType.phpnu[ 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZK`Models/LoanType.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ ˌModels/Approver.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; }PKyZYDModels/LoanPausedHistory.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ2Models/MedicalRecord.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZԍH\Models/Permission.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZXXModels/ProcessedSchedule.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZRsModels/Offense.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZznModels/Submodules.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; protected $appends = [ 'locality' ]; public function getLocalityAttribute() { $data = Dealership::select('locality_id')->where(['company_id' => $this->company_id, 'id' => $this->dealership_id])->first(); return $data ? $data->locality_id : null; } } PKyZTMModels/SssTable.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ$Models/HolidayType.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZH Models/RolePermission.phpnu[ */ protected $guarded = [ 'deleted_at', ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; public function module() { return $this->hasOne(Module::class, 'id', 'module_id'); } public function permission() { return $this->hasOne(Permission::class, 'id', 'permission_id'); } } PKyZ5^^"Models/ProcessedDailyWorkHours.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function company(): BelongsTo { return $this->belongsTo(Company::class, 'company_id'); } } PKyZ߯. Models/EducationalBackground.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ ssModels/PayrollSetting.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; } PKyZ}fModels/JobClassification.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ#Models/ProcessedOffsetAvailment.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function requirement_list(): BelongsTo { return $this->belongsTo(RequirementList::class, 'requirement_list_id'); } } PKyZT?ֵyy"Models/EmployeeMonthlySchedule.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function schedule(): BelongsTo { return $this->belongsTo(ScheduleShift::class, 'schedule_id'); } public function department(): BelongsTo { return $this->belongsTo(Department::class, 'department_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } public function requested(): BelongsTo { return $this->belongsTo(Employee::class, 'requested_by', 'employee_id'); } } PKyZIModels/BenefitSubCategory.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; protected $hidden = [ 'created_at', 'updated_at', 'deleted_at', ]; public function benefit_category(): BelongsTo { return $this->belongsTo(BenefitCategory::class, 'benefit_category_id'); } } PKyZkModels/License.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZexModels/LeaveLedger.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function leave_type(): BelongsTo { return $this->belongsTo(LeaveType::class, 'leave_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } } PKyZi>$Models/PremiumOvertimePaySetting.phpnu[hasOne(HolidayType::class,'id','holiday_type_id'); } } PKyZllModels/CutoffSetting.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; protected $hidden = [ 'created_at', 'updated_at', ]; public function company(): BelongsTo { return $this->belongsTo(Company::class, 'company_id'); } } PKyZcgModels/VisaType.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ1a99Models/EmploymentType.phpnu[ 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ*Models/RequirementList.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZd!(Models/ReportModule.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZt#Models/MedicalCondition.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZCKmModels/ExpiredOffset.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZu<*Models/PhicTable.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ B}33 Models/BiometricNotification.phpnu[ 'date', 'created_at' => 'date', 'updated_at' => 'date', ]; } PKyZ17[ [ Models/Role.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; protected $appends = [ 'companies', 'dealerships', ]; protected $with = [ 'group' ]; /** * Get the group that owns the Role * */ public function group() { return $this->belongsTo(RoleGroup::class, 'group_id', 'id'); } public function company_access() { return $this->hasMany(RoleCompanyAccess::class, 'role_id', 'id'); } public function getCompaniesAttribute() { if($this->group_id == 1) { $record = Company::all(); } else { $record = Company::select('companies.*')->distinct('name') ->join('role_company_access', 'companies.id', '=', 'role_company_access.company_id') ->where('role_id', $this->id) ->get(); } return $record; } public function getDealershipsAttribute() { if($this->group_id == 1) { $record = Dealership::all(); } else { // \DB::enableQueryLog(); $record = Dealership::select('dealerships.*')->distinct('name') ->join('role_company_access', function($join) { $join->on('role_company_access.company_id', '=', 'dealerships.company_id') ->on(function($join2) { $join2->on('role_company_access.dealership_id', '=', 'dealerships.id') ->orWhere('role_company_access.dealership_id', '=', 0); }); }) ->where('role_company_access.role_id', '=', $this->id) ->get(); // dd(\DB::getQueryLog()); } return $record; } } PKyZ:Models/Affiliation.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ z7Models/DocumentTracker.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function sent_to(): BelongsTo { return $this->belongsTo(Employee::class, 'send_to', 'employee_id'); } public function supporting_document(): BelongsTo { return $this->belongsTo(SupportingDocument::class, 'document_id', 'id'); } } PKyZ(/Models/Division.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function group_division(): BelongsTo { return $this->belongsTo(Group::class, 'group_division_id'); } public function department(): HasMany { return $this->hasMany(OrganizationUnit::class, 'division_id'); } public function division_approver(): HasMany { return $this->hasMany(Approver::class, 'type_id'); } } PKyZ}HYYYModels/ProcessedUndertime.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } } PKyZ|BcUModels/ResignationLetter.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } } PKyZ~Models/PersonnelActionForm.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function previous_position(): BelongsTo { return $this->belongsTo(JobTitle::class, 'position_id', 'id'); } public function next_position(): BelongsTo { return $this->belongsTo(JobTitle::class, 'position', 'id'); } public function requestor(): BelongsTo { return $this->belongsTo(Employee::class, 'requested_by', 'employee_id'); } public function recommendor(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommended_by'); } public function endorser(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'endorsed_by'); } public function approver(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approved_by'); } public function type_of_movement(): BelongsTo { return $this->belongsTo(TypeOfMovement::class, 'nature_of_request_id'); } public function unit(): BelongsTo { return $this->belongsTo(Unit::class, 'unit'); } } PKyZ6Models/PersonalInformation.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function citizenship(): BelongsTo { return $this->belongsTo(Citizenship::class, 'citizenship',); } public function civil_status(): BelongsTo { return $this->belongsTo(CivilStatus::class, 'civil_status',); } public function religion(): BelongsTo { return $this->belongsTo(Religion::class, 'religion',); } } PKyZClModels/DeductionFrequency.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function payroll_item(): BelongsTo { return $this->belongsTo(PayrollItems::class, 'payroll_item_id'); } } PKyZ)## Models/EmployeeOffsetEarning.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } }PKyZZModels/Unit.phpnu[ 'date', 'created_at' => 'date', 'deleted_at' => 'date' ]; public function section(): BelongsTo { return $this->belongsTo(OrganizationUnit::class, 'section_id'); } public function unit_approver(): HasMany { return $this->hasMany(Approver::class, 'type_id'); } } PKyZ)NModels/Module.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function menu() { return $this->hasOne( Menu::class, 'id', 'menu_id' ); } public function system() { return $this->hasOne( Apps::class, 'id', 'system_id' ); } } PKyZK&&Models/OldDB/Status.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZModels/DeductionType.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ.NqqModels/ModuleMenu.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; } PKyZ ww#Models/AdjustmentsAndDeductions.phpnu[ 'date', 'created_at' => 'date', 'updated_at' => 'date', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function payroll_item(): BelongsTo { return $this->belongsTo(PayrollItems::class, 'payroll_item_id'); } } PKyZModels/Loan.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ(0Models/EmploymentHistory.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZӲJModels/ProcessedAbsent.phpnu[ 'datetime', 'created_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZi:Models/LeaveType.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ}UUModels/Applicant.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function job(): BelongsTo { return $this->belongsTo(Mrf::class, 'job_id'); } // Defining the relationship to the JobTitle model public function jobtitle(): BelongsTo { return $this->belongsTo(JobTitle::class, 'job_title', 'id'); // Assuming the foreign key is job_title_id } public function mrf(): BelongsTo { return $this->belongsTo(Mrf::class, 'job_id'); } public function process_history(): HasMany { return $this->hasMany(ApplicantProcessHistory::class, 'applicant_id', 'id'); } public function routeNotificationForMail($notification) { return $this->email; } } PKyZvModels/EmployeeOffset.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } }PKyZ#>AModels/BenefitType.phpnu[ 'date', 'created_at' => 'date', 'updated_at' => 'date', ]; public function benefit_sub_category(): BelongsTo { return $this->belongsTo(BenefitSubCategory::class, 'benefit_sub_category_id'); } } PKyZ#rrModels/PayrollDate.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; protected $hidden = [ 'created_at', 'updated_at', 'deleted_at', ]; public function company(): BelongsTo { return $this->belongsTo(Company::class, 'company_id'); } public function dealership(): BelongsTo { return $this->belongsTo(Dealership::class, 'dealership_id'); } } PKyZtwModels/RoleGroup.phpnu[ 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function system() { return $this->hasOne( Apps::class, 'id', 'system_id' ); } } PKyZ$R+Models/TrainingHistory.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ&Z%mmModels/Employee.phpnu[ 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee_profile(): BelongsTo { return $this->belongsTo(EmployeeProfilePicture::class, 'employee_id', 'employee_id'); } public function section(): BelongsTo { return $this->belongsTo(Section::class, 'section_id'); } public function position(): BelongsTo { return $this->belongsTo(JobTitle::class, 'position_id'); } public function company(): BelongsTo { return $this->belongsTo(Company::class, 'company_id'); } public function chargeTo(): BelongsTo { return $this->belongsTo(Company::class, 'charge_to'); } public function classification(): BelongsTo { return $this->belongsTo(JobClassification::class, 'classification_id'); } public function dealership(): BelongsTo { return $this->belongsTo(Dealership::class, 'dealer_id'); } public function salary_grade(): BelongsTo { return $this->belongsTo(SalaryGrade::class, 'job_grade_id'); } public function employment_type(): BelongsTo { return $this->belongsTo(EmploymentType::class, 'employment_status_id'); } public function group(): BelongsTo { return $this->belongsTo(Group::class, 'group_id'); } public function division(): BelongsTo { return $this->belongsTo(Division::class, 'division_id'); } public function department(): BelongsTo { return $this->belongsTo(Department::class, 'department_id'); } public function office(): BelongsTo { return $this->belongsTo(Office::class, 'office_id'); } public function locality(): BelongsTo { return $this->belongsTo(Locality::class, 'work_location_id'); } public function salary_and_wages(): BelongsTo { return $this->belongsTo(SalaryAndWages::class, 'employee_id', 'employee_id'); } public function passport(): BelongsTo { return $this->belongsTo(Passport::class, 'employee_id', 'employee_id'); } public function personal_information(): BelongsTo { return $this->belongsTo(PersonalInformation::class, 'employee_id', 'employee_id'); } public function paf(): HasMany { return $this->hasMany(PersonnelActionForm::class, 'employee_id', 'employee_id'); } public function audit(): HasMany { return $this->hasMany(Audit::class, 'user_id', 'id'); } public function device_registration(): HasMany { return $this->hasMany(DeviceRegistration::class, 'employee_id'); } public function timelog(): HasMany { return $this->hasMany(Timelog::class, 'employee_id', 'employee_id'); } // Approvers public function unitApprover(): BelongsTo { return $this->belongsTo(Approver::class, 'unit_id', 'type_id'); } public function sectionApprover(): BelongsTo { return $this->belongsTo(Approver::class, 'section_id', 'type_id'); } public function departmentApprover(): BelongsTo { return $this->belongsTo(Approver::class, 'department_id', 'type_id'); } public function divisionApprover(): BelongsTo { return $this->belongsTo(Approver::class, 'division_id', 'type_id'); } public function groupDivisionApprover(): BelongsTo { return $this->belongsTo(Approver::class, 'group_id', 'type_id'); } public function dealershipApprover(): BelongsTo { return $this->belongsTo(Approver::class, 'dealer_id', 'type_id'); } // Accessor for First Name public function getFirstnameAttribute($value) { return Str::title(Str::lower($value)); } // Accessor for Middle Name public function getMiddlenameAttribute($value) { return Str::title(Str::lower($value)); } // Accessor for Last Name public function getLastnameAttribute($value) { return Str::title(Str::lower($value)); } } PKyZ5 Models/PersonalInterest.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZWfModels/Timelog.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } } PKyZX*v;;Models/SalaryGrade.phpnu[ 'datetime', 'created_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZs33Models/LeaveReason.phpnu[belongsTo(LeaveType::class, 'leave_id'); } } PKyZModels/PayrollDetail.phpnu[ 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ4$$Models/EmployeeSchedule.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function schedule(): BelongsTo { return $this->belongsTo(ScheduleShift::class, 'schedule_id'); } } PKyZ+6Models/DepartmentAccess.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; } PKyZModels/RoleCompanyAccess.phpnu[ */ protected $guarded = []; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; } PKyZ &&!Models/EmployeeProfilePicture.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZrZsBModels/EmployeeSuspension.phpnu[ 'date', 'created_at' => 'date', 'updated_at' => 'date', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } } PKyZsL%%!Models/EmployeeChangeSchedule.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } } PKyZV*VModels/EmployeeSync.phpnu[ 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZweI_Models/EmployeeLoan.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function loan(): BelongsTo { return $this->belongsTo(LoanType::class, 'loan_id'); } } PKyZ>"Models/AccumulatedLeaveCredits.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ|PModels/OffsetRemaining.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZgr11Models/TypeOfMovement.phpnu[ 'date', 'created_at' => 'date', 'deleted_at' => 'date' ]; } PKyZx&֕Models/Report.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZK{Models/EmployeeWfh.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function recommending(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'recommending_id'); } public function approving(): HasMany { return $this->hasMany(Employee::class, 'employee_id', 'approver_id'); } } PKyZ%TttModels/Menu.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function system() { return $this->hasOne( Apps::class, 'id', 'system_id' ); } } PKyZModels/ProcessedLeave.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; } PKyZUF""Models/AsaMeeting.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function template(): BelongsTo { return $this->belongsTo(ClearanceTemplate::class, 'clearance_template_id'); } } PKyZ1 WWModels/ProcessedTimelog.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZ[Models/Dealership.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function company(): BelongsTo { return $this->belongsTo(Company::class, 'company_id'); } // public function group_division(): HasMany // { // return $this->hasMany(Group::class, 'dealership_id'); // } public function group_division(): HasMany { return $this->hasMany(Group::class, 'group_division_id'); } public function dealership_approver(): HasMany { return $this->hasMany(Approver::class, 'type_id'); } public function departments() { return $this->hasManyThrough( Department::class, // Target model Employee::class, // Intermediate model 'dealer_id', // Foreign key on the employees table (to match dealer_id) 'id', // Foreign key on the departments table 'id', // Local key on the dealers table 'department_id' // Local key on the employees table (to match department_id) ) ->where('employees.enabled', 1) // Filter employees by enabled = 1 ->whereNull('employees.date_resign') // Filter employees by not resigned ->distinct('department_id'); } } PKyZ<%Models/ProcessedNightDifferential.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; protected $hidden = [ 'created_at', 'updated_at', 'deleted_at', ]; } PKyZ[X\\Models/EmployeeLeaveCredits.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } public function leave_type(): BelongsTo { return $this->belongsTo(LeaveType::class, 'leave_type_id'); } } PKyZXþModels/Department.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function division(): BelongsTo { return $this->belongsTo(Division::class, 'division_id'); } public function section(): HasMany { return $this->hasMany(OrganizationUnit::class, 'department_id'); } public function department_approver(): HasMany { return $this->hasMany(Approver::class, 'type_id'); } } PKyZ3Models/AttendancePosting.phpnu[belongsTo(Company::class,'company_id'); } public function dealership() { return $this->belongsTo(Dealership::class,'dealership_id'); } } PKyZwxPPModels/Citizenship.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZekkModels/PayrollSummary.phpnu[details)) { $model->details = json_encode($model->details); } }); } // Accessor to decode JSON when accessing 'details' public function getDetailsAttribute($value) { if(!is_array($value)) { return json_decode($value, true); // Decode as associative array } else { return $value; } } public function payroll() { return $this->belongsTo(Payroll::class, 'payroll_id', 'id'); } public function employee() { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } } PKyZlVModels/EmployeeCompensation.phpnu[ 'date', 'created_at' => 'date', 'updated_at' => 'date', ]; public function employee(): BelongsTo { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id'); } } PKyZuModels/Family.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZrFFModels/Company.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; protected $hidden = [ 'created_at', 'updated_at', 'deleted_at', ]; } PKyZtModels/Payroll.phpnu[belongsTo(Company::class,'company_id'); } public function dealership() { return $this->belongsTo(Dealership::class,'dealership_id'); } public function summary() { return $this->hasMany(PayrollSummary::class,'payroll_id'); } } PKyZw}ΡModels/CharacterReference.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZpModels/NonPersonnelEmployee.phpnu[belongsTo(AttendancePosting::class, 'header_id'); } public function employee() { return $this->belongsTo(Employee::class, 'employee_id', 'employee_id')->select('employee_id','firstname', 'middlename', 'lastname'); } public function department() { return $this->hasOne(Department::class, 'id', 'department_id')->select('id','name'); } } PKyZ\#Models/Children.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PKyZIiryyModels/ProcessedOb.phpnu[ */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; } PK-Z Providers/AppServiceProvider.phpnu[PK-Z//"EProviders/RouteServiceProvider.phpnu[PK-Z||&Providers/BroadcastServiceProvider.phpnu[PK-Z2qq! Providers/AuthServiceProvider.phpnu[PK-Z)("Z Providers/EventServiceProvider.phpnu[PK-ZkCfJConsole/Kernel.phpnu[PK-Zj WHttp/Middleware/TrustProxies.phpnu[PK-ZEK 0Http/Middleware/Authenticate.phpnu[PK-Zgh@@#ZHttp/Middleware/VerifyCsrfToken.phpnu[PK-Z~}}Http/Middleware/TrimStrings.phpnu[PK-Z7mm+Http/Middleware/RedirectIfAuthenticated.phpnu[PK-Z{{nn4Http/Middleware/PreventRequestsDuringMaintenance.phpnu[PK-ZL{ ttS!Http/Middleware/TrustHosts.phpnu[PK-Z"q33"#Http/Middleware/EncryptCookies.phpnu[PK-ZGf%$Http/Middleware/ValidateSignature.phpnu[PK-Zs! ! &Http/Kernel.phpnu[PK-Z9'1Http/Controllers/TemplateController.phpnu[PK-Z= U%%%%,OHttp/Controllers/QuestionnaireController.phpnu[PK-Z[v8&uHttp/Controllers/ProfileController.phpnu[PK-Zp}Http/Controllers/Controller.phpnu[PK-Z_n.n.%~Http/Controllers/AnswerController.phpnu[PK-Zyll#­Http/Controllers/AuthController.phpnu[PK-ZAɧ(Http/Controllers/QuestionsController.phpnu[PK-ZGcc%Http/Controllers/SystemController.phpnu[PK-Z m8Exceptions/Handler.phpnu[PK-Z=Y Models/System.phpnu[PK-Z;)Models/Questionnaire.phpnu[PK-Z>X=/7/7Models/Answer.phpnu[PK-ZOʙModels/Auth.phpnu[PK-Ztt-Models/Questions.phpnu[PK-Z\h3 3 DModels/User.phpnu[PK-ZBg6MModels/Template.phpnu[PK-ZP̯fModels/Link.phpnu[PKW5ZJ g.gitignorenu[PKW5Z뚩2hpublic/.gitignorenu[PKyZhHelpers/CommonHelper.phpnu[PKyZ~X-YY(jConsole/Commands/ServeWithCustomPort.phpnu[PKyZ\|bmHttp/Middleware/CustomAuth.phpnu[PKyZdFD)D)%pHttp/Controllers/ReportController.phpnu[PKyZkk+JHttp/Controllers/ReportModuleController.phpnu[PKyZ).Http/Controllers/API/v1/TaxTableController.phpnu[PKyZ;R16KHttp/Controllers/API/v1/ExaminationTakenController.phpnu[PKyZ9 1Http/Controllers/API/v1/AffiliationController.phpnu[PKyZ!%_2}Http/Controllers/API/v1/PagIbigTableController.phpnu[PKyZ9.((-Http/Controllers/API/v1/CompanyController.phpnu[PKyZ+-Http/Controllers/API/v1/SiblingController.phpnu[PKyZ<,(X(XE%Http/Controllers/API/v1/ApproveAttendanceRequestsMobileController.phpnu[PKyZO:q ,,1kHttp/Controllers/API/v1/WfhApprovalController.phpnu[PKyZ_aݣ=Http/Controllers/API/v1/MonthlyScheduleApprovalController.phpnu[PKyZM)00/Http/Controllers/API/v1/LeaveTypeController.phpnu[PKyZrc  2OHttp/Controllers/API/v1/RequirementsController.phpnu[PKyZU?:Http/Controllers/API/v1/EmployeeLeaveCreditsController.phpnu[PKyZ^3-Http/Controllers/API/v1/MedicalRecordController.phpnu[PKyZK':P}P}>Http/Controllers/API/v1/AttendanceRequestsMobileController.phpnu[PKyŻ.fHttp/Controllers/API/v1/PassportController.phpnu[PKyZQyFF.KHttp/Controllers/API/v1/ApproverController.phpnu[PKyZM5OHttp/Controllers/API/v1/BenefitCategoryController.phpnu[PKyZi rr6VHttp/Controllers/API/v1/MedicalConditionController.phpnu[PKyZO8.Http/Controllers/API/v1/CharacterReferenceController.phpnu[PKyZ^J J 4H1Http/Controllers/API/v1/EmploymentTypeController.phpnu[PKyZD)A/uZuZ,>Http/Controllers/API/v1/ReportController.phpnu[PKyZM++4ǙHttp/Controllers/API/v1/TravelApprovalController.phpnu[PKyZﱮ`0Http/Controllers/API/v1/DepartmentController.phpnu[PKyZ@-{2$Http/Controllers/API/v1/AnnouncementController.phpnu[PKyZQxo2VHttp/Controllers/API/v1/ReportModuleController.phpnu[PKyZxII;OHttp/Controllers/API/v1/EmployeeOffsetEarningController.phpnu[PKyZ~I>I>*R=Http/Controllers/API/v1/MenuController.phpnu[PKyZ:cxcx3{Http/Controllers/API/v1/EmployeeLeaveController.phpnu[PKyZx5Http/Controllers/API/v1/TrainingHistoryController.phpnu[PKyZ665#Http/Controllers/API/v1/RequirementListController.phpnu[PKyZʠ.Http/Controllers/API/v1/ReligionController.phpnu[PKyZ]nkY3Y34*Http/Controllers/API/v1/EmployeeOffsetController.phpnu[PKyZoxV V =]Http/Controllers/API/v1/OffsetAvailmentApprovalController.phpnu[PKyZZ$$<~Http/Controllers/API/v1/ChangeScheduleApprovalController.phpnu[PKyZѬ::0Http/Controllers/API/v1/EmployeeObController.phpnu[PKyZ56Q'Q'3Http/Controllers/API/v1/LeaveApprovalController.phpnu[PKyZ*1 Http/Controllers/API/v1/CitizenshipController.phpnu[PKyZ  2" Http/Controllers/API/v1/DocumentTypeController.phpnu[PKyZ3( Http/Controllers/API/v1/ExpiredOffsetController.phpnu[PKyZ1Http/Controllers/API/v1/AdjustmentsAndDeductionsController.phpnu[PKyZ AA*RHttp/Controllers/API/v1/UnitController.phpnu[PKyZ4aa6Http/Controllers/API/v1/OrganizationUnitController.phpnu[PKyZ2L- . .*Http/Controllers/API/v1/RoleController.phpnu[PKyZԛuqq, Http/Controllers/API/v1/ModuleController.phpnu[PKyZhO48 Http/Controllers/API/v1/ReportModuleColumnController.phpnu[PKyZACGCG)"Http/Controllers/API/v1/MrfController.phpnu[PKyZكC  AjHttp/Controllers/API/v1/CompetenciesTalentsInteressController.phpnu[PKyZޓ8 }Http/Controllers/API/v1/BenefitSubCategoryController.phpnu[PKyZ4,1IHttp/Controllers/API/v1/HolidayTypeController.phpnu[PKyZD:A99/yHttp/Controllers/API/v1/PhicTableController.phpnu[PKyZ(@//:Http/Controllers/API/v1/EmployeeCompensationController.phpnu[PKyZh**4Http/Controllers/API/v1/WorkSuspensionController.phpnu[PKyZ$W.8Http/Controllers/API/v1/ChildrenController.phpnu[PKyZy*B.THttp/Controllers/API/v1/DivisionController.phpnu[PKyZ ۱<|Http/Controllers/API/v1/AttendanceDenyRequestsController.phpnu[PKyZXX,Http/Controllers/API/v1/ReportControllerJsonnu[PKyZRL<7MHttp/Controllers/API/v1/EmploymentHistoryController.phpnu[PKyZ%  1Http/Controllers/API/v1/CivilStatusController.phpnu[PKyZ1[W W 3&Http/Controllers/API/v1/CutoffSettingController.phpnu[PKyZHttp/Controllers/API/v1/AttendanceCreationMobileController.phpnu[PKyZ@.-&|Http/Controllers/API/v1/OffenseController.phpnu[PKyZ0Http/Controllers/API/v1/DealershipController.phpnu[PKyZ=,22=Http/Controllers/API/v1/AccumulatedLeaveCreditsController.phpnu[PKyZA؋,,2Http/Controllers/API/v1/EmployeeLoanController.phpnu[PKyZ--< Http/Controllers/API/v1/EmployeeTimeAdjustmentController.phpnu[PKyZP-e-9Http/Controllers/API/v1/HolidayController.phpnu[PKyZi7ss.QHttp/Controllers/API/v1/EmployeeController.phpnu[PKyZLz  6Http/Controllers/API/v1/PersonalInterestController.phpnu[PKyZ3pHttp/Controllers/API/v1/RoleMigrationController.phpnu[PKyZBH ,Http/Controllers/API/v1/FamilyController.phpnu[PKyZG~~8Http/Controllers/API/v1/SupportingDocumentController.phpnu[PKyZ h 5Http/Controllers/API/v1/OffsetRemainingController.phpnu[PKyZ"/::* Http/Controllers/API/v1/VisaController.phpnu[PKyZHf.2Http/Controllers/API/v1/SssTableController.phpnu[PKyZ.CHttp/Controllers/API/v1/VisaTypeController.phpnu[PKyZ 4UHttp/Controllers/API/v1/TypeOfMovementController.phpnu[PKyZN@@)0YHttp/Controllers/API/v1/AppController.phpnu[PKyZ 22/tHttp/Controllers/API/v1/ApplicantController.phpnu[PKyZÒ ww8Http/Controllers/API/v1/EmployeeAttendanceController.phpnu[PKyZή+Http/Controllers/API/v1/GroupController.phpnu[PKyZXp$$11Http/Controllers/API/v1/PayrollDateController.phpnu[PKyZm00,jVHttp/Controllers/API/v1/ImportController.phpnu[PKyZ~m<8^Http/Controllers/API/v1/DeductionFrequencyController.phpnu[PKyZ;?M M 15qHttp/Controllers/API/v1/LeaveLedgerController.phpnu[PKyZr8 8 1zHttp/Controllers/API/v1/SalaryGradeController.phpnu[PKyZf'CNN-|Http/Controllers/API/v1/PayrollController.phpnu[PKyZ׉3''+Http/Controllers/API/AuthController.phpnu[PKyZKSw7EHttp/Controllers/LeaveAccumulationSettingController.phpnu[PKyZhی6FHttp/Controllers/ApplicantProcessHistoryController.phpnu[PKyZKی7}GHttp/Controllers/ProcessedOffsetAvailmentController.phpnu[PKyZ /)qHHttp/Controllers/SubmodulesController.phpnu[PKyZX-zz1IIHttp/Controllers/ReportModuleColumnController.phpnu[PKyZ ꆉ3$KHttp/Controllers/NonPersonnelEmployeeController.phpnu[PKyZV'͎ %LHttp/Controllers/FamilyController.phpnu[PKyZJPPYNotifications/Overtime.phpnu[PKyZ$e %jNotifications/BiometricConnection.phpnu[PKyZ vNotifications/JobApplication.phpnu[PKyZ 东 }Notifications/TimeAdjustment.phpnu[PKyZx8 Notifications/Mrf.phpnu[PKyZt)1ww Notifications/ChangeSchedule.phpnu[PKyZ0066xNotifications/Leave.phpnu[PKyZF&w w !Notifications/OffsetAvailment.phpnu[PKyZ4ʶ Notifications/Wfh.phpnu[PKyZ98 Notifications/OffsetEarning.phpnu[PKyZ^־pNotifications/AsaMeeting.phpnu[PKyZs| KNotifications/Undertime.phpnu[PKyZc ?Notifications/Travel.phpnu[PKyZpwwwJobs/ImportTimelogsJob.phpnu[PKyZnif&8Models/CompetenciesTalentsInteress.phpnu[PKyZModels/Locality.phpnu[PKyZU; Models/EmployeeLeave.phpnu[PKyZ}CModels/TimelogSync.phpnu[PKyZ.UyModels/UserRole.phpnu[PKyZ0ƷModels/ClearanceTemplate.phpnu[PKyZ=>PRRModels/Apps.phpnu[PKyZo O Models/Passport.phpnu[PKyZ00)t#Models/ContactPersonInCaseOfEmergency.phpnu[PKyZxf&Models/TaxTable.phpnu[PKyZ·)Models/Group.phpnu[PKyZ?rÆKK.Models/Office.phpnu[PKyZp3=r2Models/Sibling.phpnu[PKyZ,  5Models/EmployeeUndertime.phpnu[PKyZom8;Models/NotificationErrorLog.phpnu[PKyZq>>Models/ScheduleShift.phpnu[PKyZRުgmAModels/EmployeeOvertime.phpnu[PKyZ+fFModels/EmployeeOb.phpnu[PKyZ_05LModels/ProcessedTardiness.phpnu[PKyZf0rrNModels/AsaMeetingAttendee.phpnu[PKyZZ@??OModels/NatureOfRequest.phpnu[PKyZ)i?ORModels/PagIbigTable.phpnu[PKyZP6|UModels/WfhFloatedTimelog.phpnu[PKyZ%ʸXModels/Section.phpnu[PKyZA( ]Models/Import.phpnu[PKyZ7``Models/WorkSuspension.phpnu[PKyZ+6)eModels/OrganizationUnit.phpnu[PKyZe*TT"WkModels/ApplicantProcessHistory.phpnu[PKyZCS貚&nModels/ProcessedHolidayRestdayDuty.phpnu[PKyZv55pModels/TimelogEdit.phpnu[PKyZ5jjhvModels/EmployeeBenefits.phpnu[PKyZ[DDzModels/Audit.phpnu[PKyZY V|Models/DeviceRegistration.phpnu[PKyZЖٵModels/JobTitle.phpnu[PKyZMMModels/Religion.phpnu[PKyZY5 5 Models/Mrf.phpnu[PKyZhModels/PayrollItems.phpnu[PKyZ-66ŔModels/DocumentType.phpnu[PKyZK`BModels/LoanType.phpnu[PKyZ ˌgModels/Approver.phpnu[PKyZYDModels/LoanPausedHistory.phpnu[PKyZ2 Models/MedicalRecord.phpnu[PKyZԍH\Models/Permission.phpnu[PKyZXXModels/ProcessedSchedule.phpnu[PKyZqTModels/ExaminationTaken.phpnu[PKyZRsModels/Offense.phpnu[PKyZznModels/Submodules.phpnu[PKyZvModels/Holiday.phpnu[PKyZTMUModels/SssTable.phpnu[PKyZ$zModels/HolidayType.phpnu[PKyZH Models/RolePermission.phpnu[PKyZ5^^"Models/ProcessedDailyWorkHours.phpnu[PKyZ'rrbModels/Announcement.phpnu[PKyZ߯. Models/EducationalBackground.phpnu[PKyZ ssZModels/PayrollSetting.phpnu[PKyZ}fModels/JobClassification.phpnu[PKyZ#NModels/ProcessedOffsetAvailment.phpnu[PKyZs55Models/Requirements.phpnu[PKyZT?ֵyy"'Models/EmployeeMonthlySchedule.phpnu[PKyZIModels/BenefitSubCategory.phpnu[PKyZkTModels/License.phpnu[PKyZexwModels/LeaveLedger.phpnu[PKyZi>$WModels/PremiumOvertimePaySetting.phpnu[PKyZllModels/CutoffSetting.phpnu[PKyZcgpModels/VisaType.phpnu[PKyZ1a99Models/EmploymentType.phpnu[PKyZ*Models/RequirementList.phpnu[PKyZd!(JModels/ReportModule.phpnu[PKyZt#,Models/MedicalCondition.phpnu[PKyZCKmaModels/ExpiredOffset.phpnu[PKyZu<*Models/PhicTable.phpnu[PKyZ B}33 Models/BiometricNotification.phpnu[PKyZ17[ [ :Models/Role.phpnu[PKyZ:Models/Affiliation.phpnu[PKyZ z7Models/DocumentTracker.phpnu[PKyZ(/Models/Division.phpnu[PKyZ}HYYY Models/ProcessedUndertime.phpnu[PKyZrg]X%%!Models/EmployeeTimeAdjustment.phpnu[PKyZ|BcU'#Models/ResignationLetter.phpnu[PKyZ~'Models/PersonnelActionForm.phpnu[PKyZ6_/Models/PersonalInformation.phpnu[PKyZClF4Models/DeductionFrequency.phpnu[PKyZ)## n8Models/EmployeeOffsetEarning.phpnu[PKyZZ=Models/Unit.phpnu[PKyZ)NAModels/Module.phpnu[PKyZK&&EModels/OldDB/Status.phpnu[PKyZD,###ZGModels/OldDB/User.phpnu[PKyZ'A//HModels/OldDB/Dealership.phpnu[PKyZZ7//AsModels/BenefitType.phpnu[PKyZ#rr wModels/PayrollDate.phpnu[PKyZtw{Models/RoleGroup.phpnu[PKyZ$R+~Models/TrainingHistory.phpnu[PKyZ&Z%mmModels/Employee.phpnu[PKyZ5 ˔Models/PersonalInterest.phpnu[PKyZWfModels/Timelog.phpnu[PKyZX*v;;Models/SalaryGrade.phpnu[PKyZs33aModels/LeaveReason.phpnu[PKyZڠModels/PayrollDetail.phpnu[PKyZ3wڡModels/ProcessedOvertime.phpnu[PKyZK_BBModels/SupportingDocument.phpnu[PKyZ4$$:Models/EmployeeSchedule.phpnu[PKyZ+6Models/DepartmentAccess.phpnu[PKyZModels/RoleCompanyAccess.phpnu[PKyZ &&!۰Models/EmployeeProfilePicture.phpnu[PKyZrZsBRModels/EmployeeSuspension.phpnu[PKyZsL%%!Models/EmployeeChangeSchedule.phpnu[PKyZV*VModels/EmployeeSync.phpnu[PKyZweI_YModels/EmployeeLoan.phpnu[PKyZ>"Models/AccumulatedLeaveCredits.phpnu[PKyZ|PModels/OffsetRemaining.phpnu[PKyZgr11nModels/TypeOfMovement.phpnu[PKyZx&֕Models/Report.phpnu[PKyZK{Models/EmployeeWfh.phpnu[PKyZ%TttModels/Menu.phpnu[PKyZModels/ProcessedLeave.phpnu[PKyZ?:4V  Models/AppsStorage.phpnu[PKyZUF""Models/AsaMeeting.phpnu[PKyZ.OModels/Clearance.phpnu[PKyZ1 WW7Models/ProcessedTimelog.phpnu[PKyZ8Models/Visa.phpnu[PKyZ[Models/Dealership.phpnu[PKyZ<%>Models/ProcessedNightDifferential.phpnu[PKyZp:MMvModels/BenefitCategory.phpnu[PKyZ[X\\ Models/EmployeeLeaveCredits.phpnu[PKyZXþModels/Department.phpnu[PKyZ3Models/AttendancePosting.phpnu[PKyZwxPPModels/Citizenship.phpnu[PKyZekkeModels/PayrollSummary.phpnu[PKyZlVModels/EmployeeCompensation.phpnu[PKyZuWModels/Family.phpnu[PKyZrFFxModels/Company.phpnu[PKyZtModels/Payroll.phpnu[PKyZw}ΡModels/CharacterReference.phpnu[PKyZpModels/NonPersonnelEmployee.phpnu[PKyZ? # Models/AttendancePostingDtls.phpnu[PKyZ\#2#Models/Children.phpnu[PKyZIiryyW&Models/ProcessedOb.phpnu[PKyZ