Mbonea commited on
Commit
3a52c0e
·
1 Parent(s): f157dcf

Split weekly revenue by payment channel

Browse files
API_DOCUMENTATION.md CHANGED
@@ -737,14 +737,32 @@ Last 7 days of revenue broken down by day.
737
  [
738
  {
739
  "day": "2026-04-15",
740
- "sales": 12,
741
- "gross": 12000.00,
 
 
 
 
 
 
 
742
  "net": 11340.00
743
  }
744
  ]
745
  ```
746
 
747
- > `net` = `gross` minus Snippe fee (0.5%) minus platform commission (varies by tenant, default 5%).
 
 
 
 
 
 
 
 
 
 
 
748
  > Days with no sales are omitted — fill gaps in the frontend.
749
 
750
  ---
 
737
  [
738
  {
739
  "day": "2026-04-15",
740
+ "online_sales": 12,
741
+ "online_gross": 12000.00,
742
+ "online_net": 11340.00,
743
+ "manual_sales": 3,
744
+ "manual_gross": 2500.00,
745
+ "total_sales": 15,
746
+ "total_gross": 14500.00,
747
+ "sales": 15,
748
+ "gross": 14500.00,
749
  "net": 11340.00
750
  }
751
  ]
752
  ```
753
 
754
+ Definitions:
755
+ - `online_*` = platform-collected payments (`payment_channel = 'snippe'`)
756
+ - `manual_*` = tenant direct/manual sales (`payment_channel = 'tenant_direct_manual'`)
757
+ - `total_*` = combined totals across both channels
758
+
759
+ Compatibility fields:
760
+ - `sales` = `total_sales`
761
+ - `gross` = `total_gross`
762
+ - `net` = `online_net`
763
+
764
+ > `online_net` / `net` = online `gross` minus Snippe fee (0.5%) minus platform commission.
765
+ > Manual/direct sales are not payout-eligible and are not included in `net`.
766
  > Days with no sales are omitted — fill gaps in the frontend.
767
 
768
  ---
src/routes/dashboard.routes.js CHANGED
@@ -75,9 +75,16 @@ router.get('/revenue/weekly', async (req, res) => {
75
  try {
76
  const rows = await db.query(
77
  `SELECT DATE(completed_at) AS day,
 
 
 
 
 
 
 
78
  COUNT(*) AS sales,
79
- SUM(gross_amount) AS gross,
80
- SUM(client_credit) AS net
81
  FROM payments
82
  WHERE client_id = ? AND status = 'completed'
83
  AND completed_at >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
 
75
  try {
76
  const rows = await db.query(
77
  `SELECT DATE(completed_at) AS day,
78
+ SUM(CASE WHEN payment_channel = 'snippe' THEN 1 ELSE 0 END) AS online_sales,
79
+ COALESCE(SUM(CASE WHEN payment_channel = 'snippe' THEN gross_amount ELSE 0 END), 0) AS online_gross,
80
+ COALESCE(SUM(CASE WHEN payment_channel = 'snippe' THEN client_credit ELSE 0 END), 0) AS online_net,
81
+ SUM(CASE WHEN payment_channel = 'tenant_direct_manual' THEN 1 ELSE 0 END) AS manual_sales,
82
+ COALESCE(SUM(CASE WHEN payment_channel = 'tenant_direct_manual' THEN gross_amount ELSE 0 END), 0) AS manual_gross,
83
+ COUNT(*) AS total_sales,
84
+ COALESCE(SUM(gross_amount), 0) AS total_gross,
85
  COUNT(*) AS sales,
86
+ COALESCE(SUM(gross_amount), 0) AS gross,
87
+ COALESCE(SUM(CASE WHEN payment_channel = 'snippe' THEN client_credit ELSE 0 END), 0) AS net
88
  FROM payments
89
  WHERE client_id = ? AND status = 'completed'
90
  AND completed_at >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)