diff --git a/InvenTree/build/templates/build/build_base.html b/InvenTree/build/templates/build/build_base.html index 620db18df7..b2102ed74b 100644 --- a/InvenTree/build/templates/build/build_base.html +++ b/InvenTree/build/templates/build/build_base.html @@ -36,6 +36,19 @@ InvenTree | Build - {{ build }} Quantity {{ build.quantity }} + + BOM Price + + {% if bom_price %} + {{ bom_price }} + {% if build.part.has_complete_bom_pricing == False %} + BOM pricing is incomplete + {% endif %} + {% else %} + No pricing information + {% endif %} + + diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index 6f19c67754..14e22a3fe8 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -265,6 +265,16 @@ class BuildDetail(DetailView): template_name = 'build/detail.html' context_object_name = 'build' + def get_context_data(self, **kwargs): + + ctx = super(DetailView, self).get_context_data(**kwargs) + + build = self.get_object() + + ctx['bom_price'] = build.part.get_price_info(build.quantity, buy=False) + + return ctx + class BuildAllocate(DetailView): """ View for allocating parts to a Build """ diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 536ed50798..a9278e0dec 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -598,11 +598,17 @@ class Part(models.Model): return self.get_price_info() - def get_price_info(self, quantity=1): - """ Return a simplified pricing string for this part """ - - min_price = self.get_min_price(quantity) - max_price = self.get_max_price(quantity) + def get_price_info(self, quantity=1, buy=True, bom=True): + """ Return a simplified pricing string for this part + + Args: + quantity: Number of units to calculate price for + buy: Include supplier pricing (default = True) + bom: Include BOM pricing (default = True) + """ + + min_price = self.get_min_price(quantity, buy, bom) + max_price = self.get_max_price(quantity, buy, bom) if min_price is None: return None @@ -710,7 +716,7 @@ class Part(models.Model): return max_price - def get_min_price(self, quantity=1): + def get_min_price(self, quantity=1, buy=True, bom=True): """ Return the minimum price for this part. This price can be either: - Supplier price (if purchased from suppliers) @@ -720,8 +726,8 @@ class Part(models.Model): Minimum of the supplier price or BOM price. If no pricing available, returns None """ - buy_price = self.get_min_supplier_price(quantity) - bom_price = self.get_min_bom_price(quantity) + buy_price = self.get_min_supplier_price(quantity) if buy else None + bom_price = self.get_min_bom_price(quantity) if bom else None if buy_price is None: return bom_price @@ -731,7 +737,7 @@ class Part(models.Model): return min(buy_price, bom_price) - def get_max_price(self, quantity=1): + def get_max_price(self, quantity=1, buy=True, bom=True): """ Return the maximum price for this part. This price can be either: - Supplier price (if purchsed from suppliers) @@ -741,8 +747,8 @@ class Part(models.Model): Maximum of the supplier price or BOM price. If no pricing available, returns None """ - buy_price = self.get_max_supplier_price(quantity) - bom_price = self.get_max_bom_price(quantity) + buy_price = self.get_max_supplier_price(quantity) if buy else None + bom_price = self.get_max_bom_price(quantity) if bom else None if buy_price is None: return bom_price