solidus_core 1.1.0.pre1 → 1.1.0.pre2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/app/mailers/spree/carton_mailer.rb +12 -1
  3. data/app/models/concerns/spree/user_address_book.rb +17 -8
  4. data/app/models/concerns/spree/user_methods.rb +3 -6
  5. data/app/models/spree/ability.rb +1 -1
  6. data/app/models/spree/adjustment.rb +1 -1
  7. data/app/models/spree/app_configuration.rb +11 -0
  8. data/app/models/spree/order.rb +6 -6
  9. data/app/models/spree/order/checkout.rb +9 -0
  10. data/app/models/spree/order_capturing.rb +4 -1
  11. data/app/models/spree/order_contents.rb +5 -0
  12. data/app/models/spree/order_shipping.rb +1 -1
  13. data/app/models/spree/payment.rb +5 -2
  14. data/app/models/spree/payment/processing.rb +1 -1
  15. data/app/models/spree/product.rb +1 -1
  16. data/app/models/spree/promotion.rb +8 -1
  17. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +36 -0
  18. data/app/models/spree/promotion/rules/product.rb +2 -1
  19. data/app/models/spree/promotion_handler/cart.rb +1 -14
  20. data/app/models/spree/prototype.rb +3 -1
  21. data/app/models/spree/prototype_taxon.rb +6 -0
  22. data/app/models/spree/taxon.rb +2 -1
  23. data/app/models/spree/tracker.rb +1 -1
  24. data/app/models/spree/transfer_item.rb +2 -6
  25. data/config/locales/en.yml +10 -1
  26. data/db/default/spree/zones.rb +2 -2
  27. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +13 -11
  28. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +6 -0
  29. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +80 -0
  30. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +16 -0
  31. data/db/migrate/20150826002555_convert_habtm_to_hmt_for_taxon_prototypes.rb +15 -0
  32. data/db/migrate/20151010003252_add_foreign_keys_for_taxons_prototypes.rb +6 -0
  33. data/db/migrate/20151013222921_remove_token_permissions_table.rb +16 -0
  34. data/db/migrate/20151014213349_rename_identifier_to_number_for_payment.rb +7 -0
  35. data/db/migrate/20151015203732_add_foreign_keys_for_product_promotion_rules.rb +9 -0
  36. data/db/migrate/20151021113730_add_sale_to_spree_promotions.rb +6 -0
  37. data/db/migrate/20151021163309_convert_sale_promotions.rb +28 -0
  38. data/lib/spree/core.rb +2 -0
  39. data/lib/spree/core/controller_helpers/strong_parameters.rb +7 -0
  40. data/lib/spree/core/engine.rb +2 -1
  41. data/lib/spree/deprecation.rb +3 -0
  42. data/lib/spree/mailer_previews/carton_preview.rb +1 -1
  43. data/lib/spree/permission_sets.rb +23 -0
  44. data/{app/models → lib}/spree/permission_sets/base.rb +0 -0
  45. data/{app/models → lib}/spree/permission_sets/configuration_display.rb +0 -0
  46. data/{app/models → lib}/spree/permission_sets/configuration_management.rb +0 -0
  47. data/{app/models → lib}/spree/permission_sets/dashboard_display.rb +0 -0
  48. data/{app/models → lib}/spree/permission_sets/default_customer.rb +2 -1
  49. data/{app/models → lib}/spree/permission_sets/order_display.rb +0 -0
  50. data/{app/models → lib}/spree/permission_sets/order_management.rb +0 -0
  51. data/{app/models → lib}/spree/permission_sets/product_display.rb +0 -0
  52. data/{app/models → lib}/spree/permission_sets/product_management.rb +0 -0
  53. data/{app/models → lib}/spree/permission_sets/promotion_display.rb +0 -0
  54. data/{app/models → lib}/spree/permission_sets/promotion_management.rb +0 -0
  55. data/{app/models → lib}/spree/permission_sets/report_display.rb +0 -0
  56. data/{app/models → lib}/spree/permission_sets/restricted_stock_display.rb +0 -0
  57. data/{app/models → lib}/spree/permission_sets/restricted_stock_management.rb +0 -0
  58. data/{app/models → lib}/spree/permission_sets/restricted_stock_transfer_display.rb +0 -0
  59. data/{app/models → lib}/spree/permission_sets/restricted_stock_transfer_management.rb +22 -12
  60. data/{app/models → lib}/spree/permission_sets/stock_display.rb +0 -0
  61. data/{app/models → lib}/spree/permission_sets/stock_management.rb +0 -0
  62. data/{app/models → lib}/spree/permission_sets/stock_transfer_display.rb +0 -0
  63. data/{app/models → lib}/spree/permission_sets/stock_transfer_management.rb +0 -0
  64. data/{app/models → lib}/spree/permission_sets/super_user.rb +0 -0
  65. data/{app/models → lib}/spree/permission_sets/user_display.rb +0 -0
  66. data/lib/spree/permission_sets/user_management.rb +21 -0
  67. data/lib/spree/permitted_attributes.rb +7 -4
  68. data/lib/spree/testing_support/factories/order_factory.rb +6 -2
  69. data/lib/spree/testing_support/factories/tracker_factory.rb +0 -1
  70. data/lib/spree/testing_support/order_walkthrough.rb +22 -19
  71. metadata +41 -27
  72. data/app/models/spree/permission_sets/user_management.rb +0 -12
@@ -1,5 +1,5 @@
1
- eu_vat = Spree::Zone.create!(name: "EU_VAT", description: "Countries that make up the EU VAT zone.")
2
- north_america = Spree::Zone.create!(name: "North America", description: "USA + Canada")
1
+ eu_vat = Spree::Zone.find_or_create_by!(name: "EU_VAT", description: "Countries that make up the EU VAT zone.")
2
+ north_america = Spree::Zone.find_or_create_by!(name: "North America", description: "USA + Canada")
3
3
 
4
4
  ["Poland", "Finland", "Portugal", "Romania", "Germany", "France",
5
5
  "Slovakia", "Hungary", "Slovenia", "Ireland", "Austria", "Spain",
@@ -1,4 +1,8 @@
1
1
  class CreateSpreeReturnAuthorizationReasons < ActiveRecord::Migration
2
+ class ReturnAuthorizationReason < ActiveRecord::Base
3
+ self.table_name = 'spree_return_authorization_reasons'
4
+ end
5
+
2
6
  def change
3
7
  create_table :spree_return_authorization_reasons do |t|
4
8
  t.string :name
@@ -10,17 +14,15 @@ class CreateSpreeReturnAuthorizationReasons < ActiveRecord::Migration
10
14
 
11
15
  reversible do |direction|
12
16
  direction.up do
13
- if defined?(Spree::ReturnAuthorizationReason)
14
- Spree::ReturnAuthorizationReason.create!(name: 'Better price available')
15
- Spree::ReturnAuthorizationReason.create!(name: 'Missed estimated delivery date')
16
- Spree::ReturnAuthorizationReason.create!(name: 'Missing parts or accessories')
17
- Spree::ReturnAuthorizationReason.create!(name: 'Damaged/Defective')
18
- Spree::ReturnAuthorizationReason.create!(name: 'Different from what was ordered')
19
- Spree::ReturnAuthorizationReason.create!(name: 'Different from description')
20
- Spree::ReturnAuthorizationReason.create!(name: 'No longer needed/wanted')
21
- Spree::ReturnAuthorizationReason.create!(name: 'Accidental order')
22
- Spree::ReturnAuthorizationReason.create!(name: 'Unauthorized purchase')
23
- end
17
+ ReturnAuthorizationReason.create!(name: 'Better price available')
18
+ ReturnAuthorizationReason.create!(name: 'Missed estimated delivery date')
19
+ ReturnAuthorizationReason.create!(name: 'Missing parts or accessories')
20
+ ReturnAuthorizationReason.create!(name: 'Damaged/Defective')
21
+ ReturnAuthorizationReason.create!(name: 'Different from what was ordered')
22
+ ReturnAuthorizationReason.create!(name: 'Different from description')
23
+ ReturnAuthorizationReason.create!(name: 'No longer needed/wanted')
24
+ ReturnAuthorizationReason.create!(name: 'Accidental order')
25
+ ReturnAuthorizationReason.create!(name: 'Unauthorized purchase')
24
26
  end
25
27
  end
26
28
 
@@ -0,0 +1,6 @@
1
+ class RemoveEnvironmentFromTracker < ActiveRecord::Migration
2
+ def up
3
+ Spree::Tracker.where('environment != ?', Rails.env).update_all(active: false)
4
+ remove_column :spree_trackers, :environment
5
+ end
6
+ end
@@ -0,0 +1,80 @@
1
+ class FixAdjustmentOrderId < ActiveRecord::Migration
2
+ def change
3
+ say 'Populate order_id from adjustable_id where appropriate'
4
+
5
+ # 3 separate execute calls to workaround MySQL limitation
6
+ execute(<<-'SQL'.squish)
7
+ UPDATE
8
+ spree_adjustments
9
+ SET
10
+ order_id = adjustable_id
11
+ WHERE
12
+ adjustable_type = 'Spree::Order'
13
+ AND order_id IS NULL
14
+ SQL
15
+
16
+ execute(<<-'SQL'.squish)
17
+ UPDATE
18
+ spree_adjustments
19
+ SET
20
+ order_id =
21
+ (SELECT order_id FROM spree_line_items WHERE spree_line_items.id = spree_adjustments.adjustable_id)
22
+ WHERE
23
+ adjustable_type = 'Spree::LineItem'
24
+ AND order_id IS NULL
25
+ ;
26
+ SQL
27
+
28
+ execute(<<-'SQL'.squish)
29
+ UPDATE
30
+ spree_adjustments
31
+ SET
32
+ order_id =
33
+ (SELECT order_id FROM spree_shipments WHERE spree_shipments.id = spree_adjustments.adjustable_id)
34
+ WHERE
35
+ adjustable_type = 'Spree::Shipment'
36
+ AND order_id IS NULL
37
+ SQL
38
+
39
+ say 'Fix schema for spree_adjustments order_id column'
40
+ change_table :spree_adjustments do |t|
41
+ t.change :order_id, :integer, null: false
42
+ t.change :adjustable_id, :integer, null: false
43
+
44
+ add_foreign_key :spree_adjustments,
45
+ :spree_orders,
46
+ name: 'fk_spree_adjustments_order_id', # default is indeterministic
47
+ column: :order_id,
48
+ on_delete: :restrict, # handled by models
49
+ on_update: :restrict # handled by models
50
+ end
51
+
52
+
53
+ if connection.adapter_name.eql?('PostgreSQL')
54
+ # Negated Logical implication.
55
+ #
56
+ # When adjustable_type is 'Spree::Order' (p) the adjustable_id must be order_id (q).
57
+ #
58
+ # When adjustable_type is NOT 'Spree::Order' the adjustable id allowed to be any value (including of order_id in
59
+ # case foreign keys match). XOR does not work here.
60
+ #
61
+ # Postgresql does not have an operator for logical implication. So we need to build the following truth table
62
+ # via AND with OR:
63
+ #
64
+ # p q | CHECK = !(p -> q)
65
+ # -----------
66
+ # t t | t
67
+ # t f | f
68
+ # f t | t
69
+ # f f | t
70
+ #
71
+ # According to de-morgans law the logical implication q -> p is equivalent to !p || q
72
+ #
73
+ execute(<<-SQL.squish)
74
+ ALTER TABLE ONLY spree_adjustments
75
+ ADD CONSTRAINT check_spree_adjustments_order_id CHECK
76
+ (adjustable_type <> 'Spree::Order' OR order_id = adjustable_id);
77
+ SQL
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,16 @@
1
+ class IncreaseScaleOnPreTaxAmounts < ActiveRecord::Migration
2
+ def change
3
+ # set pre_tax_amount on shipments to discounted_amount - included_tax_total
4
+ # so that the null: false option on the shipment pre_tax_amount doesn't generate
5
+ # errors.
6
+ #
7
+ execute(<<-SQL)
8
+ UPDATE spree_shipments
9
+ SET pre_tax_amount = (cost + promo_total) - included_tax_total
10
+ WHERE pre_tax_amount IS NULL;
11
+ SQL
12
+
13
+ change_column :spree_line_items, :pre_tax_amount, :decimal, precision: 12, scale: 4, default: 0.0, null: false
14
+ change_column :spree_shipments, :pre_tax_amount, :decimal, precision: 12, scale: 4, default: 0.0, null: false
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ class ConvertHabtmToHmtForTaxonPrototypes < ActiveRecord::Migration
2
+ def up
3
+ add_column :spree_taxons_prototypes, :created_at, :datetime
4
+ add_column :spree_taxons_prototypes, :updated_at, :datetime
5
+
6
+ rename_table :spree_taxons_prototypes, :spree_prototype_taxons
7
+ end
8
+
9
+ def down
10
+ rename_table :spree_prototype_taxons, :spree_taxons_prototypes
11
+
12
+ remove_column :spree_taxons_prototypes, :created_at, :datetime
13
+ remove_column :spree_taxons_prototypes, :updated_at, :datetime
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ class AddForeignKeysForTaxonsPrototypes < ActiveRecord::Migration
2
+ def change
3
+ add_foreign_key :spree_prototype_taxons, :spree_taxons, column: :taxon_id
4
+ add_foreign_key :spree_prototype_taxons, :spree_prototypes, column: :prototype_id
5
+ end
6
+ end
@@ -0,0 +1,16 @@
1
+ # This is named the same as the migration in spree 3.0 so it will not be copied
2
+ # if that has already been run.
3
+ class RemoveTokenPermissionsTable < ActiveRecord::Migration
4
+ def up
5
+ drop_table :spree_tokenized_permissions
6
+ end
7
+
8
+ def down
9
+ create_table "spree_tokenized_permissions" do |t|
10
+ t.integer "permissable_id"
11
+ t.string "permissable_type"
12
+ t.string "token"
13
+ t.timestamps null: true
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ # This file has the same name as the spree 3.0 migration to prevent it from
2
+ # being run twice for those users.
3
+ class RenameIdentifierToNumberForPayment < ActiveRecord::Migration
4
+ def change
5
+ rename_column :spree_payments, :identifier, :number
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ class AddForeignKeysForProductPromotionRules < ActiveRecord::Migration
2
+ def change
3
+ add_foreign_key :spree_product_promotion_rules, :spree_products,
4
+ column: :product_id
5
+
6
+ add_foreign_key :spree_product_promotion_rules, :spree_promotion_rules,
7
+ column: :promotion_rule_id
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ class AddSaleToSpreePromotions < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_promotions, :apply_automatically, :boolean, default: false
4
+ add_index :spree_promotions, :apply_automatically
5
+ end
6
+ end
@@ -0,0 +1,28 @@
1
+ class ConvertSalePromotions < ActiveRecord::Migration
2
+ def up
3
+ sale_promotions.update_all(apply_automatically: true)
4
+ end
5
+
6
+ def down
7
+ # intentionally left blank
8
+ end
9
+
10
+ private
11
+
12
+ def sale_promotions
13
+ promo_table = Spree::Promotion.arel_table
14
+ code_table = Spree::PromotionCode.arel_table
15
+
16
+ promotion_code_join = promo_table.join(code_table, Arel::Nodes::OuterJoin).on(
17
+ promo_table[:id].eq(code_table[:promotion_id])
18
+ ).join_sources
19
+
20
+ Spree::Promotion.includes(:promotion_rules).
21
+ joins(promotion_code_join).
22
+ where(
23
+ code_table[:value].eq(nil).and(
24
+ promo_table[:path].eq(nil)
25
+ )
26
+ ).distinct
27
+ end
28
+ end
data/lib/spree/core.rb CHANGED
@@ -92,6 +92,8 @@ require 'spree/core/controller_helpers/store'
92
92
  require 'spree/core/controller_helpers/strong_parameters'
93
93
  require 'spree/core/unreturned_item_charger'
94
94
  require 'spree/core/role_configuration'
95
+ require 'spree/permission_sets'
96
+ require 'spree/deprecation'
95
97
 
96
98
  require 'spree/mailer_previews/order_preview'
97
99
  require 'spree/mailer_previews/carton_preview'
@@ -48,6 +48,13 @@ module Spree
48
48
  product_properties_attributes: permitted_product_properties_attributes
49
49
  ]
50
50
  end
51
+
52
+ def permitted_user_attributes
53
+ permitted_attributes.user_attributes + [
54
+ bill_address_attributes: permitted_address_attributes,
55
+ ship_address_attributes: permitted_address_attributes
56
+ ]
57
+ end
51
58
  end
52
59
  end
53
60
  end
@@ -93,7 +93,8 @@ module Spree
93
93
  Spree::Promotion::Rules::OneUsePerUser,
94
94
  Spree::Promotion::Rules::Taxon,
95
95
  Spree::Promotion::Rules::NthOrder,
96
- Spree::Promotion::Rules::OptionValue
96
+ Spree::Promotion::Rules::OptionValue,
97
+ Spree::Promotion::Rules::FirstRepeatPurchaseSince,
97
98
  ]
98
99
  end
99
100
 
@@ -0,0 +1,3 @@
1
+ module Spree
2
+ Deprecation = ActiveSupport::Deprecation.new('2.0', 'Solidus')
3
+ end
@@ -3,7 +3,7 @@ module Spree
3
3
  class CartonPreview < ActionMailer::Preview
4
4
  def shipped
5
5
  carton = Carton.first
6
- CartonMailer.shipped_email(order: carton.orders.first, carton: carton)
6
+ Spree::Config.carton_shipped_email_class.shipped_email(order: carton.orders.first, carton: carton)
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,23 @@
1
+ require 'spree/permission_sets/base'
2
+ require 'spree/permission_sets/configuration_display'
3
+ require 'spree/permission_sets/configuration_management'
4
+ require 'spree/permission_sets/dashboard_display'
5
+ require 'spree/permission_sets/default_customer'
6
+ require 'spree/permission_sets/order_display'
7
+ require 'spree/permission_sets/order_management'
8
+ require 'spree/permission_sets/product_display'
9
+ require 'spree/permission_sets/product_management'
10
+ require 'spree/permission_sets/promotion_display'
11
+ require 'spree/permission_sets/promotion_management'
12
+ require 'spree/permission_sets/report_display'
13
+ require 'spree/permission_sets/restricted_stock_display'
14
+ require 'spree/permission_sets/restricted_stock_management'
15
+ require 'spree/permission_sets/restricted_stock_transfer_display'
16
+ require 'spree/permission_sets/restricted_stock_transfer_management'
17
+ require 'spree/permission_sets/stock_display'
18
+ require 'spree/permission_sets/stock_management'
19
+ require 'spree/permission_sets/stock_transfer_display'
20
+ require 'spree/permission_sets/stock_transfer_management'
21
+ require 'spree/permission_sets/super_user'
22
+ require 'spree/permission_sets/user_display'
23
+ require 'spree/permission_sets/user_management'
File without changes
@@ -17,12 +17,13 @@ module Spree
17
17
  can :display, ProductProperty
18
18
  can :display, Property
19
19
  can :create, Spree.user_class
20
- can [:read, :update], Spree.user_class, id: user.id
20
+ can [:read, :update, :update_email], Spree.user_class, id: user.id
21
21
  can :display, State
22
22
  can :display, StockItem, stock_location: { active: true }
23
23
  can :display, StockLocation, active: true
24
24
  can :display, Taxon
25
25
  can :display, Taxonomy
26
+ can [:save_in_address_book, :remove_from_address_book], Spree.user_class, id: user.id
26
27
  can [:display, :view_out_of_stock], Variant
27
28
  can :display, Zone
28
29
  end
@@ -19,32 +19,42 @@ module Spree
19
19
  class RestrictedStockTransferManagement < PermissionSets::Base
20
20
  def activate!
21
21
  if user.stock_locations.any?
22
- can :display, Spree::StockLocation, id: location_ids
22
+ can :display, Spree::StockLocation, id: user_location_ids
23
23
  can [:admin, :create], Spree::StockTransfer
24
- can :display, Spree::StockTransfer, source_location_id: location_ids
25
- can :display, Spree::StockTransfer, destination_location_id: location_ids
24
+ can :display, Spree::StockTransfer, source_location_id: source_location_ids
25
+ can :display, Spree::StockTransfer, destination_location_id: destination_location_ids
26
26
  can :manage, Spree::StockTransfer,
27
- source_location_id: location_ids,
28
- destination_location_id: destination_location_ids
27
+ source_location_id: source_location_ids,
28
+ destination_location_id: destination_location_ids_with_undefined_destination
29
29
 
30
- can :transfer, Spree::StockLocation, id: location_ids
30
+ can :transfer_from, Spree::StockLocation, id: source_location_ids
31
+ can :transfer_to, Spree::StockLocation, id: destination_location_ids
31
32
 
32
33
  can :manage, Spree::TransferItem, stock_transfer: {
33
- source_location_id: location_ids,
34
- destination_location_id: destination_location_ids
34
+ source_location_id: source_location_ids,
35
+ destination_location_id: destination_location_ids_with_undefined_destination
35
36
  }
36
37
  end
37
38
  end
38
39
 
39
40
  private
40
41
 
41
- def location_ids
42
- # either source_location_id or destination_location_id can be nil.
43
- @ids ||= user.stock_locations.pluck(:id)
42
+ def user_location_ids
43
+ @user_location_ids ||= user.stock_locations.pluck(:id)
44
44
  end
45
45
 
46
+ # @note Meant to facilitate extension - override to define custom ids
47
+ def source_location_ids
48
+ user_location_ids
49
+ end
50
+
51
+ # @note Meant to facilitate extension - override to define custom ids
46
52
  def destination_location_ids
47
- location_ids + [nil]
53
+ user_location_ids
54
+ end
55
+
56
+ def destination_location_ids_with_undefined_destination
57
+ destination_location_ids + [nil]
48
58
  end
49
59
  end
50
60
  end