spree_core 3.3.6 → 3.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/helpers/spree/base_helper.rb +17 -18
 - data/app/helpers/spree/products_helper.rb +5 -5
 - data/app/models/concerns/spree/calculated_adjustments.rb +4 -3
 - data/app/models/concerns/spree/default_price.rb +4 -5
 - data/app/models/concerns/spree/display_money.rb +1 -1
 - data/app/models/concerns/spree/named_type.rb +1 -1
 - data/app/models/concerns/spree/ransackable_attributes.rb +5 -6
 - data/app/models/concerns/spree/user_address.rb +6 -6
 - data/app/models/concerns/spree/user_methods.rb +3 -3
 - data/app/models/concerns/spree/user_payment_source.rb +4 -2
 - data/app/models/concerns/spree/user_reporting.rb +1 -1
 - data/app/models/spree/ability.rb +3 -3
 - data/app/models/spree/address.rb +13 -9
 - data/app/models/spree/adjustable/adjuster/promotion.rb +1 -1
 - data/app/models/spree/adjustable/adjustments_updater.rb +2 -2
 - data/app/models/spree/adjustable/promotion_accumulator.rb +6 -4
 - data/app/models/spree/adjustment.rb +2 -3
 - data/app/models/spree/app_configuration.rb +5 -6
 - data/app/models/spree/base.rb +1 -1
 - data/app/models/spree/calculator/default_tax.rb +4 -5
 - data/app/models/spree/calculator/flat_percent_item_total.rb +1 -1
 - data/app/models/spree/calculator/flat_rate.rb +3 -3
 - data/app/models/spree/calculator/flexi_rate.rb +5 -5
 - data/app/models/spree/calculator/price_sack.rb +9 -9
 - data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -1
 - data/app/models/spree/calculator/shipping/flat_rate.rb +3 -3
 - data/app/models/spree/calculator/shipping/flexi_rate.rb +7 -7
 - data/app/models/spree/calculator/shipping/per_item.rb +2 -2
 - data/app/models/spree/calculator/shipping/price_sack.rb +4 -4
 - data/app/models/spree/calculator/tiered_flat_rate.rb +3 -2
 - data/app/models/spree/calculator/tiered_percent.rb +4 -3
 - data/app/models/spree/calculator.rb +4 -4
 - data/app/models/spree/classification.rb +2 -2
 - data/app/models/spree/credit_card.rb +1 -1
 - data/app/models/spree/exchange.rb +4 -5
 - data/app/models/spree/gateway/bogus.rb +20 -20
 - data/app/models/spree/gateway/bogus_simple.rb +2 -4
 - data/app/models/spree/gateway.rb +4 -4
 - data/app/models/spree/image.rb +3 -3
 - data/app/models/spree/inventory_unit.rb +30 -30
 - data/app/models/spree/line_item.rb +7 -9
 - data/app/models/spree/option_type.rb +1 -1
 - data/app/models/spree/order/checkout.rb +5 -5
 - data/app/models/spree/order/currency_updater.rb +1 -4
 - data/app/models/spree/order/payments.rb +4 -4
 - data/app/models/spree/order/store_credit.rb +2 -2
 - data/app/models/spree/order.rb +11 -29
 - data/app/models/spree/order_contents.rb +6 -5
 - data/app/models/spree/order_inventory.rb +3 -4
 - data/app/models/spree/order_updater.rb +13 -14
 - data/app/models/spree/payment/processing.rb +25 -26
 - data/app/models/spree/payment.rb +72 -79
 - data/app/models/spree/payment_capture_event.rb +1 -1
 - data/app/models/spree/payment_method/check.rb +1 -1
 - data/app/models/spree/payment_method/store_credit.rb +5 -5
 - data/app/models/spree/payment_method.rb +7 -7
 - data/app/models/spree/preferences/configuration.rb +6 -9
 - data/app/models/spree/preferences/preferable.rb +11 -11
 - data/app/models/spree/preferences/preferable_class_methods.rb +2 -3
 - data/app/models/spree/preferences/scoped_store.rb +6 -5
 - data/app/models/spree/preferences/store.rb +9 -14
 - data/app/models/spree/price.rb +1 -1
 - data/app/models/spree/product/scopes.rb +49 -49
 - data/app/models/spree/product.rb +16 -16
 - data/app/models/spree/promotion/actions/create_item_adjustments.rb +2 -1
 - data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
 - data/app/models/spree/promotion/rules/first_order.rb +7 -6
 - data/app/models/spree/promotion/rules/item_total.rb +3 -5
 - data/app/models/spree/promotion/rules/one_use_per_user.rb +1 -2
 - data/app/models/spree/promotion/rules/option_value.rb +14 -6
 - data/app/models/spree/promotion/rules/product.rb +4 -4
 - data/app/models/spree/promotion/rules/taxon.rb +6 -6
 - data/app/models/spree/promotion/rules/user.rb +3 -3
 - data/app/models/spree/promotion/rules/user_logged_in.rb +1 -1
 - data/app/models/spree/promotion.rb +15 -16
 - data/app/models/spree/promotion_action.rb +1 -1
 - data/app/models/spree/promotion_handler/cart.rb +3 -2
 - data/app/models/spree/promotion_handler/free_shipping.rb +1 -3
 - data/app/models/spree/promotion_handler/page.rb +3 -3
 - data/app/models/spree/promotion_rule.rb +5 -4
 - data/app/models/spree/refund.rb +8 -8
 - data/app/models/spree/reimbursement/credit.rb +1 -1
 - data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -3
 - data/app/models/spree/reimbursement.rb +4 -8
 - data/app/models/spree/reimbursement_performer.rb +0 -5
 - data/app/models/spree/reimbursement_tax_calculator.rb +5 -12
 - data/app/models/spree/reimbursement_type.rb +2 -2
 - data/app/models/spree/return_authorization.rb +22 -26
 - data/app/models/spree/return_item/eligibility_validator/default.rb +3 -3
 - data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +2 -2
 - data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +2 -2
 - data/app/models/spree/return_item/eligibility_validator/order_completed.rb +2 -2
 - data/app/models/spree/return_item/eligibility_validator/rma_required.rb +2 -3
 - data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +2 -2
 - data/app/models/spree/return_item.rb +15 -19
 - data/app/models/spree/returns_calculator.rb +1 -2
 - data/app/models/spree/shipment.rb +14 -35
 - data/app/models/spree/shipment_handler.rb +10 -12
 - data/app/models/spree/shipping_calculator.rb +5 -6
 - data/app/models/spree/shipping_method.rb +3 -3
 - data/app/models/spree/shipping_rate.rb +2 -2
 - data/app/models/spree/state.rb +2 -2
 - data/app/models/spree/stock/availability_validator.rb +1 -1
 - data/app/models/spree/stock/content_item.rb +2 -3
 - data/app/models/spree/stock/coordinator.rb +3 -2
 - data/app/models/spree/stock/differentiator.rb +3 -2
 - data/app/models/spree/stock/estimator.rb +7 -5
 - data/app/models/spree/stock/package.rb +5 -5
 - data/app/models/spree/stock/packer.rb +1 -1
 - data/app/models/spree/stock/prioritizer.rb +5 -7
 - data/app/models/spree/stock/quantifier.rb +0 -1
 - data/app/models/spree/stock/splitter/backordered.rb +2 -4
 - data/app/models/spree/stock/splitter/base.rb +3 -2
 - data/app/models/spree/stock/splitter/shipping_category.rb +2 -1
 - data/app/models/spree/stock_item.rb +1 -1
 - data/app/models/spree/stock_location.rb +12 -11
 - data/app/models/spree/stock_movement.rb +1 -3
 - data/app/models/spree/stock_transfer.rb +1 -1
 - data/app/models/spree/store.rb +4 -4
 - data/app/models/spree/store_credit.rb +3 -3
 - data/app/models/spree/tax_category.rb +1 -1
 - data/app/models/spree/tax_rate.rb +10 -10
 - data/app/models/spree/taxon.rb +13 -13
 - data/app/models/spree/taxonomy.rb +9 -8
 - data/app/models/spree/validations/db_maximum_length_validator.rb +2 -3
 - data/app/models/spree/variant.rb +30 -41
 - data/app/models/spree/zone.rb +10 -10
 - data/app/validators/db_maximum_length_validator.rb +5 -5
 - data/config/initializers/acts_as_taggable_on.rb +3 -3
 - data/config/initializers/assets.rb +1 -1
 - data/config/initializers/friendly_id.rb +1 -1
 - data/config/initializers/premailer_assets.rb +1 -1
 - data/config/locales/en.yml +8 -2
 - data/db/default/spree/states.rb +1 -0
 - data/lib/generators/spree/custom_user/custom_user_generator.rb +12 -15
 - data/lib/generators/spree/install/install_generator.rb +45 -32
 - data/lib/spree/core/components.rb +3 -3
 - data/lib/spree/core/controller_helpers/auth.rb +5 -10
 - data/lib/spree/core/controller_helpers/common.rb +2 -3
 - data/lib/spree/core/controller_helpers/order.rb +3 -7
 - data/lib/spree/core/controller_helpers/respond_with.rb +4 -4
 - data/lib/spree/core/engine.rb +3 -3
 - data/lib/spree/core/environment/calculators.rb +0 -1
 - data/lib/spree/core/environment_extension.rb +8 -8
 - data/lib/spree/core/importer/order.rb +64 -67
 - data/lib/spree/core/importer/product.rb +10 -9
 - data/lib/spree/core/product_filters.rb +17 -18
 - data/lib/spree/core/routes.rb +2 -6
 - data/lib/spree/core/search/base.rb +62 -59
 - data/lib/spree/core/version.rb +1 -1
 - data/lib/spree/core.rb +4 -6
 - data/lib/spree/i18n.rb +3 -5
 - data/lib/spree/localized_number.rb +0 -2
 - data/lib/spree/migrations.rb +8 -7
 - data/lib/spree/money.rb +3 -7
 - data/lib/spree/permitted_attributes.rb +2 -2
 - data/lib/spree/responder.rb +4 -5
 - data/lib/spree/testing_support/authorization_helpers.rb +3 -3
 - data/lib/spree/testing_support/caching.rb +5 -5
 - data/lib/spree/testing_support/capybara_ext.rb +16 -18
 - data/lib/spree/testing_support/common_rake.rb +8 -9
 - data/lib/spree/testing_support/controller_requests.rb +6 -6
 - data/lib/spree/testing_support/extension_rake.rb +2 -3
 - data/lib/spree/testing_support/factories/address_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/calculator_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/country_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/customer_return_factory.rb +1 -3
 - data/lib/spree/testing_support/factories/image_factory.rb +2 -2
 - data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
 - data/lib/spree/testing_support/factories/options_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/order_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/payment_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/payment_method_factory.rb +4 -4
 - data/lib/spree/testing_support/factories/price_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/product_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/promotion_category_factory.rb +1 -2
 - data/lib/spree/testing_support/factories/promotion_factory.rb +1 -2
 - data/lib/spree/testing_support/factories/promotion_rule_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/property_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/prototype_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/reimbursement_factory.rb +2 -2
 - data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/role_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/shipment_factory.rb +2 -2
 - data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/shipping_method_factory.rb +3 -3
 - data/lib/spree/testing_support/factories/state_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/stock_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -2
 - data/lib/spree/testing_support/factories/stock_movement_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/store_credit_category_factory.rb +2 -2
 - data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/store_credit_type_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/store_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/tag_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -2
 - data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/taxon_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/tracker_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/user_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/variant_factory.rb +1 -2
 - data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
 - data/lib/spree/testing_support/factories/zone_member_factory.rb +1 -1
 - data/lib/spree/testing_support/factories.rb +3 -3
 - data/lib/spree/testing_support/flash.rb +1 -3
 - data/lib/spree/testing_support/i18n.rb +5 -6
 - data/lib/spree/testing_support/kernel.rb +1 -2
 - data/lib/spree/testing_support/order_walkthrough.rb +12 -15
 - data/lib/spree/testing_support/preferences.rb +0 -1
 - data/lib/tasks/core.rake +47 -56
 - data/lib/tasks/email.rake +2 -2
 - data/lib/tasks/exchanges.rake +5 -5
 - data/spree_core.gemspec +1 -1
 - metadata +5 -9
 - data/app/models/spree/calculator/percent_per_item.rb +0 -51
 - data/config/initializers/premailer_rails.rb +0 -3
 - data/lib/spree/core/delegate_belongs_to.rb +0 -99
 - data/lib/spree/testing_support/microdata.rb +0 -192
 
| 
         @@ -2,10 +2,10 @@ module Spree 
     | 
|
| 
       2 
2 
     | 
    
         
             
              class ReturnItem::EligibilityValidator::RMARequired < Spree::ReturnItem::EligibilityValidator::BaseValidator
         
     | 
| 
       3 
3 
     | 
    
         
             
                def eligible_for_return?
         
     | 
| 
       4 
4 
     | 
    
         
             
                  if @return_item.return_authorization.present?
         
     | 
| 
       5 
     | 
    
         
            -
                     
     | 
| 
      
 5 
     | 
    
         
            +
                    true
         
     | 
| 
       6 
6 
     | 
    
         
             
                  else
         
     | 
| 
       7 
7 
     | 
    
         
             
                    add_error(:rma_required, Spree.t('return_item_rma_ineligible'))
         
     | 
| 
       8 
     | 
    
         
            -
                     
     | 
| 
      
 8 
     | 
    
         
            +
                    false
         
     | 
| 
       9 
9 
     | 
    
         
             
                  end
         
     | 
| 
       10 
10 
     | 
    
         
             
                end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
         @@ -14,4 +14,3 @@ module Spree 
     | 
|
| 
       14 
14 
     | 
    
         
             
                end
         
     | 
| 
       15 
15 
     | 
    
         
             
              end
         
     | 
| 
       16 
16 
     | 
    
         
             
            end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
         @@ -2,10 +2,10 @@ module Spree 
     | 
|
| 
       2 
2 
     | 
    
         
             
              class ReturnItem::EligibilityValidator::TimeSincePurchase < Spree::ReturnItem::EligibilityValidator::BaseValidator
         
     | 
| 
       3 
3 
     | 
    
         
             
                def eligible_for_return?
         
     | 
| 
       4 
4 
     | 
    
         
             
                  if (@return_item.inventory_unit.order.completed_at + Spree::Config[:return_eligibility_number_of_days].days) > Time.current
         
     | 
| 
       5 
     | 
    
         
            -
                     
     | 
| 
      
 5 
     | 
    
         
            +
                    true
         
     | 
| 
       6 
6 
     | 
    
         
             
                  else
         
     | 
| 
       7 
7 
     | 
    
         
             
                    add_error(:number_of_days, Spree.t('return_item_time_period_ineligible'))
         
     | 
| 
       8 
     | 
    
         
            -
                     
     | 
| 
      
 8 
     | 
    
         
            +
                    false
         
     | 
| 
       9 
9 
     | 
    
         
             
                  end
         
     | 
| 
       10 
10 
     | 
    
         
             
                end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
         @@ -152,7 +152,7 @@ module Spree 
     | 
|
| 
       152 
152 
     | 
    
         
             
                  # will have a different variant than the inventory unit itself
         
     | 
| 
       153 
153 
     | 
    
         
             
                  return unless exchange_required?
         
     | 
| 
       154 
154 
     | 
    
         
             
                  exchange_inventory_units.build(variant: exchange_variant, line_item: inventory_unit.line_item,
         
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
      
 155 
     | 
    
         
            +
                                                 order: inventory_unit.order, quantity: return_quantity)
         
     | 
| 
       156 
156 
     | 
    
         
             
                end
         
     | 
| 
       157 
157 
     | 
    
         | 
| 
       158 
158 
     | 
    
         
             
                def exchange_shipments
         
     | 
| 
         @@ -166,16 +166,14 @@ module Spree 
     | 
|
| 
       166 
166 
     | 
    
         
             
                private
         
     | 
| 
       167 
167 
     | 
    
         | 
| 
       168 
168 
     | 
    
         
             
                def persist_acceptance_status_errors
         
     | 
| 
       169 
     | 
    
         
            -
                   
     | 
| 
      
 169 
     | 
    
         
            +
                  update_attributes(acceptance_status_errors: validator.errors)
         
     | 
| 
       170 
170 
     | 
    
         
             
                end
         
     | 
| 
       171 
171 
     | 
    
         | 
| 
       172 
172 
     | 
    
         
             
                def stock_item
         
     | 
| 
       173 
173 
     | 
    
         
             
                  return unless customer_return
         
     | 
| 
       174 
174 
     | 
    
         | 
| 
       175 
     | 
    
         
            -
                  Spree::StockItem.find_by( 
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
                    stock_location_id: customer_return.stock_location_id,
         
     | 
| 
       178 
     | 
    
         
            -
                  })
         
     | 
| 
      
 175 
     | 
    
         
            +
                  Spree::StockItem.find_by(variant_id: inventory_unit.variant_id,
         
     | 
| 
      
 176 
     | 
    
         
            +
                                           stock_location_id: customer_return.stock_location_id)
         
     | 
| 
       179 
177 
     | 
    
         
             
                end
         
     | 
| 
       180 
178 
     | 
    
         | 
| 
       181 
179 
     | 
    
         
             
                def currency
         
     | 
| 
         @@ -184,11 +182,13 @@ module Spree 
     | 
|
| 
       184 
182 
     | 
    
         | 
| 
       185 
183 
     | 
    
         
             
                def process_inventory_unit!
         
     | 
| 
       186 
184 
     | 
    
         
             
                  inventory_unit.return!
         
     | 
| 
       187 
     | 
    
         
            -
                   
     | 
| 
       188 
     | 
    
         
            -
                     
     | 
| 
       189 
     | 
    
         
            -
             
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
      
 185 
     | 
    
         
            +
                  if should_restock?
         
     | 
| 
      
 186 
     | 
    
         
            +
                    Spree::StockMovement.create!(
         
     | 
| 
      
 187 
     | 
    
         
            +
                      stock_item_id: stock_item.id,
         
     | 
| 
      
 188 
     | 
    
         
            +
                      quantity: inventory_unit.quantity,
         
     | 
| 
      
 189 
     | 
    
         
            +
                      originator: return_authorization
         
     | 
| 
      
 190 
     | 
    
         
            +
                    )
         
     | 
| 
      
 191 
     | 
    
         
            +
                  end
         
     | 
| 
       192 
192 
     | 
    
         
             
                end
         
     | 
| 
       193 
193 
     | 
    
         | 
| 
       194 
194 
     | 
    
         
             
                # This logic is also present in the customer return. The reason for the
         
     | 
| 
         @@ -237,16 +237,12 @@ module Spree 
     | 
|
| 
       237 
237 
     | 
    
         
             
                end
         
     | 
| 
       238 
238 
     | 
    
         | 
| 
       239 
239 
     | 
    
         
             
                def validate_no_other_completed_return_items
         
     | 
| 
       240 
     | 
    
         
            -
                  other_return_item = Spree::ReturnItem.where( 
     | 
| 
       241 
     | 
    
         
            -
             
     | 
| 
       242 
     | 
    
         
            -
                    reception_status: COMPLETED_RECEPTION_STATUSES,
         
     | 
| 
       243 
     | 
    
         
            -
                  }).first
         
     | 
| 
      
 240 
     | 
    
         
            +
                  other_return_item = Spree::ReturnItem.where(inventory_unit_id: inventory_unit_id,
         
     | 
| 
      
 241 
     | 
    
         
            +
                                                              reception_status: COMPLETED_RECEPTION_STATUSES).first
         
     | 
| 
       244 
242 
     | 
    
         | 
| 
       245 
243 
     | 
    
         
             
                  if other_return_item
         
     | 
| 
       246 
     | 
    
         
            -
                    errors.add(:inventory_unit, :other_completed_return_item_exists,  
     | 
| 
       247 
     | 
    
         
            -
             
     | 
| 
       248 
     | 
    
         
            -
                      return_item_id: other_return_item.id,
         
     | 
| 
       249 
     | 
    
         
            -
                    })
         
     | 
| 
      
 244 
     | 
    
         
            +
                    errors.add(:inventory_unit, :other_completed_return_item_exists,           inventory_unit_id: inventory_unit_id,
         
     | 
| 
      
 245 
     | 
    
         
            +
                                                                                               return_item_id: other_return_item.id)
         
     | 
| 
       250 
246 
     | 
    
         
             
                  end
         
     | 
| 
       251 
247 
     | 
    
         
             
                end
         
     | 
| 
       252 
248 
     | 
    
         | 
| 
         @@ -76,7 +76,7 @@ module Spree 
     | 
|
| 
       76 
76 
     | 
    
         
             
                    shipment.state_changes.create!(
         
     | 
| 
       77 
77 
     | 
    
         
             
                      previous_state: transition.from,
         
     | 
| 
       78 
78 
     | 
    
         
             
                      next_state:     transition.to,
         
     | 
| 
       79 
     | 
    
         
            -
                      name:           'shipment' 
     | 
| 
      
 79 
     | 
    
         
            +
                      name:           'shipment'
         
     | 
| 
       80 
80 
     | 
    
         
             
                    )
         
     | 
| 
       81 
81 
     | 
    
         
             
                  end
         
     | 
| 
       82 
82 
     | 
    
         
             
                end
         
     | 
| 
         @@ -125,11 +125,6 @@ module Spree 
     | 
|
| 
       125 
125 
     | 
    
         
             
                end
         
     | 
| 
       126 
126 
     | 
    
         
             
                alias discounted_amount discounted_cost
         
     | 
| 
       127 
127 
     | 
    
         | 
| 
       128 
     | 
    
         
            -
                def editable_by?(_user)
         
     | 
| 
       129 
     | 
    
         
            -
                  warn "`Spree::Shipment#editable_by?` is deprecated. You should use cancancan `can?` method for cheks like this."
         
     | 
| 
       130 
     | 
    
         
            -
                  !shipped?
         
     | 
| 
       131 
     | 
    
         
            -
                end
         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
128 
     | 
    
         
             
                def final_price
         
     | 
| 
       134 
129 
     | 
    
         
             
                  cost + adjustment_total
         
     | 
| 
       135 
130 
     | 
    
         
             
                end
         
     | 
| 
         @@ -224,7 +219,6 @@ module Spree 
     | 
|
| 
       224 
219 
     | 
    
         
             
                    selected_rate = shipping_rates.detect do |rate|
         
     | 
| 
       225 
220 
     | 
    
         
             
                      rate.shipping_method_id == original_shipping_method_id
         
     | 
| 
       226 
221 
     | 
    
         
             
                    end
         
     | 
| 
       227 
     | 
    
         
            -
                    save!
         
     | 
| 
       228 
222 
     | 
    
         
             
                    self.selected_shipping_rate_id = selected_rate.id if selected_rate
         
     | 
| 
       229 
223 
     | 
    
         
             
                  end
         
     | 
| 
       230 
224 
     | 
    
         | 
| 
         @@ -241,14 +235,12 @@ module Spree 
     | 
|
| 
       241 
235 
     | 
    
         
             
                  save!
         
     | 
| 
       242 
236 
     | 
    
         
             
                end
         
     | 
| 
       243 
237 
     | 
    
         | 
| 
       244 
     | 
    
         
            -
                def set_up_inventory(state, variant, order, line_item 
     | 
| 
       245 
     | 
    
         
            -
                  return if quantity <= 0
         
     | 
| 
      
 238 
     | 
    
         
            +
                def set_up_inventory(state, variant, order, line_item)
         
     | 
| 
       246 
239 
     | 
    
         
             
                  inventory_units.create(
         
     | 
| 
       247 
240 
     | 
    
         
             
                    state: state,
         
     | 
| 
       248 
241 
     | 
    
         
             
                    variant_id: variant.id,
         
     | 
| 
       249 
242 
     | 
    
         
             
                    order_id: order.id,
         
     | 
| 
       250 
     | 
    
         
            -
                    line_item_id: line_item.id 
     | 
| 
       251 
     | 
    
         
            -
                    quantity: quantity
         
     | 
| 
      
 243 
     | 
    
         
            +
                    line_item_id: line_item.id
         
     | 
| 
       252 
244 
     | 
    
         
             
                  )
         
     | 
| 
       253 
245 
     | 
    
         
             
                end
         
     | 
| 
       254 
246 
     | 
    
         | 
| 
         @@ -289,7 +281,7 @@ module Spree 
     | 
|
| 
       289 
281 
     | 
    
         
             
                    update_columns(
         
     | 
| 
       290 
282 
     | 
    
         
             
                      cost: selected_shipping_rate.cost,
         
     | 
| 
       291 
283 
     | 
    
         
             
                      adjustment_total: adjustments.additional.map(&:update!).compact.sum,
         
     | 
| 
       292 
     | 
    
         
            -
                      updated_at: Time.current 
     | 
| 
      
 284 
     | 
    
         
            +
                      updated_at: Time.current
         
     | 
| 
       293 
285 
     | 
    
         
             
                    )
         
     | 
| 
       294 
286 
     | 
    
         
             
                  end
         
     | 
| 
       295 
287 
     | 
    
         
             
                end
         
     | 
| 
         @@ -332,22 +324,19 @@ module Spree 
     | 
|
| 
       332 
324 
     | 
    
         
             
                  new_state = determine_state(order)
         
     | 
| 
       333 
325 
     | 
    
         
             
                  update_columns(
         
     | 
| 
       334 
326 
     | 
    
         
             
                    state: new_state,
         
     | 
| 
       335 
     | 
    
         
            -
                    updated_at: Time.current 
     | 
| 
      
 327 
     | 
    
         
            +
                    updated_at: Time.current
         
     | 
| 
       336 
328 
     | 
    
         
             
                  )
         
     | 
| 
       337 
329 
     | 
    
         
             
                  after_ship if new_state == 'shipped' && old_state != 'shipped'
         
     | 
| 
       338 
330 
     | 
    
         
             
                end
         
     | 
| 
       339 
331 
     | 
    
         | 
| 
       340 
332 
     | 
    
         
             
                def transfer_to_location(variant, quantity, stock_location)
         
     | 
| 
       341 
     | 
    
         
            -
                  if quantity <= 0
         
     | 
| 
       342 
     | 
    
         
            -
                    raise ArgumentError
         
     | 
| 
       343 
     | 
    
         
            -
                  end
         
     | 
| 
      
 333 
     | 
    
         
            +
                  raise ArgumentError if quantity <= 0
         
     | 
| 
       344 
334 
     | 
    
         | 
| 
       345 
335 
     | 
    
         
             
                  transaction do
         
     | 
| 
       346 
336 
     | 
    
         
             
                    new_shipment = order.shipments.create!(stock_location: stock_location)
         
     | 
| 
       347 
337 
     | 
    
         | 
| 
       348 
338 
     | 
    
         
             
                    order.contents.remove(variant, quantity, shipment: self)
         
     | 
| 
       349 
339 
     | 
    
         
             
                    order.contents.add(variant, quantity, shipment: new_shipment)
         
     | 
| 
       350 
     | 
    
         
            -
                    order.update_with_updater!
         
     | 
| 
       351 
340 
     | 
    
         | 
| 
       352 
341 
     | 
    
         
             
                    refresh_rates
         
     | 
| 
       353 
342 
     | 
    
         
             
                    save!
         
     | 
| 
         @@ -361,14 +350,11 @@ module Spree 
     | 
|
| 
       361 
350 
     | 
    
         
             
                  end.try(:quantity) || 0
         
     | 
| 
       362 
351 
     | 
    
         
             
                  final_quantity = quantity + quantity_already_shipment_to_transfer_to
         
     | 
| 
       363 
352 
     | 
    
         | 
| 
       364 
     | 
    
         
            -
                  if quantity <= 0 || self == shipment_to_transfer_to
         
     | 
| 
       365 
     | 
    
         
            -
                    raise ArgumentError
         
     | 
| 
       366 
     | 
    
         
            -
                  end
         
     | 
| 
      
 353 
     | 
    
         
            +
                  raise ArgumentError if quantity <= 0 || self == shipment_to_transfer_to
         
     | 
| 
       367 
354 
     | 
    
         | 
| 
       368 
355 
     | 
    
         
             
                  transaction do
         
     | 
| 
       369 
     | 
    
         
            -
                    order.contents.remove(variant,  
     | 
| 
       370 
     | 
    
         
            -
                    order.contents.add(variant,  
     | 
| 
       371 
     | 
    
         
            -
                    order.update_with_updater!
         
     | 
| 
      
 356 
     | 
    
         
            +
                    order.contents.remove(variant, quantity, shipment: self)
         
     | 
| 
      
 357 
     | 
    
         
            +
                    order.contents.add(variant, quantity, shipment: shipment_to_transfer_to)
         
     | 
| 
       372 
358 
     | 
    
         | 
| 
       373 
359 
     | 
    
         
             
                    refresh_rates
         
     | 
| 
       374 
360 
     | 
    
         
             
                    save!
         
     | 
| 
         @@ -388,12 +374,12 @@ module Spree 
     | 
|
| 
       388 
374 
     | 
    
         
             
                end
         
     | 
| 
       389 
375 
     | 
    
         | 
| 
       390 
376 
     | 
    
         
             
                def manifest_restock(item)
         
     | 
| 
       391 
     | 
    
         
            -
                  if item.states[ 
     | 
| 
       392 
     | 
    
         
            -
                    stock_location.restock item.variant, item.states[ 
     | 
| 
      
 377 
     | 
    
         
            +
                  if item.states['on_hand'].to_i.positive?
         
     | 
| 
      
 378 
     | 
    
         
            +
                    stock_location.restock item.variant, item.states['on_hand'], self
         
     | 
| 
       393 
379 
     | 
    
         
             
                  end
         
     | 
| 
       394 
380 
     | 
    
         | 
| 
       395 
     | 
    
         
            -
                  if item.states[ 
     | 
| 
       396 
     | 
    
         
            -
                    stock_location.restock_backordered item.variant, item.states[ 
     | 
| 
      
 381 
     | 
    
         
            +
                  if item.states['backordered'].to_i.positive?
         
     | 
| 
      
 382 
     | 
    
         
            +
                    stock_location.restock_backordered item.variant, item.states['backordered']
         
     | 
| 
       397 
383 
     | 
    
         
             
                  end
         
     | 
| 
       398 
384 
     | 
    
         
             
                end
         
     | 
| 
       399 
385 
     | 
    
         | 
| 
         @@ -405,19 +391,12 @@ module Spree 
     | 
|
| 
       405 
391 
     | 
    
         
             
                  Adjustable::AdjustmentsUpdater.update(self)
         
     | 
| 
       406 
392 
     | 
    
         
             
                end
         
     | 
| 
       407 
393 
     | 
    
         | 
| 
       408 
     | 
    
         
            -
                def send_shipped_email
         
     | 
| 
       409 
     | 
    
         
            -
                  warn "Shipment#send_shipped_email is deprecated, please use ShipmentHandler#send_shipped_email"
         
     | 
| 
       410 
     | 
    
         
            -
                  ShipmentMailer.shipped_email(id).deliver_later
         
     | 
| 
       411 
     | 
    
         
            -
                end
         
     | 
| 
       412 
     | 
    
         
            -
             
     | 
| 
       413 
394 
     | 
    
         
             
                def set_cost_zero_when_nil
         
     | 
| 
       414 
395 
     | 
    
         
             
                  self.cost = 0 unless cost
         
     | 
| 
       415 
396 
     | 
    
         
             
                end
         
     | 
| 
       416 
397 
     | 
    
         | 
| 
       417 
398 
     | 
    
         
             
                def update_adjustments
         
     | 
| 
       418 
     | 
    
         
            -
                  if saved_change_to_cost? && state != 'shipped'
         
     | 
| 
       419 
     | 
    
         
            -
                    recalculate_adjustments
         
     | 
| 
       420 
     | 
    
         
            -
                  end
         
     | 
| 
      
 399 
     | 
    
         
            +
                  recalculate_adjustments if saved_change_to_cost? && state != 'shipped'
         
     | 
| 
       421 
400 
     | 
    
         
             
                end
         
     | 
| 
       422 
401 
     | 
    
         
             
              end
         
     | 
| 
       423 
402 
     | 
    
         
             
            end
         
     | 
| 
         @@ -20,24 +20,22 @@ module Spree 
     | 
|
| 
       20 
20 
     | 
    
         
             
                def perform
         
     | 
| 
       21 
21 
     | 
    
         
             
                  @shipment.inventory_units.each &:ship!
         
     | 
| 
       22 
22 
     | 
    
         
             
                  @shipment.process_order_payments if Spree::Config[:auto_capture_on_dispatch]
         
     | 
| 
      
 23 
     | 
    
         
            +
                  send_shipped_email
         
     | 
| 
       23 
24 
     | 
    
         
             
                  @shipment.touch :shipped_at
         
     | 
| 
       24 
25 
     | 
    
         
             
                  update_order_shipment_state
         
     | 
| 
       25 
     | 
    
         
            -
                  send_shipped_email
         
     | 
| 
       26 
26 
     | 
    
         
             
                end
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
                private
         
     | 
| 
       29 
     | 
    
         
            -
                  def send_shipped_email
         
     | 
| 
       30 
     | 
    
         
            -
                    ShipmentMailer.shipped_email(@shipment.id).deliver_later
         
     | 
| 
       31 
     | 
    
         
            -
                  end
         
     | 
| 
       32 
29 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
                def send_shipped_email
         
     | 
| 
      
 31 
     | 
    
         
            +
                  ShipmentMailer.shipped_email(@shipment.id).deliver_later
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
       35 
33 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
      
 34 
     | 
    
         
            +
                def update_order_shipment_state
         
     | 
| 
      
 35 
     | 
    
         
            +
                  order = @shipment.order
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  new_state = OrderUpdater.new(order).update_shipment_state
         
     | 
| 
      
 38 
     | 
    
         
            +
                  order.update_columns(shipment_state: new_state, updated_at: Time.current)
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
       42 
40 
     | 
    
         
             
              end
         
     | 
| 
       43 
41 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,22 +1,21 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Spree
         
     | 
| 
       2 
2 
     | 
    
         
             
              class ShippingCalculator < Calculator
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
                def compute_shipment(shipment)
         
     | 
| 
      
 3 
     | 
    
         
            +
                def compute_shipment(_shipment)
         
     | 
| 
       5 
4 
     | 
    
         
             
                  raise NotImplementedError, "Please implement 'compute_shipment(shipment)' in your calculator: #{self.class.name}"
         
     | 
| 
       6 
5 
     | 
    
         
             
                end
         
     | 
| 
       7 
6 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                def compute_package( 
     | 
| 
      
 7 
     | 
    
         
            +
                def compute_package(_package)
         
     | 
| 
       9 
8 
     | 
    
         
             
                  raise NotImplementedError, "Please implement 'compute_package(package)' in your calculator: #{self.class.name}"
         
     | 
| 
       10 
9 
     | 
    
         
             
                end
         
     | 
| 
       11 
10 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                def available?( 
     | 
| 
      
 11 
     | 
    
         
            +
                def available?(_package)
         
     | 
| 
       13 
12 
     | 
    
         
             
                  true
         
     | 
| 
       14 
13 
     | 
    
         
             
                end
         
     | 
| 
       15 
14 
     | 
    
         | 
| 
       16 
15 
     | 
    
         
             
                private
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       17 
17 
     | 
    
         
             
                def total(content_items)
         
     | 
| 
       18 
     | 
    
         
            -
                  content_items. 
     | 
| 
      
 18 
     | 
    
         
            +
                  content_items.sum(&:amount)
         
     | 
| 
       19 
19 
     | 
    
         
             
                end
         
     | 
| 
       20 
20 
     | 
    
         
             
              end
         
     | 
| 
       21 
21 
     | 
    
         
             
            end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
         @@ -38,8 +38,8 @@ module Spree 
     | 
|
| 
       38 
38 
     | 
    
         
             
                end
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
                def self.calculators
         
     | 
| 
       41 
     | 
    
         
            -
                  spree_calculators.send(model_name_without_spree_namespace)
         
     | 
| 
       42 
     | 
    
         
            -
                     
     | 
| 
      
 41 
     | 
    
         
            +
                  spree_calculators.send(model_name_without_spree_namespace).
         
     | 
| 
      
 42 
     | 
    
         
            +
                    select { |c| c.to_s.constantize < Spree::ShippingCalculator }
         
     | 
| 
       43 
43 
     | 
    
         
             
                end
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
                def tax_category
         
     | 
| 
         @@ -48,7 +48,7 @@ module Spree 
     | 
|
| 
       48 
48 
     | 
    
         | 
| 
       49 
49 
     | 
    
         
             
                def available_to_display?(display_filter)
         
     | 
| 
       50 
50 
     | 
    
         
             
                  (frontend? && display_filter == DISPLAY_ON_FRONT_END) ||
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
      
 51 
     | 
    
         
            +
                    (backend? && display_filter == DISPLAY_ON_BACK_END)
         
     | 
| 
       52 
52 
     | 
    
         
             
                end
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
                private
         
     | 
| 
         @@ -22,12 +22,12 @@ module Spree 
     | 
|
| 
       22 
22 
     | 
    
         
             
                  return price if tax_rate.nil? || tax_amount == 0
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
                  Spree.t tax_rate.included_in_price? ? :including_tax : :excluding_tax,
         
     | 
| 
       25 
     | 
    
         
            -
                          scope:  
     | 
| 
      
 25 
     | 
    
         
            +
                          scope: 'shipping_rates.display_price',
         
     | 
| 
       26 
26 
     | 
    
         
             
                          price: price,
         
     | 
| 
       27 
27 
     | 
    
         
             
                          tax_amount: display_tax_amount,
         
     | 
| 
       28 
28 
     | 
    
         
             
                          tax_rate_name: tax_rate.name
         
     | 
| 
       29 
29 
     | 
    
         
             
                end
         
     | 
| 
       30 
     | 
    
         
            -
                 
     | 
| 
      
 30 
     | 
    
         
            +
                alias display_cost display_price
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
                def tax_amount
         
     | 
| 
       33 
33 
     | 
    
         
             
                  @_tax_amount ||= tax_rate.calculator.compute_shipping_rate(self)
         
     | 
    
        data/app/models/spree/state.rb
    CHANGED
    
    | 
         @@ -24,9 +24,9 @@ module Spree 
     | 
|
| 
       24 
24 
     | 
    
         
             
                # blank is added elsewhere, if needed
         
     | 
| 
       25 
25 
     | 
    
         
             
                def self.states_group_by_country_id
         
     | 
| 
       26 
26 
     | 
    
         
             
                  state_info = Hash.new { |h, k| h[k] = [] }
         
     | 
| 
       27 
     | 
    
         
            -
                   
     | 
| 
      
 27 
     | 
    
         
            +
                  order(:name).each do |state|
         
     | 
| 
       28 
28 
     | 
    
         
             
                    state_info[state.country_id.to_s].push [state.id, state.name]
         
     | 
| 
       29 
     | 
    
         
            -
                   
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
       30 
30 
     | 
    
         
             
                  state_info
         
     | 
| 
       31 
31 
     | 
    
         
             
                end
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
         @@ -11,7 +11,7 @@ module Spree 
     | 
|
| 
       11 
11 
     | 
    
         
             
                    return if item_available?(line_item, quantity)
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                    variant = line_item.variant
         
     | 
| 
       14 
     | 
    
         
            -
                    display_name =  
     | 
| 
      
 14 
     | 
    
         
            +
                    display_name = variant.name.to_s
         
     | 
| 
       15 
15 
     | 
    
         
             
                    display_name += " (#{variant.options_text})" unless variant.options_text.blank?
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                    line_item.errors[:quantity] << Spree.t(
         
     | 
| 
         @@ -31,14 +31,13 @@ module Spree 
     | 
|
| 
       31 
31 
     | 
    
         
             
                  end
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                  def on_hand?
         
     | 
| 
       34 
     | 
    
         
            -
                    state.to_s ==  
     | 
| 
      
 34 
     | 
    
         
            +
                    state.to_s == 'on_hand'
         
     | 
| 
       35 
35 
     | 
    
         
             
                  end
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
                  def backordered?
         
     | 
| 
       38 
     | 
    
         
            -
                    state.to_s ==  
     | 
| 
      
 38 
     | 
    
         
            +
                    state.to_s == 'backordered'
         
     | 
| 
       39 
39 
     | 
    
         
             
                  end
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
41 
     | 
    
         
             
                  def amount
         
     | 
| 
       43 
42 
     | 
    
         
             
                    price * quantity
         
     | 
| 
       44 
43 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -21,7 +21,7 @@ module Spree 
     | 
|
| 
       21 
21 
     | 
    
         
             
                    packages = estimate_packages(packages)
         
     | 
| 
       22 
22 
     | 
    
         
             
                  end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                  def build_packages(packages =  
     | 
| 
      
 24 
     | 
    
         
            +
                  def build_packages(packages = [])
         
     | 
| 
       25 
25 
     | 
    
         
             
                    stock_locations_with_requested_variants.each do |stock_location|
         
     | 
| 
       26 
26 
     | 
    
         
             
                      packer = build_packer(stock_location, inventory_units)
         
     | 
| 
       27 
27 
     | 
    
         
             
                      packages += packer.packages
         
     | 
| 
         @@ -31,6 +31,7 @@ module Spree 
     | 
|
| 
       31 
31 
     | 
    
         
             
                  end
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                  private
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       34 
35 
     | 
    
         
             
                  def stock_locations_with_requested_variants
         
     | 
| 
       35 
36 
     | 
    
         
             
                    Spree::StockLocation.active.joins(:stock_items).
         
     | 
| 
       36 
37 
     | 
    
         
             
                      where(spree_stock_items: { variant_id: requested_variant_ids }).distinct
         
     | 
| 
         @@ -57,7 +58,7 @@ module Spree 
     | 
|
| 
       57 
58 
     | 
    
         
             
                    Packer.new(stock_location, inventory_units, splitters(stock_location))
         
     | 
| 
       58 
59 
     | 
    
         
             
                  end
         
     | 
| 
       59 
60 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
                  def splitters( 
     | 
| 
      
 61 
     | 
    
         
            +
                  def splitters(_stock_location)
         
     | 
| 
       61 
62 
     | 
    
         
             
                    # extension point to return custom splitters for a location
         
     | 
| 
       62 
63 
     | 
    
         
             
                    Rails.application.config.spree.stock_splitters
         
     | 
| 
       63 
64 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -16,11 +16,12 @@ module Spree 
     | 
|
| 
       16 
16 
     | 
    
         
             
                  end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                  private
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       19 
20 
     | 
    
         
             
                  def build_missing
         
     | 
| 
       20 
21 
     | 
    
         
             
                    @missing = Hash.new(0)
         
     | 
| 
       21 
22 
     | 
    
         
             
                    required.keys.each do |variant|
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
                      missing = required[variant] - packed[variant]
         
     | 
| 
      
 24 
     | 
    
         
            +
                      @missing[variant] = missing if missing > 0
         
     | 
| 
       24 
25 
     | 
    
         
             
                    end
         
     | 
| 
       25 
26 
     | 
    
         
             
                  end
         
     | 
| 
       26 
27 
     | 
    
         | 
| 
         @@ -17,6 +17,7 @@ module Spree 
     | 
|
| 
       17 
17 
     | 
    
         
             
                  end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                  private
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
       20 
21 
     | 
    
         
             
                  def choose_default_shipping_rate(shipping_rates)
         
     | 
| 
       21 
22 
     | 
    
         
             
                    unless shipping_rates.empty?
         
     | 
| 
       22 
23 
     | 
    
         
             
                      shipping_rates.min_by(&:cost).selected = true
         
     | 
| 
         @@ -31,10 +32,11 @@ module Spree 
     | 
|
| 
       31 
32 
     | 
    
         
             
                    shipping_methods(package, ui_filter).map do |shipping_method|
         
     | 
| 
       32 
33 
     | 
    
         
             
                      cost = shipping_method.calculator.compute(package)
         
     | 
| 
       33 
34 
     | 
    
         | 
| 
      
 35 
     | 
    
         
            +
                      next unless cost
         
     | 
| 
       34 
36 
     | 
    
         
             
                      shipping_method.shipping_rates.new(
         
     | 
| 
       35 
37 
     | 
    
         
             
                        cost: gross_amount(cost, taxation_options_for(shipping_method)),
         
     | 
| 
       36 
38 
     | 
    
         
             
                        tax_rate: first_tax_rate_for(shipping_method.tax_category)
         
     | 
| 
       37 
     | 
    
         
            -
                      ) 
     | 
| 
      
 39 
     | 
    
         
            +
                      )
         
     | 
| 
       38 
40 
     | 
    
         
             
                    end.compact
         
     | 
| 
       39 
41 
     | 
    
         
             
                  end
         
     | 
| 
       40 
42 
     | 
    
         | 
| 
         @@ -59,10 +61,10 @@ module Spree 
     | 
|
| 
       59 
61 
     | 
    
         
             
                      calculator = ship_method.calculator
         
     | 
| 
       60 
62 
     | 
    
         | 
| 
       61 
63 
     | 
    
         
             
                      ship_method.available_to_display?(display_filter) &&
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
      
 64 
     | 
    
         
            +
                        ship_method.include?(order.ship_address) &&
         
     | 
| 
      
 65 
     | 
    
         
            +
                        calculator.available?(package) &&
         
     | 
| 
      
 66 
     | 
    
         
            +
                        (calculator.preferences[:currency].blank? ||
         
     | 
| 
      
 67 
     | 
    
         
            +
                         calculator.preferences[:currency] == currency)
         
     | 
| 
       66 
68 
     | 
    
         
             
                    end
         
     | 
| 
       67 
69 
     | 
    
         
             
                  end
         
     | 
| 
       68 
70 
     | 
    
         
             
                end
         
     | 
| 
         @@ -4,14 +4,14 @@ module Spree 
     | 
|
| 
       4 
4 
     | 
    
         
             
                  attr_reader :stock_location, :contents
         
     | 
| 
       5 
5 
     | 
    
         
             
                  attr_accessor :shipping_rates
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
                  def initialize(stock_location, contents=[])
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def initialize(stock_location, contents = [])
         
     | 
| 
       8 
8 
     | 
    
         
             
                    @stock_location = stock_location
         
     | 
| 
       9 
9 
     | 
    
         
             
                    @contents = contents
         
     | 
| 
       10 
     | 
    
         
            -
                    @shipping_rates =  
     | 
| 
      
 10 
     | 
    
         
            +
                    @shipping_rates = []
         
     | 
| 
       11 
11 
     | 
    
         
             
                  end
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                  def add(inventory_unit, state = :on_hand)
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
                    # Remove find_item check as already taken care by prioritizer
         
     | 
| 
       15 
15 
     | 
    
         
             
                    contents << ContentItem.new(inventory_unit, state)
         
     | 
| 
       16 
16 
     | 
    
         
             
                  end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
         @@ -31,7 +31,7 @@ module Spree 
     | 
|
| 
       31 
31 
     | 
    
         
             
                  # Fix regression that removed package.order.
         
     | 
| 
       32 
32 
     | 
    
         
             
                  # Find it dynamically through an inventory_unit.
         
     | 
| 
       33 
33 
     | 
    
         
             
                  def order
         
     | 
| 
       34 
     | 
    
         
            -
                    contents.detect {|item| !!item.try(:inventory_unit).try(:order) }.try(:inventory_unit).try(:order)
         
     | 
| 
      
 34 
     | 
    
         
            +
                    contents.detect { |item| !!item.try(:inventory_unit).try(:order) }.try(:inventory_unit).try(:order)
         
     | 
| 
       35 
35 
     | 
    
         
             
                  end
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
                  def weight
         
     | 
| 
         @@ -55,7 +55,7 @@ module Spree 
     | 
|
| 
       55 
55 
     | 
    
         | 
| 
       56 
56 
     | 
    
         
             
                  def quantity(state = nil)
         
     | 
| 
       57 
57 
     | 
    
         
             
                    matched_contents = state.nil? ? contents : contents.select { |c| c.state.to_s == state.to_s }
         
     | 
| 
       58 
     | 
    
         
            -
                    matched_contents. 
     | 
| 
      
 58 
     | 
    
         
            +
                    matched_contents.sum(&:quantity)
         
     | 
| 
       59 
59 
     | 
    
         
             
                  end
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
61 
     | 
    
         
             
                  def empty?
         
     | 
| 
         @@ -3,7 +3,7 @@ module Spree 
     | 
|
| 
       3 
3 
     | 
    
         
             
                class Packer
         
     | 
| 
       4 
4 
     | 
    
         
             
                  attr_reader :stock_location, :inventory_units, :splitters
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
                  def initialize(stock_location, inventory_units, splitters=[Splitter::Base])
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(stock_location, inventory_units, splitters = [Splitter::Base])
         
     | 
| 
       7 
7 
     | 
    
         
             
                    @stock_location = stock_location
         
     | 
| 
       8 
8 
     | 
    
         
             
                    @inventory_units = inventory_units
         
     | 
| 
       9 
9 
     | 
    
         
             
                    @splitters = splitters
         
     | 
| 
         @@ -3,10 +3,10 @@ module Spree 
     | 
|
| 
       3 
3 
     | 
    
         
             
                class Prioritizer
         
     | 
| 
       4 
4 
     | 
    
         
             
                  attr_reader :packages
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
                  def initialize(packages, adjuster_class=Adjuster)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(packages, adjuster_class = Adjuster)
         
     | 
| 
       7 
7 
     | 
    
         
             
                    @packages = packages
         
     | 
| 
       8 
8 
     | 
    
         
             
                    @adjuster_class = adjuster_class
         
     | 
| 
       9 
     | 
    
         
            -
                    @adjusters =  
     | 
| 
      
 9 
     | 
    
         
            +
                    @adjusters = {}
         
     | 
| 
       10 
10 
     | 
    
         
             
                  end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                  def prioritized_packages
         
     | 
| 
         @@ -22,15 +22,13 @@ module Spree 
     | 
|
| 
       22 
22 
     | 
    
         
             
                    packages.each do |package|
         
     | 
| 
       23 
23 
     | 
    
         
             
                      package.contents.each do |item|
         
     | 
| 
       24 
24 
     | 
    
         
             
                        adjuster = find_adjuster(item)
         
     | 
| 
       25 
     | 
    
         
            -
                        if adjuster.nil?
         
     | 
| 
       26 
     | 
    
         
            -
                          adjuster = build_adjuster(item, package)
         
     | 
| 
       27 
     | 
    
         
            -
                        end
         
     | 
| 
      
 25 
     | 
    
         
            +
                        adjuster = build_adjuster(item, package) if adjuster.nil?
         
     | 
| 
       28 
26 
     | 
    
         
             
                        adjuster.adjust(package, item)
         
     | 
| 
       29 
27 
     | 
    
         
             
                      end
         
     | 
| 
       30 
28 
     | 
    
         
             
                    end
         
     | 
| 
       31 
29 
     | 
    
         
             
                  end
         
     | 
| 
       32 
30 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                  def build_adjuster(item,  
     | 
| 
      
 31 
     | 
    
         
            +
                  def build_adjuster(item, _package)
         
     | 
| 
       34 
32 
     | 
    
         
             
                    @adjusters[hash_item item] = @adjuster_class.new(item.inventory_unit)
         
     | 
| 
       35 
33 
     | 
    
         
             
                  end
         
     | 
| 
       36 
34 
     | 
    
         | 
| 
         @@ -43,7 +41,7 @@ module Spree 
     | 
|
| 
       43 
41 
     | 
    
         
             
                  end
         
     | 
| 
       44 
42 
     | 
    
         | 
| 
       45 
43 
     | 
    
         
             
                  def prune_packages
         
     | 
| 
       46 
     | 
    
         
            -
                    packages.reject! 
     | 
| 
      
 44 
     | 
    
         
            +
                    packages.reject!(&:empty?)
         
     | 
| 
       47 
45 
     | 
    
         
             
                  end
         
     | 
| 
       48 
46 
     | 
    
         | 
| 
       49 
47 
     | 
    
         
             
                  def hash_item(item)
         
     | 
| 
         @@ -2,21 +2,19 @@ module Spree 
     | 
|
| 
       2 
2 
     | 
    
         
             
              module Stock
         
     | 
| 
       3 
3 
     | 
    
         
             
                module Splitter
         
     | 
| 
       4 
4 
     | 
    
         
             
                  class Backordered < Spree::Stock::Splitter::Base
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
5 
     | 
    
         
             
                    def split(packages)
         
     | 
| 
       7 
6 
     | 
    
         
             
                      split_packages = []
         
     | 
| 
       8 
7 
     | 
    
         
             
                      packages.each do |package|
         
     | 
| 
       9 
     | 
    
         
            -
                         
     | 
| 
      
 8 
     | 
    
         
            +
                        unless package.on_hand.empty?
         
     | 
| 
       10 
9 
     | 
    
         
             
                          split_packages << build_package(package.on_hand)
         
     | 
| 
       11 
10 
     | 
    
         
             
                        end
         
     | 
| 
       12 
11 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
                         
     | 
| 
      
 12 
     | 
    
         
            +
                        unless package.backordered.empty?
         
     | 
| 
       14 
13 
     | 
    
         
             
                          split_packages << build_package(package.backordered)
         
     | 
| 
       15 
14 
     | 
    
         
             
                        end
         
     | 
| 
       16 
15 
     | 
    
         
             
                      end
         
     | 
| 
       17 
16 
     | 
    
         
             
                      return_next split_packages
         
     | 
| 
       18 
17 
     | 
    
         
             
                    end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
18 
     | 
    
         
             
                  end
         
     | 
| 
       21 
19 
     | 
    
         
             
                end
         
     | 
| 
       22 
20 
     | 
    
         
             
              end
         
     | 
| 
         @@ -4,7 +4,7 @@ module Spree 
     | 
|
| 
       4 
4 
     | 
    
         
             
                  class Base
         
     | 
| 
       5 
5 
     | 
    
         
             
                    attr_reader :packer, :next_splitter
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
                    def initialize(packer, next_splitter=nil)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    def initialize(packer, next_splitter = nil)
         
     | 
| 
       8 
8 
     | 
    
         
             
                      @packer = packer
         
     | 
| 
       9 
9 
     | 
    
         
             
                      @next_splitter = next_splitter
         
     | 
| 
       10 
10 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -15,11 +15,12 @@ module Spree 
     | 
|
| 
       15 
15 
     | 
    
         
             
                    end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                    private
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       18 
19 
     | 
    
         
             
                    def return_next(packages)
         
     | 
| 
       19 
20 
     | 
    
         
             
                      next_splitter ? next_splitter.split(packages) : packages
         
     | 
| 
       20 
21 
     | 
    
         
             
                    end
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                    def build_package(contents=[])
         
     | 
| 
      
 23 
     | 
    
         
            +
                    def build_package(contents = [])
         
     | 
| 
       23 
24 
     | 
    
         
             
                      Spree::Stock::Package.new(stock_location, contents)
         
     | 
| 
       24 
25 
     | 
    
         
             
                    end
         
     | 
| 
       25 
26 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -11,6 +11,7 @@ module Spree 
     | 
|
| 
       11 
11 
     | 
    
         
             
                    end
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                    private
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       14 
15 
     | 
    
         
             
                    def split_by_category(package)
         
     | 
| 
       15 
16 
     | 
    
         
             
                      categories = Hash.new { |hash, key| hash[key] = [] }
         
     | 
| 
       16 
17 
     | 
    
         
             
                      package.contents.each do |item|
         
     | 
| 
         @@ -21,7 +22,7 @@ module Spree 
     | 
|
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
                    def hash_to_packages(categories)
         
     | 
| 
       23 
24 
     | 
    
         
             
                      packages = []
         
     | 
| 
       24 
     | 
    
         
            -
                      categories.each do | 
     | 
| 
      
 25 
     | 
    
         
            +
                      categories.each do |_id, contents|
         
     | 
| 
       25 
26 
     | 
    
         
             
                        packages << build_package(contents)
         
     | 
| 
       26 
27 
     | 
    
         
             
                      end
         
     | 
| 
       27 
28 
     | 
    
         
             
                      packages
         
     | 
| 
         @@ -96,7 +96,7 @@ module Spree 
     | 
|
| 
       96 
96 
     | 
    
         
             
                  # the variant_id changes from nil when a new stock location is added
         
     | 
| 
       97 
97 
     | 
    
         
             
                  stock_changed = (saved_change_to_count_on_hand? &&
         
     | 
| 
       98 
98 
     | 
    
         
             
                                    saved_change_to_count_on_hand.any?(&:zero?)) ||
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
      
 99 
     | 
    
         
            +
                    saved_change_to_variant_id?
         
     | 
| 
       100 
100 
     | 
    
         | 
| 
       101 
101 
     | 
    
         
             
                  variant.touch if !Spree::Config.binary_inventory_cache || stock_changed
         
     | 
| 
       102 
102 
     | 
    
         
             
                end
         
     |