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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spree.js.coffee.erb +1 -5
- data/app/helpers/spree/base_helper.rb +22 -11
- data/app/helpers/spree/products_helper.rb +8 -7
- data/app/mailers/spree/base_mailer.rb +1 -0
- data/app/mailers/spree/reimbursement_mailer.rb +10 -0
- data/app/mailers/spree/test_mailer.rb +2 -3
- data/app/models/concerns/spree/adjustment_source.rb +24 -0
- data/app/models/concerns/spree/calculated_adjustments.rb +33 -0
- data/app/models/concerns/spree/named_type.rb +12 -0
- data/app/models/concerns/spree/user_address.rb +30 -0
- data/app/models/concerns/spree/user_payment_source.rb +19 -0
- data/app/models/spree/address.rb +13 -6
- data/app/models/spree/adjustment.rb +5 -5
- data/app/models/spree/app_configuration.rb +8 -4
- data/app/models/spree/asset.rb +1 -1
- data/app/models/spree/base.rb +0 -3
- data/app/models/spree/calculator/flat_rate.rb +1 -5
- data/app/models/spree/calculator/returns/default_refund_amount.rb +36 -0
- data/app/models/spree/classification.rb +1 -1
- data/app/models/spree/credit_card.rb +18 -22
- data/app/models/spree/customer_return.rb +70 -0
- data/app/models/spree/exchange.rb +42 -0
- data/app/models/spree/gateway/bogus.rb +3 -3
- data/app/models/spree/image.rb +1 -1
- data/app/models/spree/inventory_unit.rb +32 -8
- data/app/models/spree/item_adjustments.rb +7 -11
- data/app/models/spree/legacy_user.rb +2 -2
- data/app/models/spree/line_item.rb +25 -12
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +1 -8
- data/app/models/spree/order.rb +163 -145
- data/app/models/spree/order/checkout.rb +35 -23
- data/app/models/spree/order/payments.rb +66 -0
- data/app/models/spree/order_contents.rb +34 -24
- data/app/models/spree/order_populator.rb +6 -4
- data/app/models/spree/order_updater.rb +10 -1
- data/app/models/spree/payment.rb +19 -16
- data/app/models/spree/payment/processing.rb +40 -72
- data/app/models/spree/payment_method.rb +1 -1
- data/app/models/spree/payment_method/check.rb +0 -2
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/preferences/preferable.rb +20 -0
- data/app/models/spree/price.rb +13 -3
- data/app/models/spree/product.rb +24 -29
- data/app/models/spree/product_property.rb +0 -2
- data/app/models/spree/promotion.rb +66 -24
- data/app/models/spree/promotion/actions/create_adjustment.rb +2 -2
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +15 -11
- data/app/models/spree/promotion/actions/create_line_items.rb +2 -12
- data/app/models/spree/promotion/rules/first_order.rb +6 -2
- data/app/models/spree/promotion/rules/item_total.rb +42 -4
- data/app/models/spree/promotion/rules/one_use_per_user.rb +24 -0
- data/app/models/spree/promotion/rules/product.rb +13 -11
- data/app/models/spree/promotion/rules/taxon.rb +61 -0
- data/app/models/spree/promotion/rules/user.rb +1 -1
- data/app/models/spree/promotion/rules/user_logged_in.rb +4 -1
- data/app/models/spree/promotion_category.rb +6 -0
- data/app/models/spree/promotion_handler/cart.rb +14 -18
- data/app/models/spree/promotion_handler/coupon.rb +25 -16
- data/app/models/spree/promotion_rule.rb +13 -0
- data/app/models/spree/property.rb +1 -3
- data/app/models/spree/refund.rb +91 -0
- data/app/models/spree/refund_reason.rb +13 -0
- data/app/models/spree/reimbursement.rb +148 -0
- data/app/models/spree/reimbursement/credit.rb +25 -0
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +56 -0
- data/app/models/spree/reimbursement/reimbursement_type_validator.rb +12 -0
- data/app/models/spree/reimbursement_performer.rb +43 -0
- data/app/models/spree/reimbursement_tax_calculator.rb +38 -0
- data/app/models/spree/reimbursement_type.rb +16 -0
- data/app/models/spree/reimbursement_type/credit.rb +13 -0
- data/app/models/spree/reimbursement_type/exchange.rb +9 -0
- data/app/models/spree/reimbursement_type/original_payment.rb +13 -0
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +50 -0
- data/app/models/spree/return_authorization.rb +52 -68
- data/app/models/spree/return_authorization_reason.rb +7 -0
- data/app/models/spree/return_item.rb +230 -0
- data/app/models/spree/return_item/default_eligibility_validator.rb +27 -0
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +24 -0
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +17 -0
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +16 -0
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +34 -0
- data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +10 -0
- data/app/models/spree/returns_calculator.rb +8 -0
- data/app/models/spree/shipment.rb +209 -154
- data/app/models/spree/shipment_handler.rb +43 -0
- data/app/models/spree/shipping_calculator.rb +1 -1
- data/app/models/spree/shipping_category.rb +2 -2
- data/app/models/spree/shipping_method.rb +1 -1
- data/app/models/spree/shipping_method_category.rb +1 -1
- data/app/models/spree/shipping_rate.rb +4 -0
- data/app/models/spree/stock/adjuster.rb +10 -11
- data/app/models/spree/stock/availability_validator.rb +6 -10
- data/app/models/spree/stock/content_item.rb +48 -0
- data/app/models/spree/stock/coordinator.rb +14 -7
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +21 -0
- data/app/models/spree/stock/package.rb +38 -51
- data/app/models/spree/stock/packer.rb +13 -11
- data/app/models/spree/stock/prioritizer.rb +7 -7
- data/app/models/spree/stock/splitter/base.rb +2 -2
- data/app/models/spree/stock_item.rb +6 -9
- data/app/models/spree/stock_location.rb +17 -25
- data/app/models/spree/stock_movement.rb +1 -8
- data/app/models/spree/stock_transfer.rb +0 -2
- data/app/models/spree/store.rb +1 -1
- data/app/models/spree/tax_category.rb +2 -2
- data/app/models/spree/tax_rate.rb +16 -22
- data/app/models/spree/taxon.rb +1 -1
- data/app/models/spree/variant.rb +45 -23
- data/app/models/spree/zone.rb +17 -17
- data/app/models/spree/zone_member.rb +1 -1
- data/app/views/layouts/spree/base_mailer.html.erb +784 -0
- data/app/views/spree/order_mailer/cancel_email.html.erb +45 -0
- data/app/views/spree/order_mailer/cancel_email.text.erb +2 -2
- data/app/views/spree/order_mailer/confirm_email.html.erb +84 -0
- data/app/views/spree/order_mailer/confirm_email.text.erb +2 -2
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +22 -0
- data/app/views/spree/shared/_base_mailer_footer.html.erb +20 -0
- data/app/views/spree/shared/_base_mailer_header.html.erb +31 -0
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +34 -0
- data/app/views/spree/test_mailer/test_email.html.erb +40 -0
- data/app/views/spree/test_mailer/test_email.text.erb +2 -2
- data/config/initializers/friendly_id.rb +88 -0
- data/config/initializers/premailer_assets.rb +1 -0
- data/config/initializers/user_class_extensions.rb +9 -22
- data/config/locales/en.yml +180 -12
- data/db/default/spree/states.rb +73 -55
- data/db/migrate/20130213191427_create_default_stock.rb +1 -0
- data/db/migrate/20130807024301_upgrade_adjustments.rb +4 -5
- data/db/migrate/20140309033438_create_store_from_preferences.rb +0 -7
- data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +8 -0
- data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +1 -1
- data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +5 -3
- data/db/migrate/20140625214618_create_spree_refunds.rb +12 -0
- data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +12 -0
- data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +5 -0
- data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +10 -0
- data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +55 -0
- data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +7 -0
- data/db/migrate/20140710190048_drop_return_authorization_amount.rb +5 -0
- data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +28 -0
- data/db/migrate/20140713140527_create_spree_refund_reasons.rb +14 -0
- data/db/migrate/20140713142214_rename_return_authorization_reason.rb +5 -0
- data/db/migrate/20140715182625_create_spree_promotion_categories.rb +11 -0
- data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +9 -0
- data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +6 -0
- data/db/migrate/20140717155155_create_default_refund_reason.rb +9 -0
- data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +5 -0
- data/db/migrate/20140718133010_create_spree_customer_returns.rb +9 -0
- data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +6 -0
- data/db/migrate/20140718195325_create_friendly_id_slugs.rb +15 -0
- data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +5 -0
- data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +13 -0
- data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +15 -0
- data/db/migrate/20140725131539_create_spree_reimbursements.rb +21 -0
- data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +5 -0
- data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +7 -0
- data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +5 -0
- data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +20 -0
- data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +5 -0
- data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +10 -0
- data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +9 -0
- data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +10 -0
- data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +7 -0
- data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +5 -0
- data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +5 -0
- data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +6 -0
- data/db/migrate/20141009204607_add_store_id_to_orders.rb +8 -0
- data/lib/generators/spree/install/install_generator.rb +7 -3
- data/lib/spree/core.rb +11 -10
- data/lib/spree/core/controller_helpers/common.rb +3 -10
- data/lib/spree/core/controller_helpers/order.rb +15 -12
- data/lib/spree/core/controller_helpers/strong_parameters.rb +9 -9
- data/lib/spree/core/engine.rb +8 -1
- data/lib/spree/core/importer/order.rb +5 -17
- data/lib/spree/core/search/base.rb +1 -1
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/instrumentation.rb +41 -0
- data/lib/spree/migrations.rb +3 -7
- data/lib/spree/money.rb +2 -2
- data/lib/spree/permitted_attributes.rb +10 -9
- data/lib/spree/testing_support/ability_helpers.rb +25 -25
- data/lib/spree/testing_support/authorization_helpers.rb +3 -5
- data/lib/spree/testing_support/capybara_ext.rb +2 -2
- data/lib/spree/testing_support/factories/calculator_factory.rb +0 -8
- data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
- data/lib/spree/testing_support/factories/customer_return_factory.rb +31 -0
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -0
- data/lib/spree/testing_support/factories/line_item_factory.rb +2 -1
- data/lib/spree/testing_support/factories/order_factory.rb +11 -6
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +6 -0
- data/lib/spree/testing_support/factories/promotion_factory.rb +9 -7
- data/lib/spree/testing_support/factories/refund_factory.rb +14 -0
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +16 -0
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +7 -0
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +9 -3
- data/lib/spree/testing_support/factories/return_item_factory.rb +10 -0
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -0
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +3 -2
- data/lib/spree/testing_support/factories/stock_factory.rb +12 -11
- data/lib/spree/testing_support/flash.rb +2 -2
- data/lib/tasks/email.rake +7 -0
- data/lib/tasks/exchanges.rake +70 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_et.js +23 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_eu.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_hr.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_ka.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_ko.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_my.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_pt_BR.js +26 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_pt_PT.js +26 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_sl.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_sv.js +23 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_uk.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_zh.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_zh_TW.js +26 -0
- metadata +163 -47
- data/app/models/concerns/spree/ransackable_attributes.rb +0 -19
- data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +0 -5
- data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +0 -13
- data/db/migrate/20141105213646_update_classifications_positions.rb +0 -9
- data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +0 -5
- data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -70
- data/lib/spree/core/adjustment_source.rb +0 -26
- data/lib/spree/core/calculated_adjustments.rb +0 -35
- data/lib/spree/core/controller_helpers.rb +0 -20
- data/lib/spree/core/user_address.rb +0 -32
- data/lib/spree/core/user_payment_source.rb +0 -20
- data/lib/spree/localized_number.rb +0 -20
|
@@ -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
|
-
|
|
20
|
-
line_items_count
|
|
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!
|
|
@@ -3,7 +3,7 @@ FactoryGirl.define do
|
|
|
3
3
|
name 'Promo'
|
|
4
4
|
|
|
5
5
|
trait :with_line_item_adjustment do
|
|
6
|
-
|
|
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
|
-
|
|
20
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
40
|
-
|
|
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
|
|
@@ -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
|
-
|
|
6
|
-
|
|
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
|
|
@@ -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: :
|
|
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: :
|
|
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
|
-
|
|
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
|
-
|
|
13
|
+
ignore do
|
|
14
14
|
stock_location { build(:stock_location) }
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
contents { [] }
|
|
16
|
+
variants_contents { {} }
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
initialize_with { new(stock_location,
|
|
19
|
+
initialize_with { new(stock_location, contents) }
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
|
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));
|