ordercloud-api / headstart

A complete and opinionated eCommerce solution using OrderCloud as the backbone - built with .NET Core and Angular
MIT License
31 stars 74 forks source link

Improve Quote workflow #326

Closed abishop451 closed 2 years ago

abishop451 commented 2 years ago

As a Buyer, I would like to submit a quote and receive the quote back from the Seller/Marketplace manager so that I can continue my order online and submit an order for the item at the quoted price.

Workflow:

  1. Buyer user locates a Quote product. They make their selections (often times quote products are quoted because you have custom selections which alter the state of the product), and request a quote.
  2. Buyer can see in their Order History that their quote is submitted (maybe it's not an actual submitted order, but there needs to be notation of the history of the quote request).
  3. Owner of the quote product gets notified that they have an incoming quote request
  4. Owner of the quote product sets pricing for that product for that Buyer.
  5. Owner of the quote product sends the quote back to the Buyer via some action within the application.
  6. Buyer is notified that quote has been returned, and can now see the quoted price.
  7. Buyer could write a comment back to the Owner of the product for a revised quote, and the same process would happen again. OR
  8. Buyer accepts the quoted price and submits order with the product at the quoted price.
  9. Order is processed like all other orders.

Considerations:

crhistianramirez commented 2 years ago

User flow:

  1. User adds a quote product (xp.Type == 'Quote') at which point order.xp.OrderType is set to "Quote" and order.xp.QuoteStatus is set to "SellerReview", note that at this point the order is NOT submitted. We decided to make this change because it potentially muddies up statistics on actually submitted orders vs those that were submitted because they were quotes.
  2. Message appears to buyer that their quote has been sent for review. At the same time, an email is sent to the relevant seller letting them know there is a new quote product to review.
  3. The buyer user can navigate to a section under orders specific for viewing quote orders to check on the status of their open quoted orders at any point in time.
  4. The seller can also navigate to a section on the admin app under orders for viewing quote orders to check on the status of their open quoted orders. Via middleware, they can override the unit price of the line item to the desired price and once satisfied can submit their quote which will notify the buyer user via email as well as in-app notification and set xp.QuoteStatus to "BuyerReview". Additionally xp.QuoteSellerContactEmail and xp.QuoteBuyerContactEmail will be provided to allow additional communication between the buyer and seller if necessary. We decided to go this route because order xp is not a suitable location since comments can be unbounded and there are hard caps on xp limits. Additonally we wanted to avoid external dependencies as well as reinventing the wheel. OrderCloud is not meant to be a chat application.
  5. If the buyer user is satisfied they will click a button to accept and a notification will appear letting them know the quote products will be added to their current active order, after which a notification will be sent to both the seller and the buyer letting them know the quote was accepted and the quote order will be deleted.
  6. The user can now check out and add other products to their active order if desired and finally submit and pay for their order.

A few restrictions to this is that unsubmitted orders are automatically cleaned up by OrderCloud after inactivity. For anonymous users this occurs after 7 days, and for profiled users this is up to 90 days. We'll add some verbiage based on user type as to how long the quote is valid for as well as indicate that logging in will extend the lease of their quote, this could be used as an incentive piece for profiling users.

crhistianramirez commented 2 years ago

Data model:

Product XP

{
    "ProductType": "" // "Quote" or "Standard"
}

Order XP

{
    "OrderType": "", // "Quote" or "Standard"
    "QuoteStatus": "", //  "NeedsSellerReview" or "NeedsBuyerReview"
    "QuoteSellerContactEmail": "", // email of the seller user that should be contacted for quote purposes
    "QuoteBuyerContactEmail": "" // email of the buyer user that should be contacted for quote purposes
}
abishop451 commented 2 years ago

Here are a few bugs I've found with the quote process:

  1. Clicking to see the PDP from the Buyer perspective shows an error: image

  2. Default text showing on Order Submit: image

  3. Default text showing on Buyer screens to accept quote: image image

  4. When the Buyer completes their order with the quoted price, the Supplier doesn't see that price when they view the order in the Admin interface: image

  5. I can work around this if needed, but I noticed if your click the "reorder" button on a order that contains a quote product with negotiated price, the item goes into the cart at $0.00.

One question also -- once the Supplier sets the price, is there a place they can continue seeing that order?

crhistianramirez commented 2 years ago

This is merged and bugs Ashley mentioned are fixed