From 8e45b758ba80d36eeb5bfba6d3a078d8048439a7 Mon Sep 17 00:00:00 2001 From: saunmanoj888 Date: Wed, 19 Oct 2022 22:59:28 +0530 Subject: [PATCH 1/4] Fix unit value UI issue --- .../javascripts/admin/bulk_product_update.js.coffee | 4 +++- .../javascripts/admin/services/bulk_products.js.coffee | 3 ++- .../unit/admin/bulk_product_update_spec.js.coffee | 9 +++++++++ .../unit/admin/services/bulk_products_spec.js.coffee | 5 +++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index 711db5b93e..cccee68bee 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -261,7 +261,9 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout product = BulkProducts.find product.id variant.unit_value = parseFloat(match[1].replace(",", ".")) variant.unit_value = null if isNaN(variant.unit_value) - variant.unit_value *= product.variant_unit_scale if variant.unit_value && product.variant_unit_scale + if variant.unit_value && product.variant_unit_scale + variant_unit_value = variant.unit_value * product.variant_unit_scale + variant.unit_value = parseFloat(variant_unit_value.toFixed(8)) variant.unit_description = match[3] $scope.incrementLimit = -> diff --git a/app/assets/javascripts/admin/services/bulk_products.js.coffee b/app/assets/javascripts/admin/services/bulk_products.js.coffee index 02b1b60e35..0ac0d02af0 100644 --- a/app/assets/javascripts/admin/services/bulk_products.js.coffee +++ b/app/assets/javascripts/admin/services/bulk_products.js.coffee @@ -65,7 +65,8 @@ angular.module("ofn.admin").factory "BulkProducts", (ProductResource, dataFetche variantUnitValue: (product, variant) -> if variant.unit_value? if product.variant_unit_scale - @divideAsInteger variant.unit_value, product.variant_unit_scale + variant_unit_value = @divideAsInteger variant.unit_value, product.variant_unit_scale + parseFloat(variant_unit_value.toFixed(8)) else variant.unit_value else diff --git a/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee b/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee index 09b0ce3ecd..f3499e21d9 100644 --- a/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee +++ b/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee @@ -676,6 +676,15 @@ describe "AdminProductEditCtrl", -> unit_description: '' unit_value_with_description: "250,5" + it "rounds off the unit_value upto 8 decimal places and removes the trailing zeroes", -> + testProduct = {id: 123, variant_unit_scale: 28.35} + testVariant = {unit_value_with_description: "1234.5"} + $scope.packVariant(testProduct, testVariant) + expect(testVariant).toEqual + unit_value: 34998.075 + unit_description: '' + unit_value_with_description: "1234.5" + describe "filtering products", -> beforeEach -> diff --git a/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee b/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee index ece9d1f244..cb87cc8f91 100644 --- a/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee +++ b/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee @@ -152,6 +152,11 @@ describe "BulkProducts service", -> variant = {unit_value: 5} expect(BulkProducts.variantUnitValue(product, variant)).toEqual 5000 + it "returns the scaled value rounded off upto 8 decimal points removing the trailing zeroes", -> + product = {variant_unit_scale: 28.35} + variant = {unit_value: 1234.5} + expect(BulkProducts.variantUnitValue(product, variant)).toEqual 43.54497354 + it "returns the unscaled value when the product has no scale", -> product = {} variant = {unit_value: 5} From b40cd579bc9b7e3d536232af85fdcfe624474155 Mon Sep 17 00:00:00 2001 From: saunmanoj888 Date: Wed, 19 Oct 2022 23:18:22 +0530 Subject: [PATCH 2/4] Fix spec failure --- spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee b/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee index f3499e21d9..887609f414 100644 --- a/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee +++ b/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee @@ -681,7 +681,7 @@ describe "AdminProductEditCtrl", -> testVariant = {unit_value_with_description: "1234.5"} $scope.packVariant(testProduct, testVariant) expect(testVariant).toEqual - unit_value: 34998.075 + unit_value: 1234.5 unit_description: '' unit_value_with_description: "1234.5" From ee8454bd2ccb147cbfc7f194a7aa1b83418265fe Mon Sep 17 00:00:00 2001 From: saunmanoj888 Date: Fri, 21 Oct 2022 21:30:00 +0530 Subject: [PATCH 3/4] Use js-big-decimal package for calculation --- .../javascripts/admin/bulk_product_update.js.coffee | 3 +-- .../javascripts/admin/services/bulk_products.js.coffee | 2 +- .../unit/admin/bulk_product_update_spec.js.coffee | 8 ++++---- .../unit/admin/services/bulk_products_spec.js.coffee | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index cccee68bee..f23bae55ad 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -262,8 +262,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout variant.unit_value = parseFloat(match[1].replace(",", ".")) variant.unit_value = null if isNaN(variant.unit_value) if variant.unit_value && product.variant_unit_scale - variant_unit_value = variant.unit_value * product.variant_unit_scale - variant.unit_value = parseFloat(variant_unit_value.toFixed(8)) + variant.unit_value = parseFloat(bigDecimal.multiply(variant.unit_value, product.variant_unit_scale, 2)) variant.unit_description = match[3] $scope.incrementLimit = -> diff --git a/app/assets/javascripts/admin/services/bulk_products.js.coffee b/app/assets/javascripts/admin/services/bulk_products.js.coffee index 0ac0d02af0..2504170023 100644 --- a/app/assets/javascripts/admin/services/bulk_products.js.coffee +++ b/app/assets/javascripts/admin/services/bulk_products.js.coffee @@ -66,7 +66,7 @@ angular.module("ofn.admin").factory "BulkProducts", (ProductResource, dataFetche if variant.unit_value? if product.variant_unit_scale variant_unit_value = @divideAsInteger variant.unit_value, product.variant_unit_scale - parseFloat(variant_unit_value.toFixed(8)) + parseFloat(bigDecimal.round(variant_unit_value, 2)) else variant.unit_value else diff --git a/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee b/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee index 887609f414..d154b36f17 100644 --- a/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee +++ b/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee @@ -676,14 +676,14 @@ describe "AdminProductEditCtrl", -> unit_description: '' unit_value_with_description: "250,5" - it "rounds off the unit_value upto 8 decimal places and removes the trailing zeroes", -> + it "rounds off the unit_value upto 2 decimal places", -> testProduct = {id: 123, variant_unit_scale: 28.35} - testVariant = {unit_value_with_description: "1234.5"} + testVariant = {unit_value_with_description: "1234.567"} $scope.packVariant(testProduct, testVariant) expect(testVariant).toEqual - unit_value: 1234.5 + unit_value: 1234.57 unit_description: '' - unit_value_with_description: "1234.5" + unit_value_with_description: "1234.567" describe "filtering products", -> diff --git a/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee b/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee index cb87cc8f91..b45a37f995 100644 --- a/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee +++ b/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee @@ -152,10 +152,10 @@ describe "BulkProducts service", -> variant = {unit_value: 5} expect(BulkProducts.variantUnitValue(product, variant)).toEqual 5000 - it "returns the scaled value rounded off upto 8 decimal points removing the trailing zeroes", -> + it "returns the scaled value rounded off upto 2 decimal points", -> product = {variant_unit_scale: 28.35} variant = {unit_value: 1234.5} - expect(BulkProducts.variantUnitValue(product, variant)).toEqual 43.54497354 + expect(BulkProducts.variantUnitValue(product, variant)).toEqual 43.54 it "returns the unscaled value when the product has no scale", -> product = {} From 490c5afc5948f90cdbb033a58b45b09557bd969b Mon Sep 17 00:00:00 2001 From: saunmanoj888 Date: Tue, 25 Oct 2022 00:05:31 +0530 Subject: [PATCH 4/4] Mock bigDecimal methods in specs --- app/assets/javascripts/admin/bulk_product_update.js.coffee | 2 +- .../javascripts/admin/services/bulk_products.js.coffee | 2 +- .../unit/admin/bulk_product_update_spec.js.coffee | 6 ++++++ .../unit/admin/services/bulk_products_spec.js.coffee | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index f23bae55ad..637d910144 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -262,7 +262,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout variant.unit_value = parseFloat(match[1].replace(",", ".")) variant.unit_value = null if isNaN(variant.unit_value) if variant.unit_value && product.variant_unit_scale - variant.unit_value = parseFloat(bigDecimal.multiply(variant.unit_value, product.variant_unit_scale, 2)) + variant.unit_value = parseFloat(window.bigDecimal.multiply(variant.unit_value, product.variant_unit_scale, 2)) variant.unit_description = match[3] $scope.incrementLimit = -> diff --git a/app/assets/javascripts/admin/services/bulk_products.js.coffee b/app/assets/javascripts/admin/services/bulk_products.js.coffee index 2504170023..e8b8bb6c3d 100644 --- a/app/assets/javascripts/admin/services/bulk_products.js.coffee +++ b/app/assets/javascripts/admin/services/bulk_products.js.coffee @@ -66,7 +66,7 @@ angular.module("ofn.admin").factory "BulkProducts", (ProductResource, dataFetche if variant.unit_value? if product.variant_unit_scale variant_unit_value = @divideAsInteger variant.unit_value, product.variant_unit_scale - parseFloat(bigDecimal.round(variant_unit_value, 2)) + parseFloat(window.bigDecimal.round(variant_unit_value, 2)) else variant.unit_value else diff --git a/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee b/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee index d154b36f17..de62688a9d 100644 --- a/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee +++ b/spec/javascripts/unit/admin/bulk_product_update_spec.js.coffee @@ -517,6 +517,10 @@ describe "AdminProductEditCtrl", -> describe "submitting products to be updated", -> describe "packing products", -> + beforeEach -> + window.bigDecimal = jasmine.createSpyObj "bigDecimal", ["multiply"] + window.bigDecimal.multiply.and.callFake (a, b, c) -> (a * b).toFixed(c) + it "extracts variant_unit_with_scale into variant_unit and variant_unit_scale", -> testProduct = id: 1 @@ -589,6 +593,8 @@ describe "AdminProductEditCtrl", -> beforeEach -> BulkProducts.products = [testProduct] + window.bigDecimal = jasmine.createSpyObj "bigDecimal", ["multiply"] + window.bigDecimal.multiply.and.callFake (a, b, c) -> (a * b).toFixed(c) it "extracts unit_value and unit_description from unit_value_with_description", -> testProduct = {id: 123, variant_unit_scale: 1.0} diff --git a/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee b/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee index b45a37f995..466c09109f 100644 --- a/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee +++ b/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee @@ -3,6 +3,8 @@ describe "BulkProducts service", -> beforeEach -> module "ofn.admin" + window.bigDecimal = jasmine.createSpyObj "bigDecimal", ["round"] + window.bigDecimal.round.and.callFake (a, b) -> a.toFixed(b) beforeEach inject (_BulkProducts_, _$httpBackend_) -> BulkProducts = _BulkProducts_