On save, scale from chosen unit to base unit (eg. mL to L)

This commit is contained in:
Rohan Mitchell
2014-01-14 11:13:19 +11:00
parent c43b56f3f8
commit 9442b7b5dc
2 changed files with 46 additions and 9 deletions

View File

@@ -299,14 +299,16 @@ productsApp.controller "AdminBulkProductsCtrl", [
product.variant_unit_scale = null
if product.variants
for id, variant of product.variants
$scope.packVariant variant
$scope.packVariant product, variant
$scope.packVariant = (variant) ->
$scope.packVariant = (product, variant) ->
if variant.hasOwnProperty("unit_value_with_description")
match = variant.unit_value_with_description.match(/^([\d\.]+|)( |)(.*)$/)
if match
variant.unit_value = parseFloat(match[1]) || null
product = $scope.findProduct(product.id)
variant.unit_value = parseFloat(match[1]) || null
variant.unit_value *= product.variant_unit_scale if variant.unit_value
variant.unit_description = match[3]
@@ -323,6 +325,12 @@ productsApp.controller "AdminBulkProductsCtrl", [
delete variant.options_text
products_filtered
$scope.findProduct = (id) ->
products = (product for product in $scope.products when product.id == id)
if products.length == 0 then null else products[0]
$scope.setMessage = (model, text, style, timeout) ->
model.text = text
model.style = style

View File

@@ -539,20 +539,28 @@ describe "AdminBulkProductsCtrl", ->
scope.packProduct(testProduct)
expect(scope.packVariant).toHaveBeenCalledWith(testVariant)
expect(scope.packVariant).toHaveBeenCalledWith(testProduct, testVariant)
describe "packing variants", ->
testProduct = {id: 123}
beforeEach ->
scope.products = [testProduct]
it "extracts unit_value and unit_description from unit_value_with_description", ->
testProduct = {id: 123, variant_unit_scale: 1.0}
testVariant = {unit_value_with_description: "250.5 (bottle)"}
scope.packVariant(testVariant)
scope.products = [testProduct]
scope.packVariant(testProduct, testVariant)
expect(testVariant).toEqual
unit_value: 250.5
unit_description: "(bottle)"
unit_value_with_description: "250.5 (bottle)"
it "extracts into unit_value when only a number is provided", ->
testProduct = {id: 123, variant_unit_scale: 1.0}
testVariant = {unit_value_with_description: "250.5"}
scope.packVariant(testVariant)
scope.packVariant(testProduct, testVariant)
expect(testVariant).toEqual
unit_value: 250.5
unit_description: ''
@@ -560,7 +568,7 @@ describe "AdminBulkProductsCtrl", ->
it "extracts into unit_description when only a string is provided", ->
testVariant = {unit_value_with_description: "Medium"}
scope.packVariant(testVariant)
scope.packVariant(testProduct, testVariant)
expect(testVariant).toEqual
unit_value: null
unit_description: 'Medium'
@@ -568,7 +576,7 @@ describe "AdminBulkProductsCtrl", ->
it "sets blank values when no value provided", ->
testVariant = {unit_value_with_description: ""}
scope.packVariant(testVariant)
scope.packVariant(testProduct, testVariant)
expect(testVariant).toEqual
unit_value: null
unit_description: ''
@@ -576,9 +584,19 @@ describe "AdminBulkProductsCtrl", ->
it "sets nothing when the field is undefined", ->
testVariant = {}
scope.packVariant(testVariant)
scope.packVariant(testProduct, testVariant)
expect(testVariant).toEqual {}
it "converts value from chosen unit to base unit", ->
testProduct = {id: 123, variant_unit_scale: 1000}
testVariant = {unit_value_with_description: "250.5"}
scope.products = [testProduct]
scope.packVariant(testProduct, testVariant)
expect(testVariant).toEqual
unit_value: 250500
unit_description: ''
unit_value_with_description: "250.5"
describe "filtering products", ->
beforeEach ->
@@ -704,6 +722,17 @@ describe "AdminBulkProductsCtrl", ->
]
describe "fetching a product by id", ->
it "returns the product when it is present", ->
product = {id: 123}
scope.products = [product]
expect(scope.findProduct(123)).toEqual product
it "returns null when the product is not present", ->
scope.products = []
expect(scope.findProduct(123)).toBeNull()
describe "deleting products", ->
it "deletes products with a http delete request to /api/products/id", ->
spyOn(window, "confirm").andReturn true