const PlatformSale = require('../models/PlatformSale'); const { log } = require('../utils/activityLogger'); // GET /api/platform-sales?month=YYYY-MM or ?from=...&to=... exports.getPlatformSales = async (req, res) => { const { month, from, to, platform } = req.query; const filter = {}; if (platform) filter.platform = platform; if (month) { const [y, m] = month.split('-').map(Number); const start = new Date(y, m - 1, 1, 0, 0, 0, 0); const end = new Date(y, m, 0, 23, 59, 59, 999); filter.date = { $gte: start, $lte: end }; } else if (from || to) { filter.date = {}; if (from) filter.date.$gte = new Date(from); if (to) filter.date.$lte = new Date(new Date(to).setHours(23, 59, 59, 999)); } const sales = await PlatformSale.find(filter) .populate('createdBy', 'name username') .sort({ date: -1 }); const total = sales.reduce((s, item) => s + item.amount, 0); res.json({ sales, total }); }; // POST /api/platform-sales exports.createPlatformSale = async (req, res) => { const { platform = 'Foodpanda', date, amount, note } = req.body; if (!date || amount === undefined || isNaN(Number(amount))) { return res.status(400).json({ message: 'Date and valid amount are required' }); } const sale = await PlatformSale.create({ platform, date: new Date(date), amount: Number(amount), note: note || '', createdBy: req.user._id, }); log(req.user, 'ADD_PLATFORM_SALE', { entity: 'PlatformSale', entityId: sale._id, detail: `${platform} Rs.${sale.amount} (${date})`, }); res.status(201).json(sale); }; // PUT /api/platform-sales/:id exports.updatePlatformSale = async (req, res) => { const sale = await PlatformSale.findById(req.params.id); if (!sale) return res.status(404).json({ message: 'Platform sale entry not found' }); if (req.body.date) req.body.date = new Date(req.body.date); if (req.body.amount !== undefined) req.body.amount = Number(req.body.amount); Object.assign(sale, req.body); await sale.save(); log(req.user, 'EDIT_PLATFORM_SALE', { entity: 'PlatformSale', entityId: sale._id, detail: `${sale.platform} Rs.${sale.amount}`, }); res.json(sale); }; // DELETE /api/platform-sales/:id exports.deletePlatformSale = async (req, res) => { const sale = await PlatformSale.findByIdAndDelete(req.params.id); if (!sale) return res.status(404).json({ message: 'Platform sale entry not found' }); log(req.user, 'DELETE_PLATFORM_SALE', { entity: 'PlatformSale', entityId: sale._id, detail: `${sale.platform} Rs.${sale.amount}`, }); res.json({ message: 'Platform sale entry deleted' }); };