diff --git a/src/data/navigation/sections/graphql.js b/src/data/navigation/sections/graphql.js
index 64350c272..ec73c108c 100644
--- a/src/data/navigation/sections/graphql.js
+++ b/src/data/navigation/sections/graphql.js
@@ -757,6 +757,10 @@ module.exports = [
title: "negotiableQuotes",
path: "/graphql/schema/b2b/negotiable-quote/queries/quotes/",
},
+ {
+ title: "negotiableQuoteTemplates",
+ path: "/graphql/schema/b2b/negotiable-quote/queries/templates/",
+ },
],
},
{
@@ -775,6 +779,10 @@ module.exports = [
title: "placeNegotiableQuoteOrder",
path: "/graphql/schema/b2b/negotiable-quote/mutations/place-order/",
},
+ {
+ title: "placeNegotiableQuoteOrderV2",
+ path: "/graphql/schema/b2b/negotiable-quote/mutations/place-order-v2/",
+ },
{
title: "removeNegotiableQuoteItems",
path: "/graphql/schema/b2b/negotiable-quote/mutations/remove-items/",
@@ -803,6 +811,10 @@ module.exports = [
title: "setNegotiableQuoteShippingMethods",
path: "/graphql/schema/b2b/negotiable-quote/mutations/set-shipping-methods/",
},
+ {
+ title: "setQuoteTemplateExpirationDate",
+ path: "/graphql/schema/b2b/negotiable-quote/mutations/set-quote-template-expiration-date/",
+ },
{
title: "updateNegotiableQuoteQuantities",
path: "/graphql/schema/b2b/negotiable-quote/mutations/update-quantities/",
diff --git a/src/pages/graphql/schema/b2b/negotiable-quote/mutations/index.md b/src/pages/graphql/schema/b2b/negotiable-quote/mutations/index.md
index b64c01942..f0e661284 100644
--- a/src/pages/graphql/schema/b2b/negotiable-quote/mutations/index.md
+++ b/src/pages/graphql/schema/b2b/negotiable-quote/mutations/index.md
@@ -28,3 +28,7 @@ The B2B negotiable quote mutations allow you to perform the following operations
- [Set the shipping method](set-shipping-methods.md)
- [Set the payment method](set-payment-method.md)
- [Place the order](place-order.md)
+ - [Place the order V2](place-order-v2.md)
+- Manage Quote Templates
+ - [Set Negotiable Quote Template Expiration Date](set-quote-template-expiration-date.md)
+
\ No newline at end of file
diff --git a/src/pages/graphql/schema/b2b/negotiable-quote/mutations/place-order-v2.md b/src/pages/graphql/schema/b2b/negotiable-quote/mutations/place-order-v2.md
new file mode 100644
index 000000000..e3a8e4000
--- /dev/null
+++ b/src/pages/graphql/schema/b2b/negotiable-quote/mutations/place-order-v2.md
@@ -0,0 +1,111 @@
+---
+title: placeNegotiableQuoteOrderV2 mutation
+edition: saas
+keywords:
+ - B2B
+---
+
+import CommerceOnly from '/src/_includes/commerce-only.md'
+
+
+
+# placeNegotiableQuoteOrderV2 mutation
+
+
+
+This mutation is part of the B2B Storefront Compatibility Package and is only available on [Adobe Commerce as a Cloud Service](https://experienceleague.adobe.com/en/docs/commerce/cloud-service/overview).
+
+The `placeNegotiableQuoteOrderV2` mutation converts a negotiable quote into an order and returns the full order object.
+
+The negotiable quote must have one of the following statuses:
+
+- SUBMITTED
+- DECLINED
+- EXPIRED
+
+If the status is DECLINED or EXPIRED, the negotiable quote is processed like a standard cart, without applying any discounts. The negotiable quote is not converted to a standard cart.
+
+Perform the following actions before using the `placeNegotiableQuoteOrderV2` mutation. It might be necessary to perform additional steps during the process of coming to an agreement during the negotiable quote lifecycle.
+
+- [Create an empty cart](../../../cart/mutations/create-empty-cart.md)
+- [Add one or more products](../../../cart/mutations/add-products.md) to the cart
+- [Request a negotiable quote](request.md)
+- [Set the billing address](set-billing-address.md)
+- [Set the shipping address](set-shipping-address.md)
+- [Set the shipping method](set-shipping-methods.md)
+- [Set the payment method](set-payment-method.md)
+
+You cannot manage orders with GraphQL, because orders are part of the backend. You can use REST calls to manage orders to their completion.
+
+## Syntax
+
+```graphql
+mutation {
+ placeNegotiableQuoteOrderV2(
+ input: PlaceNegotiableQuoteOrderInput
+ ) {
+ PlaceNegotiableQuoteOrderOutputV2
+ }
+}
+```
+
+
+
+## Example usage
+
+**Request:**
+
+```graphql
+mutation {
+ placeNegotiableQuoteOrderV2(
+ input: {
+ quote_uid: "xCA4wSZEHsb5QbFiKfoq5k1Dk8vIPBgb"
+ }
+ ) {
+ order {
+ number
+ token
+ #...
+ }
+ errors {
+ message
+ code
+ }
+ }
+}
+```
+
+**Response:**
+
+```json
+{
+ "data": {
+ "placeNegotiableQuoteOrderV2": {
+ "order": {
+ "number": "000000006",
+ "token": "0:3:OSScWU6PKLn3kFyMhNWyskG0opgVvFBnJmtuaFHKGwDFT83S6Kv9U39iYwixuU+vhwDz2AF4pCs3GtLhHbQ="
+ },
+ "errors": []
+ }
+ }
+}
+```
+
+## Errors
+
+Code | Error | Description
+--- | --- | ---
+`CART_NOT_FOUND` | `Could not find a cart with ID` | The specified cart ID is invalid.
+`CART_NOT_ACTIVE` | `The cart isn't active.` | The specified cart ID is not active.
+`GUEST_EMAIL_MISSING` | `Guest email for cart is missing.` | The guest attempted to place an order but did not provide an email address. See [setGuestEmailOnCart](../../../cart/mutations/set-guest-email.md) mutation.
+`UNABLE_TO_PLACE_ORDER` | `A server error stopped your order from being placed. Please try to place your order again` | The shopper tried to place an order when no products are in the shopping cart.
+`UNABLE_TO_PLACE_ORDER` | `Some addresses can't be used due to the configurations for specific countries` | The shipping method was not set. See [setShippingMethodsOnCart](set-shipping-methods.md) mutation.
+`UNABLE_TO_PLACE_ORDER` | `The shipping method is missing. Select the shipping method and try again` | The shipping method was not set. See [setShippingMethodsOnCart](set-shipping-methods.md) mutation.
+`UNABLE_TO_PLACE_ORDER` | `Please check the billing address information` | The billing address was not set. See [setBillingAddressOnCart](../../../cart/mutations/set-billing-address.md) mutation.
+`UNABLE_TO_PLACE_ORDER` | `Enter a valid payment method and try again` | The payment method was not set. See [setPaymentMethodOnCart](../../../cart/mutations/set-payment-method.md) mutation.
+`UNABLE_TO_PLACE_ORDER` | `Some of the products are out of stock` | One of the products in the shopping cart are currently out of stock.
+`UNDEFINED` | `UNDEFINED` | The error message does not match any error code
diff --git a/src/pages/graphql/schema/b2b/negotiable-quote/mutations/place-order.md b/src/pages/graphql/schema/b2b/negotiable-quote/mutations/place-order.md
index be70c1708..2dfa6fd9a 100644
--- a/src/pages/graphql/schema/b2b/negotiable-quote/mutations/place-order.md
+++ b/src/pages/graphql/schema/b2b/negotiable-quote/mutations/place-order.md
@@ -10,6 +10,10 @@ import CommerceOnly from '/src/_includes/commerce-only.md'
# placeNegotiableQuoteOrder mutation
+
+
+This mutation has been deprecated in Adobe Commerce as a Cloud Service. Use the [placeNegotiableQuoteOrderV2 mutation](./place-order-v2.md) instead.
+
The `placeNegotiableQuoteOrder` mutation converts a negotiable quote into an order and returns an order ID.
The negotiable quote must have one of the following statuses:
@@ -30,7 +34,7 @@ Perform the following actions before using the `placeNegotiableQuoteOrder` mutat
- [Set the shipping method](set-shipping-methods.md)
- [Set the payment method](set-payment-method.md)
-You cannot manage orders with GraphQL, because orders are part of the backend. You can use REST or SOAP calls to manage orders to their completion.
+You cannot manage orders with GraphQL, because orders are part of the backend. You can use REST calls to manage orders to their completion.
## Syntax
diff --git a/src/pages/graphql/schema/b2b/negotiable-quote/mutations/set-quote-template-expiration-date.md b/src/pages/graphql/schema/b2b/negotiable-quote/mutations/set-quote-template-expiration-date.md
new file mode 100644
index 000000000..7c141b890
--- /dev/null
+++ b/src/pages/graphql/schema/b2b/negotiable-quote/mutations/set-quote-template-expiration-date.md
@@ -0,0 +1,67 @@
+---
+title: setQuoteTemplateExpirationDate mutation
+edition: saas
+keywords:
+ - B2B
+---
+
+import CommerceOnly from '/src/_includes/commerce-only.md'
+
+
+
+# setQuoteTemplateExpirationDate mutation
+
+
+
+This mutation is part of the B2B Storefront Compatibility Package and is only available on [Adobe Commerce as a Cloud Service](https://experienceleague.adobe.com/en/docs/commerce/cloud-service/overview).
+
+The `setQuoteTemplateExpirationDate` mutation can be used to set an expiration date for a negotiable quote, as it is not set by default. The mutation requires `template_id` and `expiration_date` as input parameters.
+
+## Syntax
+
+```graphql
+{
+ setQuoteTemplateExpirationDate(
+ input: QuoteTemplateExpirationDateInput!
+ ): NegotiableQuoteTemplate
+}
+```
+
+
+
+## Example usage
+
+The following example sets the expiration date for a negotiable quote.
+
+**Request:**
+
+```graphql
+mutation {
+ setQuoteTemplateExpirationDate(
+ input: {
+ template_id: "10"
+ expiration_date: "2030-13-01"
+ }
+ ) {
+ template_id
+ expiration_date
+ }
+}
+```
+
+**Response:**
+
+```json
+{
+ "data": {
+ "setQuoteTemplateExpirationDate": {
+ "template_id": "10",
+ "expiration_date": "2030-13-01"
+ }
+ }
+}
+```
diff --git a/src/pages/graphql/schema/b2b/negotiable-quote/queries/index.md b/src/pages/graphql/schema/b2b/negotiable-quote/queries/index.md
index 02c9cefd1..303cb859b 100644
--- a/src/pages/graphql/schema/b2b/negotiable-quote/queries/index.md
+++ b/src/pages/graphql/schema/b2b/negotiable-quote/queries/index.md
@@ -10,4 +10,8 @@ import CommerceOnly from '/src/_includes/commerce-only.md'
# Negotiable quote (B2B) queries
-B2B for Adobe Commerce provides two negotiable quote queries. [`negotiableQuote`](./quote.md) returns details about a single quote. [`negotiableQuotes`](./quotes.md) returns multiple quotes, filtered by name or ID.
+B2B for Adobe Commerce provides two negotiable quote queries.
+
+- [`negotiableQuote`](./quote.md) returns details about a single quote.
+- [`negotiableQuotes`](./quotes.md) returns multiple quotes, filtered by name or ID.
+- [`negotiableQuoteTemplates`](./templates.md) returns multiple quote templates, filtered by name or ID.
diff --git a/src/pages/graphql/schema/b2b/negotiable-quote/queries/templates.md b/src/pages/graphql/schema/b2b/negotiable-quote/queries/templates.md
new file mode 100644
index 000000000..179e0dead
--- /dev/null
+++ b/src/pages/graphql/schema/b2b/negotiable-quote/queries/templates.md
@@ -0,0 +1,122 @@
+---
+title: negotiableQuoteTemplates query
+edition: saas
+keywords:
+ - B2B
+---
+
+import CommerceOnly from '/src/_includes/commerce-only.md'
+
+
+
+# negotiableQuoteTemplates query
+
+The `negotiableQuoteTemplates` query returns a list of negotiable quote templates that can be viewed by the logged-in customer, including quote templates created by the customer or by subordinates in the company hierarchy.
+
+This query requires a valid [customer authentication token](../../../customer/mutations/generate-token.md).
+
+## Syntax
+
+```graphql
+{
+ negotiableQuoteTemplates(
+ filter: NegotiableQuoteTemplateFilterInput,
+ pageSize: Int = 20,
+ currentPage: Int = 1
+ sort: NegotiableQuoteTemplateSortInput
+ ): NegotiableQuoteTemplatesOutput
+}
+```
+
+## Reference
+
+The [`negotiableQuoteTemplates`](https://developer.adobe.com/commerce/webapi/graphql-api/index.html#query-negotiableQuoteTemplates) reference provides detailed information about the types and fields defined in this query.
+
+## Example usage
+
+### Find quote templates that contain a specific string
+
+The following example returns general information about the negotiable quote templates containing the string `request` that are accessible to the company user. The results are sorted by negotiable quote name, listed in ascending order.
+
+**Request:**
+
+```graphql
+query {
+ negotiableQuoteTemplates(filter: { name:
+ { match: "request" }
+ })
+ {
+ items {
+ uid
+ name
+ created_at
+ status
+ }
+ total_count
+ page_info {
+ page_size
+ current_page
+ total_pages
+ }
+ sort_fields {
+ default
+ options {
+ label
+ value
+ }
+ }
+ }
+}
+```
+
+**Response:**
+
+```json
+{
+ "data": {
+ "negotiableQuoteTemplates": {
+ "items": [
+ {
+ "uid": "MTU0",
+ "name": "Last request Template",
+ "created_at": "2021-04-28 15:43:09",
+ "status": "Active"
+ },
+ {
+ "uid": "MTUz",
+ "name": "Latest request Template",
+ "created_at": "2021-04-26 16:35:48",
+ "status": "Active"
+ },
+ {
+ "uid": "MTUy",
+ "name": "April 22 request",
+ "created_at": "2021-04-22 15:59:47",
+ "status": "Active"
+ },
+ {
+ "uid": "MTUx",
+ "name": "Discount request",
+ "created_at": "2021-04-20 19:01:38",
+ "status": "Active"
+ }
+ ],
+ "total_count": 4,
+ "page_info": {
+ "page_size": 20,
+ "current_page": 1,
+ "total_pages": 1
+ },
+ "sort_fields": {
+ "default": "TEMPLATE_ID",
+ "options": [
+ {
+ "label": "Last Shared",
+ "value": "LAST_SHARED_AT"
+ }
+ ]
+ }
+ }
+ }
+}
+```