Day Close and Shifts
Open a shift with your opening cash, close the day with a cash count, read the Daily Sales Closes list and print the day close report.
A shift starts when you count the cash in the drawer. A day close ends it: the app totals every sale, payment, return and expense since your last close, and you count the cash again.
You find both under Sales → Day Sale Closing. You need menu.sales.day_closing.access.
Action | When | Result |
|---|---|---|
Open Shift | Start of work | A draft day close with your opening cash |
Day Close | End of work | The close is saved with the totals and your closing cash |
The Daily Sales Closes list

*Daily Sales Closes: one row per sales executive and business date with total orders, total sales and online sales; Open Shift and Day Close buttons*
Daily Sales Closes lists your closes, newest first: "Review daily sales and shift closures."
Column | Meaning |
|---|---|
Sales Executive | Who closed |
Phone | Their phone |
Store | The store |
Business Date | The trading day the close belongs to |
Shift Name | The shift label |
Total Orders | Orders in the close |
Total Sales | Sales value |
Online Sales | Card and other non-cash sales |
Cash Sales | Cash sales |
Credit Amount | Sold on credit |
Status | DRAFT (shift open) or CLOSED |
Action | View Details |
- Filter by Business Date with Show Filters.
- Export saves the list to Excel.
- Open Shift and Day Close buttons are at the top.
Open a shift

*Open Shift: store, shift name, business date, opening time, opening cash balance with a denomination breakdown, notes, and Save Opening Draft*
"Capture opening time and opening cash before starting sales."
- Tap Open Shift.
- Store is filled in with your active store.
- Enter a Shift Name, for example "Morning". If you leave it empty the server uses its default name.
- Check the Business Date.
- Set Opening Time\* (required).
- Count the drawer. In Opening Cash Breakdown, pick a Denomination, enter the Count, and use Add Row for the next note or coin. The total fills Opening Cash Balance (SAR).
- Add Notes if needed.
- Tap Save Opening Draft. You see "Shift opened successfully".
Denominations come from the master-data list CASH_DENOMINATIONS. The seeded values are 500, 200, 100, 50, 20, 10, 5 and 1.
You can have only one open shift per user per store. If one is already open, the server replies "A draft day close is already open for this store." Close that one first.
Close the day
Before you start, check Sales → Confirmed Orders. If any sale on this device has not reached the server, Day Close warns you:
Sync orders before Day Close? 1 order has not been synced to the server yet. Sync them on the Confirmed Orders page before closing the day, otherwise they will be missing from this day close.
Choose Go to Confirmed Orders (recommended), Close anyway or Cancel.
Step 1: Day Close

*Day Close step 1: session information, business date, shift name, opening/closing time and the transaction overview since the last close*
"Summary of today's activities."
- Tap Day Close.
- Check Session Information: User, Opening time and Closing time.
- Check Business Date and Shift Name. Set Opening Time and Closing Time if needed.
- Read the Transaction Overview. It covers everything since your last close.
- Count the drawer in Closing Cash Breakdown. This fills Closing Cash In Hand.
- Enter any Cash Drop Amount (cash taken out of the drawer to the safe or bank) and Cash Refunds.
- Add Notes.
- Tap Next.
The Transaction Overview cards:
Card | Meaning |
|---|---|
TOTAL ORDERS | Number of orders |
TOTAL SALES | Value of the orders |
PAYMENT RECEIVED | All money received, including old balances |
COLLECTED ON SALE | Money received on these sales |
CASH SALES / ONLINE SALES | Split by payment type |
CREDIT AMOUNT | Sold on credit (not yet paid) |
CREDIT COLLECTED | Old customer balances paid in this period |
CASH EXPENSES / BANK EXPENSES / TOTAL EXPENSE | Expenses entered in Transactions → Expense |
TOTAL RETURNS / TOTAL REFUNDS | Under Returns & Refunds |
Demo values. After Layla's sale (card 400, cash 258 net of change):
Card | Value |
|---|---|
TOTAL ORDERS | 1 |
TOTAL SALES | 658 |
PAYMENT RECEIVED | 658 |
COLLECTED ON SALE | 658 |
Step 2: Confirm Close

*Day Close step 2 (Confirm Close): expected closing cash and today's cash collection, then Confirm & Close Day*
"Review expected closing cash and today's collection before final closure."
Figure | Demo value |
|---|---|
Expected Closing Cash | SAR 258.00 |
Today Cash Collection | SAR 258.00 |
Compare Expected Closing Cash with the cash you counted. Then tap Confirm & Close Day. You see "Day close created successfully". Use Back to fix a figure first.
Read and print a close
Tap View Details on a row. The detail page (Daily Sales Close - period) shows:
- Closing Period Details: Opening Date, Closing Date, opening and closing times.
- Sales Summary and Collection Summary: Total Cash Sales, Total Online Sales, Total Credit Amount, Total Credit Collected (Prev Balance).
- Return & Refund: Total Returns (Sales Return), Total Refunds (Vouchers), Refund — Cash, Refund — Online.
- Payment Method Breakdown.
- Expenses Breakdown: Cash Expenses, Bank Expenses, Total Expense.
- Cash Summary: Opening Cash In Hand, Cash Drop Amount, Expected Closing Cash, Today Cash Collection, Closing Cash In Hand, Short Cash, Excess Cash.
- Cash Denomination Breakdown for opening and closing.
- Transactions and the product summary (SL No, Particulars, Qty, MRP, Rate, Total).
To print, tap print and choose thermal or standard paper. The app asks Print Transaction List? "Do you want to include transaction details in this Print?" Answer Yes for the full list or No for totals only.
Admin Day Sale Records
Company admins see Sales → Admin Day Sale Records (Admin: Daily Sales Records). It needs the company_admin role and the day-closing permission.
- Filter by Date and by sales executive (All sales executives or one person).
- Columns: ID, Sales Executive, Phone, Store, Closing Period.
- Open a record to see the same detail page.
Compulsory shift and day close
Two company settings make shifts mandatory. Both are off by default.
Setting | What happens |
|---|---|
| When you open Billing with no open shift, the app shows Shift Not Opened: "You must open a shift before starting sales." It takes you to Open Shift. |
| At Select Store, if a day before today was not closed, the app shows Day Close Pending: "You did not close your last day sales for 2026-10-26. Do you want to close it now?" Yes opens the Day Close form for that date. |
How it works
Expected closing cash
Expected Closing Cash = Opening Cash In Hand
+ Cash collected
− Cash refunds
− Cash expenses
− Cash drop amount
Today Cash Collection = Expected Closing Cash − Opening Cash In HandCash collected is net of change. In the demo the customer paid 300 cash on a 658 bill with 400 by card, so 42.00 went back as change and 258 counts as cash.
When you enter a closing cash count, the server stores the difference:
- Counted less than expected → Short Cash = expected − counted.
- Counted more → Excess Cash = counted − expected.
Period covered
- A close covers transactions after the previous close's last transaction.
- For a first close, or after a long gap, the server looks back only 7 days. Older unclosed transactions are skipped, and the server returns a notice.
- If you leave Shift Name empty, the server uses its default shift name.
Statuses
Status | Meaning |
|---|---|
| Shift opened, not yet closed |
| Day close confirmed |
API calls
Step | Call |
|---|---|
List |
|
Detail |
|
Shift check |
|
Totals for the form |
|
Open Shift |
|
Day Close |
|
Executives (admin filter) |
|
Denominations |
|
These endpoints answer with success: true/false instead of status. Validation errors come back as 422 with an errors object.