freightdesk/webapp/src/routes/payments.js
FreightDesk 1a4eaaa040 Initial commit: FreightDesk v1.0
- Express + EJS server-rendered app
- Supabase PostgreSQL database
- Auth: username/password with bcrypt
- Dashboard with business stats
- Load CRUD with filters
- WhatsApp message parser
- Payment tracking
- Shipper & vehicle management
- Reports (monthly, top shippers, routes)
- Government-app aesthetic (tricolor theme)
- Dark mode support
- Docker + Coolify deployment ready
- Seed data from existing business ledger (88 loads, 41 shippers, 70 vehicles)
2026-06-07 18:57:24 +00:00

37 lines
1.2 KiB
JavaScript

const express = require('express');
const router = express.Router();
const supabase = require('../services/supabase');
const { requireAuth } = require('../middleware/auth');
const { asyncHandler } = require('../middleware/security');
const { PAYMENT_METHODS } = require('../config/constants');
// GET /payments — Payment ledger
router.get('/', requireAuth, asyncHandler(async (req, res) => {
const { data: payments } = await supabase
.from('payments')
.select('*, load:loads(from_city, to_city, shipper:shippers(name))')
.order('payment_date', { ascending: false, nullsFirst: false })
.limit(50);
res.render('pages/payments/list', {
payments: payments || [],
PAYMENT_METHODS,
});
}));
// POST /payments — Record a payment
router.post('/', requireAuth, asyncHandler(async (req, res) => {
const { load_id, type, direction, amount, method, payment_date, notes } = req.body;
await supabase.from('payments').insert({
load_id, type, direction,
amount: parseFloat(amount) || 0,
method: method || 'bank_transfer',
payment_date: payment_date || null,
notes: notes || null,
});
res.redirect(req.get('Referer') || '/payments');
}));
module.exports = router;