aboutsummaryrefslogtreecommitdiffstats
path: root/servo/models
diff options
context:
space:
mode:
authorFilipp Lepalaan <filipp@mac.com>2015-10-01 00:31:02 +0300
committerFilipp Lepalaan <filipp@mac.com>2015-10-01 00:31:02 +0300
commit0c6d66e7ced5f1c7843eba4221b08db79e56a021 (patch)
treec16473f761eb5d26d2a3d1a4ceb2f9f2875b44e4 /servo/models
parentec6276e2fb2bb0785f14469bbe8eb292f4a6e6b7 (diff)
downloadServo-0c6d66e7ced5f1c7843eba4221b08db79e56a021.tar.gz
Servo-0c6d66e7ced5f1c7843eba4221b08db79e56a021.tar.bz2
Servo-0c6d66e7ced5f1c7843eba4221b08db79e56a021.zip
Inventory bug fixes
and performance enhancements
Diffstat (limited to 'servo/models')
-rw-r--r--servo/models/order.py6
-rw-r--r--servo/models/purchases.py51
-rw-r--r--servo/models/shipments.py2
3 files changed, 55 insertions, 4 deletions
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)