Checkout Start
There are several ways to initiate a checkout process in a storefront:
From a shopping list view page - via the start_from_shoppinglist workflow transition
From a quick order form - via the start_quickorder_checkout action group
From a quote view page - via the oro_sale_frontend_quote_accept_and_submit_to_order action
From an order view page - via the oro_checkout_frontend_start_from_order action
Each mentioned checkout method requires a different source entity to provide initial data and line items.
When started from a shopping list or a quick order form -
\Oro\Bundle\ShoppingListBundle\Entity\ShoppingList
When started from a quote -
\Oro\Bundle\SaleBundle\Entity\QuoteDemand
When started from an order -
\Oro\Bundle\OrderBundle\Entity\Order
Checkout workflows fire the following events to check whether a checkout can be started:
extendable_condition.shopping_list_start - to check if a checkout can be started from a shopping list
extendable_condition.start_checkout - to check if a checkout can be started from another source
Out-of-the-box, \Oro\Bundle\CheckoutBundle\EventListener\ValidateCheckoutOnStartEventListener
listens to both of these events and delegates validation to Symfony Validator with different validation group sequence that varies on the source entity used to start a checkout from:
Default - the default validation group
checkout_start%from_alias% - a variable validation group with placeholder %from_alias% that is automatically replaced by the entity alias of a source entity, i.e., checkout_start_from_shoppinglist, checkout_start_from_quote or checkout_start_from_order
Note
\Oro\Bundle\CheckoutBundle\EventListener\ValidateCheckoutOnStartEventListener
has the setValidationGroups method that allows to customize the validation groups applied during validation