-
Implement stock location sorters #2783 (aldesantis)
-
Fix multiple Money deprecation warnings. Now using html_wrap option which causes each piece of the price to be wrapped in span tags with specific classes for easier styling, but this may break existing stores' custom styles. #2912 (JDutil)
Rails 5.2.1
Added support for Rails 5.2.1. Solidus 2.7.0 supports either Rails 5.2.x or 5.1.
Guides
Added the new guides website code directly into the main repository. This way it should be simpler to keep guides up to date.
- Update guides ffi gem #2838 (kennyadsl)
- add documentation for making new Solidus extensions #2813 (jacobherrington)
- Fix guides typos and clean up example code blocks #2785 (benjaminwil)
- Update promotion-rules.md #2764 (bazfer)
- Add links to guides.solidus.io in Solidus's README.md and clean up README formatting #2763 (benjaminwil)
- Tweak documentation site Middleman configuration #2762 (benjaminwil)
- Add documentation about variants for end users #2761 (benjaminwil)
- Add documentation about product properties for end users #2759 (benjaminwil)
- Add initial stock documentation for end users #2757 (benjaminwil)
- Add promotion actions and promotion calculators documentation for end users #2755 (benjaminwil)
- Add Gemfile.lock to docs site project #2752 (jgayfer)
- Add initial zones documentation for end users #2750 (benjaminwil)
- Add initial taxation documentation for end users #2749 (benjaminwil)
- Fix security vulnerabilities in docs site #2747 (jgayfer)
- Add initial user management documentation for end users #2745 (benjaminwil)
- Update promotion-rules.md #2742 (bazfer)
- Move guides to new docs site #2740 (jgayfer)
- Add docs site shell #2739 (jgayfer)
- Add initial promotions documentation for end users #2735 (benjaminwil)
- Add initial product documentation for end users #2723 (benjaminwil)
- Overview documentation for the Solidus API #2714 (benjaminwil)
- Set correct quantity on order import #2837 (fastjames)
- Money#allocate calculates weights already #2836 (huoxito)
- Update user_class_handle.rb #2832 (bazfer)
- Allow customizing the promotion code batch mailer class #2796 (jtapia)
- Allow customizing the reimbursement mailer class #2795 (jtapia)
- Allow customizing the order mailer class #2792 (jtapia)
- Compatibility with Rails 5.2.1 & Ransack #2826 (kennyadsl)
- Move factory_bot static attrs to dynamic #2831 (fastjames)
- Use Spree.user_class.table_name instead of spree_users #2815 (masatooba)
- Fix a store credit spec that is time zone dependent #2778 (kennyadsl)
- Making sure order by columns do not collide with other tables #2774 (softr8)
- Fix permissions for users to change their own orders #2787 (kennyadsl)
- Fix space between taxons on admin taxonomies #2812 (jtapia)
- Fix issue not updating payment method type on admin #2788 (jtapia)
- Tracking Number link to Tracking URL page #2829 (JuanCrg90)
- make customer email field required when an admin is making a new order #2771 (jacobherrington)
- Fix bug with user address forms #2766 (jacobeubanks)
- Dynamically render ReportsController translations #2751 (stewart)
- Add missing data-hook on customer_returns tab #2738 (fkoessler)
- Require sass >= 3.5.2 #2734 (gmacdougall)
- The promotions "Advertise" checkbox and the "URL Path" promotion activation method have been removed from the admin UI because the features are not implemented in solidus_frontend #2737 (benjaminwil
- Use a different session key for admin locale #2685 (jhawthorn)
- Disable backend footer profile edit link if role cannot edit users #2646 (gianlucarizzo)
- Improve admin return authorization controller #2420 (kennyadsl)
- The
TaxonsController#show
action loads now the@taxon
in abefore_action
callback. This means that if you overrode theshow
method you may be loading the@taxon
variable twice. You can now change the behaviour of how the@taxon
is loaded overriding theload_taxon
method instead. #2782 (coorasse) - Move checkout coupon code section into summary. Now passing [:order][:coupon_code] into any controller of the frontend will not perform any action, while it was trying to add a new coupon code before. It now only works in checkout and orders controller. #2327 (kennyadsl)
Rails 5.2
This is the first version of Solidus to support Rails 5.2. Solidus 2.6.0 supports either Rails 5.1 or 5.2. We're hoping this makes both upgrades as easy as possible since they can be done separately.
Merged solidus_i18n functionality
Much of solidus_i18n's functionality has been merged into Solidus itself. Solidus now allows configuring one or more locales per-store in the admin. Both users and admins can select their preferred locales on the frontend or admin respectively. More information on how to upgrade can be found in the solidus_i18n README.
Guides
A lot of work has gone into guides, which are now much more comprehensive. A website to host them is in the works but for now they can be seen on github
- Upgrade cancancan to 2.x #2731 (jhawthorn)
- Replace
uniq
withdistinct
for cartons association #2710 (DanielePalombo) - Allow #try_spree_current_user to search for private methods #2694 (spaghetticode)
- Remove assert_written_to_cache #2691 (jhawthorn)
- cleanup order validate_payments_attributes #2696 (ccarruitero)
- Load email validator from core instead of order #2669 (jhawthorn)
- Promo code batch join chars #2662 (gevann)
- Move EmailValidator under Spree namespace #2635 (tvdeyen)
- Remove protected_attributes warning #2615 (jhawthorn)
- Namespace all testing_support/ files under Spree::TestingSupport namespace #2629 (jhawthorn)
- Remove foreign key from promotion_rules_stores #2603 (jhawthorn)
- Generate new stores with MySQL timestamp precision 6 #2598 (jhawthorn)
- Add frozen_string_literal: true to all files #2586 (jhawthorn)
- Distribute over eligible line items #2582 (Sinetheta)
- Add mutable false to default refund reason record #2574 (mdesantis)
- Specify inheritance for Spree::Promotion #2572 (SamuelMartini)
- Remove foreign key from store_shipping_methods #2596 (jhawthorn)
- Add options to PromotionCode::BatchBuilder and spec for unique promotion code contention #2579 (jhawthorn)
- Set HttpOnly flag when sending guest_token cookie #2633 (luukveenis)
- Splitting shipment should update order totals/payment status #2555 (VzqzAc)
- Add store promotion rule #2552 (adammathys)
- Add association between stores and shipping #2557 (adammathys)
- Make partially shipped shipment able to be ready #2634 (jhawthorn)
- Remove order_stock_locations association #2672 (jhawthorn)
- Generate correct number of codes in BatchBuilder #2578 (jhawthorn)
- Add amount_remaining for Spree::StoreCreditEvent #1512 (mtylty)
- Add per-store configurable locales #2674 (jhawthorn)
- Move Spree::Taxon#applicable_filters (rebase) #2670 (jhawthorn)
- Translate reception states and fix translation key #2283 (rbngzlv)
- Remove hardcoded admin store attributes #2713 (jtapia)
- Improve the admin UX for a product's "Available On" field #2704 (benjaminwil)
- UI fixes for admin locale select #2684 (tvdeyen)
- Set model_class on admin promotion rules controller #2623 (luukveenis)
- Fix admin payment actions style table issue #2589 (jtapia)
- Allowing admin to show all countries regardless checkout zone #2588 (softr8)
- Add locale chooser to admin #2559 (jhawthorn)
- Fix css class in taxons #2705 (yono)
- Backend stock movements improvements #2612 (kennyadsl)
- adding link to product in backend order summary #2609 (loicginoux)
- Properly limit per-quantity calculator types #2590 (Sinetheta)
- Avoid frozen string error in button helper #2592 (jhawthorn)
- Deprecate payment_method_name helper #2657 (jhawthorn)
- Fix API url when editing image alt text #2625 (loicginoux)
- Replace button_link_to with either button_to or link_to #2601 (jhawthorn)
- Replace button helper with standard button_tag #2600 (jhawthorn)
- Negative count on hand red #2682 (gevann)
- Match a closing tag in order_summary #2681 (shikolay)
- Fixing the promotion categories error message #1346 (mgharbik)
- Remove promotion_code from adjustment_attributes #2663 (gevann)
- Clean CheckoutsController routes #2649 (gevann)
- Update no_objects_found partial to allow not show new resource link #2289 (ccarruitero)
- Fix view for orders api (Fixes Issue #2512) #2513 (skukx)
- Add meta_title to product response #2480 (loicginoux)
- Creating an order should activate promotions #2576 (loicginoux)
- Render shipment json when payment source is nil #2611 (loicginoux)
- Fix
<td>
closing tag #2703 (dportalesr) - Fix duplicate variants on product page #2630 (mamhoff)
- Fix error when listing products without price #2605 (jhawthorn)
- Fix redirect to cart #2585 (matteocellucci)
- Add locale selector to frontend nav bar #2683 (jhawthorn)
- Filter unpriced products in taxon_preview #2604 (jhawthorn)
- Improve frontend checkout forms html #2416 (kennyadsl)
- Make frontend's LocaleController compatible with solidus_i18n #2626 (jhawthorn)
- Indent nested taxon menues and highlight the selected taxons. #2316 (bofrede)
- Fix typos and formatting in Solidus guides #2729 (benjaminwil)
- Add a documentation contributors guide #2718 (benjaminwil)
- Make documentation clearer and fix invalid links #2717 (benjaminwil)
- Add multiple typo fixes in the guides #2716 (Shkrt)
- Add documentation for Spree::Reimbursements and Spree::ReimbursementTypes #2678 (benjaminwil)
- Add documentation for Spree::CustomerReturn model #2677 (benjaminwil)
- Add documentation of Spree::ReturnItem model #2676 (benjaminwil)
- Add initial Solidus upgrades documentation #2641 (benjaminwil)
- Add initial Spree migration article #2640 (benjaminwil)
- Fix YARD warnings throughout core #2636 (jhawthorn)
- Add yard rake task #2632 (jhawthorn)
- Fix typo in CheckoutController comment #2631 (jgayfer)
- Rewrite payment processing documentation; add Spree::Order#payment_states documentation #2624 (benjaminwil)
- Add documentation introducing payment service providers #2620 (benjaminwil)
- Add documentation for the Spree::Payment model #2619 (benjaminwil)
- Rewrite article documenting payment methods #2618 (benjaminwil)
- Add initial documentation about payment sources #2617 (benjaminwil)
- Rewrite payments overview documentation #2613 (benjaminwil)
- Documentation touchup #2591 (jormon)
- Add documentation for stock items and stock movements #2539 (benjaminwil)
- Add documentation overview of inventory #2538 (benjaminwil)
- Add a stub article that summarizes Solidus's built-in tax calculator #2526 (benjaminwil)
- Add documentation that summarizes Solidus's built-in shipping calculators #2525 (benjaminwil)
- Add documentation that summarizes Solidus's built-in promotion calculators #2524 (benjaminwil)
- Initial calculators documentation #2511 (benjaminwil)
- Initial orders documentation #2498 (benjaminwil)
- Addresses documentation #2471 (benjaminwil)
- Initial promotions documentation #2467 (benjaminwil)
- Adjustments documentation #2459 (benjaminwil)
- Guides: Links and syntax fixes #2709 (tvdeyen)
- Fix markdown link syntax in payment service provider guide #2708 (tvdeyen)
- Fix the code syntax in installation options guide #2707 (tvdeyen)
- Add a guides index and generator #2671 (tvdeyen)
- Split existing configuration guide #2488 (benjaminwil)
- add payments guide #2388 (ccarruitero)
- Add overview of returns system #2675 (benjaminwil)
- Port extension testing document from wiki #2642 (benjaminwil)
- Update Orders state machine doc removing confirmation_required text #2658 (kennyadsl)
- Improve PaymentMethod docs and add some deprecations #2650 (jhawthorn)
- Remove generators from YARD docs #2651 (jhawthorn)
- Add custom authentication (User model) setup article #2581 (benjaminwil)
- Add article about views for new Rails developers #2560 (benjaminwil)
Previously Solidus used paranoia
to handle soft-deletion.
paranoia
, on acts_as_paranoid
models, replaces ActiveRecord's delete
and destroy
methods and instead of deleting the record sets the deleted_at
column.
This has been the cause of some surprising behaviour for users old and new.
In this version we are beginning to deprecate this using the discard
gem.
- Use paranoia_ prefixed methods #2350 (jhawthorn)
- Convert store credits to discard #2489 (jhawthorn)
- Convert shipping methods, payment methods, and tax rates to discard #2487 (jhawthorn)
- Convert promotion actions from paranoia to discard #2398 (jhawthorn)
- Convert product, variant, stock item, prices to discard #2396 (jhawthorn)
solidus_stock_transfers provides an admin interface to transfer stock between two locations. This used to be included in core but has been extracted to a gem.
- Extract stock transfers to the solidus_stock_transfers gem. #2379 (jhawthorn)
- Generate correct number of codes in BatchBuilder #2578 (jhawthorn)
- Add mutable false to default refund reason record #2574 (mdesantis)
- Use carmen to translate
available_countries
helper #2537 (jhawthorn) - Introduce "suppliable" scope to represent any variant which can_supply?(1) #2536 (jhawthorn)
- Fix calculator class check bug #2501 (pelargir)
- Allow
remove_default_tax
migration to be reversible #2496 (brchristian) - Make credit card parameter filtering more specific #2481 (jordan-brough)
- Improve product -> master attributes delegation #2474 (kennyadsl)
- Make the install generator idempotent #2472 (tvdeyen)
- Update totals after order_with_totals create #2470 (BravoSimone)
- Fixes for MySQL #2468 (jhawthorn)
- Prepare for Rails 5.2 #2465 (jhawthorn)
- New preference to control available currencies #2461 (softr8)
- Avoid changing method visibility when deprecating a method #2449 (jordan-brough)
- Require kaminari ~> 1.1 and some related improvements #2443 (jhawthorn)
- remove redundant delegation from product model #2427 (brchristian)
- Use I18n date format for
pretty_time
helper #2419 (tvdeyen) - Use a single top-level Gemfile for test dependencies #2407 (jhawthorn)
- Unify how we create sample store in default and sample data #2405 (kennyadsl)
- Update
updated_at
timestamp on eligibility change #2390 (adaddeo) - Remove stringex as a dependency of core #2383 (swcraig)
- Fixes for custom user generator #2382 (tvdeyen)
- Remove order association from inventory units #2377 (mamhoff)
- Move role configuration into Spree::Config #2374 (jhawthorn)
- Avoid loading models when requiring factories #2369 (jhawthorn)
- Allow loading solidus_core without Sprockets #2358 (jhawthorn)
- Improve
selected_shipping_rate_id=
#2355 (jhawthorn) - Change
make_permalink
behaviour #2341 (jhawthorn) - Follow FactoryBot rename #2315 (mamhoff)
- Fix module/class nesting in calculator/* #2312 (cbrunsdon)
- Require only part of activemerchant #2311 (mamhoff)
- Replace Spree.t with plain I18n.t #2309 (jhawthorn)
- Improve
ShippingRate#display_price
with taxes #2306 (jhawthorn) - Allow access to
Spree::Core::Environment
throughSpree::Config
#2291 (cbrunsdon) - Explicitly require cancan where used #2290 (cbrunsdon)
- Update translation for Adjustment Label #2287 (gregdaynes)
- Fix restocking and unstocking backordered items in FulfilmentChanger #2286 (DanielePalombo)
- Fix return url after fire in return_authorizations controller #2284 (rbngzlv)
- Remove
after_rollback
from LogEntry #2280 #2277 (reidcooper jhawthorn) - Make
solidus_core
depend on actionmailer and activerecord instead of rails #2272 (BenMorganIO) - Improve performance of Taxon promotion rule #2258 (gmacdougall)
- Fix class definition of variant #2248 (cbrunsdon)
- Updating classification should touch product #2238 (loicginoux)
- Avoid duplicate queries when running estimator taxation. #2219 (jhawthorn)
- Add eligibility checking to automatic free shipping promotions #2187 (fylooi)
- Strip whitespace surrounding promotion codes. #1796 (eric1234)
- Add missing indexes for
Spree::Taxon
lft and rgt columns #1779 (vfonic) - Methods for
Spree::Taxon
for all products/variants from descendants #1761 (dgra) - Fix RMA amount calculator #1590 (DanielePalombo)
- Allow cancelling orders that have been fully refunded #1355 (Sinetheta)
- Simplify Coupon PromotionHandler #521 (jhawthorn)
- Splitting shipment should update order totals and payment status #2555 (VzqzAc
- Add mutable false to default refund reason record #2574 (mdesantis)
- Generate correct number of codes in BatchBuilder #2578 (jhawthorn)
- Remove
Spree::OrderUpdater#round_money
#2344 (swcraig) - Remove testing_support/i18n #2340 (jhawthorn)
- Remove ffaker #2339 (jhawthorn)
- Deprecate AdjustmentSource#deals_with_adjustments_for_deleted_source #2259 (cbrunsdon)
- Remove remnants of location configured packages #2270 (jhawthorn)
- Deprecate class method in
Calculator::FlexiRate
#2305 (swcraig) - Improve deprecation message for 'deprecated_method_type_override' #2494 (jordan-brough)
- Deprecate Searcher::Base method_missing properties magic #2464 (jhawthorn)
- Deprecate weird taxon product filters #2408 (cbrunsdon)
-
Replace frontend jquery validations with html5 #2264 (cbrunsdon, jhawthorn)
We've removed jquery validations on checkout address form, replacing them with html5 input validations. If your store relies on jquery validation you should re-add that library in your store. Otherwise, if you use the old view version (without
required: true
attributes on input) your address form will not be validated on client side. -
Add frontend login_bar_items placeholder partial #2308 (jhawthorn)
-
Remove required attribute from address lastname #2393 (kennyadsl)
-
Convert frontend's CoffeeScript to javascript #2378 (jhawthorn)
-
Convert Cart total/subtotal CSS colors to vars #2288 (gregdaynes)
-
Use empty? instead of length == 0 #2282 (brchristian)
-
Use
line_item_adjustments
inspree/shared/_order_details
#2257 (cbrunsdon) -
Fix error when listing products without price #2605 (jhawthorn)
- Change instances of "udpate" to "update" #2533 (dsojevic)
- Add default to address_requires_state #2532 (brchristian)
- Standardize documentation #2531 (brchristian)
- Shipments documentation #2353 (benjaminwil)
- Add initial RMA and return authorization documentation #2540 (benjaminwil)
- Update README.md summary about testing #2442 (benjaminwil)
- Improve master variant documentation #2521 (benjaminwil)
- Products and variants documentation #2437 (benjaminwil)
- Getting started documentation #2433 (benjaminwil)
- Assets documentation #2418 (benjaminwil)
- Taxation documentation #2403 (benjaminwil)
- Locations documentation #2375 (benjaminwil)
- Tweaks to override-solidus-assets.md #2482 (jhawthorn)
- Simplify instructions in README.md for testing all projects #2444 (jhawthorn)
- Add a reference to solidus_cmd in README #2349 (afdev82)
- Remove duplication in API variants controller #2301 (swcraig)
- Remove versioncake #2307 (jhawthorn)
- Reference full Spree::StockLocation class name in stock_items_controller.rb #2543 (VitaliyAdamkov)
- Deprecate JSTree api routes #2254 (kennyadsl)
- Avoid JSON serializing Float::INFINITY #2495 (jhawthorn)
- Creating an order should activate promotions #2565 (mathportillo)
- Add store select to payment method admin #2550 (adammathys)
- Refactor and convert Tabs component from CoffeeScript to JS #2549 (jhawthorn)
- Better organize stock management JS and convert from coffeescript #2548 (jhawthorn)
- Simplify store_credit memo edit JS #2547 (jhawthorn)
- Convert trivial coffee to plain JS #2546 (jhawthorn)
- Use backbone StateSelect view for stock locations form #2542 (jhawthorn)
- Simplify and improve stock locations form #1523 (jhawthorn)
- Allow use of Turbolinks in admin #1863 (tvdeyen)
- Change order search to using starts over cont #1660 (gmacdougall)
- Exclude canceled orders from sales report #2131 (brchristian)
- Default backend navigation footer #2261 (gregdaynes)
- Provide a default
_navigation_footer.html.erb
#1450 (jrochkind) - Improve HTTP usage in update_positions #2528 (jhawthorn)
- Add form submit events to several backbone views #2244 (tvdeyen)
- Add required to product master price field #2262 (gregdaynes)
- Upgrade bootstrap to 4.0.0 #2516 #2310 (jhawthorn)
- Remove unused admin helpers #2515 (jhawthorn)
- Remove jquery-ui datepicker #2510 (jhawthorn)
- Use datalist instead of jquery-ui/autocomplete #2509 (jhawthorn)
- Switch from jQuery UI datepicker to flatpickr #2506 (jhawthorn)
- Remove unused extra data in products controller #2505 (jhawthorn)
- Allow selecting admin-only shipping methods #2499 (jhawthorn)
- Use nested checkboxes and radio buttons all over admin #2429 (tvdeyen)
- Restore field for editing promotion per_code_usage_limit in admin #2497 (jordan-brough)
- Replace new product inline form with normal form #2493 (jhawthorn)
- Fix
preference_field_tag
when given no type #2278 (jhawthorn) - Generate
js_locale_data
usingJSON.dump
#2304 (jhawthorn) - Improve API key on user edit page #2243 (jhawthorn)
- Fix closing thead tag on store credit table #2274 (luukveenis)
- Create multiple page states for stock transfers #2263 (jtapia)
- Remove zombie tooltips with MutationObserver #2421 (kennyadsl)
- Simplify "inline" new image form #2391 (jhawthorn)
- Remove state.coffee #2392 (jhawthorn)
- Remove jQuery UI #2527 (jhawthorn)
- Replace jQuery ui's sortable with Sortable.js #2523 (jhawthorn)
- Promotions admin UI fixes #2400 (tvdeyen)
- Do not render complex preference types as form fields #2394 (tvdeyen)
- Re-enable bootstrap tooltips animations #2334 (kennyadsl)
- Store credit admin UI fixes #2426 (tvdeyen)
- Remove bourbon from admin #2491 (jhawthorn)
- Admin order shipments ui cleaning #2414 (tvdeyen)
- Admin line item ui fixes #2413 (tvdeyen)
- Fix select2 above styles #2412 (tvdeyen)
- Admin order payments ui cleanup #2411 (tvdeyen)
- Add data-action classes to admin orders cart templates #2384 (kennyadsl)
- Admin address fixes and extra address validation #2371 (jordan-brough)
- Explicitly define backend/promotions routes #2332 (vladstoick)
- Remove bottom border of non-form fieldsets #2425 (tvdeyen)
- Move editing of shipment method and tracking into JS views and templates #2225 (jhawthorn)
- Center "no objects found" messages #2424 (tvdeyen)
- Improve look of missing I18n strings #2333 (kennyadsl)
- Give line-item-select-variant a max-width #2492 (jhawthorn)
- Fix action classes on admin tables #2336 (kennyadsl)
- Remove useless before-highlight class from table lines #2335 (kennyadsl)
- Remove unused methods in stock_transfers_controller #2294 (ccarruitero)
- Fix issue loading select2 locale for es-MX #2356 #2365 (jtapia dportalesr)
- Remove delimiter on number with currency field #2428 (lgiacalone3)
- Allow ShipmentsController#remove on ready shipment #2385 (alepore)
- Use single quotes to workaround deface issue #2361 (afdev82)
- Display country correctly when editing price #2266 (jhawthorn)
-
Replace RABL with Jbuilder #2147 #2146 (jhawthorn)
We've changed our JSON templating language for both the API and admin from RABL to Jbuilder. Jbuilder is faster and much more widely used (ships with Rails).
API responses should be identical, but stores which customized API responses using RABL or added their own endpoints which extended Solidus' RABL partials will need to be updated.
-
Remove rescue_from StandardError in Api::BaseController #2139 (jhawthorn)
Previously, exceptions raised in the API were caught (via
rescue_from
) and didn't reach the default Rails error handler. This caused many exceptions to avoid notice, both in production and in tests.This has been removed and exceptions are now reported and handled normally.
-
New admin table design #2159 #2100 #2143 #2123 #2165 (Mandily, graygilmore, tvdeyen)
Tables throughout the admin have been redesigned to be simpler and clearer. Borders between cells of the same row have been dropped, row striping has been removed, and icons are simpler and more clearly attached to their row.
-
Introduce Stock::SimpleCoordinator #2199 (jhawthorn)
The previous stock coordinator had incorrect behaviour when any stock location was low on stock.
The existing stock coordinator classes, Coordinator, Adjuster, Packer, and Prioritizer, have been replaced with the new Stock::SimpleCoordinator. In most cases this will coordinate stock identically to the old system, but will succeed for several low-stock cases the old Coordinator incorrectly failed on.
Stores which have customized any of the old Coordinator classes will need to either update their customizations or include the solidus_legacy_stock_system extension, which provides the old classes.
-
Replace Stock::Coordinator with Stock::SimpleCoordinator #2199 (jhawthorn)
-
Wrap Splitter chaining behaviour in new Stock::SplitterChain class #2189 (jhawthorn)
-
Remove Postal Code Format Validation (and Twitter CLDR dependency) #2233 (mamhoff)
-
Switch factories to strings instead of constants #2230 (cbrunsdon)
-
Roll up migrations up to Solidus 1.4 into a single migration #2229 (cbrunsdon)
-
Support non-promotion line-level adjustments #2188 (jordan-brough)
-
Fix StoreCredit with multiple currencies #2183 (jordan-brough)
-
Remove duplicate error on StoreCredit#authorize failure #2180 (jordan-brough)
-
Add
dependent: :destroy
for ShippingMethodZones join model #2175 (jordan-brough) -
Fix method missing error in ReturnAuthorization#amount #2162 (luukveenis)
-
Use constants instead of translations for
StoreCreditType
names #2157 (swcraig) -
Enable custom shipping promotions via config.spree.promotions.shipping_actions #2135 (jordan-brough)
-
Validate that Refunds have an associated Payment #2130 (melissacarbone)
-
Include completed payment amounts when summing totals for store credit #2129 (luukveenis)
-
Allow dev mode code reloading of configured classes #2126 (jhawthorn)
-
Override model_name.human for PaymentMethod #2107 (jhawthorn)
-
Reduce number of SQL statements in countries seeds #2097 (jhawthorn)
-
Rename Adjustment#update! to Adjustment#recalculate #2086 (jhawthorn)
-
Rename Shipment#update! to Shipment#update_state #2085 (jhawthorn)
-
Fix shipping method factory for stores with alternate currency #2084 (Sinetheta)
-
Added a configurable
Spree::Payment::Cancellation
class #2111 (tvdeyen) -
Remove
set_current_order
calls inSpree::Core::ControllerHelpers::Order
#2185 (Murph33)Previously a before filter added in
core/lib/spree/core/controller_helpers/order.rb
would cause SQL queries to be used on almost every request in the frontend. If you do not use Solidus Auth you will need to hook into this helper and callset_current_order
where your user signs in. This merges incomplete orders a user has going with their current cart. If you do use Solidus Auth you will need to make sure you use a current enough version (>= v1.5.0) that includes this explicit call. This addresses #1116. -
Remove
ffaker
as a runtime dependency in production. It needs to be added to the Gemfile for factories to be used in tests #2163 #2140 (cbrunsdon, swcraig) -
Invalidate existing non store credit payments during checkout 2075 (tvdeyen)
-
The all configuration objects now use static preferences by default. It's no longer necessary to call
use_static_preferences!
, as that is the new default. For the old behaviour of loading preferences from the DB, callconfig.use_legacy_db_preferences!
. #2112 (jhawthorn) -
Assign and initialize Spree::Config earlier, before rails initializers #2178 (cbrunsdon)
- Replace RABL with Jbuilder #2147 #2146 (jhawthorn)
- Move API pagination into a common partial #2181 (jhawthorn)
- Fix references to nonexistent API attributes #2153 (jhawthorn)
- Remove rescue_from StandardError in Api::BaseController #2139 (jhawthorn)
- Fix error when passing coupon_code to api/checkouts#update #2136 (jhawthorn)
- Improved error handling and performance for moving inventory units between shipments and stock locations #2070 (mamhoff)
- Remove unnecessary Api::Engine.root override #2128 (jhawthorn)
- Upgrade to Bootstrap 4.0.0-beta #2156 (jhawthorn)
- Admin Sass Organization #2133 (graygilmore)
- Remove Skeleton Grid CSS from the admin and complete its transition to Bootstrap. #2127 (graygilmore)
- Fix issue with user_id not being set on "customer" page #2176 (ericsaupe, swcraig)
- Removed the admin functionality to modify countries and states #2118 (graygilmore). This functionality, if required, is available through the solidus_countries_backend extension.
- Change table action icons style #2100 (tvdeyen)
- Use number_with_currency widget on new refund page #2088 (jhawthorn)
- Fix admin user order history table #2226 (Sinetheta)
- Replace Admin table styles #2159 (Mandily, graygilmore, tvdeyen, jhawthorn)
- Inherit body colour for labels #2242 (jhawthorn)
- Remove action button background color #2144 (tvdeyen)
- Remove images border in tables #2143 (tvdeyen)
- Pill Component #2123 (graygilmore)
- Display a pointer cursor hovering add variant buttons #2062 (kennyadsl)
- Use translated model names in admin payment methods form #1975 (tvdeyen)
- Add missing default_currency field on admin/stores #2091 (oeN)
- UI Fixes for taxons tree #2148 (tvdeyen)
- Make checkout billing address inputs full width #2171 (notapatch)
- Fixes padding of lists in form fields #2170 (tvdeyen)
- Capitalize event buttons in
OrdersHelper
#2177 (swcraig) - Fix backend data-action across multiple files #2184 (kennyadsl)
- New users table layout #1842 (tvdeyen)
- Add headers to shipment method and tracking number #2169 (tvdeyen)
- Fix typo on shipment method edit #2168 (jhawthorn)
- Fix action button hover style #2167 (tvdeyen)
- Show table borders on action columns #2165 (jhawthorn)
- Tweak font styles on admin shipments page #2164 (jhawthorn)
- Use payment.number instead of payment.identifier in admin view #2222 (jordan-brough)
- Exclude Bootstrap buttons from our button styling #2158 (graygilmore)
- Move users search form above table #2094 (graygilmore)
- Preview Images in a Modal #2101 (graygilmore)
- Change product's price color away from link color #2174 (notapatch)
- Move OrdersHelper from Core to Frontend #2081 (dangerdogz)
- Checkout email input field should use email_field #2120 (notapatch)
- Remove unused Paperclip spec matchers #2197 (swcraig)
- Remove tax refunds #2196 (mamhoff)
- Remove PriceMigrator #2194 (cbrunsdon)
- Remove task to copy shipped shipments to cartons #2193 (cbrunsdon)
- Remove upgrade task/spec #2192 (cbrunsdon)
- Remove unhelpful preload in Stock::Estimator #2207 (jhawthorn)
- Remove unused register call in calculator #2206 (cbrunsdon)
- Remove autoload on product_filters #2190 (cbrunsdon)
- Remove identical inheritied methods in
Spree::StoreCredit
#2200 (swcraig) - Remove custom responders. They are now available in the
solidus_responders
extension. #1956 (omnistegan) - Remove responders dependency from core #2090 (cbrunsdon)
- Deprecate .calculators #2216 (cbrunsdon)
- Deprecate pagination in searcher #2119 (cbrunsdon)
- Deprecate tasks in core/lib/tasks #2080 (cbrunsdon)
- Deprecate Spree::OrderCapturing class #2076 (tvdeyen)
- Deprecated
Spree::PaymentMethod#cancel
#2111 (tvdeyen) Please implement atry_void
method on your payment method instead that returns a response object if void succeeds or false if not. Solidus will refund the payment then. - Deprecates several preference fields helpers in favor of preference field partials. #2040 (tvdeyen)
Please render
spree/admin/shared/preference_fields/#{preference_type}
instead - Check if deprecated method_type is overridden #2093 (jhawthorn)
- Deprecate support for alternate Kaminari page_method_name #2115 (cbrunsdon)
- Deprecate update_params_payment_source method #2227 (ccarruitero)
-
The default behaviour for selecting the current store has changed. Stores are now only returned if their url matches the current domain exactly (falling back to the default store) #2041 #1993 (jhawthorn, kennyadsl)
-
Order#outstanding_balance now uses reimbursements instead of refunds to calculate the amount that should be paid on an order. #2002 (many contributors ❤️)
-
Renamed bogus payment methods #2000 (tvdeyen)
Spree::Gateway::BogusSimple
andSpree::Gateway::Bogus
were renamed intoSpree::PaymentMethod::SimpleBogusCreditCard
andSpree::PaymentMethod::BogusCreditCard
-
Allow refreshing shipping rates for unshipped shipments on completed orders #1906 (mamhoff)
-
Remove line_item_options class attribute from Api::LineItemsController #1943
-
Allow custom separator between a promotion's
base_code
andsuffix
#1951 (ericgross) -
Ignore
adjustment.finalized
on tax adjustments. #1936 (jordan-brough) -
Transform the relation between TaxRate and TaxCategory to a Many to Many #1851 (vladstoick)
This fixes issue #1836. By allowing a TaxRate to tax multiple categories, stores don't have to create multiple TaxRates with the same value if a zone doesn't have different tax rates for some tax categories.
-
Adjustments without a source are now included in
line_item.adjustment_total
#1933 (alexstoick) -
Always update last_ip_address on order #1658 (bbuchalter)
-
Don't eager load adjustments in current_order #2069 (jhawthorn)
-
Avoid running validations in current_order #2068 (jhawthorn)
-
Fix Paperclip::Errors::NotIdentifiedByImageMagickError on invalid image #2064 (karlentwistle)
-
Fix error message on insufficient inventory. #2056 (husam212)
-
Make Address.find_all_by_name_or_abbr case-insensitive #2043 (jordan-brough)
-
Remove redundant methods on Spree::PaymentMethod::StoreCredit #2038 (skukx)
-
Fix ShippingMethod select for MySQL 5.7 strict #2024 (jhawthorn)
-
Use a subquery to avoid returning duplicate products from Product.available #2021 (jhawthorn)
-
Add some missing data to seeds which was added by migrations #1962 (BravoSimone)
-
Remove fallback first shipping method on shipments #1843 (mamhoff)
-
Assign default user addresses in checkout controller #1967 (kennyadsl)
-
Use user.default_address as a default if bill_address or ship_address is unset #1424 (yeonhoyoon, peterberkenbosch)
-
Add html templates for shipped_email and inventory_cancellation emails #1377 (DanielePalombo)
-
Don't
@extend
compound selectors in sass. Avoids deprecation warnings in sass 3.4.25 #2073 (jhawthorn)
- Configure admin turbolinks #1882 (mtomov)
- Allow users to inline update the variant of an image in admin #1580 (mtomov)
- Fix typo on fieldset tags #2005 (oeN)
- Use more specific selector for select2 #1997 (oeN)
- Replace select2 with <select class="custom-select"> #2034 #2030 (jhawthorn)
- Fix admin SQL issues with DISTINCT products #2025 (jhawthorn)
- Use
@collection
instead of@collection.present?
in some admin controllers #2046 (jordan-brough) - Admin::ReportsController reusable search params #2012 (oeN)
- Do not show broken links in admin product view when product is deleted #1988 (laurawadden)
- Allow admin to edit variant option values #1944 (dividedharmony)
- Do not refresh shipping rates everytime the order is viewed in the admin #1798 (mamhoff)
- Add form guidelines to the style guide #1582 (Mandily)
- Improve style guide flash messages UX #1964 (mtylty)
- Document tooltips in the style guide #1955 (gus4no)
- Fix path for distributed amount fields partial #2023 (graygilmore)
- Use
.all
instead of.where\(nil\)
in Admin::ResourceController #2047 (jordan-brough) - Fix typo on the new promotions form #2035 (swcraig)
- Use translated model name in admin payment methods form #1975 (tvdeyen)
- Renamed
Spree::Gateway
payment method intoSpree::PaymentMethod::CreditCard
#2001 (tvdeyen) - Deprecate
#simple_current_order
#1915 (ericsaupe) - Deprecate
PaymentMethod.providers
in favour ofRails.application.config.spree.payment_methods
#1974 (tvdeyen) - Deprecate
Spree::Admin::PaymentMethodsController#load_providers
in favour ofload_payment_methods
#1974 (tvdeyen) - Deprecate Shipment#add_shipping_method #2018 (jhawthorn)
- Re-add deprecated TaxRate#tax_category #2013 (jhawthorn)
- Deprecate
Spree::Core::CurrentStore
in favor ofSpree::CurrentStoreSelector
. #1993 - Deprecate
Spree::Order#assign_default_addresses!
in favor ofOrder.new.assign_default_user_addresses
. #1954 (kennyadsl) - Rename
PaymentMethod#method_type
intopartial_name
#1978 (tvdeyen) - Remove ! from assign_default_user_addresses!, deprecating the old method #2019 (jhawthorn)
- Emit Spree.url JS deprecation warning in all environments #2017 (jhawthorn)
- Fix migrating CreditCards to WalletPaymentSource #1898 (jhawthorn)
- Fix setting the wallet's default payment source to the same value #1888 (ahoernecke)
- Fix assigning nil to
default_wallet_payment_source=
#1896 (jhawthorn)
-
Spree::Wallet and Non credit card payment sources #1707 #1773 #1765 (chrisradford, jordan-brough, peterberkenbosch)
This adds support for payment sources other than
CreditCard
, which can be used to better represent other (potentially reusable) payment sources, like PayPal or Bank accounts. Previously sources like this had to implement all behaviour themselves, or try their best to quack like a credit card.This adds a
PaymentSource
base class, whichCreditCard
now inherits, and aWallet
service class to help manage users' payment sources. AWalletPaymentSource
join table is used to tie reusable payment sources to users, replacing the existing behaviour of allowing all credit cards with a stored payment profile. -
Add promotion code batch #1524 (vladstoick)
Prior to Solidus 1.0, each promotion had at most one code. Though we added the functionality to have many codes on one promotion, the UI for creation and management was lacking.
In Solidus 2.2 we've added
PromotionCodeBatch
, a model to group a batch of promotion codes. This allows additional promotion codes to be generated after the Promotion's initial creation. Promotion codes are also now generated in a background job. -
Admin UI Changes
The admin UI was once again a focus in this release. We've made many incremental changes we think all users will appreciate. This includes an upgrade to Bootstrap 4.0.0.alpha6, changes to table styles, and a better select style.
See the "Admin UI" section below for a full list of changes.
Spree::Order#available_payment_methods
returns anActiveRecord::Relation
instead of an array #1802 (luukveenis)- Product slugs no longer have a minimum length requirement #1616 (fschwahn)
Spree::Money
now includesComparable
and the<=>
operator for comparisons. #1682 (graygilmore )- Allow destruction of shipments in the "ready" state. #1784 (mamhoff)
- Do not consider pending inventory units cancelable #1800 (mamhoff)
- Rewrite spree.js in plain JS #1754 (jhawthorn)
- Make sensitive params filtering less eager #1755 (kennyadsl)
- Use manifest.js to support Sprockets 4 #1759 (jhawthorn)
- Update paperclip dependency #1749 (brchristian)
- Update kaminari dependency to 1.x #1734 (jrochkind)
- Allow twitter_cldr 4.x #1732 (jrochkind)
- Added LineItem name to unavailable flash #1697 (ericsaupe)
- Don't treat "unreturned exchanges" specially in checkout state machine flow #1690 (jhawthorn)
set_shipments_cost
is now part of OrderUpdater #1689 (jhawthorn)- Methods other than
update!
,update_shipment_state
,update_payment_state
are now private on OrderUpdater #1689 (jhawthorn)
AvailabilityValidator
correctly detects out of stock with multiple shipments from the same stock location. #1693 (jhawthorn)- Fix missing close paren in variantAutocomplete #1832 (jhawthorn)
- Set belongs_to_required_by_default = false #1807 (jhawthorn)
- Fix loading transfer shipments #1781 (mamhoff)
- Fix complete order factory to have non-pending inventory units #1787 (mamhoff)
- Fix to cart URL for stores not mounted at root #1775 (funwhilelost)
- Remove duplicated require in shipment factory #1769 (upinetree)
- Fix an issue where updating a user in the admin without specifying roles in would clear the existing roles.#1747 (tvdeyen)
- Fix the 'Send Mailer' checkbox selection #1716 (jhawthorn)
- Rearrange AR relation declarations in order.rb in preparation for Rails 5.1 #1740 (jhawthorn)
- Fix issue where OrderInventory creates superfluous InventoryUnits #1751 (jhawthorn)
- Fix check for
order.guest\_token
presence #1705 (vfonic) - Fix shipped_order factory #1772 (tvdeyen)
- Don't display inactive payment methods on frontend or backend #1801 (luukveenis)
- Don't send email if PromotionCodeBatch email is unset #1699 (jhawthorn)
- Use
cart_link_path
instead ofcart_link_url
#1757 (bofrede) - Replace cache_key_for_taxons with cache #1688 (jhawthorn)
- Update code styles for /cart #1727 (vfonic)
- Add a frontend views override generator #1681 (tvdeyen)
- Create JS namespaces in centralized file #1753 (jhawthorn)
- Replace select2-rails with vendored select2 #1774 (jhawthorn)
- Add JS
Spree.formatMoney
helper for currency formatting #1745 (jhawthorn) - Rewrite zones.js.coffee using Backbone.js #1766 (jhawthorn)
- Add JS
Spree.t
andSpree.human_attribute_name
for i18n #1730 (jhawthorn) - Allow editing multiple Stores #1282 (jhawthorn)
- Add promotion codes index view #1545 (jhawthorn)
- Replace deprecated bourbon mixins with unprefixed CSS #1706 (jhawthorn)
- Ensure helper is specified in CustomerReturnsController #1771 (eric1234)
- Ensure helper is specified in VariantsController #1714 (eric1234)
- Remove nonexistant form hint from view #1698 (jhawthorn)
- Promotion search now finds orders which used the specific promotion code, of any code on the promotion. #1662 (stewart)
- Upgrade to Bootstrap 4.0.0.alpha6 #1816 (jhawthorn)
- New admin table layout #1786 #1828 #1829 (tvdeyen)
- Add number with currency selector widget #1793 #1813 (jhawthorn)
- Replace select2 styling #1797 (jhawthorn)
- Change admin logo height to match breadcrumbs height #1822 (mtomov)
- Fit admin logo to available space #1758 (brchristian)
- Make form/button styles match bootstrap's #1809 (jhawthorn)
- Fix datepicker style #1827 (kennyadsl)
- Use bootstrap input-group for date range #1817 (jhawthorn)
- Improve page titles in admin #1795 (jhawthorn)
- Use an icon as missing image placeholder #1760 (jhawthorn) #1764 (jhawthorn)
- Convert admin orders table into full width layout #1782 (tvdeyen)
- Raise
font-size
#1777 (tvdeyen) - Improve promotions creation form #1509 (jhawthorn)
- Remove stock location configuration from admin "cart" page #1709 #1710 (jhawthorn)
- Update admin cart page dynamically #1715 (jhawthorn)
- Fix duplicated Shipments breadcrumb #1717 #1746 (jhawthorn)
- Don’t set default text highlight colors #1738 (brchristian)
- Convert customer details page to backbone #1762 (jhawthorn)
- Remove inline edit from payments dipslay amount #1815 (tvdeyen)
- Fix styling of tiered promotions delete icon #1810 (jhawthorn)
- Remove
webkit-tap-highlight-color
#1792 (brchristian) - Promotion and Shipping calculators can be created or changed without reloading the page. #1618 (jhawthorn)
- Extract expedited exchanges to an extension #1691 (jhawthorn)
- Remove spree_store_credits column #1741 (jhawthorn)
- Remove StockMovements#new action and view #1767 (jhawthorn)
- Remove unused variant_management.js.coffee #1768 (jhawthorn)
- Remove unused payment Javascript #1735 (jhawthorn)
- Moved
spree/admin/shared/_translations
partial tospree/admin/shared/_js_locale_data
.
- Deprecate
Order#has_step?
in favour ofhas_checkout_step?
#1667 (mamhoff) - Deprecate
Order#set_shipments_cost
, which is now done inOrder#update!
#1689 (jhawthorn) - Deprecate
user.default_credit_card
,user.payment_sources
foruser.wallet.default_wallet_payment_source
anduser.wallet.wallet_payment_sources
- Deprecate
CreditCard#default
in favour ofuser.wallet.default_wallet_payment_source
- Deprecate
cache_key_for_taxons
helper favour ofcache [I18n.locale, @taxons]
- Deprecate admin sass variables in favour of bootstrap alternatives #1780 (tvdeyen)
- Deprecate Address#empty? #1686 (jhawthorn)
- Deprecate
fill_in_quantity
capybara helper #1710 (jhawthorn) - Deprecate
wait_for_ajax
capybara helper #1668 (cbrunsdon)
-
The OrderUpdater (as used by
order.update!
) now fully updates taxes.Previously there were two different ways taxes were calculated: a "full" and a "quick" calculation. The full calculation was performed with
order.create_tax_charge!
and would determine which tax rates applied and add taxes to items. The "quick" calculation was performed as part of an order update, and would only update the tax amounts on existing line items with taxes.Now
order.update!
will perform the full calculation every time.order.create_tax_charge!
is now deprecated and has been made equivalent toorder.update!
. -
ItemAdjustments
has been merged into theOrderUpdater
The previous behaviour between these two classes was to iterate over each item calculating promotions, taxes, and totals for each before moving on to the next item. To better support external tax services, we now calculate promotions for all items, followed by taxes for all items, etc.
-
Make frontend prices depend on
store.cart_tax_country_iso
Prices in the frontend now depend on
store.cart_tax_country_iso
instead ofSpree::Config.admin_vat_country_iso
. -
Deprecate methods related to Spree::Order#tax_zone
We're not using
Spree::Order#tax_zone
,Spree::Zone.default_tax
,Spree::Zone.match
, orSpree::Zone#contains?
in our code base anymore. They will be removed soon. Please useSpree::Order#tax_address
,Spree::Zone.for_address
, andSpree::Zone.include?
, respectively, instead. -
Product Prototypes have been removed from Solidus itself.
The new
solidus_prototype
extension provides the existing functionality. #1517 -
Analytics trackers have been removed from Solidus itself.
The new
solidus_trackers
extension provides the existing functionality. #1438 -
Bootstrap row and column classes have replaced the legacy skeleton classes throughout the admin. #1484
-
Remove
currency
from line items.It's no longer allowed to have line items with different currencies on the same order. This makes storing the currency on line items redundant, since it will always be considered the same as the order currency.
It will raise an exception if a line item with the wrong currency is added.
This change also deletes the
currency
database field (String) from theline_items
table, since it will not be used anymore. -
Add
Spree::Promotion#remove_from
andSpree::PromotionAction#remove_from
This will allow promotions to be removed from orders and allows promotion actions to define how to reverse their side effects on an order.
For now
PromotionAction
provides a default remove_from method, with a deprecation warning that subclasses should define their own remove_from method. -
Remove
is_default
boolean fromSpree::Price
modelThis boolean used to mean "the price to be used". With the new pricing architecture introduced in 1.3, it is now redundant and can be reduced to an order clause in the currently valid prices scope.
-
Remove callback
Spree::LineItem.after_create :update_tax_charge
Any code that creates
LineItem
s outside the context of OrderContents should ensure that it callsorder.update!
after doing so. -
Mark
Spree::Tax::ItemAdjuster
as api-private #1463 -
Updated Credit Card brand server-side detection regex to support more brands and MasterCard's new BIN range. #1477
Note: Most stores will be using client-side detection which was updated in Solidus 1.2
-
CreditCard
'sverification_value
field is now converted to a string and has whitespace removed on assignment instead of before validations. -
The
lastname
field onAddress
is now optional. #1369 -
The admin prices listings page now shows master and variant prices seperately. This changes
@prices
to@master_prices
and@variant_prices
in prices_controller -
Admin javascript assets are now individually
require
d using sprockets directives instead of usingrequire_tree
. This should fix issues where JS assets could not be overridden in applications. #1613 -
The admin has an improved image upload interface with drag and drop. #1553
-
PaymentMethod's
display_on
column has been replaced withavailable_to_users
andavailable_to_admin
. The existing attributes and scopes have been deprecated. -
ShippingMethod's
display_on
column has been replaced withavailable_to_users
. The existing attributes and scopes have been deprecated. -
Added experimental Spree::Config.tax_adjuster_class
To allow easier customization of tax calculation in extensions or applications.
This API is experimental and is likely to change in a future version.
-
Removals
-
Removed deprecated
STYLE_image
helpers from BaseHelper #1623 -
Removed deprecated method
Spree::TaxRate.adjust
(not to be confused with Spree::TaxRate#adjust) in favor ofSpree::Config.tax_adjuster_class
. -
Removed deprecated method
Promotion#expired?
in favor ofPromotion#inactive?
-
Removed nested attribute helpers
generate_template
,generate_html
, andremove_nested
. Also removes some javascript bound to selectors.remove
,a[id*=nested]
. -
Removed
accept_alert
anddismiss_alert
from CapybaraExt.accept_alert
is now a capybara builtin (that we were overriding) anddismiss_alert
can be replaced withdismiss_prompt
. -
Removed deprecated delegate_belongs_to
-
- Upgrade to rails 5.0
-
Use in-memory objects in OrderUpdater and related areas.
Solidus now uses in-memory data for updating orders in and around OrderUpdater. E.g. if an order already has
order.line_items
loaded into memory when OrderUpdater is run then it will use that information rather than requerying the database for it. This should help performance and makes some upcoming refactoring easier.Warning: If you bypass ActiveRecord while making updates to your orders you run the risk of generating invalid data. Example:
order.line_items.to_a order.line_items.update_all(price: ...) order.update!
Will now result in incorrect calculations in OrderUpdater because the line items will not be refetched.
In particular, when creating adjustments, you should always create the adjustment using the adjustable relationship.
Good example:
line_item.adjustments.create!(source: tax_rate, ...)
Bad examples:
tax_rate.adjustments.create!(adjustable: line_item, ...) Spree::Adjustment.create!(adjustable: line_item, source: tax_rate, ...)
We try to detect the latter examples and repair the in-memory objects (with a deprecation warning) but you should ensure that your code is keeping the adjustable's in-memory associations up to date. Custom promotion actions are an area likely to have this issue.
-
Make some 'wallet' behavior configurable
NOTE:
Order#persist_user_credit_card
has been renamed toOrder#add_payment_sources_to_wallet
. If you are overridingpersist_user_credit_card
you need to update your code.The following extension points have been added for customizing 'wallet' behavior.
- Spree::Config.add_payment_sources_to_wallet_class
- Spree::Config.default_payment_builder_class
-
Backend: UI, Remove icons from buttons and tabs
-
Backend: Deprecate args/options that add icons to buttons
-
Update Rules::Taxon/Product handling of invalid match policies
Rules::Taxon and Rules::Product now require valid match_policy values. Please ensure that all your Taxon and Product Rules have valid match_policy values.
-
Fix default value for Spree::Promotion::Rules::Taxon preferred_match_policy.
Previously this was defaulting to nil, which was sometimes interpreted as 'none'.
-
Deprecate
Spree::Shipment#address
(column renamed)Spree::Shipment#address
was not actually being used for anything in particular, so the association has been deprecated and delegated toSpree::Order#ship_address
instead. The database column has been renamedspree_shipments.deprecated_address_id
. -
Coupon code application has been separated from the Continue button on the Payment checkout page
- JavaScript for it has been moved from address.js into its own
spree/frontend/checkout/coupon-code
- Numerous small nuisances have been fixed #1090
- JavaScript for it has been moved from address.js into its own
-
Allow filtering orders by store when multiple stores are present. #1149
-
Remove unused
user_id
column from PromotionRule. #1259 -
Removed "Clear cache" button from the admin #1275
-
Adjustments and totals are no longer updated when saving a Shipment or LineItem.
Previously adjustments and total columns were updated after saving a Shipment or LineItem. This was unnecessary since it didn't update the order totals, and running order.update! would recalculate the adjustments and totals again.
-
Order now requires a
store_id
in validationsAll orders created since Spree v2.4 should have a store assigned. A migration exists to assign all orders without a store to the default store.
If you are seeing spec failures related to this, you may have to add
let!(:store) { create(:store) }
to some test cases. -
Deprecate
Spree::TaxRate.adjust
, removeSpree::TaxRate.match
The functionality of
Spree::TaxRate.adjust
is now contained in the newSpree::Tax::OrderAdjuster
class.Wherever you called
Spree::TaxRate.adjust(items, order_tax_zone)
, instead callSpree::Tax::OrderAdjuster.new(order).adjust!
.Spree::TaxRate.match
was an implementation detail ofSpree::TaxRate.adjust
. It has been removed, and its functionality is now contained in the private methodSpree::Tax::TaxHelpers#applicable_rates(order)
. -
Allow more options than
current_currency
to select pricesPreviously, availability of products/variants, caching and pricing was dependent only on a
current_currency
string. This has been changed to acurrent_pricing_options
object. For now, this object (Spree::Variant::PricingOptions
) only holds the currency. It is used for caching instead of the deprecatedcurrent_currency
helper.Additionally, your pricing can be customized using a
VariantPriceSelector
object, a default implementation of which can be found inSpree::Variant::PriceSelector
. It is responsible for finding the right price for variant, be it for front-end display or for adding it to the cart. You can set it through the newSpree::Config.variant_price_selector_class
setting. This class also knows whichPricingOptions
class it cooperates with.current_currency
helperSpree::Variant#categorise_variants_from_option
Spree::Variant#variants_and_option_values
(UseSpree::Variant#variants_and_option_values#for
instead)Spree::Core::Search::Base#current_currency
Spree::Core::Search::Base#current_currency=
There was a strange way of setting prices for line items depending on additional attributes being present on the line item (
gift_wrap: true
, for example). It also neededSpree::Variant
to be patched with methods likeSpree::Variant#gift_wrap_price_modifier_in
and is generally deemed a non-preferred way of modifying pricing. This functionality has now been moved into a Gem of its own to ease the transition to the newVariant::PriceSelector
system. -
Respect
Spree::Store#default_currency
Previously, the
current_currency
helper in both thecore
andapi
gems would always return the globally configured default currency rather than the current store's one. With Solidus 1.3, we respect that setting without having to install thespree_multi_domain
extension. -
Persist tax estimations on shipping rates
Previously, shipping rate taxes were calculated on the fly every time a shipping rate would be displayed. Now, shipping rate taxes are stored on a dedicated table to look up.
There is a new model Spree::ShippingRateTax where the taxes are stored, and a new Spree::Tax::ShippingRateTaxer that builds those taxes from within Spree::Stock::Estimator.
The shipping rate taxer class can be exchanged for a custom estimator class using the new Spree::Appconfiguration.shipping_rate_taxer_class preference.
In order to convert your historical shipping rate taxation data, please run
rake solidus:upgrade:one_point_three
- this will create persisted taxation notes for historical shipping rates. Be aware though that these taxation notes are estimations and should not be used for accounting purposes. -
Deprecate setting a line item's currency by hand
Previously, a line item's currency could be set directly, and differently from the line item's order's currency. This would result in an error. It still does, but is also now explicitly deprecated. In the future, we might delete the line item's
currency
column and just delegate to the line item's order. -
Taxes for carts now configurable via the
Spree::Store
objectIn VAT countries, carts (orders without addresses) have to be shown with adjustments for the country whose taxes the cart's prices supposedly include. This might differ from
Spree::Store
toSpree::Store
. We're introducting thecart_tax_country_iso
setting on Spree::Store for this purpose.Previously the setting for what country any prices include Spree::Zone.default_tax. That, however, would also implicitly tag all prices in Spree as including the taxes from that zone. Introducing the cart tax setting on Spree::Store relieves that boolean of some of its responsibilities.
-
Make Spree::Product#prices association return all prices
Previously, only non-master variant prices would have been returned here. Now, we get all the prices, including those from the master variant.
-
Changes to Spree::Stock::Estimator
- The package passed to Spree::Stock::Estimator#shipping_rates must have its shipment assigned and that shipment must have its order assigned. This is needed for some upcoming tax work in to calculate taxes correctly.
- Spree::Stock::Estimator.new no longer accepts an order argument. The order will be fetched from the shipment.
-
Removed Spree::Stock::Coordinator#packages from the public interface.
This will allow us to refactor more easily. solidusio#950
-
Removed
pre_tax_amount
column from line item and shipment tablesThis column was previously used as a caching column in the process of calculating VATs. Its value should have been (but wasn't) always the same as
discounted_amount - included_tax_total
. It's been replaced with a method that does just that. #941 -
Renamed return item
pre_tax_amount
column toamount
The naming and functioning of this column was inconsistent with how shipments and line items work: In those models, the base from which we calculate everything is the
amount
. The ReturnItem now works just like a line item.Usability-wise, this change entails that for VAT countries, when creating a refund for an order including VAT, you now have to enter the amount you want to refund including VAT. This is what a backend user working with prices including tax would expect.
For a non-VAT store, nothing changes except for the form field name, which now says
Amount
instead ofPre-tax-amount
. You might want to adjust the i18n translation here, depending on your circumstances. #706 -
Removed Spree::BaseHelper#gem_available? and Spree::BaseHelper#current_spree_page?
Both these methods were untested and not appropriate code to be in core. If you need these methods please pull them into your app. #710.
-
Fixed a bug where toggling 'show only complete order' on/off was not showing all orders. #749
-
ffaker has been updated to version 2.x
This version changes the namespace from Faker:: to FFaker::
-
versioncake has been updated to version 3.x
This version uses a rack middleware to determine the version, uses a different header name, and has some configuration changes.
You probably need to add this to your controller specs.
More information is available in the VersionCake README
-
Bootstrap 4.0.0-alpha.2 is included into the admin.
-
Pagination now uses an admin-specific kaminari theme, which uses the bootstrap4 styles. If you have a custom admin page with pagination you can use this style with the following.
<%= paginate @collection, theme: "solidus_admin" %>
-
Settings configuration menu has been replaced with groups of tabs at the top
- Settings pages were grouped into related partials as outlined in #634
- Partials are rendered on pages owned by the partials as tabs as a top bar
- Admin-nav has a sub-menu for the settings now
-
Lists of classes in configuration (
config.spree.calculators
,spree.spree.calculators
, etc.) are now stored internally as strings and constantized when accessed. This allows these classes to be reloaded in development mode and loaded later in the boot process. #1203
-
Admin menu has been moved from top of the page to the left side.
- Submenu items are accessible from any page. See the wiki for more information and instructions on upgrading.
- Solidus_auth_devise should be updated to '~> 1.3' to support the new menu.
- Added optional styles to the admin area to advance admin rebrand.
To use the new colors, add
@import 'spree/backend/themes/blue_steel/globals/_variables_override';
to yourspree/backend/globals/variables_override
.
-
Removed deface requirement from core
Projects and extensions which rely on deface will need to add it explicitly to their dependencies.
-
testing_support/capybara_ext.rb
no longer changes capybara's matching mode to:prefer_exact
, and instead uses capybara's default,:smart
.You can restore the old behaviour (not recommended) by adding
Capybara.match = :prefer_exact
to yourspec_helper.rb
.More information can be found in capybara's README
-
Fixed a bug where sorting in the admin would not save positions correctly. #632
-
Included (VAT-style) taxes, will be considered applicable if they are inside the default tax zone, rather than just when they are the defaut tax zone. #657
-
Update jQuery.payment to v1.3.2 (from 1.0) #608
-
Removed Order::CurrencyUpdater. #635
-
Removed
Product#set_master_variant_defaults
, which was unnecessary since master is build withis_master
alreadytrue
. -
Replaced admin taxon management interface #569
-
Fix logic around raising InsufficientStock when creating shipments. #566
Previously,
InsufficientStock
was raised if any StockLocations were fully out of inventory. This was incorrect because it was possible other stock locations could have fulfilled the inventory. This was also incorrect because the stock location could have some, but insufficient inventory, and not raise the exception (an incomplete package would be returned). Now the coordinator checks that the package is complete and raisesInsufficientStock
if it is incomplete for any reason. -
Removed
Spree::Zone.global
#627 Use the "GlobalZone" factory instead:FactoryGirl.create(:global_zone)
-
Address is immutable (Address#readonly? is always true)
This allows us to minimize cloning addresses, while still ensuring historical data is preserved.
-
UserAddressBook module added to manage a user's multiple addresses
-
GET /admin/search/users searches all of a user's addresses, not just current bill and ship addresss
-
Adjustment state column has been replaced with a finalized boolean column. This includes a migration replacing the column, which may cause some downtime for large stores.
-
Handlebars templates in the admin are now stored in assets and precompiled with the rest of the admin js.
-
Removed
map_nested_attributes_keys
from the Api::BaseController. This method was only used in one place and was oblivious of strong_params. -
Change all mails deliveries to
#deliver_later
. Emails will now be sent in the background if you configure active_job to do so. See the rails guides for more information. -
Cartons deliveries now send one email per-order, instead of one per-carton. This allows setting
@order
and@store
correctly for the template. For most stores, which don't combine multiple orders into a carton, this will behave the same. -
Some HABTM associations have been converted to HMT associations. Referential integrity has also been added as well. Specifically:
- Prototype <=> Taxon
- ShippingMethod <=> Zone
- Product <=> PromotionRule
See https://github.com/solidusio/solidus/releases/tag/v1.0.1
See https://github.com/solidusio/solidus/releases/tag/v1.0.0