diff --git a/app/Http/Controllers/Backend/ReportController.php b/app/Http/Controllers/Backend/ReportController.php new file mode 100644 index 0000000..877800c --- /dev/null +++ b/app/Http/Controllers/Backend/ReportController.php @@ -0,0 +1,403 @@ +user()->getRoleNames()[0]; + $cabangs = []; + $forms = null; + + if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { + $region_id = auth()->user()->getMyCabangAndRegionId()['region']; + + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->get(); + + $userIds = $users->pluck('user_id')->toArray(); + + $cabangs = Cabang::where('region_id', $region_id)->get(); + $forms = FormUpCountry::whereIn('user_id', $userIds)->get(); + } + } else if ($role == 'Area Manager Cabang') { + $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; + + if ($cabang_id) { + $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); + $userIds = $users->pluck('user_id')->toArray(); + + $cabangs = Cabang::where('id', $cabang_id)->get(); + $forms = FormUpCountry::whereIn('user_id', $userIds)->get(); + } + } else if ($role == 'Medical Representatif') { + $userId = auth()->user()->id; + + $cabangs = null; + $forms = FormUpCountry::where('user_id', $userId)->get(); + } else { + $cabangs = Cabang::all(); + $forms = FormUpCountry::all(); + } + + // get all params in url + $params = request()->all(); + + if($params) { + if ($params['cabang']) { + $cabang = Cabang::where('code', $params['cabang'])->first(); + $users = UserHasCabang::where('cabang_id', $cabang->id)->get(); + $userIds = $users->pluck('user_id')->toArray(); + + $forms = $forms->whereIn('user_id', $userIds); + } + + if($params['start_date'] && $params['end_date']) { + $forms = $forms->whereBetween('tanggal', [$params['start_date'], $params['end_date']]); + } + + if($params['start_date'] && !$params['end_date']) { + $forms = $forms->where('tanggal', $params['start_date']); + } + + if(!$params['start_date'] && $params['end_date']) { + $forms = $forms->where('tanggal', $params['end_date']); + } + + if($params['status']) { + $forms = $forms->where('status', $params['status']); + } + } + + return view('backend.pages.report.upcountry', [ + 'pageInfo' => [ + 'title' => 'Generate Reports For Form Up Country', + ], + 'forms' => $forms, + 'cabang' => $cabangs + ]); + } + + public function vehicle() + { + $role = auth()->user()->getRoleNames()[0]; + $cabangs = []; + $forms = null; + + if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { + $region_id = auth()->user()->getMyCabangAndRegionId()['region']; + + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->get(); + + $userIds = $users->pluck('user_id')->toArray(); + + $cabangs = Cabang::where('region_id', $region_id)->get(); + $forms = FormVehicleRunningCost::whereIn('user_id', $userIds)->get(); + } + } else if ($role == 'Area Manager Cabang') { + $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; + + if ($cabang_id) { + $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); + $userIds = $users->pluck('user_id')->toArray(); + + $cabangs = Cabang::where('id', $cabang_id)->get(); + $forms = FormVehicleRunningCost::whereIn('user_id', $userIds)->get(); + } + } else if ($role == 'Medical Representatif') { + $userId = auth()->user()->id; + + $cabangs = null; + $forms = FormVehicleRunningCost::where('user_id', $userId)->get(); + } else { + $cabangs = Cabang::all(); + $forms = FormVehicleRunningCost::all(); + } + + // get all params in url + $params = request()->all(); + + if($params) { + if ($params['cabang']) { + $cabang = Cabang::where('code', $params['cabang'])->first(); + $users = UserHasCabang::where('cabang_id', $cabang->id)->get(); + $userIds = $users->pluck('user_id')->toArray(); + + $forms = $forms->whereIn('user_id', $userIds); + } + + if($params['start_date'] && $params['end_date']) { + $forms = $forms->whereBetween('tanggal', [$params['start_date'], $params['end_date']]); + } + + if($params['start_date'] && !$params['end_date']) { + $forms = $forms->where('tanggal', $params['start_date']); + } + + if(!$params['start_date'] && $params['end_date']) { + $forms = $forms->where('tanggal', $params['end_date']); + } + + if($params['status']) { + $forms = $forms->where('status', $params['status']); + } + } + + return view('backend.pages.report.vehicle', [ + 'pageInfo' => [ + 'title' => 'Generate Reports For Form Vehicle Running Cost', + ], + 'forms' => $forms, + 'cabang' => $cabangs + ]); + } + + public function entertainment() + { + $role = auth()->user()->getRoleNames()[0]; + $cabangs = []; + $forms = null; + + if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { + $region_id = auth()->user()->getMyCabangAndRegionId()['region']; + + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->get(); + + $userIds = $users->pluck('user_id')->toArray(); + + $cabangs = Cabang::where('region_id', $region_id)->get(); + $forms = FormEntertaimentPresentation::whereIn('user_id', $userIds)->get(); + } + } else if ($role == 'Area Manager Cabang') { + $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; + + if ($cabang_id) { + $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); + $userIds = $users->pluck('user_id')->toArray(); + + $cabangs = Cabang::where('id', $cabang_id)->get(); + $forms = FormEntertaimentPresentation::whereIn('user_id', $userIds)->get(); + } + } else if ($role == 'Medical Representatif') { + $userId = auth()->user()->id; + + $cabangs = null; + $forms = FormEntertaimentPresentation::where('user_id', $userId)->get(); + } else { + $cabangs = Cabang::all(); + $forms = FormEntertaimentPresentation::all(); + } + + // get all params in url + $params = request()->all(); + + if($params) { + if ($params['cabang']) { + $cabang = Cabang::where('code', $params['cabang'])->first(); + $users = UserHasCabang::where('cabang_id', $cabang->id)->get(); + $userIds = $users->pluck('user_id')->toArray(); + + $forms = $forms->whereIn('user_id', $userIds); + } + + if($params['start_date'] && $params['end_date']) { + $forms = $forms->whereBetween('tanggal', [$params['start_date'], $params['end_date']]); + } + + if($params['start_date'] && !$params['end_date']) { + $forms = $forms->where('tanggal', $params['start_date']); + } + + if(!$params['start_date'] && $params['end_date']) { + $forms = $forms->where('tanggal', $params['end_date']); + } + + if($params['status']) { + $forms = $forms->where('status', $params['status']); + } + } + + return view('backend.pages.report.entertainment', [ + 'pageInfo' => [ + 'title' => 'Generate Reports For Form Entertainment & Presentation', + ], + 'forms' => $forms, + 'cabang' => $cabangs + ]); + } + + public function meeting() + { + $role = auth()->user()->getRoleNames()[0]; + $cabangs = []; + $forms = null; + + if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { + $region_id = auth()->user()->getMyCabangAndRegionId()['region']; + + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->get(); + + $userIds = $users->pluck('user_id')->toArray(); + + $cabangs = Cabang::where('region_id', $region_id)->get(); + $forms = FormMeetingSeminar::whereIn('user_id', $userIds)->get(); + } + } else if ($role == 'Area Manager Cabang') { + $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; + + if ($cabang_id) { + $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); + $userIds = $users->pluck('user_id')->toArray(); + + $cabangs = Cabang::where('id', $cabang_id)->get(); + $forms = FormMeetingSeminar::whereIn('user_id', $userIds)->get(); + } + } else if ($role == 'Medical Representatif') { + $userId = auth()->user()->id; + + $cabangs = null; + $forms = FormMeetingSeminar::where('user_id', $userId)->get(); + } else { + $cabangs = Cabang::all(); + $forms = FormMeetingSeminar::all(); + } + + // get all params in url + $params = request()->all(); + + if($params) { + if ($params['cabang']) { + $cabang = Cabang::where('code', $params['cabang'])->first(); + $users = UserHasCabang::where('cabang_id', $cabang->id)->get(); + $userIds = $users->pluck('user_id')->toArray(); + + $forms = $forms->whereIn('user_id', $userIds); + } + + if($params['start_date'] && $params['end_date']) { + $forms = $forms->whereBetween('tanggal', [$params['start_date'], $params['end_date']]); + } + + if($params['start_date'] && !$params['end_date']) { + $forms = $forms->where('tanggal', $params['start_date']); + } + + if(!$params['start_date'] && $params['end_date']) { + $forms = $forms->where('tanggal', $params['end_date']); + } + + if($params['status']) { + $forms = $forms->where('status', $params['status']); + } + } + + return view('backend.pages.report.meeting', [ + 'pageInfo' => [ + 'title' => 'Generate Reports For Form Meeting & Seminar', + ], + 'forms' => $forms, + 'cabang' => $cabangs + ]); + } + + public function others() + { + $role = auth()->user()->getRoleNames()[0]; + $cabangs = []; + $forms = null; + + if ($role == 'Admin Region' || $role == 'Marketing Operational Manager Region') { + $region_id = auth()->user()->getMyCabangAndRegionId()['region']; + + if ($region_id) { + $users = UserHasCabang::whereHas('cabang', function ($query) use ($region_id) { + $query->where('region_id', $region_id); + })->get(); + + $userIds = $users->pluck('user_id')->toArray(); + + $cabangs = Cabang::where('region_id', $region_id)->get(); + $forms = FormOthers::whereIn('user_id', $userIds)->get(); + } + } else if ($role == 'Area Manager Cabang') { + $cabang_id = auth()->user()->getMyCabangAndRegionId()['cabang']; + + if ($cabang_id) { + $users = UserHasCabang::where('cabang_id', $cabang_id)->get(); + $userIds = $users->pluck('user_id')->toArray(); + + $cabangs = Cabang::where('id', $cabang_id)->get(); + $forms = FormOthers::whereIn('user_id', $userIds)->get(); + } + } else if ($role == 'Medical Representatif') { + $userId = auth()->user()->id; + + $cabangs = null; + $forms = FormOthers::where('user_id', $userId)->get(); + } else { + $cabangs = Cabang::all(); + $forms = FormOthers::all(); + } + + // get all params in url + $params = request()->all(); + + if($params) { + if ($params['cabang']) { + $cabang = Cabang::where('code', $params['cabang'])->first(); + $users = UserHasCabang::where('cabang_id', $cabang->id)->get(); + $userIds = $users->pluck('user_id')->toArray(); + + $forms = $forms->whereIn('user_id', $userIds); + } + + if($params['start_date'] && $params['end_date']) { + $forms = $forms->whereBetween('tanggal', [$params['start_date'], $params['end_date']]); + } + + if($params['start_date'] && !$params['end_date']) { + $forms = $forms->where('tanggal', $params['start_date']); + } + + if(!$params['start_date'] && $params['end_date']) { + $forms = $forms->where('tanggal', $params['end_date']); + } + + if($params['status']) { + $forms = $forms->where('status', $params['status']); + } + } + + return view('backend.pages.report.others', [ + 'pageInfo' => [ + 'title' => 'Generate Reports For Form Others', + ], + 'forms' => $forms, + 'cabang' => $cabangs + ]); + } +} diff --git a/app/Http/Controllers/Master/CabangController.php b/app/Http/Controllers/Master/CabangController.php new file mode 100644 index 0000000..50923ef --- /dev/null +++ b/app/Http/Controllers/Master/CabangController.php @@ -0,0 +1,104 @@ +checkAuthorization(auth()->user(), ['cabang.view']); + session()->put('redirect_url', route('admin.cabang.index')); + + return view('backend.pages.master.cabang.index', [ + 'cabang' => Cabang::all() + ]); + } + + public function create() + { + $this->checkAuthorization(auth()->user(), ['cabang.create']); + return view('backend.pages.master.cabang.create', [ + 'users' => Admin::getUserWhereRoleIsNot('Medical Representatif'), + 'cost_centres' => CostCentre::all(), + 'regions' => Region::all() + ]); + } + + public function store(Request $request) + { + $this->checkAuthorization(auth()->user(), ['cabang.create']); + $request->validate([ + 'head_id' => 'required|exists:admins,id', + 'region_id' => 'required|exists:region,id', + 'cost_id' => 'required|exists:cost_centre,id', + 'code' => 'required|unique:cabang', + 'name' => 'required|unique:cabang' + ]); + + Cabang::create([ + 'head_id' => $request->head_id, + 'region_id' => $request->region_id, + 'cost_id' => $request->cost_id, + 'code' => $request->code, + 'name' => $request->name + ]); + + AuditTrailHelper::AddAuditTrail('Insert', 'Insert New Record at Cabang Table (' . $request->name . ')'); + session()->flash('success', 'Cabang has been added successfully.'); + return redirect()->back(); + } + + public function edit($id) + { + $this->checkAuthorization(auth()->user(), ['cabang.edit']); + return view('backend.pages.master.cabang.edit', [ + 'cabang' => Cabang::findOrfail($id), + 'users' => Admin::getUserWhereRoleIsNot('Medical Representatif'), + 'cost_centres' => CostCentre::all(), + 'regions' => Region::all() + ]); + } + + public function update(Request $request, $id) + { + $this->checkAuthorization(auth()->user(), ['cabang.edit']); + $request->validate([ + 'head_id' => 'required|exists:admins,id', + 'region_id' => 'required|exists:region,id', + 'cost_id' => 'required|exists:cost_centre,id', + 'code' => 'required|unique:cabang,code,' . $id, + 'name' => 'required|unique:cabang,name,' . $id + ]); + + Cabang::findOrfail($id)->update([ + 'head_id' => $request->head_id, + 'region_id' => $request->region_id, + 'cost_id' => $request->cost_id, + 'code' => $request->code, + 'name' => $request->name + ]); + + AuditTrailHelper::AddAuditTrail('Update', 'Update New Record at Cabang Table (' . $request->name . ')'); + session()->flash('success', 'Cabang has been updated successfully.'); + return redirect()->back(); + } + + public function destroy($id) + { + $this->checkAuthorization(auth()->user(), ['cabang.delete']); + $cabang = Cabang::findOrfail($id); + AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Cabang Table (' . $cabang->name . ')'); + + $cabang->delete(); + session()->flash('success', 'Cabang has been deleted successfully.'); + return redirect()->back(); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Master/RegionController.php b/app/Http/Controllers/Master/RegionController.php new file mode 100644 index 0000000..b1575c9 --- /dev/null +++ b/app/Http/Controllers/Master/RegionController.php @@ -0,0 +1,90 @@ +checkAuthorization(auth()->user(), ['region.view']); + session()->put('redirect_url', route('admin.region.index')); + + return view('backend.pages.master.region.index', [ + 'region' => Region::all() + ]); + } + + public function create() + { + $this->checkAuthorization(auth()->user(), ['region.create']); + return view('backend.pages.master.region.create', [ + 'users' => Admin::getUserWhereRoleIsNot('Medical Representatif') + ]); + } + + public function store(Request $request) + { + $this->checkAuthorization(auth()->user(), ['region.create']); + $request->validate([ + 'head_id' => 'required|exists:admins,id', + 'code' => 'required|unique:region', + 'name' => 'required|unique:region' + ]); + + Region::create([ + 'head_id' => $request->head_id, + 'code' => $request->code, + 'name' => $request->name + ]); + + AuditTrailHelper::AddAuditTrail('Insert', 'Insert New Record at Region Table (' . $request->name . ')'); + session()->flash('success', 'Region has been added successfully.'); + return redirect()->back(); + } + + public function edit($id) + { + $this->checkAuthorization(auth()->user(), ['region.edit']); + return view('backend.pages.master.region.edit', [ + 'region' => Region::findOrfail($id), + 'users' => Admin::getUserWhereRoleIsNot('Medical Representatif') + ]); + } + + public function update(Request $request, $id) + { + $this->checkAuthorization(auth()->user(), ['region.edit']); + $request->validate([ + 'head_id' => 'required|exists:admins,id', + 'code' => 'required|unique:region,code,' . $id, + 'name' => 'required|unique:region,name,' . $id + ]); + + Region::findOrfail($id)->update([ + 'head_id' => $request->head_id, + 'code' => $request->code, + 'name' => $request->name + ]); + + AuditTrailHelper::AddAuditTrail('Update', 'Update New Record at Region Table (' . $request->name . ')'); + session()->flash('success', 'Region has been updated successfully.'); + return redirect()->back(); + } + + public function destroy($id) + { + $this->checkAuthorization(auth()->user(), ['region.delete']); + $region = Region::findOrfail($id); + AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Region Table (' . $region->name . ')'); + + $region->delete(); + session()->flash('success', 'Region has been deleted successfully.'); + return redirect()->back(); + } +} \ No newline at end of file diff --git a/app/Listeners/LogLoginActivity.php b/app/Listeners/LogLoginActivity.php index 6a51a40..db58602 100644 --- a/app/Listeners/LogLoginActivity.php +++ b/app/Listeners/LogLoginActivity.php @@ -27,7 +27,7 @@ class LogLoginActivity // Simpan log login LoginLog::create([ - 'user_id' => $user->id, + 'user_id' => $user->id ?? null, 'ip_address' => request()->ip(), 'user_agent' => request()->userAgent(), 'status' => 'login', diff --git a/app/Listeners/LogLogoutActivity.php b/app/Listeners/LogLogoutActivity.php index d40d951..4b8bfd7 100644 --- a/app/Listeners/LogLogoutActivity.php +++ b/app/Listeners/LogLogoutActivity.php @@ -27,7 +27,7 @@ class LogLogoutActivity // Simpan log logout LoginLog::create([ - 'user_id' => $user->id, + 'user_id' => $user->id ?? null, 'ip_address' => request()->ip(), 'user_agent' => request()->userAgent(), 'status' => 'logout', // Kolom tambahan untuk menandakan logout diff --git a/app/Models/Admin.php b/app/Models/Admin.php index 7a93f59..f510f68 100644 --- a/app/Models/Admin.php +++ b/app/Models/Admin.php @@ -167,4 +167,11 @@ class Admin extends Authenticatable return []; } + + public static function getUserWhereRoleIsNot($roleName) + { + return self::whereDoesntHave('roles', function ($query) use ($roleName) { + $query->where('name', $roleName); + })->get(); + } } diff --git a/app/Models/Cabang.php b/app/Models/Cabang.php index b669d0f..869c0cd 100644 --- a/app/Models/Cabang.php +++ b/app/Models/Cabang.php @@ -27,4 +27,9 @@ class Cabang extends Model { return $this->belongsTo(Region::class, 'region_id'); } + + public function cost() + { + return $this->belongsTo(CostCentre::class, 'cost_id'); + } } diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index d6e0cf2..878de7b 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -11,6 +11,7 @@ use Database\Seeds\RolePermissionSeeder3; use Database\Seeds\RolePermissionSeeder4; use Database\Seeds\RolePermissionSeeder5; use Database\Seeds\RolePermissionSeeder6; +use Database\Seeds\RolePermissionSeeder7; class DatabaseSeeder extends Seeder { @@ -30,6 +31,7 @@ class DatabaseSeeder extends Seeder // $this->call(RolePermissionSeeder3::class); // $this->call(RolePermissionSeeder4::class); // $this->call(RolePermissionSeeder5::class); - $this->call(RolePermissionSeeder6::class); + // $this->call(RolePermissionSeeder6::class); + $this->call(RolePermissionSeeder7::class); } } diff --git a/database/seeds/RolePermissionSeeder7.php b/database/seeds/RolePermissionSeeder7.php new file mode 100644 index 0000000..b7e36a3 --- /dev/null +++ b/database/seeds/RolePermissionSeeder7.php @@ -0,0 +1,94 @@ + 'region', + 'permissions' => [ + 'region.view', + 'region.edit', + 'region.create', + 'region.delete', + ] + ], + [ + 'group_name' => 'cabang', + 'permissions' => [ + 'cabang.view', + 'cabang.edit', + 'cabang.create', + 'cabang.delete', + ] + ], + ]; + + // Do same for the admin guard for tutorial purposes. + $admin = Admin::where('username', 'superadmin')->first(); + $roleSuperAdmin = $this->maybeCreateSuperAdminRole($admin); + + // Create and Assign Permissions + for ($i = 0; $i < count($permissions); $i++) { + $permissionGroup = $permissions[$i]['group_name']; + for ($j = 0; $j < count($permissions[$i]['permissions']); $j++) { + $permissionExist = Permission::where('name', $permissions[$i]['permissions'][$j])->first(); + if (is_null($permissionExist)) { + $permission = Permission::create( + [ + 'name' => $permissions[$i]['permissions'][$j], + 'group_name' => $permissionGroup, + 'guard_name' => 'admin' + ] + ); + $roleSuperAdmin->givePermissionTo($permission); + $permission->assignRole($roleSuperAdmin); + } + } + } + + // Assign super admin role permission to superadmin user + if ($admin) { + $admin->assignRole($roleSuperAdmin); + } + } + + private function maybeCreateSuperAdminRole($admin): Role + { + if (is_null($admin)) { + $roleSuperAdmin = Role::create(['name' => 'superadmin', 'guard_name' => 'admin']); + } else { + $roleSuperAdmin = Role::where('name', 'superadmin')->where('guard_name', 'admin')->first(); + } + + if (is_null($roleSuperAdmin)) { + $roleSuperAdmin = Role::create(['name' => 'superadmin', 'guard_name' => 'admin']); + } + + return $roleSuperAdmin; + } +} diff --git a/resources/views/backend/pages/admins/index.blade.php b/resources/views/backend/pages/admins/index.blade.php index f8d468c..8856907 100644 --- a/resources/views/backend/pages/admins/index.blade.php +++ b/resources/views/backend/pages/admins/index.blade.php @@ -26,7 +26,7 @@
-
+

{{ $pageInfo['title'] }}

diff --git a/resources/views/backend/pages/forms/entertainment/index.blade.php b/resources/views/backend/pages/forms/entertainment/index.blade.php index 51e4a04..573df7b 100644 --- a/resources/views/backend/pages/forms/entertainment/index.blade.php +++ b/resources/views/backend/pages/forms/entertainment/index.blade.php @@ -84,7 +84,9 @@ # + No Expense User + Cabang Nama Penerima Tanggal Jenis @@ -111,7 +113,9 @@ @foreach ($forms as $item) {{ $loop->iteration }} + {{ $item->expense_number }} {{ $item->user->name }} + {{ $item->user->cabang->cabang->name }} {{ $item->name }} {{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }} {{ $item->jenis }} @@ -322,7 +326,7 @@ $('#dataTable').DataTable({ responsive: false, dom: 'Bfrtip', - buttons: ['excel', 'pdf', 'print'] + buttons: ['excel', 'pdf', 'print', 'colvis'], }); } diff --git a/resources/views/backend/pages/forms/meeting/index.blade.php b/resources/views/backend/pages/forms/meeting/index.blade.php index b72c780..bc1cfd9 100644 --- a/resources/views/backend/pages/forms/meeting/index.blade.php +++ b/resources/views/backend/pages/forms/meeting/index.blade.php @@ -86,6 +86,7 @@ # No Expense Nama + Cabang Tanggal Allowance Transport Ankot @@ -113,6 +114,7 @@ {{ $loop->iteration }} {{ $item->expense_number }} {{ $item->user->name }} + {{ $item->user->cabang->cabang->name }} {{ \Carbon\Carbon::parse($item->created_at)->locale('id')->isoFormat('D MMMM Y') }} {{ number_format($item->allowance, 0, ',', '.') }} {{ number_format($item->transport_ankot, 0, ',', '.') }} @@ -324,7 +326,7 @@ $('#dataTable').DataTable({ responsive: false, dom: 'Bfrtip', - buttons: ['excel', 'pdf', 'print'] + buttons: ['excel', 'pdf', 'print', 'colvis'], }); } diff --git a/resources/views/backend/pages/forms/other/index.blade.php b/resources/views/backend/pages/forms/other/index.blade.php index e5497a9..8a2616e 100644 --- a/resources/views/backend/pages/forms/other/index.blade.php +++ b/resources/views/backend/pages/forms/other/index.blade.php @@ -84,7 +84,9 @@ # + No Expense Nama + Cabang Tanggal Jenis Keterangan @@ -109,7 +111,9 @@ @foreach ($forms as $item) {{ $loop->iteration }} + {{ $item->expense_number }} {{ $item->user->name }} + {{ $item->user->cabang->cabang->name }} {{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }} {{ $item->kategori->name }} {{ $item->keterangan }} @@ -309,7 +313,7 @@ $('#dataTable').DataTable({ responsive: false, dom: 'Bfrtip', - buttons: ['excel', 'pdf', 'print'] + buttons: ['excel', 'pdf', 'print', 'colvis'], }); } diff --git a/resources/views/backend/pages/forms/upcountry/index.blade.php b/resources/views/backend/pages/forms/upcountry/index.blade.php index 4a33c2b..1c81fe1 100644 --- a/resources/views/backend/pages/forms/upcountry/index.blade.php +++ b/resources/views/backend/pages/forms/upcountry/index.blade.php @@ -86,6 +86,7 @@ # No Expense Nama + Cabang Rayon Tanggal Tujuan @@ -113,6 +114,7 @@ {{ $loop->iteration }} {{ $item->expense_number }} {{ $item->user->name }} + {{ $item->user->cabang->cabang->name }} {{ $item->rayon->code }} {{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }} {{ $item->tujuan }} @@ -350,7 +352,7 @@ $('#dataTable').DataTable({ responsive: false, dom: 'Bfrtip', - buttons: ['excel', 'pdf', 'print'] + buttons: ['excel', 'pdf', 'print', 'colvis'], }); } diff --git a/resources/views/backend/pages/forms/vehicle/index.blade.php b/resources/views/backend/pages/forms/vehicle/index.blade.php index d63941f..f2a3186 100644 --- a/resources/views/backend/pages/forms/vehicle/index.blade.php +++ b/resources/views/backend/pages/forms/vehicle/index.blade.php @@ -84,7 +84,9 @@ # + No Expense Nama + Cabang Tanggal Liter Total @@ -112,7 +114,9 @@ @foreach ($forms as $item) {{ $loop->iteration }} + {{ $item->expense_number }} {{ $item->user->name }} + {{ $item->user->cabang->cabang->name }} {{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('dddd, D MMMM Y HH:mm:ss') }} {{ $item->liter }} {{ number_format($item->total, 0, ',', '.') }} @@ -327,7 +331,7 @@ $('#dataTable').DataTable({ responsive: false, dom: 'Bfrtip', - buttons: ['excel', 'pdf', 'print'] + buttons: ['excel', 'pdf', 'print', 'colvis'], }); } diff --git a/resources/views/backend/pages/master/cabang/create.blade.php b/resources/views/backend/pages/master/cabang/create.blade.php new file mode 100644 index 0000000..54cb574 --- /dev/null +++ b/resources/views/backend/pages/master/cabang/create.blade.php @@ -0,0 +1,71 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') +
+
+
+
+

Tambahkan Cabang Baru

+
+
+ +
+
+
+
+
+
+
+
+
+ @csrf + @include('backend.layouts.partials.messages') +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+
+
+@endsection diff --git a/resources/views/backend/pages/master/cabang/edit.blade.php b/resources/views/backend/pages/master/cabang/edit.blade.php new file mode 100644 index 0000000..52ec95a --- /dev/null +++ b/resources/views/backend/pages/master/cabang/edit.blade.php @@ -0,0 +1,72 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') +
+
+
+
+

Edit Cabang

+
+
+ +
+
+
+
+
+
+
+
+
+ @csrf + @method('PUT') + @include('backend.layouts.partials.messages') +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+
+
+@endsection diff --git a/resources/views/backend/pages/master/cabang/index.blade.php b/resources/views/backend/pages/master/cabang/index.blade.php new file mode 100644 index 0000000..e565655 --- /dev/null +++ b/resources/views/backend/pages/master/cabang/index.blade.php @@ -0,0 +1,108 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') +
+
+
+
+

Data Master Cabang

+
+
+ +
+
+
+
+
+
+
+
+

List Data Cabang

+

+ @if (Auth::user()->can('cabang.create')) + + Add New Cabang + + @endif +

+
+
+ @include('backend.layouts.partials.messages') +
+ + + + + + + + + + + + + + + @foreach ($cabang as $item) + + + + + + + + + + + @endforeach + +
#Nama Kepala CabangEmail Kepala CabangRegionCodeNamaCost CentreAksi
{{ $loop->index + 1 }}{{ $item->head->name }}{{ $item->head->email }}{{ $item->region->name }}{{ $item->code }}{{ $item->name }}{{ $item->cost->name }} ({{ $item->cost->code }}) + @if (auth()->user()->can('cabang.edit')) + Edit + @endif + @if (auth()->user()->can('cabang.delete')) + + {{ __('Delete') }} + + + + @endif +
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/backend/pages/master/category/edit.blade.php b/resources/views/backend/pages/master/category/edit.blade.php index b85685f..6c1c062 100644 --- a/resources/views/backend/pages/master/category/edit.blade.php +++ b/resources/views/backend/pages/master/category/edit.blade.php @@ -37,7 +37,7 @@
- +
diff --git a/resources/views/backend/pages/master/category/index.blade.php b/resources/views/backend/pages/master/category/index.blade.php index 129507f..98b0c98 100644 --- a/resources/views/backend/pages/master/category/index.blade.php +++ b/resources/views/backend/pages/master/category/index.blade.php @@ -54,10 +54,10 @@ {{ $category->name }} {{ $category->account_number }} - @if (auth()->user()->can('admin.edit')) + @if (auth()->user()->can('category.edit')) Edit @endif - @if (auth()->user()->can('admin.delete')) + @if (auth()->user()->can('category.delete')) {{ __('Delete') }} diff --git a/resources/views/backend/pages/master/cost/edit.blade.php b/resources/views/backend/pages/master/cost/edit.blade.php index deeac40..fa532ff 100644 --- a/resources/views/backend/pages/master/cost/edit.blade.php +++ b/resources/views/backend/pages/master/cost/edit.blade.php @@ -37,7 +37,7 @@
- +
diff --git a/resources/views/backend/pages/master/cost/index.blade.php b/resources/views/backend/pages/master/cost/index.blade.php index b21dffb..42ada2d 100644 --- a/resources/views/backend/pages/master/cost/index.blade.php +++ b/resources/views/backend/pages/master/cost/index.blade.php @@ -54,10 +54,10 @@ {{ $cost->code }} {{ $cost->name }} - @if (auth()->user()->can('admin.edit')) + @if (auth()->user()->can('cost.edit')) Edit @endif - @if (auth()->user()->can('admin.delete')) + @if (auth()->user()->can('cost.delete')) {{ __('Delete') }} diff --git a/resources/views/backend/pages/master/rayon/edit.blade.php b/resources/views/backend/pages/master/rayon/edit.blade.php index eb13283..c62ca23 100644 --- a/resources/views/backend/pages/master/rayon/edit.blade.php +++ b/resources/views/backend/pages/master/rayon/edit.blade.php @@ -36,7 +36,7 @@ - + diff --git a/resources/views/backend/pages/master/rayon/index.blade.php b/resources/views/backend/pages/master/rayon/index.blade.php index ddd42c9..47b3987 100644 --- a/resources/views/backend/pages/master/rayon/index.blade.php +++ b/resources/views/backend/pages/master/rayon/index.blade.php @@ -54,10 +54,10 @@ {{ $rayon->code }} {{ $rayon->name }} - @if (auth()->user()->can('admin.edit')) + @if (auth()->user()->can('rayon.edit')) Edit @endif - @if (auth()->user()->can('admin.delete')) + @if (auth()->user()->can('rayon.delete')) {{ __('Delete') }} diff --git a/resources/views/backend/pages/master/region/create.blade.php b/resources/views/backend/pages/master/region/create.blade.php new file mode 100644 index 0000000..ab86a84 --- /dev/null +++ b/resources/views/backend/pages/master/region/create.blade.php @@ -0,0 +1,53 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') +
+ +
+
+
+
+
+
+ @csrf + @include('backend.layouts.partials.messages') +
+ + +
+
+ + +
+
+ + +
+ +
+
+
+
+
+@endsection diff --git a/resources/views/backend/pages/master/region/edit.blade.php b/resources/views/backend/pages/master/region/edit.blade.php new file mode 100644 index 0000000..f6e5bc4 --- /dev/null +++ b/resources/views/backend/pages/master/region/edit.blade.php @@ -0,0 +1,54 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') +
+
+
+
+

Edit Region

+
+
+ +
+
+
+
+
+
+
+
+
+ @csrf + @method('PUT') + @include('backend.layouts.partials.messages') +
+ + +
+
+ + +
+
+ + +
+ +
+
+
+
+
+@endsection diff --git a/resources/views/backend/pages/master/region/index.blade.php b/resources/views/backend/pages/master/region/index.blade.php new file mode 100644 index 0000000..b4b1849 --- /dev/null +++ b/resources/views/backend/pages/master/region/index.blade.php @@ -0,0 +1,104 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') +
+
+
+
+

Data Master Region

+
+
+ +
+
+
+
+
+
+
+
+

List Data Region

+

+ @if (Auth::user()->can('region.create')) + + Add New Region + + @endif +

+
+
+ @include('backend.layouts.partials.messages') +
+ + + + + + + + + + + + + @foreach ($region as $item) + + + + + + + + + @endforeach + +
#Nama Kepala RegionEmail Kepala RegionCodeNamaAksi
{{ $loop->index + 1 }}{{ $item->head->name }}{{ $item->head->email }}{{ $item->code }}{{ $item->name }} + @if (auth()->user()->can('region.edit')) + Edit + @endif + @if (auth()->user()->can('region.delete')) + + {{ __('Delete') }} + + + + @endif +
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/backend/pages/report/entertainment.blade.php b/resources/views/backend/pages/report/entertainment.blade.php new file mode 100644 index 0000000..5285049 --- /dev/null +++ b/resources/views/backend/pages/report/entertainment.blade.php @@ -0,0 +1,169 @@ +@extends('layouts.app') + +@section('title') + {{ $pageInfo['title'] }} +@endsection + +@section('admin-content') +
+
+
+
+

{{ $pageInfo['title'] }}

+
+
+ +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ {{-- submit button --}} +
+ +
+
+
+
+
+
+
+
+
+ + @php + use App\Helpers\NextCloudHelper; + @endphp + +
+
+ +
+
+
+
+

Form Entertainment & Presentation

+
+ @include('backend.layouts.partials.messages') +
+ + + + + + + + + + + + + + + + + + + + @foreach ($forms as $item) + + + + + + + + + + + + + + + + @endforeach + +
#No ExpenseUserCabangNama PenerimaTanggalJenisKeteranganTotalTotal ApprovedBuktiAccount NumberStatus
{{ $loop->iteration }}{{ $item->expense_number }}{{ $item->user->name }}{{ $item->user->cabang->cabang->name }}{{ $item->name }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }}{{ $item->jenis }}{{ $item->keterangan }}{{ number_format($item->total, 0, ',', '.') }}{{ number_format($item->approved_total, 0, ',', '.') }} + @if ($item->bukti_total) + + Download + + @else + - + @endif + {{ $item->account_number }} + @if ($item->status == 'On Progress') + {{ $item->status }} + @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') + {{ $item->status }} + @else + {{ $item->status }} + @endif +
+
+
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/backend/pages/report/meeting.blade.php b/resources/views/backend/pages/report/meeting.blade.php new file mode 100644 index 0000000..82bce68 --- /dev/null +++ b/resources/views/backend/pages/report/meeting.blade.php @@ -0,0 +1,159 @@ +@extends('layouts.app') + +@section('title') + {{ $pageInfo['title'] }} +@endsection + +@section('admin-content') +
+
+
+
+

{{ $pageInfo['title'] }}

+
+
+ +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ {{-- submit button --}} +
+ +
+
+
+
+
+
+
+
+
+ + @php + use App\Helpers\NextCloudHelper; + @endphp + +
+
+ +
+
+
+
+

Form Meeting & Seminar

+
+ @include('backend.layouts.partials.messages') +
+ + + + + + + + + + + + + + + + + + + @foreach ($forms as $item) + + + + + + + + + + + + + + + @endforeach + +
#No ExpenseNamaCabangTanggalAllowanceTransport AnkotHotelTotalTotal ApprovedAccount NumberStatus
{{ $loop->iteration }}{{ $item->expense_number }}{{ $item->user->name }}{{ $item->user->cabang->cabang->name }}{{ \Carbon\Carbon::parse($item->created_at)->locale('id')->isoFormat('D MMMM Y') }}{{ number_format($item->allowance, 0, ',', '.') }}{{ number_format($item->transport_ankot, 0, ',', '.') }}{{ number_format($item->hotel, 0, ',', '.') }}{{ number_format($item->total, 0, ',', '.') }}{{ number_format($item->approved_total, 0, ',', '.') }}{{ $item->account_number }} + @if ($item->status == 'On Progress') + {{ $item->status }} + @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') + {{ $item->status }} + @else + {{ $item->status }} + @endif +
+
+
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/backend/pages/report/others.blade.php b/resources/views/backend/pages/report/others.blade.php new file mode 100644 index 0000000..08a4647 --- /dev/null +++ b/resources/views/backend/pages/report/others.blade.php @@ -0,0 +1,165 @@ +@extends('layouts.app') + +@section('title') + {{ $pageInfo['title'] }} +@endsection + +@section('admin-content') +
+
+
+
+

{{ $pageInfo['title'] }}

+
+
+ +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ {{-- submit button --}} +
+ +
+
+
+
+
+
+
+
+
+ + @php + use App\Helpers\NextCloudHelper; + @endphp + +
+
+ +
+
+
+
+

Form Others

+
+ @include('backend.layouts.partials.messages') +
+ + + + + + + + + + + + + + + + + + @foreach ($forms as $item) + + + + + + + + + + + + + + @endforeach + +
#No ExpenseNamaCabangTanggalJenisKeteranganTotalBukti TotalAccount NumberStatus
{{ $loop->iteration }}{{ $item->expense_number }}{{ $item->user->name }}{{ $item->user->cabang->cabang->name }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }}{{ $item->kategori->name }}{{ $item->keterangan }}{{ number_format($item->total, 0, ',', '.') }} + @if ($item->bukti_total) + + Download + + @else + - + @endif + {{ $item->account_number }} + @if ($item->status == 'On Progress') + {{ $item->status }} + @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') + {{ $item->status }} + @else + {{ $item->status }} + @endif +
+
+
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/backend/pages/report/upcountry.blade.php b/resources/views/backend/pages/report/upcountry.blade.php new file mode 100644 index 0000000..c5746a3 --- /dev/null +++ b/resources/views/backend/pages/report/upcountry.blade.php @@ -0,0 +1,165 @@ +@extends('layouts.app') + +@section('title') + {{ $pageInfo['title'] }} +@endsection + +@section('admin-content') +
+
+
+
+

{{ $pageInfo['title'] }}

+
+
+ +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ {{-- submit button --}} +
+ +
+
+
+
+
+
+
+
+
+ + @php + use App\Helpers\NextCloudHelper; + @endphp + +
+
+ +
+
+
+
+

Form Up Country

+
+ @include('backend.layouts.partials.messages') +
+ + + + + + + + + + + + + + + + + + + @foreach ($forms as $item) + + + + + + + + + + + + + + + @endforeach + +
#No ExpenseNamaCabangRayonTanggalTujuanJarakTotalTotal ApprovedAccount NumberStatus
{{ $loop->iteration }}{{ $item->expense_number }}{{ $item->user->name }}{{ $item->user->cabang->cabang->name }}{{ $item->rayon->code }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }}{{ $item->tujuan }}{{ $item->jarak }} km{{ number_format($item->total, 0, ',', '.') }} + @if ($item->approved_total) + {{ number_format($item->approved_total, 0, ',', '.') }} + @else + - + @endif + {{ $item->account_number }} + @if ($item->status == 'On Progress') + {{ $item->status }} + @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') + {{ $item->status }} + @else + {{ $item->status }} + @endif +
+
+
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/backend/pages/report/vehicle.blade.php b/resources/views/backend/pages/report/vehicle.blade.php new file mode 100644 index 0000000..e157a93 --- /dev/null +++ b/resources/views/backend/pages/report/vehicle.blade.php @@ -0,0 +1,171 @@ +@extends('layouts.app') + +@section('title') + {{ $pageInfo['title'] }} +@endsection + +@section('admin-content') +
+
+
+
+

{{ $pageInfo['title'] }}

+
+
+ +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ {{-- submit button --}} +
+ +
+
+
+
+
+
+
+
+
+ + @php + use App\Helpers\NextCloudHelper; + @endphp + +
+
+ +
+
+
+
+

Form Vehicle Running Cost

+
+ @include('backend.layouts.partials.messages') +
+ + + + + + + + + + + + + + + + + + + + + @foreach ($forms as $item) + + + + + + + + + + + + + + + + + @endforeach + +
#No ExpenseNamaCabangTanggalLiterTotalTotal ApprovedJarakTipe BensinNomor PolisiBuktiAccount NumberStatus
{{ $loop->iteration }}{{ $item->expense_number }}{{ $item->user->name }}{{ $item->user->cabang->cabang->name }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('dddd, D MMMM Y HH:mm:ss') }}{{ $item->liter }}{{ number_format($item->total, 0, ',', '.') }}{{ number_format($item->approved_total, 0, ',', '.') }}{{ $item->jarak }} km{{ $item->tipe_bensin }}{{ $item->nopol }} + @if ($item->bukti_total) + + Download + + @else + - + @endif + {{ $item->account_number }} + @if ($item->status == 'On Progress') + {{ $item->status }} + @elseif ($item->status == 'Approved' || $item->status == 'Final Approved') + {{ $item->status }} + @else + {{ $item->status }} + @endif +
+
+
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/layouts/partials/styles.blade.php b/resources/views/layouts/partials/styles.blade.php index 39eb2ba..0cbc74d 100644 --- a/resources/views/layouts/partials/styles.blade.php +++ b/resources/views/layouts/partials/styles.blade.php @@ -89,4 +89,9 @@ margin-bottom: 15px; /* Adjust the value as needed */ margin-right: 20px; } + + .dt-search { + float: right; + text-align: right; + } diff --git a/routes/web.php b/routes/web.php index 7e960b8..1dcbc47 100644 --- a/routes/web.php +++ b/routes/web.php @@ -18,6 +18,9 @@ use App\Http\Controllers\Forms\FormMeetingSeminarController; use App\Http\Controllers\Forms\FormOtherController; use App\Http\Controllers\Backend\AuditTrailController; use App\Http\Controllers\Backend\BudgetControlController; +use App\Http\Controllers\Backend\ReportController; +use App\Http\Controllers\Master\RegionController; +use App\Http\Controllers\Master\CabangController; Auth::routes(); @@ -63,6 +66,22 @@ Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth:admi Route::put('/category/update/{id}', [CategoryController::class, 'update'])->name('category.update'); Route::delete('/category/destroy/{id}', [CategoryController::class, 'destroy'])->name('category.destroy'); + // Region + Route::get('/region', [RegionController::class, 'index'])->name('region.index'); + Route::get('/region/create', [RegionController::class, 'create'])->name('region.create'); + Route::post('/region/store', [RegionController::class, 'store'])->name('region.store'); + Route::get('/region/edit/{id}', [RegionController::class, 'edit'])->name('region.edit'); + Route::put('/region/update/{id}', [RegionController::class, 'update'])->name('region.update'); + Route::delete('/region/destroy/{id}', [RegionController::class, 'destroy'])->name('region.destroy'); + + // Cabang + Route::get('/cabang', [CabangController::class, 'index'])->name('cabang.index'); + Route::get('/cabang/create', [CabangController::class, 'create'])->name('cabang.create'); + Route::post('/cabang/store', [CabangController::class, 'store'])->name('cabang.store'); + Route::get('/cabang/edit/{id}', [CabangController::class, 'edit'])->name('cabang.edit'); + Route::put('/cabang/update/{id}', [CabangController::class, 'update'])->name('cabang.update'); + Route::delete('/cabang/destroy/{id}', [CabangController::class, 'destroy'])->name('cabang.destroy'); + // Audit Trail Route::get('/audit-trails', [AuditTrailController::class, 'index'])->name('audit-trail.index'); @@ -83,6 +102,14 @@ Route::middleware(['auth:admin', 'menu'])->group(function () { Route::delete('/destroy/{id}', [BudgetControlController::class, 'destroy'])->name('budget_control.destroy'); }); + Route::prefix('reports')->group(function () { + Route::get('/upcountry', [ReportController::class, 'upcountry'])->name('reports.upcountry'); + Route::get('/vehicle', [ReportController::class, 'vehicle'])->name('reports.vehicle'); + Route::get('/entertainment', [ReportController::class, 'entertainment'])->name('reports.entertainment'); + Route::get('/meeting', [ReportController::class, 'meeting'])->name('reports.meeting'); + Route::get('/others', [ReportController::class, 'others'])->name('reports.others'); + }); + // Forms Route::prefix('forms')->group(function () { // Up Country