Add support for more cases + units, more vendor fields, for new purchase batches
This commit is contained in:
parent
1f9a27a7ae
commit
11b4cf9616
3 changed files with 97 additions and 17 deletions
|
@ -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),
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue