Add read endpoints for counter sales
The ingest only ever wrote. A bill that reached pos_orders was safe and completely unreachable — no screen in the product could show it, and the only way to see a day's counter takings was to query the database by hand. Three endpoints: a paged bill list, one bill with its lines, and a summary split the three ways somebody actually asks for — by tender for reconciling a drawer, by day for a chart, by till for an outlet running several counters. locationid is required on all of them and is the authorisation boundary, so a caller cannot page through another shop's takings by omitting a parameter. Fetching a bill under the wrong outlet returns 404 even when the reference is a real one. Dates match businessdate rather than arrival, because a till that was offline overnight uploads yesterday's bills this morning and they belong to yesterday. The list is ordered by billedat for the same reason — sorting by arrival would interleave a recovered backlog through today. Unlike the ingest handlers these answer in the usual envelope: they are read by the web app, not by a terminal, and nothing about them is bound to the till's contract. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -56,6 +56,18 @@ func (f *fakePosService) TerminalHealth(context.Context, string) (map[string]str
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f *fakePosService) Sales(models.PosSalesFilter) (*models.PosSalesPage, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f *fakePosService) SaleDetail(int, string) (*models.PosOrders, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f *fakePosService) SalesSummary(models.PosSalesFilter) (*models.PosSalesSummary, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f *fakePosService) LocationHealth(context.Context, string) ([]map[string]string, error) {
|
||||
return nil, nil
|
||||
}
|
||||
@@ -100,9 +112,9 @@ func (c *fakeClient) Subscribe(string, byte, mqtt.MessageHandler) mqtt.Token {
|
||||
func (c *fakeClient) SubscribeMultiple(map[string]byte, mqtt.MessageHandler) mqtt.Token {
|
||||
return doneToken{}
|
||||
}
|
||||
func (c *fakeClient) Unsubscribe(...string) mqtt.Token { return doneToken{} }
|
||||
func (c *fakeClient) AddRoute(string, mqtt.MessageHandler) {}
|
||||
func (c *fakeClient) OptionsReader() mqtt.ClientOptionsReader { return mqtt.ClientOptionsReader{} }
|
||||
func (c *fakeClient) Unsubscribe(...string) mqtt.Token { return doneToken{} }
|
||||
func (c *fakeClient) AddRoute(string, mqtt.MessageHandler) {}
|
||||
func (c *fakeClient) OptionsReader() mqtt.ClientOptionsReader { return mqtt.ClientOptionsReader{} }
|
||||
|
||||
type doneToken struct{}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user