From 1027b0dfb482f2f64a9d137a762011fdc4161cfb Mon Sep 17 00:00:00 2001 From: Jagad R R Date: Tue, 7 Jan 2025 17:23:42 +0700 Subject: [PATCH] add budgets --- .../Backend/BudgetControlController.php | 153 ++++++++++++++++++ ...ormEntertainmentPresentationController.php | 16 +- .../Forms/FormMeetingSeminarController.php | 16 +- .../Controllers/Forms/FormOtherController.php | 18 ++- .../Forms/FormUpCountryController.php | 15 +- .../Forms/FormVehicleController.php | 17 +- app/Models/Admin.php | 12 ++ app/Models/BudgetControl.php | 45 ++++++ app/Models/BudgetControlLog.php | 45 ++++++ ..._07_055440_create_budget_request_table.php | 44 +++++ ...074548_create_budget_control_log_table.php | 44 +++++ database/seeds/DatabaseSeeder.php | 4 +- database/seeds/RolePermissionSeeder6.php | 79 +++++++++ .../pages/budget_control/create.blade.php | 107 ++++++++++++ .../pages/budget_control/edit.blade.php | 0 .../pages/budget_control/index.blade.php | 150 +++++++++++++++++ .../pages/budget_control/log.blade.php | 92 +++++++++++ .../pages/forms/entertainment/index.blade.php | 5 +- .../pages/forms/meeting/index.blade.php | 5 +- .../backend/pages/forms/other/index.blade.php | 5 +- .../pages/forms/upcountry/index.blade.php | 5 +- .../pages/forms/vehicle/index.blade.php | 5 +- resources/views/layouts/app.blade.php | 7 + routes/web.php | 15 +- 24 files changed, 868 insertions(+), 36 deletions(-) create mode 100644 app/Http/Controllers/Backend/BudgetControlController.php create mode 100644 app/Models/BudgetControl.php create mode 100644 app/Models/BudgetControlLog.php create mode 100644 database/migrations/2025_01_07_055440_create_budget_request_table.php create mode 100644 database/migrations/2025_01_07_074548_create_budget_control_log_table.php create mode 100644 database/seeds/RolePermissionSeeder6.php create mode 100644 resources/views/backend/pages/budget_control/create.blade.php create mode 100644 resources/views/backend/pages/budget_control/edit.blade.php create mode 100644 resources/views/backend/pages/budget_control/index.blade.php create mode 100644 resources/views/backend/pages/budget_control/log.blade.php diff --git a/app/Http/Controllers/Backend/BudgetControlController.php b/app/Http/Controllers/Backend/BudgetControlController.php new file mode 100644 index 0000000..04a5c86 --- /dev/null +++ b/app/Http/Controllers/Backend/BudgetControlController.php @@ -0,0 +1,153 @@ +checkAuthorization(auth()->user(), ['budget_control.view']); + session()->put('redirect_url', route('budget_control')); + + // Get the budget control data + $budget = BudgetControl::orderBy('created_at', 'desc')->with(['user', 'cabang'])->get(); + + // Initialize an empty array to hold the used budget sums + $usedBudget = []; + + foreach ($budget as $b) { + // Get the month and year from the budget + $month = $b->periode_month; + $year = $b->periode_year; + + // Add the used budget per model for the specified month and year to the usedBudget array + $usedBudget[] = [ + 'FormUpCountry' => FormUpCountry::whereIn('status', ['Approved', 'Closed']) + ->whereMonth('tanggal', '=', date('m', strtotime($month))) + ->whereYear('tanggal', '=', $year) + ->sum('approved_total'), + + 'FormMeetingSeminar' => FormMeetingSeminar::whereIn('status', ['Approved', 'Closed']) + ->whereMonth('created_at', '=', date('m', strtotime($month))) + ->whereYear('created_at', '=', $year) + ->sum('approved_total'), + + 'FormOthers' => FormOthers::whereIn('status', ['Approved', 'Closed']) + ->whereMonth('tanggal', '=', date('m', strtotime($month))) + ->whereYear('tanggal', '=', $year) + ->sum('approved_total'), + + 'FormEntertaimentPresentation' => FormEntertaimentPresentation::whereIn('status', ['Approved', 'Closed']) + ->whereMonth('tanggal', '=', date('m', strtotime($month))) + ->whereYear('tanggal', '=', $year) + ->sum('approved_total'), + + 'FormVehicleRunningCost' => FormVehicleRunningCost::whereIn('status', ['Approved', 'Closed']) + ->whereMonth('tanggal', '=', date('m', strtotime($month))) + ->whereYear('tanggal', '=', $year) + ->sum('approved_total') + ]; + } + + $usedBudget = array_sum(array_map(function ($b) { + return array_sum($b); + }, $usedBudget)); + + return view( + 'backend.pages.budget_control.index', + [ + 'data' => $budget, + 'usedBudget' => $usedBudget, + 'availableBudget' => $budget->sum('amount') - $usedBudget, + ] + ); + } + + public function log() + { + $this->checkAuthorization(auth()->user(), ['budget_control.view']); + session()->put('redirect_url', route('budget_control')); + + return view( + 'backend.pages.budget_control.log', + [ + 'data' => BudgetControlLog::orderBy('created_at', 'desc')->with(['user', 'cabang'])->get(), + ] + ); + } + + public function create() + { + $this->checkAuthorization(auth()->user(), ['budget_control.create']); + $users = Admin::getUserByRoleName('Area Manager Cabang'); + + return view('backend.pages.budget_control.create', [ + 'users' => $users, + ]); + } + + public function store(Request $request) + { + $this->checkAuthorization(auth()->user(), ['budget_control.create']); + + $validated = $request->validate([ + 'receiver_id' => 'required|exists:admins,id', + 'periode_month' => 'required|string|in:january,february,march,april,may,june,july,august,september,october,november,december', + 'periode_year' => 'required|numeric', + 'amount' => 'required|numeric', + 'remarks' => 'nullable|string', + 'closing_at' => 'required|date', + ]); + + $cabang_id = Admin::find($validated['receiver_id'])->getMyCabangAndRegionId()['cabang']; + BudgetControl::updateOrCreate(['cabang_id' => $cabang_id], + [ + 'sender_id' => auth()->user()->id, + 'receiver_id' => $validated['receiver_id'], + 'periode_month' => $validated['periode_month'], + 'periode_year' => $validated['periode_year'], + 'amount' => $validated['amount'], + 'remarks' => $validated['remarks'], + 'closing_at' => $validated['closing_at'], + 'status' => 'Assigned', + ]); + + BudgetControlLog::create([ + 'cabang_id' => $cabang_id, + 'sender_id' => auth()->user()->id, + 'receiver_id' => $validated['receiver_id'], + 'periode_month' => $validated['periode_month'], + 'periode_year' => $validated['periode_year'], + 'amount' => $validated['amount'], + 'remarks' => $validated['remarks'], + 'closing_at' => $validated['closing_at'], + 'status' => 'Assigned', + ]); + + session()->flash('success', 'Budget has been added or updated successfully'); + return redirect()->route('budget_control'); + } + + public function destroy($id) + { + $this->checkAuthorization(auth()->user(), ['budget_control.delete']); + + $budgetRequest = BudgetControl::findOrfail($id); + $budgetRequest->delete(); + + return redirect()->route('budget_control'); + } +} diff --git a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php index 19f1b07..3125c77 100644 --- a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php +++ b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php @@ -159,10 +159,11 @@ class FormEntertainmentPresentationController extends Controller public function edit($id) { $this->checkAuthorization(auth()->user(), ['forms.entertainment.edit']); + $role = auth()->user()->getRoleNames()[0]; $form = FormEntertaimentPresentation::findOrfail($id); - if($form->status == 'Closed') { - session()->flash('error', 'Form has been closed, you cannot edit it.'); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); return redirect()->back(); } @@ -174,6 +175,7 @@ class FormEntertainmentPresentationController extends Controller public function update(Request $request, $id) { $this->checkAuthorization(auth()->user(), ['forms.entertainment.edit']); + $role = auth()->user()->getRoleNames()[0]; $request->validate([ 'tanggal' => 'required', @@ -187,8 +189,8 @@ class FormEntertainmentPresentationController extends Controller ]); $form = FormEntertaimentPresentation::findOrfail($id); - if($form->status == 'Closed') { - session()->flash('error', 'Form has been closed, you cannot edit it.'); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); return redirect()->back(); } @@ -414,8 +416,14 @@ class FormEntertainmentPresentationController extends Controller public function destroy($id) { $this->checkAuthorization(auth()->user(), ['forms.entertainment.delete']); + $role = auth()->user()->getRoleNames()[0]; $form = FormEntertaimentPresentation::findOrfail($id); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); + return redirect()->back(); + } + AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Form Entertainment Presentation (' . $form->expense_number . ')'); $form->delete(); diff --git a/app/Http/Controllers/Forms/FormMeetingSeminarController.php b/app/Http/Controllers/Forms/FormMeetingSeminarController.php index 58be413..d342a46 100644 --- a/app/Http/Controllers/Forms/FormMeetingSeminarController.php +++ b/app/Http/Controllers/Forms/FormMeetingSeminarController.php @@ -190,10 +190,11 @@ class FormMeetingSeminarController extends Controller public function edit($id) { $this->checkAuthorization(auth()->user(), ['forms.meeting.edit']); + $role = auth()->user()->getRoleNames()[0]; $form = FormMeetingSeminar::findOrfail($id); - if($form->status == 'Closed') { - session()->flash('error', 'Form has been closed, you cannot edit it.'); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); return redirect()->back(); } @@ -205,6 +206,7 @@ class FormMeetingSeminarController extends Controller public function update(Request $request, $id) { $this->checkAuthorization(auth()->user(), ['forms.meeting.edit']); + $role = auth()->user()->getRoleNames()[0]; $request->validate([ 'allowance' => 'nullable|numeric', @@ -216,8 +218,8 @@ class FormMeetingSeminarController extends Controller ]); $form = FormMeetingSeminar::findOrfail($id); - if($form->status == 'Closed') { - session()->flash('error', 'Form has been closed, you cannot edit it.'); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); return redirect()->back(); } @@ -477,8 +479,14 @@ class FormMeetingSeminarController extends Controller public function destroy($id) { $this->checkAuthorization(auth()->user(), ['forms.meeting.delete']); + $role = auth()->user()->getRoleNames()[0]; $form = FormMeetingSeminar::findOrfail($id); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); + return redirect()->back(); + } + AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Form Meeting Seminar (' . $form->expense_number . ')'); $form->delete(); diff --git a/app/Http/Controllers/Forms/FormOtherController.php b/app/Http/Controllers/Forms/FormOtherController.php index caaa8f8..9c74822 100644 --- a/app/Http/Controllers/Forms/FormOtherController.php +++ b/app/Http/Controllers/Forms/FormOtherController.php @@ -127,7 +127,6 @@ class FormOtherController extends Controller $bukti_total->getContent(), $filename ); - } // Generate sequence number and expense number @@ -156,10 +155,11 @@ class FormOtherController extends Controller public function edit($id) { $this->checkAuthorization(auth()->user(), ['forms.other.edit']); + $role = auth()->user()->getRoleNames()[0]; $form = FormOthers::findOrfail($id); - if($form->status == 'Closed') { - session()->flash('error', 'Form has been closed, you cannot edit it.'); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); return redirect()->back(); } @@ -172,6 +172,7 @@ class FormOtherController extends Controller public function update(Request $request, $id) { $this->checkAuthorization(auth()->user(), ['forms.other.edit']); + $role = auth()->user()->getRoleNames()[0]; $request->validate([ 'kategori_id' => 'required', @@ -182,8 +183,8 @@ class FormOtherController extends Controller ]); $form = FormOthers::findOrfail($id); - if($form->status == 'Closed') { - session()->flash('error', 'Form has been closed, you cannot edit it.'); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); return redirect()->back(); } @@ -205,7 +206,6 @@ class FormOtherController extends Controller $bukti_total->getContent(), $filename ); - } // Save the form data @@ -407,8 +407,14 @@ class FormOtherController extends Controller public function destroy($id) { $this->checkAuthorization(auth()->user(), ['forms.other.delete']); + $role = auth()->user()->getRoleNames()[0]; $form = FormOthers::findOrfail($id); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); + return redirect()->back(); + } + AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Form Entertainment Presentation (' . $form->expense_number . ')'); $form->delete(); diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index 404bb7a..6a4ecdd 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -220,10 +220,11 @@ class FormUpCountryController extends Controller public function edit($id) { $this->checkAuthorization(auth()->user(), ['forms.country.edit']); + $role = auth()->user()->getRoleNames()[0]; $form = FormUpCountry::with('rayon')->findOrfail($id); - if($form->status == 'Closed') { - session()->flash('error', 'Form has been closed, you cannot edit it.'); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); return redirect()->back(); } @@ -236,6 +237,7 @@ class FormUpCountryController extends Controller public function update(Request $request, $id) { $this->checkAuthorization(auth()->user(), ['forms.country.edit']); + $role = auth()->user()->getRoleNames()[0]; $request->validate([ 'rayon_id' => 'required|exists:rayon,id', @@ -253,8 +255,8 @@ class FormUpCountryController extends Controller ]); $form = FormUpCountry::findOrfail($id); - if($form->status == 'Closed') { - session()->flash('error', 'Form has been closed, you cannot edit it.'); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); return redirect()->back(); } @@ -537,6 +539,11 @@ class FormUpCountryController extends Controller $this->checkAuthorization(auth()->user(), ['forms.country.delete']); $form = FormUpCountry::findOrfail($id); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); + return redirect()->back(); + } + AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Form Entertainment Presentation (' . $form->expense_number . ')'); $form->delete(); diff --git a/app/Http/Controllers/Forms/FormVehicleController.php b/app/Http/Controllers/Forms/FormVehicleController.php index 07c1d95..38b4bef 100644 --- a/app/Http/Controllers/Forms/FormVehicleController.php +++ b/app/Http/Controllers/Forms/FormVehicleController.php @@ -159,10 +159,11 @@ class FormVehicleController extends Controller public function edit($id) { $this->checkAuthorization(auth()->user(), ['forms.vehicle.edit']); + $role = auth()->user()->getRoleNames()[0]; $form = FormVehicleRunningCost::findOrfail($id); - if($form->status == 'Closed') { - session()->flash('error', 'Form has been closed, you cannot edit it.'); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); return redirect()->back(); } @@ -174,6 +175,7 @@ class FormVehicleController extends Controller public function update(Request $request, $id) { $this->checkAuthorization(auth()->user(), ['forms.vehicle.edit']); + $role = auth()->user()->getRoleNames()[0]; $request->validate([ 'tanggal' => 'required', @@ -187,8 +189,8 @@ class FormVehicleController extends Controller ]); $form = FormVehicleRunningCost::findOrfail($id); - if($form->status == 'Closed') { - session()->flash('error', 'Form has been closed, you cannot edit it.'); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); return redirect()->back(); } @@ -210,7 +212,6 @@ class FormVehicleController extends Controller $bukti_total->getContent(), $filename ); - } // Save the form data @@ -415,8 +416,14 @@ class FormVehicleController extends Controller public function destroy($id) { $this->checkAuthorization(auth()->user(), ['forms.vehicle.delete']); + $role = auth()->user()->getRoleNames()[0]; $form = FormVehicleRunningCost::findOrfail($id); + if($form->status != 'On Progress' && $role == 'Medical Representatif') { + session()->flash('error', 'You cannot edit this form because it has been approved or rejected.'); + return redirect()->back(); + } + AuditTrailHelper::AddAuditTrail('Delete', 'Delete Record at Form Entertainment Presentation (' . $form->expense_number . ')'); $form->delete(); diff --git a/app/Models/Admin.php b/app/Models/Admin.php index 4530d43..7a93f59 100644 --- a/app/Models/Admin.php +++ b/app/Models/Admin.php @@ -8,6 +8,7 @@ use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Support\Facades\DB; use Spatie\Permission\Traits\HasRoles; +use Spatie\Permission\Models\Role; class Admin extends Authenticatable { @@ -155,4 +156,15 @@ class Admin extends Authenticatable { return $this->hasOne(UserHasCabang::class, 'user_id')->with('cabang'); } + + public static function getUserByRoleName($roleName) + { + $role = Role::where('name', $roleName)->first(); + + if ($role) { + return $role->users()->with('cabang')->get(); + } + + return []; + } } diff --git a/app/Models/BudgetControl.php b/app/Models/BudgetControl.php new file mode 100644 index 0000000..06e7eec --- /dev/null +++ b/app/Models/BudgetControl.php @@ -0,0 +1,45 @@ +belongsTo(Admin::class, 'user_id'); + } + + public function cabang() + { + return $this->belongsTo(Cabang::class, 'cabang_id'); + } + + public function sender() + { + return $this->belongsTo(Admin::class, 'sender_id'); + } + + public function receiver() + { + return $this->belongsTo(Admin::class, 'receiver_id'); + } +} diff --git a/app/Models/BudgetControlLog.php b/app/Models/BudgetControlLog.php new file mode 100644 index 0000000..dee8b42 --- /dev/null +++ b/app/Models/BudgetControlLog.php @@ -0,0 +1,45 @@ +belongsTo(Admin::class, 'user_id'); + } + + public function cabang() + { + return $this->belongsTo(Cabang::class, 'cabang_id'); + } + + public function sender() + { + return $this->belongsTo(Admin::class, 'sender_id'); + } + + public function receiver() + { + return $this->belongsTo(Admin::class, 'receiver_id'); + } +} diff --git a/database/migrations/2025_01_07_055440_create_budget_request_table.php b/database/migrations/2025_01_07_055440_create_budget_request_table.php new file mode 100644 index 0000000..49d47d5 --- /dev/null +++ b/database/migrations/2025_01_07_055440_create_budget_request_table.php @@ -0,0 +1,44 @@ +id(); + $table->foreignId('cabang_id')->nullable()->constrained('cabang'); + + $table->foreignId('sender_id')->constrained('admins'); + $table->foreignId('receiver_id')->constrained('admins'); + + $table->integer('amount'); + $table->string('remarks')->nullable(); + + $table->string('periode_month'); + $table->integer('periode_year'); + + $table->timestamp('transferred_at')->nullable(); + $table->timestamp('closing_at')->nullable(); + + $table->string('status')->default('Unassigned'); + + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('budget_control'); + } +}; diff --git a/database/migrations/2025_01_07_074548_create_budget_control_log_table.php b/database/migrations/2025_01_07_074548_create_budget_control_log_table.php new file mode 100644 index 0000000..ad2e764 --- /dev/null +++ b/database/migrations/2025_01_07_074548_create_budget_control_log_table.php @@ -0,0 +1,44 @@ +id(); + $table->foreignId('cabang_id')->nullable()->constrained('cabang'); + + $table->foreignId('sender_id')->constrained('admins'); + $table->foreignId('receiver_id')->constrained('admins'); + + $table->integer('amount'); + $table->string('remarks')->nullable(); + + $table->string('periode_month'); + $table->integer('periode_year'); + + $table->timestamp('transferred_at')->nullable(); + $table->timestamp('closing_at')->nullable(); + + $table->string('status')->default('Unassigned'); + + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('budget_control_log'); + } +}; diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 56a05e1..d6e0cf2 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -10,6 +10,7 @@ use Database\Seeds\RolePermissionSeeder2; use Database\Seeds\RolePermissionSeeder3; use Database\Seeds\RolePermissionSeeder4; use Database\Seeds\RolePermissionSeeder5; +use Database\Seeds\RolePermissionSeeder6; class DatabaseSeeder extends Seeder { @@ -28,6 +29,7 @@ class DatabaseSeeder extends Seeder // $this->call(RolePermissionSeeder2::class); // $this->call(RolePermissionSeeder3::class); // $this->call(RolePermissionSeeder4::class); - $this->call(RolePermissionSeeder5::class); + // $this->call(RolePermissionSeeder5::class); + $this->call(RolePermissionSeeder6::class); } } diff --git a/database/seeds/RolePermissionSeeder6.php b/database/seeds/RolePermissionSeeder6.php new file mode 100644 index 0000000..11b1401 --- /dev/null +++ b/database/seeds/RolePermissionSeeder6.php @@ -0,0 +1,79 @@ + 'budget_control', + 'permissions' => [ + 'budget_control.view', + 'budget_control.create', + 'budget_control.edit', + 'budget_control.delete', + 'budget_control.approve', + ] + ], + ]; + + // 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/budget_control/create.blade.php b/resources/views/backend/pages/budget_control/create.blade.php new file mode 100644 index 0000000..699643c --- /dev/null +++ b/resources/views/backend/pages/budget_control/create.blade.php @@ -0,0 +1,107 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') + + +
+
+
+
+

Transfer Budgets

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

Active Budgets

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

Rp {{ number_format($data->whereIn('status', 'Assigned')->sum('amount'), 0, ',', '.') }}

+

Total Budget Bulan Ini

+
+
+ +
+
+
+
+
+
+

Rp {{ number_format($availableBudget, 0, ',', '.') }}

+

Total Budget Tersedia

+
+
+ +
+
+
+
+
+
+

Rp {{ number_format($usedBudget, 0, ',', '.') }}

+

Total Budget Terpakai

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

Current Active Budget

+

+ @if (auth()->user()->can('budget_control.create')) + + Add New Budget + + @endif +

+
+
+ @include('backend.layouts.partials.messages') +
+ + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + + + + @endforeach + +
#PenerimaCabangPengirimTotalKeteranganPeriodeTanggal ClosingStatusAksi
{{ $loop->iteration }}{{ $item->receiver->name }}{{ $item->cabang->name }}{{ $item->sender->name }}{{ number_format($item->amount, 0, ',', '.') }}{{ $item->remarks }}{{ strtoupper($item->periode_month) }} {{ $item->periode_year }}{{ \Carbon\Carbon::parse($item->closing_at)->locale('id')->isoFormat('D MMMM Y H:mm') }} + @if ($item->status == 'Unassigned') + {{ $item->status }} + @elseif ($item->status == 'Assigned') + {{ $item->status }} + @else + {{ $item->status }} + @endif + + @if (auth()->user()->can('budget_control.delete')) +
+ @csrf + @method('DELETE') + +
+ @endif +
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/backend/pages/budget_control/log.blade.php b/resources/views/backend/pages/budget_control/log.blade.php new file mode 100644 index 0000000..2e940e7 --- /dev/null +++ b/resources/views/backend/pages/budget_control/log.blade.php @@ -0,0 +1,92 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') +
+
+
+
+

Log Transfer Budgets

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

Log Transfer Budgets

+
+
+ @include('backend.layouts.partials.messages') +
+ + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + + + @endforeach + +
#PenerimaCabangPengirimTotalKeteranganPeriodeTanggal ClosingStatus
{{ $loop->iteration }}{{ $item->receiver->name }}{{ $item->cabang->name }}{{ $item->sender->name }}{{ number_format($item->amount, 0, ',', '.') }}{{ $item->remarks }}{{ strtoupper($item->periode_month) }} {{ $item->periode_year }}{{ \Carbon\Carbon::parse($item->closing_at)->locale('id')->isoFormat('D MMMM Y H:mm') }} + @if ($item->status == 'Unassigned') + {{ $item->status }} + @elseif ($item->status == 'Assigned') + {{ $item->status }} + @else + {{ $item->status }} + @endif +
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/backend/pages/forms/entertainment/index.blade.php b/resources/views/backend/pages/forms/entertainment/index.blade.php index c5bbd0d..51e4a04 100644 --- a/resources/views/backend/pages/forms/entertainment/index.blade.php +++ b/resources/views/backend/pages/forms/entertainment/index.blade.php @@ -106,6 +106,7 @@ @php use App\Helpers\NextCloudHelper; + $role = auth()->user()->getRoleNames()[0]; @endphp @foreach ($forms as $item) @@ -201,13 +202,13 @@ @endif - @if (auth()->user()->can('forms.entertainment.edit')) + @if (($role != 'Medical Representatif' && auth()->user()->can('forms.entertainment.edit')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) @endif - @if (auth()->user()->can('forms.entertainment.delete')) + @if (($role != 'Medical Representatif' && auth()->user()->can('forms.entertainment.delete')) || ($role == 'Medical Representatif' && $item->status == 'On Progress'))
@csrf @method('DELETE') diff --git a/resources/views/backend/pages/forms/meeting/index.blade.php b/resources/views/backend/pages/forms/meeting/index.blade.php index 7bc9aa3..b72c780 100644 --- a/resources/views/backend/pages/forms/meeting/index.blade.php +++ b/resources/views/backend/pages/forms/meeting/index.blade.php @@ -106,6 +106,7 @@ @php use App\Helpers\NextCloudHelper; + $role = auth()->user()->getRoleNames()[0]; @endphp @foreach ($forms as $item) @@ -193,13 +194,13 @@ @endif - @if (auth()->user()->can('forms.meeting.edit')) + @if (($role != 'Medical Representatif' && auth()->user()->can('forms.meeting.edit')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) @endif - @if (auth()->user()->can('forms.meeting.delete')) + @if (($role != 'Medical Representatif' && auth()->user()->can('forms.meeting.delete')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) @csrf @method('DELETE') diff --git a/resources/views/backend/pages/forms/other/index.blade.php b/resources/views/backend/pages/forms/other/index.blade.php index 79b2511..e5497a9 100644 --- a/resources/views/backend/pages/forms/other/index.blade.php +++ b/resources/views/backend/pages/forms/other/index.blade.php @@ -104,6 +104,7 @@ @php use App\Helpers\NextCloudHelper; + $role = auth()->user()->getRoleNames()[0]; @endphp @foreach ($forms as $item) @@ -197,13 +198,13 @@ @endif - @if (auth()->user()->can('forms.other.edit')) + @if (($role != 'Medical Representatif' && auth()->user()->can('forms.other.edit')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) @endif - @if (auth()->user()->can('forms.other.delete')) + @if (($role != 'Medical Representatif' && auth()->user()->can('forms.other.delete')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) @csrf @method('DELETE') diff --git a/resources/views/backend/pages/forms/upcountry/index.blade.php b/resources/views/backend/pages/forms/upcountry/index.blade.php index 3fcc34c..4a33c2b 100644 --- a/resources/views/backend/pages/forms/upcountry/index.blade.php +++ b/resources/views/backend/pages/forms/upcountry/index.blade.php @@ -106,6 +106,7 @@ @php use App\Helpers\NextCloudHelper; + $role = auth()->user()->getRoleNames()[0]; @endphp @foreach ($forms as $item) @@ -199,13 +200,13 @@ @endif - @if (auth()->user()->can('forms.country.edit')) + @if (($role != 'Medical Representatif' && auth()->user()->can('forms.country.edit')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) @endif - @if (auth()->user()->can('forms.country.delete')) + @if (($role != 'Medical Representatif' && auth()->user()->can('forms.country.delete')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) @csrf @method('DELETE') diff --git a/resources/views/backend/pages/forms/vehicle/index.blade.php b/resources/views/backend/pages/forms/vehicle/index.blade.php index 0c317a8..d63941f 100644 --- a/resources/views/backend/pages/forms/vehicle/index.blade.php +++ b/resources/views/backend/pages/forms/vehicle/index.blade.php @@ -107,6 +107,7 @@ @php use App\Helpers\NextCloudHelper; + $role = auth()->user()->getRoleNames()[0]; @endphp @foreach ($forms as $item) @@ -203,13 +204,13 @@ @endif - @if (auth()->user()->can('forms.vehicle.edit')) + @if (($role != 'Medical Representatif' && auth()->user()->can('forms.vehicle.edit')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) @endif - @if (auth()->user()->can('forms.vehicle.delete')) + @if (($role != 'Medical Representatif' && auth()->user()->can('forms.vehicle.delete')) || ($role == 'Medical Representatif' && $item->status == 'On Progress')) @csrf @method('DELETE') diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index b43eaf0..ef3930f 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -78,6 +78,13 @@ {{ Auth::guard('admin')->user()->getRoleNames()[0] }} + @if(auth()->user()->getMyCabangAndRegion()['cabang'] != '-') + + + {{ auth()->user()->getMyCabangAndRegion()['cabang'] }} + + + @endif @include('layouts.partials.sidebar') diff --git a/routes/web.php b/routes/web.php index dc4b5c1..7e960b8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,9 +16,8 @@ use App\Http\Controllers\Forms\FormVehicleController; use App\Http\Controllers\Forms\FormEntertainmentPresentationController; use App\Http\Controllers\Forms\FormMeetingSeminarController; use App\Http\Controllers\Forms\FormOtherController; -use Illuminate\Support\Facades\Storage; -use App\Helpers\NextCloudHelper; use App\Http\Controllers\Backend\AuditTrailController; +use App\Http\Controllers\Backend\BudgetControlController; Auth::routes(); @@ -72,6 +71,18 @@ Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth:admi Route::middleware(['auth:admin', 'menu'])->group(function () { Route::get('/', [DashboardController::class, 'index'])->name('dashboard.index'); + Route::prefix('budgets')->group(function () { + Route::get('/', [BudgetControlController::class, 'index'])->name('budget_control'); + Route::get('/log', [BudgetControlController::class, 'log'])->name('budget_control.log'); + Route::get('/detail/{id}', [BudgetControlController::class, 'detail'])->name('budget_control.detail'); + Route::get('/view/{id}', [BudgetControlController::class, 'view'])->name('budget_control.view'); + Route::get('/create', [BudgetControlController::class, 'create'])->name('budget_control.create'); + Route::post('/store', [BudgetControlController::class, 'store'])->name('budget_control.store'); + Route::get('/edit/{id}', [BudgetControlController::class, 'edit'])->name('budget_control.edit'); + Route::put('/update/{id}', [BudgetControlController::class, 'update'])->name('budget_control.update'); + Route::delete('/destroy/{id}', [BudgetControlController::class, 'destroy'])->name('budget_control.destroy'); + }); + // Forms Route::prefix('forms')->group(function () { // Up Country