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;