fix(master-rule): create crud func expert rule

This commit is contained in:
arieeefajar 2025-06-14 22:08:28 +07:00
parent 023ce6fa19
commit e609b773c8
4 changed files with 146 additions and 23 deletions

View File

@ -7,13 +7,15 @@
use App\Models\RuleExpert; use App\Models\RuleExpert;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use PhpParser\Node\Stmt\TryCatch;
class RuleExpertController extends Controller class RuleExpertController extends Controller
{ {
public function index() public function index()
{ {
$indicators = Indicator::whereDoesntHave('expertRules')->orderBy('created_at', 'desc')->get(); $indicators = Indicator::with('expertRules')->orderBy('created_at', 'desc')->get();
return view('master-data.aturan.rule_expert', compact('indicators')); $parameters = Indicator::whereDoesntHave('expertRules')->get();
return view('master-data.aturan.rule_expert', compact('indicators', 'parameters'));
} }
public function store(Request $request) public function store(Request $request)
@ -62,4 +64,60 @@ public function store(Request $request)
return redirect()->back(); return redirect()->back();
} }
} }
public function update(Request $request, $id)
{
$customMessage = [
'parameter_type.required' => 'Jenis parameter wajib diisi',
'parameter_type.string' => 'Jenis parameter harus berupa teks',
'parameter_type.max' => 'Jenis parameter maksimal 25 karakter',
'description.required' => 'Deskripsi wajib diisi',
'description.string' => 'Deskripsi harus berupa teks',
'description.max' => 'Deskripsi maksimal 40 karakter',
'cf.required' => 'Nilai CF wajib diisi',
'cf.numeric' => 'Nilai CF harus berupa angka',
'cf.min' => 'Nilai CF minimal -1',
'cf.max' => 'Nilai CF maksimal 1',
];
$validator = Validator::make($request->all(), [
'parameter_type' => 'required|string|max:25',
'description' => 'required|string|max:40',
'cf' => 'required|numeric|min:-1|max:1',
], $customMessage);
if ($validator->fails()) {
toast($validator->messages()->all()[0], 'error')->position('top')->autoclose(3000);
return redirect()->back()->withInput();
}
try {
$expertRule = RuleExpert::find($id);
$expertRule->parameter_type = $request->parameter_type;
$expertRule->description = $request->description;
$expertRule->cf = $request->cf;
$expertRule->save();
toast('Data berhasil disimpan', 'success')->position('top-right')->autoclose(3000);
return redirect()->back();
} catch (\Throwable $th) {
//throw $th;
toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000);
return redirect()->back();
}
}
public function destroy($id)
{
$expertRule = RuleExpert::find($id);
try {
$expertRule->delete();
toast('Data berhasil dihapus', 'success')->position('top-right')->autoclose(3000);
return redirect()->back();
} catch (\Throwable $th) {
toast('Terjadi kesalahan', 'error')->position('top')->autoclose(3000);
return redirect()->back();
}
}
} }

View File

@ -1,22 +1,20 @@
function updateData(data) { function updateData(data) {
console.log(data); var form = document.getElementById("edit-form");
var indicator = form.querySelector("#indicator-edit-field");
var categoryEditField = form.querySelector("#category-edit-field");
var description = form.querySelector("#description-edit-field");
var cf = form.querySelector("#cf-edit-field");
// var form = document.getElementById("edit-form"); form.action = "/data-aturan-pakar/" + data.id;
// var categoryEditField = form.querySelector("#category-edit-field"); indicator.value = data.indicator_id;
// var description = form.querySelector("#description-edit-field"); categoryEditField.value = data.parameter_type;
// var cf = form.querySelector("#cf-edit-field"); description.value = data.description;
// form.action = "/data-aturan/" + rule.id; cf.value = data.cf;
// window.indicatorEditVal.setChoiceByValue(rule.indicator_id.toString());
// window.indicatorEditVal.passedElement.element.value =
// rule.indicator_id.toString();
// categoryEditField.value = rule.parameter_type;
// description.value = rule.description;
// cf.value = rule.cf;
} }
function deleteData(id) { function deleteData(id) {
var form = document.getElementById("delete-form"); var form = document.getElementById("delete-form");
form.action = "/data-aturan/" + id; form.action = "/data-aturan-pakar/" + id;
} }
function validateCfInput(input) { function validateCfInput(input) {
@ -53,12 +51,23 @@ function validateCfInput(input) {
let numValue = parseFloat(input.value); let numValue = parseFloat(input.value);
// **Batasi nilai antara -1.0 dan 1.0**
if (!isNaN(numValue)) { if (!isNaN(numValue)) {
if (numValue > 1) { let decimal = Math.abs(numValue * 10);
input.value = "1.0"; let lastDigit = decimal % 10;
} else if (numValue < -1) {
input.value = "-1.0"; if (lastDigit % 2 === 1) {
input.value = "";
alert("Nilai CF Tidak Sesuai");
return;
}
// **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";
}
} }
} }
} }

View File

@ -34,6 +34,61 @@ function deleteData(id) {
form.action = "/data-aturan-pengguna/" + id; form.action = "/data-aturan-pengguna/" + 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);
if (!isNaN(numValue)) {
let decimal = Math.abs(numValue * 10);
let lastDigit = decimal % 10;
if (lastDigit % 2 === 1) {
input.value = "";
alert("Nilai CF Tidak Sesuai");
return;
}
// **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, var perPage = 10,
options = { options = {
valueNames: ["id", "customer_name", "email", "date", "phone", "status"], valueNames: ["id", "customer_name", "email", "date", "phone", "status"],

View File

@ -146,8 +146,8 @@ class="fw-medium link-primary">#VZ2101</a></td>
<label for="indicatorname-field" class="form-label">Indikator</label> <label for="indicatorname-field" class="form-label">Indikator</label>
<select name="indicator" class="form-control" id="indicator-field" required> <select name="indicator" class="form-control" id="indicator-field" required>
<option value="" selected disabled>Pilih Indikator</option> <option value="" selected disabled>Pilih Indikator</option>
@foreach ($indicators as $indicator) @foreach ($parameters as $parameter)
<option value="{{ $indicator->id }}">{{ $indicator->name }}</option> <option value="{{ $parameter->id }}">{{ $parameter->name }}</option>
@endforeach @endforeach
</select> </select>
<div class="invalid-feedback"> <div class="invalid-feedback">
@ -216,7 +216,8 @@ class="fw-medium link-primary">#VZ2101</a></td>
<div class="mb-3"> <div class="mb-3">
<label for="indicator-edit-field" class="form-label">Indikator</label> <label for="indicator-edit-field" class="form-label">Indikator</label>
<select name="indicator" class="form-control" id="indicator-edit-field" required> <select name="indicator" class="form-control" id="indicator-edit-field" required
disabled>
<option value="" selected disabled>Pilih Indikator</option> <option value="" selected disabled>Pilih Indikator</option>
@foreach ($indicators as $indicator) @foreach ($indicators as $indicator)
<option value="{{ $indicator->id }}">{{ $indicator->name }}</option> <option value="{{ $indicator->id }}">{{ $indicator->name }}</option>