v2.1.0
I'm happy to announce the release of Solidus 2.1.0!
An exciting change in this release is taxes are now always fully recalculated on an order.update!
. order.create_tax_charge!
is no longer required! We hope that this is simpler for developers and should help us better support external tax services in the future.
Another notable change is the removal of methods which were deprecated before Solidus 1.4. We've also extracted solidus_prototypes
and solidus_trackers
into separate extensions.
Changelog
- 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
to order.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 of Spree::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
, or Spree::Zone#contains?
in our code base anymore.
They will be removed soon. Please use Spree::Order#tax_address
,
Spree::Zone.for_address
, and Spree::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 the line_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
model
This 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 calls order.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 of
Promotion#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) and
dismiss_alert
can be replaced withdismiss_prompt
. -
Removed deprecated delegate_belongs_to