From a6d7bd6bed55b93c54dacf835938302e41f4e795 Mon Sep 17 00:00:00 2001 From: arieeefajar Date: Wed, 26 Mar 2025 19:17:37 +0700 Subject: [PATCH] fix(master-rule): fix update function and create validation input cf Value --- .../Controllers/MasterData/RuleController.php | 59 +++--- .../customJs/master-data/aturan/index.js | 111 ++++++----- .../views/master-data/aturan/index.blade.php | 175 +++++++++++++----- 3 files changed, 209 insertions(+), 136 deletions(-) diff --git a/app/Http/Controllers/MasterData/RuleController.php b/app/Http/Controllers/MasterData/RuleController.php index 4c21a42..04c5b77 100644 --- a/app/Http/Controllers/MasterData/RuleController.php +++ b/app/Http/Controllers/MasterData/RuleController.php @@ -14,7 +14,6 @@ public function index() { $rules = Indicator::with('rules')->get(); $indicators = Indicator::select('id', 'name')->get(); - // dd($rules); return view('master-data.aturan.index', compact('rules', 'indicators')); } @@ -24,21 +23,20 @@ public function store(Request $request) 'indicator.required' => 'Harap pilih indikator', 'indicator.exists' => 'Indikator tidak ditemukan', - 'ideal_min.required' => 'Nilai minimum wajib diisi', - 'ideal_min.numeric' => 'Nilai minimum harus berupa angka', + 'parameter_type.required' => 'Jenis parameter wajib diisi', + 'parameter_type.string' => 'Jenis parameter harus berupa teks', + 'parameter_type.max' => 'Jenis parameter maksimal 25 karakter', - 'ideal_max.required' => 'Nilai maksimum wajib diisi', - 'ideal_max.numeric' => 'Nilai maksimum harus berupa angka', - - 'mb.required' => 'Nilai MB wajib diisi', - 'mb.numeric' => 'Nilai MB harus berupa angka', + 'description.required' => 'Deskripsi wajib diisi', + 'description.string' => 'Deskripsi harus berupa teks', + 'description.max' => 'Deskripsi maksimal 40 karakter', ]; $validator = Validator::make($request->all(), [ 'indicator' => 'required|exists:indicators,id', - 'ideal_min' => 'required|numeric', - 'ideal_max' => 'required|numeric', - 'mb' => 'required|numeric', + 'parameter_type' => 'required|string|max:25', + 'description' => 'required|string|max:40', + 'cf' => 'required|numeric|min:-8|max:1', ], $customMessage); if ($validator->fails()) { @@ -47,11 +45,10 @@ public function store(Request $request) } $rule = new Rule(); - $rule->indicator_id = $request->indicator; - $rule->ideal_min = $request->ideal_min; - $rule->ideal_max = $request->ideal_max; - $rule->mb = $request->mb; + $rule->parameter_type = $request->parameter_type; + $rule->description = $request->description; + $rule->cf = $request->cf; try { $rule->save(); @@ -65,25 +62,25 @@ public function store(Request $request) public function update(Request $request, $id) { + // dd($request->all()); $customMessage = [ - 'indicator.required' => 'Harap pilih indikator', - 'indicator.exists' => 'Indikator tidak ditemukan', + 'parameter_type.required' => 'Jenis parameter wajib diisi', + 'parameter_type.string' => 'Jenis parameter harus berupa teks', + 'parameter_type.max' => 'Jenis parameter maksimal 25 karakter', - 'ideal_min.required' => 'Nilai minimum wajib diisi', - 'ideal_min.numeric' => 'Nilai minimum harus berupa angka', + 'description.required' => 'Deskripsi wajib diisi', + 'description.string' => 'Deskripsi harus berupa teks', + 'description.max' => 'Deskripsi maksimal 40 karakter', - 'ideal_max.required' => 'Nilai maksimum wajib diisi', - 'ideal_max.numeric' => 'Nilai maksimum harus berupa angka', - - 'mb.required' => 'Nilai MB wajib diisi', - 'mb.numeric' => 'Nilai MB harus berupa angka', + 'cf.required' => 'Nilai CF wajib diisi', + 'cf.numeric' => 'Nilai CF harus berupa angka', + 'cf.max' => 'Nilai CF maksimal 1', ]; $validator = Validator::make($request->all(), [ - 'indicator' => 'required|exists:indicators,id', - 'ideal_min' => 'required|numeric', - 'ideal_max' => 'required|numeric', - 'mb' => 'required|numeric', + 'parameter_type' => 'required|string|max:25', + 'description' => 'required|string|max:40', + 'cf' => 'required|numeric|max:1', ], $customMessage); if ($validator->fails()) { @@ -92,9 +89,9 @@ public function update(Request $request, $id) } $rule = Rule::find($id); - $rule->ideal_min = $request->ideal_min; - $rule->ideal_max = $request->ideal_max; - $rule->mb = $request->mb; + $rule->parameter_type = $request->parameter_type; + $rule->description = $request->description; + $rule->cf = $request->cf; try { $rule->save(); diff --git a/public/assets/js/pages/customJs/master-data/aturan/index.js b/public/assets/js/pages/customJs/master-data/aturan/index.js index 6201edb..0dd5bd5 100644 --- a/public/assets/js/pages/customJs/master-data/aturan/index.js +++ b/public/assets/js/pages/customJs/master-data/aturan/index.js @@ -1,57 +1,15 @@ -document.addEventListener("DOMContentLoaded", function () { - const inputs = document.querySelectorAll( - "#idealmin-field, #idealmax-field", - "#mb-field" - ); - - const inputEdit = document.querySelectorAll( - "#idealmin-edit-field, #idealmax-edit-field", - "#mb-edit-field" - ); - var indicatorField = document.getElementById("indicator-field"); - var indicatorVal = new Choices(indicatorField); - var indicatorEditField = document.getElementById("indicator-edit-field"); - var indicatorEditVal = new Choices(indicatorEditField); - - inputs.forEach((input) => { - input.addEventListener("input", function () { - this.value = this.value.replace(/[^0-9.]/g, ""); - this.value = this.value.replace(/^(\.)/, ""); - if ((this.value.match(/\./g) || []).length > 1) { - this.value = this.value.substring( - 0, - this.value.lastIndexOf(".") - ); - } - }); - }); - - inputEdit.forEach((input) => { - input.addEventListener("input", function () { - this.value = this.value.replace(/[^0-9.]/g, ""); - this.value = this.value.replace(/^(\.)/, ""); - if ((this.value.match(/\./g) || []).length > 1) { - this.value = this.value.substring( - 0, - this.value.lastIndexOf(".") - ); - } - }); - }); -}); +document.addEventListener("DOMContentLoaded", function () {}); function updateData(rule) { var form = document.getElementById("edit-form"); - // var indicatorName = form.querySelector('input[id="indicatorname-field"]'); - var idealMin = form.querySelector('input[id="idealmin-edit-field"]'); - var idealMax = form.querySelector('input[id="idealmax-edit-field"]'); - var mb = form.querySelector('input[id="mb-edit-field"]'); - - // indicatorName.value = rule.indicator.name; - idealMin.value = rule.ideal_max; - idealMax.value = rule.ideal_min; - mb.value = rule.mb; + var indicatorType = form.querySelector("#indicator-type-edit-field"); + var description = form.querySelector("#description-edit-field"); + var cf = form.querySelector("#cf-edit-field"); form.action = "/data-aturan/" + rule.id; + + indicatorType.value = rule.parameter_type; + description.value = rule.description; + cf.value = rule.cf; } function deleteData(id) { @@ -59,16 +17,53 @@ function deleteData(id) { form.action = "/data-aturan/" + id; } +function validateCfInput(input) { + input.value = input.value.replace(",", "."); + + input.value = input.value.replace(/[^0-9.\-]/g, ""); + + if (input.value.includes("-") && !input.value.startsWith("-")) { + input.value = input.value.replace("-", ""); + } + + input.value = input.value.replace(/-+/g, "-"); + + if (input.value === "-") { + return; + } + + if (input.value.startsWith(".")) { + input.value = "0" + input.value; + } + + if (input.value.startsWith("-.")) { + input.value = "-0."; + } + + // **PERBAIKAN**: Hilangkan nol berlebih di depan angka, kecuali nol sebelum titik + input.value = input.value.replace(/^(-?)0+(\d)/, "$1$2"); + + // **BATASI INPUT**: Hanya satu titik desimal, dan maksimal 1 angka setelah titik + let match = input.value.match(/^-?\d*(\.\d{0,1})?/); + if (match) { + input.value = match[0]; + } + + let numValue = parseFloat(input.value); + + // **Batasi nilai antara -1.0 dan 1.0** + if (!isNaN(numValue)) { + if (numValue > 1) { + input.value = "1.0"; + } else if (numValue < -1) { + input.value = "-1.0"; + } + } +} + var perPage = 10, options = { - valueNames: [ - "id", - "indicator_name", - "range_min", - "range_max", - "mb", - "status", - ], + valueNames: ["id", "parameter_type", "description", "status"], page: perPage, pagination: !0, plugins: [ListPagination({ left: 2, right: 2 })], diff --git a/resources/views/master-data/aturan/index.blade.php b/resources/views/master-data/aturan/index.blade.php index c827bef..adbf80e 100644 --- a/resources/views/master-data/aturan/index.blade.php +++ b/resources/views/master-data/aturan/index.blade.php @@ -22,7 +22,101 @@ -
+
+
+
+ +
+
+
+ + @foreach ($rules as $rule) +
+
+
+
+

Indikator {{ $rule->name }}

+
+ +
+
+
+
+
+ +
+
+
+ +
+ + + + + + + + + + + + @foreach ($rule->rules as $item) + + + + + + + + + @endforeach + +
NoJenis ParameterDeskirpsi + CF(e) + Action
{{ $loop->iteration }}{{ $item->parameter_type }}{{ $item->description }}{{ $item->cf }} +
+
+ +
+
+ +
+
+
+ + +
+
+
+
+
+
+ @endforeach + + {{--
@@ -34,14 +128,6 @@
-
- -
-
-
-
+
--}} {{-- add modal --}} @@ -180,29 +274,29 @@ class="fw-medium link-primary">#VZ2101
- - + +
- Masukan Nilai Ideal Min + Masukan Jenis Indikator
- - + +
Masukan Nilai Ideal Max
- - + +
- Masukan Meansure Belief + Masukan Nilai CF
@@ -242,42 +336,29 @@ class="fw-medium link-primary">#VZ2101
- - + +
- Pilih Indikator + Masukan jenis parameter
- - + +
- Masukan Nilai Ideal Min -
-
- -
- - -
- Masukan Nilai Ideal Max + Masukan Deskirpsi
- - + +
- Masukan Meansure Belief + Masukan CF(e)