diff --git a/app/Exports/JenisDokumenExport.php b/app/Exports/JenisDokumenExport.php new file mode 100644 index 0000000..a4dc479 --- /dev/null +++ b/app/Exports/JenisDokumenExport.php @@ -0,0 +1,51 @@ +id, + $row->name, + $row->max_size, + $row->description, + $row->created_at + ]; + } + + public function headings() + : array + { + return [ + 'ID', + 'Name', + 'Max Size', + 'Description', + 'Created At' + ]; + } + + public function columnFormats() + : array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'E' => NumberFormat::FORMAT_DATE_DATETIME + ]; + } + } diff --git a/app/Http/Controllers/JenisDokumenController.php b/app/Http/Controllers/JenisDokumenController.php new file mode 100644 index 0000000..dd60228 --- /dev/null +++ b/app/Http/Controllers/JenisDokumenController.php @@ -0,0 +1,151 @@ +validated(); + + if ($validate) { + try { + // Save to database + JenisDokumen::create($validate); + return redirect() + ->route('basicdata.jenis-dokumen.index') + ->with('success', 'Jenis Dokumen created successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.jenis-dokumen.create') + ->with('error', 'Failed to create jenis dokumen'); + } + } + } + + public function create() + { + return view('lpj::jenis_dokumen.create'); + } + + public function edit($id) + { + $jenisDokumen = JenisDokumen::find($id); + return view('lpj::jenis_dokumen.create', compact('jenisDokumen')); + } + + public function update(JenisDokumenRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $jenisDokumen = JenisDokumen::find($id); + $jenisDokumen->update($validate); + return redirect() + ->route('basicdata.jenis-dokumen.index') + ->with('success', 'Jenis Dokumen updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.jenis-dokumen.edit', $id) + ->with('error', 'Failed to update jenis dokumen'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $jenisDokumen = JenisDokumen::find($id); + $jenisDokumen->delete(); + + echo json_encode(['success' => true, 'message' => 'Jenis Dokumen deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete jenis dokumen']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('jenis_dokumen.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = JenisDokumen::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('max_size', 'LIKE', "%$search%"); + $q->orWhere('name', 'LIKE', "%$search%"); + $q->orWhere('description', '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 JenisDokumenExport, 'jenis_dokumen.xlsx'); + } + } diff --git a/app/Http/Requests/JenisDokumenRequest.php b/app/Http/Requests/JenisDokumenRequest.php new file mode 100644 index 0000000..eed7aa5 --- /dev/null +++ b/app/Http/Requests/JenisDokumenRequest.php @@ -0,0 +1,32 @@ + 'required|max:255', + 'max_size' => 'nullable|numeric', + 'description' => 'nullable|max:255' + ]; + + return $rules; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize() + : bool + { + return true; + } + } diff --git a/app/Models/JenisDokumen.php b/app/Models/JenisDokumen.php new file mode 100644 index 0000000..6a16c7d --- /dev/null +++ b/app/Models/JenisDokumen.php @@ -0,0 +1,10 @@ +id(); + $table->string('name'); + $table->string('max_size')->nullable(); + $table->string('description')->nullable(); + $table->boolean('status')->default(true)->nullable(); + $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('jenis_dokumen'); + } +}; diff --git a/module.json b/module.json index 1d744fa..50c4cd3 100644 --- a/module.json +++ b/module.json @@ -127,6 +127,14 @@ "permission": "", "roles": [] }, + { + "title": "Jenis Dokumen", + "path": "basicdata.jenis-dokumen", + "classes": "", + "attributes": [], + "permission": "", + "roles": [] + }, { "title": "Tujuan Penilaian", "path": "basicdata.tujuan-penilaian", diff --git a/resources/views/jenis_dokumen/create.blade.php b/resources/views/jenis_dokumen/create.blade.php new file mode 100644 index 0000000..1fd52f2 --- /dev/null +++ b/resources/views/jenis_dokumen/create.blade.php @@ -0,0 +1,69 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($jenisDokumen->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($jenisDokumen->id) ? 'Edit' : 'Tambah' }} Jenis Dokumen +

+
+ Back +
+
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('max_size') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('description') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/jenis_dokumen/index.blade.php b/resources/views/jenis_dokumen/index.blade.php new file mode 100644 index 0000000..4388c2f --- /dev/null +++ b/resources/views/jenis_dokumen/index.blade.php @@ -0,0 +1,158 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.jenis-dokumen') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Jenis Dokumen +

+ +
+
+
+ + + + + + + + + + +
+ + + Jenis Dokumen + + + Max Size + + + Description + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index fe59b5f..5ac8a28 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -82,6 +82,21 @@ $trail->push('Edit Jenis Aset'); }); + Breadcrumbs::for('basicdata.jenis-dokumen', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Jenis Dokumen', route('basicdata.jenis-dokumen.index')); + }); + + Breadcrumbs::for('basicdata.jenis-dokumen.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-dokumen'); + $trail->push('Tambah Jenis Dokumen', route('basicdata.jenis-dokumen.create')); + }); + + Breadcrumbs::for('basicdata.jenis-dokumen.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.jenis-dokumen'); + $trail->push('Edit Jenis Dokumen'); + }); + Breadcrumbs::for('basicdata.currency', function (BreadcrumbTrail $trail) { $trail->parent('basicdata'); diff --git a/routes/web.php b/routes/web.php index c07e89f..8095371 100644 --- a/routes/web.php +++ b/routes/web.php @@ -7,6 +7,7 @@ use Modules\Lpj\Http\Controllers\HubunganPemilikJaminanController; use Modules\Lpj\Http\Controllers\HubunganPenghuniJaminanController; use Modules\Lpj\Http\Controllers\JenisAsetController; + use Modules\Lpj\Http\Controllers\JenisDokumenController; use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController; use Modules\Lpj\Http\Controllers\JenisJaminanController; use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController; @@ -66,6 +67,14 @@ }); Route::resource('jenis-aset', JenisAsetController::class); + Route::name('jenis-dokumen.')->prefix('jenis-dokumen')->group(function () { + Route::get('restore/{id}', [JenisDokumenController::class, 'restore'])->name('restore'); + Route::get('datatables', [JenisDokumenController::class, 'dataForDatatables']) + ->name('datatables'); + Route::get('export', [JenisDokumenController::class, 'export'])->name('export'); + }); + Route::resource('jenis-dokumen', JenisDokumenController::class); + Route::name('currency.')->prefix('mata-uang')->group(function () { Route::get('restore/{id}', [CurrencyController::class, 'restore'])->name('restore'); Route::get('datatables', [CurrencyController::class, 'dataForDatatables'])