From 58239883eca46c4df03cca6a3bf218b3ccb9855b Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Sun, 11 Aug 2024 14:22:51 +0700 Subject: [PATCH] Feature #2 : Jenis Legalitas jaminan --- app/Exports/JenisFasilitasKreditExport.php | 76 +++++---- app/Exports/JenisLegalitasJaminanExport.php | 49 ++++++ .../JenisLegalitasJaminanController.php | 149 ++++++++++++++++++ .../Requests/JenisLegalitasJaminanRequest.php | 33 ++++ app/Models/JenisLegalitasJaminan.php | 13 ++ ...8_create_jenis_legalitas_jaminan_table.php | 33 ++++ module.json | 2 +- .../jenis_fasilitas_kredit/index.blade.php | 2 +- .../jenis_legalitas_jaminan/create.blade.php | 58 +++++++ .../jenis_legalitas_jaminan/index.blade.php | 149 ++++++++++++++++++ routes/breadcrumbs.php | 15 ++ routes/web.php | 15 +- 12 files changed, 554 insertions(+), 40 deletions(-) create mode 100644 app/Exports/JenisLegalitasJaminanExport.php create mode 100644 app/Http/Controllers/JenisLegalitasJaminanController.php create mode 100644 app/Http/Requests/JenisLegalitasJaminanRequest.php create mode 100644 app/Models/JenisLegalitasJaminan.php create mode 100644 database/migrations/2024_08_11_000118_create_jenis_legalitas_jaminan_table.php create mode 100644 resources/views/jenis_legalitas_jaminan/create.blade.php create mode 100644 resources/views/jenis_legalitas_jaminan/index.blade.php diff --git a/app/Exports/JenisFasilitasKreditExport.php b/app/Exports/JenisFasilitasKreditExport.php index fb396b4..1a61a90 100644 --- a/app/Exports/JenisFasilitasKreditExport.php +++ b/app/Exports/JenisFasilitasKreditExport.php @@ -1,42 +1,48 @@ id, - $row->code, - $row->name, - $row->created_at - ]; - } - public function headings(): array{ - return [ - 'ID', - 'Code', - 'Name', - 'Created At' - ]; - } + public function map($row) + : array + { + return [ + $row->id, + $row->code, + $row->name, + $row->created_at + ]; + } - public function columnFormats(): array{ - return [ - 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, - 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME - ]; + public function headings() + : array + { + return [ + 'ID', + 'Code', + 'Name', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER, + 'D' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME + ]; + } } -} diff --git a/app/Exports/JenisLegalitasJaminanExport.php b/app/Exports/JenisLegalitasJaminanExport.php new file mode 100644 index 0000000..011ad9d --- /dev/null +++ b/app/Exports/JenisLegalitasJaminanExport.php @@ -0,0 +1,49 @@ +id, + $row->code, + $row->name, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Code', + 'Name', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/JenisLegalitasJaminanController.php b/app/Http/Controllers/JenisLegalitasJaminanController.php new file mode 100644 index 0000000..51e548f --- /dev/null +++ b/app/Http/Controllers/JenisLegalitasJaminanController.php @@ -0,0 +1,149 @@ +validated(); + + if ($validate) { + try { + // Save to database + JenisLegalitasJaminan::create($validate); + return redirect() + ->route('basicdata.jenis-legalitas-jaminan.index') + ->with('success', 'Jenis Legalitas Jaminan created successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.jenis-legalitas-jaminan.create') + ->with('error', 'Failed to create province'); + } + } + } + + public function create() + { + return view('lpj::jenis_legalitas_jaminan.create'); + } + + public function edit($id) + { + $jenisLegalitasJaminan = JenisLegalitasJaminan::find($id); + return view('lpj::jenis_legalitas_jaminan.create', compact('jenisLegalitasJaminan')); + } + + public function update(JenisLegalitasJaminanRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $jenisLegalitasJaminan = JenisLegalitasJaminan::find($id); + $jenisLegalitasJaminan->update($validate); + return redirect() + ->route('basicdata.jenis-legalitas-jaminan.index') + ->with('success', 'Jenis Legalitas Jaminan updated successfully'); + } catch (\Exception $e) { + return redirect() + ->route('basicdata.jenis-legalitas-jaminan.edit', $id) + ->with('error', 'Failed to update province'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $jenisLegalitasJaminan = JenisLegalitasJaminan::find($id); + $jenisLegalitasJaminan->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Legalitas Jaminan deleted successfully']); + } catch (\Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete province']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('jenis_legalitas_jaminan.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = JenisLegalitasJaminan::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('code', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new JenisLegalitasJaminanExport, 'jenis_legalitas_jaminan.xlsx'); + } + } diff --git a/app/Http/Requests/JenisLegalitasJaminanRequest.php b/app/Http/Requests/JenisLegalitasJaminanRequest.php new file mode 100644 index 0000000..e109b27 --- /dev/null +++ b/app/Http/Requests/JenisLegalitasJaminanRequest.php @@ -0,0 +1,33 @@ + 'required|max:255', + ]; + + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:jenis_legalitas_jaminan,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:jenis_legalitas_jaminan,code'; + } + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } +} diff --git a/app/Models/JenisLegalitasJaminan.php b/app/Models/JenisLegalitasJaminan.php new file mode 100644 index 0000000..6b6ed66 --- /dev/null +++ b/app/Models/JenisLegalitasJaminan.php @@ -0,0 +1,13 @@ +id(); + $table->string('code'); + $table->string('name'); + $table->timestamps(); + $table->softDeletes(); + $table->uuid('created_by')->nullable(); + $table->uuid('updated_by')->nullable(); + $table->uuid('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jenis_legalitas_jaminan'); + } +}; diff --git a/module.json b/module.json index 191081a..53fb9f5 100644 --- a/module.json +++ b/module.json @@ -110,7 +110,7 @@ }, { "title": "Jenis Legalitas Jaminan", - "path": "", + "path": "basicdata.jenis-legalitas-jaminan", "classes": "", "attributes": [], "permission": "", diff --git a/resources/views/jenis_fasilitas_kredit/index.blade.php b/resources/views/jenis_fasilitas_kredit/index.blade.php index 8c75875..35069ce 100644 --- a/resources/views/jenis_fasilitas_kredit/index.blade.php +++ b/resources/views/jenis_fasilitas_kredit/index.blade.php @@ -140,7 +140,7 @@ // Custom search functionality searchInput.addEventListener('input', function () { const searchValue = this.value.trim(); - if (searchValue.length > 3) { + if (searchValue.length > 2) { dataTable.search(searchValue, true); } }); diff --git a/resources/views/jenis_legalitas_jaminan/create.blade.php b/resources/views/jenis_legalitas_jaminan/create.blade.php new file mode 100644 index 0000000..e7ae9d9 --- /dev/null +++ b/resources/views/jenis_legalitas_jaminan/create.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($jenisLegalitasJaminan->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan +

+
+ Back +
+
+
+
+ +
+ + @error('code') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/jenis_legalitas_jaminan/index.blade.php b/resources/views/jenis_legalitas_jaminan/index.blade.php new file mode 100644 index 0000000..e30d512 --- /dev/null +++ b/resources/views/jenis_legalitas_jaminan/index.blade.php @@ -0,0 +1,149 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.jenis-legalitas-jaminan') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Jenis Legalitas Jaminan +

+ +
+
+
+ + + + + + + + + +
+ + + Code + + + Jenis Legalitas Jaminan + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 6164054..b906483 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -22,3 +22,18 @@ $trail->push('Edit Jenis Fasilitas Kredit'); }); + Breadcrumbs::for('basicdata.jenis-legalitas-jaminan', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Jenis Legalitas Jaminan', route('basicdata.jenis-legalitas-jaminan.index')); + }); + + Breadcrumbs::for('basicdata.jenis-legalitas-jaminan.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-legalitas-jaminan'); + $trail->push('Tambah Jenis Legalitas Jaminan', route('basicdata.jenis-legalitas-jaminan.create')); + }); + + Breadcrumbs::for('basicdata.jenis-legalitas-jaminan.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-legalitas-jaminan'); + $trail->push('Edit Jenis Legalitas Jaminan'); + }); + diff --git a/routes/web.php b/routes/web.php index fb02eff..9a3e72c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,8 +1,8 @@ prefix('basic-data')->group(function () { Route::name('jenis-fasilitas-kredit.')->prefix('jenis-fasilitas-kredit')->group(function () { Route::get('restore/{id}', [JenisFasilitasKreditController::class, 'restore'])->name('restore'); - Route::get('datatables', [JenisFasilitasKreditController::class, 'dataForDatatables'])->name('datatables'); + Route::get('datatables', [JenisFasilitasKreditController::class, 'dataForDatatables']) + ->name('datatables'); Route::get('export', [JenisFasilitasKreditController::class, 'export'])->name('export'); }); Route::resource('jenis-fasilitas-kredit', JenisFasilitasKreditController::class); + + Route::name('jenis-legalitas-jaminan.')->prefix('jenis-legalitas-jaminan')->group(function () { + Route::get('restore/{id}', [JenisLegalitasJaminanController::class, 'restore'])->name('restore'); + Route::get('datatables', [JenisLegalitasJaminanController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [JenisLegalitasJaminanController::class, 'export'])->name('export'); + }); + Route::resource('jenis-legalitas-jaminan', JenisLegalitasJaminanController::class); }); });