Case rekap
by Rekapan
19
Raw
case 'rekap': {
if (!isOwner) return
const fs = require('fs');
const rawDatas = JSON.parse(fs.readFileSync("./db/trx.json", "utf8"));
const successTransactions = rawDatas.filter(transaction =>
transaction.status === 'Success');
const parseTransactionDate = (waktuString) => {
const parts = waktuString.split(' | ');
const timePart = parts[0];
const datePart = parts[1].split(',');
const dayMonth = datePart[1].trim().split(' ');
const day = parseInt(dayMonth[0]);
const monthAbbr = dayMonth[1];
const year = parseInt(dayMonth[2]);
const monthMapping = {
'Jan': 0, 'Feb': 1, 'Mar': 2, 'Apr': 3, 'Mei': 4, 'Jun': 5,
'Jul': 6, 'Agu': 7, 'Sep': 8, 'Okt': 9, 'Nov': 10, 'Des': 11
};
const month = monthMapping[monthAbbr];
const timeParts = timePart.split(':');
const hour = parseInt(timeParts[0]);
const minute = parseInt(timeParts[1]);
const second = parseInt(timeParts[2]);
return new Date(year, month, day, hour, minute, second);
};
// Group transactions by date
const dailyTransactions = successTransactions.reduce((acc, transaction) => {
const date = parseTransactionDate(transaction.waktu);
const dateKey = `${date.getDate()}-${date.getMonth()}-${date.getFullYear()}`;
if (!acc[dateKey]) {
acc[dateKey] = [];
}
acc[dateKey].push(transaction);
return acc;
}, {});
// Calculate daily summaries and save to file
const dailySummaries = {};
for (const [dateKey, transactions] of Object.entries(dailyTransactions)) {
const totalOrder = transactions.length;
const totalModal = transactions.reduce((sum, t) => sum + t.harga_modal, 0);
const totalPenjualan = transactions.reduce((sum, t) => sum + t.harga, 0);
const totalKeuntungan = totalPenjualan - totalModal;
dailySummaries[dateKey] = {
date: dateKey,
totalOrder,
totalModal,
totalPenjualan,
totalKeuntungan
};
}
// Save daily summaries to file
fs.writeFileSync('./db/markup_penjualan.json', JSON.stringify(dailySummaries, null, 2));
// Calculate overall totals
const totalOrder = successTransactions.length;
const totalModal = successTransactions.reduce((total, transaction) =>
total + transaction.harga_modal, 0);
const totalPenjualan = successTransactions.reduce((total, transaction) =>
total + transaction.harga, 0);
const totalKeuntungan = totalPenjualan - totalModal;
const userTransactions = successTransactions.reduce((acc, transaction) => {
acc[transaction.nomor] = (acc[transaction.nomor] || 0) + transaction.harga;
return acc;
}, {});
let topUser = '';
let topUserAmount = 0;
for (const [user, amount] of Object.entries(userTransactions)) {
if (amount > topUserAmount) {
topUser = user;
topUserAmount = amount;
}
}
// Get today's transactions
const currentDate = new Date();
const currentDateKey = `${currentDate.getDate()}-${currentDate.getMonth()}-${currentDate.getFullYear()}`;
const todaySummary = dailySummaries[currentDateKey] || {
totalOrder: 0,
totalModal: 0,
totalPenjualan: 0,
totalKeuntungan: 0
};
const monthlyTransactions = successTransactions.filter(transaction => {
const transactionDate = parseTransactionDate(transaction.waktu);
return transactionDate.getMonth() === currentDate.getMonth() &&
transactionDate.getFullYear() === currentDate.getFullYear();
});
const monthlyTotalOrder = monthlyTransactions.length;
const monthlyTotalModal = monthlyTransactions.reduce((total, transaction) =>
total + transaction.harga_modal, 0);
const monthlyTotalPenjualan = monthlyTransactions.reduce((total, transaction) =>
total + transaction.harga, 0);
const monthlyTotalKeuntungan = monthlyTotalPenjualan - monthlyTotalModal;
const monthlyUserTransactions = monthlyTransactions.reduce((acc, transaction) => {
acc[transaction.nomor] = (acc[transaction.nomor] || 0) + transaction.harga;
return acc;
}, {});
let monthlyTopUser = '';
let monthlyTopUserAmount = 0;
for (const [user, amount] of Object.entries(monthlyUserTransactions)) {
if (amount > monthlyTopUserAmount) {
monthlyTopUser = user;
monthlyTopUserAmount = amount;
}
}
const getMonthName = (monthNumber) => {
const monthNames = [
"Januari", "Februari", "Maret", "April", "Mei", "Juni",
"Juli", "Agustus", "September", "Oktober", "November", "Desember"
];
return monthNames[monthNumber];
};
let rekapanText = `*Keuntungan Harian (${currentDate.getDate()} ${getMonthName(currentDate.getMonth())} ${currentDate.getFullYear()})*\n\n`;
rekapanText += `ยป *Total Order :* ${todaySummary.totalOrder}x\n`;
rekapanText += `ยป *Total Modal :* ${rupiah(todaySummary.totalModal)}\n`;
rekapanText += `ยป *Total Penjualan :* ${rupiah(todaySummary.totalPenjualan)}\n`;
rekapanText += `ยป *Total Keuntungan :* ${rupiah(todaySummary.totalKeuntungan)}\n\n\n`;
rekapanText += `*Keuntungan Bulanan ${getMonthName(currentDate.getMonth())}*\n\n`;
rekapanText += `ยป *Total Order :* ${monthlyTotalOrder}x\n`;
rekapanText += `ยป *Total Modal :* ${rupiah(monthlyTotalModal)}\n`;
rekapanText += `ยป *Total Penjualan :* ${rupiah(monthlyTotalPenjualan)}\n`;
rekapanText += `ยป *Total Keuntungan :* ${rupiah(monthlyTotalKeuntungan)}\n\n`;
rekapanText += `*User Transaksi Terbanyak*\n`;
rekapanText += `ยป *Nomor :* ${monthlyTopUser || "-"}\n`;
rekapanText += `ยป *Total Transaksi :* ${monthlyTopUser ? rupiah(monthlyTopUserAmount) : "Rp 0"}\n\n\n`;
rekapanText += `*Keuntungan Keseluruhan*\n\n`;
rekapanText += `ยป *Total Order :* ${totalOrder}x\n`;
rekapanText += `ยป *Total Modal :* ${rupiah(totalModal)}\n`;
rekapanText += `ยป *Total Penjualan :* ${rupiah(totalPenjualan)}\n`;
rekapanText += `ยป *Total Keuntungan :* ${rupiah(totalKeuntungan)}\n\n`;
rekapanText += `*User Transaksi Terbanyak*\n`;
rekapanText += `ยป *Nomor :* ${topUser}\n`;
rekapanText += `ยป *Total Transaksi :* ${rupiah(topUserAmount)}`;
m.reply(rekapanText);
}
break;