diff --git a/app/Http/Controllers/Backend/AdminsController.php b/app/Http/Controllers/Backend/AdminsController.php index 55825d2..9b4d577 100644 --- a/app/Http/Controllers/Backend/AdminsController.php +++ b/app/Http/Controllers/Backend/AdminsController.php @@ -65,15 +65,18 @@ class AdminsController extends Controller } // Create a folder in Nextcloud - $response = NextcloudHelper::createUser(env('NEXT_CLOUD_URL'), env('NEXT_CLOUD_USERNAME'), env('NEXT_CLOUD_PASSWORD'), $request->username, $request->password, $request->name, $request->email); + // $response = NextcloudHelper::createUser(env('NEXT_CLOUD_URL'), env('NEXT_CLOUD_USERNAME'), env('NEXT_CLOUD_PASSWORD'), $request->username, $request->password, $request->name, $request->email); - if ($response['success']) { - session()->flash('success', __('Admin has been created.')); - return redirect()->route('admin.admins.index'); - } else { - session()->flash('error', $response['message']); - return redirect()->route('admin.admins.index'); - } + // if ($response['success']) { + // session()->flash('success', __('Admin has been created.')); + // return redirect()->route('admin.admins.index'); + // } else { + // session()->flash('error', $response['message']); + // return redirect()->route('admin.admins.index'); + // } + + session()->flash('success', 'Admin has been created.'); + return redirect()->route('admin.admins.index'); } public function edit(int $id): Renderable diff --git a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php index dde35dc..be84132 100644 --- a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php +++ b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php @@ -21,7 +21,16 @@ class FormEntertainmentPresentationController extends Controller { $this->checkAuthorization(auth()->user(), ['forms.entertainment.view']); - $forms = FormEntertaimentPresentation::where('user_id', auth()->user()->id)->get(); + // get user role + $role = auth()->user()->getRoleNames()[0]; + $forms = null; + + if($role == 'Marketing Information System' || $role == 'superadmin') { + $forms = FormEntertaimentPresentation::get(); + } else { + $forms = FormEntertaimentPresentation::where('user_id', auth()->user()->id)->get(); + } + return view('backend.pages.forms.entertainment.index', [ 'forms' => $forms ]); @@ -150,7 +159,8 @@ class FormEntertainmentPresentationController extends Controller 'bukti3' => 'nullable|file|mimes:pdf', ]); - $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; + $form = FormEntertaimentPresentation::findOrfail($id); + $cabang = UserHasCabang::with('cabang')->where('user_id', $form->user_id)->first()->cabang; $region = Region::where('id', $cabang->region_id)->first(); $kategori = Kategori::where('name', 'Entertainment & Presentation')->first(); @@ -196,7 +206,6 @@ class FormEntertainmentPresentationController extends Controller } // Save the form data - $form = FormEntertaimentPresentation::findOrfail($id); $form->update([ 'tanggal' => $request->tanggal, 'jenis' => $request->jenis, @@ -215,6 +224,69 @@ class FormEntertainmentPresentationController extends Controller return redirect()->route('forms.entertainment'); } + public function approve($id) + { + $this->checkAuthorization(auth()->user(), ['approval.approve']); + + $form = FormEntertaimentPresentation::findOrfail($id); + $form->update([ + 'approved_at' => now(), + 'approved_by' => auth()->user()->id, + 'status' => 'Approved' + ]); + + session()->flash('success', 'Form has been approved.'); + return redirect()->route('forms.entertainment'); + } + + public function finalApprove($id) + { + $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + + $form = FormEntertaimentPresentation::findOrfail($id); + if($form->approved_at == null) { + session()->flash('error', 'Form must be approved by MIS first.'); + return redirect()->route('forms.entertainment'); + } + + $form->update([ + 'final_approved_at' => now(), + 'final_approved_by' => auth()->user()->id, + 'status' => 'Closed' + ]); + + session()->flash('success', 'Form has been final approved.'); + return redirect()->route('forms.entertainment'); + } + + public function open($id) + { + $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + + $form = FormEntertaimentPresentation::findOrfail($id); + $form->update([ + 'final_approved_at' => null, + 'final_approved_by' => null, + 'status' => 'Approved' + ]); + + session()->flash('success', 'Form has been opened.'); + return redirect()->route('forms.entertainment'); + } + + public function reject($id) + { + $this->checkAuthorization(auth()->user(), ['approval.approve']); + + $form = FormEntertaimentPresentation::findOrfail($id); + $form->update([ + 'status' => 'Rejected' + ]); + + session()->flash('success', 'Form has been rejected.'); + return redirect()->route('forms.entertainment'); + } + public function destroy($id) { $this->checkAuthorization(auth()->user(), ['forms.entertainment.delete']); diff --git a/app/Http/Controllers/Forms/FormMeetingSeminarController.php b/app/Http/Controllers/Forms/FormMeetingSeminarController.php index e1e4618..cc19469 100644 --- a/app/Http/Controllers/Forms/FormMeetingSeminarController.php +++ b/app/Http/Controllers/Forms/FormMeetingSeminarController.php @@ -20,8 +20,17 @@ class FormMeetingSeminarController extends Controller public function index() { $this->checkAuthorization(auth()->user(), ['forms.meeting.view']); + + // get user role + $role = auth()->user()->getRoleNames()[0]; + $forms = null; + + if($role == 'Marketing Information System' || $role == 'superadmin') { + $forms = FormMeetingSeminar::get(); + } else { + $forms = FormMeetingSeminar::where('user_id', auth()->user()->id)->get(); + } - $forms = FormMeetingSeminar::where('user_id', auth()->user()->id)->get(); return view('backend.pages.forms.meeting.index', [ 'forms' => $forms ]); @@ -139,7 +148,8 @@ class FormMeetingSeminarController extends Controller 'bukti3' => 'nullable|file|mimes:pdf', ]); - $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; + $form = FormMeetingSeminar::findOrfail($id); + $cabang = UserHasCabang::with('cabang')->where('user_id', $form->user_id)->first()->cabang; $region = Region::where('id', $cabang->region_id)->first(); $kategori = Kategori::where('name', 'Meeting & Seminar')->first(); @@ -185,7 +195,6 @@ class FormMeetingSeminarController extends Controller } // Save the form data - $form = FormMeetingSeminar::findOrfail($id); $form->update([ 'allowance' => $request->allowance, 'transport_ankot' => $request->transport_ankot, @@ -201,6 +210,69 @@ class FormMeetingSeminarController extends Controller return redirect()->route('forms.meeting'); } + public function approve($id) + { + $this->checkAuthorization(auth()->user(), ['approval.approve']); + + $form = FormMeetingSeminar::findOrfail($id); + $form->update([ + 'approved_at' => now(), + 'approved_by' => auth()->user()->id, + 'status' => 'Approved' + ]); + + session()->flash('success', 'Form has been approved.'); + return redirect()->route('forms.meeting'); + } + + public function finalApprove($id) + { + $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + + $form = FormMeetingSeminar::findOrfail($id); + if($form->approved_at == null) { + session()->flash('error', 'Form must be approved by MIS first.'); + return redirect()->route('forms.meeting'); + } + + $form->update([ + 'final_approved_at' => now(), + 'final_approved_by' => auth()->user()->id, + 'status' => 'Closed' + ]); + + session()->flash('success', 'Form has been final approved.'); + return redirect()->route('forms.meeting'); + } + + public function open($id) + { + $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + + $form = FormMeetingSeminar::findOrfail($id); + $form->update([ + 'final_approved_at' => null, + 'final_approved_by' => null, + 'status' => 'Approved' + ]); + + session()->flash('success', 'Form has been opened.'); + return redirect()->route('forms.meeting'); + } + + public function reject($id) + { + $this->checkAuthorization(auth()->user(), ['approval.approve']); + + $form = FormMeetingSeminar::findOrfail($id); + $form->update([ + 'status' => 'Rejected' + ]); + + session()->flash('success', 'Form has been rejected.'); + return redirect()->route('forms.meeting'); + } + public function destroy($id) { $this->checkAuthorization(auth()->user(), ['forms.meeting.delete']); diff --git a/app/Http/Controllers/Forms/FormOtherController.php b/app/Http/Controllers/Forms/FormOtherController.php index 35a8620..b3c4513 100644 --- a/app/Http/Controllers/Forms/FormOtherController.php +++ b/app/Http/Controllers/Forms/FormOtherController.php @@ -21,7 +21,16 @@ class FormOtherController extends Controller { $this->checkAuthorization(auth()->user(), ['forms.other.view']); - $forms = FormOthers::where('user_id', auth()->user()->id)->get(); + // get user role + $role = auth()->user()->getRoleNames()[0]; + $forms = null; + + if($role == 'Marketing Information System' || $role == 'superadmin') { + $forms = FormOthers::get(); + } else { + $forms = FormOthers::where('user_id', auth()->user()->id)->get(); + } + return view('backend.pages.forms.other.index', [ 'forms' => $forms ]); @@ -144,7 +153,8 @@ class FormOtherController extends Controller 'bukti3' => 'nullable|file|mimes:pdf', ]); - $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; + $form = FormOthers::findOrfail($id); + $cabang = UserHasCabang::with('cabang')->where('user_id', $form->user_id)->first()->cabang; $region = Region::where('id', $cabang->region_id)->first(); $kategori = Kategori::where('id', $request->kategori_id)->first(); @@ -190,7 +200,6 @@ class FormOtherController extends Controller } // Save the form data - $form = FormOthers::findOrfail($id); $form->update([ 'kategori_id' => $request->kategori_id, 'tanggal' => $request->tanggal, @@ -206,6 +215,69 @@ class FormOtherController extends Controller return redirect()->route('forms.other'); } + public function approve($id) + { + $this->checkAuthorization(auth()->user(), ['approval.approve']); + + $form = FormOthers::findOrfail($id); + $form->update([ + 'approved_at' => now(), + 'approved_by' => auth()->user()->id, + 'status' => 'Approved' + ]); + + session()->flash('success', 'Form has been approved.'); + return redirect()->route('forms.other'); + } + + public function finalApprove($id) + { + $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + + $form = FormOthers::findOrfail($id); + if($form->approved_at == null) { + session()->flash('error', 'Form must be approved by MIS first.'); + return redirect()->route('forms.other'); + } + + $form->update([ + 'final_approved_at' => now(), + 'final_approved_by' => auth()->user()->id, + 'status' => 'Closed' + ]); + + session()->flash('success', 'Form has been final approved.'); + return redirect()->route('forms.other'); + } + + public function open($id) + { + $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + + $form = FormOthers::findOrfail($id); + $form->update([ + 'final_approved_at' => null, + 'final_approved_by' => null, + 'status' => 'Approved' + ]); + + session()->flash('success', 'Form has been opened.'); + return redirect()->route('forms.other'); + } + + public function reject($id) + { + $this->checkAuthorization(auth()->user(), ['approval.approve']); + + $form = FormOthers::findOrfail($id); + $form->update([ + 'status' => 'Rejected' + ]); + + session()->flash('success', 'Form has been rejected.'); + return redirect()->route('forms.other'); + } + public function destroy($id) { $this->checkAuthorization(auth()->user(), ['forms.other.delete']); diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index 3d3a3d4..752c3ce 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -21,7 +21,16 @@ class FormUpCountryController extends Controller { $this->checkAuthorization(auth()->user(), ['forms.country.view']); - $forms = FormUpCountry::with('rayon')->where('user_id', auth()->user()->id)->get(); + // get user role + $role = auth()->user()->getRoleNames()[0]; + $forms = null; + + if($role == 'Marketing Information System' || $role == 'superadmin') { + $forms = FormUpCountry::with('rayon')->get(); + } else { + $forms = FormUpCountry::with('rayon')->where('user_id', auth()->user()->id)->get(); + } + return view('backend.pages.forms.upcountry.index', [ 'forms' => $forms ]); @@ -156,7 +165,8 @@ class FormUpCountryController extends Controller 'bukti3' => 'nullable|file|mimes:pdf', ]); - $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; + $form = FormUpCountry::findOrfail($id); + $cabang = UserHasCabang::with('cabang')->where('user_id', $form->user_id)->first()->cabang; $region = Region::where('id', $cabang->region_id)->first(); $kategori = Kategori::where('name', 'Up Country')->first(); @@ -202,7 +212,6 @@ class FormUpCountryController extends Controller } // Save the form data - $form = FormUpCountry::findOrfail($id); $form->update([ 'rayon_id' => $request->rayon_id, 'tanggal' => $request->tanggal, @@ -223,6 +232,69 @@ class FormUpCountryController extends Controller return redirect()->route('forms.up-country'); } + public function approve($id) + { + $this->checkAuthorization(auth()->user(), ['approval.approve']); + + $form = FormUpCountry::findOrfail($id); + $form->update([ + 'approved_at' => now(), + 'approved_by' => auth()->user()->id, + 'status' => 'Approved' + ]); + + session()->flash('success', 'Form has been approved.'); + return redirect()->route('forms.up-country'); + } + + public function reject($id) + { + $this->checkAuthorization(auth()->user(), ['approval.approve']); + + $form = FormUpCountry::findOrfail($id); + $form->update([ + 'status' => 'Rejected' + ]); + + session()->flash('success', 'Form has been rejected.'); + return redirect()->route('forms.up-country'); + } + + public function finalApprove($id) + { + $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + + $form = FormUpCountry::findOrfail($id); + if($form->approved_at == null) { + session()->flash('error', 'Form must be approved by MIS first.'); + return redirect()->route('forms.up-country'); + } + + $form->update([ + 'final_approved_at' => now(), + 'final_approved_by' => auth()->user()->id, + 'status' => 'Closed' + ]); + + session()->flash('success', 'Form has been final approved.'); + return redirect()->route('forms.up-country'); + } + + public function open($id) + { + $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + + $form = FormUpCountry::findOrfail($id); + $form->update([ + 'final_approved_at' => null, + 'final_approved_by' => null, + 'status' => 'Approved' + ]); + + session()->flash('success', 'Form has been opened.'); + return redirect()->route('forms.up-country'); + } + public function destroy($id) { $this->checkAuthorization(auth()->user(), ['forms.country.delete']); diff --git a/app/Http/Controllers/Forms/FormVehicleController.php b/app/Http/Controllers/Forms/FormVehicleController.php index 8835ca7..5839a0e 100644 --- a/app/Http/Controllers/Forms/FormVehicleController.php +++ b/app/Http/Controllers/Forms/FormVehicleController.php @@ -21,7 +21,16 @@ class FormVehicleController extends Controller { $this->checkAuthorization(auth()->user(), ['forms.vehicle.view']); - $forms = FormVehicleRunningCost::where('user_id', auth()->user()->id)->get(); + // get user role + $role = auth()->user()->getRoleNames()[0]; + $forms = null; + + if($role == 'Marketing Information System' || $role == 'superadmin') { + $forms = FormVehicleRunningCost::get(); + } else { + $forms = FormVehicleRunningCost::where('user_id', auth()->user()->id)->get(); + } + return view('backend.pages.forms.vehicle.index', [ 'forms' => $forms ]); @@ -149,7 +158,8 @@ class FormVehicleController extends Controller 'bukti3' => 'nullable|file|mimes:pdf', ]); - $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; + $form = FormVehicleRunningCost::findOrfail($id); + $cabang = UserHasCabang::with('cabang')->where('user_id', $form->user_id)->first()->cabang; $region = Region::where('id', $cabang->region_id)->first(); $kategori = Kategori::where('name', 'Vehicle Running Cost')->first(); @@ -195,7 +205,6 @@ class FormVehicleController extends Controller } // Save the form data - $form = FormVehicleRunningCost::findOrfail($id); $form->update([ 'tanggal' => $request->tanggal, 'liter' => $request->liter, @@ -215,6 +224,69 @@ class FormVehicleController extends Controller return redirect()->route('forms.vehicle'); } + public function approve($id) + { + $this->checkAuthorization(auth()->user(), ['approval.approve']); + + $form = FormVehicleRunningCost::findOrfail($id); + $form->update([ + 'approved_at' => now(), + 'approved_by' => auth()->user()->id, + 'status' => 'Approved' + ]); + + session()->flash('success', 'Form has been approved.'); + return redirect()->route('forms.vehicle'); + } + + public function finalApprove($id) + { + $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + + $form = FormVehicleRunningCost::findOrfail($id); + if($form->approved_at == null) { + session()->flash('error', 'Form must be approved by MIS first.'); + return redirect()->route('forms.vehicle'); + } + + $form->update([ + 'final_approved_at' => now(), + 'final_approved_by' => auth()->user()->id, + 'status' => 'Closed' + ]); + + session()->flash('success', 'Form has been final approved.'); + return redirect()->route('forms.vehicle'); + } + + public function open($id) + { + $this->checkAuthorization(auth()->user(), ['final_approval.approve']); + + $form = FormVehicleRunningCost::findOrfail($id); + $form->update([ + 'final_approved_at' => null, + 'final_approved_by' => null, + 'status' => 'Approved' + ]); + + session()->flash('success', 'Form has been opened.'); + return redirect()->route('forms.vehicle'); + } + + public function reject($id) + { + $this->checkAuthorization(auth()->user(), ['approval.approve']); + + $form = FormVehicleRunningCost::findOrfail($id); + $form->update([ + 'status' => 'Rejected' + ]); + + session()->flash('success', 'Form has been rejected.'); + return redirect()->route('forms.vehicle'); + } + public function destroy($id) { $this->checkAuthorization(auth()->user(), ['forms.vehicle.delete']); diff --git a/app/Models/FormEntertaimentPresentation.php b/app/Models/FormEntertaimentPresentation.php index 6aab6aa..d62e7d3 100644 --- a/app/Models/FormEntertaimentPresentation.php +++ b/app/Models/FormEntertaimentPresentation.php @@ -25,6 +25,10 @@ class FormEntertaimentPresentation extends Model 'bukti3', 'account_number', 'status', + 'approved_at', + 'approved_by', + 'final_approved_at', + 'final_approved_by', ]; public function user() diff --git a/app/Models/FormMeetingSeminar.php b/app/Models/FormMeetingSeminar.php index 574c311..36c7803 100644 --- a/app/Models/FormMeetingSeminar.php +++ b/app/Models/FormMeetingSeminar.php @@ -22,6 +22,10 @@ class FormMeetingSeminar extends Model 'bukti3', 'account_number', 'status', + 'approved_at', + 'approved_by', + 'final_approved_at', + 'final_approved_by', ]; public function user() diff --git a/app/Models/FormOthers.php b/app/Models/FormOthers.php index 0ad47e4..5cb8ec4 100644 --- a/app/Models/FormOthers.php +++ b/app/Models/FormOthers.php @@ -22,6 +22,10 @@ class FormOthers extends Model 'bukti3', 'account_number', 'status', + 'approved_at', + 'approved_by', + 'final_approved_at', + 'final_approved_by', ]; public function user() diff --git a/app/Models/FormUpCountry.php b/app/Models/FormUpCountry.php index 6f2be10..425fb39 100644 --- a/app/Models/FormUpCountry.php +++ b/app/Models/FormUpCountry.php @@ -27,6 +27,10 @@ class FormUpCountry extends Model 'bukti3', 'account_number', 'status', + 'approved_at', + 'approved_by', + 'final_approved_at', + 'final_approved_by', ]; public function user() diff --git a/app/Models/FormVehicleRunningCost.php b/app/Models/FormVehicleRunningCost.php index b666677..e0f4606 100644 --- a/app/Models/FormVehicleRunningCost.php +++ b/app/Models/FormVehicleRunningCost.php @@ -25,6 +25,10 @@ class FormVehicleRunningCost extends Model 'bukti3', 'account_number', 'status', + 'approved_at', + 'approved_by', + 'final_approved_at', + 'final_approved_by', ]; public function user() diff --git a/database/migrations/2024_12_22_135632_add_approval_to_upcountry_table.php b/database/migrations/2024_12_22_135632_add_approval_to_upcountry_table.php new file mode 100644 index 0000000..e63b773 --- /dev/null +++ b/database/migrations/2024_12_22_135632_add_approval_to_upcountry_table.php @@ -0,0 +1,39 @@ +timestamp('approved_at')->nullable()->after('status'); + $table->foreignId('approved_by')->nullable()->constrained('admins')->cascadeOnDelete()->after('status'); + + // final approval + $table->timestamp('final_approved_at')->nullable()->after('status'); + $table->foreignId('final_approved_by')->nullable()->constrained('admins')->cascadeOnDelete()->after('status'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_up_country', function (Blueprint $table) { + $table->dropForeign(['approved_by']); + $table->dropForeign(['final_approved_by']); + $table->dropColumn('approved_at'); + $table->dropColumn('approved_by'); + $table->dropColumn('final_approved_at'); + $table->dropColumn('final_approved_by'); + }); + } +}; diff --git a/database/migrations/2024_12_22_135700_add_approval_to_vehiclecost_table.php b/database/migrations/2024_12_22_135700_add_approval_to_vehiclecost_table.php new file mode 100644 index 0000000..c1b57cc --- /dev/null +++ b/database/migrations/2024_12_22_135700_add_approval_to_vehiclecost_table.php @@ -0,0 +1,39 @@ +timestamp('approved_at')->nullable()->after('status'); + $table->foreignId('approved_by')->nullable()->constrained('admins')->cascadeOnDelete()->after('status'); + + // final approval + $table->timestamp('final_approved_at')->nullable()->after('status'); + $table->foreignId('final_approved_by')->nullable()->constrained('admins')->cascadeOnDelete()->after('status'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_vehicle_running_cost', function (Blueprint $table) { + $table->dropForeign(['approved_by']); + $table->dropForeign(['final_approved_by']); + $table->dropColumn('approved_at'); + $table->dropColumn('approved_by'); + $table->dropColumn('final_approved_at'); + $table->dropColumn('final_approved_by'); + }); + } +}; diff --git a/database/migrations/2024_12_22_135721_add_approval_to_entertaiment_table.php b/database/migrations/2024_12_22_135721_add_approval_to_entertaiment_table.php new file mode 100644 index 0000000..19fee1a --- /dev/null +++ b/database/migrations/2024_12_22_135721_add_approval_to_entertaiment_table.php @@ -0,0 +1,39 @@ +timestamp('approved_at')->nullable()->after('status'); + $table->foreignId('approved_by')->nullable()->constrained('admins')->cascadeOnDelete()->after('status'); + + // final approval + $table->timestamp('final_approved_at')->nullable()->after('status'); + $table->foreignId('final_approved_by')->nullable()->constrained('admins')->cascadeOnDelete()->after('status'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_entertainment_presentation', function (Blueprint $table) { + $table->dropForeign(['approved_by']); + $table->dropForeign(['final_approved_by']); + $table->dropColumn('approved_at'); + $table->dropColumn('approved_by'); + $table->dropColumn('final_approved_at'); + $table->dropColumn('final_approved_by'); + }); + } +}; diff --git a/database/migrations/2024_12_22_135752_add_approval_to_meeting_table.php b/database/migrations/2024_12_22_135752_add_approval_to_meeting_table.php new file mode 100644 index 0000000..970a9e7 --- /dev/null +++ b/database/migrations/2024_12_22_135752_add_approval_to_meeting_table.php @@ -0,0 +1,39 @@ +timestamp('approved_at')->nullable()->after('status'); + $table->foreignId('approved_by')->nullable()->constrained('admins')->cascadeOnDelete()->after('status'); + + // final approval + $table->timestamp('final_approved_at')->nullable()->after('status'); + $table->foreignId('final_approved_by')->nullable()->constrained('admins')->cascadeOnDelete()->after('status'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_meeting_seminar', function (Blueprint $table) { + $table->dropForeign(['approved_by']); + $table->dropForeign(['final_approved_by']); + $table->dropColumn('approved_at'); + $table->dropColumn('approved_by'); + $table->dropColumn('final_approved_at'); + $table->dropColumn('final_approved_by'); + }); + } +}; diff --git a/database/migrations/2024_12_22_135813_add_approval_to_others_table.php b/database/migrations/2024_12_22_135813_add_approval_to_others_table.php new file mode 100644 index 0000000..66ffc42 --- /dev/null +++ b/database/migrations/2024_12_22_135813_add_approval_to_others_table.php @@ -0,0 +1,39 @@ +timestamp('approved_at')->nullable()->after('status'); + $table->foreignId('approved_by')->nullable()->constrained('admins')->cascadeOnDelete()->after('status'); + + // final approval + $table->timestamp('final_approved_at')->nullable()->after('status'); + $table->foreignId('final_approved_by')->nullable()->constrained('admins')->cascadeOnDelete()->after('status'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_others', function (Blueprint $table) { + $table->dropForeign(['approved_by']); + $table->dropForeign(['final_approved_by']); + $table->dropColumn('approved_at'); + $table->dropColumn('approved_by'); + $table->dropColumn('final_approved_at'); + $table->dropColumn('final_approved_by'); + }); + } +}; diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index d706f7d..8bb7a58 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -8,6 +8,7 @@ use Database\Seeds\MenuSeeder; use Database\Seeds\RayonSeeder; use Database\Seeds\RolePermissionSeeder2; use Database\Seeds\RolePermissionSeeder3; +use Database\Seeds\RolePermissionSeeder4; class DatabaseSeeder extends Seeder { @@ -24,6 +25,7 @@ class DatabaseSeeder extends Seeder // $this->call(MenuSeeder::class); // $this->call(RayonSeeder::class); // $this->call(RolePermissionSeeder2::class); - $this->call(RolePermissionSeeder3::class); + // $this->call(RolePermissionSeeder3::class); + $this->call(RolePermissionSeeder4::class); } } diff --git a/database/seeds/RolePermissionSeeder4.php b/database/seeds/RolePermissionSeeder4.php new file mode 100644 index 0000000..d111169 --- /dev/null +++ b/database/seeds/RolePermissionSeeder4.php @@ -0,0 +1,90 @@ + 'approval', + 'permissions' => [ + 'approval.view', + 'approval.approve', + ] + ], + [ + 'group_name' => 'final_approval', + 'permissions' => [ + 'final_approval.view', + 'final_approval.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/forms/entertainment/index.blade.php b/resources/views/backend/pages/forms/entertainment/index.blade.php index 5c548a3..0c9b57e 100644 --- a/resources/views/backend/pages/forms/entertainment/index.blade.php +++ b/resources/views/backend/pages/forms/entertainment/index.blade.php @@ -47,12 +47,14 @@