{{ sectionTitles[currentSection] }}
Shop Online
{{ clockTime }}
Today's Jobs
assignment
{{ stats.total || 0 }}
Active workflow count
Revenue Today
payments
₹{{ formatNum(summary.total_revenue) }}
Cash: ₹{{ formatNum(summary.cash) }} | UPI: ₹{{ formatNum(summary.upi) }}
Ready for Delivery
check_circle
{{ stats.ready || 0 }}
Notify customers
Expenses Today
receipt_long
₹{{ formatNum(summary.expenses) }}
Daily store overheads
task_alt
Jobs Ready for Customer Pickup
verified
No pending pickups
All completed jobs have been delivered.
{{ job.job_no }}
{{ job.customer_name || 'Walk-in' }} • ₹{{ formatNum(job.total_amount) }}
warning
Stock & Material Alerts
inventory_2
Supplies Healthy
All papers, toners and materials are above min threshold.
{{ item.name }}
Min Level: {{ item.min_qty }} {{ item.unit }}
warning
{{ item.current_qty }} {{ item.unit }}
person
Customer Information
bolt
Quick Add Presets
add_circle
Custom Service / Custom Sized Item
receipt
Current Invoice
shopping_basket
No items added to bill yet
{{ item.description }}
{{ item.quantity }} × ₹{{ item.unit_price }}
({{ item.width }}×{{ item.height }} ft)
₹{{ formatNum(item.total_price) }}
Subtotal
₹{{ formatNum(posSubtotal) }}
GST Amount
₹{{ formatNum(posGstAmount) }}
Discount
-₹{{ formatNum(pos.discount) }}
TOTAL
₹{{ formatNum(posGrandTotal) }}
{{ col.icon }}
{{ col.label }}
{{ filterJobsByStatus(col.id).length }}
No jobs in this stage
{{ job.job_no }}
online
{{ job.customer_name || 'Walk-in' }}
{{ (job.items || []).map(i => i.service_name || i.description).join(', ').slice(0, 45) || 'Printing Service' }}
₹{{ formatNum(job.total_amount) }}
{{ job.due_date ? formatDate(job.due_date) : 'No due date' }}
warning
| Job No | Customer | Items Summary | Total (₹) | Balance Due | Status | Due Date | Actions |
|---|---|---|---|---|---|---|---|
| {{ job.job_no }} online |
{{ job.customer_name || 'Walk-in' }}
{{ job.customer_phone || '' }}
|
{{ (job.items || []).map(i => i.service_name || i.description).join(', ').slice(0, 45) || 'Service' }} | ₹{{ formatNum(job.total_amount) }} | ₹{{ formatNum(job.balance_due) }} | {{ job.status }} | {{ job.due_date ? formatDate(job.due_date) : '—' }} warning |
|
shopping_cart
Online Customer Order Stream
inbox
No Pending Online Orders
Customer orders placed from the customer app will show up here in real-time.
| Order No | Customer Details | Order Date | Ordered Items | Customer Uploaded Files | Amount | Status Stage | Actions |
|---|---|---|---|---|---|---|---|
| {{ order.order_no }} |
{{ order.customer_name || 'Customer' }}
call
{{ order.customer_phone || 'No phone' }}
|
{{ formatDate(order.created_at) }} |
{{ it.service_name || it.description }}
× {{ it.quantity }}
Standard Print
|
No files | ₹{{ formatNum(order.total) }} | {{ order.status }} |
|
inventory_2
Store Inventory & Paper Stock
warning
Low Stock Threshold Alert: {{ lowStockItems.map(i => `${i.name} (${i.current_qty} ${i.unit})`).join(', ') }}
| Item Name | Category | Current Quantity | Minimum Alert Level | Cost Price | Storage / Notes | Action |
|---|---|---|---|---|---|---|
| {{ item.name }} | {{ item.category }} | {{ item.current_qty }} {{ item.unit }} warning | {{ item.min_qty }} {{ item.unit }} | ₹{{ formatNum(item.cost_price) }} | {{ item.notes || '—' }} |
payments
Daily Expenses & Overheads
Today's Recorded Expenses
receipt_long
₹{{ formatNum(todayExpenseTotal) }}
{{ expensesList.length }} Entries recorded today
| Time | Category | Description / Purpose | Recorded By | Amount (₹) | Action |
|---|---|---|---|---|---|
| {{ formatTime(exp.created_at) }} | {{ exp.category }} | {{ exp.description || '—' }} | {{ exp.paid_by_name || 'Staff' }} | ₹{{ formatNum(exp.amount) }} |
precision_manufacturing
Printing & Xerox Machine Fleet
{{ m.name }}
{{ m.model || '' }} ({{ m.type }})
Current Meter Counter
{{ (m.current_meter || 0).toLocaleString('en-IN') }}
Last check: {{ formatDate(m.last_reading.created_at) }} • Count: {{ m.last_reading.reading }}
group
Customer Directory & Khata Balances
search
| Customer Name | Mobile Phone | Total Orders | Khata Store Credit | Actions |
|---|---|---|---|---|
| {{ c.name }} | {{ c.phone || '—' }} | {{ c.total_orders || 0 }} | ₹{{ formatNum(c.credit_balance) }} |
|
badge
Shop Employee & Staff Roster
| Staff Name | Username | Phone | Assigned Role | Salary (₹) | Joining Date | Status | Action |
|---|---|---|---|---|---|---|---|
| {{ emp.name }} | {{ emp.username }} |
{{ emp.phone || '—' }} | {{ emp.role_type || 'counter' }} | ₹{{ formatNum(emp.salary) }} | {{ formatDate(emp.join_date) }} | {{ emp.is_active ? 'Active' : 'Inactive' }} |
to
Period Gross Revenue
₹{{ formatNum(reportSalesTotal) }}
Total Completed Jobs
{{ reportOrdersCount }}
Daily Sales Breakdown
| Period Date | Total Jobs | Revenue (₹) |
|---|---|---|
| {{ formatDate(row.period) }} | {{ row.orders }} | ₹{{ formatNum(row.revenue) }} |
Gross Revenue
₹{{ formatNum(reportData?.revenue) }}
Store Expenses
₹{{ formatNum(reportData?.expenses) }}
Net Profit / Loss
₹{{ formatNum(reportData?.profit) }}
GST Liability (Sales vs Purchases)
Output GST (Billed)
₹{{ formatNum(reportData?.output_gst) }}
Net Tax Payable
₹{{ formatNum(reportData?.net_gst || reportData?.output_gst) }}
Customer Pending Dues
| Customer Name | Phone | Pending Amount (₹) |
|---|---|---|
| {{ due.name }} | {{ due.phone || '—' }} | ₹{{ formatNum(due.balance_due) }} |