diff --git a/app/Http/Controllers/Parking/MemberStikerController.php b/app/Http/Controllers/Parking/MemberStikerController.php
index cc9d45d..ef65af1 100644
--- a/app/Http/Controllers/Parking/MemberStikerController.php
+++ b/app/Http/Controllers/Parking/MemberStikerController.php
@@ -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)."]);
+ });
}
/**
diff --git a/app/Http/Controllers/Parking/Report/ReportTransaksiController.php b/app/Http/Controllers/Parking/Report/ReportTransaksiController.php
new file mode 100644
index 0000000..52f64a8
--- /dev/null
+++ b/app/Http/Controllers/Parking/Report/ReportTransaksiController.php
@@ -0,0 +1,1096 @@
+parking = $parking;
+ }
+
+ public function byGate()
+ {
+ return view("report.by-gate");
+ }
+
+ public function statistik()
+ {
+ return view("report.statistik");
+ }
+
+ /**
+ * Statistik transaksi parkir dipecah per hari / minggu / bulan.
+ * Periode berdasarkan kolom tanggal. Response: rows per periode + ringkasan.
+ */
+ public function statistikData(Request $request)
+ {
+ $request->validate([
+ "grup" => "nullable|in:hari,minggu,bulan",
+ "tgl_awal" => "nullable|date_format:Y-m-d",
+ "tgl_akhir" => "nullable|date_format:Y-m-d|after_or_equal:tgl_awal",
+ "status_transaksi" => "nullable|in:0,3,32,-1",
+ "cara" => "nullable|in:tunai,cashless",
+ ]);
+
+ $grup = $request->input("grup", "hari");
+ $tglAkhir = $request->input("tgl_akhir", date("Y-m-d"));
+ $tglAwal = $request->input("tgl_awal", date("Y-m-d", strtotime("-29 days", strtotime($tglAkhir))));
+
+ // Batas maksimal 370 hari biar query tetap enteng.
+ if ((strtotime($tglAkhir) - strtotime($tglAwal)) / 86400 > 370) {
+ return response()->json(["message" => "Rentang maksimal 370 hari, persempit periodenya."], 422);
+ }
+
+ $bucket = match ($grup) {
+ "minggu" => "date_trunc('week', tp.tanggal)::date",
+ "bulan" => "date_trunc('month', tp.tanggal)::date",
+ default => "tp.tanggal::date",
+ };
+
+ $query = DB::table("transaksi_parkir as tp")
+ ->whereDate("tp.tanggal", ">=", $tglAwal)
+ ->whereDate("tp.tanggal", "<=", $tglAkhir);
+
+ if ($request->filled("status_transaksi")) {
+ $query->where("tp.status_transaksi", $request->input("status_transaksi"));
+ }
+ if ($request->input("cara") === "tunai") {
+ $query->where(function ($w) {
+ $w->whereNull("tp.cara_bayar")->orWhere("tp.cara_bayar", 0);
+ });
+ } elseif ($request->input("cara") === "cashless") {
+ $query->where("tp.cara_bayar", 3);
+ }
+
+ $rows = $query
+ ->selectRaw("({$bucket}) as periode")
+ ->selectRaw("count(*) as transaksi")
+ ->selectRaw("count(case when tp.status = 0 then 1 end) as keluar")
+ ->selectRaw("coalesce(sum(case when tp.status = 0 then tp.bayar_keluar end), 0) as pendapatan")
+ ->selectRaw("coalesce(sum(case when tp.status = 0 and (tp.cara_bayar is null or tp.cara_bayar = 0) then tp.bayar_keluar end), 0) as tunai")
+ ->selectRaw("coalesce(sum(case when tp.status = 0 and tp.cara_bayar = 3 then tp.bayar_keluar end), 0) as cashless")
+ ->groupByRaw($bucket)
+ ->orderBy("periode")
+ ->get();
+
+ return response()->json([
+ "status" => true,
+ "grup" => $grup,
+ "tgl_awal" => $tglAwal,
+ "tgl_akhir" => $tglAkhir,
+ "data" => $rows,
+ "ringkasan" => [
+ "transaksi" => $rows->sum("transaksi"),
+ "keluar" => $rows->sum("keluar"),
+ "pendapatan" => (float) $rows->sum("pendapatan"),
+ "tunai" => (float) $rows->sum("tunai"),
+ "cashless" => (float) $rows->sum("cashless"),
+ ],
+ ]);
+ }
+
+ // private function transaksiParkir($isMirror)
+ // {
+ // $mirror = DB::table('parkir_transaksi')
+ // $query = DB::table('transaksi_parkir');
+
+ // return $table;
+ // }
+
+ public function gateData(Request $request)
+ {
+ Log::info($request->all());
+
+ $awal = $request->tanggal_mulai;
+ $akhir = $request->tanggal_selesai;
+ $isShift = $request->shift === "on";
+ $dateBy = $isShift ? "pklogin" : "waktu_keluar";
+ $paymentMethod = $request->payment_method === "null" ? null : $request->payment_method;
+
+ // ๐น Base select
+ $select = [
+ "np.nama as gate",
+ "tp.id_pintu_keluar",
+ "p.nama as petugas",
+ "tp.id_op_keluar",
+ "jm.nama as kendaraan",
+ "tp.status_transaksi",
+ DB::raw("count(*) as jumlah_transaksi"),
+ DB::raw("sum(tp.bayar_keluar) as income_transaksi"),
+ ];
+
+ // ๐น Tambah shift kalau aktif
+ if ($isShift) {
+ $select[] = "tp.id_shift_keluar";
+ }
+
+ // ๐น Base group
+ $groupBy = ["tp.id_pintu_keluar", "np.nama", "p.nama", "tp.id_op_keluar", "jm.nama", "tp.status_transaksi"];
+
+ if ($isShift) {
+ $groupBy[] = "tp.id_shift_keluar";
+ }
+
+ // $query = DB::table("transaksi_parkir as tp")
+ $query = $this->parking
+ ->useTableParkir(Auth::user())
+ ->leftJoin("pegawai as p", "p.nomer", "=", "tp.id_op_keluar")
+ ->leftJoin("nama_pos as np", "np.id", "=", "tp.id_pintu_keluar")
+ ->leftJoin("jenis_mobil as jm", "jm.id", "=", "tp.id_kendaraan")
+ ->select($select)
+
+ // ๐น Filter tanggal (dynamic field)
+ ->where("tp.status", 0)
+
+ ->whereBetween($dateBy, [$awal . " 00:00:00", $akhir . " 23:59:59"])
+
+ // // ๐น STATUS
+ // ->when($request->status_transaksi, fn($q, $v) =>
+ // $q->where('tp.status_transaksi', $v)
+ // )
+
+ // ๐น PINTU
+ ->when($request->id_pintu_keluar, fn($q, $v) => $q->whereIn("tp.id_pintu_keluar", (array) $v))
+
+ // ๐น Status Transaksi
+ // ->when($request->status_transaksi, function ($q) use ($request) {
+ ->when(isset($request->status_transaksi), function ($q) use ($request) {
+ return match ($request->status_transaksi) {
+ // '0' => $q->whereNotIn('tp.status_transaksi', ['3','-1'])->whereNotNull('alasan'),
+ "0" => $q->where("tp.status_transaksi", "0")->whereNull("alasan"),
+ "3" => $q->where("tp.status_transaksi", "3")->whereNull("alasan"),
+ "-1" => $q->where("tp.status_transaksi", "-1")->whereNotNull("alasan"),
+ "null" => $q->whereNull("alasan"),
+ };
+ })
+
+ // ๐น CARA BAYAR
+ ->when($request->cara_bayar, function ($q) use ($request) {
+ return match ($request->cara_bayar) {
+ "cash" => $q->where("tp.cara_bayar", "!=", 3),
+ "cashless" => $q->where("tp.cara_bayar", 3),
+ default => $q,
+ };
+ })
+
+ ->when($paymentMethod, function ($q) use ($paymentMethod) {
+ return $q->where("tp.rep_bank", $paymentMethod);
+
+ // return match ($request->payment_method) {
+ // 2 => $q->where('tp.rep_bank', 2),
+ // 3 => $q->where('tp.rep_bank', 3),
+ // 4 => $q->where('tp.rep_bank', 4),
+ // 5 => $q->where('tp.rep_bank', 5),
+ // 9 => $q->where('tp.rep_bank', 9),
+ // default => $q
+ // };
+ })
+
+ // // ๐น PETUGAS
+ // ->when($request->id_op_keluar, fn($q, $v) =>
+ // $q->whereIn('tp.id_op_keluar', (array) $v)
+ // )
+
+ // // ๐น KENDARAAN
+ // ->when($request->id_kendaraan, fn($q, $v) =>
+ // $q->whereIn('tp.id_kendaraan', (array) $v)
+ // )
+
+ ->groupBy($groupBy)
+
+ ->orderBy("tp.id_pintu_keluar")
+ ->when($isShift, fn($q) => $q->orderBy("tp.id_shift_keluar"))
+ ->orderBy("tp.id_op_keluar")
+ ->orderBy("jm.nama")
+ ->orderBy("tp.status_transaksi");
+
+ return response()->json([
+ "byGateData" => $query->get(),
+ ]);
+ }
+
+ public function allReport()
+ {
+ return view("report.all-report");
+ }
+
+ public function allReportData(Request $request)
+ {
+ return response()->json([
+ "vehicle" => $this->vehicleReport($request),
+ "officer" => $this->reportOfficer($request),
+ "payment" => $this->paymentType($request),
+ ]);
+ }
+
+ public function vehicleReport(Request $request)
+ {
+ Log::info("== allReportData START ==");
+ Log::info($request->harian);
+ Log::info($request->tanggal);
+ $GlobalParams = SoftSettings::first()->select("namaokasi", "namaperusahaan");
+ $selectDate = $request->tanggal;
+ $start = microtime(true);
+ $harian = $request->harian ?? 1;
+ $dateNow = "2026-01-25";
+ $startDate = $selectDate ? $selectDate : $dateNow;
+ $endDate = $selectDate ? $selectDate : $dateNow;
+
+ Log::info("Tanggal laporan", [
+ "start" => $startDate,
+ "end" => $endDate,
+ ]);
+
+ // =========================
+ // QUERY UTAMA (LEFT JOIN)
+ // =========================
+ Log::info("Query transaksi dimulai");
+ if ($harian == 1) {
+ $isReport = "harian";
+ $dateColumn = ["tp.waktu_masuk", "tp.waktu_keluar"];
+ $dateInColumn = "tp.waktu_masuk";
+ $dateOutColumn = "tp.waktu_keluar";
+ $dateField = "waktu_keluar";
+ $dateInField = "waktu_masuk";
+ $dateOutField = "waktu_keluar";
+ } else {
+ $isReport = "shift";
+ $dateColumn = ["tp.pmlogin", "tp.pklogin"];
+ $dateInColumn = "tp.pmlogin";
+ $dateOutColumn = "tp.pklogin";
+ $dateInField = "pmlogin";
+ $dateOutField = "pklogin";
+ }
+ $transactions = $this->parking
+ ->useTableParkir(Auth::user())
+ ->leftJoin("jenis_mobil as jm", "jm.id", "=", "tp.id_kendaraan")
+ ->where(function ($q) use ($dateColumn, $dateInField, $dateOutField, $startDate, $endDate, $selectDate) {
+ $q->whereBetween("tp." . $dateInField, [
+ $startDate . " 00:00:00",
+ $endDate . " 23:59:59",
+ ])->orWhereBetween("tp." . $dateOutField, [$startDate . " 00:00:00", $endDate . " 23:59:59"]);
+ })
+ ->select(
+ "jm.nama as jenis_mobil",
+ "tp.id_kendaraan",
+ "tp.waktu_masuk",
+ "tp.waktu_keluar",
+ "tp.pmlogin",
+ "tp.pklogin",
+ "tp.status",
+ "tp.bayar_masuk",
+ "tp.bayar_keluar",
+ "id_op_masuk as kasirMasuk",
+ "id_op_keluar as kasirKeluar",
+ "tp.status_transaksi",
+ "tp.cara_bayar",
+ "tp.manual",
+ )
+
+ ->get();
+ Log::info("Query transaksi selesai", [
+ "rows" => $transactions->count(),
+ "query_time_ms" => round((microtime(true) - $start) * 1000, 2),
+ ]);
+
+ // ================================================
+ // ############# REKAP PER KENDARAAN ############
+ // ================================================
+ Log::info("Rekap kendaraan dimulai");
+ $tunai = $transactions
+ ->sortBy("id_kendaraan")
+ ->groupBy("id_kendaraan")
+ ->map(function ($items, $id_kendaraan) use ($dateInField, $dateOutField, $startDate, $endDate) {
+ $start = $startDate . " 00:00:00";
+ $end = $endDate . " 23:59:59";
+ // =================================
+ // 1. Parsing in & Out Transaction
+ // =================================
+ $masuk = $items->filter(function ($r) use ($startDate, $endDate, $dateInField) {
+ return $r->$dateInField >= $startDate . " 00:00:00" && $r->$dateInField <= $endDate . " 23:59:59";
+ });
+ Log::info("Jumlah didapat " . $id_kendaraan . " : " . $masuk->count());
+
+ // $masukTrans = $masuk->filter(fn($r) => (int) $r->status === 1);
+
+ $masukCasual = $masuk->filter(
+ fn($r) => $r->status === 1 && data_get($r, "kasirMasuk") == null && data_get($r, "manual") === null,
+ );
+ // Log::info("Berdasarkan tanggal transaksi " . $start . " " . $end . " : " . json_encode($masukTrans));
+ $masukLost = $masuk->filter(fn($r) => (string) data_get($r, "status_transaksi") === "32");
+ $masukMember = $masukCasual->filter(fn($r) => (string) data_get($r, "status_transaksi") === "3");
+ $masukManual = $masuk->filter(fn($r) => (string) data_get($r, "kasirMasuk") === null);
+ $masukMix = $masuk->filter(fn($r) => (int) data_get($r, "manual"), 1);
+ $masukMasalah = $masuk->filter(fn($r) => (string) data_get($r, "alasan") !== null);
+
+ // ======================
+ // KELUAR
+ // ======================
+ $keluar = $items->filter(fn($r) => (int) $r->status === 0); // ini rada ngaco
+
+ $tunai = $keluar->filter(fn($row) => in_array(data_get($row, "cara_bayar"), [null, 0, "0"], true));
+
+ $keluarCasual = $tunai->filter(
+ fn($r) => (string) data_get($r, "status_transaksi") === "0" && data_get($r, "id_op_masuk") !== null,
+ );
+ $keluarMember = $tunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "3");
+ $keluarLost = $tunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "32");
+ $keluarManual = $tunai->filter(fn($r) => data_get($r, "kasirKeluar") === null);
+ $keluarMix = $tunai->filter(fn($r) => data_get($r, "manual") === 1);
+ $keluarMasalah = $tunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "-1");
+
+ $totalCash =
+ $keluarCasual->sum("bayar_keluar") +
+ $keluarLost->sum("bayar_keluar") +
+ $keluarMember->sum("bayar_keluar") +
+ $keluarManual->sum("bayar_keluar");
+
+ return [
+ "id_kendaraan" => $id_kendaraan,
+ "jenis_mobil" => $items->first()->jenis_mobil,
+ // "total" => "",
+ // "tunaiOut" => $tunai->count(),
+ // ========= MASUK =========
+ "masuk" => [
+ "jmlTrans" => [
+ "jumlah" => $masukCasual->count(),
+ "income" => $masukCasual->sum("bayar_masuk"),
+ ],
+ "casual" => [
+ "jumlah" => $masuk->count(),
+ "income" => $masukCasual->sum("bayar_masuk"),
+ ],
+ "lostTicket" => [
+ "jumlah" => $masukLost->count(),
+ "income" => $masukLost->sum("bayar_masuk"),
+ ],
+ "member" => [
+ "jumlah" => $masukMember->count(),
+ "income" => $masukMember->sum("bayar_masuk"),
+ ],
+ "manual" => [
+ "jumlah" => $masukManual->count(),
+ "income" => $masukManual->sum("bayar_masuk"),
+ ],
+ "mix" => [
+ "jumlah" => $masukMix->count(),
+ "income" => $masukMix->sum("bayar_masuk"),
+ ],
+ "masalah" => [
+ "jumlah" => $masukMasalah->count(),
+ "income" => $masukMasalah->sum("bayar_masuk"),
+ ],
+ ],
+
+ // ========= KELUAR =========
+ "keluar" => [
+ "casual" => [
+ "jumlah" => $keluarCasual->count(),
+ "income" => $keluarCasual->sum("bayar_keluar"),
+ ],
+ "lost" => [
+ "jumlah" => $keluarLost->count(),
+ "income" => $keluarLost->sum("bayar_keluar"),
+ ],
+ "member" => [
+ "jumlah" => $keluarMember->count(),
+ "income" => $keluarMember->sum("bayar_keluar"),
+ ],
+ "manual" => [
+ "jumlah" => $keluarManual->count(),
+ "income" => $keluarManual->sum("bayar_keluar"),
+ ],
+ "masalah" => [
+ "jumlah" => $keluarMasalah->count(),
+ "income" => $keluarMasalah->sum("bayar_keluar"),
+ ],
+ ],
+ "totalCash" => $totalCash,
+ ];
+ })
+ ->values();
+
+ $cashless = $transactions
+ ->sortBy("id_kendaraan")
+ ->groupBy("id_kendaraan")
+ ->map(function ($items, $id_kendaraan) use ($startDate, $endDate, $dateOutField) {
+ // ======================
+ // PISAH MASUK & KELUAR
+ // ======================
+ // $masuk = $items->where("status", 1);
+ $masuk = $items->filter(fn($row) => in_array(data_get($row, "cara_bayar"), [null, 0, "0"], true));
+ // $keluar = $items->where('status', 0);
+ // $nonTunai = $keluar->where('cara_bayar', 3);
+
+ // ======================
+ // MASUK
+ // ======================
+ $masukCasual = $masuk;
+ $masukMember = $masuk->where("status_transaksi", "3");
+
+ // ======================
+ // KELUAR
+ // ======================
+ // $keluarCasual = $nonTunai->where('status_transaksi', '0');
+ // $keluarMember = $nonTunai->where('status_transaksi', '3');
+ // $keluarLost = $nonTunai->where('status_transaksi', '32');
+ // $keluar = $items->filter(fn($r) => (int) $r->status === 0);
+ // $tunai = $keluar->where('cara_bayar', '!=', 3);
+ $keluar = $items->filter(function ($r) use ($startDate, $endDate, $dateOutField) {
+ return (int) $r->status === 0 &&
+ $r->$dateOutField >= $startDate . " 00:00:00" &&
+ $r->$dateOutField <= $endDate . " 23:59:59";
+ });
+ $nonTunai = $keluar->filter(fn($row) => (string) data_get($row, "cara_bayar") === "3");
+ $keluarCasual = $nonTunai->filter(
+ fn($r) => (string) data_get($r, "status_transaksi") === "0" && data_get($r, "id_op_masuk") !== null,
+ );
+ $keluarMember = $nonTunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "3");
+ $keluarLost = $nonTunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "32");
+ $keluarManual = $nonTunai->filter(fn($r) => data_get($r, "id_op_masuk") === null);
+
+ $totalCashless =
+ $keluarCasual->sum("bayar_keluar") +
+ $keluarLost->sum("bayar_keluar") +
+ $keluarMember->sum("bayar_keluar") +
+ $keluarManual->sum("bayar_keluar");
+
+ // ======================
+ // PEMBAYARAN (KELUAR)
+ // ======================
+
+ return [
+ "id_kendaraan" => $id_kendaraan,
+ "jenis_mobil" => $items->first()->jenis_mobil,
+ "total" => $items->count(),
+ "nonTunaiOut" => $nonTunai->count(),
+
+ // ========= MASUK =========
+ "masuk" => [
+ "casual" => [
+ "jumlah" => $masuk->count(),
+ "income" => $masukCasual->sum("bayar_masuk"),
+ ],
+ "member" => [
+ "jumlah" => $masukMember->count(),
+ "income" => $masukMember->sum("bayar_masuk"),
+ ],
+ ],
+
+ // ========= KELUAR =========
+ "keluar" => [
+ "casual" => [
+ "jumlah" => $keluarCasual->count(),
+ "income" => $keluarCasual->sum("bayar_keluar"),
+ ],
+ "lost" => [
+ "jumlah" => $keluarLost->count(),
+ "income" => $keluarLost->sum("bayar_keluar"),
+ ],
+ "member" => [
+ "jumlah" => $keluarMember->count(),
+ "income" => $keluarMember->sum("bayar_keluar"),
+ ],
+ "manual" => [
+ "jumlah" => $keluarManual->count(),
+ "income" => $keluarManual->sum("bayar_keluar"),
+ ],
+ ],
+ "totalCashless" => $totalCashless,
+ ];
+ })
+ ->values();
+
+ // $transactions = DB::table("transaksi_parkir as tp")
+ $transactions = $this->parking
+ ->useTableParkir(Auth::user())
+ ->leftJoin("jenis_mobil as jm", "jm.id", "=", "tp.id_kendaraan")
+ ->leftJoin("pegawai as pm", "pm.nomer", "=", "tp.id_op_masuk")
+ ->leftJoin("pegawai as pk", "pk.nomer", "=", "tp.id_op_keluar")
+ ->whereDate("waktu_masuk", "<", $dateNow)
+ ->select(
+ "tp.id_kendaraan",
+ "jm.nama as jenis_mobil",
+ DB::raw("SUM(CASE WHEN tp.status = 1 THEN 1 ELSE 0 END) as overnight"),
+ DB::raw("SUM(CASE WHEN tp.status = 3 THEN 1 ELSE 0 END) as onexpired"),
+ )
+ ->groupBy("tp.id_kendaraan", "jm.nama")
+ ->orderBy("tp.id_kendaraan")
+ // dd($transactions->toSql());
+ ->get();
+
+ $onCheck = $transactions
+ // ->sortBy('id_kendaraan')
+ // ->groupBy('id_kendaraan')
+ ->map(function ($items) {
+ // $overNight = $items->filter(fn ($r) => (int) $r->status === 1);
+ // $onExpired = $items->filter(fn ($r) => (int) $r->status === 3);
+
+ return [
+ "id_kendaraan" => $items->id_kendaraan,
+ "jenis_mobil" => $items->jenis_mobil,
+ "overNight" => (int) $items->overnight,
+ "onExpired" => (int) $items->onexpired,
+ ];
+ })
+ ->values();
+
+ Log::info("Rekap kendaraan selesai", [
+ "total_kendaraan" => $tunai->count(),
+ ]);
+
+ Log::info("== allReportData END ==", [
+ "total_time_ms" => round((microtime(true) - $start) * 1000, 2),
+ ]);
+
+ return [
+ // 'date' => $startDate->format('Y-m-d'),รท
+ "location" => $GlobalParams,
+ "date" => $startDate,
+ "reportTime" => $isReport,
+ "tunai" => $tunai,
+ "nontunai" => $cashless,
+ "overNight" => $onCheck,
+ // 'transactions' => $transactions->groupBy('id_kendaraan')
+ ];
+ }
+
+ // ==========###################### Begin Laporan per petugas #######################===============//
+ public function reportOfficer(Request $request)
+ {
+ Log::info("== Officer Report START ==");
+ Log::info($request->harian);
+ Log::info($request->tanggal);
+ $selectDate = $request->tanggal;
+ $start = microtime(true);
+ $harian = $request->harian ?? 1;
+ // $selectDate = Carbon::createFromFormat("", $tanggalRequest)->format("Y-m-d");
+ // $dateNow = Carbon::now()->format('Y-m-d');
+ $dateNow = "2026-01-25";
+ // $startDate = Carbon::today()->startOfDay();
+ // $endDate = Carbon::today()->endOfDay();
+ // $startDate = $selectDate . ' 00:00:00';
+ // $endDate = $selectDate . ' 23:59:59';
+ $startDate = $selectDate ? $selectDate : $dateNow;
+ $endDate = $selectDate ? $selectDate : $dateNow;
+
+ Log::info("Tanggal laporan", [
+ "start" => $startDate,
+ "end" => $endDate,
+ ]);
+
+ // =========================
+ // QUERY UTAMA (LEFT JOIN)
+ // =========================
+ Log::info("Query transaksi dimulai");
+
+ // $dateColumn = $harian == 1
+ // ? 'tp.waktu_keluar'
+ // : 'tp.pklogin';
+ if ($harian == 1) {
+ $dateColumn = ["tp.waktu_masuk", "tp.waktu_keluar"];
+ $dateColumn = ["tp.waktu_keluar"];
+ } else {
+ $dateColumn = ["tp.pmlogin", "tp.pklogin"];
+ $dateColumn = ["tp.pklogin"];
+ }
+
+ // $transactions = DB::table("transaksi_parkir as tp")
+ $transactions = $this->parking
+ ->useTableParkir(Auth::user())
+ ->leftJoin("pegawai as p", "p.nomer", "=", "tp.id_op_keluar")
+ // ->leftJoin("pegawai as pm", "pm.nomer", "=", "tp.id_op_masuk")
+ // ->leftJoin("pegawai as pk", "pk.nomer", "=", "tp.id_op_keluar")
+ ->where(function ($q) use ($dateColumn, $startDate, $endDate, $selectDate) {
+ $q->whereBetween($dateColumn[0], [$startDate . " 00:00:00", $endDate . " 23:59:59"])->orWhereBetween(
+ $dateColumn[0],
+ [$startDate . " 00:00:00", $endDate . " 23:59:59"],
+ );
+ // $q->whereRaw('DATE(tp.waktu_masuk) = ?', [$selectDate])
+ // ->orWhereRaw('DATE(tp.waktu_keluar) = ?', [$selectDate]);
+ })
+ // ->whereNull("id_op_masuk")
+ // ->where("manual", 1)
+ // ->whereRaw("DATE($dateColumn) = ?", [$dateNow])
+ // ->whereBetween($dateColumn, [$startDate, $endDate])
+ ->select(
+ "p.nomer as id_petugas",
+ "p.nama as petugas",
+ // "tp.id_kendaraan",
+
+ // "pm.nama as kasir_masuk",
+ // "pk.nama as kasir_keluar",
+ "tp.id_op_masuk", // โ
ADA
+ "tp.id_op_keluar",
+
+ "tp.waktu_masuk",
+ "tp.waktu_keluar",
+ "tp.status",
+ "tp.bayar_masuk",
+ "tp.bayar_keluar",
+ "tp.status_transaksi",
+ "tp.cara_bayar",
+ )
+ ->get();
+ // Log::info("Result nya : " . json_encode($transactions));
+
+ Log::info("Query transaksi selesai", [
+ "rows" => $transactions->count(),
+ "query_time_ms" => round((microtime(true) - $start) * 1000, 2),
+ ]);
+
+ // =========================
+ // REKAP PER KENDARAAN
+ // =========================
+ Log::info("Rekap petugas dimulai");
+
+ $tunai = $transactions
+ ->sortBy("petugas")
+ ->groupBy("id_op_keluar")
+ ->map(function ($items, $id_op_keluar) {
+ // ======================
+ // PISAH MASUK & KELUAR
+ // ======================
+ // $masuk = $items->where('status', 1);
+ $masuk = $items->filter(fn($row) => in_array(data_get($row, "cara_bayar"), [null, 0, "0"], true));
+ // $keluar = $items->where('status', 0);
+ $keluar = $items->filter(fn($r) => (int) $r->status === 0);
+ // $tunai = $keluar->where('cara_bayar', '!=', 3);
+
+ // ======================
+ // MASUK
+ // ======================
+ // $masukCasual = $masuk->where('status_transaksi', '0');
+ // $masukMember = $masuk->where('status_transaksi', '3');
+
+ // ======================
+ // KELUAR
+ // ======================
+ // $keluarCasual = $tunai->where('status_transaksi', '0');
+ // $keluarMember = $tunai->where('status_transaksi', '3');
+ // $keluarLost = $tunai->where('status_transaksi', '32');
+ $tunai = $keluar->filter(fn($row) => in_array(data_get($row, "cara_bayar"), [null, 0, "0"], true));
+
+ $keluarCasual = $tunai->filter(
+ fn($r) => (string) data_get($r, "status_transaksi") === "0" && data_get($r, "id_op_masuk") !== null,
+ );
+ $keluarLost = $tunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "32");
+ $keluarMember = $tunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "3");
+ $keluarManual = $tunai->filter(fn($r) => data_get($r, "id_op_masuk") === null);
+ $keluarMix = $tunai->filter(fn($r) => data_get($r, "manual") === 1);
+ $keluarMasalah = $tunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "-1");
+
+ // ======================
+ // PEMBAYARAN (KELUAR)
+ // ======================
+ // $nonTunai = $keluar->where('cara_bayar', 3);
+ // $tunai = $keluar->where('cara_bayar', '!=', 3);
+ $totalCash =
+ $keluarCasual->sum("bayar_keluar") +
+ $keluarLost->sum("bayar_keluar") +
+ $keluarMember->sum("bayar_keluar") +
+ $keluarManual->sum("bayar_keluar");
+
+ Log::info("Transaksi tunai : ");
+
+ return [
+ "id_petugas" => $id_op_keluar,
+ "petugas" => $items->first()->petugas,
+ "total" => 0,
+ "tunaiOut" => $tunai->count(),
+ // ========= MASUK =========
+ "masuk" => [
+ "casual" => [
+ "jumlah" => 0,
+ "income" => $masuk->sum("bayar_masuk"),
+ ],
+ // 'member' => [
+ // 'jumlah' => $masukMember->count(),
+ // 'income' => $masukMember->sum('bayar_masuk'),
+ // ],
+ ],
+
+ // ========= KELUAR =========
+ "keluar" => [
+ "casual" => [
+ "jumlah" => $keluarCasual->count(),
+ "income" => $keluarCasual->sum("bayar_keluar"),
+ ],
+ "lost" => [
+ "jumlah" => $keluarLost->count(),
+ "income" => $keluarLost->sum("bayar_keluar"),
+ ],
+ "member" => [
+ "jumlah" => $keluarMember->count(),
+ "income" => $keluarMember->sum("bayar_keluar"),
+ ],
+ "manual" => [
+ "jumlah" => $keluarManual->count(),
+ "income" => $keluarManual->sum("bayar_keluar"),
+ ],
+ "masalah" => [
+ "jumlah" => $keluarMasalah->count(),
+ "income" => $keluarMasalah->sum("bayar_keluar"),
+ ],
+ ],
+ "totalCash" => $totalCash,
+ ];
+ })
+ ->values();
+
+ $cashless = $transactions
+ ->sortBy("id_op_keluar")
+ ->groupBy("id_op_keluar")
+ ->map(function ($items, $id_op_keluar) {
+ // ======================
+ // PISAH MASUK & KELUAR
+ // ======================
+ // $masuk = $items->where('status', 1);
+ $masuk = $items->filter(fn($row) => in_array(data_get($row, "cara_bayar"), [null, 0, "0"], true));
+ // $keluar = $items->where('status', 0);
+ // $nonTunai = $keluar->where('cara_bayar', 3);
+ $keluar = $items->filter(fn($r) => (int) $r->status === 0);
+ // $tunai = $keluar->where('cara_bayar', '!=', 3);
+ $nonTunai = $keluar->filter(fn($row) => (string) data_get($row, "cara_bayar") === "3");
+
+ // ======================
+ // MASUK
+ // ======================
+ // $masukCasual = $masuk->where('status_transaksi', '0');
+ // $masukMember = $masuk->where('status_transaksi', '3');
+
+ // ======================
+ // KELUAR
+ // ======================
+ // $keluarCasual = $nonTunai->where('status_transaksi', '0');
+ // $keluarMember = $nonTunai->where('status_transaksi', '3');
+ // $keluarLost = $nonTunai->where('status_transaksi', '32');
+ $keluarCasual = $nonTunai->filter(
+ fn($r) => (string) data_get($r, "status_transaksi") === "0" && data_get($r, "id_op_masuk") !== null,
+ );
+ $keluarMember = $nonTunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "3");
+ $keluarLost = $nonTunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "32");
+ $keluarManual = $nonTunai->filter(fn($r) => data_get($r, "id_op_masuk") === null);
+
+ $totalCashless =
+ $keluarCasual->sum("bayar_keluar") +
+ $keluarLost->sum("bayar_keluar") +
+ $keluarMember->sum("bayar_keluar") +
+ $keluarManual->sum("bayar_keluar");
+
+ // ======================
+ // PEMBAYARAN (KELUAR)
+ // ======================
+
+ return [
+ "id_petugas" => $id_op_keluar,
+ "petugas" => $items->first()->petugas,
+ "total" => 0,
+ "nonTunaiOut" => $nonTunai->count(),
+
+ // ========= MASUK =========
+ "masuk" => [
+ "casual" => [
+ "jumlah" => 0,
+ "income" => $masuk->sum("bayar_masuk"),
+ ],
+ "member" => [
+ "jumlah" => $masuk->count(),
+ "income" => $masuk->sum("bayar_masuk"),
+ ],
+ ],
+
+ // ========= KELUAR =========
+ "keluar" => [
+ "casual" => [
+ "jumlah" => $keluarCasual->count(),
+ "income" => $keluarCasual->sum("bayar_keluar"),
+ ],
+ "lost" => [
+ "jumlah" => $keluarLost->count(),
+ "income" => $keluarLost->sum("bayar_keluar"),
+ ],
+ "member" => [
+ "jumlah" => $keluarMember->count(),
+ "income" => $keluarMember->sum("bayar_keluar"),
+ ],
+ "manual" => [
+ "jumlah" => $keluarManual->count(),
+ "income" => $keluarManual->sum("bayar_keluar"),
+ ],
+ ],
+ "totalCashless" => $totalCashless,
+ ];
+ })
+ ->values();
+
+ // $transactions = DB::table("transaksi_parkir as tp")
+ // ->leftJoin("pegawai as p", "p.nomer", "=", "tp.id_op_keluar")
+ // ->leftJoin("pegawai as pm", "pm.nomer", "=", "tp.id_op_masuk")
+ // ->leftJoin("pegawai as pk", "pk.nomer", "=", "tp.id_op_keluar")
+ // ->whereDate("waktu_masuk", "<", $dateNow)
+ // ->select(
+ // "tp.id_kendaraan",
+ // "p.nama as jenis_mobil",
+ // "tp.id_op_keluar",
+ // "p.nama as petugas",
+ // DB::raw("SUM(CASE WHEN tp.status = 1 THEN 1 ELSE 0 END) as overnight"),
+ // DB::raw("SUM(CASE WHEN tp.status = 3 THEN 1 ELSE 0 END) as onexpired"),
+ // )
+ // ->groupBy("tp.id_op_keluar", "petugas")
+ // ->orderBy("tp.id_op_keluar", "asc")
+ // ->groupBy("p.nomer", "p.nama")
+ // ->orderBy("p.nomer")
+ // dd($transactions->toSql());
+ // ->get();
+
+ // $onCheck = $transactions
+ // ->sortBy('id_kendaraan')
+ // ->groupBy('id_kendaraan')
+ // ->map(function ($items) {
+ // $overNight = $items->filter(fn ($r) => (int) $r->status === 1);
+ // $onExpired = $items->filter(fn ($r) => (int) $r->status === 3);
+
+ // return [
+ // "id_petugas" => $items->id_op_keluar,
+ // "petugas" => $items->petugas,
+ // "overNight" => (int) $items->overnight,
+ // "onExpired" => (int) $items->onexpired,
+ // ];
+ // })
+ // ->values();
+
+ Log::info("Rekap kendaraan selesai", [
+ "total_kendaraan" => $tunai->count(),
+ ]);
+
+ Log::info("== allReportData END ==", [
+ "total_time_ms" => round((microtime(true) - $start) * 1000, 2),
+ ]);
+
+ return [
+ "date" => $startDate,
+ "tunai" => $tunai,
+ "nontunai" => $cashless,
+ ];
+ }
+ // ========== End Laporan per petugas ===============///
+
+ // ==========###################### Begin Laporan per petugas #######################===============//
+ public function paymentType(Request $request)
+ {
+ Log::info("== Officer Report START ==");
+ Log::info($request->harian);
+ Log::info($request->tanggal);
+ $selectDate = $request->tanggal;
+ $start = microtime(true);
+ $harian = $request->harian ?? 1;
+ $dateNow = "2026-01-25";
+ $startDate = $selectDate ? $selectDate : $dateNow;
+ $endDate = $selectDate ? $selectDate : $dateNow;
+
+ Log::info("Tanggal laporan", [
+ "start" => $startDate,
+ "end" => $endDate,
+ ]);
+ // ============= QUERY UTAMA (LEFT JOIN) =========================
+ Log::info("Query transaksi dimulai");
+
+ if ($harian == 1) {
+ // $dateColumn = ["tp.waktu_keluar"];
+ $dateColumn = ["tp.waktu_masuk", "tp.waktu_keluar"];
+ } else {
+ // $dateColumn = ["tp.pklogin"];
+ $dateColumn = ["tp.pmlogin", "tp.pklogin"];
+ }
+
+ // $transactions = DB::table("transaksi_parkir as tp")
+ $transactions = $this->parking
+ ->useTableParkir(Auth::user())
+ // ->leftJoin("pegawai as p", "p.nomer", "=", "tp.id_op_keluar")
+ // ->leftJoin("pegawai as pm", "pm.nomer", "=", "tp.id_op_masuk")
+ // ->leftJoin("pegawai as pk", "pk.nomer", "=", "tp.id_op_keluar")
+ ->where(function ($q) use ($dateColumn, $startDate, $endDate, $selectDate) {
+ $q->whereBetween($dateColumn[0], [$startDate . " 00:00:00", $endDate . " 23:59:59"])->orWhereBetween(
+ $dateColumn[0],
+ [$startDate . " 00:00:00", $endDate . " 23:59:59"],
+ );
+ // $q->whereRaw('DATE(tp.waktu_masuk) = ?', [$selectDate])
+ // ->orWhereRaw('DATE(tp.waktu_keluar) = ?', [$selectDate]);
+ })
+ // ->whereRaw("DATE($dateColumn) = ?", [$dateNow])
+ // ->whereBetween($dateColumn, [$startDate, $endDate])
+ ->select(
+ "rep_bank as bankType",
+ // "p.nomer as id_petugas",
+ // "p.nama as petugas",
+ // "tp.id_kendaraan",
+
+ // "pm.nama as kasir_masuk",
+ // "pk.nama as kasir_keluar",
+ "tp.id_op_masuk", // โ
ADA
+ "tp.id_op_keluar",
+
+ "tp.waktu_masuk",
+ "tp.waktu_keluar",
+ "tp.status",
+ "tp.bayar_masuk",
+ "tp.bayar_keluar",
+ "tp.status_transaksi",
+ "tp.cara_bayar",
+ )
+ ->get();
+ Log::info("Query transaksi selesai", [
+ "rows" => $transactions->count(),
+ "query_time_ms" => round((microtime(true) - $start) * 1000, 2),
+ ]);
+
+ Log::info("Rekap payment dimulai");
+
+ $tunai = $transactions
+ ->sortBy("bankType")
+ ->groupBy("bankType")
+ ->map(function ($items, $bankType) {
+ $keluar = $items->filter(fn($r) => (int) $r->status === 0);
+ $tunai = $keluar->filter(fn($row) => in_array(data_get($row, "cara_bayar"), [null, 0, "0"], true));
+ $keluarCasual = $tunai->filter(
+ fn($r) => (string) data_get($r, "status_transaksi") === "0" && data_get($r, "id_op_masuk") !== null,
+ );
+ $keluarMember = $tunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "3");
+ $keluarLost = $tunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "32");
+ $keluarManual = $tunai->filter(fn($r) => data_get($r, "id_op_masuk") === null);
+ $keluarMasalah = $tunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "-1");
+
+ $totalCash =
+ $keluarCasual->sum("bayar_keluar") +
+ $keluarLost->sum("bayar_keluar") +
+ $keluarMember->sum("bayar_keluar") +
+ $keluarManual->sum("bayar_keluar");
+
+ Log::info("Transaksi tunai : ");
+
+ return [
+ "typePayment" => $bankType,
+ "petugas" => $items->first()->bankType,
+ "total" => $items->count(),
+ "tunaiOut" => $tunai->count(),
+ "masuk" => [
+ "casual" => [
+ "jumlah" => 0,
+ "income" => 0,
+ ],
+ ],
+ "keluar" => [
+ "casual" => [
+ "jumlah" => $keluarCasual->count(),
+ "income" => $keluarCasual->sum("bayar_keluar"),
+ ],
+ "lost" => [
+ "jumlah" => $keluarLost->count(),
+ "income" => $keluarLost->sum("bayar_keluar"),
+ ],
+ "member" => [
+ "jumlah" => $keluarMember->count(),
+ "income" => $keluarMember->sum("bayar_keluar"),
+ ],
+ "manual" => [
+ "jumlah" => $keluarManual->count(),
+ "income" => $keluarManual->sum("bayar_keluar"),
+ ],
+ "masalah" => [
+ "jumlah" => $keluarMasalah->count(),
+ "income" => $keluarMasalah->sum("bayar_keluar"),
+ ],
+ ],
+ "totalCash" => $totalCash,
+ ];
+ })
+ ->values();
+
+ $cashless = $transactions
+ ->sortBy("bankType")
+ ->groupBy("bankType")
+ ->map(function ($items, $bankType) {
+ $keluar = $items->filter(fn($r) => (int) $r->status === 0);
+ $nonTunai = $keluar->filter(fn($row) => (string) data_get($row, "cara_bayar") === "3");
+
+ $keluarCasual = $nonTunai->filter(
+ fn($r) => (string) data_get($r, "status_transaksi") === "0" && data_get($r, "id_op_masuk") !== null,
+ );
+ $keluarMember = $nonTunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "3");
+ $keluarLost = $nonTunai->filter(fn($r) => (string) data_get($r, "status_transaksi") === "32");
+ $keluarManual = $nonTunai->filter(fn($r) => data_get($r, "id_op_masuk") === null);
+
+ $totalCashless =
+ $keluarCasual->sum("bayar_keluar") +
+ $keluarLost->sum("bayar_keluar") +
+ $keluarMember->sum("bayar_keluar") +
+ $keluarManual->sum("bayar_keluar");
+
+ // ======================
+ // PEMBAYARAN (KELUAR)
+ // ======================
+
+ return [
+ "typePayment" => $bankType,
+ "petugas" => $items->first()->bankType,
+ "total" => $items->count(),
+ "nonTunaiOut" => $nonTunai->count(),
+ "masuk" => [
+ "casual" => [
+ "jumlah" => 0,
+ "income" => 0,
+ ],
+ ],
+ "keluar" => [
+ "casual" => [
+ "jumlah" => $keluarCasual->count(),
+ "income" => $keluarCasual->sum("bayar_keluar"),
+ ],
+ "lost" => [
+ "jumlah" => $keluarLost->count(),
+ "income" => $keluarLost->sum("bayar_keluar"),
+ ],
+ "member" => [
+ "jumlah" => $keluarMember->count(),
+ "income" => $keluarMember->sum("bayar_keluar"),
+ ],
+ "manual" => [
+ "jumlah" => $keluarManual->count(),
+ "income" => $keluarManual->sum("bayar_keluar"),
+ ],
+ ],
+ "totalCashless" => $totalCashless,
+ ];
+ })
+ ->values();
+
+ Log::info("Rekap kendaraan selesai", [
+ "total_kendaraan" => $tunai->count(),
+ ]);
+
+ Log::info("== allReportData END ==", [
+ "total_time_ms" => round((microtime(true) - $start) * 1000, 2),
+ ]);
+
+ return [
+ "date" => $startDate,
+ "tunai" => $tunai,
+ "nontunai" => $cashless,
+ ];
+ }
+ // ========== End Laporan payment Type ===============///
+}
diff --git a/public/js/member/member-register.js b/public/js/member/member-register.js
index 170eb64..f4f54bf 100644
--- a/public/js/member/member-register.js
+++ b/public/js/member/member-register.js
@@ -309,4 +309,200 @@ $(document).ready(function () {
});
}
});
+
+ // ================= UBAH (update di tempat, nomor dipertahankan) =================
+ function updateHargaUbah() {
+ let total = 0;
+ $("#ubah-member #edit-list-nopol tr").each(function () {
+ total += parseFloat($(this).data("tarif")) || 0;
+ });
+ $("#ubah-member input[name='harga']").val(total);
+ }
+
+ function showUrlFor(notrans) {
+ const tpl = $("#btnExtend").data("url") || "/transaksi/stiker/:id";
+ return tpl.replace(":id", encodeURIComponent(notrans));
+ }
+
+ $(document).on("click", ".edit-button", function () {
+ const notrans = (typeof selectedRowData !== "undefined" && selectedRowData?.notrans)
+ || $(this).data("id") || "";
+ if (!notrans) {
+ Swal.fire({icon: "warning", title: "Belum pilih data", text: "Klik salah satu baris transaksi dulu."});
+ return;
+ }
+ $.ajax({
+ url: showUrlFor(notrans),
+ type: "GET",
+ success: function (r) {
+ const m = $("#ubah-member");
+ m.find("#edit-notrans").val(r.notrans);
+ m.find("[name='nama']").val(r.nama ?? "");
+ m.find("[name='address']").val(r.alamat ?? "");
+ m.find("[name='phone']").val(r.telepon ?? "");
+ m.find("[name='note']").val(r.keterangan ?? "");
+ m.find("[name='harga']").val(r.harga ?? 0);
+ m.find("[name='member']").val(r.jenis_langganan ?? "");
+ m.find("[name='depart']").val(r.unit_kerja ?? "");
+ if (r.awal && r.akhir) {
+ m.find("[name='daterange']").val(
+ `${moment(r.awal).format("DD-MM-YYYY HH:mm")} - ${moment(r.akhir).format("DD-MM-YYYY HH:mm")}`,
+ );
+ }
+ const jl = $("#edit-list-nopol").empty();
+ (r.stiker_details || []).forEach((row) => {
+ jl.append(`
+
+ ${row.nopol ?? ""}
+ ${row.vehicle ?? ""}
+ ${row.jenis_member ?? ""}
+ ${row.merk ?? ""}
+ Hapus
+ `);
+ });
+ const kl = $("#edit-list-card").empty();
+ (r.memberCard || []).forEach((ro) => {
+ kl.append(`
+
+ ${ro.no_card ?? ""}
+ ${ro.no_urut ?? ""}
+ Hapus
+ `);
+ });
+ updateHargaUbah();
+ },
+ error: function (xhr) {
+ Swal.fire({icon: "error", title: "Gagal memuat data", text: xhr.responseJSON?.message || "Data tidak ditemukan."});
+ },
+ });
+ });
+
+ $("#edit-jenisVehicle").on("change", function () {
+ const vehicleSelected = $(this).val();
+ const box = $("#edit-jenis-member").empty().append('Pilih Jenis ');
+ (member || []).forEach((item) => {
+ if (String(item.id_mobil) === String(vehicleSelected) && item.id_mobil !== 0) {
+ box.append(`${item.jenis_langganan} - ${item.tarif} `);
+ }
+ });
+ });
+
+ $("#edit-nopol-add").on("click", function () {
+ const nopol = $(".enopol-add").val().trim();
+ const vehicle = $("#edit-jenisVehicle").val();
+ const vehicleName = $("#edit-jenisVehicle option:selected").text();
+ const memberTxt = $("#edit-jenis-member option:selected").text();
+ const tarif = parseFloat($("#edit-jenis-member").val()) || 0;
+ const merk = $(".emerk").val().trim();
+ $(".enopol-add").removeClass("is-invalid");
+ if (!vehicle) {
+ Swal.fire({icon: "warning", title: "Belum lengkap", text: "Wajib pilih jenis kendaraan"});
+ return;
+ }
+ $.ajax({
+ url: "/transaksi/stiker/checkField",
+ type: "POST",
+ data: { nopol: nopol },
+ headers: { "X-CSRF-token": $('meta[name="csrf-token"]').attr("content") },
+ success: function (rr) {
+ if (rr.response === true) {
+ $("#edit-list-nopol").append(`
+
+ ${nopol}
+ ${vehicleName}
+ ${memberTxt}
+ ${merk}
+ Hapus
+ `);
+ $(".enopol-add, .emerk").val("");
+ $("#edit-jenisVehicle, #edit-jenis-member").val("");
+ updateHargaUbah();
+ } else {
+ $(".enopol-add").addClass("is-invalid").next(".invalid-feedback").text(rr.message).show();
+ }
+ },
+ error: function (xhr) {
+ Swal.fire({icon: "error", title: "Gagal memeriksa", text: xhr.responseJSON?.message || "Terjadi kesalahan saat memeriksa nopol"});
+ },
+ });
+ });
+
+ $(".ekartu").on("keydown", function (e) {
+ if (e.key === "Enter") { e.preventDefault(); $(".enourut").focus(); }
+ });
+ $(".enourut").on("keydown", function (e) {
+ if (e.key !== "Enter") return;
+ e.preventDefault();
+ const nocard = $(".ekartu").val().trim();
+ const nourut = $(".enourut").val().trim();
+ if (!nocard) return;
+ $("#edit-list-card").append(`
+ ${nocard} ${nourut}
+ Hapus `);
+ $(".ekartu, .enourut").val("");
+ });
+
+ $("#edit-list-nopol").on("click", ".edit-del-nopol", function () {
+ $(this).closest("tr").remove();
+ updateHargaUbah();
+ });
+ $("#edit-list-card").on("click", ".edit-del-card", function () {
+ $(this).closest("tr").remove();
+ });
+
+ $(".simpan-ubah").on("click", function () {
+ const btn = $(this);
+ const notrans = $("#edit-notrans").val();
+ if (!notrans) {
+ Swal.fire({icon: "warning", title: "Belum ada data", text: "Buka ulang modal Ubah dari baris transaksi."});
+ return;
+ }
+ const nopolData = [];
+ $("#edit-list-nopol tr").each(function () {
+ const row = $(this);
+ nopolData.push({
+ nopol: row.find("td:nth-child(1)").text().trim(),
+ vehicle: row.find("td:nth-child(2)").data("value"),
+ member: row.find("td:nth-child(3)").text().trim(),
+ merk: row.find("td:nth-child(4)").text().trim(),
+ });
+ });
+ const cardNumber = [];
+ $("#edit-list-card tr").each(function () {
+ const row = $(this);
+ const nocard = row.find("td:nth-child(1)").text().trim();
+ if (!nocard) return;
+ cardNumber.push({ nocard: nocard, nourut: row.find("td:nth-child(2)").text().trim() });
+ });
+ const payload = {
+ nama: $("#ubah-member [name='nama']").val(),
+ address: $("#ubah-member [name='address']").val(),
+ phone: $("#ubah-member [name='phone']").val(),
+ member: $("#ubah-member [name='member']").val(),
+ depart: $("#ubah-member [name='depart']").val(),
+ note: $("#ubah-member [name='note']").val(),
+ harga: $("#ubah-member [name='harga']").val(),
+ daterange: $("#ubah-member [name='daterange']").val(),
+ nopolData: nopolData,
+ cardNumber: cardNumber,
+ };
+ const saveHtml = btn.html();
+ btn.prop("disabled", true).html(' Menyimpan...');
+ $.ajax({
+ url: `${location.origin}/transaksi/member/${encodeURIComponent(notrans)}`,
+ type: "PUT",
+ data: payload,
+ headers: { "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content") },
+ success: function (r) {
+ $("#ubah-member").modal("hide");
+ Swal.fire({icon: "success", title: "Berhasil", text: r.message || "Data diperbarui."}).then(() => location.reload());
+ },
+ error: function (xhr) {
+ Swal.fire({icon: "error", title: "Gagal menyimpan", text: xhr.responseJSON?.message || "Periksa kembali isian."});
+ },
+ complete: function () {
+ btn.prop("disabled", false).html(saveHtml);
+ },
+ });
+ });
});
diff --git a/public/js/stikerMember/member-extend.js b/public/js/stikerMember/member-extend.js
index b872fb8..2f7eb02 100644
--- a/public/js/stikerMember/member-extend.js
+++ b/public/js/stikerMember/member-extend.js
@@ -247,7 +247,7 @@ $(document).ready(function () {
if (r.response === true) {
harga += Number(memberExtValue);
var rowhtml = `
-
+
${nopolExt}
${vehicleExtName}
${memberExt}
@@ -295,6 +295,7 @@ $(document).ready(function () {
vehicle: row.find("td:nth-child(2)").data("value"),
member: row.find("td:nth-child(3)").text().trim(),
merk: row.find("td:nth-child(4)").text().trim(),
+ _baru: row.data("baru") ? 1 : 0,
};
nopolData.push(rowData);
});
@@ -343,6 +344,15 @@ $(document).ready(function () {
console.log(extData);
+ // Notrans lama (mengandung "/") -> perpanjang di tempat, nomor dipertahankan.
+ // Notrans baru -> alur lama (bikin nomor baru via member.store).
+ if (String(formDataExt.notrans || "").includes("/")) {
+ url = "/transaksi/stiker/extend-old";
+ extData = Object.assign({ notrans: formDataExt.notrans }, formDataExt, {
+ nopolData: nopolData,
+ });
+ }
+
$.ajax({
url: url,
type: "POST",
diff --git a/public/js/stikerMember/member-register.js b/public/js/stikerMember/member-register.js
index 3befbcb..ff02f0e 100644
--- a/public/js/stikerMember/member-register.js
+++ b/public/js/stikerMember/member-register.js
@@ -286,7 +286,202 @@ $(document).ready(function () {
}).then(function () {
// Reload halaman setelah SweetAlert ditutup
location.reload(); // Ini akan me-reload halaman
- });
+ // ================= UBAH (update di tempat, nomor dipertahankan) =================
+ function updateHargaUbah() {
+ let total = 0;
+ $("#ubah-member #edit-list-nopol tr").each(function () {
+ total += parseFloat($(this).data("tarif")) || 0;
+ });
+ $("#ubah-member input[name='harga']").val(total);
+ }
+
+ function showUrlFor(notrans) {
+ const tpl = $("#btnExtend").data("url") || "/transaksi/stiker/:id";
+ return tpl.replace(":id", encodeURIComponent(notrans));
+ }
+
+ $(document).on("click", ".edit-button", function () {
+ const notrans = (typeof selectedRowData !== "undefined" && selectedRowData?.notrans)
+ || $(this).data("id") || "";
+ if (!notrans) {
+ Swal.fire({icon: "warning", title: "Belum pilih data", text: "Klik salah satu baris transaksi dulu."});
+ return;
+ }
+ $.ajax({
+ url: showUrlFor(notrans),
+ type: "GET",
+ success: function (r) {
+ const m = $("#ubah-member");
+ m.find("#edit-notrans").val(r.notrans);
+ m.find("[name='nama']").val(r.nama ?? "");
+ m.find("[name='address']").val(r.alamat ?? "");
+ m.find("[name='phone']").val(r.telepon ?? "");
+ m.find("[name='note']").val(r.keterangan ?? "");
+ m.find("[name='harga']").val(r.harga ?? 0);
+ m.find("[name='member']").val(r.jenis_langganan ?? "");
+ m.find("[name='depart']").val(r.unit_kerja ?? "");
+ if (r.awal && r.akhir) {
+ m.find("[name='daterange']").val(
+ `${moment(r.awal).format("DD-MM-YYYY HH:mm")} - ${moment(r.akhir).format("DD-MM-YYYY HH:mm")}`,
+ );
+ }
+ const jl = $("#edit-list-nopol").empty();
+ (r.stiker_details || []).forEach((row) => {
+ jl.append(`
+
+ ${row.nopol ?? ""}
+ ${row.vehicle ?? ""}
+ ${row.jenis_member ?? ""}
+ ${row.merk ?? ""}
+ Hapus
+ `);
+ });
+ const kl = $("#edit-list-card").empty();
+ (r.memberCard || []).forEach((ro) => {
+ kl.append(`
+
+ ${ro.no_card ?? ""}
+ ${ro.no_urut ?? ""}
+ Hapus
+ `);
+ });
+ updateHargaUbah();
+ },
+ error: function (xhr) {
+ Swal.fire({icon: "error", title: "Gagal memuat data", text: xhr.responseJSON?.message || "Data tidak ditemukan."});
+ },
+ });
+ });
+
+ $("#edit-jenisVehicle").on("change", function () {
+ const vehicleSelected = $(this).val();
+ const box = $("#edit-jenis-member").empty().append('Pilih Jenis ');
+ (member || []).forEach((item) => {
+ if (String(item.id_mobil) === String(vehicleSelected) && item.id_mobil !== 0) {
+ box.append(`${item.jenis_langganan} - ${item.tarif} `);
+ }
+ });
+ });
+
+ $("#edit-nopol-add").on("click", function () {
+ const nopol = $(".enopol-add").val().trim();
+ const vehicle = $("#edit-jenisVehicle").val();
+ const vehicleName = $("#edit-jenisVehicle option:selected").text();
+ const memberTxt = $("#edit-jenis-member option:selected").text();
+ const tarif = parseFloat($("#edit-jenis-member").val()) || 0;
+ const merk = $(".emerk").val().trim();
+ $(".enopol-add").removeClass("is-invalid");
+ if (!vehicle) {
+ Swal.fire({icon: "warning", title: "Belum lengkap", text: "Wajib pilih jenis kendaraan"});
+ return;
+ }
+ $.ajax({
+ url: "/transaksi/stiker/checkField",
+ type: "POST",
+ data: { nopol: nopol },
+ headers: { "X-CSRF-token": $('meta[name="csrf-token"]').attr("content") },
+ success: function (rr) {
+ if (rr.response === true) {
+ $("#edit-list-nopol").append(`
+
+ ${nopol}
+ ${vehicleName}
+ ${memberTxt}
+ ${merk}
+ Hapus
+ `);
+ $(".enopol-add, .emerk").val("");
+ $("#edit-jenisVehicle, #edit-jenis-member").val("");
+ updateHargaUbah();
+ } else {
+ $(".enopol-add").addClass("is-invalid").next(".invalid-feedback").text(rr.message).show();
+ }
+ },
+ error: function (xhr) {
+ Swal.fire({icon: "error", title: "Gagal memeriksa", text: xhr.responseJSON?.message || "Terjadi kesalahan saat memeriksa nopol"});
+ },
+ });
+ });
+
+ $(".ekartu").on("keydown", function (e) {
+ if (e.key === "Enter") { e.preventDefault(); $(".enourut").focus(); }
+ });
+ $(".enourut").on("keydown", function (e) {
+ if (e.key !== "Enter") return;
+ e.preventDefault();
+ const nocard = $(".ekartu").val().trim();
+ const nourut = $(".enourut").val().trim();
+ if (!nocard) return;
+ $("#edit-list-card").append(`
+ ${nocard} ${nourut}
+ Hapus `);
+ $(".ekartu, .enourut").val("");
+ });
+
+ $("#edit-list-nopol").on("click", ".edit-del-nopol", function () {
+ $(this).closest("tr").remove();
+ updateHargaUbah();
+ });
+ $("#edit-list-card").on("click", ".edit-del-card", function () {
+ $(this).closest("tr").remove();
+ });
+
+ $(".simpan-ubah").on("click", function () {
+ const btn = $(this);
+ const notrans = $("#edit-notrans").val();
+ if (!notrans) {
+ Swal.fire({icon: "warning", title: "Belum ada data", text: "Buka ulang modal Ubah dari baris transaksi."});
+ return;
+ }
+ const nopolData = [];
+ $("#edit-list-nopol tr").each(function () {
+ const row = $(this);
+ nopolData.push({
+ nopol: row.find("td:nth-child(1)").text().trim(),
+ vehicle: row.find("td:nth-child(2)").data("value"),
+ member: row.find("td:nth-child(3)").text().trim(),
+ merk: row.find("td:nth-child(4)").text().trim(),
+ });
+ });
+ const cardNumber = [];
+ $("#edit-list-card tr").each(function () {
+ const row = $(this);
+ const nocard = row.find("td:nth-child(1)").text().trim();
+ if (!nocard) return;
+ cardNumber.push({ nocard: nocard, nourut: row.find("td:nth-child(2)").text().trim() });
+ });
+ const payload = {
+ nama: $("#ubah-member [name='nama']").val(),
+ address: $("#ubah-member [name='address']").val(),
+ phone: $("#ubah-member [name='phone']").val(),
+ member: $("#ubah-member [name='member']").val(),
+ depart: $("#ubah-member [name='depart']").val(),
+ note: $("#ubah-member [name='note']").val(),
+ harga: $("#ubah-member [name='harga']").val(),
+ daterange: $("#ubah-member [name='daterange']").val(),
+ nopolData: nopolData,
+ cardNumber: cardNumber,
+ };
+ const saveHtml = btn.html();
+ btn.prop("disabled", true).html(' Menyimpan...');
+ $.ajax({
+ url: `${location.origin}/transaksi/member/${encodeURIComponent(notrans)}`,
+ type: "PUT",
+ data: payload,
+ headers: { "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content") },
+ success: function (r) {
+ $("#ubah-member").modal("hide");
+ Swal.fire({icon: "success", title: "Berhasil", text: r.message || "Data diperbarui."}).then(() => location.reload());
+ },
+ error: function (xhr) {
+ Swal.fire({icon: "error", title: "Gagal menyimpan", text: xhr.responseJSON?.message || "Periksa kembali isian."});
+ },
+ complete: function () {
+ btn.prop("disabled", false).html(saveHtml);
+ },
+ });
+ });
+});
} else if (r.status == false) {
Swal.fire({icon: "error", title: "Oops...", text: r.message || "Terjadi kendala, silakan hubungi admin."});
}
diff --git a/public/jx/stikermember/member-register.parkq.jx b/public/jx/stikermember/member-register.parkq.jx
index 0bedfff..fac6f58 100644
--- a/public/jx/stikermember/member-register.parkq.jx
+++ b/public/jx/stikermember/member-register.parkq.jx
@@ -1 +1 @@
-var a0_0x1cd75e=a0_0x2344;(function(_0x32ce93,_0x5607a3){var _0x248d71=a0_0x2344,_0x13b3ed=_0x32ce93();while(!![]){try{var _0x28205d=-parseInt(_0x248d71(0xc2))/0x1+-parseInt(_0x248d71(0x112))/0x2*(-parseInt(_0x248d71(0x107))/0x3)+parseInt(_0x248d71(0xe8))/0x4+-parseInt(_0x248d71(0xce))/0x5*(-parseInt(_0x248d71(0xfd))/0x6)+parseInt(_0x248d71(0x124))/0x7+parseInt(_0x248d71(0xbe))/0x8*(-parseInt(_0x248d71(0x118))/0x9)+parseInt(_0x248d71(0xc4))/0xa;if(_0x28205d===_0x5607a3)break;else _0x13b3ed['push'](_0x13b3ed['shift']());}catch(_0x1704ec){_0x13b3ed['push'](_0x13b3ed['shift']());}}}(a0_0x1f74,0x5e35f),$(document)[a0_0x1cd75e(0x108)](function(){var _0x26a625=a0_0x1cd75e;const _0x1a36c2=moment(),_0x127c4c=moment(_0x1a36c2)[_0x26a625(0xbb)](_0x26a625(0xc5))[_0x26a625(0x100)](_0x26a625(0xfa)),_0x21a86d=moment(_0x1a36c2)['endOf'](_0x26a625(0xc5))[_0x26a625(0x100)](_0x26a625(0xc6));$(_0x26a625(0x11d))[_0x26a625(0xd6)]({'rules':{'nama':{'required':!![]},'member':{'required':!![]},'depart':{'required':!![]}},'messages':{'nama':{'required':'Masukkan\x20nama\x20member'},'member':{'required':_0x26a625(0xcd)},'depart':{'required':_0x26a625(0xf5)}},'highlight':function(_0xc792e4,_0x49b424,_0x8a8a48){var _0x29f67f=_0x26a625;$(_0xc792e4)['addClass'](_0x29f67f(0xec));},'unhighlight':function(_0x5bca90,_0x1d25b5,_0x1b55a1){var _0x20fe0a=_0x26a625;$(_0x5bca90)['removeClass'](_0x20fe0a(0xec));}}),$(_0x26a625(0xf9))[_0x26a625(0xb7)]({'timePicker':!![],'locale':{'format':_0x26a625(0xf4)},'timePicker24Hour':!![],'timePickerSeconds':![],'buttonClasses':[_0x26a625(0xdd),'btn-sm'],'applyClass':_0x26a625(0xc1),'cancelClass':_0x26a625(0x10a),'startDate':_0x127c4c,'endDate':_0x21a86d,'parentEl':_0x26a625(0x10b)},function(_0x5310c0,_0x79bb4){var _0x26d4b8=_0x26a625;console[_0x26d4b8(0x10f)](_0x26d4b8(0xe5)+_0x5310c0[_0x26d4b8(0x100)](_0x26d4b8(0xf4))+_0x26d4b8(0x111)+_0x79bb4[_0x26d4b8(0x100)](_0x26d4b8(0xf4))),$(_0x26d4b8(0xf9))[_0x26d4b8(0x125)](_0x5310c0[_0x26d4b8(0x100)](_0x26d4b8(0xf4))+'\x20s/d\x20'+_0x79bb4['format'](_0x26d4b8(0xf4)));}),$(_0x26a625(0xf9))[_0x26a625(0x125)](_0x127c4c+_0x26a625(0xc9)+_0x21a86d),$('#jenisVehicle')['on'](_0x26a625(0xfe),function(){var _0x4416c7=_0x26a625,_0x492e9d=member,_0x3b1948=$(this)[_0x4416c7(0x125)](),_0x350e2c=$(_0x4416c7(0x101));_0x350e2c['empty'](),_0x350e2c['append']('Pilih\x20Jenis '),_0x492e9d[_0x4416c7(0x11a)](_0x1758bf=>{var _0x120228=_0x4416c7;_0x1758bf[_0x120228(0xe1)]===_0x3b1948&&(_0x1758bf[_0x120228(0xe1)]!==0x0?(_0x350e2c[_0x120228(0xf0)](_0x120228(0xff)+_0x1758bf[_0x120228(0x120)]+'\x22>'+_0x1758bf[_0x120228(0xf1)]+'\x20-\x20'+_0x1758bf['tarif']+_0x120228(0xef)),console[_0x120228(0x10f)](_0x350e2c)):_0x350e2c[_0x120228(0xf0)](_0x120228(0x105)));});});function _0x4c5ac6(){var _0x24fc8e=_0x26a625;let _0x2ea5ed=0x0;$(_0x24fc8e(0x11e))[_0x24fc8e(0x11c)](function(){var _0x1b4ead=_0x24fc8e;_0x2ea5ed+=parseFloat($(this)[_0x1b4ead(0xe0)](_0x1b4ead(0x120)))||0x0;}),$(_0x24fc8e(0x10e))[_0x24fc8e(0x125)](_0x2ea5ed);}$(_0x26a625(0xdc))['on'](_0x26a625(0xea),function(){var _0x1603ac=_0x26a625,_0x15b898=$('.nopol-add')['val']()[_0x1603ac(0x11b)]();console[_0x1603ac(0x10f)](_0x15b898);var _0x1f0bef=$(_0x1603ac(0xb8))[_0x1603ac(0x125)](),_0x3a5b84=$(_0x1603ac(0x122))['text'](),_0x2305ee=$(_0x1603ac(0xe7))['text'](),_0x1d54ac=parseFloat($(_0x1603ac(0x101))['val']())||0x0,_0x8a8380=$('.merk')[_0x1603ac(0x125)]()['trim']();$(_0x1603ac(0x119))[_0x1603ac(0xc0)](_0x1603ac(0xec)),$('.nopol-add')[_0x1603ac(0xc7)]('.invalid-feedback')[_0x1603ac(0x116)]();if(!_0x1f0bef){Swal[_0x1603ac(0x123)]({'icon':'warning','title':_0x1603ac(0xcc),'text':'Wajib\x20pilih\x20jenis\x20kendaraan'});return;}$[_0x1603ac(0xee)]({'url':_0x1603ac(0xdb),'type':_0x1603ac(0xb5),'data':{'nopol':_0x15b898},'headers':{'X-CSRF-token':$(_0x1603ac(0x117))[_0x1603ac(0xfc)](_0x1603ac(0xe4))},'success':function(_0x1318f5){var _0x431148=_0x1603ac;if(_0x1318f5[_0x431148(0x104)]===!![]){var _0x3aeb6d=_0x431148(0xf6)+_0x1d54ac+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x15b898+' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x3a5b84+' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2305ee+_0x431148(0xdf)+_0x8a8380+_0x431148(0xf3);$(_0x431148(0xd3))[_0x431148(0xf0)](_0x3aeb6d),console[_0x431148(0x10f)](_0x431148(0x106)+_0x15b898),_0x4c5ac6(),$(_0x431148(0x119))[_0x431148(0x125)](''),$(_0x431148(0xb8))[_0x431148(0x125)](''),$(_0x431148(0x101))['val'](''),$(_0x431148(0xd7))[_0x431148(0x125)]('');}else $(_0x431148(0x119))['addClass'](_0x431148(0xec)),$(_0x431148(0x119))['next'](_0x431148(0xf7))['text'](_0x1318f5['message'])[_0x431148(0xe3)](),console[_0x431148(0x10f)](_0x1318f5[_0x431148(0xed)]);},'error':function(_0x4d1ba1){var _0x1d7d52=_0x1603ac;Swal[_0x1d7d52(0x123)]({'icon':_0x1d7d52(0xcb),'title':'Gagal\x20memeriksa','text':_0x4d1ba1[_0x1d7d52(0xbf)]?.[_0x1d7d52(0xed)]||'Terjadi\x20kesalahan\x20saat\x20memeriksa\x20nopol'});}});}),$(_0x26a625(0xe9))['on'](_0x26a625(0x110),function(_0x194905){var _0x3d6480=_0x26a625,_0x995750=$(_0x3d6480(0xe9))['val']()['trim']();_0x194905[_0x3d6480(0xd8)]===_0x3d6480(0xfb)&&(_0x194905[_0x3d6480(0xd1)](),$(_0x3d6480(0xd0))[_0x3d6480(0xd2)]());}),$(_0x26a625(0xd0))['on'](_0x26a625(0x110),function(_0x4093cc){var _0x1ba9b3=_0x26a625;if(_0x4093cc[_0x1ba9b3(0xd8)]===_0x1ba9b3(0xfb)){_0x4093cc['preventDefault']();var _0xc89457=$(_0x1ba9b3(0xe9))[_0x1ba9b3(0x125)]()[_0x1ba9b3(0x11b)](),_0x2d01d5=$(_0x1ba9b3(0xd0))[_0x1ba9b3(0x125)]()['trim'](),_0x15f6f0='\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0xc89457+_0x1ba9b3(0xbc)+_0x2d01d5+_0x1ba9b3(0x115);$(_0x1ba9b3(0xf8))['append'](_0x15f6f0),$(_0x1ba9b3(0xe9))[_0x1ba9b3(0x125)](''),$(_0x1ba9b3(0xd0))[_0x1ba9b3(0x125)]('');}}),$(_0x26a625(0xf8))['on'](_0x26a625(0xea),'.delete-row',function(){var _0x4d6196=_0x26a625;$(this)[_0x4d6196(0xe2)]('tr')[_0x4d6196(0xb6)]();}),$(_0x26a625(0xd3))['on']('click','.delete-row',function(){var _0x9378ee=_0x26a625;$(this)[_0x9378ee(0xe2)]('tr')['remove'](),_0x4c5ac6();}),$(_0x26a625(0x102))['on'](_0x26a625(0xea),function(){var _0x21b0ba=_0x26a625,_0x3c2ffd=$(this),_0x5c91ed=$(_0x21b0ba(0xb9))[_0x21b0ba(0x113)](),_0x2d6895=[],_0xc2cbbd=[];$('#list-nopol\x20tr')[_0x21b0ba(0x11c)](function(){var _0x2f5921=_0x21b0ba,_0x44a99f=$(this),_0x47417b={'nopol':_0x44a99f[_0x2f5921(0xde)](_0x2f5921(0x103))[_0x2f5921(0x11f)]()[_0x2f5921(0x11b)](),'vehicle':_0x44a99f[_0x2f5921(0xde)](_0x2f5921(0xd5))[_0x2f5921(0xe0)](_0x2f5921(0x10c)),'member':_0x44a99f[_0x2f5921(0xde)]('td:nth-child(3)')[_0x2f5921(0x11f)]()[_0x2f5921(0x11b)](),'merk':_0x44a99f[_0x2f5921(0xde)](_0x2f5921(0xcf))[_0x2f5921(0x11f)]()[_0x2f5921(0x11b)]()};_0x2d6895[_0x2f5921(0xd4)](_0x47417b);}),console[_0x21b0ba(0x10f)](_0x2d6895),$(_0x21b0ba(0x121))[_0x21b0ba(0x11c)](function(){var _0x41d6cc=_0x21b0ba,_0x28957c=$(this),_0x31ddc5={'nocard':_0x28957c[_0x41d6cc(0xde)](_0x41d6cc(0x103))[_0x41d6cc(0x11f)](),'nourut':_0x28957c[_0x41d6cc(0xde)]('td:nth-child(2)')[_0x41d6cc(0x11f)]()};_0xc2cbbd[_0x41d6cc(0xd4)](_0x31ddc5);}),console[_0x21b0ba(0x10f)](_0xc2cbbd);const _0x3cf838=_0x5c91ed,_0x51dd72={},_0x1f49f7=new URLSearchParams(_0x3cf838);_0x1f49f7['forEach']((_0x420ccb,_0x549826)=>{_0x51dd72[_0x549826]=_0x420ccb;}),console[_0x21b0ba(0x10f)](_0x51dd72);var _0x10b14b={'formData':_0x51dd72,'nopolData':_0x2d6895,'cardNumber':_0xc2cbbd};_0x4c5ac6(),_0x51dd72[_0x21b0ba(0xb4)]=$(_0x21b0ba(0x10e))[_0x21b0ba(0x125)]();if($('.tambah-member')[_0x21b0ba(0xe6)]()){const _0x47a1fe=_0x3c2ffd[_0x21b0ba(0x109)]();$[_0x21b0ba(0xee)]({'url':$(_0x21b0ba(0xb9))['attr'](_0x21b0ba(0x114)),'type':_0x21b0ba(0xb5),'data':_0x10b14b,'headers':{'X-CSRF-token':$(_0x21b0ba(0x117))[_0x21b0ba(0xfc)]('content')},'beforeSend':function(){var _0x135dc3=_0x21b0ba;_0x3c2ffd[_0x135dc3(0xda)](_0x135dc3(0xbd),!![])['html'](_0x135dc3(0x10d));},'success':function(_0x255322){var _0x13d68f=_0x21b0ba;$(_0x13d68f(0x10b))['modal'](_0x13d68f(0x116));if(_0x255322[_0x13d68f(0xd9)]==!![])Swal[_0x13d68f(0x123)]({'icon':'success','title':_0x13d68f(0xba),'text':_0x255322[_0x13d68f(0xed)]||_0x13d68f(0xca),'timer':0x1388,'showConfirmButton':!0x1})[_0x13d68f(0xeb)](function(){var _0x5319c2=_0x13d68f;location[_0x5319c2(0xc8)]();});else _0x255322[_0x13d68f(0xd9)]==![]&&Swal[_0x13d68f(0x123)]({'icon':_0x13d68f(0xcb),'title':'Oops...','text':_0x255322[_0x13d68f(0xed)]||_0x13d68f(0xc3)});console[_0x13d68f(0x10f)](_0x255322);},'error':function(_0x14d8dd,_0x40f694,_0x2957ce){var _0x2ee415=_0x21b0ba;Swal[_0x2ee415(0x123)]({'icon':_0x2ee415(0xcb),'title':_0x2ee415(0xf2),'text':_0x14d8dd['responseJSON']?.['message']||'Terjadi\x20kesalahan:\x20'+_0x2957ce});},'complete':function(){var _0x3a7749=_0x21b0ba;_0x3c2ffd[_0x3a7749(0xda)]('disabled',![])[_0x3a7749(0x109)](_0x47a1fe);}});}});}));function a0_0x2344(_0x1cbbd5,_0x3a3902){_0x1cbbd5=_0x1cbbd5-0xb4;var _0x1f740d=a0_0x1f74();var _0x234400=_0x1f740d[_0x1cbbd5];return _0x234400;}function a0_0x1f74(){var _0x4c1121=['remove','daterangepicker','#jenisVehicle','#add-member','Berhasil!!','startOf',' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','disabled','232wLxhzw','responseJSON','removeClass','btn-danger','729625BNiDiY','Terjadi\x20kendala,\x20silakan\x20hubungi\x20admin.','927570WLTUcz','day','DD-MM-YYYY\x2023:59','next','reload','\x20-\x20','Member\x20anda\x20telah\x20terdaftar\x20!!','error','Belum\x20lengkap','Jenis\x20Member\x20belum\x20di\x20pilih','5vpiiDW','td:nth-child(4)','.nourut','preventDefault','focus','#list-nopol','push','td:nth-child(2)','validate','.merk','key','status','prop','stiker/checkField','#nopol-add','btn','find',' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','data','id_mobil','closest','show','content','Range\x20selected:\x20','valid','#jenis-member\x20option:selected','1302224eqWSCL','.kartu','click','then','is-invalid','message','ajax','\x20','append','jenis_langganan','Gagal\x20menyimpan',' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Hapus\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','DD-MM-YYYY\x20HH:mm','Jenis\x20Langganan\x20belum\x20di\x20pilih','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Tidak\x20ada\x20Pilihan\x20','Berhasil\x20menambahkan\x20','3033xBMinL','ready','html','btn-inverse','#modal-member','value',' Menyimpan...','#modal-member\x20input[name=\x27harga\x27]','log','keydown','\x20s/d\x20','1502ZvInOf','serialize','action','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Hapus\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','hide','meta[name=\x22csrf-token\x22]','200745nIWYaY','.nopol-add','forEach','trim','each','.tambah-member','#modal-member\x20#list-nopol\x20tr','text','tarif','#list-card\x20tr','#jenisVehicle\x20option:selected','fire','3701509fOvXFb','val','harga','POST'];a0_0x1f74=function(){return _0x4c1121;};return a0_0x1f74();}
\ No newline at end of file
+const a0_0x313b1d=a0_0x25a5;function a0_0x1604(){const _0x71b744=['#ubah-member\x20[name=\x27phone\x27]','remove','ajax','notrans','#jenis-member\x20option:selected','meta[name=\x22csrf-token\x22]','','startOf','nama','#edit-jenisVehicle','harga','/transaksi/stiker/checkField','[name=\x27daterange\x27]','#ubah-member','daterangepicker','Gagal\x20memuat\x20data','nopol','.enourut','.simpan',' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Hapus \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','Terjadi\x20kesalahan\x20saat\x20memeriksa\x20nopol','push','undefined','.input-daterange-timepicker','td:nth-child(1)','stiker/checkField','#ubah-member\x20[name=\x27address\x27]','POST','disabled','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Hapus ','5601942wlCUrG','Data\x20tidak\x20ditemukan.','#edit-list-card\x20tr','url','closest','text','trim','stiker_details','.emerk','change','val','Pilih\x20Jenis ','#list-card','Berhasil','[name=\x27address\x27]','reload','hide','#btnExtend','td:nth-child(4)','find','each','3268095RUrrei','Klik\x20salah\x20satu\x20baris\x20transaksi\x20dulu.','attr','DD-MM-YYYY\x20HH:mm','4519404vSbdgW','append','','Terjadi\x20kendala,\x20silakan\x20hubungi\x20admin.','.nopol-add','636856TmPLsR','369622wMXQSf','#list-nopol\x20tr','.edit-del-card','#modal-member','key','#edit-jenisVehicle,\x20#edit-jenis-member','data','#list-nopol','success','unit_kerja','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Hapus\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','#add-member','56972XPqwYQ','Data\x20diperbarui.','\x20','[name=\x27member\x27]','merk','response','#edit-jenis-member','#ubah-member\x20input[name=\x27harga\x27]','Masukkan\x20nama\x20member','jenis_member','error','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Menyimpan...','#edit-jenis-member\x20option:selected','.enopol-add','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 ','.delete-row','warning','#modal-member\x20#list-nopol\x20tr','Wajib\x20pilih\x20jenis\x20kendaraan','message','[name=\x27phone\x27]','fire','day','is-invalid','PUT','id_mobil','.tambah-member','#ubah-member\x20[name=\x27note\x27]','#ubah-member\x20[name=\x27depart\x27]','ready','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','33yEEopQ','keydown','[name=\x27note\x27]','content','\x20-\x20','.ekartu,\x20.enourut','btn-inverse','\x20s/d\x20','#nopol-add','btn-sm','2198kdUofM','Range\x20selected:\x20','keterangan','[name=\x27depart\x27]','Gagal\x20memeriksa','Belum\x20lengkap','empty','.ekartu','then',' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','value','td:nth-child(3)','#edit-nopol-add','focus','Buka\x20ulang\x20modal\x20Ubah\x20dari\x20baris\x20transaksi.','jenis_langganan','#edit-notrans','awal','forEach','#edit-list-card','DD-MM-YYYY\x2023:59','\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 ','responseJSON','html','.kartu','Tidak\x20ada\x20Pilihan\x20 ','format','.simpan-ubah',' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','#ubah-member\x20[name=\x27harga\x27]','.merk','modal',' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Hapus\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','/transaksi/stiker/:id','telepon','akhir','#edit-list-nopol',':id','valid','[name=\x27nama\x27]','.invalid-feedback','btn-danger','Periksa\x20kembali\x20isian.','alamat'];a0_0x1604=function(){return _0x71b744;};return a0_0x1604();}function a0_0x25a5(_0x1ad227,_0x5125b1){_0x1ad227=_0x1ad227-0x1df;const _0x160472=a0_0x1604();let _0x25a5a9=_0x160472[_0x1ad227];return _0x25a5a9;}(function(_0x35de4c,_0x2f3510){const _0x5babf6=a0_0x25a5,_0x16f7ec=_0x35de4c();while(!![]){try{const _0x580f27=parseInt(_0x5babf6(0x26c))/0x1+-parseInt(_0x5babf6(0x26d))/0x2+-parseInt(_0x5babf6(0x1fa))/0x3*(-parseInt(_0x5babf6(0x297))/0x4)+-parseInt(_0x5babf6(0x263))/0x5+parseInt(_0x5babf6(0x267))/0x6+-parseInt(_0x5babf6(0x204))/0x7*(parseInt(_0x5babf6(0x288))/0x8)+parseInt(_0x5babf6(0x24e))/0x9;if(_0x580f27===_0x2f3510)break;else _0x16f7ec['push'](_0x16f7ec['shift']());}catch(_0x31d660){_0x16f7ec['push'](_0x16f7ec['shift']());}}}(a0_0x1604,0x7d809),$(document)[a0_0x313b1d(0x1f8)](function(){const _0x2c7e71=a0_0x313b1d,_0x8c9650=moment(),_0x38c844=moment(_0x8c9650)[_0x2c7e71(0x237)](_0x2c7e71(0x1f1))[_0x2c7e71(0x21e)](_0x2c7e71(0x291)),_0x281321=moment(_0x8c9650)[_0x2c7e71(0x27f)](_0x2c7e71(0x1f1))['format'](_0x2c7e71(0x218));$(_0x2c7e71(0x1f5))['validate']({'rules':{'nama':{'required':!![]},'member':{'required':!![]},'depart':{'required':!![]}},'messages':{'nama':{'required':_0x2c7e71(0x1df)},'member':{'required':'Jenis\x20Member\x20belum\x20di\x20pilih'},'depart':{'required':_0x2c7e71(0x292)}},'highlight':function(_0x4a3fa4,_0x2bba05,_0x3f3190){const _0x11605b=_0x2c7e71;$(_0x4a3fa4)['addClass'](_0x11605b(0x1f2));},'unhighlight':function(_0x143d9b,_0x330b84,_0x42bb64){const _0x4a7205=_0x2c7e71;$(_0x143d9b)[_0x4a7205(0x285)](_0x4a7205(0x1f2));}}),$(_0x2c7e71(0x247))[_0x2c7e71(0x23e)]({'timePicker':!![],'locale':{'format':_0x2c7e71(0x266)},'timePicker24Hour':!![],'timePickerSeconds':![],'buttonClasses':[_0x2c7e71(0x27a),_0x2c7e71(0x203)],'applyClass':_0x2c7e71(0x22d),'cancelClass':_0x2c7e71(0x200),'startDate':_0x38c844,'endDate':_0x281321,'parentEl':'#modal-member'},function(_0x523435,_0x5d893d){const _0x2ef331=_0x2c7e71;console[_0x2ef331(0x28c)](_0x2ef331(0x205)+_0x523435['format'](_0x2ef331(0x266))+'\x20s/d\x20'+_0x5d893d[_0x2ef331(0x21e)](_0x2ef331(0x266))),$(_0x2ef331(0x247))[_0x2ef331(0x258)](_0x523435[_0x2ef331(0x21e)](_0x2ef331(0x266))+_0x2ef331(0x201)+_0x5d893d[_0x2ef331(0x21e)]('DD-MM-YYYY\x20HH:mm'));}),$(_0x2c7e71(0x247))[_0x2c7e71(0x258)](_0x38c844+_0x2c7e71(0x1fe)+_0x281321),$('#jenisVehicle')['on'](_0x2c7e71(0x257),function(){const _0x5da30a=_0x2c7e71;var _0x4ec2e1=member,_0x1a0d3d=$(this)[_0x5da30a(0x258)](),_0x2c0b60=$('#jenis-member');_0x2c0b60['empty'](),_0x2c0b60['append'](_0x5da30a(0x259)),_0x4ec2e1['forEach'](_0x2a49c4=>{const _0x39a644=_0x5da30a;_0x2a49c4['id_mobil']===_0x1a0d3d&&(_0x2a49c4[_0x39a644(0x1f4)]!==0x0?(_0x2c0b60[_0x39a644(0x268)](''+_0x2a49c4['jenis_langganan']+_0x39a644(0x1fe)+_0x2a49c4[_0x39a644(0x28f)]+_0x39a644(0x299)),console[_0x39a644(0x28c)](_0x2c0b60)):_0x2c0b60['append'](_0x39a644(0x21d)));});});function _0x4a43b2(){const _0x4811a6=_0x2c7e71;let _0x2765bc=0x0;$(_0x4811a6(0x1ec))[_0x4811a6(0x262)](function(){const _0x1b01ab=_0x4811a6;_0x2765bc+=parseFloat($(this)[_0x1b01ab(0x273)]('tarif'))||0x0;}),$(_0x4811a6(0x283))[_0x4811a6(0x258)](_0x2765bc);}$(_0x2c7e71(0x202))['on'](_0x2c7e71(0x278),function(){const _0x57ac45=_0x2c7e71;var _0x2867ce=$(_0x57ac45(0x26b))[_0x57ac45(0x258)]()[_0x57ac45(0x254)]();console['log'](_0x2867ce);var _0x198857=$('#jenisVehicle')[_0x57ac45(0x258)](),_0x86b70c=$(_0x57ac45(0x287))[_0x57ac45(0x253)](),_0x8c1f=$(_0x57ac45(0x234))[_0x57ac45(0x253)](),_0x514ecf=parseFloat($(_0x57ac45(0x280))[_0x57ac45(0x258)]())||0x0,_0x174429=$('.merk')[_0x57ac45(0x258)]()[_0x57ac45(0x254)]();$(_0x57ac45(0x26b))[_0x57ac45(0x285)](_0x57ac45(0x1f2)),$('.nopol-add')['next'](_0x57ac45(0x22c))[_0x57ac45(0x25e)]();if(!_0x198857){Swal[_0x57ac45(0x1f0)]({'icon':_0x57ac45(0x1eb),'title':'Belum\x20lengkap','text':_0x57ac45(0x1ed)});return;}$[_0x57ac45(0x232)]({'url':_0x57ac45(0x249),'type':_0x57ac45(0x24b),'data':{'nopol':_0x2867ce},'headers':{'X-CSRF-token':$('meta[name=\x22csrf-token\x22]')[_0x57ac45(0x265)](_0x57ac45(0x1fd))},'success':function(_0x71927a){const _0x4fb01e=_0x57ac45;if(_0x71927a['response']===!![]){var _0x5236d2=_0x4fb01e(0x277)+_0x514ecf+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2867ce+_0x4fb01e(0x1e2)+_0x198857+'\x22>'+_0x86b70c+_0x4fb01e(0x220)+_0x8c1f+' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x174429+_0x4fb01e(0x224);$('#list-nopol')[_0x4fb01e(0x268)](_0x5236d2),console[_0x4fb01e(0x28c)]('Berhasil\x20menambahkan\x20'+_0x2867ce),_0x4a43b2(),$(_0x4fb01e(0x26b))[_0x4fb01e(0x258)](''),$('#jenisVehicle')['val'](''),$(_0x4fb01e(0x280))['val'](''),$(_0x4fb01e(0x222))['val']('');}else $(_0x4fb01e(0x26b))[_0x4fb01e(0x290)](_0x4fb01e(0x1f2)),$('.nopol-add')[_0x4fb01e(0x27c)](_0x4fb01e(0x22c))['text'](_0x71927a[_0x4fb01e(0x1ee)])[_0x4fb01e(0x279)](),console[_0x4fb01e(0x28c)](_0x71927a[_0x4fb01e(0x1ee)]);},'error':function(_0x5486c8){const _0x4dbff3=_0x57ac45;Swal[_0x4dbff3(0x1f0)]({'icon':_0x4dbff3(0x1e1),'title':'Gagal\x20memeriksa','text':_0x5486c8[_0x4dbff3(0x21a)]?.[_0x4dbff3(0x1ee)]||'Terjadi\x20kesalahan\x20saat\x20memeriksa\x20nopol'});}});}),$(_0x2c7e71(0x21c))['on']('keydown',function(_0x1d5cb8){const _0x199029=_0x2c7e71;var _0x326078=$(_0x199029(0x21c))['val']()[_0x199029(0x254)]();_0x1d5cb8[_0x199029(0x271)]===_0x199029(0x286)&&(_0x1d5cb8[_0x199029(0x28d)](),$(_0x199029(0x27b))['focus']());}),$('.nourut')['on']('keydown',function(_0x22a2d6){const _0x45f8d4=_0x2c7e71;if(_0x22a2d6['key']===_0x45f8d4(0x286)){_0x22a2d6[_0x45f8d4(0x28d)]();var _0x2a926d=$(_0x45f8d4(0x21c))[_0x45f8d4(0x258)]()[_0x45f8d4(0x254)](),_0x44d163=$(_0x45f8d4(0x27b))['val']()['trim'](),_0x4c68aa='\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2a926d+_0x45f8d4(0x20d)+_0x44d163+_0x45f8d4(0x295);$(_0x45f8d4(0x25a))[_0x45f8d4(0x268)](_0x4c68aa),$(_0x45f8d4(0x21c))[_0x45f8d4(0x258)](''),$('.nourut')[_0x45f8d4(0x258)]('');}}),$(_0x2c7e71(0x25a))['on']('click',_0x2c7e71(0x1ea),function(){const _0x87b486=_0x2c7e71;$(this)['closest']('tr')[_0x87b486(0x231)]();}),$(_0x2c7e71(0x274))['on'](_0x2c7e71(0x278),_0x2c7e71(0x1ea),function(){const _0xe5c4e=_0x2c7e71;$(this)[_0xe5c4e(0x252)]('tr')[_0xe5c4e(0x231)](),_0x4a43b2();}),$(_0x2c7e71(0x242))['on'](_0x2c7e71(0x278),function(){const _0x33b402=_0x2c7e71;var _0x516570=$(this),_0x4df7f2=$(_0x33b402(0x296))[_0x33b402(0x294)](),_0x3be6af=[],_0x35cb89=[];$(_0x33b402(0x26e))[_0x33b402(0x262)](function(){const _0x23433d=_0x33b402;var _0x22a6ff=$(this),_0x53b7fd={'nopol':_0x22a6ff[_0x23433d(0x261)](_0x23433d(0x248))[_0x23433d(0x253)]()[_0x23433d(0x254)](),'vehicle':_0x22a6ff[_0x23433d(0x261)](_0x23433d(0x28a))[_0x23433d(0x273)](_0x23433d(0x20e)),'member':_0x22a6ff[_0x23433d(0x261)](_0x23433d(0x20f))[_0x23433d(0x253)]()[_0x23433d(0x254)](),'merk':_0x22a6ff[_0x23433d(0x261)](_0x23433d(0x260))[_0x23433d(0x253)]()['trim']()};_0x3be6af['push'](_0x53b7fd);}),console[_0x33b402(0x28c)](_0x3be6af),$('#list-card\x20tr')[_0x33b402(0x262)](function(){const _0x216b6a=_0x33b402;var _0x17c408=$(this),_0x3cfde4={'nocard':_0x17c408[_0x216b6a(0x261)](_0x216b6a(0x248))['text'](),'nourut':_0x17c408[_0x216b6a(0x261)](_0x216b6a(0x28a))[_0x216b6a(0x253)]()};_0x35cb89[_0x216b6a(0x245)](_0x3cfde4);}),console[_0x33b402(0x28c)](_0x35cb89);const _0x32b77b=_0x4df7f2,_0x58dfcf={},_0xee71c8=new URLSearchParams(_0x32b77b);_0xee71c8['forEach']((_0x2e4d63,_0xf75d2e)=>{_0x58dfcf[_0xf75d2e]=_0x2e4d63;}),console[_0x33b402(0x28c)](_0x58dfcf);var _0x5cab8c={'formData':_0x58dfcf,'nopolData':_0x3be6af,'cardNumber':_0x35cb89};_0x4a43b2(),_0x58dfcf[_0x33b402(0x23a)]=$(_0x33b402(0x283))[_0x33b402(0x258)]();if($(_0x33b402(0x1f5))[_0x33b402(0x22a)]()){const _0x48592b=_0x516570[_0x33b402(0x21b)]();$[_0x33b402(0x232)]({'url':$(_0x33b402(0x296))[_0x33b402(0x265)](_0x33b402(0x28e)),'type':_0x33b402(0x24b),'data':_0x5cab8c,'headers':{'X-CSRF-token':$(_0x33b402(0x235))['attr'](_0x33b402(0x1fd))},'beforeSend':function(){const _0x396535=_0x33b402;_0x516570[_0x396535(0x27d)]('disabled',!![])[_0x396535(0x21b)](' Menyimpan...');},'success':function(_0x1ece51){const _0x22fbdb=_0x33b402;$(_0x22fbdb(0x270))[_0x22fbdb(0x223)]('hide');if(_0x1ece51[_0x22fbdb(0x27e)]==!![])Swal[_0x22fbdb(0x1f0)]({'icon':'success','title':'Berhasil!!','text':_0x1ece51[_0x22fbdb(0x1ee)]||_0x22fbdb(0x281),'timer':0x1388,'showConfirmButton':!0x1})[_0x22fbdb(0x20c)](function(){const _0x37872f=_0x22fbdb;location[_0x37872f(0x25d)]();function _0x574389(){const _0x190a50=_0x37872f;let _0x2fa257=0x0;$('#ubah-member\x20#edit-list-nopol\x20tr')[_0x190a50(0x262)](function(){_0x2fa257+=parseFloat($(this)['data']('tarif'))||0x0;}),$(_0x190a50(0x29e))[_0x190a50(0x258)](_0x2fa257);}function _0x47f708(_0x2aab49){const _0xee5493=_0x37872f,_0x45e6ac=$(_0xee5493(0x25f))['data'](_0xee5493(0x251))||_0xee5493(0x225);return _0x45e6ac['replace'](_0xee5493(0x229),encodeURIComponent(_0x2aab49));}$(document)['on']('click',_0x37872f(0x289),function(){const _0x1a61cb=_0x37872f,_0x588744=typeof selectedRowData!==_0x1a61cb(0x246)&&selectedRowData?.[_0x1a61cb(0x233)]||$(this)['data']('id')||'';if(!_0x588744){Swal[_0x1a61cb(0x1f0)]({'icon':_0x1a61cb(0x1eb),'title':'Belum\x20pilih\x20data','text':_0x1a61cb(0x264)});return;}$[_0x1a61cb(0x232)]({'url':_0x47f708(_0x588744),'type':'GET','success':function(_0x8930a2){const _0x18b117=_0x1a61cb,_0x8d4f32=$(_0x18b117(0x23d));_0x8d4f32['find'](_0x18b117(0x214))[_0x18b117(0x258)](_0x8930a2[_0x18b117(0x233)]),_0x8d4f32[_0x18b117(0x261)](_0x18b117(0x22b))[_0x18b117(0x258)](_0x8930a2[_0x18b117(0x238)]??''),_0x8d4f32['find'](_0x18b117(0x25c))[_0x18b117(0x258)](_0x8930a2[_0x18b117(0x22f)]??''),_0x8d4f32[_0x18b117(0x261)](_0x18b117(0x1ef))[_0x18b117(0x258)](_0x8930a2[_0x18b117(0x226)]??''),_0x8d4f32['find'](_0x18b117(0x1fc))['val'](_0x8930a2[_0x18b117(0x206)]??''),_0x8d4f32[_0x18b117(0x261)]('[name=\x27harga\x27]')[_0x18b117(0x258)](_0x8930a2[_0x18b117(0x23a)]??0x0),_0x8d4f32[_0x18b117(0x261)](_0x18b117(0x29a))[_0x18b117(0x258)](_0x8930a2['jenis_langganan']??''),_0x8d4f32[_0x18b117(0x261)](_0x18b117(0x207))[_0x18b117(0x258)](_0x8930a2[_0x18b117(0x276)]??'');_0x8930a2[_0x18b117(0x215)]&&_0x8930a2[_0x18b117(0x227)]&&_0x8d4f32[_0x18b117(0x261)](_0x18b117(0x23c))[_0x18b117(0x258)](moment(_0x8930a2['awal'])[_0x18b117(0x21e)](_0x18b117(0x266))+_0x18b117(0x1fe)+moment(_0x8930a2[_0x18b117(0x227)])[_0x18b117(0x21e)](_0x18b117(0x266)));const _0x5083d4=$(_0x18b117(0x228))['empty']();(_0x8930a2[_0x18b117(0x255)]||[])['forEach'](_0x5a55f3=>{const _0x52d12e=_0x18b117;_0x5083d4[_0x52d12e(0x268)](_0x52d12e(0x277)+(_0x5a55f3[_0x52d12e(0x28f)]??0x0)+_0x52d12e(0x219)+(_0x5a55f3[_0x52d12e(0x240)]??'')+_0x52d12e(0x1e2)+(_0x5a55f3['jenis_mobil']??'')+'\x22>'+(_0x5a55f3[_0x52d12e(0x282)]??'')+' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x5a55f3[_0x52d12e(0x1e0)]??'')+_0x52d12e(0x220)+(_0x5a55f3[_0x52d12e(0x29b)]??'')+_0x52d12e(0x243));});const _0x56c587=$(_0x18b117(0x217))['empty']();(_0x8930a2['memberCard']||[])[_0x18b117(0x216)](_0x219554=>{const _0x232db6=_0x18b117;_0x56c587[_0x232db6(0x268)](_0x232db6(0x1f9)+(_0x219554['no_card']??'')+_0x232db6(0x220)+(_0x219554['no_urut']??'')+' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Hapus \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 ');}),_0x574389();},'error':function(_0x204a91){const _0x402add=_0x1a61cb;Swal[_0x402add(0x1f0)]({'icon':'error','title':_0x402add(0x23f),'text':_0x204a91[_0x402add(0x21a)]?.['message']||_0x402add(0x24f)});}});}),$(_0x37872f(0x239))['on'](_0x37872f(0x257),function(){const _0xce0ba8=_0x37872f,_0xa1548c=$(this)[_0xce0ba8(0x258)](),_0x5b73c8=$(_0xce0ba8(0x29d))[_0xce0ba8(0x20a)]()[_0xce0ba8(0x268)](' Pilih\x20Jenis ');(member||[])[_0xce0ba8(0x216)](_0x29ab16=>{const _0x56b7f8=_0xce0ba8;String(_0x29ab16[_0x56b7f8(0x1f4)])===String(_0xa1548c)&&_0x29ab16['id_mobil']!==0x0&&_0x5b73c8[_0x56b7f8(0x268)](''+_0x29ab16[_0x56b7f8(0x213)]+_0x56b7f8(0x1fe)+_0x29ab16[_0x56b7f8(0x28f)]+_0x56b7f8(0x269));});}),$(_0x37872f(0x210))['on'](_0x37872f(0x278),function(){const _0x25061d=_0x37872f,_0x5cdd75=$(_0x25061d(0x1e8))[_0x25061d(0x258)]()[_0x25061d(0x254)](),_0x2aba4b=$(_0x25061d(0x239))['val'](),_0x3b7758=$('#edit-jenisVehicle\x20option:selected')['text'](),_0x287577=$(_0x25061d(0x1e7))[_0x25061d(0x253)](),_0x5a027d=parseFloat($(_0x25061d(0x29d))['val']())||0x0,_0x3356e2=$(_0x25061d(0x256))[_0x25061d(0x258)]()[_0x25061d(0x254)]();$(_0x25061d(0x1e8))[_0x25061d(0x285)](_0x25061d(0x1f2));if(!_0x2aba4b){Swal[_0x25061d(0x1f0)]({'icon':_0x25061d(0x1eb),'title':_0x25061d(0x209),'text':_0x25061d(0x1ed)});return;}$[_0x25061d(0x232)]({'url':_0x25061d(0x23b),'type':_0x25061d(0x24b),'data':{'nopol':_0x5cdd75},'headers':{'X-CSRF-token':$(_0x25061d(0x235))[_0x25061d(0x265)](_0x25061d(0x1fd))},'success':function(_0x1fb095){const _0x3c02ee=_0x25061d;_0x1fb095[_0x3c02ee(0x29c)]===!![]?($(_0x3c02ee(0x228))[_0x3c02ee(0x268)](_0x3c02ee(0x277)+_0x5a027d+_0x3c02ee(0x219)+_0x5cdd75+_0x3c02ee(0x1e2)+_0x2aba4b+'\x22>'+_0x3b7758+_0x3c02ee(0x220)+_0x287577+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x3356e2+' \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Hapus \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'),$(_0x3c02ee(0x1e5))[_0x3c02ee(0x258)](''),$(_0x3c02ee(0x272))[_0x3c02ee(0x258)](''),_0x574389()):$('.enopol-add')['addClass']('is-invalid')['next'](_0x3c02ee(0x22c))[_0x3c02ee(0x253)](_0x1fb095[_0x3c02ee(0x1ee)])[_0x3c02ee(0x279)]();},'error':function(_0x49619d){const _0x40eaca=_0x25061d;Swal[_0x40eaca(0x1f0)]({'icon':_0x40eaca(0x1e1),'title':_0x40eaca(0x208),'text':_0x49619d[_0x40eaca(0x21a)]?.['message']||_0x40eaca(0x244)});}});}),$('.ekartu')['on'](_0x37872f(0x1fb),function(_0x4dade3){const _0x3e8ea9=_0x37872f;_0x4dade3[_0x3e8ea9(0x271)]===_0x3e8ea9(0x286)&&(_0x4dade3[_0x3e8ea9(0x28d)](),$(_0x3e8ea9(0x241))[_0x3e8ea9(0x211)]());}),$(_0x37872f(0x241))['on'](_0x37872f(0x1fb),function(_0x19c37d){const _0x2c59e7=_0x37872f;if(_0x19c37d[_0x2c59e7(0x271)]!=='Enter')return;_0x19c37d['preventDefault']();const _0x350713=$(_0x2c59e7(0x20b))['val']()[_0x2c59e7(0x254)](),_0xc3bf1e=$(_0x2c59e7(0x241))['val']()[_0x2c59e7(0x254)]();if(!_0x350713)return;$(_0x2c59e7(0x217))[_0x2c59e7(0x268)](_0x2c59e7(0x1e9)+_0x350713+_0x2c59e7(0x236)+_0xc3bf1e+_0x2c59e7(0x24d)),$(_0x2c59e7(0x1ff))[_0x2c59e7(0x258)]('');}),$(_0x37872f(0x228))['on']('click','.edit-del-nopol',function(){const _0x1503ec=_0x37872f;$(this)[_0x1503ec(0x252)]('tr')[_0x1503ec(0x231)](),_0x574389();}),$('#edit-list-card')['on'](_0x37872f(0x278),_0x37872f(0x26f),function(){const _0x8af292=_0x37872f;$(this)[_0x8af292(0x252)]('tr')[_0x8af292(0x231)]();}),$(_0x37872f(0x21f))['on']('click',function(){const _0x334d10=_0x37872f,_0x1cd22e=$(this),_0x5905e2=$(_0x334d10(0x214))[_0x334d10(0x258)]();if(!_0x5905e2){Swal[_0x334d10(0x1f0)]({'icon':_0x334d10(0x1eb),'title':_0x334d10(0x284),'text':_0x334d10(0x212)});return;}const _0x2dc0b1=[];$(_0x334d10(0x1e3))['each'](function(){const _0x4a304c=_0x334d10,_0x49a1b1=$(this);_0x2dc0b1[_0x4a304c(0x245)]({'nopol':_0x49a1b1[_0x4a304c(0x261)]('td:nth-child(1)')['text']()[_0x4a304c(0x254)](),'vehicle':_0x49a1b1['find']('td:nth-child(2)')['data']('value'),'member':_0x49a1b1[_0x4a304c(0x261)]('td:nth-child(3)')[_0x4a304c(0x253)]()[_0x4a304c(0x254)](),'merk':_0x49a1b1[_0x4a304c(0x261)](_0x4a304c(0x260))[_0x4a304c(0x253)]()[_0x4a304c(0x254)]()});});const _0x11502f=[];$(_0x334d10(0x250))[_0x334d10(0x262)](function(){const _0x54c0a5=_0x334d10,_0x52ab47=$(this),_0x4456ce=_0x52ab47[_0x54c0a5(0x261)](_0x54c0a5(0x248))[_0x54c0a5(0x253)]()['trim']();if(!_0x4456ce)return;_0x11502f[_0x54c0a5(0x245)]({'nocard':_0x4456ce,'nourut':_0x52ab47['find']('td:nth-child(2)')[_0x54c0a5(0x253)]()[_0x54c0a5(0x254)]()});});const _0x38f8bf={'nama':$('#ubah-member\x20[name=\x27nama\x27]')[_0x334d10(0x258)](),'address':$(_0x334d10(0x24a))[_0x334d10(0x258)](),'phone':$(_0x334d10(0x230))[_0x334d10(0x258)](),'member':$(_0x334d10(0x28b))[_0x334d10(0x258)](),'depart':$(_0x334d10(0x1f7))[_0x334d10(0x258)](),'note':$(_0x334d10(0x1f6))[_0x334d10(0x258)](),'harga':$(_0x334d10(0x221))['val'](),'daterange':$(_0x334d10(0x1e4))[_0x334d10(0x258)](),'nopolData':_0x2dc0b1,'cardNumber':_0x11502f},_0xe08a6e=_0x1cd22e[_0x334d10(0x21b)]();_0x1cd22e[_0x334d10(0x27d)](_0x334d10(0x24c),!![])[_0x334d10(0x21b)](_0x334d10(0x1e6)),$[_0x334d10(0x232)]({'url':location['origin']+'/transaksi/member/'+encodeURIComponent(_0x5905e2),'type':_0x334d10(0x1f3),'data':_0x38f8bf,'headers':{'X-CSRF-TOKEN':$(_0x334d10(0x235))[_0x334d10(0x265)](_0x334d10(0x1fd))},'success':function(_0x190647){const _0x4f85ef=_0x334d10;$(_0x4f85ef(0x23d))['modal'](_0x4f85ef(0x25e)),Swal[_0x4f85ef(0x1f0)]({'icon':_0x4f85ef(0x275),'title':_0x4f85ef(0x25b),'text':_0x190647['message']||_0x4f85ef(0x298)})['then'](()=>location[_0x4f85ef(0x25d)]());},'error':function(_0x2ce815){const _0xe72737=_0x334d10;Swal[_0xe72737(0x1f0)]({'icon':_0xe72737(0x1e1),'title':_0xe72737(0x293),'text':_0x2ce815['responseJSON']?.['message']||_0xe72737(0x22e)});},'complete':function(){const _0x3068df=_0x334d10;_0x1cd22e[_0x3068df(0x27d)](_0x3068df(0x24c),![])[_0x3068df(0x21b)](_0xe08a6e);}});});});else _0x1ece51['status']==![]&&Swal[_0x22fbdb(0x1f0)]({'icon':_0x22fbdb(0x1e1),'title':'Oops...','text':_0x1ece51[_0x22fbdb(0x1ee)]||_0x22fbdb(0x26a)});console[_0x22fbdb(0x28c)](_0x1ece51);},'error':function(_0x17217c,_0x792c2d,_0x4a442a){const _0x4fa030=_0x33b402;Swal[_0x4fa030(0x1f0)]({'icon':_0x4fa030(0x1e1),'title':_0x4fa030(0x293),'text':_0x17217c[_0x4fa030(0x21a)]?.[_0x4fa030(0x1ee)]||'Terjadi\x20kesalahan:\x20'+_0x4a442a});},'complete':function(){const _0x9241d=_0x33b402;_0x516570[_0x9241d(0x27d)](_0x9241d(0x24c),![])[_0x9241d(0x21b)](_0x48592b);}});}});}));
\ No newline at end of file
diff --git a/resources/views/layouts/partial/horizontal-menu.blade.php b/resources/views/layouts/partial/horizontal-menu.blade.php
index a8e6d68..085a984 100644
--- a/resources/views/layouts/partial/horizontal-menu.blade.php
+++ b/resources/views/layouts/partial/horizontal-menu.blade.php
@@ -64,6 +64,7 @@
Teransaksi Per Pintu
Transaksi Harian
Member Harian
+ Statistik Transaksi
diff --git a/resources/views/report/statistik.blade.php b/resources/views/report/statistik.blade.php
new file mode 100644
index 0000000..f7a397f
--- /dev/null
+++ b/resources/views/report/statistik.blade.php
@@ -0,0 +1,200 @@
+@extends('layouts.master')
+
+@section('styles')
+
+@endsection
+
+@section('content')
+
+
+
+
+
+
+
+
Statistik Transaksi
+
Periode berdasarkan tanggal masuk. Pecah per hari / minggu / bulan.
+
+
+
+
+
+
+
+
+ Periode
+ Transaksi
+ Keluar
+ Pendapatan
+ Tunai
+ Cashless
+
+
+
+ Pilih filter lalu klik Proses.
+
+
+
+
+
+
+
+
+
+
+@endsection
+
+@section('javascript')
+
+
+
+
+@endsection
diff --git a/resources/views/stiker/ubah-stiker.blade.php b/resources/views/stiker/ubah-stiker.blade.php
index c0f1bf5..1f0e8cf 100644
--- a/resources/views/stiker/ubah-stiker.blade.php
+++ b/resources/views/stiker/ubah-stiker.blade.php
@@ -22,6 +22,7 @@