05/07 Phase 3: initial codes
This commit is contained in:
@@ -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 %}
|
||||
Reference in New Issue
Block a user