Improve views for taxes, esp. in POS batches

This commit is contained in:
Lance Edgar 2023-10-07 16:26:33 -05:00
parent eccb855d09
commit 07b1d0841e
7 changed files with 113 additions and 17 deletions

View file

@ -26,6 +26,8 @@ Views for POS batches
from rattail.db.model import POSBatch, POSBatchRow
from webhelpers2.html import HTML
from tailbone.views.batch import BatchMasterView
@ -39,7 +41,11 @@ class POSBatchView(BatchMasterView):
route_prefix = 'batch.pos'
url_prefix = '/batch/pos'
creatable = False
editable = False
cloneable = True
refreshable = False
rows_deletable = False
rows_bulk_deletable = False
labels = {
'terminal_id': "Terminal ID",
@ -66,8 +72,7 @@ class POSBatchView(BatchMasterView):
'params',
'rowcount',
'sales_total',
'tax1_total',
'tax2_total',
'taxes',
'tender_total',
'balance',
'void',
@ -89,6 +94,7 @@ class POSBatchView(BatchMasterView):
'quantity',
'sales_total',
'tender_total',
'tax_code',
'user',
]
@ -102,8 +108,7 @@ class POSBatchView(BatchMasterView):
'txn_price',
'quantity',
'sales_total',
'tax1_total',
'tax2_total',
'tax_code',
'tender_total',
'tender',
'void',
@ -126,8 +131,6 @@ class POSBatchView(BatchMasterView):
g.set_link('created_by')
g.set_type('sales_total', 'currency')
g.set_type('tax1_total', 'currency')
g.set_type('tax2_total', 'currency')
g.set_type('tender_total', 'currency')
# executed
@ -149,13 +152,54 @@ class POSBatchView(BatchMasterView):
f.set_renderer('customer', self.render_customer)
f.set_type('sales_total', 'currency')
f.set_type('tax1_total', 'currency')
f.set_type('tax2_total', 'currency')
f.set_type('tender_total', 'currency')
f.set_type('tender_total', 'currency')
f.set_renderer('taxes', self.render_taxes)
f.set_renderer('balance', lambda batch, field: app.render_currency(batch.get_balance()))
def render_taxes(self, batch, field):
route_prefix = self.get_route_prefix()
factory = self.get_grid_factory()
g = factory(
key=f'{route_prefix}.taxes',
data=[],
columns=[
'code',
'description',
'rate',
'total',
],
)
return HTML.literal(
g.render_buefy_table_element(data_prop='taxesData'))
def template_kwargs_view(self, **kwargs):
kwargs = super().template_kwargs_view(**kwargs)
app = self.get_rattail_app()
batch = kwargs['instance']
taxes = []
for btax in batch.taxes.values():
data = {
'uuid': btax.uuid,
'code': btax.tax_code,
'description': btax.tax.description,
'rate': app.render_percent(btax.tax_rate),
'total': app.render_currency(btax.tax_total),
}
taxes.append(data)
taxes.sort(key=lambda t: t['code'])
kwargs['taxes_data'] = taxes
kwargs['execute_enabled'] = False
kwargs['why_not_execute'] = "POS batch must be executed at POS"
return kwargs
def configure_row_grid(self, g):
super().configure_row_grid(g)