Filter periode member + harga otomatis + soft delete arsip + ganti alert ke Swal

This commit is contained in:
2026-10-14 12:53:15 +07:00
parent ff8fc51500
commit fae9184c1b
6 changed files with 244 additions and 6 deletions
@@ -53,6 +53,18 @@ public function getMember(Request $request)
$unitKerja = $request->input("departement");
$vehicle = $request->input("vehicle");
$isActive = $request->input("isActive");
$tglAwal = $request->input("tgl_awal");
$tglAkhir = $request->input("tgl_akhir");
if ($tglAwal && !preg_match('/^\d{4}-\d{2}-\d{2}$/', $tglAwal)) {
return response()->json(['message' => 'Format periode awal tidak valid (YYYY-MM-DD).'], 422);
}
if ($tglAkhir && !preg_match('/^\d{4}-\d{2}-\d{2}$/', $tglAkhir)) {
return response()->json(['message' => 'Format periode akhir tidak valid (YYYY-MM-DD).'], 422);
}
if ($tglAwal && $tglAkhir && $tglAkhir < $tglAwal) {
return response()->json(['message' => 'Periode akhir tidak boleh sebelum periode awal.'], 422);
}
if ($request->ajax()) {
$dataStiker = DB::table("transaksi_stiker as ts")
@@ -107,8 +119,31 @@ public function getMember(Request $request)
}
if ($request->input("isActive") == "1") {
// Langganan aktif: yang berlaku saat ini.
$dataStiker->whereRaw("NOW() BETWEEN ts.awal AND ts.akhir");
}
// Periode tanggal/terakhir-ubah: jalan bareng toggle aktif maupun mati.
if ($tglAwal || $tglAkhir) {
// Saring berdasarkan tanggal ATAU tgl_edited.
$dataStiker->where(function ($w) use ($tglAwal, $tglAkhir) {
$w->where(function ($x) use ($tglAwal, $tglAkhir) {
if ($tglAwal) {
$x->whereDate("ts.tanggal", ">=", $tglAwal);
}
if ($tglAkhir) {
$x->whereDate("ts.tanggal", "<=", $tglAkhir);
}
})->orWhere(function ($x) use ($tglAwal, $tglAkhir) {
if ($tglAwal) {
$x->whereDate("ts.tgl_edited", ">=", $tglAwal);
}
if ($tglAkhir) {
$x->whereDate("ts.tgl_edited", "<=", $tglAkhir);
}
});
});
}
// Log::info($dataStiker->toSql());
$dataStiker = $dataStiker->get();
@@ -422,8 +457,48 @@ public function update(Request $request, $id)
* @param int $id
* @return \Illuminate\Http\Response
*/
/**
* Soft delete: arsipkan ke transaksi_stiker_res, lalu hapus baris asli
* (header + detail kendaraan + kartu) dalam satu transaksi. Tanpa hard-delete
* tanpa jejak — data tersimpan di tabel _res.
*/
public function destroy($id)
{
//
return DB::transaction(function () use ($id) {
$trx = DB::table("transaksi_stiker")->where("notrans", $id)->first();
if (!$trx) {
return response()->json(["success" => false, "message" => "Data tidak ditemukan."], 404);
}
$detail = DB::table("detail_transaksi_stiker")->where("notrans", $id)->orderBy("nopol")->first();
DB::table("transaksi_stiker_res")->insert([
"notrans" => $trx->notrans,
"nama" => $trx->nama,
"alamat" => $trx->alamat,
"telepon" => $trx->telepon,
"jenis_transaksi" => $trx->jenis_transaksi,
"awal" => $trx->awal,
"harga" => $trx->harga,
"keterangan" => $trx->keterangan,
"tanggal" => $trx->tanggal,
"operator" => $trx->operator,
"akhir" => $trx->akhir,
"maks" => $trx->maks,
"no_id" => $trx->no_id,
"unit_kerja" => $trx->unit_kerja,
"no_induk" => $trx->no_induk,
"nopol" => $detail->nopol ?? null,
"jenis_mobil" => $detail->jenis_mobil ?? null,
"adm" => $detail->adm ?? null,
"svr_date" => now(),
]);
DB::table("detail_transaksi_stiker")->where("notrans", $id)->delete();
DB::table("card_member")->where("notrans", $trx->no_id)->delete();
DB::table("transaksi_stiker")->where("notrans", $id)->delete();
return response()->json(["success" => true, "message" => "Data diarsipkan ke transaksi_stiker_res."]);
});
}
}