Finalize all-report

This commit is contained in:
2026-08-04 15:51:35 +07:00
parent 73fff183d7
commit 9547bdca7c
21 changed files with 1246 additions and 819 deletions
+131
View File
@@ -0,0 +1,131 @@
$(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');
$('#search-button').on('click', function () {
// Ambil nilai dari selected option
var option = $('.select-option').val();
// Cek jika option yang dipilih bukan 'Pencarian Data...' yang berarti pilihan valid
if (option && option !== '') {
var inputField = $('.input-default:visible');
// Periksa apakah input tersebut kosong
if (inputField.length === 0 || inputField.val().trim() === '') {
// Jika kosong, tampilkan alert
alert('Harap masukkan ' + (option === 'nopol' ? 'No. Polisi' : option === 'nocard' ? 'No. Card' : option === 'nama' ? 'Nama' : option === 'notrans' ? 'No. Transaksi' : 'No. Transaksi'));
inputField.focus();
return; // Hentikan proses jika input kosong
}
}
console.log(option);
var formData = $('#search-form .input-default:visible').val();
console.log(formData);
$.ajax({
url: url,
type: "POST",
data: $('#search-form').serialize(),
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 = `
<tr class="mb-2"
data-notrans="${element.notrans}"
data-nama="${element.nama}"
data-alamat="${element.alamat}"
data-telp="${element.telepon}"
data-jmember="${element.jmember}"
data-dept="${element.dept}"
data-awal="${element.awal}"
data-akhir="${element.akhir}"
>
${rowIndex === 0 ? `<td rowspan="${rowspan}" class="p2" style="text-align: center;">${index + 1}</td>` : ''}
${rowIndex === 0 ? `<td rowspan="${rowspan}" class="p2" style="padding: 2px;">${element.notrans}</td>` : ''}
${rowIndex === 0 ? `<td rowspan="${rowspan}" style="padding: 2px;">${element.nama}</td>` : ''}
${rowIndex === 0 ? `<td rowspan="${rowspan}" style="padding: 2px;">${element.alamat}</td>` : ''}
${rowIndex === 0 ? `<td rowspan="${rowspan}" style="padding: 2px;">${element.telepon}</td>` : ''}
${rowIndex === 0 ? `<td rowspan="${rowspan}" style="padding: 2px;">${element.jmember}</td>` : ''}
${rowIndex === 0 ? `<td rowspan="${rowspan}" style="padding: 2px;">${element.dept}</td>` : ''}
${rowIndex === 0 ? `<td rowspan="${rowspan}" width="200" style="text-align: center; padding: 2px;">${element.awal} <br> ${element.akhir}</td>` : ''}
${rowIndex === 0 ? `<td rowspan="${rowspan}" class="p-2" style="padding: 2px;"> ${[...new Set(rows.map(r => `${r.nopol || 'No. Polisi tidak ada'} (${r.vehicle || ''})`))].join('<br>')} </td>` : ''}
${rowIndex === 0 ? `<td rowspan="${rowspan}" style="padding: 2px;">${[...new Set(rows.map(r => r.no_card || 'Tidak ada kartu'))].join('<br>')}</td>` : ''}
</tr>
`;
// ${rowIndex === 0 ? `<td rowspan="${rowspan}" class="p-2" style="text-align: center;">
// <button class="btn btn-secondary btn-xs extend-button mb-1" data-id="${element.notrans}">Extend</button>
// <button class="btn btn-primary btn-xs edit-button mb-1" data-id="${element.notrans}">Edit</button>
// <button class="btn btn-danger btn-xs delete-button mb-1" data-id="${element.notrans}">Delete</button>
// </td>` : ''}
tbody.append(rowHtml);
});
});
} else {
alert("Data tidak ditemukan.");
$('#example tbody').html(
`<tr>
<td colspan="11" style="text-align: center;"><p class="text-danger mt-3">Tidak ditemukan data</p></td>
<tr>`);
}
}
})
})
});
+279
View File
@@ -0,0 +1,279 @@
$(document).ready(function () {
const today = moment();
const startDate = moment(today).startOf("day").format("DD-MM-YYYY 00:00");
const endDate = moment(today).endOf("day").format("DD-MM-YYYY 23:59");
$(".tambah-member").validate({
rules: {
nama: {
required: true,
},
member: {
required: true,
},
depart: {
required: true,
},
},
messages: {
nama: {
required: "Masukkan nama member",
},
member: {
required: "Jenis Member belum di pilih",
},
depart: {
required: "Jenis Langganan belum di pilih",
},
},
// errorElement: 'span',
// errorPlacement: function (error, element) {
// error.addClass('invalid-feedback');
// // element.closest('.form-group').append(error);
// },
highlight: function (element, errorClass, validClass) {
$(element).addClass("is-invalid");
},
unhighlight: function (element, errorClass, validClass) {
$(element).removeClass("is-invalid");
},
});
// const startDate = moment().startOf("day"); // hari ini jam 00:00
// const endDate = moment().add(7, "days").endOf("day"); // +7 hari
$(".input-daterange-timepicker").daterangepicker(
// 👈 method-nya "daterangepicker", bukan "datepicker"
{
timePicker: true,
locale: {
format: "DD-MM-YYYY HH:mm",
},
timePicker24Hour: true,
timePickerSeconds: false,
buttonClasses: ["btn", "btn-sm"],
applyClass: "btn-danger",
cancelClass: "btn-inverse",
startDate: startDate,
endDate: endDate,
parentEl: "#modal-member", // 👈 daterangepicker pakai "parentEl", bukan "container"
},
function (startDate, endDate) {
console.log(
`Range selected: ${startDate.format("DD-MM-YYYY HH:mm")} s/d ${endDate.format("DD-MM-YYYY HH:mm")}`,
);
$(".input-daterange-timepicker").val(
`${startDate.format("DD-MM-YYYY HH:mm")} s/d ${endDate.format("DD-MM-YYYY HH:mm")}`,
);
},
);
// Set nilai awal dan akhir di input
$(".input-daterange-timepicker").val(`${startDate} - ${endDate}`);
// $('.awal').val(startDate);
// $('.akhir').val(endDate);
$("#jenisVehicle").on("change", function () {
var jenisMembers = member;
var vehicleSelected = $(this).val();
var $jenisMember = $("#jenis-member");
// console.log(jenisMembers);
$jenisMember.empty();
$jenisMember.append('<option selected value="">Pilih Jenis</option>');
jenisMembers.forEach((item) => {
if (item.id_mobil === vehicleSelected) {
if (item.id_mobil !== 0) {
$jenisMember.append(
`<option value="${item.tarif}">${item.jenis_langganan} - ${item.tarif} </option>`,
);
console.log($jenisMember);
} else {
$jenisMember.append(`<option value="">Tidak ada Pilihan </option>`);
}
}
});
});
$("#nopol-add").on("click", function () {
var nopol = $(".nopol-add").val().trim();
console.log(nopol);
// var vehicle = $('#jenisVehicle option:selected').text();
var vehicle = $("#jenisVehicle").val();
var vehicleName = $("#jenisVehicle option:selected").text();
var member = $("#jenis-member option:selected").text();
var merk = $(".merk").val().trim();
$(".nopol-add").removeClass("is-invalid"); // Hapus kelas jika ada sebelumnya
$(".nopol-add").next(".invalid-feedback").hide();
if (!vehicle) {
alert("Wajib pilih jenis kendaraan");
return;
}
$.ajax({
url: "stiker/checkField",
type: "POST",
data: { nopol: nopol },
headers: { "X-CSRF-token": $('meta[name="csrf-token"]').attr("content") },
success: function (r) {
if (r.response === true) {
var rowhtml = `
<tr>
<td class="text-center">${nopol}</td>
<td class="text-center" data-value="${vehicle}"">${vehicleName}</td>
<td class="text-center">${member}</td>
<td class="text-center">${merk}</td>
<td class="text-center p-1" style="text-align: center;">
<button class="btn btn-danger btn-xs delete-row">Hapus<buttion>
</td>
</tr>
`;
$("#list-nopol").append(rowhtml);
console.log("Berhasil menambahkan " + nopol);
$(".nopol-add").val("");
$("#jenisVehicle").val("");
$("#jenis-member").val("");
$(".merk").val("");
} else {
// var warn = `<div class="invalid-feedback">Nopol sudah ada</div>`;
$(".nopol-add").addClass("is-invalid"); // Tambahkan kelas invalid
$(".nopol-add").next(".invalid-feedback").text(r.message).show(); // Tampilkan pesan error
console.log(r.message);
}
},
error: function () {
alert("Terjadi kesalahan saat memeriksa nopol");
},
});
});
$(".kartu").on("keydown", function (e) {
var kartu = $(".kartu").val().trim();
if (e.key === "Enter") {
// $.ajax ({
// url: 'member/checkField',
// type: 'POST',
// data: {nocard: kartu},
// headers: {'X-CSRF-token': $('meta[name="csrf-token"]').attr('content')},
// success: function (r) {
// if (r.response === true) {
e.preventDefault();
$(".nourut").focus();
// }
// }
// });
}
});
$(".nourut").on("keydown", function (e) {
if (e.key === "Enter") {
e.preventDefault();
var nocard = $(".kartu").val().trim();
var nourut = $(".nourut").val().trim();
var rowHtml = `
<tr>
<td class="text-center strong">${nocard}</td>
<td class="text-center strong">${nourut}</td>
<td class="text-center p-2" >
<button class="btn btn-danger btn-xs delete-row">Hapus<buttion>
</td>
</tr>
`;
$("#list-card").append(rowHtml);
$(".kartu").val("");
$(".nourut").val("");
}
});
$("#list-card").on("click", ".delete-row", function () {
$(this).closest("tr").remove(); // Hapus baris yang diklik
});
$(".simpan").on("click", function () {
var tombol = $(this);
var formCollect = $("#add-member").serialize();
var collectNopol = [];
var cardCollect = [];
$("#list-nopol tr").each(function () {
var row = $(this);
var rowData = {
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(),
};
collectNopol.push(rowData);
});
console.log(collectNopol);
$("#list-card tr").each(function () {
var row = $(this);
var rowCard = {
nocard: row.find("td:nth-child(1)").text(),
nourut: row.find("td:nth-child(2)").text(),
};
cardCollect.push(rowCard);
});
console.log(cardCollect);
const formDataString = formCollect;
// Mengonversi query string menjadi objek
const formDataObj = {};
const searchParams = new URLSearchParams(formDataString);
searchParams.forEach((value, key) => {
formDataObj[key] = value;
});
console.log(formDataObj);
var allData = {
formData: formDataObj,
nopolData: collectNopol,
cardNumber: cardCollect,
};
if ($(".tambah-member").valid()) {
$.ajax({
url: $("#add-member").attr("action"),
type: "POST",
data: allData,
headers: { "X-CSRF-token": $('meta[name="csrf-token"]').attr("content") },
beforeSend: function () {
tombol.attr("disabled", true);
},
success: function (r) {
// alert('Data berhasil dikirim');
$("#modal-member").modal("hide");
if (r.response == true) {
Swal.fire({
title: "Berhasil!!",
text: "Member anda telah terdaftar !!",
timer: 5000,
showConfirmButton: !1,
}).then(function () {
// Reload halaman setelah SweetAlert ditutup
location.reload(); // Ini akan me-reload halaman
});
} else if (r.response == false) {
Swal.fire("Oops...", "Terjadi kendala !!", "silahkan hubungi admin", "error");
}
console.log(r);
},
error: function (xhr, status, error) {
alert("Terjadi kesalahan: " + error);
},
});
}
});
});