Add first attempt at food stamp support
definitely does not work right yet, will have to circle back
This commit is contained in:
parent
4a9c93c96b
commit
22894b6c7a
|
@ -66,7 +66,8 @@ class WuttaTxnItem(WuttaControl):
|
|||
|
||||
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
|
||||
self.refresh(update=False)
|
||||
|
@ -85,9 +86,9 @@ class WuttaTxnItem(WuttaControl):
|
|||
),
|
||||
ft.Text(
|
||||
spans=[
|
||||
self.sales_total,
|
||||
ft.TextSpan(" "),
|
||||
self.fs_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.txn_price.text = self.app.render_currency(self.row.txn_price)
|
||||
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:
|
||||
self.sales_total_style.color = None
|
||||
|
|
|
@ -150,7 +150,20 @@ class POSView(WuttaView):
|
|||
total = self.app.render_currency(batch.tender_total)
|
||||
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'
|
||||
|
||||
|
@ -173,30 +186,38 @@ class POSView(WuttaView):
|
|||
key = self.app.get_product_key_field()
|
||||
item_entry = str(getattr(product, key) or '') or uuid
|
||||
|
||||
row = handler.process_entry(batch, product or entry, quantity=quantity,
|
||||
item_entry=item_entry, user=user)
|
||||
|
||||
if row:
|
||||
session.commit()
|
||||
|
||||
if row.row_type == self.enum.POS_ROW_TYPE_BADPRICE:
|
||||
self.show_snackbar(f"Product has invalid price: {row.item_entry}",
|
||||
bgcolor='yellow')
|
||||
|
||||
else:
|
||||
self.add_row_item(row, scroll=True)
|
||||
self.refresh_totals(batch)
|
||||
self.reset()
|
||||
try:
|
||||
row = handler.process_entry(batch, product or entry, quantity=quantity,
|
||||
item_entry=item_entry, user=user)
|
||||
except Exception as error:
|
||||
session.rollback()
|
||||
self.show_snackbar(f"ERROR: {error}", bgcolor='yellow')
|
||||
row = None
|
||||
|
||||
else:
|
||||
|
||||
if record_badscan:
|
||||
handler.record_badscan(batch, entry, quantity=quantity, user=user)
|
||||
if row:
|
||||
session.commit()
|
||||
|
||||
self.show_snackbar(f"PRODUCT NOT FOUND: {entry}", bgcolor='yellow')
|
||||
if row.row_type == self.enum.POS_ROW_TYPE_BADPRICE:
|
||||
self.show_snackbar(f"Product has invalid price: {row.item_entry}",
|
||||
bgcolor='yellow')
|
||||
|
||||
else:
|
||||
self.add_row_item(row, scroll=True)
|
||||
self.refresh_totals(batch)
|
||||
self.reset()
|
||||
|
||||
else:
|
||||
|
||||
if record_badscan:
|
||||
handler.record_badscan(batch, entry, quantity=quantity, user=user)
|
||||
|
||||
self.show_snackbar(f"PRODUCT NOT FOUND: {entry}", bgcolor='yellow')
|
||||
|
||||
session.commit()
|
||||
self.refresh_totals(batch)
|
||||
|
||||
session.commit()
|
||||
self.refresh_totals(batch)
|
||||
session.close()
|
||||
self.page.update()
|
||||
return bool(row)
|
||||
|
@ -562,6 +583,7 @@ class POSView(WuttaView):
|
|||
handler = self.get_batch_handler()
|
||||
self.tender_cash = handler.get_tender(session, 'cash')
|
||||
self.tender_check = handler.get_tender(session, 'check')
|
||||
self.tender_foodstamp = handler.get_tender(session, 'foodstamp')
|
||||
session.expunge_all()
|
||||
session.close()
|
||||
|
||||
|
@ -577,14 +599,19 @@ class POSView(WuttaView):
|
|||
)
|
||||
|
||||
self.subtotals = ft.Text(spans=[])
|
||||
|
||||
self.txn_balance = ft.Text("", size=40, weight=ft.FontWeight.BOLD)
|
||||
self.fs_balance = ft.Text(spans=[])
|
||||
self.balances = ft.Text(spans=[])
|
||||
|
||||
self.totals_row = ft.Container(
|
||||
ft.Row(
|
||||
[
|
||||
self.subtotals,
|
||||
self.txn_balance,
|
||||
ft.Row(
|
||||
[
|
||||
self.fs_balance,
|
||||
self.balances,
|
||||
],
|
||||
),
|
||||
],
|
||||
alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
|
||||
),
|
||||
|
@ -705,6 +732,12 @@ class POSView(WuttaView):
|
|||
],
|
||||
spacing=0,
|
||||
),
|
||||
ft.Row(
|
||||
[
|
||||
self.make_foodstamp_button(),
|
||||
],
|
||||
spacing=0,
|
||||
),
|
||||
],
|
||||
spacing=0,
|
||||
),
|
||||
|
@ -782,6 +815,7 @@ class POSView(WuttaView):
|
|||
self.context_menu,
|
||||
self.suspend_menu,
|
||||
],
|
||||
vertical_alignment=ft.CrossAxisAlignment.START,
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@ -829,23 +863,16 @@ class POSView(WuttaView):
|
|||
else:
|
||||
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 = {
|
||||
'font_size': self.default_font_size,
|
||||
'height': self.default_button_size,
|
||||
'width': self.default_button_size * 2,
|
||||
'on_click': self.tender_click,
|
||||
'alignment': ft.alignment.center,
|
||||
'border': ft.border.all(1, 'black'),
|
||||
'border_radius': ft.border_radius.all(5),
|
||||
'bgcolor': 'orange',
|
||||
}
|
||||
kw.update(kwargs)
|
||||
kw['data'] = info
|
||||
return ft.Container(content=text, **kw)
|
||||
return self.make_button(info['tender_name'], **kw)
|
||||
|
||||
def make_cash_button(self, **kwargs):
|
||||
cash = self.tender_cash or {'tender_code': 'CA',
|
||||
|
@ -857,6 +884,12 @@ class POSView(WuttaView):
|
|||
'tender_name': "Check"}
|
||||
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):
|
||||
return self.make_button("SUSPEND", bgcolor='purple',
|
||||
font_size=self.default_font_size,
|
||||
|
@ -1622,7 +1655,8 @@ class POSView(WuttaView):
|
|||
self.items.controls.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.page.session.set('txn_display', None)
|
||||
|
|
Loading…
Reference in a new issue