Ubah/extend in-place data lama + search semua-field + statistik hari-minggu-bulan
This commit is contained in:
@@ -46,11 +46,15 @@ public function getMember(Request $request)
|
||||
// Log::info(json_encode("mem : " . $request->jenismember));
|
||||
// Log::info(json_encode("trans : " . $request->notrans));
|
||||
// Log::info(json_encode("isactive : " . gettype($request->isactive)));
|
||||
$searchBy = $request->input("search-by");
|
||||
$searchValue = trim($request->input("search_value", ""));
|
||||
// Nama param tidak konsisten antar JS (search-by vs searchBy, dst) -> terima dua-duanya.
|
||||
$val = fn($a, $b, $c = null) => $request->filled($a) ? $request->input($a)
|
||||
: ($request->filled($b) ? $request->input($b)
|
||||
: ($c && $request->filled($c) ? $request->input($c) : null));
|
||||
$searchBy = $val("search-by", "searchBy");
|
||||
$searchValue = trim($val("search_value", "searchValue") ?? "");
|
||||
|
||||
$memberType = $request->input("member_type");
|
||||
$unitKerja = $request->input("departement");
|
||||
$memberType = $val("member_type", "memberType", "jenismember");
|
||||
$unitKerja = $val("departement", "department", "depart");
|
||||
$vehicle = $request->input("vehicle");
|
||||
$isActive = $request->input("isActive");
|
||||
$tglAwal = $request->input("tgl_awal");
|
||||
@@ -89,21 +93,30 @@ public function getMember(Request $request)
|
||||
$dataStiker->where("ts.nama", "ILIKE", "%{$searchValue}%");
|
||||
break;
|
||||
case "alamat":
|
||||
$dataStiker->where("ts.alamat", "like", "%{$searchValue}%");
|
||||
$dataStiker->where("ts.alamat", "ILIKE", "%{$searchValue}%");
|
||||
break;
|
||||
case "nopol":
|
||||
$dataStiker->where("dts.nopol", "like", "%{$searchValue}%");
|
||||
$dataStiker->where("dts.nopol", "ILIKE", "%{$searchValue}%");
|
||||
break;
|
||||
case "nocard":
|
||||
$dataStiker->where("cm.nocard", "like", "%{$searchValue}%");
|
||||
$dataStiker->where("cm.no_card", "ILIKE", "%{$searchValue}%");
|
||||
break;
|
||||
case "notrans":
|
||||
$dataStiker->where("ts.notrans", "like", "%{$searchValue}%");
|
||||
$dataStiker->where("ts.notrans", "ILIKE", "%{$searchValue}%");
|
||||
break;
|
||||
// case "":
|
||||
// $dataStiker->where("ts.nama", "like", "%{$searchValue}%");
|
||||
// break;
|
||||
}
|
||||
} elseif (!$searchBy && $searchValue !== "") {
|
||||
// Dropdown "Semua" + ada kata kunci: cari ke semua field teks.
|
||||
$dataStiker->where(function ($w) use ($searchValue) {
|
||||
$w->where("ts.nama", "ILIKE", "%{$searchValue}%")
|
||||
->orWhere("ts.alamat", "ILIKE", "%{$searchValue}%")
|
||||
->orWhere("dts.nopol", "ILIKE", "%{$searchValue}%")
|
||||
->orWhere("cm.no_card", "ILIKE", "%{$searchValue}%")
|
||||
->orWhere("ts.notrans", "ILIKE", "%{$searchValue}%");
|
||||
});
|
||||
}
|
||||
|
||||
if ($memberType) {
|
||||
@@ -374,6 +387,7 @@ public function store(Request $request, MakeStikerServices $makeStiker)
|
||||
public function show($id)
|
||||
{
|
||||
Log::info("Data yang diterima : " . json_encode($id));
|
||||
// Exact match (dulu LIKE %..% bisa nyantol baris lain, fatal untuk notrans lama).
|
||||
$dataStiker = StikerTrans
|
||||
// with("stiker_details.vehicle", "memberCard")
|
||||
::select(
|
||||
@@ -394,9 +408,13 @@ public function show($id)
|
||||
)
|
||||
->leftJoin("jenis_langganan as jl", "jl.id", "=", "transaksi_stiker.jenis_langganan")
|
||||
->leftJoin("stasiunkerja as sk", "sk.kode", "=", "transaksi_stiker.unit_kerja")
|
||||
->where("notrans", "like", "%" . $id . "%")
|
||||
->where("notrans", $id)
|
||||
->first();
|
||||
|
||||
if (!$dataStiker) {
|
||||
return response()->json(["message" => "Data tidak ditemukan."], 404);
|
||||
}
|
||||
|
||||
$vehicleDetails = StikerTransDetail::query()
|
||||
->from("detail_transaksi_stiker as dts")
|
||||
->select("jm.nama as vehicle", "ts.tarif", "dts.*")
|
||||
@@ -446,9 +464,189 @@ public function edit($id)
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
/**
|
||||
* Update di tempat (nomor tidak berubah). Dipakai modal Ubah untuk
|
||||
* data lama maupun baru. Detail kendaraan & kartu diganti sesuai
|
||||
* list yang dikirim (roundtrip pakai kunci yang sama).
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
$trx = DB::table("transaksi_stiker")->where("notrans", $id)->first();
|
||||
if (!$trx) {
|
||||
return response()->json(["status" => false, "message" => "Data tidak ditemukan."], 404);
|
||||
}
|
||||
|
||||
$data = $request->validate([
|
||||
"nama" => "sometimes|string|max:255",
|
||||
"address" => "nullable|string",
|
||||
"phone" => "nullable|string|max:64",
|
||||
"member" => "nullable|string",
|
||||
"depart" => "nullable|string",
|
||||
"note" => "nullable|string",
|
||||
"harga" => "nullable|numeric",
|
||||
"periode" => "nullable|string",
|
||||
"daterange" => "nullable|string",
|
||||
"awal" => "nullable|string",
|
||||
"akhir" => "nullable|string",
|
||||
"nopolData" => "nullable|array",
|
||||
"cardNumber" => "nullable|array",
|
||||
]);
|
||||
|
||||
return DB::transaction(function () use ($trx, $data, $id) {
|
||||
$upd = [];
|
||||
if (array_key_exists("nama", $data)) {
|
||||
$upd["nama"] = $data["nama"];
|
||||
}
|
||||
if (array_key_exists("address", $data)) {
|
||||
$upd["alamat"] = $data["address"] ?? "";
|
||||
}
|
||||
if (array_key_exists("phone", $data)) {
|
||||
$upd["telepon"] = $data["phone"] ?? "";
|
||||
}
|
||||
if (array_key_exists("member", $data)) {
|
||||
$upd["jenis_langganan"] = $data["member"];
|
||||
}
|
||||
if (array_key_exists("depart", $data)) {
|
||||
$upd["unit_kerja"] = $data["depart"];
|
||||
}
|
||||
if (array_key_exists("note", $data)) {
|
||||
$upd["keterangan"] = $data["note"] ?? "";
|
||||
}
|
||||
if (array_key_exists("harga", $data)) {
|
||||
$upd["harga"] = $data["harga"] ?? 0;
|
||||
}
|
||||
|
||||
$periode = $data["periode"] ?? $data["daterange"] ?? null;
|
||||
if ($periode && str_contains($periode, " - ")) {
|
||||
[$p0, $p1] = explode(" - ", $periode, 2);
|
||||
$upd["awal"] = Carbon::createFromFormat("d-m-Y H:i", trim($p0));
|
||||
$upd["akhir"] = Carbon::createFromFormat("d-m-Y H:i", trim($p1));
|
||||
} else {
|
||||
if (!empty($data["awal"])) {
|
||||
$upd["awal"] = $data["awal"];
|
||||
}
|
||||
if (!empty($data["akhir"])) {
|
||||
$upd["akhir"] = $data["akhir"];
|
||||
}
|
||||
}
|
||||
$upd["tgl_edited"] = now();
|
||||
|
||||
if (!empty($upd)) {
|
||||
DB::table("transaksi_stiker")->where("notrans", $id)->update($upd);
|
||||
}
|
||||
|
||||
// Ganti detail kendaraan (kunci notrans yang sama, nomor dipertahankan).
|
||||
if (array_key_exists("nopolData", $data)) {
|
||||
DB::table("detail_transaksi_stiker")->where("notrans", $id)->delete();
|
||||
foreach ($data["nopolData"] ?? [] as $nopol) {
|
||||
if (empty($nopol["nopol"])) {
|
||||
continue;
|
||||
}
|
||||
$produk = explode(" - ", $nopol["member"] ?? "");
|
||||
DB::table("detail_transaksi_stiker")->insert([
|
||||
"notrans" => $id,
|
||||
"nopol" => $nopol["nopol"],
|
||||
"jenis_mobil" => $nopol["vehicle"] ?? null,
|
||||
"jenis_member" => $produk[0] ?? null,
|
||||
"merk" => $nopol["merk"] ?? null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// Ganti kartu (kunci no_id yang sama). Lewati bila no_id kosong (data lama tertentu).
|
||||
if (array_key_exists("cardNumber", $data) && !empty($trx->no_id)) {
|
||||
DB::table("card_member")->where("notrans", $trx->no_id)->delete();
|
||||
foreach ($data["cardNumber"] ?? [] as $card) {
|
||||
if (empty($card["nocard"])) {
|
||||
continue;
|
||||
}
|
||||
DB::table("card_member")->insert([
|
||||
"notrans" => $trx->no_id,
|
||||
"no_card" => $card["nocard"],
|
||||
"no_urut" => $card["nourut"] ?? null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json(["status" => true, "message" => "Data berhasil diperbarui, nomor tetap " . $id . "."]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Perpanjang notrans LAMA di tempat (nomor dipertahankan).
|
||||
* Header periode (+ field lain bila dikirim) diupdate; kendaraan
|
||||
* BARU (flag _baru) ditempel ke notrans yang sama; kartu tidak diutak-atik.
|
||||
*/
|
||||
public function extendOld(Request $request)
|
||||
{
|
||||
$notrans = $request->input("notrans");
|
||||
$trx = DB::table("transaksi_stiker")->where("notrans", $notrans)->first();
|
||||
if (!$trx) {
|
||||
return response()->json(["status" => false, "message" => "Data tidak ditemukan."], 404);
|
||||
}
|
||||
|
||||
$data = $request->validate([
|
||||
"notrans" => "required|string",
|
||||
"nama" => "sometimes|string|max:255",
|
||||
"address" => "nullable|string",
|
||||
"phone" => "nullable|string|max:64",
|
||||
"member" => "nullable|string",
|
||||
"depart" => "nullable|string",
|
||||
"note" => "nullable|string",
|
||||
"harga" => "nullable|numeric",
|
||||
"periode" => "nullable|string",
|
||||
"daterange" => "nullable|string",
|
||||
"awal" => "nullable|string",
|
||||
"akhir" => "nullable|string",
|
||||
"nopolData" => "nullable|array",
|
||||
]);
|
||||
|
||||
return DB::transaction(function () use ($trx, $data, $notrans) {
|
||||
$upd = ["jenis_transaksi" => "1", "tgl_edited" => now()];
|
||||
foreach (["nama" => "nama", "address" => "alamat", "phone" => "telepon",
|
||||
"member" => "jenis_langganan", "depart" => "unit_kerja",
|
||||
"note" => "keterangan", "harga" => "harga"] as $in => $col) {
|
||||
if (array_key_exists($in, $data)) {
|
||||
$upd[$col] = $data[$in] ?? "";
|
||||
}
|
||||
}
|
||||
|
||||
$periode = $data["periode"] ?? $data["daterange"] ?? null;
|
||||
if ($periode && str_contains($periode, " - ")) {
|
||||
[$p0, $p1] = explode(" - ", $periode, 2);
|
||||
$upd["awal"] = Carbon::createFromFormat("d-m-Y H:i", trim($p0));
|
||||
$upd["akhir"] = Carbon::createFromFormat("d-m-Y H:i", trim($p1));
|
||||
} else {
|
||||
if (!empty($data["awal"])) {
|
||||
$upd["awal"] = $data["awal"];
|
||||
}
|
||||
if (!empty($data["akhir"])) {
|
||||
$upd["akhir"] = $data["akhir"];
|
||||
}
|
||||
}
|
||||
|
||||
DB::table("transaksi_stiker")->where("notrans", $notrans)->update($upd);
|
||||
|
||||
// Tempel kendaraan BARU saja (baris display lama dilewati via flag _baru).
|
||||
$tambah = 0;
|
||||
foreach ($data["nopolData"] ?? [] as $nopol) {
|
||||
if (empty($nopol["_baru"]) || empty($nopol["nopol"])) {
|
||||
continue;
|
||||
}
|
||||
$produk = explode(" - ", $nopol["member"] ?? "");
|
||||
DB::table("detail_transaksi_stiker")->insert([
|
||||
"notrans" => $notrans,
|
||||
"nopol" => $nopol["nopol"],
|
||||
"jenis_mobil" => $nopol["vehicle"] ?? null,
|
||||
"jenis_member" => $produk[0] ?? null,
|
||||
"merk" => $nopol["merk"] ?? null,
|
||||
]);
|
||||
$tambah++;
|
||||
}
|
||||
|
||||
return response()->json(["status" => true,
|
||||
"message" => "Perpanjangan tersimpan, nomor tetap " . $notrans . " ({$tambah} kendaraan baru)."]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user