- 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)
33 lines
1.1 KiB
Text
33 lines
1.1 KiB
Text
<%- include('../partials/header', { activeMenu: 'payments' }) %>
|
|
|
|
<div class="page-header">
|
|
<div>
|
|
<h1 class="page-title">💰 Payments</h1>
|
|
<p class="page-subtitle">Track all payment transactions</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="table-responsive">
|
|
<table class="table">
|
|
<thead><tr><th>Date</th><th>Type</th><th>Direction</th><th>Amount</th><th>Method</th><th>Notes</th><th>Load</th></tr></thead>
|
|
<tbody>
|
|
<% for (const p of payments) { %>
|
|
<tr>
|
|
<td><%= p.payment_date || '—' %></td>
|
|
<td><%= p.type %></td>
|
|
<td><span class="badge badge-<%= p.direction === 'in' ? 'success' : 'danger' %>"><%= p.direction === 'in' ? 'In' : 'Out' %></span></td>
|
|
<td><%= formatINR(p.amount) %></td>
|
|
<td><%= p.method %></td>
|
|
<td><%= p.notes || '' %></td>
|
|
<td><%= p.load ? (p.load.from_city + ' → ' + p.load.to_city) : '—' %></td>
|
|
</tr>
|
|
<% } %>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%- include('../partials/footer') %>
|