No outlet resolved
++ Counter sales are scoped to a single outlet, and your account isn’t linked to one yet. + Ask your administrator to allocate you to a store location. +
++ “Net collected” is the sum of bill totals — after discount and round-off. Gross before discount is{' '} + {inr((merged.grosssales ?? 0) + (merged.discountgiven ?? 0))}. +
+ > + ); +} + +// ── Terminals ──────────────────────────────────────────────────────────────── + +function TerminalsTab({ + health, + outletName, + isStoreScope, + loading, +}: { + health: Array<{ locationid: number; total: number; online: number; terminals: PosTerminal[] }>; + outletName: Map+ {t.reason || 'No heartbeat inside the presence window.'} +
+ ) : ( + <> ++ Clock is {humanDuration(t.clockDriftSeconds as number)}{' '} + {(t.clockDriftSeconds as number) > 0 ? 'ahead of' : 'behind'} the server — bills may be filed under the + wrong business date. +
+ )} + > + )} +| Item | +Qty | +Rate | +GST | +Total | +
|---|---|---|---|---|
|
+ {it.productname || `#${it.productid}`}
+ {it.barcode && (
+ {it.barcode}
+ )}
+ |
+ + {it.quantity} + {it.unitname ? ` ${it.unitname}` : ''} + | +{inr(it.unitprice)} | +
+ {/* gstrate arrives as a fraction (0.18), not a percentage. */}
+ {(it.gstrate * 100).toFixed(it.gstrate * 100 % 1 === 0 ? 0 : 2)}%
+ {inr(it.taxamount)}
+ |
+ {inr(it.linetotal)} | +
+ This bill has no stored line items. +
+ )} + +| + {c.label} + | + ))} +
|---|
{hint}
} +{body}
++ Counter sales are scoped to a single outlet, and your account isn’t linked to one yet. + Ask your administrator to allocate you to a store location. +
+