Add first attempt at food stamp support

definitely does not work right yet, will have to circle back
This commit is contained in:
Lance Edgar 2023-10-19 19:13:48 -05:00
parent 4a9c93c96b
commit 22894b6c7a
2 changed files with 73 additions and 37 deletions

View file

@ -66,7 +66,8 @@ class WuttaTxnItem(WuttaControl):
self.sales_total = ft.TextSpan(style=self.sales_total_style) self.sales_total = ft.TextSpan(style=self.sales_total_style)
self.tax_flag = ft.TextSpan(style=self.major_style) self.fs_flag = ft.TextSpan(style=self.minor_style)
self.tax_flag = ft.TextSpan(style=self.minor_style)
# set initial text display values # set initial text display values
self.refresh(update=False) self.refresh(update=False)
@ -85,9 +86,9 @@ class WuttaTxnItem(WuttaControl):
), ),
ft.Text( ft.Text(
spans=[ spans=[
self.sales_total, self.fs_flag,
ft.TextSpan(" "),
self.tax_flag, self.tax_flag,
self.sales_total,
], ],
), ),
@ -135,7 +136,8 @@ class WuttaTxnItem(WuttaControl):
self.quantity.text = self.app.render_quantity(self.row.quantity) self.quantity.text = self.app.render_quantity(self.row.quantity)
self.txn_price.text = self.app.render_currency(self.row.txn_price) self.txn_price.text = self.app.render_currency(self.row.txn_price)
self.sales_total.text = self.app.render_currency(self.row.sales_total) self.sales_total.text = self.app.render_currency(self.row.sales_total)
self.tax_flag.text = f"T{self.row.tax_code}" if self.row.tax_code else "" self.fs_flag.text = "FS " if self.row.foodstamp_eligible else ""
self.tax_flag.text = f"T{self.row.tax_code} " if self.row.tax_code else ""
if self.row.void: if self.row.void:
self.sales_total_style.color = None self.sales_total_style.color = None

View file

@ -150,7 +150,20 @@ class POSView(WuttaView):
total = self.app.render_currency(batch.tender_total) total = self.app.render_currency(batch.tender_total)
self.subtotals.spans.append(ft.TextSpan(total, style=bold)) self.subtotals.spans.append(ft.TextSpan(total, style=bold))
self.txn_balance.value = self.app.render_currency(batch.get_balance() or 0) self.fs_balance.spans.clear()
fs_balance = batch.get_fs_balance()
if fs_balance:
self.fs_balance.spans.append(ft.TextSpan("FS ", style=reg))
total = self.app.render_currency(fs_balance)
self.fs_balance.spans.append(ft.TextSpan(total, style=bold))
self.balances.spans.clear()
self.balances.spans.append(ft.TextSpan(" ", style=reg))
total = self.app.render_currency(batch.get_balance() or 0)
self.balances.spans.append(
ft.TextSpan(total, style=ft.TextStyle(size=40, weight=ft.FontWeight.BOLD)))
self.totals_row.bgcolor = 'orange' self.totals_row.bgcolor = 'orange'
@ -173,8 +186,15 @@ class POSView(WuttaView):
key = self.app.get_product_key_field() key = self.app.get_product_key_field()
item_entry = str(getattr(product, key) or '') or uuid item_entry = str(getattr(product, key) or '') or uuid
try:
row = handler.process_entry(batch, product or entry, quantity=quantity, row = handler.process_entry(batch, product or entry, quantity=quantity,
item_entry=item_entry, user=user) item_entry=item_entry, user=user)
except Exception as error:
session.rollback()
self.show_snackbar(f"ERROR: {error}", bgcolor='yellow')
row = None
else:
if row: if row:
session.commit() session.commit()
@ -197,6 +217,7 @@ class POSView(WuttaView):
session.commit() session.commit()
self.refresh_totals(batch) self.refresh_totals(batch)
session.close() session.close()
self.page.update() self.page.update()
return bool(row) return bool(row)
@ -562,6 +583,7 @@ class POSView(WuttaView):
handler = self.get_batch_handler() handler = self.get_batch_handler()
self.tender_cash = handler.get_tender(session, 'cash') self.tender_cash = handler.get_tender(session, 'cash')
self.tender_check = handler.get_tender(session, 'check') self.tender_check = handler.get_tender(session, 'check')
self.tender_foodstamp = handler.get_tender(session, 'foodstamp')
session.expunge_all() session.expunge_all()
session.close() session.close()
@ -577,14 +599,19 @@ class POSView(WuttaView):
) )
self.subtotals = ft.Text(spans=[]) self.subtotals = ft.Text(spans=[])
self.fs_balance = ft.Text(spans=[])
self.txn_balance = ft.Text("", size=40, weight=ft.FontWeight.BOLD) self.balances = ft.Text(spans=[])
self.totals_row = ft.Container( self.totals_row = ft.Container(
ft.Row( ft.Row(
[ [
self.subtotals, self.subtotals,
self.txn_balance, ft.Row(
[
self.fs_balance,
self.balances,
],
),
], ],
alignment=ft.MainAxisAlignment.SPACE_BETWEEN, alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
), ),
@ -705,6 +732,12 @@ class POSView(WuttaView):
], ],
spacing=0, spacing=0,
), ),
ft.Row(
[
self.make_foodstamp_button(),
],
spacing=0,
),
], ],
spacing=0, spacing=0,
), ),
@ -782,6 +815,7 @@ class POSView(WuttaView):
self.context_menu, self.context_menu,
self.suspend_menu, self.suspend_menu,
], ],
vertical_alignment=ft.CrossAxisAlignment.START,
), ),
], ],
), ),
@ -829,23 +863,16 @@ class POSView(WuttaView):
else: else:
info = tender info = tender
font_size = kwargs.pop('font_size', self.default_font_size)
text = ft.Text(info['tender_name'],
size=font_size,
weight=ft.FontWeight.BOLD)
kw = { kw = {
'font_size': self.default_font_size,
'height': self.default_button_size, 'height': self.default_button_size,
'width': self.default_button_size * 2, 'width': self.default_button_size * 2,
'on_click': self.tender_click, 'on_click': self.tender_click,
'alignment': ft.alignment.center,
'border': ft.border.all(1, 'black'),
'border_radius': ft.border_radius.all(5),
'bgcolor': 'orange', 'bgcolor': 'orange',
} }
kw.update(kwargs) kw.update(kwargs)
kw['data'] = info kw['data'] = info
return ft.Container(content=text, **kw) return self.make_button(info['tender_name'], **kw)
def make_cash_button(self, **kwargs): def make_cash_button(self, **kwargs):
cash = self.tender_cash or {'tender_code': 'CA', cash = self.tender_cash or {'tender_code': 'CA',
@ -857,6 +884,12 @@ class POSView(WuttaView):
'tender_name': "Check"} 'tender_name': "Check"}
return self.make_tender_button(check, **kwargs) return self.make_tender_button(check, **kwargs)
def make_foodstamp_button(self, **kwargs):
foodstamp = self.tender_foodstamp or {'tender_code': 'FS',
'tender_name': "Food Stamps"}
kwargs.setdefault('font_size', 34)
return self.make_tender_button(foodstamp, **kwargs)
def make_suspend_button(self, **kwargs): def make_suspend_button(self, **kwargs):
return self.make_button("SUSPEND", bgcolor='purple', return self.make_button("SUSPEND", bgcolor='purple',
font_size=self.default_font_size, font_size=self.default_font_size,
@ -1622,7 +1655,8 @@ class POSView(WuttaView):
self.items.controls.clear() self.items.controls.clear()
self.subtotals.spans.clear() self.subtotals.spans.clear()
self.txn_balance.value = None self.fs_balance.spans.clear()
self.balances.spans.clear()
self.totals_row.bgcolor = None self.totals_row.bgcolor = None
self.page.session.set('txn_display', None) self.page.session.set('txn_display', None)