diff --git a/tailbone/api/batch/core.py b/tailbone/api/batch/core.py index d279e0a2..9f056d9f 100644 --- a/tailbone/api/batch/core.py +++ b/tailbone/api/batch/core.py @@ -262,6 +262,7 @@ class APIBatchRowView(APIBatchMixin, APIMasterView): msg = "Feature is not implemented" return {'error': msg} + self.Session.flush() result = self._get(obj=row) result['ok'] = True return result diff --git a/tailbone/api/batch/receiving.py b/tailbone/api/batch/receiving.py index 9c8cf035..441b65d1 100644 --- a/tailbone/api/batch/receiving.py +++ b/tailbone/api/batch/receiving.py @@ -27,8 +27,10 @@ Tailbone Web API - Receiving Batches from __future__ import unicode_literals, absolute_import import six +import humanize from rattail.db import model +from rattail.time import make_utc from tailbone.api.batch import APIBatchView, APIBatchRowView @@ -41,6 +43,7 @@ class ReceivingBatchViews(APIBatchView): permission_prefix = 'receiving' collection_url_prefix = '/receiving-batches' object_url_prefix = '/receiving-batch' + supports_toggle_complete = True def normalize(self, batch): data = super(ReceivingBatchViews, self).normalize(batch) @@ -48,6 +51,9 @@ class ReceivingBatchViews(APIBatchView): data['vendor_uuid'] = batch.vendor.uuid data['vendor_display'] = six.text_type(batch.vendor) + data['department_uuid'] = batch.department_uuid + data['department_display'] = six.text_type(batch.department) if batch.department else None + return data def get_purchase(self, uuid): @@ -234,8 +240,38 @@ class ReceivingBatchRowViews(APIBatchRowView): data['item_id'] = row.item_id data['upc'] = six.text_type(row.upc) data['upc_pretty'] = row.upc.pretty() if row.upc else None + data['brand_name'] = row.brand_name data['description'] = row.description + data['size'] = row.size data['full_description'] = row.product.full_description if row.product else row.description + + data['case_quantity'] = row.case_quantity + data['unit_uom'] = 'EA' # TODO + data['order_quantities_known'] = batch.order_quantities_known + + data['cases_shipped'] = row.cases_shipped + data['units_shipped'] = row.units_shipped + + data['cases_received'] = row.cases_received + data['units_received'] = row.units_received + + data['cases_damaged'] = row.cases_damaged + data['units_damaged'] = row.units_damaged + + data['cases_expired'] = row.cases_expired + data['units_expired'] = row.units_expired + + # TODO: surely the caller of API should determine this flag? + # maybe alert user if they've already received some of this product + alert_received = self.rattail_config.getbool('tailbone', 'receiving.alert_already_received', + default=False) + if alert_received: + msg = '' + if self.handler.get_units_confirmed(row): + msg = "You have already received some of this product; last update was {}.".format( + humanize.naturaltime(make_utc() - row.modified)) + data['received_alert'] = msg + return data def collection_get(self):