{% extends 'base.html' %} {% block title %}Cashier β€” Shiba Meals{% endblock %} {% block page_title %}Cashier Β· {{ outlet.name if outlet else '' }}{% endblock %} {% block content %}
{{ outlet.name if outlet else 'My Outlet' }}
{{ today }} Β· {{ session.get('name') }}
{% if role not in ('general_manager','manager') %}
⏱ Attendance Clock in records your arrival; start your shift when you receive stock.
{% endif %} {% if role in ('general_manager','manager') %}
{% for o in outlets %}{{ o.name }} {% endfor %}
{% endif %} {% if low_stock %}
πŸ”΄ Low Stock: {% for item in low_stock %} {{ item.product.name }} β€” {{ item.remaining }} left ({{ item.pct }}%) {% endfor %}
{% endif %}
Stock Status
{% if role not in ('general_manager','manager') %}
Receive Stock
{% endif %}
Submit Count
Cash Events
Wastage
Shift
End of Day
{% if role not in ('general_manager','manager') %}
Consumables Req.
{% endif %}
History
{% for p in products %} {% set s = stock_at_outlet.get(p.id, {}) %} {% if s.get('total_in', 0) > 0 or s.get('confirmed_rcv') %}
{{ p.name }} {% if s.get('discrepancy') is not none %} {% if s.get('discrepancy') < 0 %} ⚠ βˆ’{{ (s.get('discrepancy')|abs)|int }} {% elif s.get('discrepancy') > 0 %} +{{ s.get('discrepancy')|int }} {% else %} βœ“ {% endif %} {% endif %} {% if s.get('remaining',0) <= 5 or (s.get('total_in',0) > 0 and s.get('remaining',0) / s.get('total_in',1) <= 0.2) %} πŸ”΄ LOW {% endif %}
{{ s.get('remaining', 0) }}
{{ s.get('sold', 0) }} sold {% if s.get('confirmed_rcv') is not none %} Β· Received: {{ s.get('confirmed_rcv')|int }} {% endif %} {% if s.get('dispatched', 0) > 0 %} Β· Dispatched: {{ s.get('dispatched')|int }} {% endif %}
{% endif %} {% endfor %}
{% if not stock_at_outlet.values()|selectattr('total_in','gt',0)|list %}
No stock dispatched to this outlet yet today.
{% endif %}
{% if role not in ('general_manager','manager') %}
Receive Stock from Logistics
Enter the actual quantity you physically received for every item. Leave at 0 for items not delivered today. If your count differs from the dispatched quantity, the system flags a discrepancy and adjusts stock to your confirmed figure.
{% for p in products %} {% set s = stock_at_outlet.get(p.id, {}) %} {% set dispatched_qty = s.get('dispatched', s.get('total_in', 0))|int %} {% endfor %}
Product Dispatched (today) Qty Received * Variance
{{ p.name }} {% if dispatched_qty > 0 %} {{ dispatched_qty }} {% else %} β€” {% endif %} {% if dispatched_qty > 0 %} βœ“ {% endif %}
{% if outlet_receipts %}
Today's Receipts
{% for r in outlet_receipts %} {% set variance = (r.qty_received - r.qty_dispatched) if r.qty_dispatched else none %} {% endfor %}
Received AtProductDispatchedConfirmed ReceivedVarianceByRef
{{ r.received_at }} {{ r.product_name }} {{ r.qty_dispatched|int if r.qty_dispatched else 'β€”' }} {{ r.qty_received|int }} {% if variance is not none %} {% if variance < 0 %} ⚠ {{ variance|int }} {% elif variance > 0 %} +{{ variance|int }} {% else %} βœ“ Match {% endif %} {% else %}β€”{% endif %} {{ r.received_by_name or 'β€”' }} {{ r.dispatch_ref or 'β€”' }}
{% endif %}
{% endif %}
Stock Count
{% if role in ('general_manager','manager') %}
View only β€” counts submitted by cashiers.
{% else %}
Count remaining units physically. Submit at least once at End of Day β€” EOD submission is required before finance closes the day.
Units remaining right now
{% for p in products %} {% set s = stock_at_outlet.get(p.id, {}) %} {% if s.get('total_in', 0) > 0 %}
{% endif %} {% endfor %}
Physical cash in till (include float)
EOD submission required once per day
{% endif %}
{% if submissions %}
Today's Submissions
{% for s in submissions %} {% endfor %}
Submitted AtByCash Declared
{{ s.submitted_at }} {{ s.cashier_name }} KES {{ "{:,.0f}".format(s.cash_declared) }}
{% endif %}
Cash Events Today
{% for e in cash_events %} {% else %} {% endfor %}
TimeTypeAmountNote
{{ e.recorded_at }} {{ e.event_type.replace('_',' ') }} KES {{ "{:,.0f}".format(e.amount) }} {{ e.note or 'β€”' }}
No events yet.
{% if role not in ('general_manager','manager') %}
Add Event
{% endif %}
Record Wastage
{% if role in ('general_manager','manager') %}
View submitted wastage. Recorded by cashiers.
{% else %}
{% endif %}
Shift Management
Clock In = arrival time (use the Attendance button above). Start Shift = when you begin serving after receiving stock. End Shift = handover/close time. Clock Out = your departure.
Loading shift status…
{% if role not in ('general_manager','manager') %}
{% endif %}
End of Day β€” Cash Drop
{% if role in ('general_manager','manager') %}
View only for managers.
{% elif eod_drop %}
Cash drop recorded: KES {{ "{:,.0f}".format(eod_drop.amount) }}
{% else %}
Remove all cash except tomorrow's float. Bank that amount, record it here. Then submit a final stock count.
After recording cash drop, submit a final stock count in the "Submit Count" tab.
{% endif %}
{% if role not in ('general_manager','manager') %}
Request Outlet Consumables
Request packaging bags, cups, straws, tumblers, serviettes, takeaway boxes etc. Manager approves from Store.
{% for i in consumables %} {% endfor %}
ItemUnitQty Needed
{{ i.name }} {{ i.unit }}
{% endif %}
Submission History
Loading…
{% endblock %} {% block scripts %} {% endblock %}