spree_backend 2.0.13 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/admin/admin.js.erb +27 -23
  3. data/app/assets/javascripts/admin/checkouts/edit.js +12 -0
  4. data/app/assets/javascripts/admin/image_settings.js.erb +2 -1
  5. data/app/assets/javascripts/admin/option_type_autocomplete.js.erb +1 -4
  6. data/app/assets/javascripts/admin/product_picker.js +1 -2
  7. data/app/assets/javascripts/admin/progress.coffee +4 -4
  8. data/app/assets/javascripts/admin/shipments.js.erb +0 -243
  9. data/app/assets/javascripts/admin/spree_backend.js +3 -1
  10. data/app/assets/javascripts/admin/stock_transfer.js.coffee +8 -4
  11. data/app/assets/javascripts/admin/taxonomy.js.coffee +2 -2
  12. data/app/assets/javascripts/admin/variant_autocomplete.js.erb +243 -0
  13. data/app/assets/stylesheets/admin/components/_navigation.scss +2 -8
  14. data/app/assets/stylesheets/admin/hacks/_ie.scss +2 -1
  15. data/app/assets/stylesheets/admin/hacks/_mozilla.scss +1 -2
  16. data/app/assets/stylesheets/admin/plugins/_select2.scss +8 -11
  17. data/app/assets/stylesheets/admin/sections/_tax_zones.scss +15 -0
  18. data/app/assets/stylesheets/admin/shared/_forms.scss +0 -1
  19. data/app/assets/stylesheets/admin/shared/_icons.scss +1 -0
  20. data/app/assets/stylesheets/admin/shared/_layout.scss +0 -1
  21. data/app/assets/stylesheets/admin/shared/_tables.scss +1 -1
  22. data/app/assets/stylesheets/admin/spree_admin.scss +1 -0
  23. data/app/assets/stylesheets/admin/spree_backend.css +1 -0
  24. data/app/controllers/spree/admin/base_controller.rb +1 -1
  25. data/app/controllers/spree/admin/orders/customer_details_controller.rb +10 -6
  26. data/app/controllers/spree/admin/orders_controller.rb +5 -4
  27. data/app/controllers/spree/admin/overview_controller.rb +0 -2
  28. data/app/controllers/spree/admin/payment_methods_controller.rb +7 -3
  29. data/app/controllers/spree/admin/payments_controller.rb +5 -13
  30. data/app/controllers/spree/admin/products_controller.rb +8 -0
  31. data/app/controllers/spree/admin/reports_controller.rb +16 -26
  32. data/app/controllers/spree/admin/resource_controller.rb +12 -8
  33. data/app/controllers/spree/admin/stock_items_controller.rb +5 -1
  34. data/app/controllers/spree/admin/stock_movements_controller.rb +5 -1
  35. data/app/controllers/spree/admin/stock_transfers_controller.rb +1 -1
  36. data/app/controllers/spree/admin/taxons_controller.rb +42 -16
  37. data/app/helpers/spree/admin/base_helper.rb +2 -2
  38. data/app/helpers/spree/admin/navigation_helper.rb +3 -6
  39. data/app/helpers/spree/admin/stock_movements_helper.rb +1 -12
  40. data/app/views/spree/admin/mail_methods/_form.html.erb +2 -2
  41. data/app/views/spree/admin/orders/_add_product.html.erb +0 -1
  42. data/app/views/spree/admin/orders/_form.html.erb +1 -5
  43. data/app/views/spree/admin/orders/_shipment.html.erb +2 -10
  44. data/app/views/spree/admin/orders/_shipment_manifest.html.erb +1 -1
  45. data/app/views/spree/admin/orders/customer_details/_form.html.erb +2 -2
  46. data/app/views/spree/admin/orders/customer_details/edit.html.erb +1 -1
  47. data/app/views/spree/admin/orders/index.html.erb +4 -10
  48. data/app/views/spree/admin/payment_methods/_form.html.erb +2 -0
  49. data/app/views/spree/admin/payments/_form.html.erb +2 -2
  50. data/app/views/spree/admin/payments/_list.html.erb +2 -2
  51. data/app/views/spree/admin/payments/show.html.erb +2 -2
  52. data/app/views/spree/admin/payments/source_forms/_gateway.html.erb +2 -3
  53. data/app/views/spree/admin/payments/source_views/_gateway.html.erb +15 -5
  54. data/app/views/spree/admin/products/_form.html.erb +59 -82
  55. data/app/views/spree/admin/products/index.html.erb +1 -1
  56. data/app/views/spree/admin/products/new.html.erb +6 -6
  57. data/app/views/spree/admin/products/stock.html.erb +4 -12
  58. data/app/views/spree/admin/promotion_rules/create.js.erb +0 -1
  59. data/app/views/spree/admin/promotions/_form.html.erb +5 -3
  60. data/app/views/spree/admin/prototypes/_form.html.erb +2 -2
  61. data/app/views/spree/admin/prototypes/show.html.erb +1 -1
  62. data/app/views/spree/admin/reports/sales_total.html.erb +1 -1
  63. data/app/views/spree/admin/return_authorizations/_form.html.erb +2 -2
  64. data/app/views/spree/admin/shared/_content_header.html.erb +23 -0
  65. data/app/views/spree/admin/shared/_destroy.js.erb +14 -5
  66. data/app/views/spree/admin/shared/_header.html.erb +9 -0
  67. data/app/views/spree/admin/shared/_menu.html.erb +9 -0
  68. data/app/views/spree/admin/shared/_order_tabs.html.erb +5 -5
  69. data/app/views/spree/admin/shared/_report_criteria.html.erb +2 -2
  70. data/app/views/spree/admin/shared/_routes.html.erb +1 -2
  71. data/app/views/spree/admin/shared/_sidebar.html.erb +10 -0
  72. data/app/views/spree/admin/shared/_sub_menu.html.erb +9 -0
  73. data/app/views/spree/admin/shared/_table_filter.html.erb +8 -0
  74. data/app/views/spree/admin/shared/_translations.html.erb +3 -6
  75. data/app/views/spree/admin/shipping_methods/_form.html.erb +5 -6
  76. data/app/views/spree/admin/shipping_methods/index.html.erb +1 -1
  77. data/app/views/spree/admin/stock_movements/_form.html.erb +4 -5
  78. data/app/views/spree/admin/stock_movements/index.html.erb +2 -4
  79. data/app/views/spree/admin/stock_transfers/show.html.erb +1 -1
  80. data/app/views/spree/admin/taxons/edit.html.erb +1 -1
  81. data/app/views/spree/admin/variants/_autocomplete.js.erb +51 -6
  82. data/app/views/spree/layouts/admin.html.erb +11 -81
  83. data/config/routes.rb +2 -4
  84. data/lib/spree/backend/engine.rb +0 -1
  85. data/vendor/assets/javascripts/css_browser_selector_dev.js +114 -141
  86. metadata +42 -31
  87. data/app/assets/javascripts/admin/line_items.js.coffee +0 -61
  88. data/app/assets/javascripts/admin/payments/edit.js.coffee +0 -148
  89. data/app/assets/javascripts/admin/stock_movement.js.coffee +0 -17
  90. data/app/assets/javascripts/admin/variant_management.js.coffee +0 -10
  91. data/app/assets/javascripts/spree/backend/select_payments.js.coffee +0 -7
  92. data/app/controllers/spree/admin/variants_including_master_controller.rb +0 -15
  93. data/app/views/spree/admin/orders/_line_items.html.erb +0 -46
  94. data/app/views/spree/admin/variants/_autocomplete_stock.js.erb +0 -41
  95. data/app/views/spree/admin/variants/update.js.erb +0 -1
  96. data/vendor/assets/stylesheets/AdminLTE.css +0 -3535
@@ -6,9 +6,252 @@ $(document).ready(function() {
6
6
  if ($('#variant_autocomplete_template').length > 0) {
7
7
  window.variantTemplate = Handlebars.compile($('#variant_autocomplete_template').text());
8
8
  window.variantStockTemplate = Handlebars.compile($('#variant_autocomplete_stock_template').text());
9
+
10
+ // handle variant selection, show stock level.
11
+ $('#add_variant_id').change(function(){
12
+ var variant_id = $(this).val();
13
+
14
+ var variant = _.find(window.variants, function(variant){
15
+ return variant.id == variant_id
16
+ })
17
+ $('#stock_details').html(variantStockTemplate({variant: variant}));
18
+ $('#stock_details').show();
19
+
20
+ $('button.add_variant').click(addVariantFromStockLocation);
21
+
22
+ // Add some tips
23
+ $('.with-tip').powerTip({
24
+ smartPlacement: true,
25
+ fadeInTime: 50,
26
+ fadeOutTime: 50,
27
+ intentPollInterval: 300
28
+ });
29
+
30
+ });
31
+
32
+ //handle edit click
33
+ $('a.edit-item').click(toggleItemEdit);
34
+
35
+ //handle cancel click
36
+ $('a.cancel-item').click(toggleItemEdit);
37
+
38
+ //handle split click
39
+ $('a.split-item').click(startItemSplit);
40
+
41
+ //handle save click
42
+ $('a.save-item').click(function(){
43
+ var save = $(this);
44
+ var shipment_number = save.data('shipment-number');
45
+ var variant_id = save.data('variant-id');
46
+
47
+ var quantity = parseInt(save.parents('tr').find('input.line_item_quantity').val());
48
+
49
+ toggleItemEdit();
50
+
51
+ adjustItems(shipment_number, variant_id, quantity);
52
+ return false;
53
+ });
54
+
55
+ //handle delete click
56
+ $('a.delete-item').click(function(){
57
+ var del = $(this);
58
+ var shipment_number = del.data('shipment-number');
59
+ var variant_id = del.data('variant-id');
60
+
61
+ toggleItemEdit();
62
+
63
+ adjustItems(shipment_number, variant_id, 0);
64
+
65
+ });
9
66
  }
10
67
  });
11
68
 
69
+ adjustItems = function(shipment_number, variant_id, quantity){
70
+ var shipment = _.findWhere(shipments, {number: shipment_number + ''});
71
+ var inventory_units = _.where(shipment.inventory_units, {variant_id: variant_id});
72
+
73
+ var url = Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipment_number;
74
+
75
+ var new_quantity = 0;
76
+ if(inventory_units.length<quantity){
77
+ url += "/add"
78
+ new_quantity = (quantity - inventory_units.length);
79
+ }else if(inventory_units.length>quantity){
80
+ url += "/remove"
81
+ new_quantity = (inventory_units.length - quantity);
82
+ }
83
+ url += '.json';
84
+
85
+ if(new_quantity!=0){
86
+ $.ajax({
87
+ type: "PUT",
88
+ url: Spree.url(url),
89
+ data: { variant_id: variant_id, quantity: new_quantity }
90
+ }).done(function( msg ) {
91
+ advanceOrder();
92
+ });
93
+ }
94
+ }
95
+
96
+ toggleTrackingEdit = function(){
97
+ var link = $(this);
98
+ link.parents('tbody').find('tr.edit-tracking').toggle();
99
+ link.parents('tbody').find('tr.show-tracking').toggle();
100
+ }
101
+
102
+ toggleMethodEdit = function(){
103
+ var link = $(this);
104
+ link.parents('tbody').find('tr.edit-method').toggle();
105
+ link.parents('tbody').find('tr.show-method').toggle();
106
+ }
107
+
108
+ toggleItemEdit = function(){
109
+ var link = $(this);
110
+ link.parent().find('a.edit-item').toggle();
111
+ link.parent().find('a.cancel-item').toggle();
112
+ link.parent().find('a.split-item').toggle();
113
+ link.parent().find('a.save-item').toggle();
114
+ link.parent().find('a.delete-item').toggle();
115
+ link.parents('tr').find('td.item-qty-show').toggle();
116
+ link.parents('tr').find('td.item-qty-edit').toggle();
117
+
118
+ return false;
119
+ }
120
+
121
+ startItemSplit = function(event){
122
+ event.preventDefault();
123
+ var link = $(this);
124
+ link.parent().find('a.edit-item').toggle();
125
+ link.parent().find('a.split-item').toggle();
126
+ link.parent().find('a.delete-item').toggle();
127
+ var variant_id = link.data('variant-id');
128
+
129
+ var variant = {};
130
+ $.ajax({
131
+ type: "GET",
132
+ async: false,
133
+ url: Spree.url(Spree.routes.variants_api),
134
+ data: {
135
+ q: {
136
+ "id_eq": variant_id
137
+ }
138
+ }
139
+ }).success(function( data ) {
140
+ variant = data['variants'][0];
141
+ }).error(function( msg ) {
142
+ console.log(msg);
143
+ });
144
+
145
+ var max_quantity = link.closest('tr').data('item-quantity');
146
+ var split_item_template = Handlebars.compile($('#variant_split_template').text());
147
+ link.closest('tr').after(split_item_template({ variant: variant, shipments: shipments, max_quantity: max_quantity }));
148
+ $('a.cancel-split').click(cancelItemSplit);
149
+ $('a.save-split').click(completeItemSplit);
150
+
151
+ // Add some tips
152
+ $('.with-tip').powerTip({
153
+ smartPlacement: true,
154
+ fadeInTime: 50,
155
+ fadeOutTime: 50,
156
+ intentPollInterval: 300
157
+ });
158
+ $('#item_stock_location').select2({ width: 'resolve', placeholder: 'Choose Location' });
159
+ }
160
+
161
+ completeItemSplit = function(event) {
162
+ event.preventDefault();
163
+ var link = $(this);
164
+ var order_number = link.closest('tbody').data('order-number');
165
+ var stock_item_row = link.closest('tr');
166
+ var variant_id = stock_item_row.data('variant-id');
167
+ var quantity = stock_item_row.find('#item_quantity').val();
168
+
169
+ var stock_location_id = stock_item_row.find('#item_stock_location').val();
170
+ var original_shipment_number = link.closest('tbody').data('shipment-number');
171
+
172
+ var selected_shipment = stock_item_row.find($('#item_stock_location').select2('data').element);
173
+ var target_shipment_number = selected_shipment.data('shipment-number');
174
+ var new_shipment = selected_shipment.data('new-shipment');
175
+
176
+ if (stock_location_id != 'new_shipment') {
177
+ // first remove item(s) from original shipment
178
+ $.ajax({
179
+ type: "PUT",
180
+ async: false,
181
+ url: Spree.url(Spree.routes.orders_api + "/" + order_number + "/shipments/" + original_shipment_number + "/remove.json"),
182
+ data: { variant_id: variant_id, quantity: quantity }
183
+ });
184
+
185
+ if (new_shipment != undefined) {
186
+ $.ajax({
187
+ type: "POST",
188
+ async: false,
189
+ url: Spree.url(Spree.routes.orders_api + "/" + order_number + "/shipments.json"),
190
+ data: { variant_id: variant_id, quantity: quantity, stock_location_id: stock_location_id }
191
+ }).done(function(msg) {
192
+ advanceOrder();
193
+ });
194
+ } else {
195
+ $.ajax({
196
+ type: "PUT",
197
+ async: false,
198
+ url: Spree.url(Spree.routes.orders_api + "/" + order_number + "/shipments/" + target_shipment_number + "/add.json"),
199
+ data: { variant_id: variant_id, quantity: quantity }
200
+ }).done(function(msg) {
201
+ advanceOrder();
202
+ });
203
+ }
204
+ }
205
+ }
206
+
207
+ advanceOrder = function() {
208
+ $.ajax({
209
+ type: "PUT",
210
+ async: false,
211
+ url: Spree.url(Spree.routes.checkouts_api + "/" + order_number + "/advance")
212
+ }).done(function() {
213
+ window.location.reload();
214
+ });
215
+ }
216
+
217
+ cancelItemSplit = function(event) {
218
+ event.preventDefault();
219
+ var link = $(this);
220
+ var prev_row = link.closest('tr').prev();
221
+ link.closest('tr').remove();
222
+ prev_row.find('a.edit-item').toggle();
223
+ prev_row.find('a.split-item').toggle();
224
+ prev_row.find('a.delete-item').toggle();
225
+ }
226
+
227
+ addVariantFromStockLocation = function() {
228
+ $('#stock_details').hide();
229
+
230
+ var variant_id = $('input.variant_autocomplete').val();
231
+ var stock_location_id = $(this).data('stock-location-id');
232
+ var quantity = $("input.quantity[data-stock-location-id='" + stock_location_id + "']").val();
233
+
234
+ var shipment = _.find(shipments, function(shipment){
235
+ return shipment.stock_location_id == stock_location_id && (shipment.state == 'ready' || shipment.state == 'pending');
236
+ });
237
+
238
+ if(shipment==undefined){
239
+ $.ajax({
240
+ type: "POST",
241
+ url: Spree.url(Spree.routes.orders_api + "/" + order_number + "/shipments.json"),
242
+ data: { variant_id: variant_id, quantity: quantity, stock_location_id: stock_location_id }
243
+ }).done(function( msg ) {
244
+ advanceOrder();
245
+ }).error(function( msg ) {
246
+ console.log(msg);
247
+ });
248
+ }else{
249
+ //add to existing shipment
250
+ adjustItems(shipment.number, variant_id, quantity);
251
+ }
252
+ return 1
253
+ }
254
+
12
255
  formatVariantResult = function(variant) {
13
256
  if (variant["images"][0] != undefined && variant["images"][0].urls != undefined) {
14
257
  variant.image = variant.images[0].urls.mini
@@ -63,18 +63,12 @@ nav.menu {
63
63
  #admin-menu {
64
64
  background-color: $color-3;
65
65
 
66
- ul{
67
- display: table;
68
- table-layout: fixed;
69
- width: 100%;
70
- }
71
-
72
66
  li {
73
- display: table-cell;
67
+ min-width: 90px;
74
68
 
75
69
  a {
76
70
  display: block;
77
- padding: 25px 15px;
71
+ padding: 25px 20px;
78
72
  color: $color-1 !important;
79
73
  text-transform: uppercase;
80
74
  position: relative;
@@ -18,6 +18,7 @@ html.ie {
18
18
  }
19
19
  .select2-search {
20
20
  &:before {
21
+ position: relative;
21
22
  z-index: 10000;
22
23
  content: '\f002' !important;
23
24
  }
@@ -69,4 +70,4 @@ html.ie8 {
69
70
  }
70
71
  }
71
72
 
72
- }
73
+ }
@@ -22,7 +22,6 @@ html.firefox {
22
22
 
23
23
  // Fix select2 search input left padding to not overlap search icon
24
24
  .select2-search input.select2-input {
25
- padding-bottom: 12px !important;
26
25
  padding-left: 25px !important;
27
26
  }
28
27
 
@@ -30,4 +29,4 @@ html.firefox {
30
29
  input#image_attachment {
31
30
  width: 80%;
32
31
  }
33
- }
32
+ }
@@ -63,15 +63,17 @@
63
63
  @extend [class^="icon-"]:before;
64
64
 
65
65
  position: absolute;
66
- top: 16px;
66
+ top: 13px;
67
67
  left: 13px;
68
68
  }
69
69
 
70
70
  input {
71
71
  @extend input[type="text"];
72
-
73
- padding: 6px 0 6px 25px;
74
- margin: 5px 0 0 5px;
72
+ margin-top: 5px;
73
+ margin-left: -6px;
74
+ padding-left: 25px;
75
+ padding-top: 6px;
76
+ padding-bottom: 6px;
75
77
  font-family: $base-font-family;
76
78
  font-size: 90%;
77
79
  box-shadow: none;
@@ -99,17 +101,12 @@
99
101
  }
100
102
  }
101
103
 
102
- .select2-results {
104
+ .select2-results {
103
105
  padding-left: 0 !important;
104
106
 
105
107
  li {
106
108
  font-size: 85% !important;
107
109
 
108
-
109
- &:nth-child(odd) {
110
- background: #efefef;
111
- }
112
-
113
110
  &.select2-highlighted {
114
111
  .select2-result-label {
115
112
  &, h6 {
@@ -136,7 +133,7 @@
136
133
  }
137
134
 
138
135
  .select2-highlighted {
139
- background-color: $color-sel-bg !important;
136
+ background-color: $color-sel-bg;
140
137
  }
141
138
  }
142
139
 
@@ -0,0 +1,15 @@
1
+ #ul-nested-country {
2
+ > li {
3
+ margin-bottom: 10px;
4
+ }
5
+
6
+ .select2-container, select {
7
+ width: 90%;
8
+ }
9
+
10
+ a.remove {
11
+ display: inline-block;
12
+ margin-top: 6px;
13
+ }
14
+
15
+ }
@@ -62,7 +62,6 @@ button, .button {
62
62
  color: $color-btn-text;
63
63
  text-transform: uppercase;
64
64
  font-weight: 600 !important;
65
- white-space: nowrap;
66
65
 
67
66
  &:before {
68
67
  font-weight: normal !important;
@@ -8,6 +8,7 @@
8
8
  width: auto;
9
9
 
10
10
  &:before {
11
+ padding-right: 5px;
11
12
  padding-top: 3px;
12
13
  }
13
14
  }
@@ -75,7 +75,6 @@
75
75
  }
76
76
  .page-actions {
77
77
  text-align: right;
78
- line-height: 38px;
79
78
  form {
80
79
  display: inline-block;
81
80
  }
@@ -84,7 +84,7 @@ table {
84
84
  background-color: $color-notice;
85
85
  color: $color-1;
86
86
  }
87
- .icon-edit:hover, .icon-capture:hover, .icon-ok:hover, .icon-plus:hover, .icon-save:hover {
87
+ .icon-edit:hover, .icon-capture:hover, .icon-ok:hover, .icon-plus:hover {
88
88
  background-color: $color-success;
89
89
  color: $color-1;
90
90
  }
@@ -34,6 +34,7 @@
34
34
  @import 'sections/promotions';
35
35
  @import 'sections/edit_checkouts';
36
36
  @import 'sections/bulk_transfer';
37
+ @import 'sections/tax_zones';
37
38
 
38
39
  @import 'hacks/mozilla';
39
40
  @import 'hacks/opera';
@@ -9,6 +9,7 @@
9
9
  *= require normalize
10
10
  *= require skeleton
11
11
  *= require jquery.ui.datepicker
12
+ *= require jquery.ui.autocomplete
12
13
  *= require jquery.powertip
13
14
  *= require select2
14
15
 
@@ -19,7 +19,7 @@ module Spree
19
19
  if respond_to?(:model_class, true) && model_class
20
20
  record = model_class
21
21
  else
22
- record = controller_name.to_sym
22
+ record = Object
23
23
  end
24
24
  authorize! :admin, record
25
25
  authorize! action, record
@@ -16,7 +16,7 @@ module Spree
16
16
  end
17
17
 
18
18
  def update
19
- if @order.update_attributes(params[:order])
19
+ if @order.update_attributes(order_params)
20
20
  if params[:guest_checkout] == "false"
21
21
  @order.associate_user!(Spree.user_class.find_by_email(@order.email))
22
22
  end
@@ -32,13 +32,17 @@ module Spree
32
32
  end
33
33
 
34
34
  private
35
-
36
- def load_order
37
- @order = Order.find_by_number!(params[:order_id], :include => :adjustments)
35
+ def order_params
36
+ params.require(:order).permit(
37
+ :email,
38
+ :use_billing,
39
+ :bill_address_attributes => permitted_address_attributes,
40
+ :ship_address_attributes => permitted_address_attributes
41
+ )
38
42
  end
39
43
 
40
- def model_class
41
- Spree::Order
44
+ def load_order
45
+ @order = Order.includes(:adjustments).find_by_number!(params[:order_id])
42
46
  end
43
47
 
44
48
  end
@@ -10,7 +10,7 @@ module Spree
10
10
  def index
11
11
  params[:q] ||= {}
12
12
  params[:q][:completed_at_not_null] ||= '1' if Spree::Config[:show_only_complete_orders_by_default]
13
- @show_only_completed = params[:q][:completed_at_not_null] == '1'
13
+ @show_only_completed = params[:q][:completed_at_not_null].present?
14
14
  params[:q][:s] ||= @show_only_completed ? 'completed_at desc' : 'created_at desc'
15
15
 
16
16
  # As date params are deleted if @show_only_completed, store
@@ -35,7 +35,7 @@ module Spree
35
35
  end
36
36
 
37
37
  @search = Order.accessible_by(current_ability, :index).ransack(params[:q])
38
- @orders = @search.result(distinct: true).includes([:user, :shipments, :payments]).
38
+ @orders = @search.result.includes([:user, :shipments, :payments]).
39
39
  page(params[:page]).
40
40
  per(params[:per_page] || Spree::Config[:orders_per_page])
41
41
 
@@ -83,7 +83,7 @@ module Spree
83
83
  # TODO - possible security check here but right now any admin can before any transition (and the state machine
84
84
  # itself will make sure transitions are not applied in the wrong state)
85
85
  event = params[:e]
86
- if @order.state_events.include?(event.to_sym) && @order.send("#{event}")
86
+ if @order.send("#{event}")
87
87
  flash[:success] = Spree.t(:order_updated)
88
88
  else
89
89
  flash[:error] = Spree.t(:cannot_perform_operation)
@@ -118,8 +118,9 @@ module Spree
118
118
  end
119
119
 
120
120
  private
121
+
121
122
  def load_order
122
- @order = Order.includes(:adjustments).find_by_number!(params[:id])
123
+ @order = Order.includes(:adjustments).find_by_number!(params[:id]) if params[:id]
123
124
  authorize! action, @order
124
125
  end
125
126
 
@@ -2,8 +2,6 @@
2
2
  module Spree
3
3
  module Admin
4
4
  class OverviewController < Spree::Admin::BaseController
5
- #todo, add rss feed of information that is happening
6
-
7
5
  def index
8
6
  @users = User.all
9
7
  end
@@ -8,7 +8,7 @@ module Spree
8
8
  respond_to :html
9
9
 
10
10
  def create
11
- @payment_method = params[:payment_method].delete(:type).constantize.new(params[:payment_method])
11
+ @payment_method = params[:payment_method].delete(:type).constantize.new(payment_method_params)
12
12
  @object = @payment_method
13
13
  invoke_callbacks(:create, :before)
14
14
  if @payment_method.save
@@ -29,8 +29,8 @@ module Spree
29
29
  @payment_method = PaymentMethod.find(params[:id])
30
30
  end
31
31
 
32
- payment_method_params = params[ActiveModel::Naming.param_key(@payment_method)] || {}
33
- attributes = params[:payment_method].merge(payment_method_params)
32
+ update_params = params[ActiveModel::Naming.param_key(@payment_method)] || {}
33
+ attributes = payment_method_params.merge(update_params)
34
34
  attributes.each do |k,v|
35
35
  if k.include?("password") && attributes[k].blank?
36
36
  attributes.delete(k)
@@ -60,6 +60,10 @@ module Spree
60
60
  redirect_to new_admin_payment_method_path
61
61
  end
62
62
  end
63
+
64
+ def payment_method_params
65
+ params.require(:payment_method).permit!
66
+ end
63
67
  end
64
68
  end
65
69
  end
@@ -32,15 +32,17 @@ module Spree
32
32
  if @order.completed?
33
33
  @payment.process!
34
34
  flash[:success] = flash_message_for(@payment, :successfully_created)
35
+
36
+ redirect_to admin_order_payments_path(@order)
35
37
  else
36
38
  #This is the first payment (admin created order)
37
39
  until @order.completed?
38
40
  @order.next!
39
41
  end
40
42
  flash[:success] = Spree.t(:new_order_completed)
43
+ redirect_to edit_admin_order_url(@order)
41
44
  end
42
45
 
43
- redirect_to admin_order_payments_path(@order)
44
46
  rescue Spree::Core::GatewayError => e
45
47
  flash[:error] = "#{e.message}"
46
48
  redirect_to new_admin_order_payment_path(@order)
@@ -69,7 +71,7 @@ module Spree
69
71
  if params[:payment] and params[:payment_source] and source_params = params.delete(:payment_source)[params[:payment][:payment_method_id]]
70
72
  params[:payment][:source_attributes] = source_params
71
73
  end
72
- params[:payment]
74
+ params.require(:payment).permit(:amount, :payment_method_id, :source_attributes)
73
75
  end
74
76
 
75
77
  def load_data
@@ -83,14 +85,8 @@ module Spree
83
85
  @previous_cards = @order.credit_cards.with_payment_profile
84
86
  end
85
87
 
86
- # At this point admin should have passed through Customer Details step
87
- # where order.next is called which leaves the order in payment step
88
- #
89
- # Orders in complete step also allows to access this controller
90
- #
91
- # Otherwise redirect user to that step
92
88
  def can_transition_to_payment
93
- unless @order.billing_address.present?
89
+ unless @order.billing_address.present?
94
90
  flash[:notice] = Spree.t(:fill_in_customer_info)
95
91
  redirect_to edit_admin_order_customer_url(@order)
96
92
  end
@@ -105,10 +101,6 @@ module Spree
105
101
  def load_payment
106
102
  @payment = Payment.find(params[:id])
107
103
  end
108
-
109
- def model_class
110
- Spree::Payment
111
- end
112
104
  end
113
105
  end
114
106
  end
@@ -6,6 +6,7 @@ module Spree
6
6
  before_filter :load_data, :except => :index
7
7
  create.before :create_before
8
8
  update.before :update_before
9
+ helper_method :clone_object_url
9
10
 
10
11
  def show
11
12
  session[:return_to] ||= request.referer
@@ -116,6 +117,13 @@ module Spree
116
117
  [{:variants => [:images, {:option_values => :option_type}]}, {:master => [:images, :default_price]}]
117
118
  end
118
119
 
120
+ def clone_object_url resource
121
+ clone_admin_product_url resource
122
+ end
123
+
124
+ def permit_attributes
125
+ params.require(:product).permit!
126
+ end
119
127
  end
120
128
  end
121
129
  end