From 8e9bb4b8269f220f4d64ef5e21fbaa0aa34c5435 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 16 Nov 2023 15:51:05 +0700 Subject: [PATCH] Add Module Data Klaim Jamkrindo --- DataTables/KlaimJamkrindoDataTable.php | 123 ++++++++++++++++++ ...16_032929_create_klaim_jamkrindo_table.php | 47 +++++++ Entities/KlaimJamkrindo.php | 25 ++++ Http/Controllers/KlaimJamkrindoController.php | 37 ++++++ .../KlaimJamkrindo/KlaimJamkrindoRequest.php | 84 ++++++++++++ .../KlaimJamkrindo/KlaimJamkrindoModal.php | 115 ++++++++++++++++ Providers/WriteoffServiceProvider.php | 3 + .../klaim-jamkrindo-modal.blade.php | 72 ++++++++++ Resources/views/partials/menu/_app.blade.php | 24 ++++ .../klaim_jamkrindo/_actions.blade.php | 23 ++++ .../klaim_jamkrindo/_draw-scripts.js | 37 ++++++ .../klaim_jamkrindo/index.blade.php | 72 ++++++++++ Routes/breadcrumbs.php | 10 ++ Routes/web.php | 4 + 14 files changed, 676 insertions(+) create mode 100644 DataTables/KlaimJamkrindoDataTable.php create mode 100644 Database/Migrations/2023_11_16_032929_create_klaim_jamkrindo_table.php create mode 100644 Entities/KlaimJamkrindo.php create mode 100644 Http/Controllers/KlaimJamkrindoController.php create mode 100644 Http/Requests/KlaimJamkrindo/KlaimJamkrindoRequest.php create mode 100644 Livewire/KlaimJamkrindo/KlaimJamkrindoModal.php create mode 100644 Resources/views/livewire/klaim-jamkrindo/klaim-jamkrindo-modal.blade.php create mode 100644 Resources/views/pencatatan/klaim_jamkrindo/_actions.blade.php create mode 100644 Resources/views/pencatatan/klaim_jamkrindo/_draw-scripts.js create mode 100644 Resources/views/pencatatan/klaim_jamkrindo/index.blade.php diff --git a/DataTables/KlaimJamkrindoDataTable.php b/DataTables/KlaimJamkrindoDataTable.php new file mode 100644 index 0000000..56eb390 --- /dev/null +++ b/DataTables/KlaimJamkrindoDataTable.php @@ -0,0 +1,123 @@ +filter(callback: function ($query) { + if (request()->has('search')) { + $search = request()->get('search'); + $query->where('tanggal_rtgs_masuk', 'like', "%" . $search['value'] . "%") + ->orWhere('jumlah_debitur_surat', 'like', "%" . $search['value'] . "%") + ->orWhere('jumlah_debitur_excel', 'like', "%" . $search['value'] . "%") + ->orWhere('dana_hasil_klaim', 'like', "%" . $search['value'] . "%") + ->orWhere('nilai_penyelesaian', 'like', "%" . $search['value'] . "%") + ->orWhere('jumlah_debitur_penyelesaian', 'like', "%" . $search['value'] . "%") + ->orWhere('sisa_dana_ksl', 'like', "%" . $search['value'] . "%") + ->orWhere('jumlah_debitur_sisa_ksl', 'like', "%" . $search['value'] . "%") + ->orWhere('is_detail_debitur', 'like', "%" . $search['value'] . "%") + ->orWhere('keterangan', 'like', "%" . $search['value'] . "%") + ->orWhere('status', 'like', "%" . $search['value'] . "%"); + } + })->addIndexColumn() + ->editColumn('tanggal_rtgs_masuk', function ($row) { + $date = Carbon::create($row->tanggal_rtgs_masuk); + return $date->locale('id')->translatedFormat('d F Y'); + }) + ->editColumn('jumlah_debitur', function ($row) { + return $row->jumlah_debitur_surat.'/'.$row->jumlah_debitur_excel; + }) + ->editColumn('dana_hasil_klaim', function ($row) { + return @rupiah($row->dana_hasil_klaim); + }) + ->editColumn('nilai_penyelesaian', function ($row) { + return @rupiah($row->nilai_penyelesaian).' / '.$row->jumlah_debitur_penyelesaian; + }) + ->editColumn('sisa_dana_ksl', function ($row) { + return @rupiah($row->sisa_dana_ksl).' / '.$row->jumlah_debitur_sis_ksl; + }) + ->editColumn('is_detail_debitur', function ($row) { + return $row->is_detail_debitur ? 'Ada' : 'Tidak Ada'; + }) + ->editColumn('updated_at', function ($row) { + return $row->updated_at->locale('id')->translatedFormat('d F Y H:i:s'); + })->rawColumns(['action'])->addColumn('action', function ($klaim_jamkrindo) { + return view('writeoff::parameter.klaim_jamkrindo._actions', compact('klaim_jamkrindo')); + })->setRowId('id'); + } + + /** + * Get the query source of dataTable. + */ + public function query(KlaimJamkrindo $model) + : QueryBuilder + { + return $model->newQuery(); + } + + /** + * Optional method if you want to use the html builder. + */ + public function html() + : HtmlBuilder + { + return $this->builder() + ->setTableId('klaim-jamkrindo-table') + ->columns($this->getColumns()) + ->minifiedAjax() + ->stateSave(false) + ->responsive() + ->autoWidth(true) + ->orderBy(1) + ->parameters([ + 'scrollX' => false, + 'drawCallback' => 'function() { KTMenu.createInstances(); }', + ]) + ->addTableClass('align-middle table-row-dashed fs-6 gy-5') + ->drawCallback("function() {" . file_get_contents(Module::getModulePath('writeoff') . 'Resources/views/pencatatan/klaim_jamkrindo/_draw-scripts.js') . "}"); + } + + /** + * Get the dataTable columns definition. + */ + public function getColumns() + : array + { + return [ + Column::make('DT_RowIndex')->title('No')->orderable(false)->searchable(false), + Column::make('tanggal_rtgs_masuk')->title('Tanggal RTGS Masuk')->addClass('align-top'), + Column::make('jumlah_debitur')->title('Jumlah Debitur
(Surat / Excel)')->addClass('align-top'), + Column::make('dana_hasil_klaim')->title('Data Hasil Klaim')->addClass('align-top'), + Column::make('nilai_penyelesaian')->title('Nilai Penyelesaian / Jumlah Debitur')->addClass('align-top'), + Column::make('sisa_dana_ksl')->title('Sisa Dana KSL / Jumlah Debitur')->addClass('align-top'), + Column::make('is_detail_debitur')->title('Detail Debitur')->addClass('align-top'), + Column::computed('action')->exportable(false)->printable(false)->width(60)->addClass('text-center')->addClass('align-top') + ]; + } + + /** + * Get the filename for export. + */ + protected function filename() + : string + { + return 'KlaimJamkrindo_' . date('YmdHis'); + } + } diff --git a/Database/Migrations/2023_11_16_032929_create_klaim_jamkrindo_table.php b/Database/Migrations/2023_11_16_032929_create_klaim_jamkrindo_table.php new file mode 100644 index 0000000..f0356ad --- /dev/null +++ b/Database/Migrations/2023_11_16_032929_create_klaim_jamkrindo_table.php @@ -0,0 +1,47 @@ +id(); + $table->date('tanggal_rtgs_masuk'); + $table->integer('jumlah_debitur_surat', false, true); + $table->integer('jumlah_debitur_excel', false, true); + $table->float('dana_hasil_klaim', 15, 2); + $table->float('nilai_penyelesaian', 15, 2); + $table->integer('jumlah_debitur_penyelesaian', false, true); + $table->float('sisa_dana_ksl', 15, 2); + $table->integer('jumlah_debitur_sisa_ksl', false, true); + $table->char('is_detail_debitur', 1)->default('A'); + $table->string('keterangan')->nullable(); + $table->char('status', 1)->default('A'); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::dropIfExists('klaim_jamkrindo'); + } + }; diff --git a/Entities/KlaimJamkrindo.php b/Entities/KlaimJamkrindo.php new file mode 100644 index 0000000..2144d0f --- /dev/null +++ b/Entities/KlaimJamkrindo.php @@ -0,0 +1,25 @@ +middleware(function ($request, $next) { + $this->user = Auth::guard('web')->user(); + return $next($request); + }); + } + + /** + * Display a listing of the KlaimJamkrindos. + * + * @param \Modules\Writeoff\DataTables\KlaimJamkrindoDataTable $dataTable + * + * @return mixed + */ + public function index(KlaimJamkrindoDataTable $dataTable, Request $request) + { + if (is_null($this->user) || !$this->user->can('master.read')) { + abort(403, 'Sorry !! You are Unauthorized to view any master data !'); + } + + return $dataTable->render('writeoff::pencatatan.klaim_jamkrindo.index'); + } + } diff --git a/Http/Requests/KlaimJamkrindo/KlaimJamkrindoRequest.php b/Http/Requests/KlaimJamkrindo/KlaimJamkrindoRequest.php new file mode 100644 index 0000000..f5d512b --- /dev/null +++ b/Http/Requests/KlaimJamkrindo/KlaimJamkrindoRequest.php @@ -0,0 +1,84 @@ + + */ + public function rules() + : array + { + return [ + 'tanggal_rtgs_masuk' => 'required|date', + 'jumlah_debitur_surat' => 'required|integer', + 'jumlah_debitur_excel' => 'required|integer', + 'dana_hasil_klaim' => 'required|float', + 'nilai_penyelesaian' => 'required|float', + 'jumlah_debitur_penyelesaian' => 'required|integer', + 'sisa_dana_ksl' => 'required|float', + 'jumlah_debitur_sisa_ksl' => 'required|integer', + 'is_detail_debitur' => 'required|boolean', + 'keterangan' => 'nullable|string', + 'status' => 'required|string', + ]; + } + + public function ignored() + : string + { + return $this->id; + } + + /** + * Configure the validator instance. + */ + public function withValidator(Validator $validator) + : void + { + $validator->after(function (Validator $validator) { + if ($validator->errors()->any()) { + $errors = json_decode($validator->errors()->toJson(), true); + + + foreach ($errors as $key => $value) { + flash($value[0]); + } + return redirect() + ->route('parameter.branches.index') + ->with('error', 'Klaim Jamkrindo created failed.'); + } + + }); + } + + protected function failedValidation(Validator|\Illuminate\Contracts\Validation\Validator $validator) + : JsonResponse + { + $errors = (new ValidationException($validator))->errors(); + + throw new HttpResponseException(response()->json([ + 'success' => false, + 'errors' => $errors, + 'messages' => 'Klaim Jamkrindo created failed.' + ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY)); + } + } diff --git a/Livewire/KlaimJamkrindo/KlaimJamkrindoModal.php b/Livewire/KlaimJamkrindo/KlaimJamkrindoModal.php new file mode 100644 index 0000000..573949c --- /dev/null +++ b/Livewire/KlaimJamkrindo/KlaimJamkrindoModal.php @@ -0,0 +1,115 @@ + 'delete', + 'update' => 'update', + ]; + + public function render() + { + return view('writeoff::livewire.klaim-jamkrindo.klaim-jamkrindo-modal'); + } + + public function submit() + { + $this->validate(); + + // Validate the form input data + DB::transaction(function () { + // Prepare the data for creating a new user + $data = [ + 'tanggal_rtgs_masuk' => $this->tanggal_rtgs_masuk, + 'jumlah_debitur_surat' => $this->jumlah_debitur_surat, + 'jumlah_debitur_excel' => $this->jumlah_debitur_excel, + 'dana_hasil_klaim' => $this->dana_hasil_klaim, + 'nilai_penyelesaian' => $this->nilai_penyelesaian, + 'jumlah_debitur_penyelesaian' => $this->jumlah_debitur_penyelesaian, + 'sisa_dana_ksl' => $this->sisa_dana_ksl, + 'jumlah_debitur_sisa_ksl' => $this->jumlah_debitur_sisa_ksl, + 'is_detail_debitur' => $this->is_detail_debitur, + 'keterangan' => $this->keterangan, + 'status' => $this->status, + ]; + + if ($this->edit_mode) { + // Emit a success event with a message + $facility_type = KlaimJamkrindo::find($this->id); + $facility_type->update($data); + + $this->dispatch('success', __('Facility Type updated')); + } else { + // Emit a success event with a message + KlaimJamkrindo::create($data); + $this->dispatch('success', __('New Facility Type created')); + } + }); + + // Reset the form fields after successful submission + $this->reset(); + } + + public function update($id) + { + $this->edit_mode = true; + + $klaim_jamkrindo = KlaimJamkrindo::find($id); + + $this->id = $klaim_jamkrindo->id; + $this->tanggal_rtgs_masuk = $klaim_jamkrindo->tanggal_rtgs_masuk; + $this->jumlah_debitur_surat = $klaim_jamkrindo->jumlah_debitur_surat; + $this->jumlah_debitur_excel = $klaim_jamkrindo->jumlah_debitur_excel; + $this->dana_hasil_klaim = $klaim_jamkrindo->dana_hasil_klaim; + $this->nilai_penyelesaian = $klaim_jamkrindo->nilai_penyelesaian; + $this->jumlah_debitur_penyelesaian = $klaim_jamkrindo->jumlah_debitur_penyelesaian; + $this->sisa_dana_ksl = $klaim_jamkrindo->sisa_dana_ksl; + $this->jumlah_debitur_sisa_ksl = $klaim_jamkrindo->jumlah_debitur_sisa_ksl; + $this->is_detail_debitur = $klaim_jamkrindo->is_detail_debitur; + $this->keterangan = $klaim_jamkrindo->keterangan; + $this->status = $klaim_jamkrindo->status; + } + + public function delete($id) + { + KlaimJamkrindo::destroy($id); + + // Emit a success event with a message + $this->dispatch('success', 'Facility Type successfully deleted'); + } + + public function hydrate() + { + $this->resetErrorBag(); + $this->resetValidation(); + } + + protected function rules() + { + $request = new KlaimJamkrindoRequest(); + + return $request->rules(); + } + } + diff --git a/Providers/WriteoffServiceProvider.php b/Providers/WriteoffServiceProvider.php index 7abeea3..113f885 100644 --- a/Providers/WriteoffServiceProvider.php +++ b/Providers/WriteoffServiceProvider.php @@ -4,6 +4,7 @@ namespace Modules\Writeoff\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Database\Eloquent\Factory; +use Illuminate\Support\Facades\Blade; class WriteoffServiceProvider extends ServiceProvider { @@ -28,6 +29,8 @@ class WriteoffServiceProvider extends ServiceProvider $this->registerConfig(); $this->registerViews(); $this->loadMigrationsFrom(module_path($this->moduleName, 'Database/Migrations')); + + Blade::directive('rupiah', function ( $expression ) { return "Rp. "; }); } /** diff --git a/Resources/views/livewire/klaim-jamkrindo/klaim-jamkrindo-modal.blade.php b/Resources/views/livewire/klaim-jamkrindo/klaim-jamkrindo-modal.blade.php new file mode 100644 index 0000000..8c5745d --- /dev/null +++ b/Resources/views/livewire/klaim-jamkrindo/klaim-jamkrindo-modal.blade.php @@ -0,0 +1,72 @@ + diff --git a/Resources/views/partials/menu/_app.blade.php b/Resources/views/partials/menu/_app.blade.php index 7d9aae8..46c9737 100644 --- a/Resources/views/partials/menu/_app.blade.php +++ b/Resources/views/partials/menu/_app.blade.php @@ -82,4 +82,28 @@ + + @endcanany diff --git a/Resources/views/pencatatan/klaim_jamkrindo/_actions.blade.php b/Resources/views/pencatatan/klaim_jamkrindo/_actions.blade.php new file mode 100644 index 0000000..a1d088f --- /dev/null +++ b/Resources/views/pencatatan/klaim_jamkrindo/_actions.blade.php @@ -0,0 +1,23 @@ + + Actions + + + + + diff --git a/Resources/views/pencatatan/klaim_jamkrindo/_draw-scripts.js b/Resources/views/pencatatan/klaim_jamkrindo/_draw-scripts.js new file mode 100644 index 0000000..7d42e9e --- /dev/null +++ b/Resources/views/pencatatan/klaim_jamkrindo/_draw-scripts.js @@ -0,0 +1,37 @@ +// Initialize KTMenu +KTMenu.init(); + +// Add click event listener to delete buttons +document.querySelectorAll('[data-kt-action="delete_row"]').forEach(function (element) { + element.addEventListener('click', function () { + Swal.fire({ + text: 'Are you sure you want to remove?', + icon: 'warning', + buttonsStyling: false, + showCancelButton: true, + confirmButtonText: 'Yes', + cancelButtonText: 'No', + customClass: { + confirmButton: 'btn btn-danger', + cancelButton: 'btn btn-secondary', + } + }).then((result) => { + if (result.isConfirmed) { + Livewire.dispatch('delete', { id : this.getAttribute('data-kt-id') }); + } + }); + }); +}); + +// Add click event listener to update buttons +document.querySelectorAll('[data-kt-action="update_row"]').forEach(function (element) { + element.addEventListener('click', function () { + Livewire.dispatch('update', { id : this.getAttribute('data-kt-id') }); + }); +}); + +// Listen for 'success' event emitted by Livewire +Livewire.on('success', (message) => { + // Reload the users-table datatable + LaravelDataTables['klaim-jamkrindo-table'].ajax.reload(); +}); diff --git a/Resources/views/pencatatan/klaim_jamkrindo/index.blade.php b/Resources/views/pencatatan/klaim_jamkrindo/index.blade.php new file mode 100644 index 0000000..9e4b00d --- /dev/null +++ b/Resources/views/pencatatan/klaim_jamkrindo/index.blade.php @@ -0,0 +1,72 @@ + + + @section('title') + Data Klaim Jamkrindo + @endsection + + @section('breadcrumbs') + {{ Breadcrumbs::render('pencatatan.klaim-jamkrindo') }} + @endsection + +
+ +
+ +
+ +
+ {!! getIcon('magnifier', 'fs-3 position-absolute ms-5') !!} + +
+ +
+ + + +
+ +
+ + + +
+ + + + + +
+ +
+ + + +
+ +
+ {{ $dataTable->table() }} +
+ +
+ +
+ + @push('scripts') + {{ $dataTable->scripts() }} + + @endpush + +
diff --git a/Routes/breadcrumbs.php b/Routes/breadcrumbs.php index 5455a34..7243e5f 100644 --- a/Routes/breadcrumbs.php +++ b/Routes/breadcrumbs.php @@ -46,3 +46,13 @@ $trail->parent('parameter'); $trail->push('Rekening', route('parameter.rekening.index')); }); + + Breadcrumbs::for('pencatatan', function (BreadcrumbTrail $trail) { + $trail->parent('home'); + $trail->push('Pencatatan', '#'); + }); + + Breadcrumbs::for('pencatatan.klaim-jamkrindo', function (BreadcrumbTrail $trail) { + $trail->parent('pencatatan'); + $trail->push('Data Klaim Jamkrindo', route('pencatatan.klaim_jamkrindo.index')); + }); diff --git a/Routes/web.php b/Routes/web.php index dbd4dd0..19c43db 100644 --- a/Routes/web.php +++ b/Routes/web.php @@ -21,3 +21,7 @@ Route::name('parameter.')->prefix('parameter')->group(function() { Route::get('debitur', 'DebiturController@index')->name('debitur.index'); Route::get('rekening', 'RekeningController@index')->name('rekening.index'); }); + + Route::name('pencatatan.')->prefix('pencatatan')->group(function() { + Route::get('klaim-jamkrindo', 'KlaimJamkrindoController@index')->name('klaim_jamkrindo.index'); + });