-
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. -
Convert frontend's CoffeeScript to javascript #2378 (jhawthorn)
-
Add support for using Tubolinks in Solidus admin #1863 (tvdeyen)
-
Extract stock transfers to the solidus_stock_transfers gem. #2379 (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