$(document).ready(function () { $(document).on("change", ".form-select", function () { if ($("option:selected", this).val() == "") { $(".nama").css("display", "none"); $(".nopol").css("display", "none"); $(".nocard").css("display", "none"); $(".notrans").css("display", "none"); // $(".site").val(''); } else if ($("option:selected", this).val() == "nama") { $(".nama").css("display", "block"); $(".nopol").css("display", "none"); $(".nocard").css("display", "none"); $(".notrans").css("display", "none"); $(".input-default").val(""); } else if ($("option:selected", this).val() == "nopol") { $(".nama").css("display", "none"); $(".nopol").css("display", "block"); $(".nocard").css("display", "none"); $(".notrans").css("display", "none"); $(".input-default").val(""); } else if ($("option:selected", this).val() == "nocard") { $(".nama").css("display", "none"); $(".nopol").css("display", "none"); $(".nocard").css("display", "block"); $(".notrans").css("display", "none"); $(".input-default").val(""); } else if ($("option:selected", this).val() == "notrans") { $(".nama").css("display", "none"); $(".nopol").css("display", "none"); $(".nocard").css("display", "none"); $(".notrans").css("display", "block"); $(".input-default").val(""); } else { $(".position").css("display", "none"); $(".level-area").css("display", "none"); $(".input-default").val(""); } }); var url = $("#example").data("url"); function syncPeriode() { const aktif = $("#isActive").is(":checked"); $("#periode").prop("disabled", false); $("#periode-hint").text( aktif ? "Aktif + periode: langganan berlaku saat ini dalam rentang tanggal." : "Nonaktif: saring berdasarkan tanggal atau tgl diubah.", ); } $("#isActive").on("change", syncPeriode); // Satu input periode (date-range) -> isi hidden tgl_awal/tgl_akhir (YYYY-MM-DD). $(".input-daterange-filter").daterangepicker( { autoUpdateInput: false, locale: { format: "DD-MM-YYYY", cancelLabel: "Hapus" }, parentEl: "#search-form", }, ); $(".input-daterange-filter").on("apply.daterangepicker", function (ev, picker) { $(this).val(picker.startDate.format("DD-MM-YYYY") + " - " + picker.endDate.format("DD-MM-YYYY")); $("#tgl-awal").val(picker.startDate.format("YYYY-MM-DD")); $("#tgl-akhir").val(picker.endDate.format("YYYY-MM-DD")); }); $(".input-daterange-filter").on("cancel.daterangepicker", function () { $(this).val(""); $("#tgl-awal").val(""); $("#tgl-akhir").val(""); }); syncPeriode(); $("#search-button").on("click", function () { let searchBy = $("#search-by").val(); let searchValue = $("#search-value").val().trim(); let memberType = $("#member-type").val(); let department = $("#department").val(); let vehicle = $("#vehicle").val(); let isActive = $("#isActive").is(":checked") ? 1 : 0; // ========================= // VALIDASI PENCARIAN // ========================= if (searchBy !== "" && searchValue === "") { let label = { nama: "Nama", alamat: "Alamat", nopol: "No. Polisi", nocard: "No. Card", notrans: "No. Transaksi", }; let message = "Harap masukkan " + (label[searchBy] || "kata kunci"); // Highlight input $("#search-value").addClass("is-invalid").focus(); // Tampilkan pesan $("#search-status").removeClass("text-success").addClass("text-danger").text(message); $("#search-value").focus(); return; } let searchData = { searchBy: searchBy, searchValue: searchValue, memberType: memberType, department: department, vehicle: vehicle, isActive: isActive, tgl_awal: $("#tgl-awal").val(), tgl_akhir: $("#tgl-akhir").val(), }; // ========================= // AJAX // ========================= const btn = $("#search-button"); const btnHtml = btn.html(); btn.prop("disabled", true).html('Mencari...'); $("#example tbody").html( `Memuat data...`, ); $.ajax({ url: url, type: "POST", // data: $("#search-form").serialize(), data: searchData, headers: { "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content") }, dataType: "json", success: function (response) { var tbody = $("#example tbody"); tbody.empty(); if (response.length !== 0) { // Kelompokkan data berdasarkan notrans var groupedData = {}; response.forEach((element) => { if (!groupedData[element.notrans]) { groupedData[element.notrans] = []; } groupedData[element.notrans].push(element); }); // Generate HTML Object.keys(groupedData).forEach((notrans, index) => { var rows = groupedData[notrans]; var rowspan = rows.length; rows.forEach((element, rowIndex) => { var rowHtml = ` ${rowIndex === 0 ? `${index + 1}` : ""} ${rowIndex === 0 ? oldAdmin(notrans, rowspan) : ""} ${rowIndex === 0 ? `${element.nama}` : ""} ${rowIndex === 0 ? `${element.alamat}` : ""} ${rowIndex === 0 ? `${element.telepon}` : ""} ${rowIndex === 0 ? `${element.jmember}` : ""} ${rowIndex === 0 ? `${element.dept}` : ""} ${rowIndex === 0 ? `${element.awal}
${element.akhir}` : ""} ${rowIndex === 0 ? ` ${[...new Set(rows.map((r) => `${r.nopol || "No. Polisi tidak ada"} (${r.vehicle || ""})`))].join("
")} ` : ""} ${rowIndex === 0 ? `${[...new Set(rows.map((r) => r.no_card || "Tidak ada kartu"))].join("
")}` : ""} `; // ${rowIndex === 0 ? ` // // // // ` : ''} tbody.append(rowHtml); }); }); } else { // alert("Data tidak ditemukan."); $("#example tbody").html( `

Tidak ditemukan data

`, ); } }, error: function (xhr) { let msg = "Gagal memuat data."; if (xhr.status === 422 && xhr.responseJSON?.message) msg = xhr.responseJSON.message; $("#example tbody").html( `${msg}`, ); Swal.fire({icon: "error", title: "Pencarian gagal", text: msg}); }, complete: function () { btn.prop("disabled", false).html(btnHtml); }, }); }); $("#btnDelete").on("click", function () { const notrans = typeof selectedRowData !== "undefined" ? selectedRowData?.notrans : null; if (!notrans) { Swal.fire({icon: "warning", title: "Belum pilih data", text: "Klik salah satu baris transaksi dulu."}); return; } const base = $("#btnDelete").data("destroy"); Swal.fire({ title: "Hapus transaksi?", text: `${notrans} akan diarsipkan ke transaksi_stiker_res.`, icon: "warning", showCancelButton: true, confirmButtonText: "Ya, arsipkan", cancelButtonText: "Batal", confirmButtonColor: "#dc3545", showLoaderOnConfirm: true, preConfirm: () => $.ajax({ url: base + "/" + encodeURIComponent(notrans), type: "DELETE", headers: { "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content") }, }).catch((xhr) => { Swal.showValidationMessage(xhr.responseJSON?.message || "Gagal menghapus data."); }), }).then((result) => { if (result.isConfirmed && result.value) { Swal.fire({icon: "success", title: "Berhasil", text: "Data diarsipkan.", timer: 1500, showConfirmButton: false}).then(() => { $("#rowActions").addClass("d-none"); $("#search-button").click(); }); } }); }); function oldAdmin(value, rowSpan) { let hasSlash = value.includes("/"); if (hasSlash) { return ` ${value} `; } return ` ${value} `; } });