From 67128c308bb8a5985abd233f20f94fc13e4e6401 Mon Sep 17 00:00:00 2001
From: Matthias <matmair@live.de>
Date: Sun, 27 Jun 2021 12:26:02 +0200
Subject: [PATCH 1/6] fixing typo

---
 InvenTree/part/models.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py
index 2b97fde596..7ed4c99057 100644
--- a/InvenTree/part/models.py
+++ b/InvenTree/part/models.py
@@ -2503,7 +2503,7 @@ class BomItem(models.Model):
 
         # get internal price setting
         use_internal = common.models.InvenTreeSetting.get_setting('PART_BOM_USE_INTERNAL_PRICE', False)
-        prange = self.sub_part.get_price_range(self.quantity, intenal=use_internal)
+        prange = self.sub_part.get_price_range(self.quantity, internal=use_internal)
 
         if prange is None:
             return prange

From 786e994e19923a742e40922939dbd6cc91a157e1 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@gmail.com>
Date: Sun, 27 Jun 2021 20:58:24 +1000
Subject: [PATCH 2/6] Update version.py

0.2.4
---
 InvenTree/InvenTree/version.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py
index 08fa5e0ae4..738274b1cd 100644
--- a/InvenTree/InvenTree/version.py
+++ b/InvenTree/InvenTree/version.py
@@ -8,7 +8,7 @@ import re
 
 import common.models
 
-INVENTREE_SW_VERSION = "0.2.4 pre"
+INVENTREE_SW_VERSION = "0.2.4"
 
 INVENTREE_API_VERSION = 6
 

From 604c136b003eed3d82c488eecbeb85cbf0fe2ebf Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@gmail.com>
Date: Sun, 27 Jun 2021 21:00:01 +1000
Subject: [PATCH 3/6] Update version.py

---
 InvenTree/InvenTree/version.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py
index 738274b1cd..6afa5ebadd 100644
--- a/InvenTree/InvenTree/version.py
+++ b/InvenTree/InvenTree/version.py
@@ -8,7 +8,7 @@ import re
 
 import common.models
 
-INVENTREE_SW_VERSION = "0.2.4"
+INVENTREE_SW_VERSION = "0.2.5 pre"
 
 INVENTREE_API_VERSION = 6
 

From a3ec24fbcc4a837a1e795c96dd3510e5cc2ac3d5 Mon Sep 17 00:00:00 2001
From: Matthias <matmair@live.de>
Date: Sun, 27 Jun 2021 13:48:08 +0200
Subject: [PATCH 4/6] Reenabling prices for BOM items Closes #1721

---
 InvenTree/part/serializers.py |  4 ++--
 InvenTree/templates/js/bom.js | 11 ++---------
 2 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py
index 6c47f1310f..2da2d05d3b 100644
--- a/InvenTree/part/serializers.py
+++ b/InvenTree/part/serializers.py
@@ -377,7 +377,7 @@ class PartStarSerializer(InvenTreeModelSerializer):
 class BomItemSerializer(InvenTreeModelSerializer):
     """ Serializer for BomItem object """
 
-    # price_range = serializers.CharField(read_only=True)
+    price_range = serializers.CharField(read_only=True)
 
     quantity = serializers.FloatField()
 
@@ -492,7 +492,7 @@ class BomItemSerializer(InvenTreeModelSerializer):
             'reference',
             'sub_part',
             'sub_part_detail',
-            # 'price_range',
+            'price_range',
             'validated',
         ]
 
diff --git a/InvenTree/templates/js/bom.js b/InvenTree/templates/js/bom.js
index 7328bcb331..665379d8d5 100644
--- a/InvenTree/templates/js/bom.js
+++ b/InvenTree/templates/js/bom.js
@@ -259,26 +259,19 @@ function loadBomTable(table, options) {
         sortable: true,
     });
 
-    /*
-
-    // TODO - Re-introduce the pricing column at a later stage,
-    //        once the pricing has been "fixed"
-    //        O.W. 2020-11-24
-
     cols.push(
     {
         field: 'price_range',
-        title: '{% trans "Price" %}',
+        title: '{% trans "Buy Price" %}',
         sortable: true,
         formatter: function(value, row, index, field) {
             if (value) {
                 return value;
             } else {
-                return "<span class='warning-msg'>{% trans "No pricing available" %}</span>";
+                return "<span class='warning-msg'>{% trans 'No pricing available' %}</span>";
             }
         }
     });
-    */
 
     cols.push({
         field: 'optional',

From 4f726931a63a3a80b52c171483e12e6bf952f258 Mon Sep 17 00:00:00 2001
From: Matthias <matmair@live.de>
Date: Sun, 27 Jun 2021 14:18:37 +0200
Subject: [PATCH 5/6] adds in money-conversion helper

---
 InvenTree/InvenTree/helpers.py | 19 +++++++++++++++++++
 InvenTree/part/models.py       | 14 +++++++-------
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py
index 9d00697230..cc1e60eb8e 100644
--- a/InvenTree/InvenTree/helpers.py
+++ b/InvenTree/InvenTree/helpers.py
@@ -21,6 +21,9 @@ import InvenTree.version
 
 from common.models import InvenTreeSetting
 from .settings import MEDIA_URL, STATIC_URL
+from common.settings import currency_code_default
+
+from djmoney.money import Money
 
 
 def getSetting(key, backup_value=None):
@@ -247,6 +250,22 @@ def decimal2string(d):
     return s.rstrip("0").rstrip(".")
 
 
+def decimal2money(d, currency = None):
+    """
+    Format a Decimal number as Money
+
+    Args:
+        d: A python Decimal object
+        currency: Currency of the input amount, defaults to default currency in settings
+
+    Returns:
+        A Money object from the input(s)
+    """
+    if not currency:
+        currency = currency_code_default()
+    return Money(d, currency)
+
+
 def WrapWithQuotes(text, quote='"'):
     """ Wrap the supplied text with quotes
 
diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py
index 7ed4c99057..f76ff4c104 100644
--- a/InvenTree/part/models.py
+++ b/InvenTree/part/models.py
@@ -39,7 +39,7 @@ from InvenTree import helpers
 from InvenTree import validators
 from InvenTree.models import InvenTreeTree, InvenTreeAttachment
 from InvenTree.fields import InvenTreeURLField
-from InvenTree.helpers import decimal2string, normalize
+from InvenTree.helpers import decimal2string, normalize, decimal2money
 
 from InvenTree.status_codes import BuildStatus, PurchaseOrderStatus, SalesOrderStatus
 
@@ -2414,7 +2414,7 @@ class BomItem(models.Model):
         return "{n} x {child} to make {parent}".format(
             parent=self.part.full_name,
             child=self.sub_part.full_name,
-            n=helpers.decimal2string(self.quantity))
+            n=decimal2string(self.quantity))
 
     def available_stock(self):
         """
@@ -2498,12 +2498,12 @@ class BomItem(models.Model):
         return required
 
     @property
-    def price_range(self):
+    def price_range(self, internal = False):
         """ Return the price-range for this BOM item. """
 
         # get internal price setting
         use_internal = common.models.InvenTreeSetting.get_setting('PART_BOM_USE_INTERNAL_PRICE', False)
-        prange = self.sub_part.get_price_range(self.quantity, internal=use_internal)
+        prange = self.sub_part.get_price_range(self.quantity, internal=use_internal and internal)
 
         if prange is None:
             return prange
@@ -2511,11 +2511,11 @@ class BomItem(models.Model):
         pmin, pmax = prange
 
         if pmin == pmax:
-            return decimal2string(pmin)
+            return decimal2money(pmin)
 
         # Convert to better string representation
-        pmin = decimal2string(pmin)
-        pmax = decimal2string(pmax)
+        pmin = decimal2money(pmin)
+        pmax = decimal2money(pmax)
 
         return "{pmin} to {pmax}".format(pmin=pmin, pmax=pmax)
 

From e4a9d56ba0d7aeebbd2f20fa52035b0c7b086ad3 Mon Sep 17 00:00:00 2001
From: Matthias <matmair@live.de>
Date: Sun, 27 Jun 2021 14:26:51 +0200
Subject: [PATCH 6/6] style fixes

---
 InvenTree/InvenTree/helpers.py | 2 +-
 InvenTree/part/models.py       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py
index cc1e60eb8e..330bd2bb68 100644
--- a/InvenTree/InvenTree/helpers.py
+++ b/InvenTree/InvenTree/helpers.py
@@ -250,7 +250,7 @@ def decimal2string(d):
     return s.rstrip("0").rstrip(".")
 
 
-def decimal2money(d, currency = None):
+def decimal2money(d, currency=None):
     """
     Format a Decimal number as Money
 
diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py
index f76ff4c104..9f4da436df 100644
--- a/InvenTree/part/models.py
+++ b/InvenTree/part/models.py
@@ -2498,7 +2498,7 @@ class BomItem(models.Model):
         return required
 
     @property
-    def price_range(self, internal = False):
+    def price_range(self, internal=False):
         """ Return the price-range for this BOM item. """
 
         # get internal price setting