CHARGE_AUTHORIZED_PAYMENTS permission was added for possibility to charge payment transactionShippingMethodValidatorInterface[?] and oro_shipping.method_validator.basic service were created to handle this. To add a custom logics, add a decorator for this service. Please refer to oro_shipping.method_validator.decorator.basic_enabled_shipping_methods_by_rules example.ShippingRuleViewMethodTemplateListener[?] was created, and can be used for providing template of a shipping method on a shipping rule view page.productUnitSelectionVisible option of the ProductPricesType[?] is required now.CategoryRepository::getChildrenWithTitles[?] was deprecated, use CategoryRepository::getChildren[?] instead.FlatRateMethodFromChannelBuilder[?] was deprecated, use FlatRateMethodFromChannelFactory[?] instead.PayPalPasswordType[?] is deprecated, will be removed in v1.3. Please use OroEncodedPlaceholderPasswordType instead.CardTypesDataProviderInterface[?] is deprecated, will be removed in v1.3. Use CreditCardTypesDataProviderInterface[?] instead.PaymentMethodProvidersRegistryInterface[?] and its implementation were deprecated. Related deprecation is PaymentMethodProvidersPass[?]. CompositePaymentMethodProvider[?] which implements PaymentMethodProviderInterface[?] was added instead.ShippingMethodsConfigsRuleRepository::getConfigsWithEnabledRuleAndMethod[?] method deprecated because it completely duplicate getEnabledRulesByMethodIntegrationMethodIdentifierGeneratorInterface[?] was deprecated, the IntegrationIdentifierGeneratorInterface should be used instead.MoneyOrder[?] constant TYPE was removed.oro_order_capture operation was removed, oro_order_payment_transaction_capture should be used insteadPaymentBundle. List of moved components:
oropaypal/js/lib/jquery-credit-card-validatororopaypal/js/validator/credit-card-expiration-dateoropaypal/js/validator/credit-card-expiration-date-not-blankoropaypal/js/validator/credit-card-numberoropaypal/js/validator/credit-card-typeoropaypal/js/adapter/credit-card-validator-adapterAjaxProductPriceController::getProductPricesByCustomer[?] method was removed, logic was moved to getProductPricesByCustomerActionAjaxPriceListController::getPriceListCurrencyList[?] method was removed, logic was moved to getPriceListCurrencyListAction methodAjaxUPSController[?] were renamed:
UPSTransport[?] were renamed:
$testMode[?] is removed, use $upsTestMode instead$apiUser[?] is removed, use $upsApiUser instead$apiPassword[?] is removed, use $upsApiPassword instead$apiKey[?] is removed, use $upsApiKey instead$shippingAccountNumber[?] is removed, use $upsShippingAccountNumber instead$shippingAccountName[?] is removed, use $upsShippingAccountName instead$pickupType[?] is removed, use $upsPickupType instead$unitOfWeight[?] is removed, use $upsUnitOfWeight instead$country[?] is removed, us $upsCountry instead$invalidateCacheAt[?] is removed, use $upsInvalidateCacheAt insteadCategoryBreadcrumbProvider was added as a data provider for breadcrumbs.commerce configurable permission was added for View and Edit pages of the Customer Role in backend area (aka management console) (see configurable-permissions.md for details.commerce_frontend configurable permission was added for View and Edit pages of the Customer Role in frontend area (aka front store)(see configurable-permissions.md for details.PaymentBundle, the following classes were added:
MoneyOrderMethodProvider that provides Money Order payment methods.MoneyOrderMethodViewProvider that provides Money Order payment method views.VIEW_PAYMENT_HISTORY permission was added for viewing payment history section.PayPalSettings[?] was created instead of ConfigurationPayPalExpressCheckoutPaymentMethod[?] was added instead of removed classes PayflowExpressCheckout, PayPalPaymentsProExpressCheckoutPayPalCreditCardPaymentMethod[?] was added instead of removed classes PayflowGateway, PayPalPaymentsProPayPalExpressCheckoutPaymentMethodView[?] was added instead of removed classes PayflowExpressCheckout, PayPalPaymentsProExpressCheckoutPayPalCreditCardPaymentMethodView[?] was added instead of removed classes PayflowGateway, PayPalPaymentsProCreditCardMethodProvider[?] for providing PayPal Credit Card Payment MethodsCreditCardMethodViewProvider[?] for providing PayPal Credit Card Payment Method ViewsExpressCheckoutMethodProvider[?] for providing PayPal Express Checkout Payment MethodsExpressCheckoutMethodViewProvider[?] for providing PayPal Express Checkout Payment Method ViewsPaymentMethodsConfigsRule entity.PaymentMethodProviderInterface interface was added. This interface should be implemented in any payment method provider class that is responsible for providing of any payment method.PaymentMethodViewProviderInterface interface was added. This interface should be implemented in any payment method view provider class that is responsible for providing of any payment method view.PaymentMethodInterface.PaymentMethodViewInterface.AbstractPaymentMethodProvider was created. Any new payment method provider should extend this class.AbstractPaymentMethodViewProvider was created. Any new payment method view provider should extend this class.PaymentTermView[?] now has two additional methods due to implementing PaymentMethodViewInterface[?]
Product[?] to have virtual fields:
VirtualFieldsProductDecoratorFactory[?] is the class that should be used to create a decorated ProductVirtualFieldsProductDecorator[?] is the class that decorates ProductVirtualFieldsSelectQueryConverter[?] this converter is used inside of VirtualFieldsProductDecoratorVirtualFieldsProductQueryDesigner[?] this query designer is used inside of VirtualFieldsProductDecoratorRuleInterface[?] this interface should now be used for injection instead of Rule in bundles that implement RuleBundle functionalityRule actions - use them to define corresponding services
RuleActionsVisibilityProvider that should be used to define action visibility configuration in datagrids with Rule entity fieldsIntegrationRemovalListener class was created to be used instead of AbstractIntegrationRemovalListenerWebCatalogAwareInterface became available for entities which are aware of WebCatalogs.WebCatalogUsageProviderInterface interface:
WebCatalogs to given entities (passed as an argument)WebCatalog by idWebCatalogBreadcrumbDataProvider class was created.
getItems method returns breadcrumbs arrayCategoryExtension class changed:
ContainerInterface $container parameter.OroCommerce package into the OroCRM Customer Portal package.MenuExtension class was updated with the following change:
ContainerInterface $container parameter.the bundle moved from the OroCommerce package into the OroCRM Customer Portal package.
the FrontendOwnerTreeProvider::_construct method was added with the following signature:
__construct(
ManagerRegistry $doctrine,
DatabaseChecker $databaseChecker,
CacheProvider $cache,
MetadataProviderInterface $ownershipMetadataProvider,
TokenStorageInterface $tokenStorage
)
the construction signature of the CustomerExtension class was changed and the constructor accepts only one ContainerInterface $container parameter.
FlatRateShippingBundleOroCommerce package into the OroCRM Customer Portal package.oro_frontend_localization.extension.transtation_packages_provider was updated in a following way:
UPSTransportfalseIntegrationBundle (refer to PaymentBundle and IntegrationBundle for details).CombinedPriceListRepository[?] changes:
getCombinedPriceListsByPriceList method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacegetCombinedPriceListsByPriceLists method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacegetCPLsForPriceCollectByTimeOffset method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacePriceListCustomerFallbackRepository[?] changes:
getCustomerIdentityByGroup method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacePriceListCustomerGroupFallbackRepository[?] changes:
getCustomerIdentityByWebsite method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacePriceListRepository[?] changes:
getPriceListsWithRules method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacePriceListToCustomerGroupRepository[?] changes:
getCustomerGroupIteratorByDefaultFallback method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacegetIteratorByPriceList method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacePriceListToCustomerRepository[?] changes:
getCustomerIteratorByDefaultFallback method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacegetCustomerWebsitePairsByCustomerGroupIterator method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacegetIteratorByPriceList method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfacePriceListToWebsiteRepository[?] changes:
getWebsiteIteratorByDefaultFallback method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfaceAbstractTaxCode::setCreatedAt (pass \DateTime as a first argument of the method instead of mixed)AbstractTaxCode::setUpdatedAt (pass \DateTime as a first argument of the method instead of mixed)Tax::setCreatedAt (pass \DateTime as a first argument of the method instead of mixed)Tax::setUpdatedAt (pass \DateTime as a first argument of the method instead of mixed)TaxJurisdiction::setCreatedAt (pass \DateTime as a first argument of the method instead of mixed)TaxJurisdiction::setUpdatedAt (pass \DateTime as a first argument of the method instead of mixed)TaxRule::setCreatedAt (pass \DateTime as a first argument of the method instead of mixed)TaxRule::setUpdatedAt (pass \DateTime as a first argument of the method instead of mixed)ZipCode::setCreatedAt (pass \DateTime as a first argument of the method instead of mixed)ZipCode::setUpdatedAt (pass \DateTime as a first argument of the method instead of mixed)AbstractCustomerPartialUpdateDriver, the return type of the getCustomerVisibilityIterator method changed from BufferedQueryResultIterator to BufferedQueryResultIteratorInterface.OroCommerce package into the OroCRM Customer Portal package.WebsiteBundle moved from the OroCommerce package into the OroCRM Customer Portal package.OroWebsiteExtension class changed:
ContainerInterface $container.WebsitePathExtension class changed:
ContainerInterface $container.Driver::writeItem and Driver::flushWrites should be used instead of Driver::saveItemsCategoryProvider::getBreadcrumbs method is deprecated. Please use
CategoryBreadcrumbProvider::getItems()` instead./api/inventorylevels REST API resource, the productUnitPrecision.unit.code filter was marked as deprecated. The productUnitPrecision.unit.id filter should be used instead.AbstractIntegrationRemovalListener was deprecated, IntegrationRemovalListener was created instead.CategoryExtension::setContainer method was removed.CategoryExtension class changed:
setContainer method was removed.CategoryPageVariantType was removed and the logic moved to PageVariantTypeExtensionprotected $securityProvider was removed from the CustomerExtension class.FrontendCustomerUserRoleOptionsProvider class was removed and replaced with:
FrontendCustomerUserRoleTabOptionsProvider for getting tab optionsConfiguration class was removed. Use MoneyOrderSettings entity that extends the Transport class to store payment integration properties.Configuration was removed and instead PayPalSettings[?] was created - entity that implements Transport[?] to store paypal payment integration propertiesPayflowExpressCheckoutConfig, PayPalPaymentsProExpressCheckoutConfig were removed and instead simple parameter bag object PayPalExpressCheckoutConfig[?] is being used for holding payment integration properties that are stored in PayPalSettingsPayflowGatewayConfig, PayPalPaymentsProConfig were removed and instead simple parameter bag object PayPalCreditCardConfig[?] is being used for holding payment integration properties that are stored in PayPalSettingsPayflowExpressCheckout, PayPalPaymentsProExpressCheckout were removed and instead was added PayPalExpressCheckoutPaymentMethod[?]PayflowGateway, PayPalPaymentsPro were removed and instead was added PayPalCreditCardPaymentMethod[?]PayflowExpressCheckout, PayPalPaymentsProExpressCheckout were removed and instead was added PayPalExpressCheckoutPaymentMethodView[?]PayflowGateway, PayPalPaymentsPro were removed and instead was added PayPalCreditCardPaymentMethodView[?]PaymentMethodRegistry was removed, logic was moved to PaymentMethodProvidersRegistry[?] which implements PaymentMethodProvidersRegistryInterface[?] and this registry is responsible for collecting data from all payment method providersPaymentMethodViewRegistry was removed, logic was moved to CompositePaymentMethodViewProvider[?] which implements PaymentMethodViewProviderInterface[?] this composite provider is single point to provide data from all payment method view providersPaymentMethodsConfigsRule) were abstracted and moved to the RuleBundle (see the RuleBundle) section for more information):
StatusDisableMassAction (is replaced with StatusEnableMassAction in the RuleBundle)StatusEnableMassAction (is replaced with StatusEnableMassAction in the RuleBundle)StatusMassActionHandler (is replaced with StatusMassActionHandler in the RuleBundle)PaymentRuleActionsVisibilityProvider (is replaced with PaymentRuleActionsVisibilityProvider in the RuleBundle)Product with virtual fields) were abstracted and moved to the ProductBundle (see the ProductBundle section for more information):
PaymentMethodRegistry class was replaced with the PaymentMethodProvidersRegistry which implements a PaymentMethodProvidersRegistryInterface and this registry is responsible for collecting data from all payment method providers.PaymentMethodViewRegistry class was replaced with the CompositePaymentMethodViewProvider which implements a PaymentMethodViewProviderInterface. This composite provider is a single point to provide data from all payment method view providers.Configuration is removed, PaymentTermSettings[?] was created insteadConfiguration was removed and instead PaymentTermSettings[?] was created - entity that implements Transport to store payment integration propertiesPaymentTermConfig was removed and instead simple parameter bag object ParameterBagPaymentTermConfig is used for holding payment integration properties that are stored in PaymentTermSettingsPriceListConfigConverter[?] changes:
PRIORITY_KEY was removed, use SORT_ORDER_KEY insteadBasePriceListRelation[?] changes:
$priority was removed, use $sortOrder insteadgetPriority and setPriority were removed, use getSortOrder and setSortOrder instead accordinglyPriceListConfig[?] changes:
$priority was removed, use $sortOrder insteadgetPriority and setPriority were removed, use getSortOrder and setSortOrder instead accordinglyPriceListAwareInterface[?] changes:
getPriority was removed, use getSortOrder insteadPriceListSelectWithPriorityType[?] changes:
priority was removed. Field _position from SortableExtension is used instead.ProductPageVariantType[?].
PageVariantTypeExtension[?]website in favour of scopes collection using from Redirect[?] classProduct with virtual fields) were abstracted and moved to the ProductBundle (see the ProductBundle section for more information):
SelectQueryConverterShippingProductQueryDesignerProductDecoratorDecoratedProductLineItemFactory class, the only dependency is now
VirtualFieldsProductDecoratorFactory.ShippingMethodsConfigsRule were abstracted and moved to the RuleBundle (see the RuleBundle) section for more information):
StatusDisableMassAction and switched definition to StatusEnableMassAction in the RuleBundleStatusEnableMassAction and switched definition to StatusEnableMassAction in the RuleBundleStatusMassActionHandler and switched definition to StatusMassActionHandler in the RuleBundleShippingRuleActionsVisibilityProvider and switched definition to RuleActionsVisibilityProvider in the RuleBundleInvalidateCacheScheduleCommand was removed, InvalidateCacheScheduleCommand should be used insteadInvalidateCacheAtHandler was removed,InvalidateCacheActionHandler should be used insteadinvalidateCache.html.twig was removed, use corresponding resource from CacheBundleinvalidate-cache-button-component.js was removed , use corresponding resource from CacheBundleprotected $websiteManager property was removed from OroWebsiteExtensionprotected $websiteUrlResolver property was removed from WebsitePathExtensionIndexationRequestListener::getEntitiesWithUpdatedIndexedFields was removed[f] - Fully covered with oro/upgrade-toolkit
[p] - Partially covered with oro/upgrade-toolkit
types/link/) with separate files for model, view, variants, sources, and commands. The link, link-block, link-button, and file types are now consolidated into a single link component with pluggable variant and source registries.createRegistry utility for managing link styles, sources, and trait renderers as plain-object registries.BaseType shared methods: mergeToolbarItems (model) for idempotent toolbar item management, and onDoubleClick via mainToolbarAction (view) for double-click-to-action behavior.link, button) and source types (url, file) as pluggable registry entries.\Oro\Bundle\OrderBundle\Entity\Order now implements \Oro\Component\DraftSession\Entity\EntityDraftAwareInterface; new fields: draftSessionUuid (GUID), draftSource (self-referencing ManyToOne), drafts (OneToMany).\Oro\Bundle\OrderBundle\Entity\OrderLineItem now implements \Oro\Component\DraftSession\Entity\EntityDraftSoftDeleteAwareInterface; new fields: draftSessionUuid (GUID), draftSource (self-referencing ManyToOne), drafts (OneToMany), draftDelete (boolean, default false).order-line-items-edit-grid datagrid that joins source line items with their draft copies and displays the merged state.Controller\DraftSession\ namespace: OrderLineItemDraftCreateController, OrderLineItemDraftUpdateController, OrderLineItemDraftDeleteController, OrderLineItemDraftMassUpdateController, and OrderLineItemDraftCalculateTaxesAndDiscountsController.\Oro\Bundle\OrderBundle\DraftSession\Manager\OrderDraftManager — contains methods for creating and managing order draft session entities.\Oro\Bundle\OrderBundle\DraftSession\OrderDraftSynchronizer and specialized synchronizers (OrderAddressAwareOrderDraftSynchronizer, OrderDiscountAwareOrderDraftSynchronizer, PaymentTermAwareOrderDraftSynchronizer, RecalculateTotalsOrderDraftSynchronizer) that handle syncing specific order fields between the draft and the original.\Oro\Bundle\OrderBundle\DraftSession\Factory\OrderDraftFactory and \Oro\Bundle\OrderBundle\DraftSession\Factory\OrderLineItemDraftFactory — create draft copies of orders and line items with proper field mapping.\Oro\Bundle\OrderBundle\Form\Type\OrderLineItemDraftType — standalone form type for editing a single draft line item.\Oro\Bundle\OrderBundle\Form\Handler\OrderFormHandler — replaces the default form handler for the order update action; coordinates draft-to-order synchronization on save.\Oro\Bundle\OrderBundle\Form\Extension\OrderDraftSyncExtension — form type extension for OrderType that triggers order draft sync on form submission when the draft_session_sync option is true.\Oro\Bundle\OrderBundle\Form\Extension\ValidateOrderLineItemDraftExtension — validates all draft line items on order form submission and prevents saving if any draft has validation errors.\Oro\Bundle\OrderBundle\Form\Extension\RemoveLineItemsFromOrderTypeExtension — removes the lineItems field from OrderType because line items are now managed through the datagrid. Customizations that relied on the lineItems sub-form within OrderType must be updated.\Oro\Bundle\OrderBundle\Provider\OrderLineItemTierPricesProvider — provides tier price lists for order line items to display in the draft form.\Oro\Bundle\OrderBundle\Event\OrderDuplicateAfterEvent — dispatched after OrderDuplicator::duplicate() completes, allowing extensions to post-process the duplicated order.\Oro\Bundle\OrderBundle\Async\Topic\OrderDraftsCleanupTopic and \Oro\Bundle\OrderBundle\Command\OrderDraftsCleanupCommand (oro:cron:draft-session:cleanup:order) — message queue topic and CLI command for removing stale draft orders that were abandoned without saving.draft-order-datagrid-plugin (manages draft grid row rendering, inline editing, and action handling), order-line-item-draft-form-view (renders the inline draft edit form), order-line-item-draft-create-widget / order-line-item-draft-update-widget (create/update form widget), order-line-item-draft-discounts-taxes-view (expandable per-line-item tax & discount details), line-items-datagrid-presentation-plugin (toggles between grid and presentation views).\Oro\Bundle\OrderBundle\Pricing\OrderLineItemIsPriceOverriddenCalculator — determines whether the price set on an OrderLineItem differs from the matched tier price.oro_rfp_request_create_order action can now create an Order draft directly from a Request For Quote, using the draft session component. The draft is pre-populated with the RFQ's customer, currency, addresses, line items, and matched prices.
\Oro\Bundle\RFPBundle\DraftSession\Factory\OrderDraftFromRfqFactory — creates an Order draft from a Request, copying organization, owner, customer, customer user, PO number, website, currency, ship-until date, customer notes, and source entity reference.\Oro\Bundle\RFPBundle\DraftSession\Factory\OrderLineItemDraftFromRfqFactory — creates OrderLineItem drafts from RequestProduct entities, copying product, SKU, primary unit, quantity, comment, kit item line items, and the requestProduct back-reference extended field. When the referenced product has been deleted, the line item is created as a free-form item with the original SKU and product unit, and a zero placeholder price.requestProduct many-to-one extended relation from OrderLineItem to RequestProduct (column requestproduct_id, ON DELETE SET NULL, hidden from UI, datagrid, audit, and import/export).\Oro\Bundle\RFPBundle\DraftSession\RequestProductAwareOrderLineItemDraftSynchronizer — synchronizes the requestProduct extended field between source and draft OrderLineItem during draft sync operations.\Oro\Bundle\RFPBundle\Form\Extension\OrderLineItemDraftOffersExtension — extends OrderLineItemDraftType to expose an offers field (pre-filtered to the order draft's currency) when the line item is linked to an RFQ RequestProduct.content-block-type, content-widget-type, custom-code-type, and picture-type to use BaseType mergeToolbarItems and mainToolbarAction instead of custom toolbar and double-click handling.oro_rfp_request_create_order action to use oro_rfp.operation.create_order_draft_from_rfq service to create an order draft instead of pre-filling the order form via order data storage extension.\Oro\Bundle\RFPBundle\Entity\Request now implements \Oro\Component\DraftSession\Entity\EntityDraftAwareInterface and \Oro\Bundle\CurrencyBundle\Entity\WebsiteBasedCurrencyAwareInterface to support use as a draft source entity in the RFQ-to-Order draft flow.\Oro\Bundle\RFPBundle\Entity\RequestProduct now implements \Oro\Component\DraftSession\Entity\EntityDraftAwareInterface to support use as a draft source entity.\Oro\Bundle\OrderBundle\Provider\OrderLineItemTierPricesProvider — added getTierPricesForLineItems(array $orderLineItems) method that retrieves tier prices for multiple order line items using a single price-storage query.\Oro\Bundle\OrderBundle\Entity\OrderLineItem the freeFormTaxCode extended field to store the tax code for free-form line items that don't have a product relation.\Oro\Bundle\TaxBundle\Form\Extension\OrderLineItemDraftTypeTaxExtension — extends OrderLineItemDraftType with a freeFormTaxCode field so users can assign a tax code to free-form line items during draft editing.oropricing/js/app/views/list-item-product-prices-view: the prices hint popover is no longer initialized on render — it is created lazily on the first user interaction with the hint trigger (onPricesHintInteraction()). updateQtyForUnit() no longer renders the hint and now contains only quantity logic. The hint content is refreshed on unit change by the new updateHintContent() method subscribed to the model's change:unit event.link-type.js, link-block-type.js, link-button/ directory, and file/ directory — these are replaced by the unified link component in types/link/.CreateLinkModal dialog (dialogs/create-link-dialog.js), its create-link-form.html template, and the open-create-link-dialog editor command. Link attributes (href, title, target, rel) are now edited through the Settings panel traits instead of a modal. The link-settings toolbar item and the default mainToolbarAction were removed accordingly. Customizations that opened the dialog or ran the open-create-link-dialog command should select the link component and use the Settings panel.\Oro\Bundle\RFPBundle\Form\Extension\OrderDataStorageExtension, \Oro\Bundle\RFPBundle\Form\Extension\OrderLineItemDataStorageExtension, \Oro\Bundle\RFPBundle\Storage\RequestToOrderDataStorage, \Oro\Bundle\RFPBundle\Storage\OffersDataStorage, and \Oro\Bundle\RFPBundle\Storage\OffersFormStorage.
Customizations that depended on these storage services should switch to the draft-session RFQ order creation flow (oro_rfp.operation.create_order_draft_from_rfq).savedForLaterList relation to \Oro\Bundle\ShoppingListBundle\Entity\LineItem.savedForLaterLineItems relation to \Oro\Bundle\ShoppingListBundle\Entity\ShoppingList.oro_shopping_list_line_item_only_one_list database constraint ensures that either shopping_list_id or saved_for_later_list_id is set, but not both.savedForLaterList field to shoppinglistitems storefront API resource.savedForLaterItems field to shoppinglists storefront API resource.\Oro\Bundle\ShoppingListBundle\Provider\InvalidShoppingListLineItemsProvider to identify invalid shopping list line items and sort them by severity.shopping-list-saved-for-later-line-items-grid;frontend-customer-user-shopping-list-saved-for-later-grid;frontend-customer-user-shopping-list-saved-for-later-edit-grid;frontend-customer-user-shopping-list-invalid-line-items-grid.\Oro\Bundle\ShoppingListBundle\Validator\Constraints\OnlyOneRequiredList validation constraint to ensure that either savedForLaterList or shoppingList is set, but not both.datagrid_line_items_data_for_checkout and datagrid_line_items_data_for_rfq validation groups.saved_for_later feature toggle with corresponding system configuration option to gate the "Saved for Later" UI.ShoppingListToCheckoutValidationGroupResolver, ShoppingListToRequestQuoteValidationGroupResolver) tagged with oro_shopping_list.validation_group and priority support.oro_inventory_availability_code and oro_inventory_availability_label twig functions.\Oro\Bundle\CommerceBundle\ContentWidget\ScorecardContentWidgetType content widget.users, shopping-lists, open-rfqs, total-orders content widgets for default data.customer_user_dashboard section:
scorecard_widget;scorecard_widget_2;scorecard_widget_3;scorecard_widget_4;oro_commerce.company_name;oro_commerce.business_address;oro_commerce.phone_number;oro_commerce.contact_email;oro_commerce.website;oro_commerce.tax_id;sellerCompanyName;sellerBusinessAddress;sellerPhoneNumber;sellerContactEmail;sellerWebsiteURL;sellerTaxID;orocms/js/app/views/content-widget-collection-variant view component\Oro\Bundle\OrderBundle\Provider\OrderEntityNameProvider so that an order entity name can now be retrieved from \Oro\Bundle\EntityBundle\Provider\EntityNameResolver.\Oro\Bundle\OrderBundle\Entity\Order::$pdfDocuments to-many relation that stores order PDF documents;\Oro\Bundle\OrderBundle\PdfDocument\Manager\OrderPdfDocumentManager as the main service to manage order PDF documents;\Oro\Bundle\OrderBundle\PdfDocument\UrlGenerator\OrderPdfDocumentUrlGenerator as the main service to generate URLs for order PDF documents;\Oro\Bundle\OrderBundle\Twig\OrderPdfDocumentUrlExtension twig extension to provide the ability to generate URLs for order PDF documents in twig templates;\Oro\Bundle\OrderBundle\Provider\EmailTemplate\OrderPdfFileVariableProcessor and \Oro\Bundle\OrderBundle\Provider\EmailTemplate\OrderPdfFileVariableProvider to enable the use of order PDF documents in email templates;paymentAction option to the \Oro\Bundle\PaymentBundle\Action\PurchaseAction allowing to pass the action name to perform, e.g. purchase/charge/authorize.\Oro\Bundle\PaymentBundle\Entity\PaymentTransaction::$webhookRequestLogs field to store webhook request logs.\Oro\Bundle\PaymentBundle\Entity\RequestLogsAwareInterface to mark entities that can store transaction request and response logs.\Oro\Bundle\PaymentBundle\Method\Provider\PaymentMethodGroupAwareProvider that provides a filtered list of payment methods that are applicable for a specific payment method group.purchase and charge payment transactions in oro_payment_transaction_refund.\Oro\Bundle\PaymentBundle\PaymentStatus\PaymentStatuses class with constants for each payment status available out-of-the-box.\Oro\Bundle\PaymentBundle\PaymentStatus\Calculator\PaymentStatusCalculator and implementations for each payment status.\Oro\Bundle\PaymentBundle\Event\PaymentStatusUpdatedEvent dispatched in \Oro\Bundle\PaymentBundle\Manager\PaymentStatusManager after payment status is changed.\Oro\Bundle\PaymentBundle\Condition\PaymentTransactionFullyRefunded condition to check if the payment transaction is fully refunded.\Oro\Bundle\PaymentBundle\Action\PaymentTransactionPartialRefundAction to perform a partial refund for a payment transaction.\Oro\Bundle\PaymentBundle\Provider\PaymentTransactionAmountAvailableToRefundProvider to calculate the amount available to refund for a payment transaction.\Oro\Bundle\PricingBundle\Layout\DataProvider\TotalsProvider layout data provider.data-clear-if and data-clear-element attributes in the dependent-field-component.js.\Oro\Bundle\ProductBundle\Controller\Frontend\QuickAddValidationController for real-time validation of quick order form rows.\Oro\Bundle\ProductBundle\QuickAdd\QuickAddCollectionValidator to centralize validation logic for quick add collections.oro_shopping_list_to_checkout_quick_add_processor;oro_rfp_quick_add_processor.\Oro\Bundle\FormBundle\Resources\public\templates\warning-template.html for displaying validation warnings in forms.\Oro\Bundle\CheckoutBundle\Workflow\ActionGroup\CheckoutActions - instead of deleting the shopping list after finishing checkout, it now clears it if there are any "Saved for later" line items.FilteredProductVariantsPlugin, ShoppingListRefreshPlugin, HighlightRelatedRowsPlugin from oroshoppinglist/js/datagrid/builder/shoppinglist-flat-data-builder to separate datagrid builder oroshoppinglist/js/datagrid/builder/shoppinglist-plugins-builderoro_shopping_list_line_item_uidx unique index in \Oro\Bundle\ShoppingListBundle\Entity\LineItem - now uses NULLS NOT DISTINCT and the following fields:
product_id;shopping_list_id;saved_for_later_list_id;unit_code;checksum.\Oro\Bundle\ShoppingListBundle\Acl\AccessRule\LineItemAssociationAwareAccessRule — now considers both shopping list and saved-for-later list relations.Checkout or RFQ buttons for invalid shopping list now opens an "Invalid Line Items" modal.Oro\Bundle\CommerceBundle\Layout\DataProvider\PurchaseVolumeChartDataProvider by:
Oro\Bundle\CurrencyBundle\Provider\DefaultCurrencyProviderInterface construct argument with Oro\Bundle\PricingBundle\Manager\UserCurrencyManager.Oro\Bundle\SecurityBundle\Authentication\TokenAccessorInterface construct argument.oro_cms_tabbed_content_item_collection_row block markup. Added collapsable markup.oro_cms_tabbed_content_collection_item_prototype macro\Oro\Bundle\WebCatalogBundle\Provider\RequestWebContentScopeProvider to initialize scope for storefront API requests.Oro\Bundle\OrderBundle\Entity\Repository\OrderRepository by removing the required $customerId argument from the getOrdersPurchaseVolume and getOrdersPurchaseVolumeQueryBuilder methods.order-line-items-edit-grid) for line item management instead of the embedded form collection. The lineItems sub-form is removed from OrderType by RemoveLineItemsFromOrderTypeExtension. Customizations that added fields or listeners to the lineItems collection form must be migrated to the datagrid-based draft editing workflow.\Oro\Bundle\OrderBundle\Controller\OrderController: all create/update/reorder routes now accept an optional {orderDraftSessionUuid} path parameter (e.g. /update/{id}/{orderDraftSessionUuid?}). The update() method now passes OrderFormHandler and sets 'draft_session_sync' => true in form options.\Oro\Bundle\OrderBundle\Controller\AjaxOrderController: entryPointAction and suborderEntryPointAction routes now accept an {orderDraftSessionUuid} parameter.\Oro\Bundle\OrderBundle\Form\Type\OrderType: billing and shipping address fields are now added separately via addBillingAddress() / addShippingAddress() with a PRE_SET_DATA listener that re-binds the order option to the actual form data (draft order). Added a recalculationRequired hidden field.\Oro\Bundle\OrderBundle\Form\Type\SubOrderType: shipping address is now added via addShippingAddress() with a PRE_SET_DATA listener. Added a recalculationRequired hidden field.\Oro\Bundle\OrderBundle\Form\Type\OrderAddressType: the PRE_SET_DATA listener now auto-selects the default address from the address collection when the order address is null, and populates the form data via OrderAddressManager::updateFromAbstract(). Address fields are now always toggled via FormUtils::replaceFieldOptionsRecursive() with a computed disabled value instead of conditionally skipping the call.\Oro\Bundle\OrderBundle\Provider\OrderDuplicator: constructor now requires EventDispatcherInterface as the second argument. Line items are now duplicated individually (not as part of the order's collection filter) to properly handle the orders, drafts, and Price object relations. The duplicated order's extended entity storage is cleared. OrderDuplicateAfterEvent is dispatched after duplication completes.\Oro\Bundle\OrderBundle\Form\Type\EventListener\SubtotalSubscriber: now subscribes to PRE_SET_DATA in addition to SUBMIT; on PRE_SET_DATA, it pre-fills totals by resetting line item prices, re-matching prices via PriceMatcher, and calling TotalHelper::fill().\Oro\Bundle\OrderBundle\Entity\Order: setShippingMethod() and setShippingMethodType() no longer cast the value to (string) — they now accept null, which is needed when resetting shipping on a draft order.oroorder/js/app/components/entry-point-component: hardcoded [data-entry-point-trigger] selectors are now configurable via triggerSelector and skipTriggerSelector options. Added recalculationRequiredSelector / recalculationRequiredField options and isRecalculationRequired() / setRecalculationRequired() methods — the component now tracks whether the field that triggered the entry-point request requires a full recalculation (subtotals, shipping cost, etc.) and passes this flag via the recalculationRequired hidden form field.\Oro\Bundle\PromotionBundle\EventListener\OrderAppliedPromotionEventListener: now also renders the [@OroPromotion](https://github.com/OroPromotion)/Order/applied_coupons.html.twig template and adds an appliedCoupons key to the event data, in addition to the existing appliedPromotions.\Oro\Bundle\PromotionBundle\EventListener\AppliedCouponEntityListener: now skips coupon usage tracking (CouponUsageManager::createCouponUsage()) when the order has a draftSessionUuid set, because draft orders are not completed orders.\Oro\Bundle\PromotionBundle\EventListener\OrderEntityListener: now skips AppliedPromotionManager::createAppliedPromotions() when the order has a draftSessionUuid set, to prevent promotions from being applied to draft copies.\Oro\Bundle\PromotionBundle\Form\Type\AppliedCouponCollectionType: constructor now requires AppliedCouponCollectionTransformer; a view transformer is registered in buildForm() to preserve coupon ordering.\Oro\Bundle\PromotionBundle\Manager\AppliedPromotionManager: in findOrCreateAppliedPromotion(), applied discounts are now individually removed and explicitly deleted from the entity manager (instead of clear()) to handle the case when an AppliedDiscount is a new entity already scheduled for insertion.\Oro\Bundle\TaxBundle\OrderTax\ContextHandler\OrderLineItemHandler: now resolves freeFormTaxCode for free-form order line items (when there is no product). The tax code cache key now includes the line item's checksum to differentiate draft copies of the same line item.\Oro\Bundle\TaxBundle\Resolver\CustomerAddress\CustomerAddressResolver: removed the $taxable->getItems()->count() check from isApplicable() — the resolver now runs even when an order has zero line items (e.g. when all line items are deleted during a draft session).\Oro\Bundle\TaxBundle\Resolver\TotalResolver: same change as CustomerAddressResolver — removed the $taxable->getItems()->count() guard so tax totals are recalculated correctly when all line items are removed.\Oro\Bundle\ProductBundle\Form\Type\ProductUnitSelectionType: added a new init_choices boolean option (default false). When init_choices is true and a product is provided, unit choices are pre-populated from the product via the options resolver.oro_product_get_main_image Twig function to \Oro\Bundle\ProductBundle\Twig\ProductImageExtension — returns the \Oro\Bundle\AttachmentBundle\Entity\File object for the product's main image, or null if not available.oro_get_product_units_with_precision Twig function to \Oro\Bundle\ProductBundle\Twig\ProductUnitExtension — returns an associative array of unit codes to their default precision (e.g. ['kg' => 3, 'item' => 0]). When a Product is provided, returns only that product's available units; otherwise, returns all system-wide product units.\Oro\Bundle\PaymentBundle\Entity\RequestLogsAwareInterface in \Oro\Bundle\PaymentBundle\Entity\PaymentTransaction.$.paymentMethodAction to $.authorizePaymentMethodAction attribute in oro_payment_transaction_capture.$.paymentMethodAction to $.authorizePaymentMethodAction attribute in oro_payment_transaction_cancel.$.cancelAction to $.cancelPaymentMethodAction attribute in oro_payment_transaction_cancel.$.paymentMethodAction to $.refundPaymentMethodAction attribute in oro_payment_transaction_refund.$.refundAction to $.refundPaymentMethodAction attribute in oro_payment_transaction_refund.oro_payment_transaction_cancel.\Oro\Bundle\PaymentBundle\Manager\PaymentStatusManager with new methods:
\Oro\Bundle\ProductBundle\Model\QuickAddRow to implement ProductUnitHolderInterface for enhanced validation compatibility.\Oro\Bundle\ProductBundle\Form\Type\QuickAddType to make component field required for validation.\Oro\Bundle\ProductBundle\Model\Builder\QuickAddRowCollectionBuilder to round quantities according to product unit precision.validation.yml:
oro_shopping_list_to_checkout_quick_add_processor;oro_rfp_quick_add_processor.validation.yml:
oro_shopping_list_to_checkout_quick_add_processor.\Oro\Bundle\OrderBundle\Provider\OrderPaymentStatusProvider, added \Oro\Bundle\OrderBundle\EventListener\PaymentStatusUpdatedListener instead.\Oro\Bundle\PaymentBundle\Provider\PaymentStatusProvider and interface. Added \Oro\Bundle\PaymentBundle\PaymentStatus\Calculator\PaymentStatusCalculator and implementations for each payment status instead.navigation-menu-view.js\Oro\Bundle\OrderBundle\Manager\AbstractAddressManager to \Oro\Bundle\CustomerBundle\Utils\AddressCopier.\Oro\Bundle\OrderBundle\Provider\OrderAddressProvider resettable.Oro\Bundle\OrderBundle\Entity\Repository\OrderRepository by removing the required $customerId argument from the getOrdersPurchaseVolume and getOrdersPurchaseVolumeQueryBuilder methods.b2b_flow_checkout_single_page_new_billing_address operation body to the class \Oro\Bundle\CheckoutBundle\Workflow\B2bFlowCheckoutSinglePage\Operation\NewBillingAddress.b2b_flow_checkout_single_page_new_shipping_address operation body to the class \Oro\Bundle\CheckoutBundle\Workflow\B2bFlowCheckoutSinglePage\Operation\NewShippingAddress.oro_checkout_frontend_start_from_order operation body to the class \Oro\Bundle\CheckoutBundle\Workflow\Operation\StartFromOrder.\Oro\Bundle\CheckoutBundle\EventListener\LoginOnCheckoutListener that executes restart the for guest checkout after user login.\Oro\Bundle\CheckoutBundle\Form\Type\CheckoutAddressType and \Oro\Bundle\OrderBundle\Form\Type\OrderAddressType\Oro\Bundle\CheckoutBundle\Form\Type\CheckoutAddressSelectType and \Oro\Bundle\OrderBundle\Form\Type\OrderAddressSelectTypedata-transition-name attributes on blocks that should be updated during checkout page transitions.step_to to resolve destination step for not logged in customer users__start__ transition to restart workflow)Previously known as GOD Object
inventory status product attribute was enabled.window, lens, inner. Select disabled zoom type for disable zoom on product images.disableFilter method from oro_promotion.handler.frontend_coupon_handler service to oro_promotion.frontend_applied_coupon_manager service.oro_sale_frontend_quote_submit_to_order operation body to the class \Oro\Bundle\SaleBundle\Workflow\Operation\QuoteSubmitToOrder.oro_sale_frontend_guest_quote_submit_to_order operation body to the class \Oro\Bundle\SaleBundle\Workflow\Operation\GuestQuoteSubmitToOrder.\Oro\Bundle\RFPBundle\EventListener\RFPDatagridColumnListener, use \Oro\Bundle\WorkflowBundle\Datagrid\HideWorkflowStepColumnListener instead.oro_web_catalog.empty_search_result_page system config setting from array to scalar to get rid of serialized objects in oro_config_value table.\Oro\Bundle\CMSBundle\Acl\Voter\ContentBlockVoter, use \Oro\Bundle\ThemeBundle\Acl\Voter\ThemeConfigurationDependencyDeleteVoter instead.themeConfigOption key in the \Oro\Bundle\CMSBundle\Migrations\Data\AbstractLoadContentWidgetData fixture.widget and widget_icon twig functions on storefront.Oro\Bundle\CommerceBundle\Layout\DataProvider\PurchaseVolumeChartDataProvider by:
Oro\Bundle\CurrencyBundle\Provider\DefaultCurrencyProviderInterface construct argument with Oro\Bundle\PricingBundle\Manager\UserCurrencyManager.Oro\Bundle\SecurityBundle\Authentication\TokenAccessorInterface construct argument.oro_sale.validate_shipping_addresses__backoffice_quote_page\Oro\Bundle\SaleBundle\Entity\QuoteAddress entity.\Oro\Bundle\SaleBundle\Form\Type\QuoteAddressType form type.\Oro\Bundle\SaleBundle\Form\Type\QuoteAddressSelectType that should be used for address book address component for quote form on backoffice.oroquote/js/app/views/quote-address-validated-at-view that intercepts form submit and address book address change to validate address via Address Validation feature on backoffice quote create and edit pages.oro_checkout.validate_shipping_addresses__checkoutoro_checkout.validate_billing_addresses__checkout\Oro\Bundle\CheckoutBundle\Workflow\B2bFlowCheckout\Operation\NewBillingAddress that contains full logic for the action operation 'b2b_flow_checkout_new_billing_address'.\Oro\Bundle\CheckoutBundle\Workflow\B2bFlowCheckout\Operation\NewShippingAddress that contains full logic for the action operation 'b2b_flow_checkout_new_shipping_address'.validatedAt field to \Oro\Bundle\CheckoutBundle\Form\Type\CheckoutAddressType form type.orocheckout/js/app/views/checkout-address-validation-dialog-widgetorocheckout/js/app/views/checkout-multi-step-address-validated-at-vieworocheckout/js/app/views/checkout-multi-step-address-validation-vieworocheckout/js/app/views/checkout-multi-step-address-validation-vieworocheckout/js/app/views/checkout-base-new-address-validated-at-vieworocheckout/js/app/views/checkout-multi-step-new-address-validated-at-vieworocheckout/js/app/views/checkout-single-page-address-validation-vieworocheckout/js/app/views/checkout-single-page-new-address-validated-at-viewordersubtotals API resource representing calculated subtotals for a specific order.orderSubtotals relation for the backend orders API resource.enable_validation flag for the backend orders API resource.order
relation of OrderLineItem entity should be manually updated after update.order
relation of OrderShippingTracking entity should be manually updated after update.oro_order.validate_shipping_addresses__backoffice_order_pageoro_order.validate_billing_addresses__backoffice_order_page\Oro\Bundle\OrderBundle\Entity\OrderAddress entity.\Oro\Bundle\OrderBundle\Form\Type\OrderAddressType form type.oroorder/js/app/views/order-address-validated-at-view that intercepts form submit and address book address change to validate address via Address Validation feature on backoffice order create and edit pages.inventory-switcher filter.customerprices API resource.productkitprices API resource.\Oro\Bundle\WebsiteSearchSuggestionBundle\Entity\Suggestion entity class;\Oro\Bundle\WebsiteSearchSuggestionBundle\Entity\ProductSuggestion entity class;\Oro\Bundle\WebsiteSearchSuggestionBundle\Async\Generation\GenerateSuggestionsProcessor for processing MQ messages with or without specified product ids
to send messages with filtered product ids grouped by organization to the next processor(see below).\Oro\Bundle\WebsiteSearchSuggestionBundle\Async\Generation\GenerateSuggestionPhrasesProcessor for processing MQ sent messages by processor(see above)
to generate suggestions for each localization based on product name and sku to persist them in the next processor(see below).\Oro\Bundle\WebsiteSearchSuggestionBundle\Async\Generation\PersistSuggestionPhrasesProcessor for processing MQ sent messages by processor(see above)
to persist suggestions to the database and send inserted ids for the next processor (see below).\Oro\Bundle\WebsiteSearchSuggestionBundle\Async\Generation\PersistSuggestionProductRelationProcessor for processing MQ sent messages by processor(see above)
to persist relation between suggestion and product to the database.\Oro\Bundle\WebsiteSearchSuggestionBundle\Async\Deletion\DeleteIrrelevantSuggestionsProcessor for processing MQ messages
to find suggestions with irrelevant product suggestions and send their ids to the next processor(see below) and send message to DeleteOrphanSuggestionsProcessor processor.\Oro\Bundle\WebsiteSearchSuggestionBundle\Async\Deletion\DeleteIrrelevantProductSuggestionsChunk for processing MQ messages
to remove product suggestions by their ids from the database.\Oro\Bundle\WebsiteSearchSuggestionBundle\Async\Deletion\DeleteOrphanSuggestionsProcessor for processing MQ messages
to find suggestions with no products and send their ids to the next processor(see below).\Oro\Bundle\WebsiteSearchSuggestionBundle\Async\Deletion\DeleteOrphanSuggestionsChunkProcessor for processing MQ messages
to remove suggestions by their ids from the database.\Oro\Bundle\WebsiteSearchSuggestionBundle\Event\SuggestionPersistEvent dispatching in oro_website_search_suggestion.suggestion_persister service.\Oro\Bundle\WebsiteSearchSuggestionBundle\Event\ProductSuggestionPersistEvent dispatching in oro_website_search_suggestion.product_suggestion_persister service.\Oro\Bundle\WebsiteSearchSuggestionBundle\Event\SuggestionDeletedEvent dispatching in oro_website_search_suggestion.async.delete_orphan_suggestions_chunk_processor processor.\Oro\Bundle\WebsiteSearchSuggestionBundle\Event\ProductSuggestionDeletedEvent dispatching in oro_website_search_suggestion.async.delete_irrelevant_product_suggestions_chunk_processor processor.\Oro\Bundle\WebsiteSearchSuggestionBundle\EventListener\SuggestionIndexationListener that handles Suggestion persisting and deleting events to start search reindex operation for search engine.\Oro\Bundle\WebsiteSearchSuggestionBundle\EventListener\Doctrine\CreateProductSuggestionListener that handles Product create and update events to collect product ids and send them in message to processor \Oro\Bundle\WebsiteSearchSuggestionBundle\Async\Generation\GenerateSuggestionsProcessor (details see above).\Oro\Bundle\WebsiteSearchSuggestionBundle\EventListener\WebsiteSearch\SuggestionIndexationListener take into account suggestion fields for the search engine for the storefront.\Oro\Bundle\WebsiteSearchSuggestionBundle\EventListener\WebsiteSearch\ProductSuggestionRestrictIndexListener filter suggestions by organization and localization for every website for storefront search engine.\Oro\Bundle\WebsiteSearchSuggestionBundle\EventListener\WebsiteSearchSuggestionFeatureToggleListener listen to feature status changes and send messages to MQ for suggestions generation when feature has been enabled.batchSize for Oro\Bundle\WebsiteSearchBundle\Event\ReindexationRequestEvent.\Oro\Bundle\ShoppingListBundle\Event\ShoppingListPreMoveEvent dispatching in oro_shopping_list.manager.guest_shopping_list_migration service;\Oro\Bundle\ShoppingListBundle\Event\ShoppingListPostMoveEvent dispatching in oro_shopping_list.manager.guest_shopping_list_migration service;\Oro\Bundle\ShoppingListBundle\Event\ShoppingListPreMergeEvent dispatching in oro_shopping_list.manager.guest_shopping_list_migration service;\Oro\Bundle\ShoppingListBundle\Event\ShoppingListPostMergeEvent dispatching in oro_shopping_list.manager.guest_shopping_list_migration service.\Oro\Bundle\ShoppingListBundle\Datagrid\Provider\ShoppingListActionPermissionProvider datagrid action configuration provider that determines which actions (Edit/View) are available for a shopping list.content_widget_selector theme configuration option type.content_widget layout block type.\Oro\Bundle\CommerceBundle\ContentWidget\CustomerDashboardDatagridContentWidgetType content widget.customer-dashboard-promotional-content content block for demo data.my-latest-orders, open-quotes, my-checkouts, latest-rfq, my-shopping-lists content widgets for default data.customer_user_dashboard section:
show_dashboard_quick_access_menu;show_purchase_volume_chart;content_widget;content_widget_2;content_widget_3;content_widget_4;content_widget_5;content_widget_6;recommended_products;recommended_products_2;promotional_content_block;promotional_content_block_2.\Oro\Bundle\CommerceBundle\ContentWidget\ScorecardContentWidgetType content widget.users, shopping-lists, open-rfqs, total-orders content widgets for default data.customer_user_dashboard section:
scorecard_widget;scorecard_widget_2;scorecard_widget_3;scorecard_widget_4;oro_commerce.company_name;oro_commerce.business_address;oro_commerce.phone_number;oro_commerce.contact_email;oro_commerce.website;oro_commerce.tax_id;sellerCompanyName;sellerBusinessAddress;sellerPhoneNumber;sellerContactEmail;sellerWebsiteURL;sellerTaxID;oro_sale_accept_quote as it is not used anywhere.checkout_transition_submit block typeoroproduct/js/app/views/sidebar-filters/filter-extra-hint-view\Oro\Bundle\ProductBundle\Resources\views\layouts\default\config\page_templates.yml.oro_product.product_details_display_price_tiers_as system configuration option.\Oro\Bundle\ShoppingListBundle\EventListener\ShoppingListLimitListener\Oro\Bundle\CheckoutBundle\Entity\CheckoutProductKitItemLineItem entity class;\Oro\Bundle\CheckoutBundle\Entity\CheckoutLineItem::$kitItemLineItems association and \Oro\Bundle\CheckoutBundle\Entity\CheckoutLineItem::$checksum.\Oro\Bundle\CheckoutBundle\EventListener\ValidateCheckoutOnStartEventListener, \Oro\Bundle\CheckoutBundle\EventListener\ValidateCheckoutPreOrderCreateEventListener, \Oro\Bundle\CheckoutBundle\EventListener\ValidateCheckoutBeforeOrderCreateEventListener checkout event listeners as the main points to control whether it is valid to start or finish a checkout instead of the old listeners (see the details in section "Removed").\Oro\Bundle\CheckoutBundle\Entity\Checkout, \Oro\Bundle\CheckoutBundle\Entity\CheckoutLineItem, \Oro\Bundle\CheckoutBundle\Entity\CheckoutProductKitItemLineItem that are checked in the listeners mentioned above.\Oro\Bundle\CheckoutBundle\Validator\Constraints\CheckoutAwareValidatorDecorator providing the ability to restrict the decorated validator of a checkout or checkout line item by certain checkout steps.Oro\Bundle\CheckoutBundle\Entity\Checkout::$lineItemGroupShippingData was added to provide the ability to configure one shipping charge for all the items by the seller.\Oro\Bundle\OrderBundle\Entity\Order entity class:
\Oro\Bundle\OrderBundle\Entity\OrderProductKitItemLineItem entity class;\Oro\Bundle\OrderBundle\Entity\OrderLineItem::$kitItemLineItems association and \Oro\Bundle\OrderBundle\Entity\OrderLineItem::$checksum.\Oro\Bundle\OrderBundle\Entity\OrderProductKitItemLineItem to backoffice and storefront API.\Oro\Bundle\OrderBundle\Entity\OrderHolderInterface to represent order holder classes.readonly attribute for the price field of the product kit line item in the order form.orderlineitems and orderproductkititemlineitems API backend resources.\Oro\Bundle\PricingBundle\Model\ProductPriceCriteriaFactory as the main entry point for creating \Oro\Bundle\PricingBundle\Model\ProductPriceCriteria. Eliminated all occurrences of manual creation of product price criteria with corresponding BC fallbacks.\Oro\Bundle\PricingBundle\Provider\MatchedProductPriceProviderInterface implemented in \Oro\Bundle\PricingBundle\Provider\ProductPriceProvider::getMatchedProductPrices to get a collection of \Oro\Bundle\PricingBundle\Model\ProductPriceInterface product prices.\Oro\Bundle\PricingBundle\ProductKit\ProductPriceCriteria\ProductKitPriceCriteria and \Oro\Bundle\PricingBundle\ProductKit\ProductPriceCriteria\ProductKitItemPriceCriteria product price criteria models for passing to the product price provider.\Oro\Bundle\PricingBundle\ProductKit\ProductPrice\ProductKitPriceDTO and \Oro\Bundle\PricingBundle\ProductKit\ProductPrice\ProductKitItemPriceDTO as the DTO representing a product kit price.\Oro\Bundle\PricingBundle\Provider\PriceByMatchingCriteria\ProductPriceByMatchingCriteriaProvider as the provider responsible for getting a product price matching the specified product price criteria. Made use of it in \Oro\Bundle\PricingBundle\Provider\ProductPriceProvider.\Oro\Bundle\PricingBundle\Model\ProductLineItemPrice\ProductLineItemPrice, \Oro\Bundle\PricingBundle\ProductKit\ProductLineItemPrice\ProductKitLineItemPrice, \Oro\Bundle\PricingBundle\ProductKit\ProductLineItemPrice\ProductKitItemLineItemPrice.\Oro\Bundle\PricingBundle\Provider\ProductLineItemPriceProvider as the main entry point for getting product line item prices.\Oro\Bundle\ProductBundle\Event\DatagridKitItemLineItemsDataEvent as the event for collecting product kit item line items data for the product line items storefront datagrids.\Oro\Bundle\ProductBundle\Filter\ComposedSkuStringFilter for SKU filter on the product line items storefront datagrids to take into account product kit item line items SKUs during filtration.\Oro\Bundle\ProductBundle\ProductKit\EventListener\ProductStatusListener that switches status and inventory status of a product kit depending on its kit item products.\Oro\Bundle\ProductBundle\ProductKit\EventListener\SearchProductKitListener that schedule index operation for the product kit for the back-office.\Oro\Bundle\ProductBundle\ProductKit\EventListener\WebsiteSearchReindexProductKitListener that schedule index operation for the product kit for the storefront.\Oro\Bundle\ProductBundle\EventListener\WebsiteSearchProductPreloadingIndexerListener that preload products with required data at the start of website reindex operation.\Oro\Bundle\ProductBundle\Autocomplete\ProductVisibilityLimitedSearchHandler::setNotAllowedProductTypes.oro_product.popup_gallery_on_product_view option from the system configuration is not used anymore.product_segment content widget in \Oro\Bundle\ProductBundle\Form\Type\ProductSegmentContentWidgetSettingsType.\Oro\Bundle\ProductBundle\Form\Type\ProductUnitChoiceType form type for selecting a product unit from the available product units of a specified product.\Oro\Bundle\PaymentBundle\Context\PaymentLineItem - see \Oro\Bundle\PaymentBundle\Context\LineItem\Factory\PaymentLineItemFromProductLineItemFactoryInterface.\Oro\Bundle\PaymentBundle\Context\PaymentKitItemLineItem model to make \Oro\Bundle\PaymentBundle\Context\PaymentLineItem store payment kit item line items.\Oro\Bundle\RFPBundle\Provider\ProductRFPAvailabilityProvider instead of the deprecated \Oro\Bundle\RFPBundle\Provider\ProductAvailabilityProvider.[f]\Oro\Bundle\RFPBundle\Provider\ProductRFPAvailabilityProvider::setNotAllowedProductTypes.\Oro\Bundle\RFPBundle\Entity\RequestProductKitItemLineItem to represent product kit item line item in \Oro\Bundle\RFPBundle\Entity\RequestProduct.\Oro\Bundle\RFPBundle\Form\Type\Frontend\RequestProductItemType form type to decouple it from the form type used in back-office.\Oro\Bundle\RFPBundle\Provider\RequestProductLineItemTierPricesProvider that provides tier product prices for the request product items of the specified request entity.request_create_confirmation email template to extend it from base_storefront email template.\Oro\Bundle\SaleBundle\Entity\QuoteProductKitItemLineItem to represent product kit item line item in \Oro\Bundle\SaleBundle\Entity\QuoteProduct.\Oro\Bundle\SaleBundle\WorkflowState\Condition\IsQuoteValid (is_quote_valid) workflow condition to check a quote could be sent to a customer.Oro\Bundle\SaleBundle\Model\BaseQuoteProductItem::$checksum property as a part of allowing to add the same product with the same unit code multiple times.Oro\Bundle\SaleBundle\Entity\QuoteProductDemand::$checksum property as a part of allowing to add the same product with the same unit code multiple times.quote_email_link, quote_email_link_guest email templates to extend them from base_storefront email template.readonly attribute for the price field of the product kit line item in the quote form.Oro\Bundle\SEOBundle\EventListener\RestrictSitemapCmsPageByUrlSlugsListener that excludes cms pages without URL slugs from the sitemap.\Oro\Bundle\ShoppingListBundle\Entity\ProductKitItemLineItem entity to the storefront API as shoppinglistkititem resource.\Oro\Bundle\ShoppingListBundle\Entity\ProductKitItemLineItem entity to the back-office API.\Oro\Bundle\ShoppingListBundle\EventListener\DatagridLineItemsDataValidationListener instead of the deprecated \Oro\Bundle\CheckoutBundle\EventListener\DatagridLineItemsDataViolationsListener.[f]\Oro\Bundle\ShoppingListBundle\Validator\Constraints\ProductKitItemProductHasPrice validation constraint for checking if product kit item product has price.Oro\Bundle\ShoppingListBundle\Entity\LineItem::$checksum property as a part of allowing to add the same product with the same unit code multiple times.Oro\Bundle\ShoppingListBundle\Entity\ShoppingList::$currency property.Oro\Bundle\ShoppingListBundle\Entity\ShoppingListTotal::$customerUser relation property\Oro\Bundle\TaxBundle\Resolver\KitAdjustResolver resolver to adjust tax amount for product kits.\Oro\Bundle\VisibilityBundle\EventListener\DatagridLineItemsDataVisibilityListener and \Oro\Bundle\VisibilityBundle\EventListener\DatagridLineItemsDataVisibilityPrefetchListener for adding visibility data to the product line items storefront datagrids.is_visible_product TWIG function for checking if a product is visible.labels field to \Oro\Bundle\CMSBundle\Entity\ContentWidget.\Oro\Bundle\CMSBundle\Entity\ImageSlide: extraLargeImage2x,extraLargeImage3x,largeImage,largeImage2x,largeImage3x,mediumImage2x,mediumImage3x,smallImage2x,smallImage3x .header field to \Oro\Bundle\CMSBundle\Entity\ImageSlide.oro_cms_image_slide_image that returns the URL to the slider image using a predefined fallback strategy.Oro\Bundle\CMSBundle\Validator\Constraints\HasAtLeastOneSizeImage constraint and \Oro\Bundle\CMSBundle\Validator\Constraints\HasAtLeastOneSizeImageValidator validator to ensure at least one size of image is selected in a group.Oro\Bundle\CMSBundle\Acl\Voter\LandingPageDeleteVoter voter that prevents deletion of a landing page used as a homepage or a content variant in any content node of any web catalog.oro_cms.home_page option to the system configuration.doNotRenderTitle field to Oro\Bundle\CMSBundle\Form\Type\CmsPageVariantType.createUrlSlug field to Oro\Bundle\CMSBundle\Form\Type\PageType.\Oro\Bundle\UPSBundle\Factory\PriceRequestFactory to make it work with \Oro\Bundle\ShippingBundle\Entity\ProductShippingOptionsInterface models.\Oro\Bundle\CheckoutBundle\Converter\ShoppingListLineItemConverter, \Oro\Bundle\CheckoutBundle\DataProvider\Converter\CheckoutLineItemsConverter, \Oro\Bundle\CheckoutBundle\WorkflowState\Mapper\ShoppingListLineItemDiffMapper to take into account \Oro\Bundle\CheckoutBundle\Entity\CheckoutProductKitItemLineItem entities.\Oro\Bundle\CheckoutBundle\Datagrid\FrontendLineItemsGridExtension, \Oro\Bundle\CheckoutBundle\Provider\MultiShipping\GroupedCheckoutLineItemsProvider, \Oro\Bundle\CheckoutBundle\Provider\CheckoutLineItemsProvider to take into account checkout line item checksum.b2b_flow_checkout workflow: enabled the check for order_line_items_not_empty action group in place_order_definition transition definition.frontend-checkout-line-items-grid checkout line items datagrid to make it show checkout product kit line items, update related frontend templates.order_confirmation_email email notification template to include kit item line items data.oro_frontend_root renders home page landing page from the System Configuration.\Oro\Bundle\FedexShippingBundle\Builder\ShippingPackagesByLineItemBuilderInterface::addLineItem so it expects \Oro\Bundle\ShippingBundle\Context\ShippingLineItem argument instead of the removed \Oro\Bundle\ShippingBundle\Context\ShippingLineItemInterface.\Oro\Bundle\FedexShippingBundle\Factory\FedexPackagesByLineItemsAndPackageSettingsFactoryInterface::create so it expects a collection \Doctrine\Common\Collections\Collection of \Oro\Bundle\ShippingBundle\Context\ShippingLineItem entities instead of the removed \Oro\Bundle\ShippingBundle\Context\LineItem\Collection\ShippingLineItemCollectionInterface.\Oro\Bundle\FedexShippingBundle\Modifier\ShippingLineItemCollectionBySettingsModifierInterface::modify so it expects a collection \Doctrine\Common\Collections\Collection of \Oro\Bundle\ShippingBundle\Context\ShippingLineItem entities instead of the removed \Oro\Bundle\ShippingBundle\Context\LineItem\Collection\ShippingLineItemCollectionInterface.\Oro\Bundle\FixedProductShippingBundle\Provider\ShippingCostProvider::getCalculatedProductShippingCost so it expects a collection \Doctrine\Common\Collections\Collection of \Oro\Bundle\ShippingBundle\Context\ShippingLineItem entities instead of the removed \Oro\Bundle\ShippingBundle\Context\LineItem\Collection\ShippingLineItemCollectionInterface.\Oro\Bundle\OrderBundle\Converter\OrderPaymentLineItemConverterInterface so it returns a collection \Doctrine\Common\Collections\Collection of \Oro\Bundle\PaymentBundle\Context\PaymentLineItem instead of the removed \Oro\Bundle\PaymentBundle\Context\LineItem\Collection\PaymentLineItemCollectionInterface.\Oro\Bundle\OrderBundle\Converter\OrderShippingLineItemConverterInterface so it returns a collection \Doctrine\Common\Collections\Collection of \Oro\Bundle\ShippingBundle\Context\ShippingLineItem instead of the removed \Oro\Bundle\ShippingBundle\Context\LineItem\Collection\ShippingLineItemCollectionInterface.\Oro\Bundle\OrderBundle\Converter\BasicOrderShippingLineItemConverter to make it work with the new shipping line item factory \Oro\Bundle\ShippingBundle\Context\LineItem\Factory\ShippingLineItemFromProductLineItemFactory.\Oro\Bundle\OrderBundle\Converter\BasicOrderPaymentLineItemConverter to make it work with the new payment line item factory \Oro\Bundle\PaymentBundle\Context\LineItem\Factory\PaymentLineItemFromProductLineItemFactory.\Oro\Bundle\CheckoutBundle\Converter\OrderLineItemConverter to make it create order line items with kit item line items.\Oro\Bundle\OrderBundle\Form\Type\OrderLineItemType to add kitItemLineItems form field needed for an order line item of a product kit.\Oro\Bundle\OrderBundle\Form\Extension\OrderDataStorageExtension now takes into account kit item line items when creating an order from the product data storage.\Oro\Bundle\PaymentBundle\Context\PaymentLineItem, see section "Removed" for details.\Oro\Bundle\PaymentBundle\Context\Builder\PaymentContextBuilderInterface to make it work with \Oro\Bundle\PaymentBundle\Context\PaymentLineItem instead of the removed \Oro\Bundle\PaymentBundle\Context\PaymentLineItemInterface and \Oro\Bundle\PaymentBundle\Context\LineItem\Collection\PaymentLineItemCollectionInterface.\Oro\Bundle\PaymentBundle\Context\Converter\Basic\BasicPaymentContextToRulesValueConverter to take into account \Oro\Bundle\PaymentBundle\Context\PaymentKitItemLineItem entities.\Oro\Bundle\PaymentBundle\Context\PaymentContextInterface::getLineItems so it returns collection \Doctrine\Common\Collections\Collection of \Oro\Bundle\PaymentBundle\Context\PaymentLineItem entities instead of the removed \Oro\Bundle\PaymentBundle\Context\LineItem\Collection\PaymentLineItemCollectionInterface.\Oro\Bundle\PaymentBundle\Context\PaymentLineItem - implemented \Oro\Bundle\ProductBundle\Model\ProductKitItemLineItemsAwareInterface.\Oro\Bundle\PaymentBundle\ExpressionLanguage\DecoratedProductLineItemFactory to make it work with \Oro\Bundle\PaymentBundle\Context\PaymentKitItemLineItem models.\Oro\Bundle\PricingBundle\Provider\ProductLineItemProductPriceProvider now returns prices for all enabled product units.\Oro\Bundle\ProductBundle\Model\ProductKitItemLineItemInterface into \Oro\Bundle\ProductBundle\Model\ProductKitItemAwareInterface.\Oro\Bundle\ProductBundle\ImportExport\Strategy\ProductStrategy - added the possibility of postponing rows for missing product kits item products and fixed losing the related kitItems collections located deeper than 1st level.\Oro\Bundle\ProductBundle\ImportExport\TemplateFixture\ProductFixture - added new simple and kit products.\Oro\Bundle\ProductBundle\EventListener\WebsiteSearchProductIndexerListener - to take into account product kits.\Oro\Bundle\ProductBundle\Form\Type\ProductSegmentContentWidgetSettingsType
enable_autoplay renamed to autoplayautoplay_speed renamed to autoplaySpeedshow_dots renamed to dotsenable_infinite_scroll renamed to infiniteautoplay_speed renamed to autoplaySpeed\Oro\Bundle\ProductBundle\Model\ProductKitItemLineItemsAwareInterface into \Oro\Bundle\ProductBundle\Model\ProductLineItemChecksumAwareInterface.\Oro\Bundle\ProductBundle\Model\ProductLineItemInterface into \Oro\Bundle\ProductBundle\Model\ParentProductAwareInterface.\Oro\Bundle\ProductBundle\Autocomplete\ProductVisibilityLimitedSearchHandler.getProduct to \Oro\Bundle\ProductBundle\Model\ProductKitItemLineItemsAwareInterface.\Oro\Bundle\ProductBundle\Validator\Constraints\ProductKitItemLineItemQuantityUnitPrecision and its validator\Oro\Bundle\PromotionBundle\OrderTax\Mapper\OrderLineItemAfterDiscountsMapper now takes into account product kits and proportionally distributes its discounts subtotal among the product kit subtotal when the Calculate Taxes After Promotions option is enabled.\Oro\Bundle\ProductBundle\Model\ProductKitItemLineItemsAwareInterface in \Oro\Bundle\RFPBundle\Entity\RequestProduct so it has the field $kitItemLineItems with a collection of kit item line items.\Oro\Bundle\ProductBundle\Model\ProductKitItemLineItemsAwareInterface, \Oro\Bundle\ProductBundle\Model\ProductLineItemChecksumAwareInterface in \Oro\Bundle\RFPBundle\Entity\RequestProductItem so it has the property $kitItemLineItems with a collection of kit item line items and a checksum.\Oro\Bundle\RFPBundle\Form\Extension\RequestDataStorageExtension now takes into account kit item line items when creating an RFQ from the product data storage.\Oro\Bundle\RFPBundle\Form\Type\Frontend\RequestProductType form type from the form type used in back-office.frontend_request_create, frontend_request_update to \Oro\Bundle\RFPBundle\Layout\DataProvider\RFPFormProvider that creates an RFQ form for a storefront.request_create_confirmation with the ability to show kit item line items.\Oro\Bundle\RFPBundle\Twig\RequestProductsExtension to add kit item line items data to the rfp_products TWIG function used in email templates.\Oro\Bundle\SaleBundle\Quote\Shipping\LineItem\Converter\FirstOffers\FirstOffersQuoteToShippingLineItemConverter and \Oro\Bundle\SaleBundle\Quote\Shipping\LineItem\Converter\SelectedOffers\SelectedOffersQuoteToShippingLineItemConverter to make them work with the new shipping line item factory \Oro\Bundle\SaleBundle\Quote\Shipping\Context\LineItem\Factory\ShippingLineItemFromQuoteProductDemandFactory.\Oro\Bundle\SaleBundle\Quote\Shipping\LineItem\Converter\QuoteToShippingLineItemConverterInterface::convertLineItems so it returns a collection \Doctrine\Common\Collections\Collection of \Oro\Bundle\ShippingBundle\Context\ShippingLineItem instead of the removed \Oro\Bundle\ShippingBundle\Context\LineItem\Collection\ShippingLineItemCollectionInterface.\Oro\Bundle\SaleBundle\Converter\QuoteDemandLineItemConverter to enable the start of a checkout from a quote with product kits.\Oro\Bundle\ProductBundle\Model\ProductKitItemLineItemsAwareInterface in \Oro\Bundle\SaleBundle\Entity\QuoteProduct so it has the field $kitItemLineItems with a collection of kit item line items.\Oro\Bundle\ProductBundle\Model\ProductKitItemLineItemsAwareInterface, \Oro\Bundle\ProductBundle\Model\ProductLineItemChecksumAwareInterface in \Oro\Bundle\SaleBundle\Model\BaseQuoteProductItem so it has the property $kitItemLineItems with a collection of kit item line items and a checksum.\Oro\Bundle\ProductBundle\Model\ProductKitItemLineItemsAwareInterface, \Oro\Bundle\ProductBundle\Model\ProductLineItemChecksumAwareInterface in \Oro\Bundle\SaleBundle\Entity\QuoteProductDemand so it has the property $kitItemLineItems with a collection of kit item line items and a checksum.\Oro\Bundle\SaleBundle\Form\Extension\QuoteDataStorageExtension now takes into account kit item line items when creating a quote from the product data storage.verify_transition to the b2b_quote_backoffice_default to check a quote could be sent to a customer.orosale/js/app/components/dependent-field-component js module supports data-disable-element element that disables form elements in dependee element.\Oro\Bundle\ShippingBundle\Context\ShippingLineItem, see section "Removed" for details.\Oro\Bundle\ShippingBundle\Context\Builder\ShippingContextBuilderInterface to make it work with \Oro\Bundle\ShippingBundle\Context\ShippingLineItem instead of the removed \Oro\Bundle\PaymentBundle\Context\PaymentLineItemInterface and \Oro\Bundle\ShippingBundle\Context\LineItem\Collection\ShippingLineItemCollectionInterface.\Oro\Bundle\ShippingBundle\Converter\Basic\ShippingContextToRulesValuesConverter to take into account \Oro\Bundle\ShippingBundle\Context\ShippingKitItemLineItem models.\Oro\Bundle\ShippingBundle\ExpressionLanguage\DecoratedProductLineItemFactory to make it work with \Oro\Bundle\ShippingBundle\Context\ShippingKitItemLineItem models.\Oro\Bundle\ShippingBundle\Context\ShippingKitItemLineItem to make it work with \Oro\Bundle\ShippingBundle\Model\Dimensions and \Oro\Bundle\ShippingBundle\Model\Weight.\Symfony\Component\Validator\Constraints\GroupSequence in \Oro\Bundle\ShoppingListBundle\Controller\Frontend\AjaxProductKitLineItemController when creating/updating a product kit line item.\Symfony\Component\Validator\Constraints\GroupSequence for shoppinglistitem and shoppinglistkititem storefront API resources.\Oro\Bundle\ShoppingListBundle\Storage\ProductDataStorage now additionally puts kit item line items data into the product data storage.doNotRenderTitle to Oro\Bundle\WebCatalogBundle\Entity\ContentVariant.\Oro\Bundle\CheckoutBundle\DataProvider\LineItem\CheckoutLineItemsDataProvider, added \Oro\Bundle\CheckoutBundle\DataProvider\CheckoutDataProvider instead.\Oro\Bundle\CheckoutBundle\EventListener\DatagridLineItemsDataViolationsListener, use \Oro\Bundle\ShoppingListBundle\EventListener\DatagridLineItemsDataValidationListener instead.[f]\Oro\Bundle\CheckoutBundle\Event\CheckoutValidateEvent.\Oro\Bundle\CheckoutBundle\Provider\CheckoutSubtotalProvider, added \Oro\Bundle\CheckoutBundle\Provider\SubtotalProvider instead to make it work with product kit line items in checkout.[f]\Oro\Bundle\CheckoutBundle\Helper\CheckoutWorkflowHelper::restartCheckout.extendable_condition.checkout.patchDeviceModel method in DevidesManager. Use updateCalcPreviewDeviceWidth from DeviceManager for update device preview width instead.\Oro\Bundle\InventoryBundle\EventListener\CreateOrderEventListener::onBeforeOrderCreate that checked the inventory level of the products present in checkout, added \Oro\Bundle\InventoryBundle\Validator\Constraints\HasEnoughInventoryLevel validation constraint instead.\Oro\Bundle\InventoryBundle\EventListener\CreateOrderCheckUpcomingListener that checked if products upcoming dates comply with checkout Ship Until option. Moved to the validation.yml config in CheckoutBundle instead.\Oro\Bundle\InventoryBundle\EventListener\CreateOrderLineItemValidationListener.\Oro\Bundle\InventoryBundle\EventListener\LineItemValidationListener that checked the product line items quantity to order limits. Moved to the validation.yml config in CheckoutBundle instead.\Oro\Bundle\InventoryBundle\EventListener\LowInventoryCheckoutLineItemValidationListener that checked if product inventory level is running low and added the corresponding warning. Moved to the validation.yml config in CheckoutBundle instead.\Oro\Bundle\InventoryBundle\EventListener\QuantityToOrderConditionListener that checked the checkout line items quantity to order limits to prevent a checkout from starting. Moved to the validation.yml config in CheckoutBundle instead.\Oro\Bundle\InventoryBundle\EventListener\UpcomingLabelCheckoutLineItemValidationListener that checked if product is upcoming low and added the corresponding warning. Moved to the validation.yml config in CheckoutBundle instead.\Oro\Bundle\InventoryBundle\Validator\LowInventoryCheckoutLineItemValidator::isLineItemRunningLow, use \Oro\Bundle\InventoryBundle\Validator\LowInventoryCheckoutLineItemValidator::isRunningLow instead.[f]\Oro\Bundle\InventoryBundle\Validator\LowInventoryCheckoutLineItemValidator::getMessageIfLineItemRunningLow, use \Oro\Bundle\InventoryBundle\Validator\LowInventoryCheckoutLineItemValidator::getMessageIfRunningLow instead.[f]\Oro\Bundle\OrderBundle\EventListener\Order\MatchingPriceEventListener, its responsibility is fulfilled by \Oro\Bundle\OrderBundle\Form\Type\EventListener\SubtotalSubscriber.[f]\Oro\Bundle\OrderBundle\EventListener\Order\TierPriceEventListener, its responsibility is fulfilled by \Oro\Bundle\OrderBundle\EventListener\Order\OrderLineItemTierPricesEventListener now that adds both tier prices for simple products and for product kits.[f]getMatchingPrices, fillMatchingPrices methods from \Oro\Bundle\OrderBundle\Pricing\PriceMatcher, use addMatchingPrices instead.[f]\Oro\Bundle\PaymentBundle\Context\PaymentLineItemInterface, use \Oro\Bundle\PaymentBundle\Context\PaymentLineItem instead.[f]\Oro\Bundle\ShippingBundle\Context\LineItem\Collection\ShippingLineItemCollectionInterface and \Oro\Bundle\PaymentBundle\Context\LineItem\Collection\Doctrine\DoctrinePaymentLineItemCollection, use collection \Doctrine\Common\Collections\Collection of \Oro\Bundle\PaymentBundle\Context\PaymentLineItem entities instead.[f]\Oro\Bundle\PaymentBundle\Context\LineItem\Collection\Factory\PaymentLineItemCollectionFactoryInterface and \Oro\Bundle\PaymentBundle\Context\LineItem\Collection\Doctrine\Factory\DoctrinePaymentLineItemCollectionFactory, use \Oro\Bundle\PaymentBundle\Context\LineItem\Factory\PaymentLineItemFromProductLineItemFactoryInterface::createCollection instead.\Oro\Bundle\PaymentBundle\Context\LineItem\Builder\Factory\PaymentLineItemBuilderFactoryInterface, \Oro\Bundle\PaymentBundle\Context\LineItem\Builder\Basic\Factory\BasicPaymentLineItemBuilderFactory, \Oro\Bundle\PaymentBundle\Context\LineItem\Builder\PaymentLineItemBuilderInterface, \Oro\Bundle\PaymentBundle\Context\LineItem\Builder\Basic\BasicPaymentLineItemBuilder. Use \Oro\Bundle\PaymentBundle\Context\LineItem\Factory\PaymentLineItemFromProductLineItemFactory instead.products-prices-component.js, decoupled its dependent components.\Oro\Bundle\ProductBundle\ProductKit\EventListener\ProductStatusListener, added \Oro\Bundle\ProductBundle\ProductKit\EventListener\StatusListener instead.tierPrices, matchedPrices, isShippingAddressGranted from \Oro\Bundle\SaleBundle\Form\QuoteFormTemplateDataProvider.\Oro\Bundle\SaleBundle\Provider\QuoteProductPriceProvider (oro_sale.provider.quote_product_price), use \Oro\Bundle\SaleBundle\Provider\QuoteProductPricesProvider (oro_sale.provider.quote_product_prices) instead.[p]\Oro\Bundle\SaleBundle\Quote\Pricing\QuotePriceComparator, use \Oro\Bundle\SaleBundle\Quote\Pricing\QuotePricesComparator (oro_sale.quote.pricing.comparator) instead.[p]\Oro\Bundle\ShippingBundle\Context\ShippingLineItemInterface, use \Oro\Bundle\ShippingBundle\Context\ShippingLineItem instead.[f]\Oro\Bundle\ShippingBundle\Context\LineItem\Collection\ShippingLineItemCollectionInterface and \Oro\Bundle\ShippingBundle\Context\LineItem\Collection\Doctrine\DoctrineShippingLineItemCollection, use collection \Doctrine\Common\Collections\Collection of \Oro\Bundle\ShippingBundle\Context\ShippingLineItem entities instead.[f]\Oro\Bundle\ShippingBundle\Context\LineItem\Collection\Factory\ShippingLineItemCollectionFactoryInterface and \Oro\Bundle\ShippingBundle\Context\LineItem\Collection\Doctrine\Factory\DoctrineShippingLineItemCollectionFactory, use \Oro\Bundle\ShippingBundle\Context\LineItem\Factory\ShippingLineItemFromProductLineItemFactoryInterface::createCollection instead.\Oro\Bundle\ShippingBundle\Context\LineItem\Builder\Factory\ShippingLineItemBuilderFactoryInterface, \Oro\Bundle\ShippingBundle\Context\LineItem\Builder\Basic\Factory\BasicShippingLineItemBuilderFactory, \Oro\Bundle\ShippingBundle\Context\LineItem\Builder\ShippingLineItemBuilderInterface, \Oro\Bundle\ShippingBundle\Context\LineItem\Builder\Basic\BasicShippingLineItemBuilder, Oro\Bundle\ShippingBundle\Context\LineItem\Builder\Basic\Factory\BasicLineItemBuilderByLineItemFactory. Use \Oro\Bundle\ShippingBundle\Context\LineItem\Factory\ShippingLineItemFromProductLineItemFactory instead.\Oro\Bundle\ShippingBundle\Context\LineItem\Collection\ShippingOptions\Factory\ShippingOptionsLineItemCollectionFactoryDecorator, use \Oro\Bundle\ShippingBundle\Context\LineItem\Factory\ShippingLineItemFromProductLineItemFactoryInterface::createCollection insteadproductsMatchedPrices from shopping_lists_awere_container layout block type, added productLineItemsPricesByShoppingList insteadgetMatchedPrices, getMatchedPrice from \Oro\Bundle\ShoppingListBundle\Layout\DataProvider\FrontendShoppingListProductsProvider, added getProductLineItemPricesForShoppingLists instead.\Oro\Bundle\ShoppingListBundle\EventListener\DatagridLineItemsDataViolationsListener, use \Oro\Bundle\ShoppingListBundle\EventListener\DatagridLineItemsDataValidationListener instead.[f]\Oro\Bundle\ShoppingListBundle\Event\LineItemValidateEvent, \Oro\Bundle\ShoppingListBundle\Validator\Constraints\LineItemCollection, \Oro\Bundle\ShoppingListBundle\Validator\Constraints\LineItemCollectionValidator, \Oro\Bundle\ShoppingListBundle\Validator\LineItemViolationsProvider.\Oro\Bundle\ShoppingListBundle\ProductKit\Checksum\LineItemChecksumGeneratorInterface and implementations. Use \Oro\Bundle\ProductBundle\LineItemChecksumGenerator\LineItemChecksumGeneratorInterface instead.[f]\Oro\Bundle\ShoppinglistBundle\ProductKit\Checker\ProductKitAvailabilityChecker, use \Oro\Bundle\ProductBundle\ProductKit\Checker\ProductKitAvailabilityChecker instead.[f]\Oro\Bundle\ShoppinglistBundle\ProductKit\Checker\ProductKitItemAvailabilityChecker, use \Oro\Bundle\ProductBundle\ProductKit\Checker\ProductKitItemAvailabilityChecker instead.[f]\Oro\Bundle\ShoppinglistBundle\ProductKit\Checker\ProductKitItemProductAvailabilityChecker, use \Oro\Bundle\ProductBundle\ProductKit\Checker\ProductKitItemProductAvailabilityChecker instead.[f]\Oro\Bundle\ShoppinglistBundle\ProductKit\Provider\ProductKitItemsProvider, use \Oro\Bundle\ProductBundle\ProductKit\Provider\ProductKitItemsProvider instead.[f]\Oro\Bundle\ShoppinglistBundle\ProductKit\Provider\ProductKitItemProductsProvider, use \Oro\Bundle\ProductBundle\ProductKit\Provider\ProductKitItemProductsProvider instead.[f]\Oro\Bundle\ValidationBundle\Validator\Constraints\UniqueEntity validation constraint and validator. Use instead \Oro\Bundle\FormBundle\Validator\Constraints\UniqueEntity.\Oro\Bundle\WebCatalogBundle\ContentNodeUtils\Loader\ResolvedContentNodesLoader, \Oro\Bundle\WebCatalogBundle\ContentNodeUtils\Loader\ResolvedContentVariantsLoader to easily get resolved content nodes for specified content node ids.\Oro\Bundle\WebCatalogBundle\ContentNodeUtils\Factory\ResolvedContentNodeFactory, \Oro\Bundle\WebCatalogBundle\ContentNodeUtils\Factory\ResolvedContentVariantFactory to easily create \Oro\Bundle\WebCatalogBundle\Cache\ResolvedData\ResolvedContentNode and \Oro\Bundle\WebCatalogBundle\Cache\ResolvedData\ResolvedContentVariant models.\Oro\Bundle\WebCatalogBundle\Cache\ResolvedContentNodeNormalizer to decrease the complexity of \Oro\Bundle\WebCatalogBundle\Cache\ContentNodeTreeCache.\Oro\Bundle\WebCatalogBundle\ContentNodeUtils\Loader\ResolvedContentNodesLoader to decrease the complexity of \Oro\Bundle\WebCatalogBundle\ContentNodeUtils\ContentNodeTreeResolver.\Oro\Bundle\WebCatalogBundle\ContentNodeUtils\ContentNodeTreeResolverInterface::getResolvedContentNode.\Oro\Bundle\WebCatalogBundle\Cache\ContentNodeTreeMergingResolver that merges resolved content nodes from multiple scopes.\Oro\Bundle\WebCatalogBundle\Cache\ResolvedContentNodesMerger to decrease the complexity of \Oro\Bundle\WebCatalogBundle\Cache\ContentNodeTreeMergingResolver.\Oro\Bundle\WebCatalogBundle\Menu\MenuContentNodesProviderInterface, \Oro\Bundle\WebCatalogBundle\Menu\MenuContentNodesProvider, \Oro\Bundle\WebCatalogBundle\Menu\StorefrontMenuContentNodesProvider and \Oro\Bundle\WebCatalogBundle\Menu\CompositeMenuContentNodesProvider to provide an ability of getting resolved content nodes for showing in menu.Oro\Bundle\PricingBundle\Entity\PriceList entity. All existing prices was moved to the first organization.category_sort_order in Product entity & website search index to manage sort orders in Categoriesfrontend-product-search-grid based on Category)\Oro\Bundle\CatalogBundle\Menu\MenuCategoriesProviderInterface, \Oro\Bundle\CatalogBundle\Menu\MenuCategoriesProvider, \Oro\Bundle\CatalogBundle\Menu\MenuCategoriesCachingProvider to provide an ability of getting categories data for showing in menu.\Oro\Bundle\CatalogBundle\Menu\MenuCategoriesCache that encapsulates the normalization logic of categories data.\Oro\Bundle\CommerceMenuBundle\Entity\MenuUpdate.WYSIWYG editor.
renderWysiwygContent TWIG macro and a layout block type wysiwyg_content for rendering WYSIWYG content on the storefront. See the How to Display WYSIWYG Field article for more information.Added entity name provider for the Page entity.
Consent entity.renderWysiwygContent TWIG macro and a layout block type wysiwyg_content for rendering WYSIWYG content on storefront.
See article How to Display WYSIWYG Field
for more information.The Brand entity now has its own search result template for the backend search
Added the product_original_filenames feature. This feature is enabled when oro_attachment.original_file_names_enabled.
is disabled and oro_product.original_file_names_enabled is enabled.
The relevance_weight field is added to the website search mapping for the Product entity.
Product Collections. Added sort order management for Products in Product Collections:
ProductCollectionSortOrder and website search field assigned_to_sort_order.ASSIGN_TYPE_ASSIGN_ID have been added to link Products to Segments with a SortOrder to manage sort orders in Product Collectionsfrontend-product-search-grid based on ProductCollection)Promotion entity.orphanRemoval option for SEO fields: metaDescriptions, metaKeywords, metaTitles.Oro\Bundle\ShippingBundle\Method\ShippingMethodInterface and all classes that implement this interface.[f]Oro\Bundle\ShippingBundle\Method\ShippingMethodTypeInterface and all classes that implement this interface.[f]Oro\Bundle\ShippingBundle\Method\ShippingMethodProviderInterface and all classes that implement this interface.[f]Oro\Bundle\ShippingBundle\Method\Factory\IntegrationShippingMethodFactoryInterface and all classes that implement this interface.[f]Oro\Bundle\ShippingBundle\Method\ShippingMethodProviderInterface and replace them with Oro\Bundle\ShippingBundle\Method\Provider\Integration\ChannelShippingMethodProvider.\Oro\Bundle\WebCatalogBundle\Async\WebCatalogCacheProcessor so it builds cache starting always from the root content node.\Oro\Bundle\WebCatalogBundle\Provider\ContentNodeProvider::getContentVariantIds so the ordering of the loaded data follows the order of specified ids.modelMixin to modelProps and viewMixin to viewProps. An object definition of the editor type model/view was passed.
Added ModelType and ViewType properties to pass the constructor functiontext-type-builder.js to text-type.js. Removed -builder in file namesinventory_status to inv_status
to avoid collision with the field name for the inventory status product attributeinventory indexation groupminimal_price_CPL_ID_CURRENCY_UNIT to minimal_price.CPL_ID_CURRENCY_UNIT,
minimal_price_CPL_ID_CURRENCY to minimal_price.CPL_ID_CURRENCY,
minimal_price_PRICE_LIST_ID_CURRENCY_UNIT to minimal_price.PRICE_LIST_ID_CURRENCY_UNIT,
minimal_price_PRICE_LIST_ID_CURRENCY to minimal_price.PRICE_LIST_ID_CURRENCYproduct_id has been replaced with system_entity_idOro\Bundle\ProductBundle\Provider\ProductImageFileNameProvider is applicable if product_original_filenames feature is enabled.website_search_engine_dsn parameter is used instead of search_engine_name, search_engine_host, search_engine_port, search_engine_index_prefix, search_engine_username, search_engine_password, search_engine_ssl_verification, search_engine_ssl_cert, search_engine_ssl_cert_password, search_engine_ssl_key, search_engine_ssl_key_password, website_search_engine_index_prefix.Oro\Bundle\ShippingBundle\Provider\ShippingMethodChoicesProviderInterface.menu_item; It was updated and moved to CommerceMenuBundle\Oro\Bundle\WebCatalogBundle\Cache\ContentNodeTreeCache::deleteForNode, the method is moved to \Oro\Bundle\WebCatalogBundle\Async\ContentNodeSlugsProcessor.Oro\Bundle\WebCatalogBundle\Cache\ContentNodeTreeResolver. New resolvers are used instead - \Oro\Bundle\WebCatalogBundle\Cache\ContentNodeTreeCachingResolver and \Oro\Bundle\WebCatalogBundle\Cache\ContentNodeTreeMergingResolver.category_list\Oro\Bundle\CatalogBundle\Layout\DataProvider\DTO\Category, \Oro\Bundle\CatalogBundle\Layout\DataProvider\CategoryProvider::getCategoryTree, \Oro\Bundle\CatalogBundle\Layout\DataProvider\CategoryProvider::getCategoryTreeArray, \Oro\Bundle\CatalogBundle\Layout\DataProvider\CategoryProvider::getRootCategory as not needed for building a menu anymore. Instead, the \Oro\Bundle\CatalogBundle\Menu\MenuCategoriesCachingProvider is used.text_with_placeholders, wysiwyg_style layout block types. Use wysiwyg_content instead.grapesjs-module.js.oro_order.event_listener.frontend_order_datagrid is removed. Its responsibility is merged
into oro_order.event_listener.order_datagrid.single-page-checkout:before-layout-subtree-content-loading - triggered before the update of Layout Subtrees
single-page-checkout:after-layout-subtree-content-loading - triggered after the update of Layout Subtrees
single-page-checkout:layout-subtree-content-loading-fail - triggered when there was an error and the response failed
single-page-checkout:rendered - triggered when the form has rendered
single-page-checkout:before-change - triggered when the form changes
single-page-checkout:after-change - triggered after the form changes
single-page-checkout:before-force-change - triggered before the forced form change
single-page-checkout:after-force-change - triggered after the forced form change
optimized layout theme with landing extra js build utilized on oro_cms_frontend_page_view page, see article How to Create Extra JS Build for a Landing Page.category_path_CATEGORY_PATH has been renamed to category_paths.CATEGORY_PATH[f]assigned_to_ASSIGN_TYPE_ASSIGN_ID has been renamed to assigned_to.ASSIGN_TYPE_ASSIGN_ID.CATEGORY_PATH[f]manually_added_to_ASSIGN_TYPE_ASSIGN_ID has been renamed to manually_added_to.ASSIGN_TYPE_ASSIGN_ID[f]click and focusin DOM-events. See Initialize Components on DOM events/admin/api/files/{id} REST API resource:
filePath structure was updated from ["product_original": "/path/to/image.jpeg"] to [{"url": "/path/to/image.jpeg", "dimension": "product_original"}]frontend-product-search-grid datagrid was removed for simple products.Oro\Bundle\ShoppingListBundle\Datagrid\Extension\FrontendMatrixProductGridExtension
(service ID: oro_shopping_list.datagrid.extension.frontend_product_grid) was replaced with datagrid listener
Oro\Bundle\ShoppingListBundle\Datagrid\EventListener\FrontendMatrixProductGridEventListener
(service ID: oro_shopping_list.datagrid.event_listener.frontend_matrix_product_grid)visibility_customer_CUSTOMER_ID has been renamed to visibility_customer.CUSTOMER_ID[f]oro_website_search.event_listener.orm.fulltext_index_listener to use doctrine.dbal.search_connectionoro_website_search.fulltext_index_manager to use doctrine.dbal.search_connectionoro_website_search.tests.disable_listeners_for_data_fixtures, listeners disabled by default during fixtures loading.percent field of the orderdiscounts API resource was changed.
From now a percentage value is not multiplied by 100. It means that from now 100% is 1, not 100.oro_checkout.checkout_max_line_items_per_page option to the system configuration.Oro\Bundle\CheckoutBundle\Event\CheckoutTransitionBeforeEvent - dispatched before a checkout transition is started, contains workflow item and the transition.Oro\Bundle\CheckoutBundle\Event\CheckoutTransitionAfterEvent - dispatched after a checkout transition is finished, contains workflow item, the transition, isAllowed flag and collected errors if any.is_checkout_state_valid condition. This condition compares a saved checkout state (retrieved by the provided token) to the current checkout state.Oro\Bundle\CheckoutBundle\WorkflowState\Handler\CheckoutErrorHandler::getWorkflowErrors(). The method returns workflow-related errors from FromErrorIterator.frontend-checkout-line-items-gridfrontend-single-page-checkout-line-items-grid.
For more details on datagrid customizations please see the datagrid documentationoropricing/js/app/views/quick-add-item-price-view js module is re-developed and renamed to oropricing/js/app/views/quick-add-row-price-viewimageResize was renamed to oro_product.image_resize.oroproduct/js/app/components/quick-add-copy-paste-form-component js module is re-developed and renamed to oroproduct/js/app/views/quick-add-copy-paste-form-vieworoproduct/js/app/views/quick-add-item-view js module is re-developed and renamed to oroproduct/js/app/views/quick-add-row-vieworoproduct/js/app/views/quick-add-view js module is re-developed and renamed to oroproduct/js/app/views/quick-order-form-viewautocomplete:productFound autocomplete:productNotFound are replaced with custom DOM eventsOro\Bundle\PromotionBundle\Executor\PromotionExecutor can be used without caching processed DiscountContext. Please refer to oro_promotion.promotion_executor and oro_promotion.shipping_promotion_executor examples./admin/api/requests REST API resource was changed to /admin/api/rfqs./admin/api/requestproducts REST API resource was changed to /admin/api/rfqproducts./admin/api/requestproductitems REST API resource was changed to /admin/api/rfqproductitems./admin/api/requestadditionalnotes REST API resource was changed to /admin/api/rfqadditionalnotes./admin/api/rfpcustomerstatuses REST API resource was changed to /admin/api/rfqcustomerstatuses./admin/api/rfpinternalstatuses REST API resource was changed to /admin/api/rfqinternalstatuses.Oro\Bundle\ShippingBundle\Entity\Repository\ProductShippingOptionsRepository::findByProductsAndUnits() was renamed to Oro\Bundle\ShippingBundle\Entity\Repository\ProductShippingOptionsRepository::findIndexedByProductsAndUnits() and now uses a plain DQL query without entity hydration.[f]oro_website_search.event.website_search_mapping.configuration event dispatches
with Oro\Bundle\SearchBundle\Event\SearchMappingCollectEvent event class
that have configuration loaded from config files. So event have full access to configuration.oro_website_search.event.website_search_mapping.configuration event
was dispatched has been removed. At listeners please add full configuration that do not need additional processing with config processor.oro_customer_menu layout import from all bundles.order_line_item_has_count condition.checkout_order_summary_line_itemsOro\Bundle\PaymentBundle\ExpressionLanguage\DecoratedProductLineItemFactory::createLineItemWithDecoratedProductByLineItem() is removed, use Oro\Bundle\PaymentBundle\ExpressionLanguage\DecoratedProductLineItemFactory::createPaymentLineItemWithDecoratedProduct() instead.[f]Oro\Bundle\ProductBundle\VirtualFields\VirtualFieldsProductDecoratorFactory::createDecoratedProductByProductHolders() is removed, use Oro\Bundle\ProductBundle\VirtualFields\VirtualFieldsProductDecoratorFactory::createDecoratedProduct() instead.[f]oro_product.matrix_form_on_shopping_list option from the system configuration.unique_job_slug option was removed during sending the import price list MQ message.Oro\Bundle\ShoppingListBundle\Entity\Repository\LineItemRepository::findDuplicate() is removed, use
Oro\Bundle\ShoppingListBundle\Entity\Repository\LineItemRepository::findDuplicateInShoppingList() instead.[f]Oro\Bundle\ShoppingListBundle\Entity\Repository\LineItemRepository::deleteItemsByShoppingListAndInventoryStatuses(),
Oro\Bundle\ShoppingListBundle\Entity\Repository\LineItemRepository::deleteDisabledItemsByShoppingList() are
removed, use Oro\Bundle\ShoppingListBundle\Entity\Repository\LineItemRepository::deleteNotAllowedLineItemsFromShoppingList()
instead.[f]shopping_list_owner_select_blockshopping_list_line_items_listshopping_lists_menuoro_shopping_list_product_unit_code_visibilityshopping_list_form_availability_provideroro_shopping_list_matrix_grid_shopping_listoro_shopping_list_products_unitsoro_shoppinglist_frontend_duplicate operation. The oro_shoppinglist_frontend_duplicate_action operation is now used.Oro\Bundle\WebsiteSearchBundle\Event\WebsiteSearchMappingEvent event class and used
Oro\Bundle\SearchBundle\Event\SearchMappingCollectEvent class instead of.[f]Oro\Bundle\WebsiteSearchBundle\Provider\WebsiteSearchMappingProvider and used
\Oro\Bundle\SearchBundle\Provider\SearchMappingProvider class instead of.[f]getApiResourceClassName() and getApiResourceIdentifierDqlExpression() were added to
Oro\Bundle\WebCatalogBundle\ContentVariantType\SystemPageContentVariantType._web_content_scope request attribute was removed.
Use Oro\Bundle\WebCatalogBundle\Provider\RequestWebContentScopeProvider to get the current scope.
This class loads the scope on demand._content_variant request attribute was removed.
Use Oro\Bundle\WebCatalogBundle\Provider\RequestWebContentVariantProvider to get the current content variant.
This class loads the content variant on demand.current_website request attribute was removed.
To get the current website from HTTP request Oro\Bundle\WebsiteBundle\Provider\RequestWebsiteProvider was added.
This class loads the website on demand.*.class parameters for all entities were removed from the dependency injection container.
The entity class names should be used directly, e.g. 'Oro\Bundle\EmailBundle\Entity\Email'
instead of '%oro_email.email.entity.class%' (in service definitions, datagrid config files, placeholders, etc.), and
\Oro\Bundle\EmailBundle\Entity\Email::class instead of $container->getParameter('oro_email.email.entity.class')
(in PHP code).Oro\Component\Cache\Layout\DataProviderCacheTrait was removed as it added additional complexity
to cacheable layout data providers instead of simplify them.[f]Oro\Component\Cache\Layout\DataProviderCacheCleaner was removed.getName() method was removed from Oro\Bundle\PricingBundle\SubtotalProcessor\Model\SubtotalProviderInterface.
Use the alias attribute of the oro_pricing.subtotal_provider DIC tag instead.priority attribute for oro_promotion.discount_context_converter,
oro_promotion.promotion_context_converter and oro_promotion.discount_strategy DIC tags
was changed to correspond Symfony recommendations.[f]
If you have services with these tags, change the sign of the priority value for them.
E.g. { name: oro_promotion.discount_context_converter, priority: 100 } should be changed to
{ name: oro_promotion.discount_context_converter, priority: -100 }getProcessingClassName() method was removed from Oro\Bundle\TaxBundle\Mapper\TaxMapperInterface.
Use the class attribute of the oro_tax.tax_mapper DIC tag instead.getName() method was removed from Oro\Bundle\TaxBundle\Provider\TaxProviderInterface.
Use the alias attribute of the oro_tax.tax_provider DIC tag instead.Oro\Bundle\PaymentBundle\Controller\Api\Rest\PaymentMethodsConfigsRuleController::enableAction
(/paymentrules/{id}/enable path)
action the request method was changed to POST.Oro\Bundle\PaymentBundle\Controller\Api\Rest\PaymentMethodsConfigsRuleController::disableAction
(/paymentrules/{id}/disable path)
action the request method was changed to POST.Oro\Bundle\PricingBundle\Controller\AjaxPriceListController::defaultAction
(oro_pricing_price_list_default route)
action the request method was changed to POST.Oro\Bundle\PricingBundle\Controller\AjaxProductPriceController::deleteAction
(oro_pricing_price_list_default route)
action the request method was changed to DELETE.--email has become required for oro:import:price-list:file command.Oro\Bundle\WebsiteSearchBundle\Attribute\Type\SearchAttributeTypeInterface:
Oro\Bundle\WebsiteSearchBundle\Attribute\Type\SearchableAttributeTypeInterface except getFilterStorageFieldType and getFilterableFieldName are moved to this interface.Oro\Bundle\SaleBundle\Controller\AjaxQuoteController::entryPointAction
(oro_quote_entry_point route)
action the request method was changed to POST.Oro\Bundle\ShippingBundle\Controller\Api\Rest\ShippingMethodsConfigsRuleController::enableAction
(/shippingrules/{id}/enable path)
action the request method was changed to POST.Oro\Bundle\ShippingBundle\Controller\Api\Rest\ShippingMethodsConfigsRuleController::disableAction
(/shippingrules/{id}/disable path)
action the request method was changed to POST.removeProductFromViewAction in Oro\Bundle\ShoppingListBundle\Controller\Frontend\AjaxLineItemController (oro_shopping_list_frontend_remove_product route) now support only DELETE method insteadof POST.Oro\Bundle\ShoppingListBundle\Controller\Frontend\AjaxLineItemController::addProductFromViewAction
(oro_shopping_list_frontend_add_product route)
action the request method was changed to POST.oro_payment.event.extract_line_item_options will no longer be dispatched. Implementations of Oro\Bundle\PayPalBundle\OptionsProvider\OptionsProviderInterface will be used instead.oro_payment.event.extract_address_options will no longer be dispatched. Class PaymentOrderShippingAddressOptionsProvider will be used instead.oro_website_search.async_messaging.search_message.processor.job_runner was removed, that trigger duplicated messages to the message queue with topics:
oro.website.search.indexer.saveoro.website.search.indexer.deleteoro.website.search.indexer.reset_indexoro.website.search.indexer.reindex/admin/api/orderaddresses REST API resource:
created was renamed to createdAtupdated was renamed to updatedAtOro\Bundle\ShoppingListBundle\Manager\ShoppingListManager to Oro\Bundle\ShoppingListBundle\Manager\CurrentShoppingListManager. The service id for the CurrentShoppingListManager is oro_shopping_list.manager.current_shopping_list.oro_shopping_list.shopping_list.manager was renamed to oro_shopping_list.manager.shopping_list.validateReindexRequest at Oro\Bundle\WebsiteSearchBundle\Engine\IndexerInputValidator was renamed to validateRequestParametersoro_product.display_simple_variations config field that cleans the product and category layout cache when changes occur.oro_product.event_listener.restrict.display_product_variations. The service oro_product.config.event_listener.display_simple_variations_listener is used instead.oro_product.event_listener.datagrid.frontend_product_search.display_product_variations. The service oro_product.config.event_listener.display_simple_variations_listener is used instead.Oro\Component\Cache\Layout\DataProviderCacheTrait to the following layout data providers:
Oro\Bundle\CatalogBundle\Layout\DataProvider\CategoriesProductsProvider (=data["featured_categories"].getAll())Oro\Bundle\CatalogBundle\Layout\DataProvider\FeaturedCategoriesProvider (=data["categories_products"].getCountByCategories())Oro\Bundle\PricingBundle\Cache\RuleCache
__construct added dependency on Oro\Bundle\SecurityBundle\Encoder\SymmetricCrypterInterfaceOro\Bundle\CatalogBundle\Model\ExtendProduct:
setCategory was addedgetCategory was addedcategory_id was addedOro\Bundle\ProductBundle\Layout\DataProvider\AbstractSegmentProductsProvider
__construct added dependency on Oro\Bundle\SecurityBundle\Encoder\SymmetricCrypterInterfaceoro_accept_quote renamed to oro_sale_accept_quote and moved to SaleBundle=data["featured_categories"].getAll() returns data in format [['id' => %d, 'title' => %s, 'small_image' => %s], [...], ...]Oro\Bundle\CatalogBundle\Entity\Category:
setProducts was moved to Oro\Bundle\CatalogBundle\Model\ExtendCategorygetProducts was moved to Oro\Bundle\CatalogBundle\Model\ExtendCategoryaddProduct was moved to Oro\Bundle\CatalogBundle\Model\ExtendCategoryremoveProducts was moved to Oro\Bundle\CatalogBundle\Model\ExtendCategoryproducts was moved to Oro\Bundle\CatalogBundle\Model\ExtendCategoryoro_checkout_frontend_quote_submit_to_order renamed to oro_sale_frontend_quote_submit_to_order and moved to SaleBundleCategoryRepository::getCategoriesProductsCountQueryBuilder is deprecated. Not using.oro_category_to_product joining table.CheckoutLineItem and CheckoutSubtotal entities. They will be used in Checkout entity to store data. Previously for these purposes used line items and subtotals of Checkout source entity (ShoppingList or QuoteDemand entities).request_create_confirmation. It will be send when guest customer user create new request for quote.rfp_products that returns list of request products (formatted) for current request for quote. Can be used in email templates.Oro\Bundle\WebsiteSearchBundle\Attribute\Type\SearchableAttributeTypeInterface that should be implemented in case new type of arguments added.Oro\Bundle\RedirectBundle\Cache\UrlCacheInterface that should be implemented by URL cache services.Oro\Bundle\RedirectBundle\Provider\SluggableUrlProviderInterface that should be implemented by URL providers.key_value and local. Previous implementation was registered with storage key and was set by default.database and cache. database is set by default.oro_redirect.url_cache_type for URL cache configurationoro_redirect.url_provider_type for URL provider configurationoro_redirect.url_storage_cache.split_deep for tuning storage cacheOro\Bundle\CheckoutBundle\Entity\Checkout:
Oro\Bundle\PricingBundle\SubtotalProcessor\Model\LineItemsNotPricedAwareInterface;Oro\Bundle\CurrencyBundle\Entity\CurrencyAwareInterface.Oro/Bundle/ProductBundle/Resources/config/oro/website_search.yml:
name_LOCALIZATION_IDskunew_arrivalshort_description_LOCALIZATION_IDinventory_statusname_LOCALIZATION_ID => names_LOCALIZATION_IDnew_arrival => newArrivalshort_description_LOCALIZATION_ID => shortDescriptions_LOCALIZATION_IDOro\Bundle\PromotionBundle\Handler\CouponValidationHandler
Oro\Bundle\PromotionBundle\Handler\AbstractCouponHandlerOro\Bundle\PromotionBundle\ValidationService\CouponApplicabilityValidationService moved to setCouponApplicabilityValidationService setteroro_redirect.url_cache must be used instead oro_redirect.url_storage_cacheOro\Bundle\RedirectBundle\Cache\UrlCacheInterface must be used as dependency instead of Oro\Bundle\RedirectBundle\Cache\UrlStorageCachestorage cache type was improved to decrease files size and speed up caches loading.
Old caches should be recalculated. Old caches format is still supported to simplify migration, to be able to use existing URL caches set oro_redirect.url_storage_cache.split_deep to 1.
To improve page rendering speed and decrease memory usage recommended to recalculate caches with oro_redirect.url_storage_cache.split_deep set to 2 (default value) or 3. Value depends on number of slugs in systemOro\Bundle\ShippingBundle\Context\Builder\ShippingContextBuilderInterface:
addLineItem method. All line item collection should be processed with setLineItems and related interface Oro\Bundle\ShippingBundle\Context\LineItem\Collection\Factory\ShippingLineItemCollectionFactoryInterface.Oro\Bundle\WebsiteSearchBundle\Entity\IndexDecimal:
value:
precision changed from 10 to 21.scale changed from 2 to 6.Oro\Bundle\EntityConfigBundle\Attribute\Type\AttributeTypeInterface that as service with tag oro_entity_config.attribute_type.Oro\Bundle\SearchBundle\Engine\OrmIndexer
DbalStorer $dbalStorer parameter removed.Oro\Bundle\CatalogBundle\EventListener\DatagridListener:
addCategoryRelation flagged as deprecated.BaseProductPriceRepository[?] got an abstract method:
getPriceListIdsByProduct(Product $product) - that should return array of Price Lists identifiers which contains price for given productProductPrice[?] entity was added. In sharding mode product prices can't be managed without priceList field, that's why in get_list action priceList filter is required and in all actions ID of entities has format ProductPriceID-PriceListID.
PriceManagerDeleteHandler[?] was added to correctly remove prices in sharding modePriceListIDContextStorageInterface[?] was added to abstract the way of storing price list id in an api contextPriceListIDInContextStorage[?] was added as a storage of price list idEnableShardingOnConfigProcessor[?] was added to set sharding query hints on config and 'price_list_id = :price_list_id' condition on queryEnableShardingOnQueryProcessor[?] was added to set sharding query hints and 'price_list_id = :price_list_id' condition on queryLoadNormalizedProductPriceWithNormalizedIdProcessor[?] was added to normalize an output of update/create requestsNormalizeInputProductPriceIdProcessor[?] was added to transform id from request in 'guid-priceListId' format to 'guid' and save 'priceListId' to contextNormalizeOutputProductPriceIdProcessor[?] was added to normalize entity ids that are returned in responseSaveProductPriceProcessor[?] was added to correctly save price in sharding modeStorePriceListInContextByFilterProcessor[?] was added to save priceListId from filter to contextStorePriceListInContextByProductPriceProcessor[?] was added to save priceListId from ProductPrice entity to contextProductPriceIDByContextNormalizerInterface[?] was added to abstract the way of normalizing product price idsOro\Component\ChainProcessor\ContextInterface\ProductPriceIDByPriceListIDNormalizer was added to transform product price id to ProductPriceID-PriceListID formatResetPriceRuleFieldOnUpdateProcessor[?] was added to reset product price rule when one of the fields: value, quantity, unit, currency changesSlugRepository:
getRawSlug method to retrieve slug URL dataSluggableUrlProviderInterfaceSluggableUrlCacheAwareProvider takes slug URLs from persistent cacheSluggableUrlDatabaseAwareProvider takes slug URLs from the databaseOrderDiscountItemType[?] was changed for use in popup.oro_payment.require_payment_redirect.PAYMENT_METHOD_IDENTIFIER is no more specifically dispatched for each payment method. Use generic oro_payment.require_payment_redirect event instead.DiscountInterface[?] now is fluent, please make sure that all classes which implement it return $this for setPromotion and setMatchingProducts methods
MatchedUrlDecisionMaker class should be used instead of FrontendHelper to check that current URL should be processed by Slugable Url matcher or generatorFrontendProductDatagridListener[?]
RegistryInterface will soon be removed. getProductRepository and getProductUnitRepository flagged as deprecated.OrderDiscountItemsCollectionType and related oroorder/js/app/views/discount-items-view JS view were removed, new OrderDiscountCollectionTableType[?] and oroorder/js/app/views/discount-collection-view are introduced.AppliedDiscountManager
AppliedPromotionManageroro_promotion.applied_promotion_manager service was createdRouter[?]
setFrontendHelper, setMatchedUrlDecisionMaker method added instead.ScheduleIntervalsCollectionTypeScheduleIntervalType[?]HandlePriceListStatusChangeProcessor[?] to handle price list status changesUpdatePriceListLexemesProcessor[?] to update price rule lexemes while saving price listBuildCombinedPriceListOnScheduleDeleteListProcessor[?] to rebuild combined price list while deleting list of price list schedulesBuildCombinedPriceListOnScheduleDeleteProcessor[?] to rebuild combined price list while deleting single price list scheduleBuildCombinedPriceListOnScheduleSaveProcessor[?] to rebuild combined price list while saving price list scheduleUpdatePriceListContainsScheduleOnScheduleDeleteListProcessor[?] to change price list contains schedule field while deleting list of price list schedulesUpdatePriceListContainsScheduleOnScheduleDeleteProcessor[?] to change price list contains schedule field while deleting single price list scheduleUpdateLexemesOnPriceRuleDeleteListProcessor[?] to update price rule lexemes while deleting list of price rulesUpdateLexemesOnPriceRuleDeleteProcessor[?] to update price rule lexemes while deleting single price ruleUpdateLexemesPriceRuleProcessor[?] to update price rule lexemes while saving price rulePriceListRelationTriggerHandlerForWebsiteAndCustomerProcessor to rebuild price lists when customer aware relational entities are modifiedPriceListRelationTriggerHandlerForWebsiteAndCustomerGroupProcessor to rebuild price lists when customer group aware relational entities are modifiedAddSchedulesToPriceListApiFormSubscriber[?] for adding currently created schedule to price listVariantFieldProvider[?] was added it introduces logic to fetch variant field for certain family calling getVariantFields(AttributeFamily $attributeFamily) methodProduct, Category, Page, WebCatalog, Brand were added. MetaTitle is displayed as default view page title.FrontendQuotePermissionVoter[?], Checks if given Quote contains internal status, triggered only for Commerce Application.FrontendQuoteDatagridListener[?], appends frontend datagrid query with proper frontend internal statuses.QuoteFormSubscriber[?], discards price modifications and free form inputs, if there are no permissions for those operationsQuote category
BlankOneOf[?] constraint and BlankOneOfValidator[?] validator for validating that one of some fields in a group should be blankDefaultWebsiteSubscriber to set Default website when not provided on form.Oro\Bundle\OrderBundle\Manager\AbstractAddressManager:getGroupedAddresses changed from array to TypedOrderAddressCollectionPayflowIPCheckListener[?]
$allowedIPs changed from private to protectedoro_pricing.listener.product_unit_precision was changed from doctrine.event_listener to doctrine.orm.entity_listener
setProductPriceClass, setEventDispatcher, setShardManager were removed. To set properties, constructor used instead.BooleanVariantFieldValueHandler[?]
__construct method. New dependency on Symfony\Contracts\Translation\TranslatorInterface was added.ProductPriceFormatter method formatProductPrice changed to expect BaseProductPrice attribute instead of ProductPrice.oro_seo.event_listener.product_form_view
[@request_stack](https://github.com/request_stack) was removed[@oro_entity](https://github.com/oro_entity).doctrine_helper was removedoro_seo.event_listener.category_form_view
[@request_stack](https://github.com/request_stack) was removed[@oro_entity](https://github.com/oro_entity).doctrine_helper was removed oro_seo.event_listener.page_form_view
[@request_stack](https://github.com/request_stack) was removed[@oro_entity](https://github.com/oro_entity).doctrine_helper was removedoro_seo.event_listener.content_node_form_view
[@request_stack](https://github.com/request_stack) was removed[@oro_entity](https://github.com/oro_entity).doctrine_helper was removedQuote[?]
FRONTEND_INTERNAL_STATUSES that holds all available internal statuses for Commerce ApplicationpricesChanged, that indicates if prices were changed.Quote category
oro_payment_method_order_review is deprecated since v1.3, will be removed in v1.6. Use 'oro_payment_method_order_submit' instead.CheckoutVoter[?]
getSecurityFacade was removed, getAuthorizationChecker method was added insteadFlatRateMethodIdentifierGenerator is removed in favor of PrefixedIntegrationIdentifierGenerator.FlatRateMethodFromChannelBuilder[?] is removed now. Use FlatRateMethodFromChannelFactory[?] instead.AbstractOrderAddressType::getDefaultAddressKey[?]. Please, use method TypedOrderAddressCollection::getDefaultAddressKey insteadGateway[?]
PRODUCTION_HOST_ADDRESS, PILOT_HOST_ADDRESS, PRODUCTION_FORM_ACTION, PILOT_FORM_ACTION removed.PayPalPasswordType is removed. Use OroEncodedPlaceholderPasswordType instead.CardTypesDataProviderInterface[?] is removed. Use CreditCardTypesDataProviderInterface[?] instead.PaymentMethodProvidersRegistry[?] is removed, CompositePaymentMethodProvider[?] should be used instead.PaymentStatusProvider::computeStatus[?] is removed. Use getPaymentStatus instead.CountryAwarePaymentConfigTrait[?] was removed.PriceListScheduleType[?] was removed, use ScheduleIntervalType[?] insteadSchedulesIntersection[?] was removed, use ScheduleIntervalsIntersection[?] insteadSchedulesIntersectionValidator[?] was removed, use ScheduleIntervalsIntersectionValidator[?] insteadoropricing/js/app/views/price-list-schedule-view view was removed, use orocron/js/app/views/schedule-intervals-view insteadProductStrategy[?]
setSecurityFacade was removed, setTokenAccessor method was added insteadQuoteAddressType::getDefaultAddressKey[?]. Please, use method TypedOrderAddressCollection::getDefaultAddressKey insteadoro_shipping.shipping_method.registry was removed, new oro_shipping.shipping_method_provider service is used insteadShippingMethodRegistry was removed, logic was moved to CompositeShippingMethodProvider[?]
getTrackingAwareShippingMethods moved to class TrackingAwareShippingMethodsProvider[?]IntegrationMethodIdentifierGeneratorInterface is removed along with its implementations and usages. Use IntegrationIdentifierGeneratorInterface instead.ShippingMethodsConfigsRuleRepository::getConfigsWithEnabledRuleAndMethod method is removed now. Use getEnabledRulesByMethod method instead.AbstractIntegrationRemovalListener is removed now. Use IntegrationRemovalListener instead.OroShippingBundle:Form:type/result.html.twig and OroShippingBundle:Form:type/selection.html.twig - removedUPSMethodIdentifierGenerator is removed in favor of PrefixedIntegrationIdentifierGenerator.How can I help you explore Laravel packages today?