From 0020e85397622aadedad91b56dc2e2b2b4cfbc5f Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 11 May 2021 20:56:20 +1000 Subject: [PATCH] Refactor add_tracking_entry --- InvenTree/order/models.py | 10 +++--- InvenTree/stock/models.py | 66 +++++++++++++++++++++------------------ 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index 9a521b8044..e5a26386ac 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -370,19 +370,17 @@ class PurchaseOrder(Order): tracking_info = { 'status': status, - 'purchaseorder': self.pk, - 'quantity': quantity, } - if location: - tracking_info['location'] = location.pk - stock.add_tracking_entry( StockHistoryCode.RECEIVED_AGAINST_PURCHASE_ORDER, user, notes=notes, url=self.get_absolute_url(), - deltas=tracking_info + deltas=tracking_info, + location=location, + purchaseorder=self, + quantity=quantity ) # Update the number of parts received against the particular line item diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index 613882ba1a..b9188979b7 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -199,17 +199,15 @@ class StockItem(MPTTModel): if add_note: tracking_info = { - 'quantity': self.quantity, 'status': self.status, } - if self.location: - tracking_info['location'] = self.location.pk - self.add_tracking_entry( StockHistoryCode.CREATED, user, - deltas=tracking_info + deltas=tracking_info, + location=self.location, + quantity=self.quantity, ) @property @@ -636,10 +634,6 @@ class StockItem(MPTTModel): tracking_info = {} - if location: - tracking_info['location'] = location.id - tracking_info['location_name'] = location.name - if self.customer: tracking_info['customer'] = self.customer.id tracking_info['customer_name'] = self.customer.name @@ -648,7 +642,8 @@ class StockItem(MPTTModel): StockHistoryCode.RETURNED_FROM_CUSTOMER, user, notes=notes, - deltas=tracking_info + deltas=tracking_info, + location=location ) self.customer = None @@ -856,22 +851,15 @@ class StockItem(MPTTModel): ) tracking_info = { - 'assembly': self.belongs_to.pk + 'stockitem': self.belongs_to.pk } - if location: - tracking_info['location'] = location.pk - tracking_info['location_name'] = location.name - url = location.get_absolute_url() - else: - url = '' - self.add_tracking_entry( StockHistoryCode.REMOVED_FROM_ASSEMBLY, user, notes=notes, - url=url, - deltas=tracking_info + deltas=tracking_info, + location=location, ) # Mark this stock item as *not* belonging to anyone @@ -935,7 +923,7 @@ class StockItem(MPTTModel): def has_tracking_info(self): return self.tracking_info_count > 0 - def add_tracking_entry(self, entry_type, user, deltas={}, notes='', url=''): + def add_tracking_entry(self, entry_type, user, deltas={}, notes='', url='', **kwargs): """ Add a history tracking entry for this StockItem @@ -947,6 +935,25 @@ class StockItem(MPTTModel): url - Optional URL associated with this tracking entry """ + # Has a location been specified? + location = kwargs.get('location', None) + + if location: + deltas['location'] = location.id + deltas['location_path'] = location.pathstring + + # Has a PurchaseOrder been specified? + po = kwargs.get('purchaseorder', None) + + if po: + deltas['purchaseorder'] = po.id + + # Quantity specified? + quantity = kwargs.get('quantity', None) + + if quantity: + deltas['quantity'] = float(quantity) + entry = StockItemTracking.objects.create( item=self, tracking_type=entry_type, @@ -1037,7 +1044,8 @@ class StockItem(MPTTModel): notes=notes, deltas={ 'serial': serial, - } + }, + location=location ) # Remove the equivalent number of items @@ -1126,7 +1134,8 @@ class StockItem(MPTTModel): notes=notes, deltas={ 'stockitem': self.pk, - } + }, + location=location, ) # Remove the specified quantity from THIS stock item @@ -1187,18 +1196,12 @@ class StockItem(MPTTModel): tracking_info = {} - if location: - tracking_info['location'] = location.pk - url = location.get_absolute_url() - else: - url = '' - self.add_tracking_entry( StockHistoryCode.STOCK_MOVE, user, notes=notes, deltas=tracking_info, - url=url, + location=location, ) self.save() @@ -1306,7 +1309,8 @@ class StockItem(MPTTModel): @transaction.atomic def take_stock(self, quantity, user, notes=''): - """ Remove items from stock + """ + Remove items from stock """ # Cannot remove items from a serialized part