From 47592cdbd8ec77bc7e8cf13d9e8c048ae1e584ef Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 10 Dec 2014 11:14:21 +1100 Subject: [PATCH] Submit variant overrides to server --- .../override_variants_controller.js.coffee | 14 ++++- .../dirty_variant_overrides.js.coffee | 22 +++++++- .../dirty_variant_overrides_spec.js.coffee | 54 ++++++++++++------- 3 files changed, 67 insertions(+), 23 deletions(-) diff --git a/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee b/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee index 383b42843f..7eb60855ae 100644 --- a/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee +++ b/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee @@ -1,4 +1,4 @@ -angular.module("ofn.admin").controller "AdminOverrideVariantsCtrl", ($scope, Indexer, SpreeApiAuth, PagedFetcher, StatusMessage, hubs, producers, hubPermissions, VariantOverrides, DirtyVariantOverrides) -> +angular.module("ofn.admin").controller "AdminOverrideVariantsCtrl", ($scope, $timeout, Indexer, SpreeApiAuth, PagedFetcher, StatusMessage, hubs, producers, hubPermissions, VariantOverrides, DirtyVariantOverrides) -> $scope.hubs = hubs $scope.hub = null $scope.products = [] @@ -39,4 +39,14 @@ angular.module("ofn.admin").controller "AdminOverrideVariantsCtrl", ($scope, Ind $scope.update = -> - StatusMessage.display 'success', 'Changes saved.' \ No newline at end of file + if DirtyVariantOverrides.count() == 0 + StatusMessage.display 'alert', 'No changes to save.' + else + StatusMessage.display 'progress', 'Saving...' + DirtyVariantOverrides.save + success: (data) -> + DirtyVariantOverrides.clear() + #VariantOverrides.update data.variant_overrides + $timeout -> StatusMessage.display 'success', 'Changes saved.' + error: (data, status) -> + $timeout -> StatusMessage.display 'failure', 'Oh no!' diff --git a/app/assets/javascripts/admin/services/dirty_variant_overrides.js.coffee b/app/assets/javascripts/admin/services/dirty_variant_overrides.js.coffee index ea85baa341..f0f5b48549 100644 --- a/app/assets/javascripts/admin/services/dirty_variant_overrides.js.coffee +++ b/app/assets/javascripts/admin/services/dirty_variant_overrides.js.coffee @@ -1,4 +1,4 @@ -angular.module("ofn.admin").factory "DirtyVariantOverrides", -> +angular.module("ofn.admin").factory "DirtyVariantOverrides", ($http) -> new class DirtyVariantOverrides dirtyVariantOverrides: {} @@ -11,3 +11,23 @@ angular.module("ofn.admin").factory "DirtyVariantOverrides", -> for hub_id, vos of @dirtyVariantOverrides count += Object.keys(vos).length count + + clear: -> + @dirtyVariantOverrides = {} + + all: -> + all_vos = [] + for hub_id, vos of @dirtyVariantOverrides + all_vos.push vo for variant_id, vo of vos + all_vos + + save: (callbacks={}) -> + $http + method: "POST" + url: "/admin/products/override_variants" + data: + variant_overrides: @all() + .success (data) -> + (callbacks.success || Angular.noop) data + .error (data, status) -> + (callbacks.error || Angular.noop) data, status diff --git a/spec/javascripts/unit/admin/services/dirty_variant_overrides_spec.js.coffee b/spec/javascripts/unit/admin/services/dirty_variant_overrides_spec.js.coffee index bdd0afd9d6..653560a989 100644 --- a/spec/javascripts/unit/admin/services/dirty_variant_overrides_spec.js.coffee +++ b/spec/javascripts/unit/admin/services/dirty_variant_overrides_spec.js.coffee @@ -39,23 +39,37 @@ describe "maintaining a list of dirty variant overrides", -> price: 3 count_on_hand: 4 - it "counts dirty variant overrides", -> - DirtyVariantOverrides.dirtyVariantOverrides = - 2: - 1: - variant_id: 5 - hub_id: 6 - price: 7 - count_on_hand: 8 - 3: - variant_id: 9 - hub_id: 10 - price: 11 - count_on_hand: 12 - 4: - 5: - variant_id: 13 - hub_id: 14 - price: 15 - count_on_hand: 16 - expect(DirtyVariantOverrides.count()).toEqual 3 + describe "with a number of variant overrides", -> + beforeEach -> + DirtyVariantOverrides.dirtyVariantOverrides = + 2: + 1: + variant_id: 5 + hub_id: 6 + price: 7 + count_on_hand: 8 + 3: + variant_id: 9 + hub_id: 10 + price: 11 + count_on_hand: 12 + 4: + 5: + variant_id: 13 + hub_id: 14 + price: 15 + count_on_hand: 16 + + it "counts dirty variant overrides", -> + expect(DirtyVariantOverrides.count()).toEqual 3 + + it "clears dirty variant overrides", -> + DirtyVariantOverrides.clear() + expect(DirtyVariantOverrides.dirtyVariantOverrides).toEqual {} + + it "returns a flattened list of overrides", -> + expect(DirtyVariantOverrides.all()).toEqual [ + {variant_id: 5, hub_id: 6, price: 7, count_on_hand: 8} + {variant_id: 9, hub_id: 10, price: 11, count_on_hand: 12} + {variant_id: 13, hub_id: 14, price: 15, count_on_hand: 16} + ]