From 0c6d66e7ced5f1c7843eba4221b08db79e56a021 Mon Sep 17 00:00:00 2001 From: Filipp Lepalaan Date: Thu, 1 Oct 2015 00:31:02 +0300 Subject: Inventory bug fixes and performance enhancements --- servo/models/order.py | 6 +++++- servo/models/purchases.py | 51 +++++++++++++++++++++++++++++++++++++++++++++-- servo/models/shipments.py | 2 +- 3 files changed, 55 insertions(+), 4 deletions(-) (limited to 'servo/models') diff --git a/servo/models/order.py b/servo/models/order.py index 18fc3b0..b389053 100644 --- a/servo/models/order.py +++ b/servo/models/order.py @@ -931,8 +931,12 @@ class ServiceOrderItem(AbstractOrderItem): return self.order.repair_set.latest() def reserve_product(self): + """ + Reserve this SOI for the inventory at this location + """ location = self.order.location - inventory = Inventory.objects.get(location=location, product=self.product) + inventory, created = Inventory.objects.get_or_create(location=location, + product=self.product) inventory.amount_reserved += self.amount inventory.save() diff --git a/servo/models/purchases.py b/servo/models/purchases.py index 184f303..636eab6 100644 --- a/servo/models/purchases.py +++ b/servo/models/purchases.py @@ -188,7 +188,9 @@ class PurchaseOrder(models.Model): class PurchaseOrderItem(AbstractOrderItem): - "An item being purchased" + """ + An item being purchased + """ price = models.DecimalField( max_digits=8, decimal_places=2, @@ -202,8 +204,34 @@ class PurchaseOrderItem(AbstractOrderItem): verbose_name=_("Purchase Order") ) + # begin optimization + sales_order = models.ForeignKey( + Order, + null=True, + editable=False, + ) + + sales_order_ref = models.CharField( + default='', + max_length=8, + editable=False, + ) + + purchase_order_ref = models.CharField( + default='', + max_length=32, + editable=False, + ) + + user_fullname = models.CharField( + default='', + max_length=256, + editable=False, + ) + # /end optimization + order_item = models.ForeignKey(ServiceOrderItem, null=True, editable=False) - reference = models.CharField(default='', blank=True, max_length=128) + reference = models.CharField(default='', blank=True, max_length=128) ordered_at = models.DateTimeField(null=True, editable=False) expected_ship_date = models.DateField(null=True, editable=False) @@ -255,7 +283,23 @@ class PurchaseOrderItem(AbstractOrderItem): self.save() def save(self, *args, **kwargs): + + # The following four fields are used so much + # that we store them for fast access + if self.sales_order is None: + self.sales_order = self.purchase_order.sales_order + + if self.sales_order_ref == '': + self.sales_order_ref = self.sales_order.code + + if self.purchase_order_ref == '': + self.purchase_order_ref = self.purchase_order.reference + + if self.user_fullname == '': + self.user_fullname = self.created_by.get_name() + super(PurchaseOrderItem, self).save(*args, **kwargs) + # Sync SOI and POI serial numbers if self.order_item: if self.order_item.sn and not self.sn: @@ -265,6 +309,9 @@ class PurchaseOrderItem(AbstractOrderItem): self.order_item.save() + def __unicode__(self): + return self.code + class Meta: ordering = ('id',) app_label = 'servo' diff --git a/servo/models/shipments.py b/servo/models/shipments.py index d6112ab..614c642 100644 --- a/servo/models/shipments.py +++ b/servo/models/shipments.py @@ -62,7 +62,7 @@ class Shipment(models.Model): default='', max_length=18, choices=gsxws.CARRIERS, - verbose_name=_('carrier') + verbose_name=_('Carrier') ) created_at = models.DateTimeField(auto_now=True, editable=False) -- cgit v1.2.3