Avoid use of self.handler
within batch API views
This commit is contained in:
parent
e46f4bf01e
commit
e67cde4255
|
@ -27,6 +27,7 @@ Tailbone Web API - Batch Views
|
|||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import logging
|
||||
import warnings
|
||||
|
||||
import six
|
||||
|
||||
|
@ -84,7 +85,14 @@ class APIBatchView(APIBatchMixin, APIMasterView):
|
|||
|
||||
def __init__(self, request, **kwargs):
|
||||
super(APIBatchView, self).__init__(request, **kwargs)
|
||||
self.handler = self.get_handler()
|
||||
self.batch_handler = self.get_handler()
|
||||
|
||||
@property
|
||||
def handler(self):
|
||||
warnings.warn("the `handler` property is deprecated; "
|
||||
"please use `batch_handler` instead",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
return self.batch_handler
|
||||
|
||||
def normalize(self, batch):
|
||||
app = self.get_rattail_app()
|
||||
|
@ -115,7 +123,7 @@ class APIBatchView(APIBatchMixin, APIMasterView):
|
|||
'executed_display': self.pretty_datetime(executed) if executed else None,
|
||||
'executed_by_uuid': batch.executed_by_uuid,
|
||||
'executed_by_display': six.text_type(batch.executed_by or ''),
|
||||
'mutable': self.handler.is_mutable(batch),
|
||||
'mutable': self.batch_handler.is_mutable(batch),
|
||||
}
|
||||
|
||||
def create_object(self, data):
|
||||
|
@ -128,9 +136,9 @@ class APIBatchView(APIBatchMixin, APIMasterView):
|
|||
user = self.request.user
|
||||
kwargs = dict(data)
|
||||
kwargs['user'] = user
|
||||
batch = self.handler.make_batch(self.Session(), **kwargs)
|
||||
if self.handler.should_populate(batch):
|
||||
self.handler.do_populate(batch, user)
|
||||
batch = self.batch_handler.make_batch(self.Session(), **kwargs)
|
||||
if self.batch_handler.should_populate(batch):
|
||||
self.batch_handler.do_populate(batch, user)
|
||||
return batch
|
||||
|
||||
def update_object(self, batch, data):
|
||||
|
@ -198,7 +206,7 @@ class APIBatchView(APIBatchMixin, APIMasterView):
|
|||
kwargs = dict(self.request.json_body)
|
||||
kwargs.pop('user', None)
|
||||
kwargs.pop('progress', None)
|
||||
result = self.handler.do_execute(batch, self.request.user, **kwargs)
|
||||
result = self.batch_handler.do_execute(batch, self.request.user, **kwargs)
|
||||
return {'ok': bool(result), 'batch': self.normalize(batch)}
|
||||
|
||||
@classmethod
|
||||
|
@ -252,7 +260,14 @@ class APIBatchRowView(APIBatchMixin, APIMasterView):
|
|||
|
||||
def __init__(self, request, **kwargs):
|
||||
super(APIBatchRowView, self).__init__(request, **kwargs)
|
||||
self.handler = self.get_handler()
|
||||
self.batch_handler = self.get_handler()
|
||||
|
||||
@property
|
||||
def handler(self):
|
||||
warnings.warn("the `handler` property is deprecated; "
|
||||
"please use `batch_handler` instead",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
return self.batch_handler
|
||||
|
||||
def normalize(self, row):
|
||||
batch = row.batch
|
||||
|
@ -267,7 +282,7 @@ class APIBatchRowView(APIBatchMixin, APIMasterView):
|
|||
'batch_description': batch.description,
|
||||
'batch_complete': batch.complete,
|
||||
'batch_executed': bool(batch.executed),
|
||||
'batch_mutable': self.handler.is_mutable(batch),
|
||||
'batch_mutable': self.batch_handler.is_mutable(batch),
|
||||
'sequence': row.sequence,
|
||||
'status_code': row.status_code,
|
||||
'status_display': row.STATUS.get(row.status_code, six.text_type(row.status_code)),
|
||||
|
@ -280,14 +295,14 @@ class APIBatchRowView(APIBatchMixin, APIMasterView):
|
|||
Invokes the batch handler's ``refresh_row()`` method after updating the
|
||||
row's field data per usual.
|
||||
"""
|
||||
if not self.handler.is_mutable(row.batch):
|
||||
if not self.batch_handler.is_mutable(row.batch):
|
||||
return {'error': "Batch is not mutable"}
|
||||
|
||||
# update row per usual
|
||||
row = super(APIBatchRowView, self).update_object(row, data)
|
||||
|
||||
# okay now we apply handler refresh logic
|
||||
self.handler.refresh_row(row)
|
||||
self.batch_handler.refresh_row(row)
|
||||
return row
|
||||
|
||||
def delete_object(self, row):
|
||||
|
@ -296,7 +311,7 @@ class APIBatchRowView(APIBatchMixin, APIMasterView):
|
|||
|
||||
Delegates deletion of the row to the batch handler.
|
||||
"""
|
||||
self.handler.do_remove_row(row)
|
||||
self.batch_handler.do_remove_row(row)
|
||||
|
||||
def quick_entry(self):
|
||||
"""
|
||||
|
@ -312,10 +327,10 @@ class APIBatchRowView(APIBatchMixin, APIMasterView):
|
|||
entry = data['quick_entry']
|
||||
|
||||
try:
|
||||
row = self.handler.quick_entry(self.Session(), batch, entry)
|
||||
row = self.batch_handler.quick_entry(self.Session(), batch, entry)
|
||||
except Exception as error:
|
||||
log.warning("quick entry failed for '%s' batch %s: %s",
|
||||
self.handler.batch_key, batch.id_str, entry,
|
||||
self.batch_handler.batch_key, batch.id_str, entry,
|
||||
exc_info=True)
|
||||
msg = six.text_type(error)
|
||||
if not msg and isinstance(error, NotImplementedError):
|
||||
|
|
|
@ -67,9 +67,9 @@ class InventoryBatchViews(APIBatchView):
|
|||
"""
|
||||
permission_prefix = self.get_permission_prefix()
|
||||
if self.request.is_root:
|
||||
modes = self.handler.get_count_modes()
|
||||
modes = self.batch_handler.get_count_modes()
|
||||
else:
|
||||
modes = self.handler.get_allowed_count_modes(
|
||||
modes = self.batch_handler.get_allowed_count_modes(
|
||||
self.Session(), self.request.user,
|
||||
permission_prefix=permission_prefix)
|
||||
return modes
|
||||
|
@ -79,7 +79,7 @@ class InventoryBatchViews(APIBatchView):
|
|||
Retrieve info about the available "reasons" for inventory adjustment
|
||||
batches.
|
||||
"""
|
||||
raw_reasons = self.handler.get_adjustment_reasons(self.Session())
|
||||
raw_reasons = self.batch_handler.get_adjustment_reasons(self.Session())
|
||||
reasons = []
|
||||
for reason in raw_reasons:
|
||||
reasons.append({
|
||||
|
@ -149,7 +149,7 @@ class InventoryBatchRowViews(APIBatchRowView):
|
|||
pretty_quantity(row.cases or row.units),
|
||||
'CS' if row.cases else data['unit_uom'])
|
||||
|
||||
data['allow_cases'] = self.handler.allow_cases(batch)
|
||||
data['allow_cases'] = self.batch_handler.allow_cases(batch)
|
||||
|
||||
return data
|
||||
|
||||
|
|
|
@ -104,10 +104,10 @@ class OrderingBatchViews(APIBatchView):
|
|||
|
||||
# organize vendor catalog costs by dept / subdept
|
||||
departments = {}
|
||||
costs = self.handler.get_order_form_costs(self.Session(), batch.vendor)
|
||||
costs = self.handler.sort_order_form_costs(costs)
|
||||
costs = self.batch_handler.get_order_form_costs(self.Session(), batch.vendor)
|
||||
costs = self.batch_handler.sort_order_form_costs(costs)
|
||||
costs = list(costs) # we must have a stable list for the rest of this
|
||||
self.handler.decorate_order_form_costs(batch, costs)
|
||||
self.batch_handler.decorate_order_form_costs(batch, costs)
|
||||
for cost in costs:
|
||||
|
||||
department = cost.product.department
|
||||
|
@ -175,7 +175,7 @@ class OrderingBatchViews(APIBatchView):
|
|||
sorted_departments.append(dept)
|
||||
|
||||
# fetch recent purchase history, sort/pad for template convenience
|
||||
history = self.handler.get_order_form_history(batch, costs, 6)
|
||||
history = self.batch_handler.get_order_form_history(batch, costs, 6)
|
||||
for i in range(6 - len(history)):
|
||||
history.append(None)
|
||||
history = list(reversed(history))
|
||||
|
@ -266,10 +266,10 @@ class OrderingBatchRowViews(APIBatchRowView):
|
|||
|
||||
Note that the "normal" logic for this method is not invoked at all.
|
||||
"""
|
||||
if not self.handler.is_mutable(row.batch):
|
||||
if not self.batch_handler.is_mutable(row.batch):
|
||||
return {'error': "Batch is not mutable"}
|
||||
|
||||
self.handler.update_row_quantity(row, **data)
|
||||
self.batch_handler.update_row_quantity(row, **data)
|
||||
return row
|
||||
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ class ReceivingBatchViews(APIBatchView):
|
|||
data['invoice_total'] = batch.invoice_total
|
||||
data['invoice_total_calculated'] = batch.invoice_total_calculated
|
||||
|
||||
data['can_auto_receive'] = self.handler.can_auto_receive(batch)
|
||||
data['can_auto_receive'] = self.batch_handler.can_auto_receive(batch)
|
||||
|
||||
return data
|
||||
|
||||
|
@ -89,7 +89,7 @@ class ReceivingBatchViews(APIBatchView):
|
|||
a pending batch.
|
||||
"""
|
||||
batch = self.get_object()
|
||||
self.handler.auto_receive_all_items(batch)
|
||||
self.batch_handler.auto_receive_all_items(batch)
|
||||
return self._get(obj=batch)
|
||||
|
||||
def mark_receiving_complete(self):
|
||||
|
@ -119,7 +119,7 @@ class ReceivingBatchViews(APIBatchView):
|
|||
if not vendor:
|
||||
return {'error': "Vendor not found"}
|
||||
|
||||
purchases = self.handler.get_eligible_purchases(
|
||||
purchases = self.batch_handler.get_eligible_purchases(
|
||||
vendor, self.enum.PURCHASE_BATCH_MODE_RECEIVING)
|
||||
|
||||
purchases = [self.normalize_eligible_purchase(p)
|
||||
|
@ -128,10 +128,10 @@ class ReceivingBatchViews(APIBatchView):
|
|||
return {'purchases': purchases}
|
||||
|
||||
def normalize_eligible_purchase(self, purchase):
|
||||
return self.handler.normalize_eligible_purchase(purchase)
|
||||
return self.batch_handler.normalize_eligible_purchase(purchase)
|
||||
|
||||
def render_eligible_purchase(self, purchase):
|
||||
return self.handler.render_eligible_purchase(purchase)
|
||||
return self.batch_handler.render_eligible_purchase(purchase)
|
||||
|
||||
@classmethod
|
||||
def defaults(cls, config):
|
||||
|
@ -321,6 +321,10 @@ class ReceivingBatchRowViews(APIBatchRowView):
|
|||
data['cases_expired'] = row.cases_expired
|
||||
data['units_expired'] = row.units_expired
|
||||
|
||||
cases, units = self.batch_handler.get_unconfirmed_counts(row)
|
||||
data['cases_unconfirmed'] = cases
|
||||
data['units_unconfirmed'] = units
|
||||
|
||||
data['po_unit_cost'] = row.po_unit_cost
|
||||
data['po_total'] = row.po_total
|
||||
|
||||
|
@ -328,7 +332,7 @@ class ReceivingBatchRowViews(APIBatchRowView):
|
|||
data['invoice_total'] = row.invoice_total
|
||||
data['invoice_total_calculated'] = row.invoice_total_calculated
|
||||
|
||||
data['allow_cases'] = self.handler.allow_cases()
|
||||
data['allow_cases'] = self.batch_handler.allow_cases()
|
||||
|
||||
data['quick_receive'] = self.rattail_config.getbool(
|
||||
'rattail.batch', 'purchase.mobile_quick_receive',
|
||||
|
@ -346,8 +350,8 @@ class ReceivingBatchRowViews(APIBatchRowView):
|
|||
raise NotImplementedError("TODO: add CS support for quick_receive_all")
|
||||
else:
|
||||
data['quick_receive_uom'] = data['unit_uom']
|
||||
accounted_for = self.handler.get_units_accounted_for(row)
|
||||
remainder = self.handler.get_units_ordered(row) - accounted_for
|
||||
accounted_for = self.batch_handler.get_units_accounted_for(row)
|
||||
remainder = self.batch_handler.get_units_ordered(row) - accounted_for
|
||||
|
||||
if accounted_for:
|
||||
# some product accounted for; button should receive "remainder" only
|
||||
|
@ -389,7 +393,7 @@ class ReceivingBatchRowViews(APIBatchRowView):
|
|||
default=False)
|
||||
if alert_received:
|
||||
data['received_alert'] = None
|
||||
if self.handler.get_units_confirmed(row):
|
||||
if self.batch_handler.get_units_confirmed(row):
|
||||
msg = "You have already received some of this product; last update was {}.".format(
|
||||
humanize.naturaltime(app.make_utc() - row.modified))
|
||||
data['received_alert'] = msg
|
||||
|
@ -418,7 +422,7 @@ class ReceivingBatchRowViews(APIBatchRowView):
|
|||
# handler takes care of the row receiving logic for us
|
||||
kwargs = dict(form.validated)
|
||||
del kwargs['row']
|
||||
self.handler.receive_row(row, **kwargs)
|
||||
self.batch_handler.receive_row(row, **kwargs)
|
||||
|
||||
self.Session.flush()
|
||||
return self._get(obj=row)
|
||||
|
|
Loading…
Reference in a new issue