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;