From 53b60c42d68d054b91348aa6007243db73f3aece Mon Sep 17 00:00:00 2001 From: Jagad R R Date: Fri, 20 Dec 2024 11:07:07 +0700 Subject: [PATCH] added form others --- ...ormEntertainmentPresentationController.php | 1 - .../Forms/FormMeetingSeminarController.php | 7 +- .../Controllers/Forms/FormOtherController.php | 219 ++++++++++++++++++ .../Forms/FormUpCountryController.php | 8 +- .../Forms/FormVehicleController.php | 1 - app/Models/FormOthers.php | 11 + ...3828_add_account_number_to_form_others.php | 28 +++ .../forms/entertainment/create.blade.php | 14 +- .../pages/forms/entertainment/edit.blade.php | 14 +- .../pages/forms/meeting/create.blade.php | 28 --- .../pages/forms/meeting/edit.blade.php | 28 --- .../pages/forms/other/create.blade.php | 91 ++++++++ .../backend/pages/forms/other/edit.blade.php | 92 ++++++++ .../backend/pages/forms/other/index.blade.php | 132 +++++++++++ .../pages/forms/upcountry/create.blade.php | 63 ++--- .../pages/forms/vehicle/create.blade.php | 14 +- .../pages/forms/vehicle/edit.blade.php | 13 +- routes/web.php | 9 + 18 files changed, 671 insertions(+), 102 deletions(-) create mode 100644 app/Http/Controllers/Forms/FormOtherController.php create mode 100644 database/migrations/2024_12_20_033828_add_account_number_to_form_others.php create mode 100644 resources/views/backend/pages/forms/other/create.blade.php create mode 100644 resources/views/backend/pages/forms/other/edit.blade.php create mode 100644 resources/views/backend/pages/forms/other/index.blade.php diff --git a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php index 5c5e62e..dde35dc 100644 --- a/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php +++ b/app/Http/Controllers/Forms/FormEntertainmentPresentationController.php @@ -209,7 +209,6 @@ class FormEntertainmentPresentationController extends Controller 'bukti2' => $filePaths['bukti2'] ?? null, 'bukti3' => $filePaths['bukti3'] ?? null, 'account_number' => $kategori->account_number, - 'status' => 'On Progress', ]); session()->flash('success', 'Form has been updated.'); diff --git a/app/Http/Controllers/Forms/FormMeetingSeminarController.php b/app/Http/Controllers/Forms/FormMeetingSeminarController.php index 90b1ee1..e1e4618 100644 --- a/app/Http/Controllers/Forms/FormMeetingSeminarController.php +++ b/app/Http/Controllers/Forms/FormMeetingSeminarController.php @@ -42,7 +42,6 @@ class FormMeetingSeminarController extends Controller 'allowance' => 'required', 'transport_ankot' => 'required', 'hotel' => 'required', - 'total' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', @@ -105,7 +104,7 @@ class FormMeetingSeminarController extends Controller 'allowance' => $request->allowance, 'transport_ankot' => $request->transport_ankot, 'hotel' => $request->hotel, - 'total' => $request->total, + 'total' => $request->allowance + $request->transport_ankot + $request->hotel, 'bukti1' => $filePaths['bukti1'] ?? null, 'bukti2' => $filePaths['bukti2'] ?? null, 'bukti3' => $filePaths['bukti3'] ?? null, @@ -135,7 +134,6 @@ class FormMeetingSeminarController extends Controller 'allowance' => 'required', 'transport_ankot' => 'required', 'hotel' => 'required', - 'total' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', @@ -192,12 +190,11 @@ class FormMeetingSeminarController extends Controller 'allowance' => $request->allowance, 'transport_ankot' => $request->transport_ankot, 'hotel' => $request->hotel, - 'total' => $request->total, + 'total' => $request->allowance + $request->transport_ankot + $request->hotel, 'bukti1' => $filePaths['bukti1'] ?? $form->bukti1, 'bukti2' => $filePaths['bukti2'] ?? $form->bukti2, 'bukti3' => $filePaths['bukti3'] ?? $form->bukti3, 'account_number' => $kategori->account_number, - 'status' => 'On Progress', ]); session()->flash('success', 'Form has been updated.'); diff --git a/app/Http/Controllers/Forms/FormOtherController.php b/app/Http/Controllers/Forms/FormOtherController.php new file mode 100644 index 0000000..35a8620 --- /dev/null +++ b/app/Http/Controllers/Forms/FormOtherController.php @@ -0,0 +1,219 @@ +checkAuthorization(auth()->user(), ['forms.other.view']); + + $forms = FormOthers::where('user_id', auth()->user()->id)->get(); + return view('backend.pages.forms.other.index', [ + 'forms' => $forms + ]); + } + + public function create() + { + $this->checkAuthorization(auth()->user(), ['forms.other.create']); + + return view('backend.pages.forms.other.create', [ + 'kategori' => Kategori::whereNotIn('name', ['Up Country', 'Vehicle Running Cost', 'Entertainment & Presentation', 'Meeting & Seminar'])->get() + ]); + } + + public function store(Request $request) + { + $this->checkAuthorization(auth()->user(), ['forms.other.create']); + + $request->validate([ + 'kategori_id' => 'required', + 'tanggal' => 'required|date', + 'keterangan' => 'required', + 'total' => 'required', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', + 'bukti3' => 'nullable|file|mimes:pdf', + ]); + + $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; + $region = Region::where('id', $cabang->region_id)->first(); + $kategori = Kategori::where('id', $request->kategori_id)->first(); + + $filePaths = []; + $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/other'; + + if ($request->hasFile('bukti1')) { + $bukti1 = $request->file('bukti1'); + $filename = Str::uuid() . '.' . $bukti1->extension(); + + $filePaths['bukti1'] = $folderPath . '/' . $filename; + + NextCloudHelper::uploadFile( + $folderPath, + $bukti1->getContent(), + $filename + ); + + } + if ($request->hasFile('bukti2')) { + $bukti2 = $request->file('bukti2'); + $filename = Str::uuid() . '.' . $bukti2->extension(); + + $filePaths['bukti2'] = $folderPath . '/' . $filename; + + NextCloudHelper::uploadFile( + $folderPath, + $bukti2->getContent(), + $filename + ); + } + if ($request->hasFile('bukti3')) { + $bukti3 = $request->file('bukti3'); + $filename = Str::uuid() . '.' . $bukti3->extension(); + + $filePaths['bukti3'] = $folderPath . '/' . $filename; + + NextCloudHelper::uploadFile( + $folderPath, + $bukti3->getContent(), + $filename + ); + } + + // Generate sequence number and expense number + $sequence_number = FormOthers::withTrashed()->where('expense_number', 'like', $region->code . '-' . $cabang->code . '-OTH-' . date('ym') . '%')->count() + 1; + $formatted_sequence_number = str_pad($sequence_number, 4, '0', STR_PAD_LEFT); + $expense_number = $region->code . '-' . $cabang->code . '-OTH-' . date('ym') . $formatted_sequence_number; + + // Save the form data + FormOthers::create([ + 'expense_number' => $expense_number, + 'user_id' => auth()->user()->id, + 'kategori_id' => $request->kategori_id, + 'tanggal' => $request->tanggal, + 'keterangan' => $request->keterangan, + 'total' => $request->total, + 'bukti1' => $filePaths['bukti1'] ?? null, + 'bukti2' => $filePaths['bukti2'] ?? null, + 'bukti3' => $filePaths['bukti3'] ?? null, + 'account_number' => $kategori->account_number, + 'status' => 'On Progress', + ]); + + session()->flash('success', 'Form has been created.'); + return redirect()->route('forms.other'); + } + + public function edit($id) + { + $this->checkAuthorization(auth()->user(), ['forms.other.edit']); + + $form = FormOthers::findOrfail($id); + return view('backend.pages.forms.other.edit', [ + 'form' => $form, + 'kategori' => Kategori::whereNotIn('name', ['Up Country', 'Vehicle Running Cost', 'Entertainment & Presentation', 'Meeting & Seminar'])->get() + ]); + } + + public function update(Request $request, $id) + { + $this->checkAuthorization(auth()->user(), ['forms.other.edit']); + + $request->validate([ + 'kategori_id' => 'required', + 'tanggal' => 'required|date', + 'keterangan' => 'required', + 'total' => 'required', + 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', + 'bukti3' => 'nullable|file|mimes:pdf', + ]); + + $cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang; + $region = Region::where('id', $cabang->region_id)->first(); + $kategori = Kategori::where('id', $request->kategori_id)->first(); + + $filePaths = []; + $folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/other'; + + if ($request->hasFile('bukti1')) { + $bukti1 = $request->file('bukti1'); + $filename = Str::uuid() . '.' . $bukti1->extension(); + + $filePaths['bukti1'] = $folderPath . '/' . $filename; + + NextCloudHelper::uploadFile( + $folderPath, + $bukti1->getContent(), + $filename + ); + + } + if ($request->hasFile('bukti2')) { + $bukti2 = $request->file('bukti2'); + $filename = Str::uuid() . '.' . $bukti2->extension(); + + $filePaths['bukti2'] = $folderPath . '/' . $filename; + + NextCloudHelper::uploadFile( + $folderPath, + $bukti2->getContent(), + $filename + ); + } + if ($request->hasFile('bukti3')) { + $bukti3 = $request->file('bukti3'); + $filename = Str::uuid() . '.' . $bukti3->extension(); + + $filePaths['bukti3'] = $folderPath . '/' . $filename; + + NextCloudHelper::uploadFile( + $folderPath, + $bukti3->getContent(), + $filename + ); + } + + // Save the form data + $form = FormOthers::findOrfail($id); + $form->update([ + 'kategori_id' => $request->kategori_id, + 'tanggal' => $request->tanggal, + 'keterangan' => $request->keterangan, + 'total' => $request->total, + 'bukti1' => $filePaths['bukti1'] ?? $form->bukti1, + 'bukti2' => $filePaths['bukti2'] ?? $form->bukti2, + 'bukti3' => $filePaths['bukti3'] ?? $form->bukti3, + 'account_number' => $kategori->account_number, + ]); + + session()->flash('success', 'Form has been updated.'); + return redirect()->route('forms.other'); + } + + public function destroy($id) + { + $this->checkAuthorization(auth()->user(), ['forms.other.delete']); + + $form = FormOthers::findOrfail($id); + $form->delete(); + + session()->flash('success', 'Form has been deleted.'); + return redirect()->route('forms.other'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Forms/FormUpCountryController.php b/app/Http/Controllers/Forms/FormUpCountryController.php index a352504..3d3a3d4 100644 --- a/app/Http/Controllers/Forms/FormUpCountryController.php +++ b/app/Http/Controllers/Forms/FormUpCountryController.php @@ -48,8 +48,6 @@ class FormUpCountryController extends Controller 'allowance' => 'required', 'transport_dalkot' => 'required', 'transport_ankot' => 'required', - 'hotel' => 'required', - 'total' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', @@ -117,7 +115,7 @@ class FormUpCountryController extends Controller 'transport_dalkot' => $request->transport_dalkot, 'transport_ankot' => $request->transport_ankot, 'hotel' => $request->hotel, - 'total' => $request->total, + 'total' => $request->allowance + $request->transport_dalkot + $request->transport_ankot + $request->hotel, 'bukti1' => $filePaths['bukti1'] ?? null, 'bukti2' => $filePaths['bukti2'] ?? null, 'bukti3' => $filePaths['bukti3'] ?? null, @@ -153,7 +151,6 @@ class FormUpCountryController extends Controller 'transport_dalkot' => 'required', 'transport_ankot' => 'required', 'hotel' => 'required', - 'total' => 'required', 'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'bukti2' => 'nullable|file|mimes:xlsx,xls,csv', 'bukti3' => 'nullable|file|mimes:pdf', @@ -215,12 +212,11 @@ class FormUpCountryController extends Controller 'transport_dalkot' => $request->transport_dalkot, 'transport_ankot' => $request->transport_ankot, 'hotel' => $request->hotel, - 'total' => $request->total, + '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, 'account_number' => $kategori->account_number, - 'status' => 'On Progress', ]); session()->flash('success', 'Form has been updated.'); diff --git a/app/Http/Controllers/Forms/FormVehicleController.php b/app/Http/Controllers/Forms/FormVehicleController.php index b35716e..8835ca7 100644 --- a/app/Http/Controllers/Forms/FormVehicleController.php +++ b/app/Http/Controllers/Forms/FormVehicleController.php @@ -116,7 +116,6 @@ class FormVehicleController extends Controller 'bukti2' => $filePaths['bukti2'] ?? null, 'bukti3' => $filePaths['bukti3'] ?? null, 'account_number' => $kategori->account_number, - 'status' => 'On Progress', ]); session()->flash('success', 'Form has been created.'); diff --git a/app/Models/FormOthers.php b/app/Models/FormOthers.php index 72045fb..0ad47e4 100644 --- a/app/Models/FormOthers.php +++ b/app/Models/FormOthers.php @@ -20,6 +20,17 @@ class FormOthers extends Model 'bukti1', 'bukti2', 'bukti3', + 'account_number', 'status', ]; + + public function user() + { + return $this->belongsTo(Admin::class); + } + + public function kategori() + { + return $this->belongsTo(Kategori::class); + } } diff --git a/database/migrations/2024_12_20_033828_add_account_number_to_form_others.php b/database/migrations/2024_12_20_033828_add_account_number_to_form_others.php new file mode 100644 index 0000000..1af386a --- /dev/null +++ b/database/migrations/2024_12_20_033828_add_account_number_to_form_others.php @@ -0,0 +1,28 @@ +string('account_number')->nullable()->after('total'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('form_others', function (Blueprint $table) { + $table->dropColumn('account_number'); + }); + } +}; diff --git a/resources/views/backend/pages/forms/entertainment/create.blade.php b/resources/views/backend/pages/forms/entertainment/create.blade.php index 72d11a1..d94d66b 100644 --- a/resources/views/backend/pages/forms/entertainment/create.blade.php +++ b/resources/views/backend/pages/forms/entertainment/create.blade.php @@ -5,6 +5,8 @@ @endsection @section('admin-content') + +
@@ -63,7 +65,7 @@
- +
@@ -86,4 +88,14 @@
+ + @endsection diff --git a/resources/views/backend/pages/forms/entertainment/edit.blade.php b/resources/views/backend/pages/forms/entertainment/edit.blade.php index 768892d..eb4b28d 100644 --- a/resources/views/backend/pages/forms/entertainment/edit.blade.php +++ b/resources/views/backend/pages/forms/entertainment/edit.blade.php @@ -5,6 +5,8 @@ @endsection @section('admin-content') + +
@@ -64,7 +66,7 @@
- +
@@ -87,4 +89,14 @@
+ + @endsection diff --git a/resources/views/backend/pages/forms/meeting/create.blade.php b/resources/views/backend/pages/forms/meeting/create.blade.php index e19a0ef..91d5657 100644 --- a/resources/views/backend/pages/forms/meeting/create.blade.php +++ b/resources/views/backend/pages/forms/meeting/create.blade.php @@ -43,10 +43,6 @@ -
- - -
@@ -97,28 +93,4 @@ unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan }); - - @endsection diff --git a/resources/views/backend/pages/forms/meeting/edit.blade.php b/resources/views/backend/pages/forms/meeting/edit.blade.php index 6d9838f..129236d 100644 --- a/resources/views/backend/pages/forms/meeting/edit.blade.php +++ b/resources/views/backend/pages/forms/meeting/edit.blade.php @@ -44,10 +44,6 @@
-
- - -
@@ -98,28 +94,4 @@ unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan }); - - @endsection diff --git a/resources/views/backend/pages/forms/other/create.blade.php b/resources/views/backend/pages/forms/other/create.blade.php new file mode 100644 index 0000000..b1c309c --- /dev/null +++ b/resources/views/backend/pages/forms/other/create.blade.php @@ -0,0 +1,91 @@ +@extends('layouts.app') + +@section('title') + Dashboard +@endsection + +@section('admin-content') + + +
+
+
+
+

Tambahkan Expense Other Baru

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

Edit Expense Other

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

Forms Others

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

List Data Forms Others Anda

+

+ @if (auth()->user()->can('forms.other.create')) + + Add New Expense Others + + @endif +

+
+
+ @include('backend.layouts.partials.messages') + + + + + + + + + + + + + + + + + + + @php + use App\Helpers\NextCloudHelper; + @endphp + @foreach ($forms as $item) + + + + + + + + + + + + + + + @endforeach + +
#NamaTanggalJenisKeteranganTotalBukti 1Bukti 2Bukti 3Account NumberStatusAksi
{{ $loop->iteration }}{{ $item->user->name }}{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }}{{ $item->kategori->name }}{{ $item->keterangan }}{{ number_format($item->total, 0, ',', '.') }} + @if ($item->bukti1) + + Download + + @else + - + @endif + + @if ($item->bukti2) + + Download + + @else + - + @endif + + @if ($item->bukti3) + + Download + + @else + - + @endif + {{ $item->account_number }} + @if ($item->status == 'On Progress') + {{ $item->status }} + @elseif ($item->status == 'Completed') + {{ $item->status }} + @else + {{ $item->status }} + @endif + + @if (auth()->user()->can('forms.other.edit')) + + + + @endif + + @if (auth()->user()->can('forms.other.delete')) +
+ @csrf + @method('DELETE') + +
+ @endif +
+
+
+
+
+
+@endsection diff --git a/resources/views/backend/pages/forms/upcountry/create.blade.php b/resources/views/backend/pages/forms/upcountry/create.blade.php index a362425..1afca65 100644 --- a/resources/views/backend/pages/forms/upcountry/create.blade.php +++ b/resources/views/backend/pages/forms/upcountry/create.blade.php @@ -5,6 +5,7 @@ @endsection @section('admin-content') +
@@ -52,26 +53,22 @@
- +
- +
- +
- -
-
- - +
@@ -96,28 +93,36 @@
@endsection diff --git a/resources/views/backend/pages/forms/vehicle/create.blade.php b/resources/views/backend/pages/forms/vehicle/create.blade.php index 481f18e..d6bc6c4 100644 --- a/resources/views/backend/pages/forms/vehicle/create.blade.php +++ b/resources/views/backend/pages/forms/vehicle/create.blade.php @@ -5,6 +5,8 @@ @endsection @section('admin-content') + +
@@ -39,7 +41,7 @@
- +
@@ -86,4 +88,14 @@
+ + @endsection diff --git a/resources/views/backend/pages/forms/vehicle/edit.blade.php b/resources/views/backend/pages/forms/vehicle/edit.blade.php index 9f1a6f5..bc93ee5 100644 --- a/resources/views/backend/pages/forms/vehicle/edit.blade.php +++ b/resources/views/backend/pages/forms/vehicle/edit.blade.php @@ -5,6 +5,7 @@ @endsection @section('admin-content') +
@@ -40,7 +41,7 @@
- +
@@ -85,4 +86,14 @@
+ + @endsection diff --git a/routes/web.php b/routes/web.php index 3d03825..365f5dc 100644 --- a/routes/web.php +++ b/routes/web.php @@ -15,6 +15,7 @@ use App\Http\Controllers\Master\CategoryController; 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; @@ -99,6 +100,14 @@ Route::middleware(['auth:admin', 'menu'])->group(function () { Route::get('/meeting-seminar/edit/{id}', [FormMeetingSeminarController::class, 'edit'])->name('forms.meeting.edit'); Route::put('/meeting-seminar/update/{id}', [FormMeetingSeminarController::class, 'update'])->name('forms.meeting.update'); Route::delete('/meeting-seminar/destroy/{id}', [FormMeetingSeminarController::class, 'destroy'])->name('forms.meeting.destroy'); + + // Other + Route::get('/other', [FormOtherController::class, 'index'])->name('forms.other'); + Route::get('/other/create', [FormOtherController::class, 'create'])->name('forms.other.create'); + Route::post('/other/store', [FormOtherController::class, 'store'])->name('forms.other.store'); + Route::get('/other/edit/{id}', [FormOtherController::class, 'edit'])->name('forms.other.edit'); + Route::put('/other/update/{id}', [FormOtherController::class, 'update'])->name('forms.other.update'); + Route::delete('/other/destroy/{id}', [FormOtherController::class, 'destroy'])->name('forms.other.destroy'); }); //Menu Role