File size: 2,658 Bytes
ec62259
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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' });
};