diff --git a/app/Helpers/NextCloudHelper.php b/app/Helpers/NextCloudHelper.php index 5e7f007..5c64be8 100644 --- a/app/Helpers/NextCloudHelper.php +++ b/app/Helpers/NextCloudHelper.php @@ -140,7 +140,6 @@ class NextCloudHelper return rtrim($baseUrl, '/') . '/' . $relativePath; } - public static function getNextcloudFile($filePath) { // Check if the file exists diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index f91c894..d0f9fb1 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -70,9 +70,11 @@ class FormUpCountryController extends Controller $this->checkAuthorization(auth()->user(), ['forms.country.view']); $form = FormUpCountry::with(['rayon', 'user'])->findOrFail($id); - $form->bukti1 = $form->bukti1 ? NextCloudHelper::getFileUrl($form->bukti1) : null; - $form->bukti2 = $form->bukti2 ? NextCloudHelper::getFileUrl($form->bukti2) : null; - $form->bukti3 = $form->bukti3 ? NextCloudHelper::getFileUrl($form->bukti3) : null; + $form->bukti_allowance = $form->bukti_allowance ? NextCloudHelper::getFileUrl($form->bukti_allowance) : null; + $form->bukti_transport_dalkot = $form->bukti_transport_dalkot ? NextCloudHelper::getFileUrl($form->bukti_transport_dalkot) : null; + $form->bukti_transport_ankot = $form->bukti_transport_ankot ? NextCloudHelper::getFileUrl($form->bukti_transport_ankot) : null; + $form->bukti_hotel = $form->bukti_hotel ? NextCloudHelper::getFileUrl($form->bukti_hotel) : null; + return response()->json($form); } @@ -94,12 +96,14 @@ class FormUpCountryController extends Controller 'tanggal' => 'required', 'tujuan' => 'required', 'jarak' => 'required', - 'allowance' => 'required', - 'transport_dalkot' => 'required', - 'transport_ankot' => 'required', - 'bukti1' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], - 'bukti2' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], - 'bukti3' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'allowance' => 'nullable|numeric', + 'transport_dalkot' => 'nullable|numeric', + 'transport_ankot' => 'nullable|numeric', + 'hotel' => 'nullable|numeric', + 'bukti_allowance' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti_transport_dalkot' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti_transport_ankot' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti_hotel' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; @@ -109,40 +113,52 @@ class FormUpCountryController extends Controller $filePaths = []; $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/upcountry'; - if ($request->hasFile('bukti1')) { - $bukti1 = $request->file('bukti1'); - $filename = Str::uuid() . '.' . $bukti1->extension(); + if ($request->hasFile('bukti_allowance')) { + $bukti_allowance = $request->file('bukti_allowance'); + $filename = Str::uuid() . '.' . $bukti_allowance->extension(); - $filePaths['bukti1'] = $folderPath . '/' . $filename; + $filePaths['bukti_allowance'] = $folderPath . '/' . $filename; NextCloudHelper::uploadFile( $folderPath, - $bukti1->getContent(), + $bukti_allowance->getContent(), $filename ); } - if ($request->hasFile('bukti2')) { - $bukti2 = $request->file('bukti2'); - $filename = Str::uuid() . '.' . $bukti2->extension(); + if ($request->hasFile('bukti_transport_dalkot')) { + $bukti_transport_dalkot = $request->file('bukti_transport_dalkot'); + $filename = Str::uuid() . '.' . $bukti_transport_dalkot->extension(); - $filePaths['bukti2'] = $folderPath . '/' . $filename; + $filePaths['bukti_transport_dalkot'] = $folderPath . '/' . $filename; NextCloudHelper::uploadFile( $folderPath, - $bukti2->getContent(), + $bukti_transport_dalkot->getContent(), $filename ); } - if ($request->hasFile('bukti3')) { - $bukti3 = $request->file('bukti3'); - $filename = Str::uuid() . '.' . $bukti3->extension(); + if ($request->hasFile('bukti_transport_ankot')) { + $bukti_transport_ankot = $request->file('bukti_transport_ankot'); + $filename = Str::uuid() . '.' . $bukti_transport_ankot->extension(); - $filePaths['bukti3'] = $folderPath . '/' . $filename; + $filePaths['bukti_transport_ankot'] = $folderPath . '/' . $filename; NextCloudHelper::uploadFile( $folderPath, - $bukti3->getContent(), + $bukti_transport_ankot->getContent(), + $filename + ); + } + if ($request->hasFile('bukti_hotel')) { + $bukti_hotel = $request->file('bukti_hotel'); + $filename = Str::uuid() . '.' . $bukti_hotel->extension(); + + $filePaths['bukti_hotel'] = $folderPath . '/' . $filename; + + NextCloudHelper::uploadFile( + $folderPath, + $bukti_hotel->getContent(), $filename ); } @@ -152,6 +168,13 @@ class FormUpCountryController extends Controller $formatted_sequence_number = str_pad($sequence_number, 4, '0', STR_PAD_LEFT); $expense_number = $region->code . '-' . $cabang->code . '-UPC-' . date('ym') . $formatted_sequence_number; + $data_nominal = [ + 'allowance' => $request->allowance ?? 0, + 'transport_dalkot' => $request->transport_dalkot ?? 0, + 'transport_ankot' => $request->transport_ankot ?? 0, + 'hotel' => $request->hotel ?? 0, + ]; + // Save the form data FormUpCountry::create([ 'expense_number' => $expense_number, @@ -160,14 +183,15 @@ class FormUpCountryController extends Controller 'tanggal' => $request->tanggal, 'tujuan' => $request->tujuan, 'jarak' => $request->jarak, - 'allowance' => $request->allowance, - 'transport_dalkot' => $request->transport_dalkot, - 'transport_ankot' => $request->transport_ankot, - 'hotel' => $request->hotel, - 'total' => $request->allowance + $request->transport_dalkot + $request->transport_ankot + $request->hotel, - 'bukti1' => $filePaths['bukti1'] ?? null, - 'bukti2' => $filePaths['bukti2'] ?? null, - 'bukti3' => $filePaths['bukti3'] ?? null, + 'allowance' => $data_nominal['allowance'], + 'transport_dalkot' => $data_nominal['transport_dalkot'], + 'transport_ankot' => $data_nominal['transport_ankot'], + 'hotel' => $data_nominal['hotel'], + 'total' => array_sum($data_nominal), + 'bukti_allowance' => $filePaths['bukti_allowance'] ?? null, + 'bukti_transport_dalkot' => $filePaths['bukti_transport_dalkot'] ?? null, + 'bukti_transport_ankot' => $filePaths['bukti_transport_ankot'] ?? null, + 'bukti_hotel' => $filePaths['bukti_hotel'] ?? null, 'account_number' => $kategori->account_number, 'status' => 'On Progress', ]); @@ -202,13 +226,14 @@ class FormUpCountryController extends Controller 'tanggal' => 'required', 'tujuan' => 'required', 'jarak' => 'required', - 'allowance' => 'required', - 'transport_dalkot' => 'required', - 'transport_ankot' => 'required', - 'hotel' => 'required', - 'bukti1' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], - 'bukti2' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], - 'bukti3' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'allowance' => 'nullable|numeric', + 'transport_dalkot' => 'nullable|numeric', + 'transport_ankot' => 'nullable|numeric', + 'hotel' => 'nullable|numeric', + 'bukti_allowance' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti_transport_dalkot' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti_transport_ankot' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], + 'bukti_hotel' => ['nullable', 'file', 'max:51200', new FileType(['php', 'exe', 'js', 'sh', 'bat', 'exe', 'sh', 'php', 'vbs'])], ]); $form = FormUpCountry::findOrfail($id); @@ -224,43 +249,62 @@ class FormUpCountryController extends Controller $filePaths = []; $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/upcountry'; - if ($request->hasFile('bukti1')) { - $bukti1 = $request->file('bukti1'); - $filename = Str::uuid() . '.' . $bukti1->extension(); + if ($request->hasFile('bukti_allowance')) { + $bukti_allowance = $request->file('bukti_allowance'); + $filename = Str::uuid() . '.' . $bukti_allowance->extension(); - $filePaths['bukti1'] = $folderPath . '/' . $filename; + $filePaths['bukti_allowance'] = $folderPath . '/' . $filename; NextCloudHelper::uploadFile( $folderPath, - $bukti1->getContent(), + $bukti_allowance->getContent(), $filename ); } - if ($request->hasFile('bukti2')) { - $bukti2 = $request->file('bukti2'); - $filename = Str::uuid() . '.' . $bukti2->extension(); + if ($request->hasFile('bukti_transport_dalkot')) { + $bukti_transport_dalkot = $request->file('bukti_transport_dalkot'); + $filename = Str::uuid() . '.' . $bukti_transport_dalkot->extension(); - $filePaths['bukti2'] = $folderPath . '/' . $filename; + $filePaths['bukti_transport_dalkot'] = $folderPath . '/' . $filename; NextCloudHelper::uploadFile( $folderPath, - $bukti2->getContent(), + $bukti_transport_dalkot->getContent(), $filename ); } - if ($request->hasFile('bukti3')) { - $bukti3 = $request->file('bukti3'); - $filename = Str::uuid() . '.' . $bukti3->extension(); + if ($request->hasFile('bukti_transport_ankot')) { + $bukti_transport_ankot = $request->file('bukti_transport_ankot'); + $filename = Str::uuid() . '.' . $bukti_transport_ankot->extension(); - $filePaths['bukti3'] = $folderPath . '/' . $filename; + $filePaths['bukti_transport_ankot'] = $folderPath . '/' . $filename; NextCloudHelper::uploadFile( $folderPath, - $bukti3->getContent(), + $bukti_transport_ankot->getContent(), $filename ); } + if ($request->hasFile('bukti_hotel')) { + $bukti_hotel = $request->file('bukti_hotel'); + $filename = Str::uuid() . '.' . $bukti_hotel->extension(); + + $filePaths['bukti_hotel'] = $folderPath . '/' . $filename; + + NextCloudHelper::uploadFile( + $folderPath, + $bukti_hotel->getContent(), + $filename + ); + } + + $data_nominal = [ + 'allowance' => $request->allowance ?? 0, + 'transport_dalkot' => $request->transport_dalkot ?? 0, + 'transport_ankot' => $request->transport_ankot ?? 0, + 'hotel' => $request->hotel ?? 0, + ]; // Save the form data $form->update([ @@ -268,14 +312,15 @@ class FormUpCountryController extends Controller 'tanggal' => $request->tanggal, 'tujuan' => $request->tujuan, 'jarak' => $request->jarak, - 'allowance' => $request->allowance, - 'transport_dalkot' => $request->transport_dalkot, - 'transport_ankot' => $request->transport_ankot, - 'hotel' => $request->hotel, - 'total' => $request->allowance + $request->transport_dalkot + $request->transport_ankot + $request->hotel, - 'bukti1' => $filePaths['bukti1'] ?? $form->bukti1, - 'bukti2' => $filePaths['bukti2'] ?? $form->bukti2, - 'bukti3' => $filePaths['bukti3'] ?? $form->bukti3, + 'allowance' => $data_nominal['allowance'], + 'transport_dalkot' => $data_nominal['transport_dalkot'], + 'transport_ankot' => $data_nominal['transport_ankot'], + 'hotel' => $data_nominal['hotel'], + 'total' => array_sum($data_nominal), + 'bukti_allowance' => $filePaths['bukti_allowance'] ?? $form->bukti_allowance, + 'bukti_transport_dalkot' => $filePaths['bukti_transport_dalkot'] ?? $form->bukti_transport_dalkot, + 'bukti_transport_ankot' => $filePaths['bukti_transport_ankot'] ?? $form->bukti_transport_ankot, + 'bukti_hotel' => $filePaths['bukti_hotel'] ?? $form->bukti_hotel, 'account_number' => $kategori->account_number, ]); @@ -300,7 +345,6 @@ class FormUpCountryController extends Controller 'approved_at' => now(), 'approved_by' => auth()->user()->id, 'status' => 'Approved', - 'approved_allowance' => $approved_data['allowance'], 'approved_transport_dalkot' => $approved_data['transport_dalkot'], 'approved_transport_ankot' => $approved_data['transport_ankot'], diff --git a/app/Models/FormUpCountry.php b/app/Models/FormUpCountry.php index 6fff4df..2a024dc 100644 --- a/app/Models/FormUpCountry.php +++ b/app/Models/FormUpCountry.php @@ -27,9 +27,10 @@ class FormUpCountry extends Model 'approved_transport_ankot', 'approved_hotel', 'approved_total', - 'bukti1', - 'bukti2', - 'bukti3', + 'bukti_allowance', + 'bukti_transport_dalkot', + 'bukti_transport_ankot', + 'bukti_hotel', 'account_number', 'status', 'approved_at', diff --git a/database/migrations/2025_01_03_134057_add_nullable_to_form_up_country.php b/database/migrations/2025_01_03_134057_add_nullable_to_form_up_country.php new file mode 100644 index 0000000..5aaf26a --- /dev/null +++ b/database/migrations/2025_01_03_134057_add_nullable_to_form_up_country.php @@ -0,0 +1,34 @@ +integer('allowance')->nullable()->change(); + $table->integer('transport_dalkot')->nullable()->change(); + $table->integer('transport_ankot')->nullable()->change(); + $table->integer('hotel')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_up_country', function (Blueprint $table) { + $table->integer('allowance')->nullable(false)->change(); + $table->integer('transport_dalkot')->nullable(false)->change(); + $table->integer('transport_ankot')->nullable(false)->change(); + $table->integer('hotel')->nullable(false)->change(); + }); + } +}; diff --git a/database/migrations/2025_01_03_134342_changed_bukti_to_form_up_country.php b/database/migrations/2025_01_03_134342_changed_bukti_to_form_up_country.php new file mode 100644 index 0000000..092eff6 --- /dev/null +++ b/database/migrations/2025_01_03_134342_changed_bukti_to_form_up_country.php @@ -0,0 +1,44 @@ +dropColumn('bukti1'); + $table->dropColumn('bukti2'); + $table->dropColumn('bukti3'); + + $table->string('bukti_allowance')->after('approved_total')->nullable(); + $table->string('bukti_transport_dalkot')->after('bukti_allowance')->nullable(); + $table->string('bukti_transport_ankot')->after('bukti_transport_dalkot')->nullable(); + $table->string('bukti_hotel')->after('bukti_transport_ankot')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_up_country', function (Blueprint $table) { + // drop new bukti columns + $table->dropColumn('bukti_allowance'); + $table->dropColumn('bukti_transport_dalkot'); + $table->dropColumn('bukti_transport_ankot'); + $table->dropColumn('bukti_hotel'); + + $table->string('bukti1')->after('approved_total')->nullable()->change(); + $table->string('bukti2')->after('bukti1')->nullable()->change(); + $table->string('bukti3')->after('bukti2')->nullable()->change(); + }); + } +}; diff --git a/resources/views/backend/pages/dashboard/index.blade.php b/resources/views/backend/pages/dashboard/index.blade.php index ec2298a..f193e0a 100644 --- a/resources/views/backend/pages/dashboard/index.blade.php +++ b/resources/views/backend/pages/dashboard/index.blade.php @@ -90,7 +90,7 @@
Approved Meeting Seminar Expenses
Please select the items you want to approve:
@@ -381,6 +354,7 @@ $('#modalContent').addClass('d-none'); $('#approveForm').attr('action', approveUrl); // Set the form action + $('#loadingSpinner').addClass('d-flex'); $('#approveModal').modal('show'); // Show the modal // Get detail from /forms/up-country/detail/{id} @@ -413,9 +387,11 @@ })); $('#tujuan').text(data.tujuan); $('#jarak').text(data.jarak + ' km'); - $('#bukti1').html(data.bukti1 ? 'Download' : '-'); - $('#bukti2').html(data.bukti2 ? 'Download' : '-'); - $('#bukti3').html(data.bukti3 ? 'Download' : '-'); + + $('#bukti_allowance').html(data.bukti_allowance ? 'Download' : '-'); + $('#bukti_transport_dalkot').html(data.bukti_transport_dalkot ? 'Download' : '-'); + $('#bukti_transport_ankot').html(data.bukti_transport_ankot ? 'Download' : '-'); + $('#bukti_hotel').html(data.bukti_hotel ? 'Download' : '-'); // Hide spinner and show content $('#loadingSpinner').hide();