spree_api 1.3.5 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +14 -6
- data/Rakefile +1 -1
- data/app/controllers/spree/api/addresses_controller.rb +0 -1
- data/app/controllers/spree/api/base_controller.rb +21 -9
- data/app/controllers/spree/api/checkouts_controller.rb +40 -20
- data/app/controllers/spree/api/countries_controller.rb +0 -1
- data/app/controllers/spree/api/inventory_units_controller.rb +1 -1
- data/app/controllers/spree/api/option_types_controller.rb +46 -0
- data/app/controllers/spree/api/option_values_controller.rb +56 -0
- data/app/controllers/spree/api/orders_controller.rb +1 -21
- data/app/controllers/spree/api/product_properties_controller.rb +0 -1
- data/app/controllers/spree/api/products_controller.rb +12 -27
- data/app/controllers/spree/api/properties_controller.rb +61 -0
- data/app/controllers/spree/api/shipments_controller.rb +51 -1
- data/app/controllers/spree/api/states_controller.rb +32 -0
- data/app/controllers/spree/api/stock_items_controller.rb +70 -0
- data/app/controllers/spree/api/stock_locations_controller.rb +45 -0
- data/app/controllers/spree/api/stock_movements_controller.rb +55 -0
- data/app/controllers/spree/api/taxonomies_controller.rb +5 -0
- data/app/controllers/spree/api/taxons_controller.rb +16 -2
- data/app/controllers/spree/api/variants_controller.rb +1 -1
- data/app/controllers/spree/api/zones_controller.rb +0 -1
- data/app/helpers/spree/api/api_helpers.rb +34 -7
- data/app/models/spree/api_configuration.rb +1 -2
- data/app/models/spree/line_item_decorator.rb +1 -1
- data/app/models/spree/order_decorator.rb +6 -169
- data/app/overrides/api_admin_user_edit_form.rb +7 -6
- data/app/views/spree/admin/users/_api_fields.html.erb +7 -8
- data/app/views/spree/api/addresses/show.v1.rabl +2 -2
- data/app/views/spree/api/adjustments/show.v1.rabl +2 -0
- data/app/views/spree/api/credit_cards/show.v1.rabl +2 -0
- data/app/views/spree/api/option_types/index.v1.rabl +3 -0
- data/app/views/spree/api/option_types/show.v1.rabl +5 -0
- data/app/views/spree/api/option_values/index.v1.rabl +3 -0
- data/app/views/spree/api/option_values/show.v1.rabl +2 -0
- data/app/views/spree/api/orders/could_not_apply_coupon.v1.rabl +2 -0
- data/app/views/spree/api/orders/delivery.v1.rabl +2 -2
- data/app/views/spree/api/orders/payment.v1.rabl +3 -0
- data/app/views/spree/api/orders/show.v1.rabl +8 -0
- data/app/views/spree/api/properties/index.v1.rabl +7 -0
- data/app/views/spree/api/properties/new.v1.rabl +2 -0
- data/app/views/spree/api/properties/show.v1.rabl +2 -0
- data/app/views/spree/api/shared/stock_location_required.v1.rabl +2 -0
- data/app/views/spree/api/shipments/show.v1.rabl +7 -0
- data/app/views/spree/api/states/index.v1.rabl +14 -0
- data/app/views/spree/api/states/show.v1.rabl +2 -0
- data/app/views/spree/api/stock_items/index.v1.rabl +7 -0
- data/app/views/spree/api/stock_items/show.v1.rabl +5 -0
- data/app/views/spree/api/stock_locations/index.v1.rabl +7 -0
- data/app/views/spree/api/stock_locations/show.v1.rabl +8 -0
- data/app/views/spree/api/stock_movements/index.v1.rabl +7 -0
- data/app/views/spree/api/stock_movements/show.v1.rabl +5 -0
- data/app/views/spree/api/taxonomies/jstree.rabl +8 -0
- data/app/views/spree/api/taxons/jstree.rabl +8 -0
- data/app/views/spree/api/variants/index.v1.rabl +14 -1
- data/app/views/spree/api/variants/variant.v1.rabl +0 -4
- data/config/locales/en.yml +1 -0
- data/config/routes.rb +29 -3
- data/lib/spree/api.rb +0 -2
- data/lib/spree/api/controller_setup.rb +6 -1
- data/lib/spree/api/testing_support/helpers.rb +1 -1
- data/lib/spree/api/testing_support/setup.rb +13 -0
- data/spec/controllers/spree/api/base_controller_spec.rb +14 -1
- data/spec/controllers/spree/api/checkouts_controller_spec.rb +59 -28
- data/spec/controllers/spree/api/line_items_controller_spec.rb +1 -5
- data/spec/controllers/spree/api/option_types_controller_spec.rb +116 -0
- data/spec/controllers/spree/api/option_values_controller_spec.rb +128 -0
- data/spec/controllers/spree/api/orders_controller_spec.rb +11 -93
- data/spec/controllers/spree/api/product_properties_controller_spec.rb +2 -2
- data/spec/controllers/spree/api/products_controller_spec.rb +18 -76
- data/spec/controllers/spree/api/properties_controller_spec.rb +89 -0
- data/spec/controllers/spree/api/return_authorizations_controller_spec.rb +1 -9
- data/spec/controllers/spree/api/shipments_controller_spec.rb +80 -5
- data/spec/controllers/spree/api/states_controller_spec.rb +76 -0
- data/spec/controllers/spree/api/stock_items_controller_spec.rb +88 -0
- data/spec/controllers/spree/api/stock_locations_controller_spec.rb +86 -0
- data/spec/controllers/spree/api/stock_movements_controller_spec.rb +72 -0
- data/spec/controllers/spree/api/taxonomies_controller_spec.rb +7 -0
- data/spec/controllers/spree/api/taxons_controller_spec.rb +29 -2
- data/spec/controllers/spree/api/unauthenticated_products_controller_spec.rb +1 -1
- data/spec/controllers/spree/api/variants_controller_spec.rb +5 -16
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/models/spree/order_spec.rb +7 -328
- data/spec/spec_helper.rb +18 -2
- data/spree_api.gemspec +2 -1
- metadata +67 -16
- data/.rspec +0 -1
- data/app/controllers/spree/base_controller_decorator.rb +0 -15
- data/app/overrides/api_key_spree_layout.rb +0 -7
- data/app/views/spree/api/_key.html.erb +0 -4
- data/db/migrate/20131017162334_add_index_to_user_spree_api_key.rb +0 -7
@@ -4,7 +4,39 @@ module Spree
|
|
4
4
|
respond_to :json
|
5
5
|
|
6
6
|
before_filter :find_order
|
7
|
-
before_filter :find_and_update_shipment, :only => [:ship, :ready]
|
7
|
+
before_filter :find_and_update_shipment, :only => [:ship, :ready, :add, :remove]
|
8
|
+
|
9
|
+
def create
|
10
|
+
variant = Spree::Variant.find(params[:variant_id])
|
11
|
+
quantity = params[:quantity].to_i
|
12
|
+
@shipment = @order.shipments.create(:stock_location_id => params[:stock_location_id])
|
13
|
+
@order.contents.add(variant, quantity, nil, @shipment)
|
14
|
+
|
15
|
+
@shipment.refresh_rates
|
16
|
+
@shipment.save!
|
17
|
+
|
18
|
+
respond_with(@shipment.reload, :default_template => :show)
|
19
|
+
end
|
20
|
+
|
21
|
+
def update
|
22
|
+
authorize! :read, Shipment
|
23
|
+
@shipment = @order.shipments.find_by_number!(params[:id])
|
24
|
+
|
25
|
+
unlock = params[:shipment].delete(:unlock)
|
26
|
+
|
27
|
+
if unlock == 'yes'
|
28
|
+
@shipment.adjustment.open
|
29
|
+
end
|
30
|
+
|
31
|
+
@shipment.update_attributes(params[:shipment])
|
32
|
+
|
33
|
+
if unlock == 'yes'
|
34
|
+
@shipment.adjustment.close
|
35
|
+
end
|
36
|
+
|
37
|
+
@shipment.reload
|
38
|
+
respond_with(@shipment, :default_template => :show)
|
39
|
+
end
|
8
40
|
|
9
41
|
def ready
|
10
42
|
authorize! :read, Shipment
|
@@ -26,6 +58,24 @@ module Spree
|
|
26
58
|
respond_with(@shipment, :default_template => :show)
|
27
59
|
end
|
28
60
|
|
61
|
+
def add
|
62
|
+
variant = Spree::Variant.find(params[:variant_id])
|
63
|
+
quantity = params[:quantity].to_i
|
64
|
+
|
65
|
+
@order.contents.add(variant, quantity, nil, @shipment)
|
66
|
+
|
67
|
+
respond_with(@shipment, :default_template => :show)
|
68
|
+
end
|
69
|
+
|
70
|
+
def remove
|
71
|
+
variant = Spree::Variant.find(params[:variant_id])
|
72
|
+
quantity = params[:quantity].to_i
|
73
|
+
|
74
|
+
@order.contents.remove(variant, quantity, @shipment)
|
75
|
+
|
76
|
+
respond_with(@shipment, :default_template => :show)
|
77
|
+
end
|
78
|
+
|
29
79
|
private
|
30
80
|
|
31
81
|
def find_order
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
class StatesController < Spree::Api::BaseController
|
4
|
+
|
5
|
+
def index
|
6
|
+
@states = scope.ransack(params[:q]).result.
|
7
|
+
includes(:country).order('name ASC')
|
8
|
+
|
9
|
+
if params[:page] || params[:per_page]
|
10
|
+
@states = @states.page(params[:page]).per(params[:per_page])
|
11
|
+
end
|
12
|
+
|
13
|
+
respond_with(@states)
|
14
|
+
end
|
15
|
+
|
16
|
+
def show
|
17
|
+
@state = scope.find(params[:id])
|
18
|
+
respond_with(@state)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def scope
|
23
|
+
if params[:country_id]
|
24
|
+
@country = Country.find(params[:country_id])
|
25
|
+
return @country.states
|
26
|
+
else
|
27
|
+
return State.scoped
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
class StockItemsController < Spree::Api::BaseController
|
4
|
+
before_filter :stock_location, except: [:update, :destroy]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@stock_items = scope.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
|
8
|
+
respond_with(@stock_items)
|
9
|
+
end
|
10
|
+
|
11
|
+
def show
|
12
|
+
@stock_item = scope.find(params[:id])
|
13
|
+
respond_with(@stock_item)
|
14
|
+
end
|
15
|
+
|
16
|
+
def create
|
17
|
+
authorize! :create, StockItem
|
18
|
+
|
19
|
+
count_on_hand = 0
|
20
|
+
if params[:stock_item].has_key?(:count_on_hand)
|
21
|
+
count_on_hand = params[:stock_item][:count_on_hand].to_i
|
22
|
+
params[:stock_item].delete(:count_on_hand)
|
23
|
+
end
|
24
|
+
|
25
|
+
@stock_item = scope.new(params[:stock_item])
|
26
|
+
if @stock_item.save
|
27
|
+
@stock_item.adjust_count_on_hand(count_on_hand)
|
28
|
+
respond_with(@stock_item, status: 201, default_template: :show)
|
29
|
+
else
|
30
|
+
invalid_resource!(@stock_item)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def update
|
35
|
+
authorize! :update, StockItem
|
36
|
+
@stock_item = StockItem.find(params[:id])
|
37
|
+
|
38
|
+
count_on_hand = 0
|
39
|
+
if params[:stock_item].has_key?(:count_on_hand)
|
40
|
+
count_on_hand = params[:stock_item][:count_on_hand].to_i
|
41
|
+
params[:stock_item].delete(:count_on_hand)
|
42
|
+
end
|
43
|
+
|
44
|
+
if @stock_item.adjust_count_on_hand(count_on_hand)
|
45
|
+
respond_with(@stock_item, status: 200, default_template: :show)
|
46
|
+
else
|
47
|
+
invalid_resource!(@stock_item)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def destroy
|
52
|
+
authorize! :delete, StockItem
|
53
|
+
@stock_item = StockItem.find(params[:id])
|
54
|
+
@stock_item.destroy
|
55
|
+
respond_with(@stock_item, status: 204)
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def stock_location
|
61
|
+
render 'spree/api/shared/stock_location_required', status: 422 and return unless params[:stock_location_id]
|
62
|
+
@stock_location ||= StockLocation.find(params[:stock_location_id])
|
63
|
+
end
|
64
|
+
|
65
|
+
def scope
|
66
|
+
@stock_location.stock_items.includes(:variant => :product)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
class StockLocationsController < Spree::Api::BaseController
|
4
|
+
def index
|
5
|
+
@stock_locations = StockLocation.order('name ASC').ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
|
6
|
+
respond_with(@stock_locations)
|
7
|
+
end
|
8
|
+
|
9
|
+
def show
|
10
|
+
respond_with(stock_location)
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
authorize! :create, StockLocation
|
15
|
+
@stock_location = StockLocation.new(params[:stock_location])
|
16
|
+
if @stock_location.save
|
17
|
+
respond_with(@stock_location, status: 201, default_template: :show)
|
18
|
+
else
|
19
|
+
invalid_resource!(@stock_location)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def update
|
24
|
+
authorize! :update, StockLocation
|
25
|
+
if stock_location.update_attributes(params[:stock_location])
|
26
|
+
respond_with(stock_location, status: 200, default_template: :show)
|
27
|
+
else
|
28
|
+
invalid_resource!(stock_location)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def destroy
|
33
|
+
authorize! :delete, StockLocation
|
34
|
+
stock_location.destroy
|
35
|
+
respond_with(stock_location, :status => 204)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def stock_location
|
41
|
+
@stock_location ||= StockLocation.find(params[:id])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
class StockMovementsController < Spree::Api::BaseController
|
4
|
+
before_filter :stock_location, except: [:update, :destroy]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@stock_movements = scope.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
|
8
|
+
respond_with(@stock_movements)
|
9
|
+
end
|
10
|
+
|
11
|
+
def show
|
12
|
+
@stock_movement = scope.find(params[:id])
|
13
|
+
respond_with(@stock_movement)
|
14
|
+
end
|
15
|
+
|
16
|
+
def create
|
17
|
+
authorize! :create, StockMovement
|
18
|
+
@stock_movement = scope.new(params[:stock_movement])
|
19
|
+
if @stock_movement.save
|
20
|
+
respond_with(@stock_movement, status: 201, default_template: :show)
|
21
|
+
else
|
22
|
+
invalid_resource!(@stock_movement)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def update
|
27
|
+
authorize! :update, StockMovement
|
28
|
+
@stock_movement = StockMovement.find(params[:id])
|
29
|
+
if @stock_movement.update_attributes(params[:stock_movement])
|
30
|
+
respond_with(@stock_movement, status: 200, default_template: :show)
|
31
|
+
else
|
32
|
+
invalid_resource!(@stock_movement)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def destroy
|
37
|
+
authorize! :delete, StockMovement
|
38
|
+
@stock_movement = StockMovement.find(params[:id])
|
39
|
+
@stock_movement.destroy
|
40
|
+
respond_with(@stock_movement, status: 204)
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def stock_location
|
46
|
+
render 'spree/api/shared/stock_location_required', status: 422 and return unless params[:stock_location_id]
|
47
|
+
@stock_location ||= StockLocation.find(params[:stock_location_id])
|
48
|
+
end
|
49
|
+
|
50
|
+
def scope
|
51
|
+
@stock_location.stock_movements
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -4,7 +4,15 @@ module Spree
|
|
4
4
|
respond_to :json
|
5
5
|
|
6
6
|
def index
|
7
|
-
|
7
|
+
if taxonomy
|
8
|
+
@taxons = taxonomy.root.children
|
9
|
+
else
|
10
|
+
if params[:ids]
|
11
|
+
@taxons = Taxon.where(:id => params[:ids].split(","))
|
12
|
+
else
|
13
|
+
@taxons = Taxon.ransack(params[:q]).result
|
14
|
+
end
|
15
|
+
end
|
8
16
|
respond_with(@taxons)
|
9
17
|
end
|
10
18
|
|
@@ -13,6 +21,10 @@ module Spree
|
|
13
21
|
respond_with(@taxon)
|
14
22
|
end
|
15
23
|
|
24
|
+
def jstree
|
25
|
+
show
|
26
|
+
end
|
27
|
+
|
16
28
|
def create
|
17
29
|
authorize! :create, Taxon
|
18
30
|
@taxon = Taxon.new(params[:taxon])
|
@@ -51,7 +63,9 @@ module Spree
|
|
51
63
|
private
|
52
64
|
|
53
65
|
def taxonomy
|
54
|
-
|
66
|
+
if params[:taxonomy_id].present?
|
67
|
+
@taxonomy ||= Taxonomy.find(params[:taxonomy_id])
|
68
|
+
end
|
55
69
|
end
|
56
70
|
|
57
71
|
def taxon
|
@@ -12,8 +12,7 @@ module Spree
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def product_attributes
|
15
|
-
[:id, :name, :description, :price, :available_on, :permalink,
|
16
|
-
:count_on_hand, :meta_description, :meta_keywords, :taxon_ids]
|
15
|
+
[:id, :name, :description, :price, :available_on, :permalink, :meta_description, :meta_keywords, :taxon_ids]
|
17
16
|
end
|
18
17
|
|
19
18
|
def product_property_attributes
|
@@ -21,7 +20,7 @@ module Spree
|
|
21
20
|
end
|
22
21
|
|
23
22
|
def variant_attributes
|
24
|
-
[:id, :name, :
|
23
|
+
[:id, :name, :sku, :price, :weight, :height, :width, :depth, :is_master, :cost_price, :permalink]
|
25
24
|
end
|
26
25
|
|
27
26
|
def image_attributes
|
@@ -33,7 +32,7 @@ module Spree
|
|
33
32
|
end
|
34
33
|
|
35
34
|
def order_attributes
|
36
|
-
[:id, :number, :item_total, :total, :state, :adjustment_total, :user_id, :created_at, :updated_at, :completed_at, :payment_total, :shipment_state, :payment_state, :email, :special_instructions
|
35
|
+
[:id, :number, :item_total, :total, :state, :adjustment_total, :user_id, :created_at, :updated_at, :completed_at, :payment_total, :shipment_state, :payment_state, :email, :special_instructions]
|
37
36
|
end
|
38
37
|
|
39
38
|
def line_item_attributes
|
@@ -61,12 +60,11 @@ module Spree
|
|
61
60
|
end
|
62
61
|
|
63
62
|
def taxon_attributes
|
64
|
-
[:id, :name, :permalink, :position, :parent_id, :taxonomy_id]
|
63
|
+
[:id, :name, :pretty_name, :permalink, :position, :parent_id, :taxonomy_id]
|
65
64
|
end
|
66
65
|
|
67
66
|
def inventory_unit_attributes
|
68
|
-
[:id, :lock_version, :state, :variant_id, :
|
69
|
-
:shipment_id, :return_authorization_id]
|
67
|
+
[:id, :lock_version, :state, :variant_id, :shipment_id, :return_authorization_id]
|
70
68
|
end
|
71
69
|
|
72
70
|
def return_authorization_attributes
|
@@ -77,9 +75,38 @@ module Spree
|
|
77
75
|
[:id, :iso_name, :iso, :iso3, :name, :numcode]
|
78
76
|
end
|
79
77
|
|
78
|
+
def state_attributes
|
79
|
+
[:id, :name, :abbr, :country_id]
|
80
|
+
end
|
81
|
+
|
82
|
+
def adjustment_attributes
|
83
|
+
[:id, :source_type, :source_id, :adjustable_type, :adjustable_id, :originator_type, :originator_id, :amount, :label, :mandatory, :locked, :eligible, :created_at, :updated_at]
|
84
|
+
end
|
85
|
+
|
86
|
+
def creditcard_attributes
|
87
|
+
[:id, :month, :year, :cc_type, :last_digits, :first_name, :last_name, :gateway_customer_profile_id, :gateway_payment_profile_id]
|
88
|
+
end
|
89
|
+
|
80
90
|
def user_attributes
|
81
91
|
[:id, :email, :created_at, :updated_at]
|
82
92
|
end
|
93
|
+
|
94
|
+
def property_attributes
|
95
|
+
[:id, :name, :presentation]
|
96
|
+
end
|
97
|
+
|
98
|
+
def stock_location_attributes
|
99
|
+
[:id, :name, :address1, :address2, :city, :state_id, :state_name, :country_id, :zipcode, :phone, :active]
|
100
|
+
end
|
101
|
+
|
102
|
+
def stock_movement_attributes
|
103
|
+
[:id, :quantity, :stock_item_id]
|
104
|
+
end
|
105
|
+
|
106
|
+
def stock_item_attributes
|
107
|
+
[:id, :count_on_hand, :backorderable, :lock_version, :stock_location_id, :variant_id]
|
108
|
+
end
|
83
109
|
end
|
84
110
|
end
|
85
111
|
end
|
112
|
+
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Spree
|
2
2
|
class ApiConfiguration < Preferences::Configuration
|
3
|
-
|
4
|
-
preference :requires_authentication, :boolean, :default => true
|
3
|
+
preference :requires_authentication, :boolean, :default => false
|
5
4
|
end
|
6
5
|
end
|
@@ -1,176 +1,13 @@
|
|
1
1
|
Spree::Order.class_eval do
|
2
|
-
attr_accessible :channel, :as => :api_admin
|
3
|
-
|
4
2
|
def self.build_from_api(user, params)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
order = create!
|
12
|
-
|
13
|
-
order.create_shipments_from_api params.delete(:shipments_attributes) || []
|
14
|
-
order.create_line_items_from_api params.delete(:line_items_attributes) || {}
|
15
|
-
order.create_adjustments_from_api params.delete(:adjustments_attributes) || []
|
16
|
-
order.create_payments_from_api params.delete(:payments_attributes) || []
|
17
|
-
order.complete_from_api params.delete(:completed_at)
|
18
|
-
|
19
|
-
destroy_automatic_taxes_on_import(order, params)
|
20
|
-
|
21
|
-
if user.has_spree_role? "admin"
|
22
|
-
order.update_attributes!(params, without_protection: true)
|
23
|
-
else
|
24
|
-
order.update_attributes!(params)
|
25
|
-
end
|
26
|
-
|
27
|
-
order.reload
|
28
|
-
rescue Exception => e
|
29
|
-
order.destroy if order && order.persisted?
|
30
|
-
raise e.message
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.destroy_automatic_taxes_on_import(order, params)
|
35
|
-
if params.delete :import
|
36
|
-
order.adjustments.tax.destroy_all
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def complete_from_api(completed_at)
|
41
|
-
if completed_at
|
42
|
-
self.completed_at = completed_at
|
43
|
-
self.state = 'complete'
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def create_shipments_from_api(shipments_hash)
|
48
|
-
shipments_hash.each do |s|
|
49
|
-
begin
|
50
|
-
shipment = shipments.build
|
51
|
-
shipment.tracking = s[:tracking]
|
52
|
-
|
53
|
-
inventory_units = s[:inventory_units] || []
|
54
|
-
inventory_units.each do |iu|
|
55
|
-
self.class.ensure_variant_id_from_api(iu)
|
56
|
-
|
57
|
-
unit = shipment.inventory_units.build
|
58
|
-
unit.order = self
|
59
|
-
unit.variant_id = iu[:variant_id]
|
60
|
-
end
|
61
|
-
|
62
|
-
shipment.shipping_method = Spree::ShippingMethod.find_by_name!(s[:shipping_method])
|
63
|
-
shipment.save!
|
64
|
-
|
65
|
-
shipment.adjustment.locked = true
|
66
|
-
shipment.adjustment.amount = s[:cost].to_f
|
67
|
-
shipment.adjustment.save
|
68
|
-
rescue Exception => e
|
69
|
-
raise "Order import shipments: #{e.message} #{s}"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def create_payments_from_api(payments_hash)
|
75
|
-
payments_hash.each do |p|
|
76
|
-
begin
|
77
|
-
payment = payments.build
|
78
|
-
payment.amount = p[:amount].to_f
|
79
|
-
payment.state = p.fetch(:state, 'completed')
|
80
|
-
payment.payment_method = Spree::PaymentMethod.find_by_name!(p[:payment_method])
|
81
|
-
payment.save!
|
82
|
-
rescue Exception => e
|
83
|
-
raise "Order import payments: #{e.message} #{p}"
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def create_line_items_from_api(line_items_hash)
|
89
|
-
line_items_hash.each_key do |k|
|
90
|
-
begin
|
91
|
-
line_item = line_items_hash[k]
|
92
|
-
self.class.ensure_variant_id_from_api(line_item)
|
93
|
-
|
94
|
-
item = self.add_variant(Spree::Variant.find(line_item[:variant_id]), line_item[:quantity].to_i)
|
95
|
-
|
96
|
-
if line_item.key? :price
|
97
|
-
item.price = line_item[:price]
|
98
|
-
item.save!
|
99
|
-
end
|
100
|
-
rescue Exception => e
|
101
|
-
raise "Order import line items: #{e.message} #{line_item}"
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def create_adjustments_from_api(adjustments)
|
107
|
-
adjustments.each do |a|
|
108
|
-
begin
|
109
|
-
adjustment = self.adjustments.build(:amount => a['amount'].to_f,
|
110
|
-
:label => a['label'])
|
111
|
-
adjustment.locked = true
|
112
|
-
adjustment.save!
|
113
|
-
rescue Exception => e
|
114
|
-
raise "Order import adjustments: #{e.message} #{a}"
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def self.ensure_variant_id_from_api(hash)
|
120
|
-
begin
|
121
|
-
unless hash[:variant_id].present?
|
122
|
-
hash[:variant_id] = Spree::Variant.active.find_by_sku!(hash[:sku]).id
|
123
|
-
hash.delete(:sku)
|
124
|
-
end
|
125
|
-
rescue Exception => e
|
126
|
-
raise "Ensure order import variant: #{e.message} #{hash}"
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
def self.ensure_country_id_from_api(address)
|
131
|
-
return if address.nil? or address[:country_id].present? or address[:country].nil?
|
132
|
-
|
133
|
-
begin
|
134
|
-
search = {}
|
135
|
-
if name = address[:country]['name']
|
136
|
-
search[:name] = name
|
137
|
-
elsif iso_name = address[:country]['iso_name']
|
138
|
-
search[:iso_name] = iso_name.upcase
|
139
|
-
elsif iso = address[:country]['iso']
|
140
|
-
search[:iso] = iso.upcase
|
141
|
-
elsif iso3 = address[:country]['iso3']
|
142
|
-
search[:iso3] = iso3.upcase
|
3
|
+
order = create
|
4
|
+
params[:line_items_attributes] ||= []
|
5
|
+
unless params[:line_items_attributes].empty?
|
6
|
+
params[:line_items_attributes].each_key do |k|
|
7
|
+
order.contents.add(Spree::Variant.find(params[:line_items_attributes][k][:variant_id]), params[:line_items_attributes][k][:quantity])
|
143
8
|
end
|
144
|
-
|
145
|
-
address.delete(:country)
|
146
|
-
address[:country_id] = Spree::Country.where(search).first!.id
|
147
|
-
|
148
|
-
rescue Exception => e
|
149
|
-
raise "Ensure order import address country: #{e.message} #{search}"
|
150
9
|
end
|
151
|
-
end
|
152
10
|
|
153
|
-
|
154
|
-
return if address.nil? or address[:state_id].present? or address[:state].nil?
|
155
|
-
|
156
|
-
begin
|
157
|
-
search = {}
|
158
|
-
if name = address[:state]['name']
|
159
|
-
search[:name] = name
|
160
|
-
elsif abbr = address[:state]['abbr']
|
161
|
-
search[:abbr] = abbr.upcase
|
162
|
-
end
|
163
|
-
|
164
|
-
address.delete(:state)
|
165
|
-
search[:country_id] = address[:country_id]
|
166
|
-
|
167
|
-
if state = Spree::State.where(search).first
|
168
|
-
address[:state_id] = state.id
|
169
|
-
else
|
170
|
-
address[:state_name] = search[:name] || search[:abbr]
|
171
|
-
end
|
172
|
-
rescue Exception => e
|
173
|
-
raise "Ensure order import address state: #{e.message} #{search}"
|
174
|
-
end
|
11
|
+
order
|
175
12
|
end
|
176
13
|
end
|