Quote request components can be added to the Core Commerce checkout workflow. Once a customer has added all of the items to their shopping cart, a quote request is made for the entire order. The quote request feature requires that the customer has added all of their items to the cart and has entered both billing and shipping information.
The steps for requesting a quote go through the following workflow:
A customer adds items to the shopping cart, and provides billing and shipping information.
The customer requests a quote by clicking a UI element, such as a Request Quote button. This element also allows the customer to provide an optional note with the request.
The
QuoteFormHander
initiates therequestQuote
method. AquoteInfo
item is created for the current order, providing the quote request date and time and, optionally, a note from the customer.The order is validated.
The order status is updated to PENDING_QUOTE.
The validated quote can be added to a customized chain that handles the passing of the quote to a third-party quoting system.
The third-party quoting system processes and completes the quote. In addition to supplying pricing adjustment information, it updates the
quoteInfo
object with values for theproviderNote
,externalId
,expirationDate
andagentId
properties.The order status is updated to QUOTED.
The customer can view the quote pricing in their shopping cart.
Request Quote Pipeline
As outlined in the Quote Form Handler section, the requestQuote
method is called when requesting a quote. This in turn calls the OrderManager
, which uses the PipelineResult
requestQuote
helper method to provide support for invoking the requestQuote
pipeline chain.
This pipeline chain first calls the RunValidateQuoteChain
, which calls the validateQuote
pipeline, which in turn calls the ValidateOrderForQuote
component. This component initiates the ProcValidateOrderForCheckout
processor, which validates the order to ensure that there are items in the shopping cart, and that shipping and payment groups are included. It also validates that the order is not already quoted. If validation is unsuccessful, the processor issues an error.
Once the order has been validated, the requestQuote
pipeline initiates the PrepareForQuoteRequest
component, which is used during both quote and requote requests. This component uses the ProcPrepareForQuoteRequest
processor to create a new quoteInfo
repository item by calling the OrderTools.createQuoteInfoItem
method. It then sets the values for the requestDate
and requesterNote
properties and adds the values to the order. The order status is then set to PENDING_QUOTE. Note that an order may have the PENDING_QUOTE status several times as a quote may go through several stages of negotiation before either being accepted or rejected.
If no errors occur in the pipeline, the order is sent for quotation and a new shopping cart is generated for the customer. For additional information on working with orders, refer to the Configuring Purchase Process Services section.
At this point, the validated quote is added to the requestQuote
pipeline’s property map. It is from this map that custom processors can access the quote. A custom processor must be added to the chain that passes the quote to the third-party quoting system.
Pricing and Quotes
Pricing information is stored and sent to the quoting system as part of the order. Pricing for the quote is stored using priceInfo
objects, as described in the Price Holding Classes section.
Quote orders are restricted for pricing. Once a quote request has been made, there are only two changes that can be made to the request: Tax calculations and price adjustments made during your quoting process. Changes to shipping or payment information, or price changes due to promotions or other price list actions are not accepted.
During the quoting process, the PricingTools
class isOrderRestrictedForPricing
method checks the state of an order to identify if the order pricing is restricted. If the order is in the QUOTED state, or in a SUBMITTED state that contains a value other than null in the quoteInfo
property, the method returns true
and the order is restricted for repricing.
For detailed information on preventing the repricing of an order, refer to the Preventing Repricing of an Order section.
Re-Pricing Orders During a Quote Request
In some instances, you may want to clear quote-specific pricing information from an order that is in the PENDING_QUOTE state. The /atg/commerce/orcer/processor/ClearQuotePricingInformation
component uses the ProcClearQuotePricingInformation
processor to clear pricing information.
Once the order has been repriced, it will contain only pricing adjustments that are made by the normal pricing operation.
Note: Orders that are in the QUOTED state cannot be cleared, as described earlier.
By default, this processor is not added to any of the quote pipeline chains. If you wish to use this processor to do things such as reflect an items latest pricing and remove promotions, you must add this processor to the requestQuote
pipeline chain.
This processor can also be added to the completeQuote
pipeline when submitting a quote to the customer to clear all previous discounts before applying new adjustments. Refer to the Submit a Quote to the Customer section for information on the completeQuote
pipeline.
For detailed information on the quote pipelines, refer to the Appendix E: Pipeline Chains section.