Add support for more cases + units, more vendor fields, for new purchase batches

This commit is contained in:
Lance Edgar 2016-11-11 01:56:37 -06:00
parent 1f9a27a7ae
commit 11b4cf9616
3 changed files with 97 additions and 17 deletions

View file

@ -96,12 +96,35 @@ class PurchaseBatchView(BatchMasterView):
fs.po_number.set(label="PO Number")
fs.po_total.set(label="PO Total", readonly=True)
fs.append(fa.Field('vendor_email', readonly=True,
value=lambda b: b.vendor.email.address if b.vendor.email else None))
fs.append(fa.Field('vendor_fax', readonly=True,
value=self.get_vendor_fax_number))
fs.append(fa.Field('vendor_contact', readonly=True,
value=lambda b: b.vendor.contact or None))
fs.append(fa.Field('vendor_phone', readonly=True,
value=self.get_vendor_phone_number))
def get_vendor_phone_number(self, batch):
for phone in batch.vendor.phones:
if phone.type == 'Voice':
return phone.number
def get_vendor_fax_number(self, batch):
for phone in batch.vendor.phones:
if phone.type == 'Fax':
return phone.number
def configure_fieldset(self, fs):
fs.configure(
include=[
fs.id,
fs.store,
fs.vendor,
fs.vendor_email,
fs.vendor_fax,
fs.vendor_contact,
fs.vendor_phone,
fs.buyer,
fs.date_ordered,
fs.po_number,
@ -116,6 +139,10 @@ class PurchaseBatchView(BatchMasterView):
if self.creating:
del fs.po_total
del fs.complete
del fs.vendor_email
del fs.vendor_fax
del fs.vendor_phone
del fs.vendor_contact
# default store may be configured
store = self.rattail_config.get('rattail', 'store')
@ -367,10 +394,15 @@ class PurchaseBatchView(BatchMasterView):
"""
batch = self.get_instance()
quantity = self.request.POST.get('cases_ordered')
if not quantity or not quantity.isdigit():
return {'error': "Invalid quantity: {}".format(quantity)}
quantity = int(quantity)
cases_ordered = self.request.POST.get('cases_ordered', '0')
if not cases_ordered or not cases_ordered.isdigit():
return {'error': "Invalid value for cases ordered: {}".format(cases_ordered)}
cases_ordered = int(cases_ordered)
units_ordered = self.request.POST.get('units_ordered', '0')
if not units_ordered or not units_ordered.isdigit():
return {'error': "Invalid value for units ordered: {}".format(units_ordered)}
units_ordered = int(units_ordered)
uuid = self.request.POST.get('product_uuid')
product = Session.query(model.Product).get(uuid) if uuid else None
@ -383,23 +415,26 @@ class PurchaseBatchView(BatchMasterView):
row = rows[0]
if row.po_total and not row.removed:
batch.po_total -= row.po_total
if quantity:
row.cases_ordered = quantity
if cases_ordered or units_ordered:
row.cases_ordered = cases_ordered
row.units_ordered = units_ordered
row.removed = False
self.handler.refresh_row(row)
else:
row.removed = True
elif quantity:
elif cases_ordered or units_ordered:
row = model.PurchaseBatchRow()
row.sequence = max([0] + [r.sequence for r in batch.data_rows]) + 1
row.product = product
batch.data_rows.append(row)
row.cases_ordered = quantity
row.cases_ordered = cases_ordered
row.units_ordered = units_ordered
self.handler.refresh_row(row)
return {
'row_cases_ordered': '' if row.removed else int(row.cases_ordered),
'row_units_ordered': '' if row.removed else int(row.units_ordered),
'row_po_total': '' if row.removed else '${:0,.2f}'.format(row.po_total),
'batch_po_total': '${:0,.2f}'.format(batch.po_total),
}