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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
View File
+375 -177
View File
@@ -37,10 +37,38 @@ function printPDF(data) {
// ===== SUSUN BODY TABEL =====
const vehicleBody = [];
let totalTunaiJml = 0,
totalTunaiNilai = 0;
let totalNonTunaiJml = 0,
totalNonTunaiNilai = 0;
// init print nontunai
let vehicleCashCasualJml = 0,
vehicleCashCasualNilai = 0;
let vehicleCashLostJml = 0,
vehicleCashLostNilai = 0;
let vehicleCashPassJml = 0,
vehicleCashPassNilai = 0;
let vehicleCashManualJml = 0,
vehicleCashManualNilai = 0;
let vehicleCashManualMixJml = 0,
vehicleCashManualMixNilai = 0;
let vehicleCashMasalahJml = 0,
vehicleCashMasalahNilai = 0;
let vehicleCashTotal = 0;
// init print nontunai
let vehicleCashlessCasualJml = 0,
vehicleCashlessCasualNilai = 0;
let vehicleCashlessLostJml = 0,
vehicleCashlessLostNilai = 0;
let vehicleCashlessPassJml = 0,
vehicleCashlessPassNilai = 0;
let vehicleCashlessManualJml = 0,
vehicleCashlessManualNilai = 0;
let vehicleCashlessManualMixJml = 0,
vehicleCashlessManualMixNilai = 0;
let vehicleCashlessMasalahJml = 0,
vehicleCashlessMasalahNilai = 0;
let vehicleCashlessTotal = 0;
let grandTotal = 0;
data.vehicle.tunai.forEach(function (cash) {
@@ -60,15 +88,18 @@ function printPDF(data) {
const tLost = cash.keluar.lost;
const tMember = cash.keluar.member;
const tManual = cash.keluar.manual;
const tManualMix = cash.keluar.manualmix ?? { jumlah: 0, income: 0 };
const tMasalah = cash.keluar.masalah ?? { jumlah: 0, income: 0 };
const totalTunai = cash.totalCash || 0;
const vehicleCashTotal = cash.totalCash || 0;
const nCasual = cashless.keluar.casual;
const nLost = cashless.keluar.lost;
const nMember = cashless.keluar.member;
const nManual = cashless.keluar.manual;
const nManualMix = cashless.keluar.manualmix ?? { jumlah: 0, income: 0 };
const nMasalah = cashless.keluar.masalah ?? { jumlah: 0, income: 0 };
const totalNonTunai = cashless.totalCashless || 0;
const vehicleCashlessTotal = cashless.totalCashless || 0;
// baris TUNAI
vehicleBody.push([
@@ -84,8 +115,8 @@ function printPDF(data) {
rupiah(tMember.income),
tManual.jumlah,
rupiah(tManual.income),
0,
0,
tManualMix.jumlah || 0,
rupiah(tManualMix.income),
tMasalah.jumlah,
rupiah(tMasalah.income),
{ content: rupiah(cash.totalCash), styles: { valign: "middle", fontStyle: "bold" } },
@@ -110,8 +141,8 @@ function printPDF(data) {
nManual.jumlah,
rupiah(nManual.income),
0,
0,
tManualMix.jumlah,
rupiah(tManualMix.income),
nMasalah.jumlah,
rupiah(nMasalah.income),
@@ -119,67 +150,107 @@ function printPDF(data) {
{ content: rupiah(cashless.totalCashless), styles: { valign: "middle", fontStyle: "bold" } },
]);
totalTunaiJml += tCasual.jumlah + tLost.jumlah + tMember.jumlah + tManual.jumlah + tMasalah.jumlah;
totalTunaiNilai += cash.totalCash || 0;
totalNonTunaiJml += nCasual.jumlah + nLost.jumlah + nMember.jumlah + nManual.jumlah + nMasalah.jumlah;
totalNonTunaiNilai += cashless.totalCashless || 0;
grandTotal += (cash.totalCash || 0) + (cashless.totalCashless || 0);
// init sum cash
vehicleCashCasualJml += tCasual.jumlah;
vehicleCashCasualNilai += tCasual.income || 0;
vehicleCashLostJml += tLost.jumlah;
vehicleCashLostNilai += tLost.income;
vehicleCashPassJml += tMember.jumlah;
vehicleCashPassNilai += tMember.income;
vehicleCashManualJml += tManual.jumlah;
vehicleCashManualNilai += tManual.income;
vehicleCashManualMixJml += tManualMix.jumlah;
vehicleCashManualMixNilai += tManualMix.income;
vehicleCashMasalahJml += tMasalah.jumlah;
vehicleCashMasalahNilai += tMasalah.income;
// totalTunaiNilai = "X";
// init sum cashless
vehicleCashlessCasualJml += nCasual.jumlah;
vehicleCashlessCasualNilai += nCasual.income || 0;
vehicleCashlessLostJml += nLost.jumlah;
vehicleCashlessLostNilai += nLost.income;
vehicleCashlessPassJml += nMember.jumlah;
vehicleCashlessPassNilai += nMember.income;
vehicleCashlessManualJml += nManual.jumlah;
vehicleCashlessManualNilai += nManual.income;
vehicleCashlessManualMixJml += nManualMix.jumlah;
vehicleCashlessManualMixNilai += nManualMix.income;
vehicleCashlessMasalahJml += nMasalah.jumlah;
vehicleCashlessMasalahNilai += nMasalah.income;
// init sum grandTotal
subTotalCash =
vehicleCashCasualNilai +
vehicleCashLostNilai +
vehicleCashPassNilai +
vehicleCashManualNilai +
vehicleCashlessManualMixNilai +
vehicleCashlessMasalahNilai;
subTotalCashless =
vehicleCashlessCasualNilai +
vehicleCashlessLostNilai +
vehicleCashlessPassNilai +
vehicleCashlessManualNilai +
vehicleCashlessManualMixNilai +
vehicleCashlessMasalahNilai;
grandTotal = (subTotalCash || 0) + (subTotalCashless || 0);
});
// baris TOTAL & GRAND TOTAL
vehicleBody.push([
{ content: "TOTAL", rowSpan: 2, styles: { fontStyle: "bold" } },
{ content: "SUB TOTAL\nKENDARAAN", rowSpan: 2, styles: { fontStyle: "bold" } },
{ content: "Tunai", styles: { fillColor: [40, 167, 69], textColor: 255, fontStyle: "bold" } },
"",
"",
{ content: totalTunaiJml, styles: { fontStyle: "bold" } },
rupiah(totalTunaiNilai),
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
rupiah(totalTunaiNilai),
vehicleCashCasualJml,
rupiah(vehicleCashCasualNilai),
vehicleCashLostJml,
rupiah(vehicleCashLostNilai),
vehicleCashPassJml,
rupiah(vehicleCashPassNilai),
vehicleCashManualJml,
rupiah(vehicleCashManualNilai),
vehicleCashManualMixJml,
rupiah(vehicleCashManualMixNilai),
vehicleCashMasalahJml,
rupiah(vehicleCashMasalahNilai),
rupiah(subTotalCash),
]);
vehicleBody.push([
{ content: "NON TUNAI", styles: { fillColor: [255, 193, 7], fontStyle: "bold" } },
"",
"",
{ content: totalNonTunaiJml, styles: { fontStyle: "bold" } },
rupiah(totalNonTunaiNilai),
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
rupiah(totalNonTunaiNilai),
{ content: vehicleCashlessCasualJml, styles: { fontStyle: "bold" } },
rupiah(vehicleCashlessCasualNilai),
vehicleCashlessLostJml,
rupiah(vehicleCashlessLostNilai),
vehicleCashlessPassJml,
rupiah(vehicleCashlessPassNilai),
vehicleCashlessManualJml,
rupiah(vehicleCashlessManualNilai),
vehicleCashlessManualMixJml,
rupiah(vehicleCashlessManualMixNilai),
vehicleCashlessMasalahJml,
rupiah(vehicleCashlessMasalahNilai),
rupiah(subTotalCashless),
]);
vehicleBody.push([
{ content: "GRAND TOTAL", colSpan: 4, styles: { fontStyle: "bold", halign: "center" } },
{ content: totalTunaiJml + totalNonTunaiJml, styles: { fontStyle: "bold" } },
{ content: rupiah(totalTunaiNilai + totalNonTunaiNilai), styles: { fontStyle: "bold" } },
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
{ content: "GRAND TOTAL\nKENDARAAN", colSpan: 4, styles: { fontStyle: "bold", halign: "center" } },
{ content: vehicleCashCasualJml + vehicleCashlessCasualJml, styles: { fontStyle: "bold" } }, //Jumlah Casual
rupiah(vehicleCashCasualNilai + vehicleCashlessCasualNilai), //Income Casual
{ content: vehicleCashLostJml + vehicleCashlessLostJml, styles: { fontStyle: "bold" } }, //Jumlah Lost
rupiah(vehicleCashLostNilai + vehicleCashlessLostNilai), //Income Tiket Hilang
vehicleCashPassJml + vehicleCashlessPassJml, //Jumlah Member
rupiah(vehicleCashPassNilai + vehicleCashlessPassNilai), //Income Member
vehicleCashManualJml + vehicleCashlessManualJml, //Jumlah Tiket Manual
rupiah(vehicleCashManualNilai + vehicleCashlessManualNilai), //Income Tiket Manual
vehicleCashManualMixJml + vehicleCashlessManualMixJml,
rupiah(vehicleCashManualMixNilai + vehicleCashlessManualMixNilai),
vehicleCashMasalahJml + vehicleCashlessMasalahJml,
rupiah(vehicleCashMasalahNilai + vehicleCashlessMasalahNilai),
{ content: rupiah(grandTotal), styles: { fontStyle: "bold" } },
]);
@@ -232,28 +303,41 @@ function printPDF(data) {
(on.overNight || 0) + (on.onExpired || 0),
]);
// doc.setFont("helvetica", "bold");
// doc.setFontSize(8);
// doc.text("Kendaraan yang masih menginap (Over Night)", 14, doc.lastAutoTable.finalY + 10);
// doc.autoTable({
// head: [["Jenis Kend", "Menginap", "ON (Expired)", "Total"]],
// body: onBody,
// startY: doc.lastAutoTable.finalY + 13,
// theme: "grid",
// styles: { fontSize: 7, cellPadding: 1 },
// headStyles: { fontSize: 8, fillColor: [230, 230, 230], textColor: 0 },
// tableWidth: 100,
// });
//==================================================================
//===================== Print table officer ========================
//==================================================================
const officerStartY = doc.lastAutoTable.finalY + 15;
const officerBody = [];
let ptotalTunaiJml = 0,
ptotalTunaiNilai = 0;
// init print nont tunai
let officerCashCasualJml = 0,
officerCashCasualNilai = 0;
let officerCashLostJml = 0,
officerCashLostNilai = 0;
let officerCashPassJml = 0,
officerCashPassNilai = 0;
let officerCashManualJml = 0,
officerCashManualNilai = 0;
let officerCashManualMixJml = 0,
officerCashManualMixNilai = 0;
let officerCashMasalahJml = 0,
officerCashMasalahNilai = 0;
// init print nont tunai
let ptotalNonTunaiJml = 0,
ptotalNonTunaiNilai = 0;
let officerCashlessCasualJml = 0,
officerCashlessCasualNilai = 0;
let officerCashlessLostJml = 0,
officerCashlessLostNilai = 0;
let officerCashlessPassJml = 0,
officerCashlessPassNilai = 0;
let officerCashlessManualJml = 0,
officerCashlessManualNilai = 0;
let officerCashlessManualMixJml = 0,
officerCashlessManualMixNilai = 0;
let officerCashlessMasalahJml = 0,
officerCashlessMasalahNilai = 0;
let pgrandTotal = 0;
data.officer.tunai.forEach(function (cash) {
@@ -274,13 +358,15 @@ function printPDF(data) {
const tMember = cash.keluar.member;
const tManual = cash.keluar.manual;
const tMasalah = cash.keluar.masalah ?? { jumlah: 0, income: 0 };
const tManualMix = cash.keluar.manualmix ?? { jumlah: 0, income: 0 };
const totalTunai = cash.totalCash || 0;
const oCasual = cashless.keluar.casual;
const nCasual = cashless.keluar.casual;
const nLost = cashless.keluar.lost;
const nMember = cashless.keluar.member;
const nManual = cashless.keluar.manual;
const nMasalah = cashless.keluar.masalah ?? { jumlah: 0, income: 0 };
const nManualMix = cashless.keluar.manualmix ?? { jumlah: 0, income: 0 };
const totalNonTunai = cashless.totalCashless || 0;
// baris TUNAI
@@ -315,8 +401,8 @@ function printPDF(data) {
cash.total,
cashless.nonTunaiOut,
oCasual.jumlah,
rupiah(oCasual.income),
nCasual.jumlah,
rupiah(nCasual.income),
nLost.jumlah,
cash.totalCashless,
@@ -336,68 +422,107 @@ function printPDF(data) {
{ content: rupiah(cashless.totalCashless), styles: { valign: "middle", fontStyle: "bold" } },
]);
ptotalTunaiJml += tCasual.jumlah + tLost.jumlah + tMember.jumlah + tManual.jumlah + tMasalah.jumlah;
ptotalTunaiNilai += cash.totalCash || 0;
ptotalNonTunaiJml += oCasual.jumlah + nLost.jumlah + nMember.jumlah + nManual.jumlah + nMasalah.jumlah;
ptotalNonTunaiJml += nCasual.jumlah + nLost.jumlah + nMember.jumlah + nManual.jumlah + nMasalah.jumlah;
ptotalNonTunaiNilai += cashless.totalCashless || 0;
pgrandTotal += (cash.totalCash || 0) + (cashless.totalCashless || 0);
officerCashCasualJml += tCasual.jumlah;
officerCashCasualNilai += tCasual.income || 0;
officerCashLostJml += tLost.jumlah;
officerCashLostNilai += tLost.income;
officerCashPassJml += tMember.jumlah;
officerCashPassNilai += tMember.income;
officerCashManualJml += tManual.jumlah;
officerCashManualNilai += tManual.income;
officerCashManualMixJml += tManualMix.jumlah;
officerCashManualMixNilai += tManualMix.income;
officerCashMasalahJml += tMasalah.jumlah;
officerCashMasalahNilai += tMasalah.income;
// init sum cashless
officerCashlessCasualJml += nCasual.jumlah;
officerCashlessCasualNilai += nCasual.income || 0;
officerCashlessLostJml += nLost.jumlah;
officerCashlessLostNilai += nLost.income;
officerCashlessPassJml += nMember.jumlah;
officerCashlessPassNilai += nMember.income;
officerCashlessManualJml += nManual.jumlah;
officerCashlessManualNilai += nManual.income;
officerCashlessManualMixJml += nManualMix.jumlah;
officerCashlessManualMixNilai += nManualMix.income;
officerCashlessMasalahJml += nMasalah.jumlah;
officerCashlessMasalahNilai += nMasalah.income;
// sub total cash/ init sum grandTotal
subTotalCash =
officerCashCasualNilai +
officerCashLostNilai +
officerCashPassNilai +
officerCashManualNilai +
officerCashlessManualMixNilai +
officerCashlessMasalahNilai;
subTotalCashless =
officerCashlessCasualNilai +
officerCashlessLostNilai +
officerCashlessPassNilai +
officerCashlessManualNilai +
officerCashlessManualMixNilai +
officerCashlessMasalahNilai;
});
// baris TOTAL & GRAND TOTAL
officerBody.push([
{ content: "TOTAL", rowSpan: 2, styles: { fontStyle: "bold" } },
{ content: "SUB TOTAL\NPer Petugas", rowSpan: 2, styles: { fontStyle: "bold" } },
{ content: "Tunai", styles: { fillColor: [40, 167, 69], textColor: 255, fontStyle: "bold" } },
"",
"",
{ content: ptotalTunaiJml, styles: { fontStyle: "bold" } },
rupiah(ptotalTunaiNilai),
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
rupiah(ptotalTunaiNilai),
{ content: officerCashCasualJml, styles: { fontStyle: "bold" } },
rupiah(officerCashCasualNilai),
officerCashLostJml,
rupiah(officerCashLostNilai),
officerCashPassJml,
rupiah(officerCashPassNilai),
officerCashManualJml,
rupiah(officerCashManualNilai),
officerCashManualMixJml,
rupiah(officerCashManualMixNilai),
officerCashMasalahJml,
rupiah(officerCashMasalahNilai),
rupiah(subTotalCash),
]);
officerBody.push([
{ content: "NON TUNAI", styles: { fillColor: [255, 193, 7], fontStyle: "bold" } },
"",
"",
{ content: ptotalNonTunaiJml, styles: { fontStyle: "bold" } },
rupiah(ptotalNonTunaiNilai),
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
rupiah(ptotalNonTunaiNilai),
{ content: officerCashlessCasualJml, styles: { fontStyle: "bold" } },
rupiah(officerCashlessCasualNilai),
officerCashlessLostJml,
rupiah(officerCashlessLostNilai),
officerCashlessPassJml,
rupiah(officerCashlessPassNilai),
officerCashlessManualJml,
rupiah(officerCashlessManualNilai),
officerCashlessManualMixJml,
rupiah(officerCashlessManualMixNilai),
officerCashlessMasalahJml,
rupiah(officerCashlessMasalahNilai),
rupiah(subTotalCashless),
]);
officerBody.push([
{ content: "GRAND TOTAL", colSpan: 4, styles: { fontStyle: "bold", halign: "center" } },
{ content: ptotalTunaiJml + ptotalNonTunaiJml, styles: { fontStyle: "bold" } },
{ content: rupiah(ptotalTunaiNilai + ptotalNonTunaiNilai), styles: { fontStyle: "bold" } },
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
// "",
// "",
{ content: rupiah(pgrandTotal), styles: { fontStyle: "bold" } },
{ content: "GRAND TOTAL\nPETUGAS", colSpan: 4, styles: { fontStyle: "bold", halign: "center" } },
{ content: officerCashCasualJml + officerCashlessCasualJml, styles: { fontStyle: "bold" } }, //Jumlah Casual
rupiah(officerCashCasualNilai + officerCashlessCasualNilai), //Income Casual
{ content: officerCashLostJml + officerCashlessLostJml, styles: { fontStyle: "bold" } }, //Jumlah Lost
rupiah(officerCashLostNilai + officerCashlessLostNilai), //Income Tiket Hilang
officerCashPassJml + officerCashlessPassJml, //Jumlah Member
rupiah(officerCashPassNilai + officerCashlessPassNilai), //Income Member
officerCashManualJml + officerCashlessManualJml, //Jumlah Tiket Manual
rupiah(officerCashManualNilai + officerCashlessManualNilai), //Income Tiket Manual
officerCashManualMixJml + officerCashlessManualMixJml,
rupiah(officerCashManualMixNilai + officerCashlessManualMixNilai),
officerCashMasalahJml + officerCashlessMasalahJml,
rupiah(officerCashMasalahNilai + officerCashlessMasalahNilai),
{ content: rupiah(grandTotal), styles: { fontStyle: "bold" } },
]);
// ===== HEADER 2 BARIS (grouping) =====
@@ -438,7 +563,7 @@ function printPDF(data) {
doc.setFont("helvetica", "normal");
doc.setFontSize(9);
doc.text("Tanggal : " + (data.vehicle.date ?? "-"), pageWidth / 2, officerStartY - 2, { align: "center" });
doc.text("Tanggal : " + (data.officer.date ?? "-"), pageWidth / 2, officerStartY - 2, { align: "center" });
doc.text("By : " + (data.vehicle.reportTime ?? "-"), pageWidth - 14, officerStartY - 2, { align: "right" });
doc.autoTable({
@@ -457,10 +582,40 @@ function printPDF(data) {
//====================================
const paymentStartY = doc.lastAutoTable.finalY + 15;
const paymentBody = [];
let payTotalTunaiJml = 0,
payTotalTunaiNilai = 0;
let payTotalNonTunaiJml = 0,
payTotalNonTunaiNilai = 0;
// let payTotalTunaiJml = 0,
// payTotalTunaiNilai = 0;
// init print nont tunai
let paymentCashCasualJml = 0,
paymentCashCasualNilai = 0;
let paymentCashLostJml = 0,
paymentCashLostNilai = 0;
let paymentCashPassJml = 0,
paymentCashPassNilai = 0;
let paymentCashManualJml = 0,
paymentCashManualNilai = 0;
let paymentCashManualMixJml = 0,
paymentCashManualMixNilai = 0;
let paymentCashMasalahJml = 0,
paymentCashMasalahNilai = 0;
// init print nont tunai
// let ptotalNonTunaiJml = 0,
// ptotalNonTunaiNilai = 0;
let paymentCashlessCasualJml = 0,
paymentCashlessCasualNilai = 0;
let paymentCashlessLostJml = 0,
paymentCashlessLostNilai = 0;
let paymentCashlessPassJml = 0,
paymentCashlessPassNilai = 0;
let paymentCashlessManualJml = 0,
paymentCashlessManualNilai = 0;
let paymentCashlessManualMixJml = 0,
paymentCashlessManualMixNilai = 0;
let paymentCashlessMasalahJml = 0,
paymentCashlessMasalahNilai = 0;
// let payTotalNonTunaiJml = 0,
// payTotalNonTunaiNilai = 0;
let payGrandTotal = 0;
data.payment.tunai.forEach(function (cash) {
@@ -481,13 +636,15 @@ function printPDF(data) {
const tLost = cash.keluar.lost;
const tMember = cash.keluar.member;
const tManual = cash.keluar.manual;
const tManualMix = cash.keluar.manualmix ?? { jumlah: 0, income: 0 };
const tMasalah = cash.keluar.masalah ?? { jumlah: 0, income: 0 };
const totalTunai = cash.totalCash || 0;
const oCasual = cashless.keluar.casual;
const nCasual = cashless.keluar.casual;
const nLost = cashless.keluar.lost;
const nMember = cashless.keluar.member;
const nManual = cashless.keluar.manual;
const nManualMix = cashless.keluar.manualmix ?? { jumlah: 0, income: 0 };
const nMasalah = cashless.keluar.masalah ?? { jumlah: 0, income: 0 };
const totalNonTunai = cashless.totalCashless || 0;
@@ -523,8 +680,8 @@ function printPDF(data) {
cash.total,
cashless.nonTunaiOut,
oCasual.jumlah,
rupiah(oCasual.income),
nCasual.jumlah,
rupiah(nCasual.income),
nLost.jumlah,
rupiah(nLost.income),
@@ -544,68 +701,109 @@ function printPDF(data) {
{ content: rupiah(cashless.totalCashless), styles: { valign: "middle", fontStyle: "bold" } },
]);
payTotalTunaiJml += tCasual.jumlah + tLost.jumlah + tMember.jumlah + tManual.jumlah + tMasalah.jumlah;
payTotalTunaiNilai += cash.totalCash || 0;
payTotalNonTunaiJml += oCasual.jumlah + nLost.jumlah + nMember.jumlah + nManual.jumlah + nMasalah.jumlah;
payTotalNonTunaiNilai += cashless.totalCashless || 0;
payGrandTotal += (cash.totalCash || 0) + (cashless.totalCashless || 0);
// payTotalTunaiJml += tCasual.jumlah + tLost.jumlah + tMember.jumlah + tManual.jumlah + tMasalah.jumlah;
// payTotalTunaiNilai += cash.totalCash || 0;
// payTotalNonTunaiJml += nCasual.jumlah + nLost.jumlah + nMember.jumlah + nManual.jumlah + nMasalah.jumlah;
// payTotalNonTunaiNilai += cashless.totalCashless || 0;
// payGrandTotal += (cash.totalCash || 0) + (cashless.totalCashless || 0);
paymentCashCasualJml += tCasual.jumlah;
paymentCashCasualNilai += tCasual.income || 0;
paymentCashLostJml += tLost.jumlah;
paymentCashLostNilai += tLost.income;
paymentCashPassJml += tMember.jumlah;
paymentCashPassNilai += tMember.income;
paymentCashManualJml += tManual.jumlah;
paymentCashManualNilai += tManual.income;
paymentCashManualMixJml += tManualMix.jumlah;
paymentCashManualMixNilai += tManualMix.income;
paymentCashMasalahJml += tMasalah.jumlah;
paymentCashMasalahNilai += tMasalah.income;
// init sum cashless
paymentCashlessCasualJml += nCasual.jumlah;
paymentCashlessCasualNilai += nCasual.income || 0;
paymentCashlessLostJml += nLost.jumlah;
paymentCashlessLostNilai += nLost.income;
paymentCashlessPassJml += nMember.jumlah;
paymentCashlessPassNilai += nMember.income;
paymentCashlessManualJml += nManual.jumlah;
paymentCashlessManualNilai += nManual.income;
paymentCashlessManualMixJml += nManualMix.jumlah;
paymentCashlessManualMixNilai += nManualMix.income;
paymentCashlessMasalahJml += nMasalah.jumlah;
paymentCashlessMasalahNilai += nMasalah.income;
// sub total cash/ init sum grandTotal
subTotalCash =
paymentCashCasualNilai +
paymentCashLostNilai +
paymentCashPassNilai +
paymentCashManualNilai +
paymentCashlessManualMixNilai +
paymentCashlessMasalahNilai;
subTotalCashless =
paymentCashlessCasualNilai +
paymentCashlessLostNilai +
paymentCashlessPassNilai +
paymentCashlessManualNilai +
paymentCashlessManualMixNilai +
paymentCashlessMasalahNilai;
});
// baris TOTAL & GRAND TOTAL
paymentBody.push([
{ content: "TOTAL", rowSpan: 2, styles: { fontStyle: "bold" } },
{ content: "SUB TOTAL\NPer Pembayaran", rowSpan: 2, styles: { fontStyle: "bold" } },
{ content: "Tunai", styles: { fillColor: [40, 167, 69], textColor: 255, fontStyle: "bold" } },
"",
"",
{ content: payTotalTunaiJml, styles: { fontStyle: "bold" } },
rupiah(payTotalTunaiNilai),
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
rupiah(ptotalTunaiNilai),
{ content: paymentCashCasualJml, styles: { fontStyle: "bold" } },
rupiah(paymentCashCasualNilai),
paymentCashLostJml,
rupiah(paymentCashLostNilai),
paymentCashPassJml,
rupiah(paymentCashPassNilai),
paymentCashManualJml,
rupiah(paymentCashManualNilai),
paymentCashManualMixJml,
rupiah(paymentCashManualMixNilai),
paymentCashMasalahJml,
rupiah(paymentCashMasalahNilai),
rupiah(subTotalCash),
]);
paymentBody.push([
{ content: "NON TUNAI", styles: { fillColor: [255, 193, 7], fontStyle: "bold" } },
"",
"",
{ content: payTotalNonTunaiJml, styles: { fontStyle: "bold" } },
rupiah(payTotalNonTunaiNilai),
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
rupiah(payTotalNonTunaiNilai),
{ content: paymentCashlessCasualJml, styles: { fontStyle: "bold" } },
rupiah(paymentCashlessCasualNilai),
paymentCashlessLostJml,
rupiah(paymentCashlessLostNilai),
paymentCashlessPassJml,
rupiah(paymentCashlessPassNilai),
paymentCashlessManualJml,
rupiah(paymentCashlessManualNilai),
paymentCashlessManualMixJml,
rupiah(paymentCashlessManualMixNilai),
paymentCashlessMasalahJml,
rupiah(paymentCashlessMasalahNilai),
rupiah(subTotalCashless),
]);
paymentBody.push([
{ content: "GRAND TOTAL", colSpan: 4, styles: { fontStyle: "bold", halign: "center" } },
{ content: payTotalTunaiJml + payTotalNonTunaiJml, styles: { fontStyle: "bold" } },
{ content: rupiah(payTotalTunaiNilai + payTotalNonTunaiNilai), styles: { fontStyle: "bold" } },
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
// "",
// "",
{ content: rupiah(payGrandTotal), styles: { fontStyle: "bold" } },
{ content: "GRAND TOTAL\nPEMBAYARAN", colSpan: 4, styles: { fontStyle: "bold", halign: "center" } },
{ content: paymentCashCasualJml + paymentCashlessCasualJml, styles: { fontStyle: "bold" } }, //Jumlah Casual
rupiah(paymentCashCasualNilai + paymentCashlessCasualNilai), //Income Casual
{ content: paymentCashLostJml + paymentCashlessLostJml, styles: { fontStyle: "bold" } }, //Jumlah Lost
rupiah(paymentCashLostNilai + paymentCashlessLostNilai), //Income Tiket Hilang
paymentCashPassJml + paymentCashlessPassJml, //Jumlah Member
rupiah(paymentCashPassNilai + paymentCashlessPassNilai), //Income Member
paymentCashManualJml + paymentCashlessManualJml, //Jumlah Tiket Manual
rupiah(paymentCashManualNilai + paymentCashlessManualNilai), //Income Tiket Manual
paymentCashManualMixJml + paymentCashlessManualMixJml,
rupiah(paymentCashManualMixNilai + paymentCashlessManualMixNilai),
paymentCashMasalahJml + paymentCashlessMasalahJml,
rupiah(paymentCashMasalahNilai + paymentCashlessMasalahNilai),
{ content: rupiah(grandTotal), styles: { fontStyle: "bold" } },
]);
// ===== HEADER 2 BARIS (grouping) =====
File diff suppressed because one or more lines are too long
+248 -140
View File
@@ -312,9 +312,31 @@ function tableVehicle(response) {
let jmlCashCasual = 0;
let incomeCashCasual = 0;
let jmlCashLost = 0;
let incomeCashLost = 0;
let jmlCashMember = 0;
let incomeCashMember = 0;
let jmlCashManual = 0;
let incomeCashManual = 0;
let jmlCashMasalah = 0;
let incomeCashMasalah = 0;
// Init data cashless
let jmlCashlessCasual = 0;
let incomeCashlessCasual = 0;
let jmlCashlessLost = 0;
let incomeCashlessLost = 0;
let jmlCashlessMember = 0;
let incomeCashlessMember = 0;
let jmlCashlessManual = 0;
let incomeCashlessManual = 0;
let grandTotal = 0;
response.tunai.forEach(function (cash) {
@@ -340,6 +362,8 @@ function tableVehicle(response) {
let tLost = cash.keluar.lost;
let tMember = cash.keluar.member;
let tManual = cash.keluar.manual;
let tManualMix = cash.keluar.manualMix;
let tMasalah = cash.keluar.masalah;
// ===== DATA NON TUNAI =====
let nonTunaiOut = cashless.nonTunaiOut;
@@ -348,65 +372,49 @@ function tableVehicle(response) {
let nLost = cashless.keluar.lost;
let nMember = cashless.keluar.member;
let nManual = cashless.keluar.manual;
let nManualMix = cashless.keluar.manualMix;
let nMasalah = cashless.keluar.masalah;
let totalTunai = cash.totalCash || 0;
let totalNonTunai = cashless.totalCashless || 0;
// init data cash
jmlCashCasual += cash.keluar.casual.jumlah;
incomeCashCasual += cash.keluar.casual.income;
jmlCashLost += tLost.jumlah;
incomeCashLost += tLost.income;
jmlCashMember += tMember.jumlah;
incomeCashMember += tMember.income;
jmlCashManual += tManual.jumlah;
incomeCashManual += tManual.income;
subTotalIncomeCash = incomeCashCasual + incomeCashLost + incomeCashMember + incomeCashManual;
// ========= init data cashless
jmlCashlessCasual += cashless.keluar.casual.jumlah;
incomeCashlessCasual += cashless.keluar.casual.income;
grandTotal += totalTunai + totalNonTunai;
// let casualCash = cash.keluar.casual;
// let lostCash = cash.keluar.lost;
// let memberCash = cash.keluar.member;
// let casualIn = cash.total;
jmlCashlessLost += nLost.jumlah;
incomeCashlessLost += nLost.income;
// let casualNon = cashless ? cashless.keluar.casual : { jumlah: 0, income: 0 };
// let lostNon = cashless ? cashless.keluar.lost : { jumlah: 0, income: 0 };
// let memberNon = cashless ? cashless.keluar.member : { jumlah: 0, income: 0 };
jmlCashlessMember += nMember.jumlah;
incomeCashlessMember += nMember.income;
// let totalIncome =
// (cash.totalCash || 0);
jmlCashlessManual += nManual.jumlah;
incomeCashlessManual += nManual.income;
// html += `
// <tr>
// <td style="text-align: left;">${cash.jenis_mobil}</td>
subTotalIncomeCashless =
incomeCashlessCasual + incomeCashlessLost + incomeCashlessMember + incomeCashlessManual;
// <!-- Jenis Transaksi -->
// <td>${casualIn}</td>
// <td>${cash.tunaiOut}</td>
//
grandTotal = subTotalIncomeCash + subTotalIncomeCashless;
// <!-- Casual -->
// <td>${casualCash.jumlah}</td>
// <td>${rupiah(casualCash.income)}</td>
// console.log(tLost.income);
// console.log(incomeCashLost);
// <!-- Tiket Hilang -->
// <td>${lostCash.jumlah}</td>
// <td>${rupiah(lostCash.income)}</td>
// <!-- Member -->
// <td>${memberCash.jumlah}</td>
// <td>${rupiah(memberCash.income)}</td>
// <!-- Manual Input -->
// <td>0</td>
// <td>0</td>
// <!-- Manual Mix -->
// <td>0</td>
// <td>0</td>
// <!-- Tiket Masalah -->
// <td>0</td>
// <td>0</td>
// <!-- Pendapatan -->
// <td><strong>${rupiah(totalIncome)}</strong></td>
// </tr>
// `;
html += `
<tr>
<td rowspan="2" style="text-align: left;"><strong>${cash.jenis_mobil}</strong></td>
@@ -468,13 +476,22 @@ function tableVehicle(response) {
// ===== FOOTER TOTAL =====
html += `
<tr class="table">
<td rowspan="2" style="text-align: center;"><strong>TOTAL</strong></td>
<td rowspan="2" style="text-align: center;"><strong>SUB TOTAL<br>KENDARAAN</strong></td>
<td style="text-align: left;"><span class="badge bg-success">Tunai</span></td>
<td>0</td>
<td>0</td>
<td data-value="${jmlCashCasual}">${rupiah(jmlCashCasual)}</td>
<td data-value="${jmlCashCasual}">${jmlCashCasual}</td>
<td data-value="${incomeCashCasual}">${rupiah(incomeCashCasual)}</td>
<td colspan="10"></td>
<td data-value="${jmlCashLost}">${jmlCashLost}</td>
<td data-value="${incomeCashLost}">${rupiah(incomeCashLost)}</td>
<td data-value="${jmlCashMember}">${jmlCashMember}</td>
<td data-value="${incomeCashMember}">${rupiah(incomeCashMember)}</td>
<td data-value="${jmlCashManual}">${jmlCashManual}</td>
<td data-value="${incomeCashManual}">${rupiah(incomeCashManual)}</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td data-value="${incomeCashCasual}">${rupiah(incomeCashCasual)}</td>
</tr>
<tr>
@@ -483,24 +500,33 @@ function tableVehicle(response) {
<td>0</td>
<td>${jmlCashlessCasual}</td>
<td data-value="${incomeCashlessCasual}">${rupiah(incomeCashlessCasual)}</td>
<td colspan="10"></td>
<td data-value="${incomeCashlessCasual}">${rupiah(incomeCashlessCasual)}</td>
<td data-value="${jmlCashlessLost}">${rupiah(jmlCashlessLost)}</td>
<td data-value="${incomeCashlessLost}">${rupiah(incomeCashlessLost)}</td>
<td data-value="${jmlCashlessMember}">${rupiah(jmlCashlessMember)}</td>
<td data-value="${incomeCashlessMember}">${rupiah(incomeCashlessMember)}</td>
<td data-value="${jmlCashlessManual}">${rupiah(jmlCashlessManual)}</td>
<td data-value="${incomeCashlessManual}">${rupiah(incomeCashlessManual)}</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td data-value="${subTotalIncomeCashless}">${rupiah(subTotalIncomeCashless)}</td>
</tr>
<tr class="table">
<td colspan="3" class="text-center"><strong>GRAND TOTAL</strong></td>
<td colspan="3" class="text-center"><strong>GRAND TOTAL<br>Pendapatan Per Kendaraan</strong></td>
<td colspan="0"></td>
<td colspan="0">${jmlCashCasual + jmlCashlessCasual}</td>
<td colspan="0" data-value="${incomeCashCasual + incomeCashlessCasual}">${rupiah(incomeCashCasual + incomeCashlessCasual)}</td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0" data-value="${jmlCashLost + jmlCashlessLost}">${rupiah(jmlCashLost + jmlCashlessLost)}</td>
<td colspan="0" data-value="${incomeCashLost + incomeCashlessLost}">${rupiah(incomeCashLost + incomeCashlessLost)}</td>
<td colspan="0" data-value="${jmlCashMember + incomeCashlessMember}">${rupiah(jmlCashMember + incomeCashlessMember)}</td>
<td colspan="0" data-value="${incomeCashMember + incomeCashlessMember}">${rupiah(incomeCashMember + incomeCashlessMember)}</td>
<td colspan="0" data-value="${jmlCashManual + jmlCashlessManual}">${rupiah(jmlCashManual + jmlCashlessManual)}</td>/td>
<td colspan="0" data-value="${incomeCashManual + incomeCashlessManual}">${rupiah(incomeCashManual + incomeCashlessManual)}</td>
<td colspan="0" data-value="0">0</td>/td>
<td colspan="0" data-value="0">0</td>
<td colspan="0" data-value="0">0</td>
<td colspan="0" data-value="0">0</td>
<td><strong>${rupiah(grandTotal)}</strong></td>
</tr>
`;
@@ -534,13 +560,32 @@ function tableOfficer(response) {
console.log(response);
let html = "";
let onData = "";
// init petugas data cash
let jmlCashCasual = 0;
let incomeCashCasual = 0;
let jmlCashLost = 0;
let incomeCashLost = 0;
let jmlCashMember = 0;
let incomeCashMember = 0;
let jmlCashManual = 0;
let incomeCashManual = 0;
// init petugas data cash
let jmlCashlessCasual = 0;
let incomeCashlessCasual = 0;
let jmlCashlessLost = 0;
let incomeCashlessLost = 0;
let jmlCashlessMember = 0;
let incomeCashlessMember = 0;
let jmlCashlessManual = 0;
let incomeCashlessManual = 0;
let grandTotal = 0;
response.tunai.forEach(function (cash) {
@@ -579,61 +624,40 @@ function tableOfficer(response) {
let totalTunai = cash.totalCash || 0;
let totalNonTunai = cashless.totalCashless || 0;
// get data cash
jmlCashCasual += cash.keluar.casual.jumlah;
incomeCashCasual += cash.keluar.casual.income;
jmlCashLost += cash.keluar.lost.jumlah;
incomeCashLost += tLost.income;
jmlCashMember += cash.keluar.member.jumlah;
incomeCashMember += cash.keluar.member.income;
jmlCashManual += cash.keluar.manual.jumlah;
incomeCashManual += cash.keluar.manual.income;
subTotalIncomeCash = incomeCashCasual + incomeCashLost + incomeCashMember + incomeCashManual;
// ========= init data cashless
jmlCashlessCasual += cashless.keluar.casual.jumlah;
incomeCashlessCasual += cashless.keluar.casual.income;
grandTotal += totalTunai + totalNonTunai;
// let casualCash = cash.keluar.casual;
// let lostCash = cash.keluar.lost;
// let memberCash = cash.keluar.member;
// let casualIn = cash.total;
jmlCashlessLost += nLost.jumlah;
incomeCashlessLost += nLost.income;
// let casualNon = cashless ? cashless.keluar.casual : { jumlah: 0, income: 0 };
// let lostNon = cashless ? cashless.keluar.lost : { jumlah: 0, income: 0 };
// let memberNon = cashless ? cashless.keluar.member : { jumlah: 0, income: 0 };
jmlCashlessMember += cashless.keluar.member.jumlah;
incomeCashlessMember += cashless.keluar.member.income;
// let totalIncome =
// (cash.totalCash || 0);
jmlCashlessManual += cashless.keluar.manual.jumlah;
incomeCashlessManual += cashless.keluar.manual.income;
// html += `
// <tr>
// <td style="text-align: left;">${cash.jenis_mobil}</td>
subTotalIncomeCashless =
incomeCashlessCasual + incomeCashlessLost + incomeCashlessMember + incomeCashlessManual;
// <!-- Jenis Transaksi -->
// <td>${casualIn}</td>
// <td>${cash.tunaiOut}</td>
// <!-- Casual -->
// <td>${casualCash.jumlah}</td>
// <td>${rupiah(casualCash.income)}</td>
// <!-- Tiket Hilang -->
// <td>${lostCash.jumlah}</td>
// <td>${rupiah(lostCash.income)}</td>
// <!-- Member -->
// <td>${memberCash.jumlah}</td>
// <td>${rupiah(memberCash.income)}</td>
// <!-- Manual Input -->
// <td>0</td>
// <td>0</td>
// <!-- Manual Mix -->
// <td>0</td>
// <td>0</td>
// <!-- Tiket Masalah -->
// <td>0</td>
// <td>0</td>
// <!-- Pendapatan -->
// <td><strong>${rupiah(totalIncome)}</strong></td>
// </tr>
// `;
//
grandTotal = subTotalIncomeCash + subTotalIncomeCashless;
//========= init table body by petugas
html += `
<tr>
<td rowspan="2" style="text-align: left;"><strong>${petugas}</strong></td>
@@ -655,10 +679,10 @@ function tableOfficer(response) {
<td data-value="${tManual.income}">${rupiah(tManual.income)}</td>
<td>0</td>
<td data-value="0}">0</td>
<td data-value="0">0</td>
<td>0</td>
<td data-value="0"></td>
<td data-value="0">0</td>
<td data-value="${totalTunai}"><strong>${rupiah(totalTunai)}</strong></td>
</tr>
@@ -695,13 +719,23 @@ function tableOfficer(response) {
// ===== FOOTER TOTAL =====
html += `
<tr class="table">
<td rowspan="2" style="text-align: center;"><strong>TOTAL</strong></td>
<td rowspan="2" style="text-align: center;"><strong>SUB TOTAL<br>Per Petugas</strong></td>
<td style="text-align: left;"><span class="badge bg-success">Tunai</span></td>
<td>0</td>
<td>0</td>
<td data-value="${jmlCashCasual}">${rupiah(jmlCashCasual)}</td>
<td data-value="${incomeCashCasual}">${rupiah(incomeCashCasual)}</td>
<td colspan="11">${rupiah(incomeCashCasual)}</td>
<td data-value="${jmlCashLost}">${rupiah(jmlCashLost)}</td>
<td data-value="${incomeCashLost}">${incomeCashLost}</td>
<td data-value="${jmlCashMember}">${rupiah(jmlCashMember)}</td>
<td data-value="${incomeCashMember}">${rupiah(incomeCashMember)}</td>
<td data-value="${jmlCashManual}">${rupiah(jmlCashManual)}</td>
<td data-value="${incomeCashManual}">${rupiah(incomeCashManual)}</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td data-value="${incomeCashCasual}">${rupiah(incomeCashCasual)}</td>
</tr>
<tr>
<td style="text-align: left;"><span class="badge bg-warning">NON TUNAI</td>
@@ -709,23 +743,33 @@ function tableOfficer(response) {
<td>0</td>
<td>${jmlCashlessCasual}</td>
<td data-value="${incomeCashlessCasual}">${rupiah(incomeCashlessCasual)}</td>
<td colspan="11">${rupiah(incomeCashlessCasual)}</td>
<td data-value="${jmlCashlessLost}">${rupiah(jmlCashlessLost)}</td>
<td data-value="${incomeCashlessLost}">${rupiah(incomeCashlessLost)}</td>
<td data-value="${jmlCashlessMember}">${rupiah(jmlCashlessMember)}</td>
<td data-value="${incomeCashlessMember}">${rupiah(incomeCashlessMember)}</td>
<td data-value="${jmlCashlessManual}">${rupiah(jmlCashlessManual)}</td>
<td data-value="${incomeCashlessManual}">${rupiah(incomeCashlessManual)}</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td data-value="${subTotalIncomeCashless}">${rupiah(subTotalIncomeCashless)}</td>
</tr>
<tr class="table">
<td colspan="3" class="text-center"><strong>GRAND TOTAL</strong></td>
<td colspan="3" class="text-center"><strong>GRAND TOTAL<br>Pendapatan Per Petugas</strong></td>
<td colspan="0"></td>
<td colspan="0">${jmlCashCasual + jmlCashlessCasual}</td>
<td colspan="0" data-value="${incomeCashCasual + incomeCashlessCasual}">${rupiah(incomeCashCasual + incomeCashlessCasual)}</td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0" data-value="${jmlCashLost + jmlCashlessLost}">${rupiah(jmlCashLost + jmlCashlessLost)}</td>
<td colspan="0" data-value="${incomeCashLost + incomeCashlessLost}">${rupiah(incomeCashLost + incomeCashlessLost)}</td>
<td colspan="0" data-value="${jmlCashMember + incomeCashlessMember}">${rupiah(jmlCashMember + incomeCashlessMember)}</td>
<td colspan="0" data-value="${incomeCashMember + incomeCashlessMember}">${rupiah(incomeCashMember + incomeCashlessMember)}</td>
<td colspan="0" data-value="${jmlCashManual + jmlCashlessManual}">${rupiah(jmlCashManual + jmlCashlessManual)}</td>/td>
<td colspan="0" data-value="${incomeCashManual + incomeCashlessManual}">${rupiah(incomeCashManual + incomeCashlessManual)}</td>
<td colspan="0" data-value="0">0</td>/td>
<td colspan="0" data-value="0">0</td>
<td colspan="0" data-value="0">0</td>
<td colspan="0" data-value="0">0</td>
<td><strong>${rupiah(grandTotal)}</strong></td>
</tr>
`;
@@ -756,16 +800,35 @@ function tableOfficer(response) {
function tablePayment(response) {
// Update tabel dengan data yang diterima
console.log(response);
// console.log(response);
let html = "";
let onData = "";
// init data cash
let jmlCashCasual = 0;
let incomeCashCasual = 0;
let jmlCashLost = 0;
let incomeCashLost = 0;
let jmlCashMember = 0;
let incomeCashMember = 0;
let jmlCashManual = 0;
let incomeCashManual = 0;
// init data cashless
let jmlCashlessCasual = 0;
let incomeCashlessCasual = 0;
let jmlCashlessLost = 0;
let incomeCashlessLost = 0;
let jmlCashlessMember = 0;
let incomeCashlessMember = 0;
let jmlCashlessManual = 0;
let incomeCashlessManual = 0;
let grandTotal = 0;
response.tunai.forEach(function (cash) {
@@ -808,10 +871,35 @@ function tablePayment(response) {
jmlCashCasual += cash.keluar.casual.jumlah;
incomeCashCasual += cash.keluar.casual.income;
jmlCashLost += cash.keluar.lost.jumlah;
incomeCashLost += tLost.income;
jmlCashMember += cash.keluar.member.jumlah;
incomeCashMember += cash.keluar.member.income;
jmlCashManual += cash.keluar.manual.jumlah;
incomeCashManual += cash.keluar.manual.income;
subTotalIncomeCash = incomeCashCasual + incomeCashLost + incomeCashMember + incomeCashManual;
// ========= init data cashless
jmlCashlessCasual += cashless.keluar.casual.jumlah;
incomeCashlessCasual += cashless.keluar.casual.income;
grandTotal += totalTunai + totalNonTunai;
jmlCashlessLost += nLost.jumlah;
incomeCashlessLost += nLost.income;
jmlCashlessMember += cashless.keluar.member.jumlah;
incomeCashlessMember += cashless.keluar.member.income;
jmlCashlessManual += cashless.keluar.manual.jumlah;
incomeCashlessManual += cashless.keluar.manual.income;
subTotalIncomeCashless =
incomeCashlessCasual + incomeCashlessLost + incomeCashlessMember + incomeCashlessManual;
grandTotal = subTotalIncomeCash + subTotalIncomeCashless;
html += `
<tr>
<td rowspan="2" style="text-align: left;"><strong>${payment}</strong></td>
@@ -836,7 +924,7 @@ function tablePayment(response) {
<td data-value="0}">0</td>
<td>0</td>
<td data-value="0"></td>
<td data-value="0">0</td>
<td data-value="${totalTunai}"><strong>${rupiah(totalTunai)}</strong></td>
</tr>
@@ -873,13 +961,23 @@ function tablePayment(response) {
// ===== FOOTER TOTAL =====
html += `
<tr class="table">
<td rowspan="2" style="text-align: center;"><strong>TOTAL</strong></td>
<td rowspan="2" style="text-align: center;"><strong>SUB TOTAL<br>Per Jenis Pembayaran</strong></td>
<td style="text-align: left;"><span class="badge bg-success">Tunai</span></td>
<td>0</td>
<td>0</td>
<td data-value="${jmlCashCasual}">${rupiah(jmlCashCasual)}</td>
<td data-value="${incomeCashCasual}">${rupiah(incomeCashCasual)}</td>
<td colspan="11">${rupiah(incomeCashCasual)}</td>
<td data-value="${jmlCashLost}">${rupiah(jmlCashLost)}</td>
<td data-value="${incomeCashLost}">${incomeCashLost}</td>
<td data-value="${jmlCashMember}">${rupiah(jmlCashMember)}</td>
<td data-value="${incomeCashMember}">${rupiah(incomeCashMember)}</td>
<td data-value="${jmlCashManual}">${rupiah(jmlCashManual)}</td>
<td data-value="${incomeCashManual}">${rupiah(incomeCashManual)}</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td data-value="${incomeCashCasual}">${rupiah(incomeCashCasual)}</td>
</tr>
<tr>
<td style="text-align: left;"><span class="badge bg-warning">NON TUNAI</td>
@@ -887,23 +985,33 @@ function tablePayment(response) {
<td>0</td>
<td>${jmlCashlessCasual}</td>
<td data-value="${incomeCashlessCasual}">${rupiah(incomeCashlessCasual)}</td>
<td colspan="11">${rupiah(incomeCashlessCasual)}</td>
<td data-value="${jmlCashlessLost}">${rupiah(jmlCashlessLost)}</td>
<td data-value="${incomeCashlessLost}">${rupiah(incomeCashlessLost)}</td>
<td data-value="${jmlCashlessMember}">${rupiah(jmlCashlessMember)}</td>
<td data-value="${incomeCashlessMember}">${rupiah(incomeCashlessMember)}</td>
<td data-value="${jmlCashlessManual}">${rupiah(jmlCashlessManual)}</td>
<td data-value="${incomeCashlessManual}">${rupiah(incomeCashlessManual)}</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td data-value="${subTotalIncomeCashless}">${rupiah(subTotalIncomeCashless)}</td>
</tr>
<tr class="table">
<td colspan="3" class="text-center"><strong>GRAND TOTAL</strong></td>
<td colspan="3" class="text-center"><strong>GRAND TOTAL<br>Pendapatan Per Pembayaran</strong></td>
<td colspan="0"></td>
<td colspan="0">${jmlCashCasual + jmlCashlessCasual}</td>
<td colspan="0" data-value="${incomeCashCasual + incomeCashlessCasual}"><strong>${rupiah(incomeCashCasual + incomeCashlessCasual)}</strong></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0"></td>
<td colspan="0" data-value="${incomeCashCasual + incomeCashlessCasual}">${rupiah(incomeCashCasual + incomeCashlessCasual)}</td>
<td colspan="0" data-value="${jmlCashLost + jmlCashlessLost}">${rupiah(jmlCashLost + jmlCashlessLost)}</td>
<td colspan="0" data-value="${incomeCashLost + incomeCashlessLost}">${rupiah(incomeCashLost + incomeCashlessLost)}</td>
<td colspan="0" data-value="${jmlCashMember + incomeCashlessMember}">${rupiah(jmlCashMember + incomeCashlessMember)}</td>
<td colspan="0" data-value="${incomeCashMember + incomeCashlessMember}">${rupiah(incomeCashMember + incomeCashlessMember)}</td>
<td colspan="0" data-value="${jmlCashManual + jmlCashlessManual}">${rupiah(jmlCashManual + jmlCashlessManual)}</td>/td>
<td colspan="0" data-value="${incomeCashManual + incomeCashlessManual}">${rupiah(incomeCashManual + incomeCashlessManual)}</td>
<td colspan="0" data-value="0">0</td>/td>
<td colspan="0" data-value="0">0</td>
<td colspan="0" data-value="0">0</td>
<td colspan="0" data-value="0">0</td>
<td><strong>${rupiah(grandTotal)}</strong></td>
</tr>
`;
File diff suppressed because one or more lines are too long
+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);
},
});
}
});
});
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long