From 1510a9dbcba2232b0a8aeded43c4eff16d366f05 Mon Sep 17 00:00:00 2001 From: Jagad R R Date: Thu, 2 Jan 2025 13:12:42 +0700 Subject: [PATCH 1/5] fix some bugs --- .../pages/forms/upcountry/create.blade.php | 2 +- .../pages/forms/upcountry/edit.blade.php | 45 ++++++++++++++++--- .../pages/forms/vehicle/create.blade.php | 2 +- .../pages/forms/vehicle/edit.blade.php | 2 +- .../pages/forms/vehicle/index.blade.php | 2 +- 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/resources/views/backend/pages/forms/upcountry/create.blade.php b/resources/views/backend/pages/forms/upcountry/create.blade.php index 1afca65..172b62c 100644 --- a/resources/views/backend/pages/forms/upcountry/create.blade.php +++ b/resources/views/backend/pages/forms/upcountry/create.blade.php @@ -48,7 +48,7 @@
- +
diff --git a/resources/views/backend/pages/forms/upcountry/edit.blade.php b/resources/views/backend/pages/forms/upcountry/edit.blade.php index 158f4ac..16043ff 100644 --- a/resources/views/backend/pages/forms/upcountry/edit.blade.php +++ b/resources/views/backend/pages/forms/upcountry/edit.blade.php @@ -5,6 +5,7 @@ @endsection @section('admin-content') +
@@ -48,27 +49,27 @@
- +
- +
- +
- +
- +
@@ -91,4 +92,38 @@
+ + @endsection diff --git a/resources/views/backend/pages/forms/vehicle/create.blade.php b/resources/views/backend/pages/forms/vehicle/create.blade.php index bb16674..9086f07 100644 --- a/resources/views/backend/pages/forms/vehicle/create.blade.php +++ b/resources/views/backend/pages/forms/vehicle/create.blade.php @@ -44,7 +44,7 @@
- +
diff --git a/resources/views/backend/pages/forms/vehicle/edit.blade.php b/resources/views/backend/pages/forms/vehicle/edit.blade.php index caa20b2..0bd3b0d 100644 --- a/resources/views/backend/pages/forms/vehicle/edit.blade.php +++ b/resources/views/backend/pages/forms/vehicle/edit.blade.php @@ -44,7 +44,7 @@
- +
diff --git a/resources/views/backend/pages/forms/vehicle/index.blade.php b/resources/views/backend/pages/forms/vehicle/index.blade.php index bea8331..821065f 100644 --- a/resources/views/backend/pages/forms/vehicle/index.blade.php +++ b/resources/views/backend/pages/forms/vehicle/index.blade.php @@ -116,7 +116,7 @@ {{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('dddd, D MMMM Y HH:mm:ss') }} {{ $item->liter }} {{ number_format($item->total, 0, ',', '.') }} - {{ $item->jarak }} + {{ $item->jarak }} km {{ $item->tipe_bensin }} {{ $item->nopol }} From ff004299c104a53295a50612945066621f284f16 Mon Sep 17 00:00:00 2001 From: Jagad R R Date: Thu, 2 Jan 2025 15:19:43 +0700 Subject: [PATCH 2/5] changed bukti 2 & 3 to accept all file --- ...ormEntertainmentPresentationController.php | 9 ++-- .../Forms/FormMeetingSeminarController.php | 9 ++-- .../Controllers/Forms/FormOtherController.php | 9 ++-- .../Forms/FormUpCountryController.php | 9 ++-- .../Forms/FormVehicleController.php | 9 ++-- app/Rules/FileType.php | 43 +++++++++++++++++++ 6 files changed, 68 insertions(+), 20 deletions(-) create mode 100644 app/Rules/FileType.php diff --git a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php index 9211235..cd454b4 100644 --- a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php +++ b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php @@ -20,6 +20,7 @@ use App\Mail\ExpenseRejected; use App\Mail\FinalApprove; use App\Helpers\WhatsappHelper; use App\Helpers\AuditTrailHelper; +use App\Rules\FileType; class FormEntertainmentPresentationController extends Controller { @@ -84,8 +85,8 @@ class FormEntertainmentPresentationController extends Controller 'alamat' => 'required', 'nik_or_npwp' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', - 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', - 'bukti3' => 'nullable|file|mimes:pdf', + 'bukti2' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti3' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; @@ -189,8 +190,8 @@ class FormEntertainmentPresentationController extends Controller 'alamat' => 'required', 'nik_or_npwp' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', - 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', - 'bukti3' => 'nullable|file|mimes:pdf', + 'bukti2' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti3' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $form = FormEntertaimentPresentation::findOrfail($id); diff --git a/app/Http/Controllers/Forms/FormMeetingSeminarController.php b/app/Http/Controllers/Forms/FormMeetingSeminarController.php index fe1768a..6991b01 100644 --- a/app/Http/Controllers/Forms/FormMeetingSeminarController.php +++ b/app/Http/Controllers/Forms/FormMeetingSeminarController.php @@ -20,6 +20,7 @@ use App\Mail\ExpenseRejected; use App\Mail\FinalApprove; use App\Helpers\WhatsappHelper; use App\Helpers\AuditTrailHelper; +use App\Rules\FileType; class FormMeetingSeminarController extends Controller { @@ -80,8 +81,8 @@ class FormMeetingSeminarController extends Controller 'transport_ankot' => 'required', 'hotel' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', - 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', - 'bukti3' => 'nullable|file|mimes:pdf', + 'bukti2' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti3' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; @@ -178,8 +179,8 @@ class FormMeetingSeminarController extends Controller 'transport_ankot' => 'required', 'hotel' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', - 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', - 'bukti3' => 'nullable|file|mimes:pdf', + 'bukti2' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti3' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $form = FormMeetingSeminar::findOrfail($id); diff --git a/app/Http/Controllers/Forms/FormOtherController.php b/app/Http/Controllers/Forms/FormOtherController.php index 6857b58..9254461 100644 --- a/app/Http/Controllers/Forms/FormOtherController.php +++ b/app/Http/Controllers/Forms/FormOtherController.php @@ -20,6 +20,7 @@ use App\Mail\ExpenseRejected; use App\Mail\FinalApprove; use App\Helpers\WhatsappHelper; use App\Helpers\AuditTrailHelper; +use App\Rules\FileType; class FormOtherController extends Controller { @@ -83,8 +84,8 @@ class FormOtherController extends Controller 'keterangan' => 'required', 'total' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', - 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', - 'bukti3' => 'nullable|file|mimes:pdf', + 'bukti2' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti3' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; @@ -183,8 +184,8 @@ class FormOtherController extends Controller 'keterangan' => 'required', 'total' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', - 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', - 'bukti3' => 'nullable|file|mimes:pdf', + 'bukti2' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti3' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $form = FormOthers::findOrfail($id); diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index f941fda..53e350b 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -20,6 +20,7 @@ use App\Mail\ExpenseRejected; use App\Mail\FinalApprove; use App\Helpers\WhatsappHelper; use App\Helpers\AuditTrailHelper; +use App\Rules\FileType; class FormUpCountryController extends Controller { @@ -86,8 +87,8 @@ class FormUpCountryController extends Controller 'transport_dalkot' => 'required', 'transport_ankot' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', - 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', - 'bukti3' => 'nullable|file|mimes:pdf', + 'bukti2' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti3' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; @@ -195,8 +196,8 @@ class FormUpCountryController extends Controller 'transport_ankot' => 'required', 'hotel' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', - 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', - 'bukti3' => 'nullable|file|mimes:pdf', + 'bukti2' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti3' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $form = FormUpCountry::findOrfail($id); diff --git a/app/Http/Controllers/Forms/FormVehicleController.php b/app/Http/Controllers/Forms/FormVehicleController.php index 1ccbd85..f587144 100644 --- a/app/Http/Controllers/Forms/FormVehicleController.php +++ b/app/Http/Controllers/Forms/FormVehicleController.php @@ -20,6 +20,7 @@ use App\Mail\ExpenseRejected; use App\Mail\FinalApprove; use App\Helpers\WhatsappHelper; use App\Helpers\AuditTrailHelper; +use App\Rules\FileType; class FormVehicleController extends Controller { @@ -84,8 +85,8 @@ class FormVehicleController extends Controller 'nopol' => 'required', 'keterangan' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', - 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', - 'bukti3' => 'nullable|file|mimes:pdf', + 'bukti2' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti3' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; @@ -189,8 +190,8 @@ class FormVehicleController extends Controller 'nopol' => 'required', 'keterangan' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,heic,heif|max:51200', - 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', - 'bukti3' => 'nullable|file|mimes:pdf', + 'bukti2' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti3' => ['nullable', 'file', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $form = FormVehicleRunningCost::findOrfail($id); diff --git a/app/Rules/FileType.php b/app/Rules/FileType.php new file mode 100644 index 0000000..0b090ac --- /dev/null +++ b/app/Rules/FileType.php @@ -0,0 +1,43 @@ +disallowedExtensions = $disallowedExtensions; + } + + /** + * Run the validation rule. + * + * @param string $attribute + * @param mixed $value + * @param \Closure(string, ?string=): \Illuminate\Translation\PotentiallyTranslatedString $fail + */ + public function validate(string $attribute, mixed $value, Closure $fail): void + { + if ($value && $value->isValid()) { + // Get the file extension + $extension = strtolower($value->getClientOriginalExtension()); + + // Check if the extension is in the disallowed list + if (in_array($extension, $this->disallowedExtensions)) { + $fail("The file type '{$extension}' is not allowed."); + } + } else { + $fail("The uploaded file for '{$attribute}' is invalid."); + } + } +} From 8255a530af72f294e1041357925cbc90c26c0444 Mon Sep 17 00:00:00 2001 From: Jagad R R Date: Thu, 2 Jan 2025 17:59:33 +0700 Subject: [PATCH 3/5] revised approve system and some minor fixes --- .../Backend/AuditTrailController.php | 3 +- .../Backend/DashboardController.php | 2 +- .../Forms/FormUpCountryController.php | 28 ++- app/Models/FormEntertaimentPresentation.php | 1 + app/Models/FormMeetingSeminar.php | 4 + app/Models/FormOthers.php | 1 + app/Models/FormUpCountry.php | 5 + app/Models/FormVehicleRunningCost.php | 1 + ...2_082311_revised_form_up_country_table.php | 36 +++ ...evised_form_vehicle_running_cost_table.php | 28 +++ ..._form_entertainment_presentation_table.php | 28 +++ ...944_revised_form_meeting_seminar_table.php | 34 +++ ...01_02_083046_revised_form_others_table.php | 28 +++ .../backend/pages/audit_trail/index.blade.php | 7 +- .../pages/forms/entertainment/index.blade.php | 2 +- .../pages/forms/meeting/index.blade.php | 2 +- .../backend/pages/forms/other/index.blade.php | 2 +- .../pages/forms/upcountry/index.blade.php | 233 ++++++++++++++++-- .../pages/forms/vehicle/index.blade.php | 2 +- .../views/layouts/partials/styles.blade.php | 5 + routes/web.php | 1 + 21 files changed, 422 insertions(+), 31 deletions(-) create mode 100644 database/migrations/2025_01_02_082311_revised_form_up_country_table.php create mode 100644 database/migrations/2025_01_02_082747_revised_form_vehicle_running_cost_table.php create mode 100644 database/migrations/2025_01_02_082854_revised_form_entertainment_presentation_table.php create mode 100644 database/migrations/2025_01_02_082944_revised_form_meeting_seminar_table.php create mode 100644 database/migrations/2025_01_02_083046_revised_form_others_table.php diff --git a/app/Http/Controllers/Backend/AuditTrailController.php b/app/Http/Controllers/Backend/AuditTrailController.php index 4510f2f..250ac5d 100644 --- a/app/Http/Controllers/Backend/AuditTrailController.php +++ b/app/Http/Controllers/Backend/AuditTrailController.php @@ -22,7 +22,8 @@ class AuditTrailController extends Controller return view( 'backend.pages.audit_trail.index', [ - 'data' => AuditTrail::orderBy('id', 'desc')->get(), + // sort by newest + 'data' => AuditTrail::orderBy('created_at', 'desc')->get(), 'pageInfo' => $pageInfo, ] ); diff --git a/app/Http/Controllers/Backend/DashboardController.php b/app/Http/Controllers/Backend/DashboardController.php index ac1b539..d04504e 100644 --- a/app/Http/Controllers/Backend/DashboardController.php +++ b/app/Http/Controllers/Backend/DashboardController.php @@ -63,7 +63,7 @@ class DashboardController extends Controller // Sum the filtered queries foreach ($forms as $key => $query) { - $forms[$key] = $query->sum('total'); + $forms[$key] = $query->sum('approved_total'); } return view( diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index 53e350b..e609c08 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -65,6 +65,17 @@ class FormUpCountryController extends Controller ]); } + public function detail($id) + { + $this->checkAuthorization(auth()->user(), ['forms.country.view']); + + $form = FormUpCountry::with(['rayon', 'user'])->findOrFail($id); + $form->bukti1 = NextCloudHelper::getFileUrl($form->bukti1); + $form->bukti2 = NextCloudHelper::getFileUrl($form->bukti2); + $form->bukti3 = NextCloudHelper::getFileUrl($form->bukti3); + return response()->json($form); + } + public function create() { $this->checkAuthorization(auth()->user(), ['forms.country.create']); @@ -273,15 +284,28 @@ class FormUpCountryController extends Controller return redirect()->back(); } - public function approve($id) + public function approve(Request $request, $id) { $this->checkAuthorization(auth()->user(), ['approval.approve']); $form = FormUpCountry::findOrfail($id); + $approved_data = [ + 'allowance' => $request->allowance ? $form->allowance : 0, + 'transport_dalkot' => $request->transport_dalkot ? $form->transport_dalkot : 0, + 'transport_ankot' => $request->transport_ankot ? $form->transport_ankot : 0, + 'hotel' => $request->hotel ? $form->hotel : 0, + ]; + $form->update([ 'approved_at' => now(), 'approved_by' => auth()->user()->id, - 'status' => 'Approved' + 'status' => 'Approved', + + 'approved_allowance' => $approved_data['allowance'], + 'approved_transport_dalkot' => $approved_data['transport_dalkot'], + 'approved_transport_ankot' => $approved_data['transport_ankot'], + 'approved_hotel' => $approved_data['hotel'], + 'approved_total' => array_sum($approved_data), ]); $heads = $form->user->getCabangAndRegionHead(); diff --git a/app/Models/FormEntertaimentPresentation.php b/app/Models/FormEntertaimentPresentation.php index d62e7d3..0bb0820 100644 --- a/app/Models/FormEntertaimentPresentation.php +++ b/app/Models/FormEntertaimentPresentation.php @@ -17,6 +17,7 @@ class FormEntertaimentPresentation extends Model 'jenis', 'keterangan', 'total', + 'approved_total', 'name', 'alamat', 'nik_or_npwp', diff --git a/app/Models/FormMeetingSeminar.php b/app/Models/FormMeetingSeminar.php index 36c7803..f0b8927 100644 --- a/app/Models/FormMeetingSeminar.php +++ b/app/Models/FormMeetingSeminar.php @@ -17,6 +17,10 @@ class FormMeetingSeminar extends Model 'transport_ankot', 'hotel', 'total', + 'approved_allowance', + 'approved_transport_ankot', + 'approved_hotel', + 'approved_total', 'bukti1', 'bukti2', 'bukti3', diff --git a/app/Models/FormOthers.php b/app/Models/FormOthers.php index 5cb8ec4..33e61d5 100644 --- a/app/Models/FormOthers.php +++ b/app/Models/FormOthers.php @@ -17,6 +17,7 @@ class FormOthers extends Model 'tanggal', 'keterangan', 'total', + 'approved_total', 'bukti1', 'bukti2', 'bukti3', diff --git a/app/Models/FormUpCountry.php b/app/Models/FormUpCountry.php index 425fb39..6fff4df 100644 --- a/app/Models/FormUpCountry.php +++ b/app/Models/FormUpCountry.php @@ -22,6 +22,11 @@ class FormUpCountry extends Model 'transport_ankot', 'hotel', 'total', + 'approved_allowance', + 'approved_transport_dalkot', + 'approved_transport_ankot', + 'approved_hotel', + 'approved_total', 'bukti1', 'bukti2', 'bukti3', diff --git a/app/Models/FormVehicleRunningCost.php b/app/Models/FormVehicleRunningCost.php index 620bc55..ca5cf1c 100644 --- a/app/Models/FormVehicleRunningCost.php +++ b/app/Models/FormVehicleRunningCost.php @@ -16,6 +16,7 @@ class FormVehicleRunningCost extends Model 'tanggal', 'liter', 'total', + 'approved_total', 'jarak', 'tipe_bensin', 'nopol', diff --git a/database/migrations/2025_01_02_082311_revised_form_up_country_table.php b/database/migrations/2025_01_02_082311_revised_form_up_country_table.php new file mode 100644 index 0000000..179e361 --- /dev/null +++ b/database/migrations/2025_01_02_082311_revised_form_up_country_table.php @@ -0,0 +1,36 @@ +integer('approved_allowance')->after('total')->nullable(); + $table->integer('approved_transport_dalkot')->after('approved_allowance')->nullable(); + $table->integer('approved_transport_ankot')->after('approved_transport_dalkot')->nullable(); + $table->integer('approved_hotel')->after('approved_transport_ankot')->nullable(); + $table->integer('approved_total')->after('approved_hotel')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_up_country', function (Blueprint $table) { + $table->dropColumn('approved_allowance'); + $table->dropColumn('approved_transport_dalkot'); + $table->dropColumn('approved_transport_ankot'); + $table->dropColumn('approved_hotel'); + $table->dropColumn('approved_total'); + }); + } +}; diff --git a/database/migrations/2025_01_02_082747_revised_form_vehicle_running_cost_table.php b/database/migrations/2025_01_02_082747_revised_form_vehicle_running_cost_table.php new file mode 100644 index 0000000..227cb5e --- /dev/null +++ b/database/migrations/2025_01_02_082747_revised_form_vehicle_running_cost_table.php @@ -0,0 +1,28 @@ +integer('approved_total')->after('total')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_vehicle_running_cost', function (Blueprint $table) { + $table->dropColumn('approved_total'); + }); + } +}; diff --git a/database/migrations/2025_01_02_082854_revised_form_entertainment_presentation_table.php b/database/migrations/2025_01_02_082854_revised_form_entertainment_presentation_table.php new file mode 100644 index 0000000..c92225c --- /dev/null +++ b/database/migrations/2025_01_02_082854_revised_form_entertainment_presentation_table.php @@ -0,0 +1,28 @@ +integer('approved_total')->after('total')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_entertainment_presentation', function (Blueprint $table) { + $table->dropColumn('approved_total'); + }); + } +}; diff --git a/database/migrations/2025_01_02_082944_revised_form_meeting_seminar_table.php b/database/migrations/2025_01_02_082944_revised_form_meeting_seminar_table.php new file mode 100644 index 0000000..a0ebb42 --- /dev/null +++ b/database/migrations/2025_01_02_082944_revised_form_meeting_seminar_table.php @@ -0,0 +1,34 @@ +integer('approved_allowance')->after('total')->nullable(); + $table->integer('approved_transport_ankot')->after('approved_allowance')->nullable(); + $table->integer('approved_hotel')->after('approved_transport_ankot')->nullable(); + $table->integer('approved_total')->after('approved_hotel')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_meeting_seminar', function (Blueprint $table) { + $table->dropColumn('approved_allowance'); + $table->dropColumn('approved_transport_ankot'); + $table->dropColumn('approved_hotel'); + $table->dropColumn('approved_total'); + }); + } +}; diff --git a/database/migrations/2025_01_02_083046_revised_form_others_table.php b/database/migrations/2025_01_02_083046_revised_form_others_table.php new file mode 100644 index 0000000..66ca6be --- /dev/null +++ b/database/migrations/2025_01_02_083046_revised_form_others_table.php @@ -0,0 +1,28 @@ +integer('approved_total')->after('total')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_others', function (Blueprint $table) { + $table->dropColumn('approved_total'); + }); + } +}; diff --git a/resources/views/backend/pages/audit_trail/index.blade.php b/resources/views/backend/pages/audit_trail/index.blade.php index d6d3410..6bf439c 100644 --- a/resources/views/backend/pages/audit_trail/index.blade.php +++ b/resources/views/backend/pages/audit_trail/index.blade.php @@ -42,7 +42,8 @@ {{ __('Activity') }} Browser User Agent - Time + Tanggal + Waktu @@ -70,6 +71,7 @@ {{ $item->activity }} {{ $item->browser }} {{ $item->user_agent }} + {{ $item->created_at }} {{ $item->created_at->diffForHumans() }} @endforeach @@ -93,7 +95,8 @@ dom: 'Bfrtip', buttons: [ 'excel', 'pdf', 'print' - ] + ], + order: [[6, 'desc']] }); } }); diff --git a/resources/views/backend/pages/forms/entertainment/index.blade.php b/resources/views/backend/pages/forms/entertainment/index.blade.php index 3382e67..f5fe56c 100644 --- a/resources/views/backend/pages/forms/entertainment/index.blade.php +++ b/resources/views/backend/pages/forms/entertainment/index.blade.php @@ -246,7 +246,7 @@ $(document).ready(function () { if ($('#dataTable').length) { $('#dataTable').DataTable({ - responsive: true, + responsive: false, dom: 'Bfrtip', buttons: [ 'excel', 'pdf', 'print' diff --git a/resources/views/backend/pages/forms/meeting/index.blade.php b/resources/views/backend/pages/forms/meeting/index.blade.php index 798045a..312bd01 100644 --- a/resources/views/backend/pages/forms/meeting/index.blade.php +++ b/resources/views/backend/pages/forms/meeting/index.blade.php @@ -246,7 +246,7 @@ $(document).ready(function () { if ($('#dataTable').length) { $('#dataTable').DataTable({ - responsive: true, + responsive: false, dom: 'Bfrtip', buttons: [ 'excel', 'pdf', 'print' diff --git a/resources/views/backend/pages/forms/other/index.blade.php b/resources/views/backend/pages/forms/other/index.blade.php index 759fe3e..a2f8599 100644 --- a/resources/views/backend/pages/forms/other/index.blade.php +++ b/resources/views/backend/pages/forms/other/index.blade.php @@ -244,7 +244,7 @@ $(document).ready(function () { if ($('#dataTable').length) { $('#dataTable').DataTable({ - responsive: true, + responsive: false, dom: 'Bfrtip', buttons: [ 'excel', 'pdf', 'print' diff --git a/resources/views/backend/pages/forms/upcountry/index.blade.php b/resources/views/backend/pages/forms/upcountry/index.blade.php index a080d90..e4b881a 100644 --- a/resources/views/backend/pages/forms/upcountry/index.blade.php +++ b/resources/views/backend/pages/forms/upcountry/index.blade.php @@ -39,7 +39,7 @@
-

Rp {{ number_format($forms->whereIn('status', ['Approved', 'Closed'])->sum('total'), 0, ',', '.') }}

+

Rp {{ number_format($forms->whereIn('status', ['Approved', 'Closed'])->sum('approved_total'), 0, ',', '.') }}

Approved Expenses

@@ -90,6 +90,7 @@ Tujuan Jarak Total + Total Approved Bukti 1 Bukti 2 Bukti 3 @@ -117,9 +118,16 @@ {{ $item->tujuan }} {{ $item->jarak }} km {{ number_format($item->total, 0, ',', '.') }} + + @if ($item->approved_total) + {{ number_format($item->approved_total, 0, ',', '.') }} + @else + - + @endif + @if ($item->bukti1) - + Download @else @@ -128,7 +136,7 @@ @if ($item->bukti2) - + Download @else @@ -137,7 +145,7 @@ @if ($item->bukti3) - + Download @else @@ -158,15 +166,15 @@ {{-- approve / reject button --}} @if ($item->status == 'On Progress') -
- @csrf - @method('PUT') -
-
+ @csrf @method('PUT')
+
+ +
@endsection @section('scripts') + $(document).ready(function () { + // Uncheck all checkboxes on page refresh + $('.custom-control-input').prop('checked', false); + + if ($('#dataTable').length) { + $('#dataTable').DataTable({ + responsive: false, + dom: 'Bfrtip', + buttons: ['excel', 'pdf', 'print'] + }); + } + + // Handle Approve Button Click + $('.open-approve-modal').on('click', function () { + const approveUrl = $(this).data('id'); + + // Show spinner and hide content initially + $('#loadingSpinner').show(); + $('#modalContent').addClass('d-none'); + + $('#approveForm').attr('action', approveUrl); // Set the form action + $('#approveModal').modal('show'); // Show the modal + + // Get detail from /forms/up-country/detail/{id} + $.get(approveUrl.replace('approve', 'detail'), function (data) { + const formatter = new Intl.NumberFormat('id-ID', { + style: 'currency', + currency: 'IDR', + minimumFractionDigits: 0 + }); + + $('#allowance_value').text(formatter.format(data.allowance)); + $('#transport_dalkot_value').text(formatter.format(data.transport_dalkot)); + $('#transport_ankot_value').text(formatter.format(data.transport_ankot)); + $('#hotel_value').text(formatter.format(data.hotel)); + + // Assign data values to checkboxes + $('#allowance').data('value', data.allowance); + $('#transport_dalkot').data('value', data.transport_dalkot); + $('#transport_ankot').data('value', data.transport_ankot); + $('#hotel').data('value', data.hotel); + + // Detail data + $('#user').text(data.user.name); + $('#rayon').text(data.rayon.code); + $('#tanggal').text(new Date(data.tanggal).toLocaleDateString('id-ID', { + year: 'numeric', + month: 'long', + day: 'numeric' + })); + $('#tujuan').text(data.tujuan); + $('#jarak').text(data.jarak + ' km'); + $('#bukti1').html(data.bukti1 ? 'Download' : '-'); + $('#bukti2').html(data.bukti2 ? 'Download' : '-'); + $('#bukti3').html(data.bukti3 ? 'Download' : '-'); + + // Hide spinner and show content + $('#loadingSpinner').hide(); + $('#loadingSpinner').removeClass('d-flex'); + $('#loadingSpinner').addClass('d-none'); + $('#modalContent').removeClass('d-none'); + + // Reset the total to zero + $('#total').val(0); + }); + }); + + // Update total dynamically + $('.custom-control-input').on('change', function () { + let total = 0; + + // Calculate the total based on checked checkboxes + $('.custom-control-input:checked').each(function () { + total += parseFloat($(this).data('value') || 0); + }); + + // Update the total field with formatted value + const formatter = new Intl.NumberFormat('id-ID', { + style: 'currency', + currency: 'IDR', + minimumFractionDigits: 0 + }); + + $('#total').val(formatter.format(total)); + }); + + // Uncheck all checkboxes when the modal is closed + $('#approveModal').on('hidden.bs.modal', function () { + $('.custom-control-input').prop('checked', false); // Uncheck all checkboxes + $('#total').val('0'); // Reset total to 0 + }); + }); + @endsection diff --git a/resources/views/backend/pages/forms/vehicle/index.blade.php b/resources/views/backend/pages/forms/vehicle/index.blade.php index 821065f..ba04e22 100644 --- a/resources/views/backend/pages/forms/vehicle/index.blade.php +++ b/resources/views/backend/pages/forms/vehicle/index.blade.php @@ -248,7 +248,7 @@ $(document).ready(function () { if ($('#dataTable').length) { $('#dataTable').DataTable({ - responsive: true, + responsive: false, dom: 'Bfrtip', buttons: [ 'excel', 'pdf', 'print' diff --git a/resources/views/layouts/partials/styles.blade.php b/resources/views/layouts/partials/styles.blade.php index 4493b0a..39eb2ba 100644 --- a/resources/views/layouts/partials/styles.blade.php +++ b/resources/views/layouts/partials/styles.blade.php @@ -25,6 +25,11 @@