From 32de93ef9f65f22bb1b8d82b61bb0f5b1f3ca354 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 30 Jan 2025 15:54:52 +0700 Subject: [PATCH 01/11] feat(custom-field): tambahkan fitur custom field - Menambahkan model CustomField dengan atribut mass assignable. - Membuat request validation untuk custom field. - Menambahkan route dan breadcrumb untuk custom field. - Membuat migration untuk tabel custom_fields. - Menambahkan export functionality untuk custom field. - Membuat view untuk menambah dan mengedit custom field. --- app/Exports/CustomFieldExport.php | 49 ++++++ .../Controllers/CustomFieldController.php | 150 ++++++++++++++++++ app/Http/Requests/CustomFieldRequest.php | 33 ++++ app/Models/CustomField.php | 24 +++ ...1_30_082943_create_custom_fields_table.php | 34 ++++ module.json | 11 ++ .../views/custom_fields/create.blade.php | 67 ++++++++ resources/views/custom_fields/index.blade.php | 146 +++++++++++++++++ routes/breadcrumbs.php | 16 ++ routes/web.php | 13 +- 10 files changed, 542 insertions(+), 1 deletion(-) create mode 100644 app/Exports/CustomFieldExport.php create mode 100644 app/Http/Controllers/CustomFieldController.php create mode 100644 app/Http/Requests/CustomFieldRequest.php create mode 100644 app/Models/CustomField.php create mode 100644 database/migrations/2025_01_30_082943_create_custom_fields_table.php create mode 100644 resources/views/custom_fields/create.blade.php create mode 100644 resources/views/custom_fields/index.blade.php diff --git a/app/Exports/CustomFieldExport.php b/app/Exports/CustomFieldExport.php new file mode 100644 index 0000000..5158d70 --- /dev/null +++ b/app/Exports/CustomFieldExport.php @@ -0,0 +1,49 @@ +id, + $row->name, + $row->type, + $row->created_at, + $row->updated_at, + ]; + } + + public function headings(): array + { + return [ + 'ID', + 'Name', + 'Type', + 'Created At', + 'Updated At', + ]; + } + + public function columnFormats(): array + { + return [ + 'A' => NumberFormat::FORMAT_NUMBER, + 'D' => NumberFormat::FORMAT_DATE_DDMMYYYY, + 'E' => NumberFormat::FORMAT_DATE_DDMMYYYY, + ]; + } +} diff --git a/app/Http/Controllers/CustomFieldController.php b/app/Http/Controllers/CustomFieldController.php new file mode 100644 index 0000000..ad41ee9 --- /dev/null +++ b/app/Http/Controllers/CustomFieldController.php @@ -0,0 +1,150 @@ +validated(); + + if ($validate) { + try { + // Save to database + CustomField::create($validate); + return redirect() + ->route('basicdata.custom-field.index') + ->with('success', 'Custom Field created successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.custom-field.create') + ->with('error', $e->getMessage()); + } + } + } + + public function create() + { + return view('lpj::custom_fields.create'); + } + + public function edit($id) + { + $customField = CustomField::find($id); + return view('lpj::custom_fields.create', compact('customField')); + } + + public function update(CustomFieldRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $customField = CustomField::find($id); + $customField->update($validate); + return redirect() + ->route('basicdata.custom-field.index') + ->with('success', 'Custom Field updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.custom-field.edit', $id) + ->with('error', 'Failed to update custom field'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $customField = CustomField::find($id); + $customField->delete(); + + echo json_encode(['success' => true, 'message' => 'Custom Field deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete custom field']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('custom_fields.view')) { + //abort(403, 'Sorry! You are not allowed to view custom fields.'); + } + + // Retrieve data from the database + $query = CustomField::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('name', 'LIKE', "%$search%"); + $q->orWhere('type', '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 CustomFieldExport, 'custom_fields.xlsx'); + } +} diff --git a/app/Http/Requests/CustomFieldRequest.php b/app/Http/Requests/CustomFieldRequest.php new file mode 100644 index 0000000..08c5740 --- /dev/null +++ b/app/Http/Requests/CustomFieldRequest.php @@ -0,0 +1,33 @@ + 'required|max:255', + 'type' => 'required|in:text,select,radio,checkbox', + ]; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } + + public function prepareValidationData($data){ + if(!$this->type){ + $this->merge(['type' => 'text']); + } + } +} diff --git a/app/Models/CustomField.php b/app/Models/CustomField.php new file mode 100644 index 0000000..94c43be --- /dev/null +++ b/app/Models/CustomField.php @@ -0,0 +1,24 @@ +id(); + $table->string('name'); + $table->string('type'); + $table->timestamps(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('custom_fields'); + } +}; diff --git a/module.json b/module.json index 4d52030..8eb0128 100644 --- a/module.json +++ b/module.json @@ -851,6 +851,17 @@ "administrator", "admin" ] + }, + { + "title": "Custom Field", + "path": "basicdata.custom-field", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] } ] } diff --git a/resources/views/custom_fields/create.blade.php b/resources/views/custom_fields/create.blade.php new file mode 100644 index 0000000..31220b0 --- /dev/null +++ b/resources/views/custom_fields/create.blade.php @@ -0,0 +1,67 @@ +@php + $route = explode('.', Route::currentRouteName()); +@endphp + +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection + +@section('content') +
+ @if(isset($customField->id)) +
+ + @method('PUT') + @else + + @endif + @csrf +
+
+

+ {{ isset($customField->id) ? 'Edit' : 'Tambah' }} Custom Field +

+
+ Back +
+
+
+
+ +
+ + @error('name') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('type') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/custom_fields/index.blade.php b/resources/views/custom_fields/index.blade.php new file mode 100644 index 0000000..b6b128c --- /dev/null +++ b/resources/views/custom_fields/index.blade.php @@ -0,0 +1,146 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('basicdata.custom-field') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Custom Field +

+ +
+
+
+ + + + + + + + + +
+ + + Custom Field + + + Type + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + +@endpush + diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index a0ec3d2..63dc265 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -9,6 +9,22 @@ }); } + Breadcrumbs::for('basicdata.custom-field', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata'); + $trail->push('Custom Field', route('basicdata.custom-field.index')); + }); + + Breadcrumbs::for('basicdata.custom-field.create', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.custom-field'); + $trail->push('Tambah Custom Field', route('basicdata.custom-field.create')); + }); + + Breadcrumbs::for('basicdata.custom-field.edit', function (BreadcrumbTrail $trail) { + $trail->parent('basicdata.custom-field'); + $trail->push('Edit Custom Field'); + }); + + Breadcrumbs::for('basicdata.jenis-fasilitas-kredit', function (BreadcrumbTrail $trail) { $trail->parent('basicdata'); $trail->push('Jenis Fasilitas Kredit', route('basicdata.jenis-fasilitas-kredit.index')); diff --git a/routes/web.php b/routes/web.php index 5714df6..0b96766 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,7 +3,8 @@ use Illuminate\Support\Facades\Route; use Modules\Lpj\Http\Controllers\ActivityController; use Modules\Lpj\Http\Controllers\ArahMataAnginController; -use Modules\Lpj\Http\Controllers\DebitureController; + use Modules\Lpj\Http\Controllers\CustomFieldController; + use Modules\Lpj\Http\Controllers\DebitureController; use Modules\Lpj\Http\Controllers\DokumenJaminanController; use Modules\Lpj\Http\Controllers\HubunganPemilikJaminanController; use Modules\Lpj\Http\Controllers\HubunganPenghuniJaminanController; @@ -51,6 +52,16 @@ Route::middleware(['auth'])->group(function () { Route::get('api/check-penawaran/{nomor_registrasi}', [TenderController::class, 'checkPenawaranExistence']); Route::name('basicdata.')->prefix('basic-data')->group(function () { + + Route::name('custom-field.')->prefix('custom-field')->group(function () { + Route::get('restore/{id}', [CustomFieldController::class, 'restore'])->name('restore'); + Route::get('datatables', [CustomFieldController::class, 'dataForDatatables'])->name( + 'datatables', + ); + Route::get('export', [CustomFieldController::class, 'export'])->name('export'); + }); + Route::resource('custom-field', CustomFieldController::class); + 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( From 18cbb0bbc5e2c63317ea8e02963d174096477053 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 30 Jan 2025 16:14:48 +0700 Subject: [PATCH 02/11] feat(custom-field): tambahkan kolom label dan urutan prioritas - Menambahkan kolom 'label' pada tabel custom_fields. - Menambahkan kolom 'urutan_prioritas' pada tabel custom_fields. - Memperbarui model CustomField untuk menyertakan kolom baru. - Memperbarui form input untuk label dan urutan prioritas di tampilan create dan index. - Menambahkan validasi untuk label dan urutan prioritas di CustomFieldRequest. --- .../Controllers/CustomFieldController.php | 271 +++++++++--------- app/Http/Requests/CustomFieldRequest.php | 25 ++ app/Models/CustomField.php | 4 +- ...rutan_prioritas_to_custom_fields_table.php | 28 ++ ...91021_add_label_to_custom_fields_table.php | 28 ++ .../views/custom_fields/create.blade.php | 22 ++ resources/views/custom_fields/index.blade.php | 9 +- 7 files changed, 251 insertions(+), 136 deletions(-) create mode 100644 database/migrations/2025_01_30_085835_add_urutan_prioritas_to_custom_fields_table.php create mode 100644 database/migrations/2025_01_30_091021_add_label_to_custom_fields_table.php diff --git a/app/Http/Controllers/CustomFieldController.php b/app/Http/Controllers/CustomFieldController.php index ad41ee9..b42ab89 100644 --- a/app/Http/Controllers/CustomFieldController.php +++ b/app/Http/Controllers/CustomFieldController.php @@ -1,150 +1,153 @@ validated(); + public function index() + { + return view('lpj::custom_fields.index'); + } - if ($validate) { - try { - // Save to database - CustomField::create($validate); - return redirect() - ->route('basicdata.custom-field.index') - ->with('success', 'Custom Field created successfully'); - } catch (Exception $e) { - return redirect() - ->route('basicdata.custom-field.create') - ->with('error', $e->getMessage()); + public function store(CustomFieldRequest $request) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Save to database + CustomField::create($validate); + return redirect() + ->route('basicdata.custom-field.index') + ->with('success', 'Custom Field created successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.custom-field.create') + ->with('error', $e->getMessage()); + } } } - } - public function create() - { - return view('lpj::custom_fields.create'); - } - - public function edit($id) - { - $customField = CustomField::find($id); - return view('lpj::custom_fields.create', compact('customField')); - } - - public function update(CustomFieldRequest $request, $id) - { - $validate = $request->validated(); - - if ($validate) { - try { - // Update in database - $customField = CustomField::find($id); - $customField->update($validate); - return redirect() - ->route('basicdata.custom-field.index') - ->with('success', 'Custom Field updated successfully'); - } catch (Exception $e) { - return redirect() - ->route('basicdata.custom-field.edit', $id) - ->with('error', 'Failed to update custom field'); - } + public function create() + { + $urutan_prioritas = CustomField::max('urutan_prioritas')+1; + return view('lpj::custom_fields.create', compact('urutan_prioritas')); } - } - public function destroy($id) - { - try { - // Delete from database + public function edit($id) + { $customField = CustomField::find($id); - $customField->delete(); + $urutan_prioritas = $customField->urutan_prioritas ?? CustomField::max('urutan_prioritas')+1; + return view('lpj::custom_fields.create', compact('customField', 'urutan_prioritas' )); + } - echo json_encode(['success' => true, 'message' => 'Custom Field deleted successfully']); - } catch (Exception $e) { - echo json_encode(['success' => false, 'message' => 'Failed to delete custom field']); + public function update(CustomFieldRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $customField = CustomField::find($id); + $customField->update($validate); + return redirect() + ->route('basicdata.custom-field.index') + ->with('success', 'Custom Field updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('basicdata.custom-field.edit', $id) + ->with('error', 'Failed to update custom field'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $customField = CustomField::find($id); + $customField->delete(); + + echo json_encode(['success' => true, 'message' => 'Custom Field deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete custom field']); + } + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('custom_fields.view')) { + //abort(403, 'Sorry! You are not allowed to view custom fields.'); + } + + // Retrieve data from the database + $query = CustomField::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('name', 'LIKE', "%$search%"); + $q->orWhere('label', 'LIKE', "%$search%"); + $q->orWhere('type', '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 CustomFieldExport, 'custom_fields.xlsx'); } } - - public function dataForDatatables(Request $request) - { - if (is_null($this->user) || !$this->user->can('custom_fields.view')) { - //abort(403, 'Sorry! You are not allowed to view custom fields.'); - } - - // Retrieve data from the database - $query = CustomField::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('name', 'LIKE', "%$search%"); - $q->orWhere('type', '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 CustomFieldExport, 'custom_fields.xlsx'); - } -} diff --git a/app/Http/Requests/CustomFieldRequest.php b/app/Http/Requests/CustomFieldRequest.php index 08c5740..0cf1cf8 100644 --- a/app/Http/Requests/CustomFieldRequest.php +++ b/app/Http/Requests/CustomFieldRequest.php @@ -3,6 +3,8 @@ namespace Modules\Lpj\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Modules\Lpj\Models\customField; +use Illuminate\Validation\Rule; class CustomFieldRequest extends FormRequest { @@ -14,6 +16,12 @@ class CustomFieldRequest extends FormRequest return [ 'name' => 'required|max:255', 'type' => 'required|in:text,select,radio,checkbox', + 'label' => 'nullable|max:255', + 'urutan_prioritas' => [ + 'nullable', + 'integer', + Rule::unique('custom_fields')->ignore($this->route('custom_field')), + ], ]; } @@ -29,5 +37,22 @@ class CustomFieldRequest extends FormRequest if(!$this->type){ $this->merge(['type' => 'text']); } + + if (!$this->urutan_prioritas) { + $maxPrioritas = CustomField::max('urutan_prioritas') ?? 0; + $this->merge(['urutan_prioritas' => $maxPrioritas + 1]); + } + } + + /** + * Get custom messages for validator errors. + * + * @return array + */ + public function messages() + { + return [ + 'urutan_prioritas.unique' => 'Urutan prioritas sudah digunakan. Silakan pilih nomor lain.', + ]; } } diff --git a/app/Models/CustomField.php b/app/Models/CustomField.php index 94c43be..8efcd66 100644 --- a/app/Models/CustomField.php +++ b/app/Models/CustomField.php @@ -14,7 +14,9 @@ class customField extends Base */ protected $fillable = [ 'name', - 'type' + 'type', + 'urutan_prioritas', + 'label' ]; // protected static function newFactory(): CustomFieldFactory diff --git a/database/migrations/2025_01_30_085835_add_urutan_prioritas_to_custom_fields_table.php b/database/migrations/2025_01_30_085835_add_urutan_prioritas_to_custom_fields_table.php new file mode 100644 index 0000000..f4250e3 --- /dev/null +++ b/database/migrations/2025_01_30_085835_add_urutan_prioritas_to_custom_fields_table.php @@ -0,0 +1,28 @@ +integer('urutan_prioritas')->nullable()->after('type'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('custom_fields', function (Blueprint $table) { + $table->dropColumn('urutan_prioritas'); + }); + } +}; diff --git a/database/migrations/2025_01_30_091021_add_label_to_custom_fields_table.php b/database/migrations/2025_01_30_091021_add_label_to_custom_fields_table.php new file mode 100644 index 0000000..39f8b30 --- /dev/null +++ b/database/migrations/2025_01_30_091021_add_label_to_custom_fields_table.php @@ -0,0 +1,28 @@ +string('label')->nullable()->after('name'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('custom_fields', function (Blueprint $table) { + $table->dropColumn('label'); + }); + } +}; diff --git a/resources/views/custom_fields/create.blade.php b/resources/views/custom_fields/create.blade.php index 31220b0..448cdb2 100644 --- a/resources/views/custom_fields/create.blade.php +++ b/resources/views/custom_fields/create.blade.php @@ -39,6 +39,17 @@ @enderror +
+ +
+ + @error('label') + {{ $message }} + @enderror +
+
+
+ +
+ + @error('urutan_prioritas') + {{ $message }} + @enderror +
+
-
- - - + +
+ +
+ + + @endsection From 92d0aff9f8cfbdb0ffe798b9dd5875827febfcd6 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 30 Jan 2025 20:49:34 +0700 Subject: [PATCH 04/11] feat(custom-field): tambahkan fungsi untuk mendapatkan custom field - Menambahkan fungsi getCustomField untuk mengambil custom field berdasarkan ID atau nama. - Memperbarui penggunaan model customField di file Lpj.php. --- app/Helpers/Lpj.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index 6a778a0..56da2f3 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -2,7 +2,8 @@ use Carbon\Carbon; use Illuminate\Support\Facades\DB; -use Modules\Lpj\Models\HolidayCalendar; + use Modules\Lpj\Models\customField; + use Modules\Lpj\Models\HolidayCalendar; use Modules\Lpj\Models\PenawaranDetailTender; use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\Penilaian; @@ -359,3 +360,16 @@ function getNomorLaporan($permohonanId, $documentId){ ])->first(); return $laporan->nomor_laporan ?? null; } + +function getCustomField($param){ + if(is_numeric($param)){ + $field = CustomField::find($param); + } else { + $field = CustomField::where(['name' => $param])->first(); + } + if($field){ + return $field; + } else { + return null; + } +} From b9d6e5a95ba9c20a1a764c9aee140b4e5711f2fc Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 30 Jan 2025 20:50:00 +0700 Subject: [PATCH 05/11] feat(dokumen-jaminan): perbaiki pengambilan custom field - Memperbaiki pengambilan custom field pada dokumen jaminan. - Mengubah logika untuk mendapatkan custom field berdasarkan ID yang benar. - Menambahkan pengambilan custom fields yang terkait dengan jenis legalitas jaminan. --- .../Controllers/DokumenJaminanController.php | 12 +- .../debitur/components/dokumen.blade.php | 122 ++++++++---------- 2 files changed, 64 insertions(+), 70 deletions(-) diff --git a/app/Http/Controllers/DokumenJaminanController.php b/app/Http/Controllers/DokumenJaminanController.php index 78a11c2..f272eaa 100644 --- a/app/Http/Controllers/DokumenJaminanController.php +++ b/app/Http/Controllers/DokumenJaminanController.php @@ -14,6 +14,7 @@ use Modules\Location\Models\Province; use Modules\Location\Models\Village; use Modules\Lpj\Http\Requests\DokumenJaminanRequest; + use Modules\Lpj\Models\customField; use Modules\Lpj\Models\Debiture; use Modules\Lpj\Models\DetailDokumenJaminan; use Modules\Lpj\Models\DokumenJaminan; @@ -88,7 +89,7 @@ 'jenis_legalitas_jaminan_id' => $value, 'name' => $request->name[$key], 'keterangan' => $request->keterangan[$key], - 'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : '' + 'details' => isset($request->custom_field[$value]) ? json_encode($request->custom_field[$value]) : '' ]; $dokumenJaminan = []; @@ -247,7 +248,7 @@ 'jenis_legalitas_jaminan_id' => $value, 'name' => $request->name[$key], 'keterangan' => $request->keterangan[$key], - 'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : '' + 'details' => isset($request->custom_field[$value]) ? json_encode($request->custom_field[$value]) : '' ]; $dokumenJaminan = []; @@ -496,6 +497,12 @@ foreach ($document->detail as $detail) { // Only include existing legalitas if its id is in the new set if (in_array($detail->jenis_legalitas_jaminan_id, $newLegalitasIds)) { + $customFields = []; + if($detail->jenisLegalitasJaminan->custom_fields) { + $customFields = CustomField::whereIn('id', $detail->jenisLegalitasJaminan->custom_fields) + ->get(); + } + $existingLegalitas[] = [ 'id' => $detail->id, 'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id, @@ -507,6 +514,7 @@ $detail->dokumen_nomor, ) ?? $detail->dokumen_nomor, 'custom_field' => $detail->jenisLegalitasJaminan->custom_field, + 'custom_fields' => $customFields, 'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type, 'details' => $detail->details, 'keterangan' => $detail->keterangan, diff --git a/resources/views/debitur/components/dokumen.blade.php b/resources/views/debitur/components/dokumen.blade.php index ed7805f..80cd597 100644 --- a/resources/views/debitur/components/dokumen.blade.php +++ b/resources/views/debitur/components/dokumen.blade.php @@ -16,16 +16,16 @@

-
- -
-

- {{ $permohonan->nomor_registrasi ?? "-" }} -

-
+
+ +
+

+ {{ $permohonan->nomor_registrasi ?? "-" }} +

+
@if($detail->details) - @if($detail->jenisLegalitasJaminan->custom_field) - @php $custom_field = json_decode($detail->details,true) @endphp -
- -
- + @if($detail->jenisLegalitasJaminan->custom_fields) + @php $custom_field = json_decode($detail->details) @endphp + {{ $custom_field->luas_tanah }} + @foreach($custom_field as $key => $value) +
+ +
+ +
-
+ @endforeach @endif - @else - @if($detail->jenisLegalitasJaminan->custom_field) -
- -
- @if($detail->jenisLegalitasJaminan->custom_field_type === "text") - - @elseif($detail->jenisLegalitasJaminan->custom_field_type === "number") - - @elseif($detail->jenisLegalitasJaminan->custom_field_type === "date") - - @elseif($detail->jenisLegalitasJaminan->custom_field_type === "textarea") - - @else - - @endif + @if($detail->jenisLegalitasJaminan->custom_fields) + @foreach($detail->jenisLegalitasJaminan->custom_fields as $key) +
+ +
+ +
-
+ @endforeach @endif @endif @@ -393,25 +387,17 @@
- @if($item->custom_field) -
- -
- @if($item->custom_field_type === "text") - - @elseif($item->custom_field_type === "number") - - @elseif($item->custom_field_type === "date") - - @elseif($item->custom_field_type === "textarea") - - @else - - @endif + @if($item->custom_fields) + @foreach($item->custom_fields as $field) +
+ +
+ +
-
+ @endforeach @endif
@@ -437,13 +423,13 @@ @push('scripts') {{--Pemilik Jaminan--}} From cae62db0dfe31072adabde5b7677c137c004f81c Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 30 Jan 2025 20:50:16 +0700 Subject: [PATCH 06/11] fix(penawaran): perbaiki pengambilan luas tanah dan luas bangunan - Sederhanakan kondisi untuk memeriksa dan mengambil nilai luas tanah dan luas bangunan. - Ganti penggunaan notasi objek dengan notasi akses langsung untuk meningkatkan keterbacaan. - Hapus kondisi yang tidak perlu untuk meningkatkan efisiensi kode. --- .../views/penawaran/kirimEmail.blade.php | 178 +++++++++--------- .../views/penawaran/kirimEmailKJPP.blade.php | 14 +- .../views/penawaran/surat_tender.blade.php | 18 +- .../penawaran/surat_tender_download.blade.php | 14 +- .../penawaran/surat_tender_kjpp.blade.php | 22 +-- .../surat_tender_kjpp_download.blade.php | 176 +++++++++-------- 6 files changed, 196 insertions(+), 226 deletions(-) diff --git a/resources/views/penawaran/kirimEmail.blade.php b/resources/views/penawaran/kirimEmail.blade.php index fa42b41..a4238b4 100644 --- a/resources/views/penawaran/kirimEmail.blade.php +++ b/resources/views/penawaran/kirimEmail.blade.php @@ -56,8 +56,8 @@ -
- Dear +
+ Dear @php $allPeople = []; @@ -76,7 +76,7 @@ } } } - } catch (\Exception $e) { + } catch (Exception $e) { // Handle invalid JSON silently } } @@ -85,104 +85,100 @@ $allPeople = array_filter($allPeople); $totalPeople = count($allPeople); @endphp - @if ($totalPeople > 0) - @foreach ($allPeople as $index => $person) - {{ $person }}{{ $index === $totalPeople - 2 ? ' dan ' : ($index < $totalPeople - 2 ? ' , ' : '') }} - @endforeach - @else - Tidak Ada - @endif + @if ($totalPeople > 0) + @foreach ($allPeople as $index => $person) + {{ $person }}{{ $index === $totalPeople - 2 ? ' dan ' : ($index < $totalPeople - 2 ? ' , ' : '') }} + @endforeach + @else + Tidak Ada + @endif -
- Mohon untuk dibuatkan proposal jasa appraisal atas nama {{ $permohonan->debiture->name }}, tujuan penilaian untuk {{ $penawaran->tujuanPenilaianKJPP->name }}, laporan dalam bentuk {{ $penawaran->jenisLaporan->name }}, dengan data-data sebagai berikut: -
+
+ Mohon untuk dibuatkan proposal jasa appraisal atas nama {{ $permohonan->debiture->name }}, tujuan penilaian untuk {{ $penawaran->tujuanPenilaianKJPP->name }}, laporan dalam bentuk {{ $penawaran->jenisLaporan->name }}, dengan data-data sebagai berikut: +
-
- Aset Jaminan: @foreach ($permohonan->debiture->documents as $document) - {{ $document->jenisJaminan->name }} - @endforeach - Lokasi Jaminan: @foreach ($permohonan->debiture->documents as $document) - {{ $document->address }}, Kel. @foreach ($villages as $village) - {{ $village->name }} - @endforeach, Kec. @foreach ($districts as $district) - {{ $district->name }} - @endforeach,@foreach ($cities as $city) - {{ ucwords(strtolower($city->name)) }} - @endforeach,@foreach ($provinces as $province) - {{ $province->name }} - @endforeach - @endforeach - - - Luas Tanah / Luas Bangunan: - @php - $luas_tanah = null; - $luas_bangunan = null; - @endphp - - @foreach ($permohonan->debiture->documents as $document) - @foreach ($document->detail as $detail) - @php - $details = json_decode($detail->details); - @endphp - - @if (is_object($details)) - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && - isset($details->{'luas_tanah'}) && - is_numeric($details->{'luas_tanah'})) - @php - $luas_tanah = $details->{'luas_tanah'}; - @endphp - @endif - - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && - isset($details->{'luas_bangunan'}) && - is_numeric($details->{'luas_bangunan'})) - @php - $luas_bangunan = $details->{'luas_bangunan'}; - @endphp - @endif - @endif +
+ Aset Jaminan: @foreach ($permohonan->debiture->documents as $document) + {{ $document->jenisJaminan->name }} + @endforeach + Lokasi Jaminan: @foreach ($permohonan->debiture->documents as $document) + {{ $document->address }}, Kel. @foreach ($villages as $village) + {{ $village->name }} + @endforeach, Kec. @foreach ($districts as $district) + {{ $district->name }} + @endforeach,@foreach ($cities as $city) + {{ ucwords(strtolower($city->name)) }} + @endforeach,@foreach ($provinces as $province) + {{ $province->name }} @endforeach @endforeach + - @if ($luas_tanah !== null && $luas_bangunan !== null) - {{ $luas_tanah }} m2 / {{ $luas_bangunan }} m2 - @elseif ($luas_tanah !== null) - {{ $luas_tanah }} m2 - @elseif ($luas_bangunan !== null) - {{ $luas_bangunan }} m2 - @endif -
+ Luas Tanah / Luas Bangunan: + @php + $luas_tanah = null; + $luas_bangunan = null; + @endphp -
- Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.
- Mohon proposal dapat saya terima segera, sebelum {{ formatTanggalIndonesia($penawaran->end_date, true) }} -
+ @foreach ($permohonan->debiture->documents as $document) + @foreach ($document->detail as $detail) + @php + $details = json_decode($detail->details); + @endphp -
- Best Regards,
- {{ $permohonan->user->name }} -

- {{ $permohonan->user->name }} -

-
+ @if (is_object($details)) + @if(isset($details->luas_tanah) && is_numeric($details->luas_tanah)) + ) + @php + $luas_tanah = $details->luas_tanah; + @endphp + @endif - + @if(isset($details->luas_bangunan) && is_numeric($details->luas_bangunan)) + ) + @php + $luas_bangunan = $details->luas_bangunan; + @endphp + @endif + @endif + @endforeach + @endforeach + + @if ($luas_tanah !== null && $luas_bangunan !== null) + {{ $luas_tanah }} m2 / {{ $luas_bangunan }} m2 + @elseif ($luas_tanah !== null) + {{ $luas_tanah }} m2 + @elseif ($luas_bangunan !== null) + {{ $luas_bangunan }} m2 + @endif
+ +
+ Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.
+ Mohon proposal dapat saya terima segera, sebelum {{ formatTanggalIndonesia($penawaran->end_date, true) }} +
+ +
+ Best Regards,
+ {{ $permohonan->user->name }} +

+ {{ $permohonan->user->name }} +

+
+ + +
diff --git a/resources/views/penawaran/kirimEmailKJPP.blade.php b/resources/views/penawaran/kirimEmailKJPP.blade.php index e9e1981..33ca36a 100644 --- a/resources/views/penawaran/kirimEmailKJPP.blade.php +++ b/resources/views/penawaran/kirimEmailKJPP.blade.php @@ -133,21 +133,15 @@ @endphp @if (is_object($details)) - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && - isset($details->{'luas_tanah'}) && - is_numeric($details->{'luas_tanah'})) + @if(isset($details->luas_tanah) && is_numeric($details->luas_tanah))) @php - $luas_tanah = $details->{'luas_tanah'}; + $luas_tanah = $details->luas_tanah; @endphp @endif - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && - isset($details->{'luas_bangunan'}) && - is_numeric($details->{'luas_bangunan'})) + @if(isset($details->luas_bangunan) && is_numeric($details->luas_bangunan))) @php - $luas_bangunan = $details->{'luas_bangunan'}; + $luas_bangunan = $details->luas_bangunan; @endphp @endif @endif diff --git a/resources/views/penawaran/surat_tender.blade.php b/resources/views/penawaran/surat_tender.blade.php index 7b8f5f0..ae704d6 100644 --- a/resources/views/penawaran/surat_tender.blade.php +++ b/resources/views/penawaran/surat_tender.blade.php @@ -116,21 +116,15 @@ @endphp @if (is_object($details)) - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && - isset($details->{'luas_tanah'}) && - is_numeric($details->{'luas_tanah'})) - @php - $luas_tanah = $details->{'luas_tanah'}; - @endphp + @if(isset($details->luas_tanah) && is_numeric($details->luas_tanah))) + @php + $luas_tanah = $details->luas_tanah; + @endphp @endif - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && - isset($details->{'luas_bangunan'}) && - is_numeric($details->{'luas_bangunan'})) + @if(isset($details->luas_bangunan) && is_numeric($details->luas_bangunan))) @php - $luas_bangunan = $details->{'luas_bangunan'}; + $luas_bangunan = $details->luas_bangunan; @endphp @endif @endif diff --git a/resources/views/penawaran/surat_tender_download.blade.php b/resources/views/penawaran/surat_tender_download.blade.php index dcf640c..800ebcb 100644 --- a/resources/views/penawaran/surat_tender_download.blade.php +++ b/resources/views/penawaran/surat_tender_download.blade.php @@ -131,21 +131,15 @@ @endphp @if (is_object($details)) - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && - isset($details->{'luas_tanah'}) && - is_numeric($details->{'luas_tanah'})) + @if(isset($details->luas_tanah) && is_numeric($details->luas_tanah))) @php - $luas_tanah = $details->{'luas_tanah'}; + $luas_tanah = $details->luas_tanah; @endphp @endif - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && - isset($details->{'luas_bangunan'}) && - is_numeric($details->{'luas_bangunan'})) + @if(isset($details->luas_bangunan) && is_numeric($details->luas_bangunan))) @php - $luas_bangunan = $details->{'luas_bangunan'}; + $luas_bangunan = $details->luas_bangunan; @endphp @endif @endif diff --git a/resources/views/penawaran/surat_tender_kjpp.blade.php b/resources/views/penawaran/surat_tender_kjpp.blade.php index 8edc180..4370fa8 100644 --- a/resources/views/penawaran/surat_tender_kjpp.blade.php +++ b/resources/views/penawaran/surat_tender_kjpp.blade.php @@ -13,7 +13,7 @@
+ class="btn btn-xs btn-light"> pdfDownload jenisLegalitasJaminan->custom_field === 'luas_tanah' && - isset($details->{'luas_tanah'}) && - is_numeric($details->{'luas_tanah'})) + @if(isset($details->luas_tanah) && is_numeric($details->luas_tanah)) + ) @php - $luas_tanah = $details->{'luas_tanah'}; + $luas_tanah = $details->luas_tanah; @endphp @endif - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && - isset($details->{'luas_bangunan'}) && - is_numeric($details->{'luas_bangunan'})) + @if(isset($details->luas_bangunan) && is_numeric($details->luas_bangunan)) + ) @php - $luas_bangunan = $details->{'luas_bangunan'}; + $luas_bangunan = $details->luas_bangunan; @endphp @endif @endif @@ -152,7 +148,7 @@

Best Regards,

{{ $permohonan->user->name }} + alt="{{ $permohonan->user->name }}" width="200" class="signature">

{{ $permohonan->user->name }}

diff --git a/resources/views/penawaran/surat_tender_kjpp_download.blade.php b/resources/views/penawaran/surat_tender_kjpp_download.blade.php index bfd1806..81f1981 100644 --- a/resources/views/penawaran/surat_tender_kjpp_download.blade.php +++ b/resources/views/penawaran/surat_tender_kjpp_download.blade.php @@ -56,8 +56,8 @@ -
- Dear +
+ Dear @php $allPeople = []; @@ -87,104 +87,100 @@ $allPeople = array_filter(array_unique($allPeople)); $totalPeople = count($allPeople); @endphp - @if ($totalPeople > 0) - @foreach ($allPeople as $index => $person) - {{ $person }}{{ $index === $totalPeople - 2 ? ' dan ' : ($index < $totalPeople - 2 ? ' , ' : '') }} - @endforeach - @else - Tidak Ada - @endif + @if ($totalPeople > 0) + @foreach ($allPeople as $index => $person) + {{ $person }}{{ $index === $totalPeople - 2 ? ' dan ' : ($index < $totalPeople - 2 ? ' , ' : '') }} + @endforeach + @else + Tidak Ada + @endif -
- Mohon untuk dibuatkan proposal jasa appraisal atas nama {{ $permohonan->debiture->name }}, tujuan penilaian untuk {{ $penawaran->tujuanPenilaianKJPP->name }}, laporan dalam bentuk {{ $penawaran->jenisLaporan->name }}, dengan data-data sebagai berikut: -
+
+ Mohon untuk dibuatkan proposal jasa appraisal atas nama {{ $permohonan->debiture->name }}, tujuan penilaian untuk {{ $penawaran->tujuanPenilaianKJPP->name }}, laporan dalam bentuk {{ $penawaran->jenisLaporan->name }}, dengan data-data sebagai berikut: +
-
- Aset Jaminan: @foreach ($permohonan->debiture->documents as $document) - {{ $document->jenisJaminan->name }} - @endforeach - Lokasi Jaminan: @foreach ($permohonan->debiture->documents as $document) - {{ $document->address }}, Kel. @foreach ($villages as $village) - {{ $village->name }} - @endforeach, Kec. @foreach ($districts as $district) - {{ $district->name }} - @endforeach,@foreach ($cities as $city) - {{ ucwords(strtolower($city->name)) }} - @endforeach,@foreach ($provinces as $province) - {{ $province->name }} - @endforeach - @endforeach - - - Luas Tanah / Luas Bangunan: - @php - $luas_tanah = null; - $luas_bangunan = null; - @endphp - - @foreach ($permohonan->debiture->documents as $document) - @foreach ($document->detail as $detail) - @php - $details = json_decode($detail->details); - @endphp - - @if (is_object($details)) - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && - isset($details->{'luas_tanah'}) && - is_numeric($details->{'luas_tanah'})) - @php - $luas_tanah = $details->{'luas_tanah'}; - @endphp - @endif - - @if ( - $detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && - isset($details->{'luas_bangunan'}) && - is_numeric($details->{'luas_bangunan'})) - @php - $luas_bangunan = $details->{'luas_bangunan'}; - @endphp - @endif - @endif +
+ Aset Jaminan: @foreach ($permohonan->debiture->documents as $document) + {{ $document->jenisJaminan->name }} + @endforeach + Lokasi Jaminan: @foreach ($permohonan->debiture->documents as $document) + {{ $document->address }}, Kel. @foreach ($villages as $village) + {{ $village->name }} + @endforeach, Kec. @foreach ($districts as $district) + {{ $district->name }} + @endforeach,@foreach ($cities as $city) + {{ ucwords(strtolower($city->name)) }} + @endforeach,@foreach ($provinces as $province) + {{ $province->name }} @endforeach @endforeach + - @if ($luas_tanah !== null && $luas_bangunan !== null) - {{ $luas_tanah }} m2 / {{ $luas_bangunan }} m2 - @elseif ($luas_tanah !== null) - {{ $luas_tanah }} m2 - @elseif ($luas_bangunan !== null) - {{ $luas_bangunan }} m2 - @endif -
+ Luas Tanah / Luas Bangunan: + @php + $luas_tanah = null; + $luas_bangunan = null; + @endphp -
- Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.
- Mohon proposal dapat saya terima segera, sebelum {{ formatTanggalIndonesia($penawaran->end_date, true) }} -
+ @foreach ($permohonan->debiture->documents as $document) + @foreach ($document->detail as $detail) + @php + $details = json_decode($detail->details); + @endphp -
- Best Regards,
- {{ $permohonan->user->name }} -

- {{ $permohonan->user->name }} -

-
+ @if (is_object($details)) + @if(isset($details->luas_tanah) && is_numeric($details->luas_tanah)) + ) + @php + $luas_tanah = $details->luas_tanah; + @endphp + @endif - + @if(isset($details->luas_bangunan) && is_numeric($details->luas_bangunan)) + ) + @php + $luas_bangunan = $details->luas_bangunan; + @endphp + @endif + @endif + @endforeach + @endforeach + + @if ($luas_tanah !== null && $luas_bangunan !== null) + {{ $luas_tanah }} m2 / {{ $luas_bangunan }} m2 + @elseif ($luas_tanah !== null) + {{ $luas_tanah }} m2 + @elseif ($luas_bangunan !== null) + {{ $luas_bangunan }} m2 + @endif
+ +
+ Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.
+ Mohon proposal dapat saya terima segera, sebelum {{ formatTanggalIndonesia($penawaran->end_date, true) }} +
+ +
+ Best Regards,
+ {{ $permohonan->user->name }} +

+ {{ $permohonan->user->name }} +

+
+ + +
From ad3d3e900d5dd52fa9c950933f6878f9d8a464db Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 30 Jan 2025 20:50:32 +0700 Subject: [PATCH 07/11] feat(jenis-legalitas-jaminan): perbaiki tampilan checkbox untuk jenis legalitas jaminan - Memperbaiki struktur HTML untuk bagian jenis legalitas jaminan. - Mengoptimalkan penggunaan checkbox dengan penataan ulang kode. - Menjaga fungsionalitas checkbox tetap utuh saat menyimpan data. --- .../views/jenis_jaminan/create.blade.php | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/resources/views/jenis_jaminan/create.blade.php b/resources/views/jenis_jaminan/create.blade.php index c206f7a..173c692 100644 --- a/resources/views/jenis_jaminan/create.blade.php +++ b/resources/views/jenis_jaminan/create.blade.php @@ -92,28 +92,28 @@ @enderror
- -
- -
- @foreach ($jenisLegalitasJaminan as $row) -
+