spree_core 2.3.13 → 2.4.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.
Files changed (232) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.coffee.erb +1 -5
  3. data/app/helpers/spree/base_helper.rb +22 -11
  4. data/app/helpers/spree/products_helper.rb +8 -7
  5. data/app/mailers/spree/base_mailer.rb +1 -0
  6. data/app/mailers/spree/reimbursement_mailer.rb +10 -0
  7. data/app/mailers/spree/test_mailer.rb +2 -3
  8. data/app/models/concerns/spree/adjustment_source.rb +24 -0
  9. data/app/models/concerns/spree/calculated_adjustments.rb +33 -0
  10. data/app/models/concerns/spree/named_type.rb +12 -0
  11. data/app/models/concerns/spree/user_address.rb +30 -0
  12. data/app/models/concerns/spree/user_payment_source.rb +19 -0
  13. data/app/models/spree/address.rb +13 -6
  14. data/app/models/spree/adjustment.rb +5 -5
  15. data/app/models/spree/app_configuration.rb +8 -4
  16. data/app/models/spree/asset.rb +1 -1
  17. data/app/models/spree/base.rb +0 -3
  18. data/app/models/spree/calculator/flat_rate.rb +1 -5
  19. data/app/models/spree/calculator/returns/default_refund_amount.rb +36 -0
  20. data/app/models/spree/classification.rb +1 -1
  21. data/app/models/spree/credit_card.rb +18 -22
  22. data/app/models/spree/customer_return.rb +70 -0
  23. data/app/models/spree/exchange.rb +42 -0
  24. data/app/models/spree/gateway/bogus.rb +3 -3
  25. data/app/models/spree/image.rb +1 -1
  26. data/app/models/spree/inventory_unit.rb +32 -8
  27. data/app/models/spree/item_adjustments.rb +7 -11
  28. data/app/models/spree/legacy_user.rb +2 -2
  29. data/app/models/spree/line_item.rb +25 -12
  30. data/app/models/spree/option_type.rb +1 -1
  31. data/app/models/spree/option_value.rb +1 -8
  32. data/app/models/spree/order.rb +163 -145
  33. data/app/models/spree/order/checkout.rb +35 -23
  34. data/app/models/spree/order/payments.rb +66 -0
  35. data/app/models/spree/order_contents.rb +34 -24
  36. data/app/models/spree/order_populator.rb +6 -4
  37. data/app/models/spree/order_updater.rb +10 -1
  38. data/app/models/spree/payment.rb +19 -16
  39. data/app/models/spree/payment/processing.rb +40 -72
  40. data/app/models/spree/payment_method.rb +1 -1
  41. data/app/models/spree/payment_method/check.rb +0 -2
  42. data/app/models/spree/preference.rb +1 -1
  43. data/app/models/spree/preferences/preferable.rb +20 -0
  44. data/app/models/spree/price.rb +13 -3
  45. data/app/models/spree/product.rb +24 -29
  46. data/app/models/spree/product_property.rb +0 -2
  47. data/app/models/spree/promotion.rb +66 -24
  48. data/app/models/spree/promotion/actions/create_adjustment.rb +2 -2
  49. data/app/models/spree/promotion/actions/create_item_adjustments.rb +15 -11
  50. data/app/models/spree/promotion/actions/create_line_items.rb +2 -12
  51. data/app/models/spree/promotion/rules/first_order.rb +6 -2
  52. data/app/models/spree/promotion/rules/item_total.rb +42 -4
  53. data/app/models/spree/promotion/rules/one_use_per_user.rb +24 -0
  54. data/app/models/spree/promotion/rules/product.rb +13 -11
  55. data/app/models/spree/promotion/rules/taxon.rb +61 -0
  56. data/app/models/spree/promotion/rules/user.rb +1 -1
  57. data/app/models/spree/promotion/rules/user_logged_in.rb +4 -1
  58. data/app/models/spree/promotion_category.rb +6 -0
  59. data/app/models/spree/promotion_handler/cart.rb +14 -18
  60. data/app/models/spree/promotion_handler/coupon.rb +25 -16
  61. data/app/models/spree/promotion_rule.rb +13 -0
  62. data/app/models/spree/property.rb +1 -3
  63. data/app/models/spree/refund.rb +91 -0
  64. data/app/models/spree/refund_reason.rb +13 -0
  65. data/app/models/spree/reimbursement.rb +148 -0
  66. data/app/models/spree/reimbursement/credit.rb +25 -0
  67. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +56 -0
  68. data/app/models/spree/reimbursement/reimbursement_type_validator.rb +12 -0
  69. data/app/models/spree/reimbursement_performer.rb +43 -0
  70. data/app/models/spree/reimbursement_tax_calculator.rb +38 -0
  71. data/app/models/spree/reimbursement_type.rb +16 -0
  72. data/app/models/spree/reimbursement_type/credit.rb +13 -0
  73. data/app/models/spree/reimbursement_type/exchange.rb +9 -0
  74. data/app/models/spree/reimbursement_type/original_payment.rb +13 -0
  75. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +50 -0
  76. data/app/models/spree/return_authorization.rb +52 -68
  77. data/app/models/spree/return_authorization_reason.rb +7 -0
  78. data/app/models/spree/return_item.rb +230 -0
  79. data/app/models/spree/return_item/default_eligibility_validator.rb +27 -0
  80. data/app/models/spree/return_item/eligibility_validator/base_validator.rb +24 -0
  81. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +17 -0
  82. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +16 -0
  83. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +34 -0
  84. data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +10 -0
  85. data/app/models/spree/returns_calculator.rb +8 -0
  86. data/app/models/spree/shipment.rb +209 -154
  87. data/app/models/spree/shipment_handler.rb +43 -0
  88. data/app/models/spree/shipping_calculator.rb +1 -1
  89. data/app/models/spree/shipping_category.rb +2 -2
  90. data/app/models/spree/shipping_method.rb +1 -1
  91. data/app/models/spree/shipping_method_category.rb +1 -1
  92. data/app/models/spree/shipping_rate.rb +4 -0
  93. data/app/models/spree/stock/adjuster.rb +10 -11
  94. data/app/models/spree/stock/availability_validator.rb +6 -10
  95. data/app/models/spree/stock/content_item.rb +48 -0
  96. data/app/models/spree/stock/coordinator.rb +14 -7
  97. data/app/models/spree/stock/estimator.rb +1 -1
  98. data/app/models/spree/stock/inventory_unit_builder.rb +21 -0
  99. data/app/models/spree/stock/package.rb +38 -51
  100. data/app/models/spree/stock/packer.rb +13 -11
  101. data/app/models/spree/stock/prioritizer.rb +7 -7
  102. data/app/models/spree/stock/splitter/base.rb +2 -2
  103. data/app/models/spree/stock_item.rb +6 -9
  104. data/app/models/spree/stock_location.rb +17 -25
  105. data/app/models/spree/stock_movement.rb +1 -8
  106. data/app/models/spree/stock_transfer.rb +0 -2
  107. data/app/models/spree/store.rb +1 -1
  108. data/app/models/spree/tax_category.rb +2 -2
  109. data/app/models/spree/tax_rate.rb +16 -22
  110. data/app/models/spree/taxon.rb +1 -1
  111. data/app/models/spree/variant.rb +45 -23
  112. data/app/models/spree/zone.rb +17 -17
  113. data/app/models/spree/zone_member.rb +1 -1
  114. data/app/views/layouts/spree/base_mailer.html.erb +784 -0
  115. data/app/views/spree/order_mailer/cancel_email.html.erb +45 -0
  116. data/app/views/spree/order_mailer/cancel_email.text.erb +2 -2
  117. data/app/views/spree/order_mailer/confirm_email.html.erb +84 -0
  118. data/app/views/spree/order_mailer/confirm_email.text.erb +2 -2
  119. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +22 -0
  120. data/app/views/spree/shared/_base_mailer_footer.html.erb +20 -0
  121. data/app/views/spree/shared/_base_mailer_header.html.erb +31 -0
  122. data/app/views/spree/shipment_mailer/shipped_email.html.erb +34 -0
  123. data/app/views/spree/test_mailer/test_email.html.erb +40 -0
  124. data/app/views/spree/test_mailer/test_email.text.erb +2 -2
  125. data/config/initializers/friendly_id.rb +88 -0
  126. data/config/initializers/premailer_assets.rb +1 -0
  127. data/config/initializers/user_class_extensions.rb +9 -22
  128. data/config/locales/en.yml +180 -12
  129. data/db/default/spree/states.rb +73 -55
  130. data/db/migrate/20130213191427_create_default_stock.rb +1 -0
  131. data/db/migrate/20130807024301_upgrade_adjustments.rb +4 -5
  132. data/db/migrate/20140309033438_create_store_from_preferences.rb +0 -7
  133. data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +8 -0
  134. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +1 -1
  135. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +5 -3
  136. data/db/migrate/20140625214618_create_spree_refunds.rb +12 -0
  137. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +12 -0
  138. data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +5 -0
  139. data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +10 -0
  140. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +55 -0
  141. data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +7 -0
  142. data/db/migrate/20140710190048_drop_return_authorization_amount.rb +5 -0
  143. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +28 -0
  144. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +14 -0
  145. data/db/migrate/20140713142214_rename_return_authorization_reason.rb +5 -0
  146. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +11 -0
  147. data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +9 -0
  148. data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +6 -0
  149. data/db/migrate/20140717155155_create_default_refund_reason.rb +9 -0
  150. data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +5 -0
  151. data/db/migrate/20140718133010_create_spree_customer_returns.rb +9 -0
  152. data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +6 -0
  153. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +15 -0
  154. data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +5 -0
  155. data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +13 -0
  156. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +15 -0
  157. data/db/migrate/20140725131539_create_spree_reimbursements.rb +21 -0
  158. data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +5 -0
  159. data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +7 -0
  160. data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +5 -0
  161. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +20 -0
  162. data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +5 -0
  163. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +10 -0
  164. data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +9 -0
  165. data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +10 -0
  166. data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +7 -0
  167. data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +5 -0
  168. data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +5 -0
  169. data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +6 -0
  170. data/db/migrate/20141009204607_add_store_id_to_orders.rb +8 -0
  171. data/lib/generators/spree/install/install_generator.rb +7 -3
  172. data/lib/spree/core.rb +11 -10
  173. data/lib/spree/core/controller_helpers/common.rb +3 -10
  174. data/lib/spree/core/controller_helpers/order.rb +15 -12
  175. data/lib/spree/core/controller_helpers/strong_parameters.rb +9 -9
  176. data/lib/spree/core/engine.rb +8 -1
  177. data/lib/spree/core/importer/order.rb +5 -17
  178. data/lib/spree/core/search/base.rb +1 -1
  179. data/lib/spree/core/validators/email.rb +1 -1
  180. data/lib/spree/core/version.rb +1 -1
  181. data/lib/spree/instrumentation.rb +41 -0
  182. data/lib/spree/migrations.rb +3 -7
  183. data/lib/spree/money.rb +2 -2
  184. data/lib/spree/permitted_attributes.rb +10 -9
  185. data/lib/spree/testing_support/ability_helpers.rb +25 -25
  186. data/lib/spree/testing_support/authorization_helpers.rb +3 -5
  187. data/lib/spree/testing_support/capybara_ext.rb +2 -2
  188. data/lib/spree/testing_support/factories/calculator_factory.rb +0 -8
  189. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
  190. data/lib/spree/testing_support/factories/customer_return_factory.rb +31 -0
  191. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -0
  192. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -1
  193. data/lib/spree/testing_support/factories/order_factory.rb +11 -6
  194. data/lib/spree/testing_support/factories/promotion_category_factory.rb +6 -0
  195. data/lib/spree/testing_support/factories/promotion_factory.rb +9 -7
  196. data/lib/spree/testing_support/factories/refund_factory.rb +14 -0
  197. data/lib/spree/testing_support/factories/reimbursement_factory.rb +16 -0
  198. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +7 -0
  199. data/lib/spree/testing_support/factories/return_authorization_factory.rb +9 -3
  200. data/lib/spree/testing_support/factories/return_item_factory.rb +10 -0
  201. data/lib/spree/testing_support/factories/shipment_factory.rb +1 -0
  202. data/lib/spree/testing_support/factories/shipping_method_factory.rb +3 -2
  203. data/lib/spree/testing_support/factories/stock_factory.rb +12 -11
  204. data/lib/spree/testing_support/flash.rb +2 -2
  205. data/lib/tasks/email.rake +7 -0
  206. data/lib/tasks/exchanges.rake +70 -0
  207. data/vendor/assets/javascripts/jquery.validate/localization/messages_et.js +23 -0
  208. data/vendor/assets/javascripts/jquery.validate/localization/messages_eu.js +25 -0
  209. data/vendor/assets/javascripts/jquery.validate/localization/messages_hr.js +25 -0
  210. data/vendor/assets/javascripts/jquery.validate/localization/messages_ka.js +25 -0
  211. data/vendor/assets/javascripts/jquery.validate/localization/messages_ko.js +25 -0
  212. data/vendor/assets/javascripts/jquery.validate/localization/messages_my.js +25 -0
  213. data/vendor/assets/javascripts/jquery.validate/localization/messages_pt_BR.js +26 -0
  214. data/vendor/assets/javascripts/jquery.validate/localization/messages_pt_PT.js +26 -0
  215. data/vendor/assets/javascripts/jquery.validate/localization/messages_sl.js +25 -0
  216. data/vendor/assets/javascripts/jquery.validate/localization/messages_sv.js +23 -0
  217. data/vendor/assets/javascripts/jquery.validate/localization/messages_uk.js +25 -0
  218. data/vendor/assets/javascripts/jquery.validate/localization/messages_zh.js +25 -0
  219. data/vendor/assets/javascripts/jquery.validate/localization/messages_zh_TW.js +26 -0
  220. metadata +163 -47
  221. data/app/models/concerns/spree/ransackable_attributes.rb +0 -19
  222. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +0 -5
  223. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +0 -13
  224. data/db/migrate/20141105213646_update_classifications_positions.rb +0 -9
  225. data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +0 -5
  226. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -70
  227. data/lib/spree/core/adjustment_source.rb +0 -26
  228. data/lib/spree/core/calculated_adjustments.rb +0 -35
  229. data/lib/spree/core/controller_helpers.rb +0 -20
  230. data/lib/spree/core/user_address.rb +0 -32
  231. data/lib/spree/core/user_payment_source.rb +0 -20
  232. data/lib/spree/localized_number.rb +0 -20
@@ -2,8 +2,9 @@ FactoryGirl.define do
2
2
  factory :line_item, class: Spree::LineItem do
3
3
  quantity 1
4
4
  price { BigDecimal.new('10.00') }
5
+ pre_tax_amount { price }
5
6
  order
6
- transient do
7
+ ignore do
7
8
  association :product
8
9
  end
9
10
  variant{ product.master }
@@ -5,9 +5,13 @@ FactoryGirl.define do
5
5
  completed_at nil
6
6
  email { user.email }
7
7
 
8
+ ignore do
9
+ line_items_price BigDecimal.new(10)
10
+ end
11
+
8
12
  factory :order_with_totals do
9
- after(:create) do |order|
10
- create(:line_item, order: order)
13
+ after(:create) do |order, evaluator|
14
+ create(:line_item, order: order, price: evaluator.line_items_price)
11
15
  order.line_items.reload # to ensure order.line_items is accessible after
12
16
  end
13
17
  end
@@ -16,15 +20,16 @@ FactoryGirl.define do
16
20
  bill_address
17
21
  ship_address
18
22
 
19
- transient do
20
- line_items_count 5
23
+ ignore do
24
+ line_items_count 1
25
+ shipment_cost 100
21
26
  end
22
27
 
23
28
  after(:create) do |order, evaluator|
24
- create_list(:line_item, evaluator.line_items_count, order: order)
29
+ create_list(:line_item, evaluator.line_items_count, order: order, price: evaluator.line_items_price)
25
30
  order.line_items.reload
26
31
 
27
- create(:shipment, order: order)
32
+ create(:shipment, order: order, cost: evaluator.shipment_cost)
28
33
  order.shipments.reload
29
34
 
30
35
  order.update!
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ factory :promotion_category, class: Spree::PromotionCategory do
3
+ name 'Promotion Category'
4
+ end
5
+ end
6
+
@@ -3,7 +3,7 @@ FactoryGirl.define do
3
3
  name 'Promo'
4
4
 
5
5
  trait :with_line_item_adjustment do
6
- transient do
6
+ ignore do
7
7
  adjustment_rate 10
8
8
  end
9
9
 
@@ -16,13 +16,13 @@ FactoryGirl.define do
16
16
  factory :promotion_with_item_adjustment, traits: [:with_line_item_adjustment]
17
17
 
18
18
  trait :with_order_adjustment do
19
- transient do
20
- order_adjustment_amount 10
19
+ ignore do
20
+ weighted_order_adjustment_amount 10
21
21
  end
22
22
 
23
23
  after(:create) do |promotion, evaluator|
24
24
  calculator = Spree::Calculator::FlatRate.new
25
- calculator.preferred_amount = evaluator.order_adjustment_amount
25
+ calculator.preferred_amount = evaluator.weighted_order_adjustment_amount
26
26
  action = Spree::Promotion::Actions::CreateAdjustment.create!(:calculator => calculator)
27
27
  promotion.actions << action
28
28
  promotion.save!
@@ -30,14 +30,16 @@ FactoryGirl.define do
30
30
  end
31
31
 
32
32
  trait :with_item_total_rule do
33
- transient do
33
+ ignore do
34
34
  item_total_threshold_amount 10
35
35
  end
36
36
 
37
37
  after(:create) do |promotion, evaluator|
38
38
  rule = Spree::Promotion::Rules::ItemTotal.create!(
39
- preferred_operator: 'gte',
40
- preferred_amount: evaluator.item_total_threshold_amount
39
+ preferred_operator_min: 'gte',
40
+ preferred_operator_max: 'lte',
41
+ preferred_amount_min: evaluator.item_total_threshold_amount,
42
+ preferred_amount_max: evaluator.item_total_threshold_amount + 100
41
43
  )
42
44
  promotion.rules << rule
43
45
  promotion.save!
@@ -0,0 +1,14 @@
1
+ FactoryGirl.define do
2
+ sequence(:refund_transaction_id) { |n| "fake-refund-transaction-#{n}"}
3
+
4
+ factory :refund, class: Spree::Refund do
5
+ amount 100.00
6
+ transaction_id { generate(:refund_transaction_id) }
7
+ association(:payment, state: 'completed')
8
+ association(:reason, factory: :refund_reason)
9
+ end
10
+
11
+ factory :refund_reason, class: Spree::RefundReason do
12
+ sequence(:name) { |n| "Refund for return ##{n}" }
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ FactoryGirl.define do
2
+ factory :reimbursement, class: Spree::Reimbursement do
3
+ ignore do
4
+ return_items_count 1
5
+ end
6
+
7
+ customer_return { create(:customer_return_with_accepted_items, line_items_count: return_items_count) }
8
+
9
+ before(:create) do |reimbursement, evaluator|
10
+ reimbursement.order ||= reimbursement.customer_return.order
11
+ if reimbursement.return_items.empty?
12
+ reimbursement.return_items = reimbursement.customer_return.return_items
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ factory :reimbursement_type, class: Spree::ReimbursementType do
3
+ sequence(:name) { |n| "Reimbursement Type #{n}" }
4
+ active true
5
+ mutable true
6
+ end
7
+ end
@@ -1,12 +1,18 @@
1
1
  FactoryGirl.define do
2
2
  factory :return_authorization, class: Spree::ReturnAuthorization do
3
- amount 100.00
4
3
  association(:order, factory: :shipped_order)
5
- reason 'no particular reason'
6
- state 'received'
4
+ association(:stock_location, factory: :stock_location)
5
+ association(:reason, factory: :return_authorization_reason)
6
+ memo 'Items were broken'
7
7
  end
8
8
 
9
9
  factory :new_return_authorization, class: Spree::ReturnAuthorization do
10
10
  association(:order, factory: :shipped_order)
11
+ association(:stock_location, factory: :stock_location)
12
+ association(:reason, factory: :return_authorization_reason)
13
+ end
14
+
15
+ factory :return_authorization_reason, class: Spree::ReturnAuthorizationReason do
16
+ sequence(:name) { |n| "Defect ##{n}" }
11
17
  end
12
18
  end
@@ -0,0 +1,10 @@
1
+ FactoryGirl.define do
2
+ factory :return_item, class: Spree::ReturnItem do
3
+ association(:inventory_unit, factory: :inventory_unit, state: :shipped)
4
+ association(:return_authorization, factory: :return_authorization)
5
+
6
+ factory :exchange_return_item do
7
+ association(:exchange_variant, factory: :variant)
8
+ end
9
+ end
10
+ end
@@ -12,6 +12,7 @@ FactoryGirl.define do
12
12
  shipment.order.line_items.each do |line_item|
13
13
  line_item.quantity.times do
14
14
  shipment.inventory_units.create(
15
+ order_id: shipment.order_id,
15
16
  variant_id: line_item.variant_id,
16
17
  line_item_id: line_item.id
17
18
  )
@@ -2,6 +2,7 @@ FactoryGirl.define do
2
2
  factory :base_shipping_method, class: Spree::ShippingMethod do
3
3
  zones { |a| [Spree::Zone.global] }
4
4
  name 'UPS Ground'
5
+ code 'UPS_GROUND'
5
6
 
6
7
  before(:create) do |shipping_method, evaluator|
7
8
  if shipping_method.shipping_categories.empty?
@@ -10,11 +11,11 @@ FactoryGirl.define do
10
11
  end
11
12
 
12
13
  factory :shipping_method, class: Spree::ShippingMethod do
13
- association(:calculator, factory: :shipping_calculator, strategy: :build)
14
+ association(:calculator, factory: :calculator, strategy: :build)
14
15
  end
15
16
 
16
17
  factory :free_shipping_method, class: Spree::ShippingMethod do
17
- association(:calculator, factory: :shipping_no_amount_calculator, strategy: :build)
18
+ association(:calculator, factory: :no_amount_calculator, strategy: :build)
18
19
  end
19
20
  end
20
21
  end
@@ -1,7 +1,7 @@
1
1
  FactoryGirl.define do
2
2
  # must use build()
3
3
  factory :stock_packer, class: Spree::Stock::Packer do
4
- transient do
4
+ ignore do
5
5
  stock_location { build(:stock_location) }
6
6
  contents []
7
7
  end
@@ -10,21 +10,22 @@ FactoryGirl.define do
10
10
  end
11
11
 
12
12
  factory :stock_package, class: Spree::Stock::Package do
13
- transient do
13
+ ignore do
14
14
  stock_location { build(:stock_location) }
15
- order { create(:order_with_line_items, line_items_count: 2) }
16
- contents []
15
+ contents { [] }
16
+ variants_contents { {} }
17
17
  end
18
18
 
19
- initialize_with { new(stock_location, order, contents) }
19
+ initialize_with { new(stock_location, contents) }
20
20
 
21
- factory :stock_package_fulfilled do
22
- after(:build) do |package, evaluator|
23
- evaluator.order.line_items.reload
24
- evaluator.order.line_items.each do |line_item|
25
- package.add line_item, line_item.quantity, :on_hand
26
- end
21
+ after(:build) do |package, evaluator|
22
+ evaluator.variants_contents.each do |variant, count|
23
+ package.add_multiple build_list(:inventory_unit, count, variant: variant)
27
24
  end
28
25
  end
26
+
27
+ factory :stock_package_fulfilled do
28
+ ignore { variants_contents { { build(:variant) => 2 } } }
29
+ end
29
30
  end
30
31
  end
@@ -5,12 +5,12 @@ module Spree
5
5
  flash = convert_flash(flash)
6
6
 
7
7
  within("[class='flash success']") do
8
- expect(page).to have_content(flash)
8
+ page.should have_content(flash)
9
9
  end
10
10
  end
11
11
 
12
12
  def assert_successful_update_message(resource)
13
- flash = Spree.t(:successfully_updated, resource: Spree.t(resource))
13
+ flash = Spree.t(:successfully_updated, :resource => Spree.t(resource))
14
14
  assert_flash_success(flash)
15
15
  end
16
16
 
@@ -0,0 +1,7 @@
1
+ namespace :email do
2
+ desc 'Sends test email to specified address - Example: EMAIL=spree@example.com bundle exec rake test:email'
3
+ task :test => :environment do
4
+ raise ArgumentError, "Must pass EMAIL environment variable. Example: EMAIL=spree@example.com bundle exec rake test:email" unless ENV['EMAIL'].present?
5
+ Spree::TestMailer.test_email(ENV['EMAIL']).deliver!
6
+ end
7
+ end
@@ -0,0 +1,70 @@
1
+ namespace :exchanges do
2
+ desc %q{Takes unreturned exchanged items and creates a new order to charge
3
+ the customer for not returning them}
4
+ task charge_unreturned_items: :environment do
5
+
6
+ unreturned_return_items = Spree::ReturnItem.awaiting_return.exchange_processed.joins(:exchange_inventory_unit).where([
7
+ "spree_inventory_units.created_at < :days_ago",
8
+ days_ago: Spree::Config[:expedited_exchanges_days_window].days.ago
9
+ ]).to_a
10
+
11
+ # Determine that a return item has already been deemed unreturned and therefore charged
12
+ # by the fact that its exchange inventory unit has popped off to a different order
13
+ unreturned_return_items.select! { |ri| ri.inventory_unit.order_id == ri.exchange_inventory_unit.order_id }
14
+
15
+ failed_orders = []
16
+
17
+ unreturned_return_items.group_by(&:exchange_shipment).each do |shipment, return_items|
18
+ begin
19
+ inventory_units = return_items.map(&:exchange_inventory_unit)
20
+
21
+ original_order = shipment.order
22
+ order_attributes = {
23
+ bill_address: original_order.bill_address,
24
+ ship_address: original_order.ship_address,
25
+ email: original_order.email
26
+ }
27
+ order_attributes[:store_id] = original_order.store_id
28
+ order = Spree::Order.create!(order_attributes)
29
+
30
+ order.associate_user!(original_order.user) if original_order.user
31
+
32
+ return_items.group_by(&:exchange_variant).map do |variant, variant_return_items|
33
+ variant_inventory_units = variant_return_items.map(&:exchange_inventory_unit)
34
+ line_item = Spree::LineItem.create!(variant: variant, quantity: variant_return_items.count, order: order)
35
+ variant_inventory_units.each { |i| i.update_attributes!(line_item_id: line_item.id, order_id: order.id) }
36
+ end
37
+
38
+ order.reload.update!
39
+ while order.state != order.checkout_steps[-2] && order.next; end
40
+
41
+ unless order.payments.present?
42
+ card_to_reuse = original_order.valid_credit_cards.first
43
+ card_to_reuse = original_order.user.credit_cards.default.first if !card_to_reuse && original_order.user
44
+ Spree::Payment.create!(order: order,
45
+ payment_method_id: card_to_reuse.try(:payment_method_id),
46
+ source: card_to_reuse,
47
+ amount: order.total)
48
+ end
49
+
50
+ # the order builds a shipment on its own on transition to delivery, but we want
51
+ # the original exchange shipment, not the built one
52
+ order.shipments.destroy_all
53
+ shipment.update_attributes!(order_id: order.id)
54
+ order.update_attributes!(state: "confirm")
55
+
56
+ order.reload.next!
57
+ order.update!
58
+ order.finalize!
59
+
60
+ failed_orders << order unless order.completed? && order.valid?
61
+ rescue
62
+ failed_orders << order
63
+ end
64
+ end
65
+ failure_message = failed_orders.map { |o| "#{o.number} - #{o.errors.full_messages}" }.join(", ")
66
+ raise UnableToChargeForUnreturnedItems.new(failure_message) if failed_orders.present?
67
+ end
68
+ end
69
+
70
+ class UnableToChargeForUnreturnedItems < StandardError; end
@@ -0,0 +1,23 @@
1
+ /*
2
+ * Translated default messages for the jQuery validation plugin.
3
+ * Locale: ET (Estonian; eesti, eesti keel)
4
+ */
5
+ (function ($) {
6
+ $.extend($.validator.messages, {
7
+ required: "See väli peab olema täidetud.",
8
+ maxlength: $.validator.format("Palun sisestage vähem kui {0} tähemärki."),
9
+ minlength: $.validator.format("Palun sisestage vähemalt {0} tähemärki."),
10
+ rangelength: $.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1} tähemärki."),
11
+ email: "Palun sisestage korrektne e-maili aadress.",
12
+ url: "Palun sisestage korrektne URL.",
13
+ date: "Palun sisestage korrektne kuupäev.",
14
+ dateISO: "Palun sisestage korrektne kuupäev (YYYY-MM-DD).",
15
+ number: "Palun sisestage korrektne number.",
16
+ digits: "Palun sisestage ainult numbreid.",
17
+ equalTo: "Palun sisestage sama väärtus uuesti.",
18
+ range: $.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1}."),
19
+ max: $.validator.format("Palun sisestage väärtus, mis on väiksem või võrdne arvuga {0}."),
20
+ min: $.validator.format("Palun sisestage väärtus, mis on suurem või võrdne arvuga {0}."),
21
+ creditcard: "Palun sisestage korrektne krediitkaardi number."
22
+ });
23
+ }(jQuery));
@@ -0,0 +1,25 @@
1
+ /*
2
+ * Translated default messages for the jQuery validation plugin.
3
+ * Locale: EU (Basque; euskara, euskera)
4
+ */
5
+ (function ($) {
6
+ $.extend($.validator.messages, {
7
+ required: "Eremu hau beharrezkoa da.",
8
+ remote: "Mesedez, bete eremu hau.",
9
+ email: "Mesedez, idatzi baliozko posta helbide bat.",
10
+ url: "Mesedez, idatzi baliozko URL bat.",
11
+ date: "Mesedez, idatzi baliozko data bat.",
12
+ dateISO: "Mesedez, idatzi baliozko (ISO) data bat.",
13
+ number: "Mesedez, idatzi baliozko zenbaki oso bat.",
14
+ digits: "Mesedez, idatzi digituak soilik.",
15
+ creditcard: "Mesedez, idatzi baliozko txartel zenbaki bat.",
16
+ equalTo: "Mesedez, idatzi berdina berriro ere.",
17
+ accept: "Mesedez, idatzi onartutako luzapena duen balio bat.",
18
+ maxlength: $.validator.format("Mesedez, ez idatzi {0} karaktere baino gehiago."),
19
+ minlength: $.validator.format("Mesedez, ez idatzi {0} karaktere baino gutxiago."),
20
+ rangelength: $.validator.format("Mesedez, idatzi {0} eta {1} karaktere arteko balio bat."),
21
+ range: $.validator.format("Mesedez, idatzi {0} eta {1} arteko balio bat."),
22
+ max: $.validator.format("Mesedez, idatzi {0} edo txikiagoa den balio bat."),
23
+ min: $.validator.format("Mesedez, idatzi {0} edo handiagoa den balio bat.")
24
+ });
25
+ }(jQuery));
@@ -0,0 +1,25 @@
1
+ /*
2
+ * Translated default messages for the jQuery validation plugin.
3
+ * Locale: HR (Croatia; hrvatski jezik)
4
+ */
5
+ (function ($) {
6
+ $.extend($.validator.messages, {
7
+ required: "Ovo polje je obavezno.",
8
+ remote: "Ovo polje treba popraviti.",
9
+ email: "Unesite ispravnu e-mail adresu.",
10
+ url: "Unesite ispravan URL.",
11
+ date: "Unesite ispravan datum.",
12
+ dateISO: "Unesite ispravan datum (ISO).",
13
+ number: "Unesite ispravan broj.",
14
+ digits: "Unesite samo brojeve.",
15
+ creditcard: "Unesite ispravan broj kreditne kartice.",
16
+ equalTo: "Unesite ponovo istu vrijednost.",
17
+ accept: "Unesite vrijednost sa ispravnom ekstenzijom.",
18
+ maxlength: $.validator.format("Maksimalni broj znakova je {0} ."),
19
+ minlength: $.validator.format("Minimalni broj znakova je {0} ."),
20
+ rangelength: $.validator.format("Unesite vrijednost između {0} i {1} znakova."),
21
+ range: $.validator.format("Unesite vrijednost između {0} i {1}."),
22
+ max: $.validator.format("Unesite vrijednost manju ili jednaku {0}."),
23
+ min: $.validator.format("Unesite vrijednost veću ili jednaku {0}.")
24
+ });
25
+ }(jQuery));
@@ -0,0 +1,25 @@
1
+ /*
2
+ * Translated default messages for the jQuery validation plugin.
3
+ * Locale: KA (Georgian; ქართული)
4
+ */
5
+ (function ($) {
6
+ $.extend($.validator.messages, {
7
+ required: "ამ ველის შევსება აუცილებელია.",
8
+ remote: "გთხოვთ მიუთითოთ სწორი მნიშვნელობა.",
9
+ email: "გთხოვთ მიუთითოთ ელ-ფოსტის კორექტული მისამართი.",
10
+ url: "გთხოვთ მიუთითოთ კორექტული URL.",
11
+ date: "გთხოვთ მიუთითოთ კორექტული თარიღი.",
12
+ dateISO: "გთხოვთ მიუთითოთ კორექტული თარიღი ISO ფორმატში.",
13
+ number: "გთხოვთ მიუთითოთ ციფრი.",
14
+ digits: "გთხოვთ მიუთითოთ მხოლოდ ციფრები.",
15
+ creditcard: "გთხოვთ მიუთითოთ საკრედიტო ბარათის კორექტული ნომერი.",
16
+ equalTo: "გთხოვთ მიუთითოთ ასეთივე მნიშვნელობა კიდევ ერთხელ.",
17
+ accept: "გთხოვთ აირჩიოთ ფაილი კორექტული გაფართოებით.",
18
+ maxlength: $.validator.format("დასაშვებია არაუმეტეს {0} სიმბოლო."),
19
+ minlength: $.validator.format("აუცილებელია შეიყვანოთ მინიმუმ {0} სიმბოლო."),
20
+ rangelength: $.validator.format("ტექსტში სიმბოლოების რაოდენობა უნდა იყოს {0}-დან {1}-მდე."),
21
+ range: $.validator.format("გთხოვთ შეიყვანოთ ციფრი {0}-დან {1}-მდე."),
22
+ max: $.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც ნაკლებია ან უდრის {0}-ს."),
23
+ min: $.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც მეტია ან უდრის {0}-ს.")
24
+ });
25
+ }(jQuery));