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 @@
+