From 411d3653660841b32feb7939577ca0fc7bd3f867 Mon Sep 17 00:00:00 2001 From: pand03-CEO Date: Thu, 15 Oct 2026 14:20:34 +0700 Subject: [PATCH] Ubah/extend in-place data lama + search semua-field + statistik hari-minggu-bulan --- .../Parking/MemberStikerController.php | 218 +++- .../Report/ReportTransaksiController.php | 1096 +++++++++++++++++ public/js/member/member-register.js | 196 +++ public/js/stikerMember/member-extend.js | 12 +- public/js/stikerMember/member-register.js | 197 ++- .../jx/stikermember/member-register.parkq.jx | 2 +- .../layouts/partial/horizontal-menu.blade.php | 1 + resources/views/report/statistik.blade.php | 200 +++ resources/views/stiker/ubah-stiker.blade.php | 25 +- routes/web.php | 3 + 10 files changed, 1925 insertions(+), 25 deletions(-) create mode 100644 app/Http/Controllers/Parking/Report/ReportTransaksiController.php create mode 100644 resources/views/report/statistik.blade.php 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 ?? ""} + + `); + }); + const kl = $("#edit-list-card").empty(); + (r.memberCard || []).forEach((ro) => { + kl.append(` + + ${ro.no_card ?? ""} + ${ro.no_urut ?? ""} + + `); + }); + 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(''); + (member || []).forEach((item) => { + if (String(item.id_mobil) === String(vehicleSelected) && item.id_mobil !== 0) { + box.append(``); + } + }); + }); + + $("#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} + + `); + $(".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} + `); + $(".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 ?? ""} + + `); + }); + const kl = $("#edit-list-card").empty(); + (r.memberCard || []).forEach((ro) => { + kl.append(` + + ${ro.no_card ?? ""} + ${ro.no_urut ?? ""} + + `); + }); + 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(''); + (member || []).forEach((item) => { + if (String(item.id_mobil) === String(vehicleSelected) && item.id_mobil !== 0) { + box.append(``); + } + }); + }); + + $("#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} + + `); + $(".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} + `); + $(".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 @@ + 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. +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
Transaksi
-
+
Keluar
-
+
Pendapatan
-
+
Tunai
-
+
Cashless
-
+
+
+
+ + + + + + + + + + + + + + +
PeriodeTransaksiKeluarPendapatanTunaiCashless
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 @@
@csrf @method('PUT') +
@@ -63,7 +64,7 @@
- @foreach ($memberSelect as $member) @@ -74,7 +75,7 @@
- @foreach ($departmentSelect as $department) @@ -104,12 +105,12 @@
- +
Nomer Polisi sudah ada
- @foreach ($vehicleSelect as $kendaraan) @@ -118,16 +119,16 @@
-
- +
- +

@@ -140,7 +141,7 @@ - +
Aksi
@@ -152,11 +153,11 @@
- +
- +

{{--
--}} @@ -168,7 +169,7 @@ Aksi - + {{--
--}} @@ -181,7 +182,7 @@
diff --git a/routes/web.php b/routes/web.php index c5de9b1..cf3b6a7 100644 --- a/routes/web.php +++ b/routes/web.php @@ -105,6 +105,7 @@ Route::post("stiker/data", [MemberStikerController::class, "getMember"])->name("getMember"); // ->where(["stiker"] => '.*'); Route::post("stiker/checkField", [MemberStikerController::class, "checkField"]); + Route::post("stiker/extend-old", [MemberStikerController::class, "extendOld"])->name("stiker.extendOld"); Route::resource("member", MemberStikerController::class); }); @@ -118,6 +119,8 @@ ); Route::get("/laporan-per-pintu", [ReportTransaksiController::class, "byGate"]); Route::get("/laporan-per-pintu/data", [ReportTransaksiController::class, "gateData"])->name("gateData"); + Route::get("/statistik", [ReportTransaksiController::class, "statistik"])->name("statistik"); + Route::get("/statistik/data", [ReportTransaksiController::class, "statistikData"])->name("statistik.data"); Route::prefix("stiker")->group(function () { Route::get("/harian", [LaporanStiker::class, "laporanStikerHarian"]);