From bc78cf3ea99e71beb27cac7eaddd0d59f33b514f Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Sun, 11 Aug 2024 13:28:00 +0700 Subject: [PATCH] Feature #1 : Jenis Fasilitas Kredit --- app/Exports/JenisFasilitasKreditExport.php | 42 +++++ .../JenisFasilitasKreditController.php | 134 ++++++++++++++++ app/Http/Controllers/LpjController.php | 67 -------- .../Requests/JenisFasilitasKreditRequest.php | 35 ++++ app/Models/Base.php | 50 ++++++ app/Models/JenisFasilitasKredit.php | 11 ++ app/Providers/LpjServiceProvider.php | 4 + ...51_create_jenis_fasilitas_kredit_table.php | 33 ++++ module.json | 14 +- resources/views/index.blade.php | 7 - .../jenis_fasilitas_kredit/create.blade.php | 58 +++++++ .../jenis_fasilitas_kredit/index.blade.php | 149 ++++++++++++++++++ resources/views/layouts/master.blade.php | 29 ---- routes/api.php | 4 - routes/breadcrumbs.php | 24 +++ routes/web.php | 36 +++-- 16 files changed, 569 insertions(+), 128 deletions(-) create mode 100644 app/Exports/JenisFasilitasKreditExport.php create mode 100644 app/Http/Controllers/JenisFasilitasKreditController.php delete mode 100644 app/Http/Controllers/LpjController.php create mode 100644 app/Http/Requests/JenisFasilitasKreditRequest.php create mode 100644 app/Models/Base.php create mode 100644 app/Models/JenisFasilitasKredit.php create mode 100644 database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php delete mode 100644 resources/views/index.blade.php create mode 100644 resources/views/jenis_fasilitas_kredit/create.blade.php create mode 100644 resources/views/jenis_fasilitas_kredit/index.blade.php delete mode 100644 resources/views/layouts/master.blade.php create mode 100644 routes/breadcrumbs.php diff --git a/app/Exports/JenisFasilitasKreditExport.php b/app/Exports/JenisFasilitasKreditExport.php new file mode 100644 index 0000000..fb396b4 --- /dev/null +++ b/app/Exports/JenisFasilitasKreditExport.php @@ -0,0 +1,42 @@ +id, + $row->code, + $row->name, + $row->created_at + ]; + } + 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/Http/Controllers/JenisFasilitasKreditController.php b/app/Http/Controllers/JenisFasilitasKreditController.php new file mode 100644 index 0000000..cd26750 --- /dev/null +++ b/app/Http/Controllers/JenisFasilitasKreditController.php @@ -0,0 +1,134 @@ +validated(); + + if($validate){ + try{ + // Save to database + JenisFasilitasKredit::create($validate); + return redirect()->route('basicdata.jenis-fasilitas-kredit.index')->with('success', 'Jenis Fasilitas Kredit created successfully'); + } catch (\Exception $e){ + return redirect()->route('basicdata.jenis-fasilitas-kredit.create')->with('error', 'Failed to create province'); + } + } + } + + public function edit($id){ + $jenisFasilitasKredit = JenisFasilitasKredit::find($id); + return view('lpj::jenis_fasilitas_kredit.create', compact('jenisFasilitasKredit')); + } + + public function update(JenisFasilitasKreditRequest $request, $id){ + $validate = $request->validated(); + + if($validate){ + try{ + // Update in database + $jenisFasilitasKredit = JenisFasilitasKredit::find($id); + $jenisFasilitasKredit->update($validate); + return redirect()->route('basicdata.jenis-fasilitas-kredit.index')->with('success', 'Jenis Fasilitas Kredit updated successfully'); + } catch (\Exception $e){ + return redirect()->route('basicdata.jenis-fasilitas-kredit.edit', $id)->with('error', 'Failed to update province'); + } + } + } + + public function destroy($id){ + try{ + // Delete from database + $jenisFasilitasKredit = JenisFasilitasKredit::find($id); + $jenisFasilitasKredit->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Fasilitas Kredit 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_fasilitas_kredit.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = JenisFasilitasKredit::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 JenisFasilitasKreditExport, 'jenis_fasilitas_kredit.xlsx'); + } +} diff --git a/app/Http/Controllers/LpjController.php b/app/Http/Controllers/LpjController.php deleted file mode 100644 index e67aeff..0000000 --- a/app/Http/Controllers/LpjController.php +++ /dev/null @@ -1,67 +0,0 @@ - 'required|max:255', + ]; + + if ($this->method() == 'PUT') { + $rules['code'] = 'required|max:50|unique:jenis_fasilitas_kredit,code,' . $this->id; + } else { + $rules['code'] = 'required|max:50|unique:jenis_fasilitas_kredit,code'; + } + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/Base.php b/app/Models/Base.php new file mode 100644 index 0000000..644d6f0 --- /dev/null +++ b/app/Models/Base.php @@ -0,0 +1,50 @@ +connection = $module->database; + } + + /** + * Retrieves the activity log options for the User Management. + * + * @return LogOptions The activity log options. + */ + public function getActivitylogOptions() + : LogOptions + { + return LogOptions::defaults()->logAll()->useLogName('LPJ : '); + } + } diff --git a/app/Models/JenisFasilitasKredit.php b/app/Models/JenisFasilitasKredit.php new file mode 100644 index 0000000..1e157d1 --- /dev/null +++ b/app/Models/JenisFasilitasKredit.php @@ -0,0 +1,11 @@ +registerConfig(); $this->registerViews(); $this->loadMigrationsFrom(module_path($this->moduleName, 'database/migrations')); + + if (class_exists('Breadcrumbs')) { + require __DIR__ . '/../../routes/breadcrumbs.php'; + } } /** diff --git a/database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php b/database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php new file mode 100644 index 0000000..82b50ee --- /dev/null +++ b/database/migrations/2024_08_11_000051_create_jenis_fasilitas_kredit_table.php @@ -0,0 +1,33 @@ +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_fasilitas_kredit'); + } +}; diff --git a/module.json b/module.json index da80ead..191081a 100644 --- a/module.json +++ b/module.json @@ -18,7 +18,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": [] + "roles": ["Administrator"] }, { "title": "Pembatalan", @@ -27,7 +27,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": [] + "roles": ["Administrator"] }, { "title": "Data Debitur", @@ -36,7 +36,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": [], + "roles": ["Administrator"], "sub": [ { "title": "Debitur", @@ -79,22 +79,22 @@ "classes": "", "attributes": [], "permission": "", - "roles": [] + "roles": ["Administrator"] } ], "master": [ { "title": "Basic Data", - "path": "", + "path": "basicdata", "icon": "ki-filled ki-category text-lg", "classes": "", "attributes": [], "permission": "", - "roles": [], + "roles": ["Administrator"], "sub": [ { "title": "Jenis Fasilitas Kredit", - "path": "", + "path": "basicdata.jenis-fasilitas-kredit", "classes": "", "attributes": [], "permission": "", diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php deleted file mode 100644 index 94ab522..0000000 --- a/resources/views/index.blade.php +++ /dev/null @@ -1,7 +0,0 @@ -@extends('lpj::layouts.master') - -@section('content') -

Hello World

- -

Module: {!! config('lpj.name') !!}

-@endsection diff --git a/resources/views/jenis_fasilitas_kredit/create.blade.php b/resources/views/jenis_fasilitas_kredit/create.blade.php new file mode 100644 index 0000000..19a6270 --- /dev/null +++ b/resources/views/jenis_fasilitas_kredit/create.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($jenisFasilitasKredit->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisFasilitasKredit->id) ? 'Edit' : 'Tambah' }} Jenis Fasilitas Kredit +

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

+ Daftar Jenis Fasilitas Kredit +

+ +
+
+
+ + + + + + + + + +
+ + + Code + + + Jenis Fasilitas Kredit + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/resources/views/layouts/master.blade.php b/resources/views/layouts/master.blade.php deleted file mode 100644 index 1056eb8..0000000 --- a/resources/views/layouts/master.blade.php +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - Lpj Module - {{ config('app.name', 'Laravel') }} - - - - - - - - - - {{-- Vite CSS --}} - {{-- {{ module_vite('build-lpj', 'resources/assets/sass/app.scss') }} --}} - - - - @yield('content') - - {{-- Vite JS --}} - {{-- {{ module_vite('build-lpj', 'resources/assets/js/app.js') }} --}} - diff --git a/routes/api.php b/routes/api.php index d9920ab..0fa8999 100644 --- a/routes/api.php +++ b/routes/api.php @@ -13,7 +13,3 @@ use Modules\Lpj\Http\Controllers\LpjController; * is assigned the "api" middleware group. Enjoy building your API! * */ - -Route::middleware(['auth:sanctum'])->prefix('v1')->group(function () { - Route::apiResource('lpj', LpjController::class)->names('lpj'); -}); diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php new file mode 100644 index 0000000..6164054 --- /dev/null +++ b/routes/breadcrumbs.php @@ -0,0 +1,24 @@ +push('Basic Data'); + }); + + Breadcrumbs::for('basicdata.jenis-fasilitas-kredit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Jenis Fasilitas Kredit', route('basicdata.jenis-fasilitas-kredit.index')); + }); + + Breadcrumbs::for('basicdata.jenis-fasilitas-kredit.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-fasilitas-kredit'); + $trail->push('Tambah Jenis Fasilitas Kredit', route('basicdata.jenis-fasilitas-kredit.create')); + }); + + Breadcrumbs::for('basicdata.jenis-fasilitas-kredit.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-fasilitas-kredit'); + $trail->push('Edit Jenis Fasilitas Kredit'); + }); + diff --git a/routes/web.php b/routes/web.php index 2a2283b..fb02eff 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,19 +1,27 @@ names('lpj'); -}); + Route::middleware(['auth'])->group(function () { + Route::name('basicdata.')->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('export', [JenisFasilitasKreditController::class, 'export'])->name('export'); + }); + Route::resource('jenis-fasilitas-kredit', JenisFasilitasKreditController::class); + }); + });