05/07 Phase 3: initial codes

This commit is contained in:
2026-05-07 12:17:19 -04:00
parent 6e5518c103
commit ce462c57b2
107 changed files with 6365 additions and 208 deletions
@@ -0,0 +1,42 @@
{% extends "tenant/layouts/base.html" %}
{% block title %}Close Day{% endblock %}
{% block content %}
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card shadow-sm">
<div class="card-header fw-semibold">
<i class="bi bi-calculator me-2"></i>Close Day — {{ today.strftime('%B %d, %Y') }}
</div>
<div class="card-body">
<!-- Summary from transactions -->
<table class="table table-sm mb-4">
<tbody>
<tr><td>Cash Sales</td><td class="text-end fw-semibold">${{ "%.2f"|format(total_cash) }}</td></tr>
<tr><td>App Payments (Zelle / Venmo / etc.)</td><td class="text-end">${{ "%.2f"|format(total_app) }}</td></tr>
<tr><td>Tips Collected</td><td class="text-end">${{ "%.2f"|format(total_tips) }}</td></tr>
<tr><td>Gift Card Redemptions</td><td class="text-end">${{ "%.2f"|format(total_gc) }}</td></tr>
<tr class="table-light fw-bold"><td>Expected Cash in Drawer</td><td class="text-end">${{ "%.2f"|format(expected_cash) }}</td></tr>
</tbody>
</table>
{% if error %}<div class="alert alert-danger py-2">{{ error }}</div>{% endif %}
<form method="POST" novalidate>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<div class="mb-3">
<label class="form-label fw-semibold">Actual Cash Counted ($) <span class="text-danger">*</span></label>
<input type="number" step="0.01" min="0" class="form-control form-control-lg"
name="actual_cash" required autofocus placeholder="0.00">
</div>
<div class="mb-3">
<label class="form-label">Notes <small class="text-muted">(optional)</small></label>
<textarea class="form-control" name="notes" rows="2"></textarea>
</div>
<div class="d-flex gap-2">
<button type="submit" class="btn btn-primary">Close Day</button>
<a href="{{ url_for('reconciliation.index') }}" class="btn btn-outline-secondary">Cancel</a>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}
@@ -0,0 +1,38 @@
{% extends "tenant/layouts/base.html" %}
{% block title %}Reconciliation{% endblock %}
{% block content %}
<div class="d-flex justify-content-between align-items-center mb-4">
<h4 class="fw-bold mb-0"><i class="bi bi-calculator me-2"></i>End-of-Day Reconciliation</h4>
<a href="{{ url_for('reconciliation.close_day') }}" class="btn btn-primary btn-sm">Close Today</a>
</div>
{% if records %}
<div class="card shadow-sm">
<div class="table-responsive">
<table class="table table-hover mb-0">
<thead class="table-light">
<tr><th>Date</th><th>Cash</th><th>App Payments</th><th>Tips</th><th>Gift Cards</th><th>Expected</th><th>Actual</th><th>Variance</th><th>Closed By</th></tr>
</thead>
<tbody>
{% for r in records %}
<tr>
<td class="fw-semibold">{{ r.date.strftime('%Y-%m-%d') }}</td>
<td>${{ "%.2f"|format(r.total_cash) }}</td>
<td>${{ "%.2f"|format(r.total_app_payments) }}</td>
<td>${{ "%.2f"|format(r.total_tips) }}</td>
<td>${{ "%.2f"|format(r.total_gift_card_redemptions) }}</td>
<td>${{ "%.2f"|format(r.expected_cash_in_drawer) }}</td>
<td>${{ "%.2f"|format(r.actual_cash_counted) }}</td>
<td class="fw-semibold {{ 'text-danger' if r.variance < 0 else 'text-success' if r.variance > 0 else '' }}">
{{ '+' if r.variance > 0 else '' }}${{ "%.2f"|format(r.variance) }}
</td>
<td class="small text-muted">{{ r.closed_at.strftime('%I:%M %p') if r.closed_at else '—' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% else %}
<div class="alert alert-light">No reconciliation records yet.</div>
{% endif %}
{% endblock %}