spree_api 1.3.5 → 2.0.0.rc1
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.
- 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
|