Version 5.0.0-beta.3

April 10, 2024
  • Removed the showEditUserCommerceTab config setting.
  • Removed craft\commerce\services\Customers::addEditUserCommerceTab().
  • Removed craft\commerce\services\Customers::addEditUserCommerceTabContent().
  • Fixed a PHP error that occurred when migrating from Commerce 4. (#3448)
  • Fixed a bug where customer orders and carts weren’t shown within profiles.
  • Fixed a bug where the Orders index page was showing all orders, not just orders for the selected site’s store. (#3446)

Version 5.0.0-beta.2

March 2, 2024
  • Added a new “Manage inventory stock levels” permission.
  • Added a new “Manage inventory locations” permission.
  • Craft Commerce now strictly requires Craft CMS Pro edition.
  • Fixed a bug where it wasn’t possible to change the primary store. (#3398)
  • Fixed a bug where the hasUnlimitedStock variant query param wasn’t working. (#3400)
  • Fixed a bug where variant queries could return duplicate rows. (#3401)
  • Fixed a bug where shipping categories weren’t getting deleted when a store was deleted.
  • Fixed an error that could occur when upgrading to Commerce 5 with MariaDB. (#3411)
  • Fixed a bug where prices weren’t showing their currency symbol on Edit Variant pages. (#3405)
  • Fixed an error that could occur when updating site/store assignments. (#3426)
  • Fixed a bug where Commerce widgets weren’t displaying the list of stores. (#3428)
  • Fixed an error that could occur when editing a store. (#3433)
  • Fixed a bug where variant titles were being shown as links when editing a product. (#3431)

Version 5.0.0-beta.1

February 29, 2024

Store Management

  • It’s now possible to manage multiple stores. (#2283)
  • It’s now possible to manage multiple inventory locations per store. (#2286, #2669)
  • Products now support drafts, autosaving, and versioning. (#2358)
  • Product variants are now managed via nested element indexes rather than inline-editable blocks.
  • Product variants’ field layouts now support multiple tabs.
  • Product pages’ breadcrumbs now include a menu that links to each editable product type.
  • It’s now possible to create new products from product select modals when a custom source is selected, if the source is configured to only show products of one type.
  • The Products index page now shows a primary “New product” button when a custom source is selected, if the source is configured to only show products of one type.
  • Order conditions can now have a “Total Weight” rule.
  • Shipping methods and shipping rules now support flexible order matching, based on an order condition.

Development

  • Added the currentStore Twig variable.
  • Added commerce/pricing-catalog/generate command.
  • Deprecated the hasUnlimitedStock variant query param. inventoryTracked should be used instead.
  • Removed the shippingCategory, shippingCategoryId, taxCategory, and taxCategoryId product query params. The corresponding variant query params can be used instead.

Extensibility

  • Added craft\commerce\base\CatalogPricingConditionRuleInterface.
  • Added craft\commerce\base\EnumHelpersTrait
  • Added craft\commerce\base\HasStoreInterface.
  • Added craft\commerce\base\InventoryMovementInterface.
  • Added craft\commerce\base\InventoryMovement.
  • Added craft\commerce\base\Purchasable::$availableForPurchase.
  • Added craft\commerce\base\Purchasable::$freeShipping.
  • Added craft\commerce\base\Purchasable::$height.
  • Added craft\commerce\base\Purchasable::$inventoryTracked
  • Added craft\commerce\base\Purchasable::$length.
  • Added craft\commerce\base\Purchasable::$maxQty.
  • Added craft\commerce\base\Purchasable::$minQty.
  • Added craft\commerce\base\Purchasable::$promotable.
  • Added craft\commerce\base\Purchasable::$shippingCategoryId.
  • Added craft\commerce\base\Purchasable::$stock
  • Added craft\commerce\base\Purchasable::$taxCategoryId.
  • Added craft\commerce\base\Purchasable::$weight.
  • Added craft\commerce\base\Purchasable::$width.
  • Added craft\commerce\base\Purchasable::getInventoryItem().
  • Added craft\commerce\base\Purchasable::getInventoryLevels().
  • Added craft\commerce\base\Purchasable::getOnPromotion().
  • Added craft\commerce\base\Purchasable::getPrice().
  • Added craft\commerce\base\Purchasable::getPromotionalPrice().
  • Added craft\commerce\base\Purchasable::getStock()
  • Added craft\commerce\base\Purchasable::getStore()
  • Added craft\commerce\base\Purchasable::setPrice().
  • Added craft\commerce\base\Purchasable::setPromotionalPrice().
  • Added craft\commerce\base\StoreRecordTrait.
  • Added craft\commerce\base\StoreTrait.
  • Added craft\commerce\behaviors\StoreBehavior.
  • Added craft\commerce\collections\InventoryMovementCollection
  • Added craft\commerce\collections\UpdateInventoryLevelCollection
  • Added craft\commerce\console\controllers\CatalogPricingController.
  • Added craft\commerce\controllers\CatalogPricingController.
  • Added craft\commerce\controllers\CatalogPricingRulesController.
  • Added craft\commerce\controllers\InventoryLocationsController
  • Added craft\commerce\controllers\InventoryLocationsStoresController
  • Added craft\commerce\controllers\VariantsController.
  • Added craft\commerce\db\Table::CATALOG_PRICING_RULES_USERS.
  • Added craft\commerce\db\Table::CATALOG_PRICING_RULES.
  • Added craft\commerce\db\Table::CATALOG_PRICING.
  • Added craft\commerce\db\Table::INVENTORYITEMS.
  • Added craft\commerce\db\Table::INVENTORYLOCATIONS_STORES.
  • Added craft\commerce\db\Table::INVENTORYLOCATIONS.
  • Added craft\commerce\db\Table::INVENTORYMOVEMENTS.
  • Added craft\commerce\db\Table::PURCHASABLES_STORES.
  • Added craft\commerce\db\Table::STORESETTINGS.
  • Added craft\commerce\db\Table::STORES.
  • Added craft\commerce\db\Table::TRANSFERS_INVENTORYITEMS.
  • Added craft\commerce\db\Table::TRANSFERS.
  • Added craft\commerce\elements\Product::getVariantManager().
  • Added craft\commerce\elements\Variant::getProductSlug().
  • Added craft\commerce\elements\Variant::getProductTypeHandle().
  • Added craft\commerce\elements\Variant::setProductSlug().
  • Added craft\commerce\elements\Variant::setProductTypeHandle().
  • Added craft\commerce\elements\VariantCollection.
  • Added craft\commerce\elements\actions\SetDefaultVariant.
  • Added craft\commerce\elements\conditions\customer\CatalogPricingCustomerCondition.
  • Added craft\commerce\elements\conditions\orders\DiscountedItemSubtotalConditionRule.
  • Added craft\commerce\elements\conditions\orders\ShippingAddressZoneConditionRule.
  • Added craft\commerce\elements\conditions\orders\ShippingMethodOrderCondition.
  • Added craft\commerce\elements\conditions\orders\ShippingRuleOrderCondition.
  • Added craft\commerce\elements\conditions\orders\TotalWeightConditionRule.
  • Added craft\commerce\elements\conditions\products\ProductVariantInventoryTrackedConditionRule.
  • Added craft\commerce\elements\conditions\purchasables\CatalogPricingCondition.
  • Added craft\commerce\elements\conditions\purchasables\CatalogPricingCustomerConditionRule.
  • Added craft\commerce\elements\conditions\purchasables\CatalogPricingPurchasableConditionRule.
  • Added craft\commerce\elements\conditions\purchasables\PurchasableConditionRule.
  • Added craft\commerce\elements\db\OrderQuery::$totalWeight.
  • Added craft\commerce\elements\db\OrderQuery::totalWeight().
  • Added craft\commerce\elements\traits\OrderValidatorsTrait::validateOrganizationTaxIdAsVatId().
  • Added craft\commerce\enums\InventoryTransactionType.
  • Added craft\commerce\enums\InventoryUpdateQuantityType.
  • Added craft\commerce\events\RegisterAvailableShippingMethodsEvent::getShippingMethods().
  • Added craft\commerce\events\RegisterAvailableShippingMethodsEvent::setShippingMethods().
  • Added craft\commerce\fieldlayoutelements\PurchasabaleAllowedQtyField.
  • Added craft\commerce\fieldlayoutelements\PurchasabaleAvailableForPurchaseField.
  • Added craft\commerce\fieldlayoutelements\PurchasabaleDimensionsField.
  • Added craft\commerce\fieldlayoutelements\PurchasabaleFreeShippingField.
  • Added craft\commerce\fieldlayoutelements\PurchasabalePriceField.
  • Added craft\commerce\fieldlayoutelements\PurchasabalePromotableField.
  • Added craft\commerce\fieldlayoutelements\PurchasabaleSkuField.
  • Added craft\commerce\fieldlayoutelements\PurchasabaleStockField.
  • Added craft\commerce\fieldlayoutelements\PurchasabaleWeightField.
  • Added craft\commerce\helpers\Cp.
  • Added craft\commerce\helpers\Currency::moneyInputHtml().
  • Added craft\commerce\helpers\Purchasable::catalogPricingRulesTableByPurchasableId().
  • Added craft\commerce\models\CatalogPricingRule.
  • Added craft\commerce\models\Discount::$storeId.
  • Added craft\commerce\models\InventoryItem.
  • Added craft\commerce\models\InventoryLocation.
  • Added craft\commerce\models\InventoryTransaction.
  • Added craft\commerce\models\Level.
  • Added craft\commerce\models\LineItem::getSnapshot().
  • Added craft\commerce\models\LineItem::setSnapshot().
  • Added craft\commerce\models\LineItems::getFulfilledTotalQuantity().
  • Added craft\commerce\models\PaymentSources::getStore().
  • Added craft\commerce\models\ProductType::$maxVariants.
  • Added craft\commerce\models\PurchasableStore.
  • Added craft\commerce\models\Store::getInventoryLocations().
  • Added craft\commerce\models\Store::getInventoryLocationsOptions().
  • Added craft\commerce\models\inventory\InventoryCommittedMovement
  • Added craft\commerce\models\inventory\InventoryLocationDeactivatedMovement.
  • Added craft\commerce\models\inventory\InventoryManualMovement.
  • Added craft\commerce\models\inventory\UpdateInventoryLevel.
  • Added craft\commerce\plugin\Services::getVat().
  • Added craft\commerce\records\CatalogPricingRulePurchasable.
  • Added craft\commerce\records\CatalogPricingRuleUser.
  • Added craft\commerce\records\CatalogPricingRule.
  • Added craft\commerce\records\CatalogPricing.
  • Added craft\commerce\records\InventoryItem.
  • Added craft\commerce\records\InventoryLocation.
  • Added craft\commerce\records\PurchasableStore.
  • Added craft\commerce\services\CatalogPricingRules.
  • Added craft\commerce\services\CatalogPricing.
  • Added craft\commerce\services\Discounts::getAllDiscountsByStoreId().
  • Added craft\commerce\services\InventoryLocations.
  • Added craft\commerce\services\Inventory.
  • Added craft\commerce\services\OrderStatuses::getOrderStatusByUid().
  • Added craft\commerce\services\Purchasables::updateStoreStockCache()
  • Added craft\commerce\services\Sales::canUseSales().
  • Added craft\commerce\services\ShippingCategories::clearCaches().
  • Added craft\commerce\services\Stores.
  • Added craft\commerce\services\Vat.
  • Added craft\commerce\web\assets\inventory\InventoryAsset.
  • Deprecated craft\commerce\base\Purchasable::getOnSale(). getOnPromotion() should be used instead.
  • Deprecated craft\commerce\base\Variant::hasUnlimitedStock(). craft\commerce\base\Purchasable::$inventoryTracked should be used instead.
  • Deprecated craft\commerce\elements\Order::$totalSaleAmount. $totalPromotionalAmount should be used instead.
  • Deprecated craft\commerce\elements\Variant::getProduct(). getOwner() should be used instead.
  • Deprecated craft\commerce\elements\Variant::getProductId(). getOwnerId() should be used instead.
  • Deprecated craft\commerce\elements\Variant::setProduct(). setOwner() should be used instead.
  • Deprecated craft\commerce\elements\Variant::setProductId(). setOwnerId() should be used instead.
  • Deprecated craft\commerce\elements\conditions\products\ProductVariantHasUnlimitedStockConditionRule. ProductVariantInventoryTrackedConditionRule should be used instead.
  • Deprecated craft\commerce\models\ProductType::$hasVariants. $maxVariants can be used instead.
  • Deprecated craft\commerce\models\Store::getCountries(). craft\commerce\models\Store::getSettings()->getCountries() should be used instead.
  • Deprecated craft\commerce\models\Store::getMarketAddressCondition(). craft\commerce\models\Store::getSettings()->getMarketAddressCondition() should be used instead.
  • Deprecated craft\commerce\models\Store::setCountries(). craft\commerce\models\Store::getSettings()->setCountries() should be used instead.
  • Removed craft\commerce\base\PurchasableInterface::getId().
  • Removed craft\commerce\base\Variant::$unlimitedStock. craft\commerce\base\Purchasable::$inventoryTracked can be used instead.
  • Removed craft\commerce\console\controllers\UpgradeController.
  • Removed craft\commerce\controllers\LiteShippingController.
  • Removed craft\commerce\controllers\LiteTaxController.
  • Removed craft\commerce\controllers\ProductsController::actionDeleteProduct().
  • Removed craft\commerce\controllers\ProductsController::actionDuplicateProduct().
  • Removed craft\commerce\controllers\ProductsController::actionVariantIndex().
  • Removed craft\commerce\controllers\ProductsPreviewController.
  • Removed craft\commerce\elements\Variant::$stock. craft\commerce\base\Purchasable::getStock() can be used instead.
  • Removed craft\commerce\helpers\Product.
  • Removed craft\commerce\helpers\VariantMatrix.
  • Removed craft\commerce\helpers\VariantMatrix.
  • Removed craft\commerce\models\Currency.
  • Removed craft\commerce\models\Discount::$baseDiscountType.
  • Removed craft\commerce\models\LiteShippingSettings.
  • Removed craft\commerce\models\LiteTaxSettings.
  • Removed craft\commerce\models\Settings::$allowCheckoutWithoutPayment. craft\commerce\models\Store::getAllowCheckoutWithoutPayment() can be used instead.
  • Removed craft\commerce\models\Settings::$allowEmptyCartOnCheckout. craft\commerce\models\Store::getAllowEmptyCartOnCheckout() can be used instead.
  • Removed craft\commerce\models\Settings::$allowPartialPaymentOnCheckout. craft\commerce\models\Store::getAllowPartialPaymentOnCheckout() can be used instead.
  • Removed craft\commerce\models\Settings::$autoSetCartShippingMethodOption. craft\commerce\models\Store::getAutoSetCartShippingMethodOption() can be used instead.
  • Removed craft\commerce\models\Settings::$autoSetNewCartAddresses. craft\commerce\models\Store::getAutoSetNewCartAddresses() can be used instead.
  • Removed craft\commerce\models\Settings::$autoSetPaymentSource. craft\commerce\models\Store::getAutoSetPaymentSource() can be used instead.
  • Removed craft\commerce\models\Settings::$emailSenderAddressPlaceholder.
  • Removed craft\commerce\models\Settings::$emailSenderAddress. craft\commerce\models\Email::$senderAddress can be used instead.
  • Removed craft\commerce\models\Settings::$emailSenderNamePlaceholder.
  • Removed craft\commerce\models\Settings::$emailSenderName. craft\commerce\models\Email::$senderName can be used instead.
  • Removed craft\commerce\models\Settings::$freeOrderPaymentStrategy. craft\commerce\models\Store::getFreeOrderPaymentStrategy() can be used instead.
  • Removed craft\commerce\models\Settings::$minimumTotalPriceStrategy. craft\commerce\models\Store::getMinimumTotalPriceStrategy() can be used instead.
  • Removed craft\commerce\models\Settings::$pdfPaperOrientation. craft\commerce\models\Pdf::$paperOrientation can be used instead.
  • Removed craft\commerce\models\Settings::$pdfPaperSize. craft\commerce\models\Pdf::$paperSize can be used instead.
  • Removed craft\commerce\models\Settings::$requireBillingAddressAtCheckout. craft\commerce\models\Store::getRequireBillingAddressAtCheckout() can be used instead.
  • Removed craft\commerce\models\Settings::$requireShippingAddressAtCheckout. craft\commerce\models\Store::getRequireShippingAddressAtCheckout() can be used instead.
  • Removed craft\commerce\models\Settings::$requireShippingMethodSelectionAtCheckout. craft\commerce\models\Store::getRequireShippingMethodSelectionAtCheckout() can be used instead.
  • Removed craft\commerce\models\Settings::$useBillingAddressForTax. craft\commerce\models\Store::getUseBillingAddressForTax() can be used instead.
  • Removed craft\commerce\models\Settings::$validateBusinessTaxIdasVatId. craft\commerce\models\Store::getValidateOrganizationTaxIdasVatId() can be used instead.
  • Removed craft\commerce\models\Settings::FREE_ORDER_PAYMENT_STRATEGY_COMPLETE. craft\commerce\models\Store::FREE_ORDER_PAYMENT_STRATEGY_COMPLETE can be used instead.
  • Removed craft\commerce\models\Settings::FREE_ORDER_PAYMENT_STRATEGY_PROCESS. craft\commerce\models\Store::FREE_ORDER_PAYMENT_STRATEGY_PROCESS can be used instead.
  • Removed craft\commerce\models\Settings::MINIMUM_TOTAL_PRICE_STRATEGY_DEFAULT. craft\commerce\models\Store::MINIMUM_TOTAL_PRICE_STRATEGY_DEFAULT can be used instead.
  • Removed craft\commerce\models\Settings::MINIMUM_TOTAL_PRICE_STRATEGY_SHIPPING. craft\commerce\models\Store::MINIMUM_TOTAL_PRICE_STRATEGY_SHIPPING can be used instead.
  • Removed craft\commerce\models\Settings::MINIMUM_TOTAL_PRICE_STRATEGY_ZERO. craft\commerce\models\Store::MINIMUM_TOTAL_PRICE_STRATEGY_ZERO can be used instead.
  • Removed craft\commerce\models\ShippingRule::$maxQty.
  • Removed craft\commerce\models\ShippingRule::$maxTotal.
  • Removed craft\commerce\models\ShippingRule::$maxWeight.
  • Removed craft\commerce\models\ShippingRule::$minMaxTotalType.
  • Removed craft\commerce\models\ShippingRule::$minQty.
  • Removed craft\commerce\models\ShippingRule::$minTotal.
  • Removed craft\commerce\models\ShippingRule::$minWeight.
  • Removed craft\commerce\models\ShippingRule::$shippingZoneId.
  • Removed craft\commerce\models\ShippingRule::getShippingZone().
  • Removed craft\commerce\records\Discount::BASE_DISCOUNT_TYPE_PERCENT_ITEMS_DISCOUNTED.
  • Removed craft\commerce\records\Discount::BASE_DISCOUNT_TYPE_PERCENT_ITEMS.
  • Removed craft\commerce\records\Discount::BASE_DISCOUNT_TYPE_PERCENT_TOTAL_DISCOUNTED.
  • Removed craft\commerce\records\Discount::BASE_DISCOUNT_TYPE_PERCENT_TOTAL.
  • Removed craft\commerce\records\Discount::BASE_DISCOUNT_TYPE_VALUE.
  • Removed craft\commerce\records\ShippingRule::TYPE_MIN_MAX_TOTAL_SALEPRICE_WITH_DISCOUNTS.
  • Removed craft\commerce\records\ShippingRule::TYPE_MIN_MAX_TOTAL_SALEPRICE.
  • Removed craft\commerce\records\ShippingRule::getShippingZone().
  • Removed craft\commerce\services\PaymentSources::getAllGatewayPaymentSourcesByUserId().
  • Removed craft\commerce\services\PaymentSources::getAllPaymentSourcesByUserId().
  • Removed craft\commerce\services\TaxRates::getTaxRatesForZone().
  • Removed craft\commerce\validators\StoreCountryValidator.
  • Removed craft\commerce\widgets\Orders::$orderStatusId. $orderStatuses can be used instead.
  • craft\commerce\base\PurchasableInterface now extends craft\base\ElementInterface.
  • craft\commerce\elements\Product::getVariants() now returns a collection.
  • craft\commerce\elements\Variant now implements craft\base\NestedElementTrait.
  • craft\commerce\elements\db\PurchasableQuery is now abstract.
  • craft\commerce\services\Discounts::getAllDiscounts() now returns a collection.
  • craft\commerce\services\Gateways::getAllCustomerEnabledGateways() now returns a collection.
  • craft\commerce\services\Gateways::getAllGateways() now returns a collection.
  • craft\commerce\services\PaymentSources::getAllGatewayPaymentSourcesByCustomerId() now returns a collection.
  • craft\commerce\services\PaymentSources::getAllPaymentSourcesByCustomerId() now returns a collection.
  • craft\commerce\services\PaymentSources::getAllPaymentSourcesByGatewayId() now returns a collection.
  • craft\commerce\services\ShippingCategories::getAllShippingCategories() now returns a collection.
  • craft\commerce\services\ShippingMethods::getAllShippingMethods() now returns a collection.
  • craft\commerce\services\ShippingRules::getAllShippingRules() now returns a collection.
  • craft\commerce\services\ShippingRules::getAllShippingRulesByShippingMethodId() now returns a collection.
  • craft\commerce\services\TaxRates::getAllTaxRates() now returns a collection.
  • craft\commerce\services\TaxRates::getTaxRatesByTaxZoneId() now returns a collection.
  • craft\commerce\services\TaxZones::getAllTaxZones() now returns a collection.
  • Renamed craft\commerce\base\Purchasable::tableAttributeHtml() to attributeHtml().
  • Renamed craft\commerce\controllers\BaseStoreSettingsController to BaseStoreManagementController.
  • Renamed craft\commerce\controllers\StoreSettingsController to StoreManagementController.
  • Renamed craft\commerce\elements\Subscription::tableAttributeHtml() to attributeHtml().
  • Renamed craft\commerce\elements\Variant::tableAttributeHtml() to attributeHtml().
  • Renamed craft\commerce\elements\traits\OrderElementTrait::tableAttributeHtml() to attributeHtml().