Initial (basic) views for invoice costing batches

still a bit of feature preview at the moment, but maybe is mostly done?
This commit is contained in:
Lance Edgar 2021-09-29 17:27:20 -04:00
parent ed705ff867
commit bbfffd45fc
4 changed files with 393 additions and 39 deletions

View file

@ -30,6 +30,7 @@ import six
from rattail.db import model, api
from rattail.time import localtime
from rattail.vendors.invoices import iter_invoice_parsers
import colander
from deform import widget as dfwidget
@ -220,6 +221,7 @@ class PurchasingBatchView(BatchMasterView):
super(PurchasingBatchView, self).configure_form(f)
batch = f.model_instance
today = localtime(self.rattail_config).date()
use_buefy = self.get_use_buefy()
# mode
f.set_enum('mode', self.enum.PURCHASE_BATCH_MODE)
@ -313,6 +315,25 @@ class PurchasingBatchView(BatchMasterView):
field_display=buyer_display, service_url=buyers_url))
f.set_label('buyer_uuid', "Buyer")
# invoice_file
if self.creating:
f.set_type('invoice_file', 'file', required=False)
else:
f.set_readonly('invoice_file')
f.set_renderer('invoice_file', self.render_downloadable_file)
# invoice_parser_key
if self.creating:
parsers = sorted(iter_invoice_parsers(), key=lambda p: p.display)
parser_values = [(p.key, p.display) for p in parsers]
parser_values.insert(0, ('', "(please choose)"))
if use_buefy:
f.set_widget('invoice_parser_key', dfwidget.SelectWidget(values=parser_values))
else:
f.set_widget('invoice_parser_key', forms.widgets.JQuerySelectWidget(values=parser_values))
else:
f.remove_field('invoice_parser_key')
# date_ordered
f.set_type('date_ordered', 'date_jquery')
if self.creating:
@ -582,8 +603,11 @@ class PurchasingBatchView(BatchMasterView):
g.set_type('po_total_calculated', 'currency')
g.set_type('credits', 'boolean')
# we only want the grid column to have abbreviated label, but *not* the filter
# we only want the grid columns to have abbreviated labels,
# but *not* the filters
# TODO: would be nice to somehow make this simpler
g.set_label('department_name', "Department")
g.filters['department_name'].label = "Department Name"
g.set_label('cases_ordered', "Cases Ord.")
g.filters['cases_ordered'].label = "Cases Ordered"
g.set_label('units_ordered', "Units Ord.")
@ -597,6 +621,16 @@ class PurchasingBatchView(BatchMasterView):
g.set_label('units_received', "Units Rec.")
g.filters['units_received'].label = "Units Received"
# catalog_unit_cost
g.set_renderer('catalog_unit_cost', self.render_row_grid_cost)
g.set_label('catalog_unit_cost', "Catalog Cost")
g.filters['catalog_unit_cost'].label = "Catalog Unit Cost"
# invoice_unit_cost
g.set_renderer('invoice_unit_cost', self.render_row_grid_cost)
g.set_label('invoice_unit_cost', "Invoice Cost")
g.filters['invoice_unit_cost'].label = "Invoice Unit Cost"
# invoice_total
g.set_type('invoice_total', 'currency')
g.set_label('invoice_total', "Total")
@ -608,6 +642,12 @@ class PurchasingBatchView(BatchMasterView):
g.set_label('po_total', "Total")
g.set_label('credits', "Credits?")
def render_row_grid_cost(self, row, field):
cost = getattr(row, field)
if cost is None:
return ""
return "{:0,.3f}".format(cost)
def make_row_grid_tools(self, batch):
return self.make_default_row_grid_tools(batch)