---
title: Add to cart
order: 2
updated: 2026-07-12
---

# Add to cart

The *Add to Cart* screen is where you build the list of items you want to source from suppliers. You pick a product, say how much you need and which makes you will accept, write a description the supplier will read, and tick which suppliers should be asked to quote. Each item you add drops into a per-user **draft** — the RFQ cart — which keeps accumulating lines until you open the cart and release the request-for-quote. Nothing is emailed here; that happens later on the [RFQ cart](/docs/procurement/rfq-cart) screen.

The same screen runs in two modes. In the plain mode you add one item at a time and the form resets after each *Add*. In **walk mode** the form is pre-seeded product-by-product from a customer enquiry, so you march through the enquiry's line items in order.

## Before you start

- The *product heads* and *product codes* you want to source must already exist. See [Products](/docs/records/products).
- Each supplier must be registered against the relevant product head (and, ideally, the relevant makes) or it will not appear in the right-hand list. See [Suppliers](/docs/records/suppliers).
- Every supplier you tick needs at least one *contact person* on record — the RFQ is addressed to a contact person, not to the supplier itself.

## Open the screen

**Plain mode**

1. Open *Procurement* in the sidebar.
2. Click *Add to Cart*. The page heading reads *Add to Cart*.

**Walk mode (from a customer enquiry)**

1. Open the customer enquiry you want to source for.
2. In the enquiry's actions menu choose *RFQ Cart* (*"Source items from suppliers"*). This opens *Add to Cart* with the enquiry's products queued.

The *RFQ Cart* action only shows on an enquiry if you hold the *Add Items to Procurement Cart* permission. There is also an order-driven variant of this screen — see [Add to cart from a sales order](/docs/procurement/add-to-cart-from-order).

### Who can use this screen

The whole page is gated by the *Add Items to Procurement Cart* permission (`procurement.addToCart`, which itself depends on *View Procurement Cart*, `procurement.viewCart`). Without it the page just shows *"You don't have permission to add to the RFQ cart."* The permission is re-checked on the server for **every** action — both the supplier search and the add-line save return `Forbidden` if you lack it — so the page is not merely hidden, it is enforced end-to-end.

## The two-pane layout

The screen is a two-column layout (they stack vertically on a narrow window):

- **Left pane** — the item form: product head, product code, quantity, HSN code, makes, and description.
- **Right pane** — the live supplier list, filtered by whatever product head and makes you have chosen on the left.

You fill in the left pane, tick suppliers on the right, then press *Add*.

## The item form (left pane)

### Product Head

The category the item belongs to. Pick this first — everything else keys off it. Changing the product head **clears the product code** you had selected (the code list is scoped to the head), and it re-filters both the *Makes* picker and the supplier list. Required: *Add* refuses with *"Pick a product head"* if it is empty.

### Product Code

The specific item within the head. This field stays **disabled until a product head is chosen**, and its search results are limited to codes under that head. Required: *Add* refuses with *"Pick a product code"* if it is empty.

Picking a product code triggers two automatic fills:

- **HSN Code** is read from the code's master record (see below).
- The code's **default description** is prepended into the *Description* editor (see [Description](#description)).

### Quantity

How many units to source. Type a number; up to `4` decimal places are accepted (for fractional units like metres or kilograms). The field's own minimum is `0`, and it **defaults to `1`**. *Add* refuses with *"Quantity must be > 0"* if it is empty or not above zero — and the server independently rejects anything that is not a strictly positive number, so a forged `0` or negative payload never lands in the cart.

### HSN Code

The HSN tax classification code for the item. This field is **read-only** — you cannot type into it. It auto-fills from the chosen product code's master record the moment you pick a code, and shows `—` (rendered as `0`) until then. It is sent with the line but is optional on the server side (a non-negative integer, or nothing). If you need a different HSN, change it on the product code's master record — see [Products](/docs/records/products).

### Makes

The manufacturers / brands you will accept for this item. This is a multi-select: add as many as you like, and each shows in a small removable list above the picker. Adding several makes **widens** the supplier shortlist on the right, because a supplier qualifies if it carries *any one* of the makes you picked.

- The picker is **disabled until a product head is chosen** — it shows the hint *"Pick a product head first"* instead of a search box.
- The make list is filtered to makes allowed by the current product head.
- If you change the product head, any already-selected makes that the new head does not allow are **silently dropped**.
- Makes are **optional**. Leave the list empty and every supplier registered under the head qualifies (see [How the supplier list is filtered](#how-the-supplier-list-is-filtered)).

### Description

A rich-text note that travels with the RFQ to every supplier you tick for this line. Use it for specifications, tolerances, drawings references, or any instruction the supplier needs.

Two behaviours to know:

- **Default description merge.** When you pick a product code, its saved *default description* is prepended on top of whatever is already in the editor. If the editor is empty you just get the default description; if you had already typed something, you get *default description followed by your text*.
- **Walk mode seeding.** In walk mode the enquiry line's own description is seeded first, then the product code's default description is prepended — so you end up with *default description + the enquiry's custom description*. (This differs from the order-driven flow, which keeps only the order line's description with no default prepended — see [Add to cart from a sales order](/docs/procurement/add-to-cart-from-order#how-the-form-is-pre-filled).)

The description is capped at `20000` characters on the server; anything longer is rejected.

## The supplier list (right pane)

The right pane is a live, server-filtered table of suppliers who can quote for what you have chosen on the left. It stays empty with the hint *"Pick a product head to see suppliers."* until a head is set, and it re-queries every time you change the head or the makes.

### How the supplier list is filtered

The list is a **strict** filter run on the server, not a loose suggestion:

- A supplier must be registered against the **chosen product head** (its `productCategory`).
- If you have selected one or more **makes**, the supplier must additionally carry **at least one** of those makes. Select no makes and every supplier under the head passes.

Results are sorted by supplier name and capped at `200` suppliers. If nothing matches you will see either *"No supplier matches both this head and the selected makes."* (when makes are selected) or *"No supplier registered for this head."* (when they are not). If a supplier you expected is missing, add the product head — or the specific manufacturer — to that supplier's record first. See [Suppliers](/docs/records/suppliers).

### Each supplier row

Every row shows the supplier name and a checkbox. If a supplier has **more than one contact person**, a small *"N contact persons"* note appears under its name — a hint that ticking it will ask you *which* contact person(s) to address.

### Ticking a supplier

Tick a supplier's checkbox (or click its name) to add it to this line. What happens depends on how many contact persons the supplier has:

- **One contact person** — that person is used automatically, no prompt.
- **More than one** — the *Pick contact persons* modal opens (see below). Each contact person you pick becomes its own recipient.
- **No contact person on record** — the tick is refused with a toast, e.g. *"Acme Ltd has no contact person on record"*. Add a contact person to that supplier first.

**Un-ticking** a supplier removes *all* of that supplier's recipients for this line in one go, including any contact persons you picked in the modal.

### Pick contact persons (multi-CP modal)

When you tick a supplier that has several contact persons, the *Pick contact persons* modal lists them with name, email, and (where set) post and phone number. It is deliberately **multi-select** — mailing two people at the same firm at once is common, so whoever replies first can be treated as the winner. Every contact person you pick becomes a **separate recipient** of the RFQ for this line (technically its own invitation row in the cart), so the same supplier can appear more than once with different contacts.

- Tick one or more people and confirm with *Use N contact(s)* (disabled until you pick at least one).
- Cancel (or confirm with none picked) and nothing is added for that supplier.

## Adding the line

Press the button at the bottom of the form. Its label depends on the mode:

- **Plain mode** — *Add*.
- **Walk mode** — *Add (next product)* on every item except the last, which reads *Add And Go to Cart*.

Before the line is saved the screen checks, in order: a product head is picked, a product code is picked, quantity is above zero, and at least one supplier is ticked. On success you get a toast like *"Added · 3 recipients"* counting the supplier+contact-person pairs. In plain mode the form then **resets** ready for the next item. In walk mode it advances to the next enquiry product (or, on the last one, drops you onto the [RFQ cart](/docs/procurement/rfq-cart)).

### What the server double-checks

Because every request is treated as potentially forged, the save endpoint re-verifies the whole payload before it writes anything:

- Your *Add Items to Procurement Cart* permission (else `Forbidden`).
- The product code exists (else *"Product code not found"*).
- A **unit** can be resolved — it uses the product code's first allowed unit if the payload doesn't carry one; if the code has no unit configured at all, the add is refused with a message telling you to add an allowed unit first.
- Every supplier ID exists, **and** every chosen contact person actually belongs to the supplier it was paired with. Any pair that fails either check is dropped (this blocks smuggling one supplier's contact person onto another supplier); if that leaves no valid pairs, the whole add is rejected.

Only after all of that does the line join your draft and the invitations get created or updated.

## Walk mode in detail

Walk mode is entered from an enquiry (see [Open the screen](#open-the-screen)). A subtitle under the heading tracks where you are, e.g. *"Ravi Traders · product 2 of 5"*. Each enquiry product opens with its values pre-seeded — product head and code, quantity, makes, and description — but every field is a normal starting point you can change before adding.

### Skipping a product

If a pre-filled product is not one you want to source, press *Add* **without ticking any supplier**. Instead of erroring, a *"Skip product?"* prompt appears; confirm with *Skip this product* to drop that item and move to the next (on the last item this takes you to the cart), or *Go back* to keep working on it. This "no suppliers ticked = skip" shortcut only applies in walk mode; in plain mode an empty supplier list is simply refused with *"Tick at least one supplier"*.

### If the enquiry has no products

If the enquiry you launched from has no line items to source, the screen shows *"Enquiry has no products to source"* and returns you to the plain *Add to Cart*.

## Move on to the cart

When you have added everything you need, open *RFQ Cart* from the sidebar to review the lines grouped by supplier, set a closing date and attachments, and send the request. See [RFQ cart](/docs/procurement/rfq-cart). Lines you added from enquiries, from orders, and by hand all live in the **same** draft and ship together when you release it.

## Common questions

### Why can't I select a product code or a make yet?

Both depend on the *Product Head*. The product code field is disabled until a head is chosen (and its list is scoped to that head), and the *Makes* picker shows *"Pick a product head first"* until then. Pick the head and both come to life.

### Why is a supplier I expected missing from the right pane?

The list is filtered strictly: the supplier must be registered under the chosen product head, and — if you selected any makes — must also carry at least one of them. If it is missing, open that supplier's record and add the product head or the relevant manufacturer, then come back. See [Suppliers](/docs/records/suppliers).

### Can I send one line to two people at the same supplier?

Yes. When a supplier has more than one contact person, the *Pick contact persons* modal lets you tick several, and each becomes a separate recipient (a separate RFQ mail) for that line. Whoever replies first can be treated as the winner.

### What decides which contact person gets picked automatically?

If a supplier has exactly one contact person, that person is used with no prompt. If it has several, you always choose in the modal. If it has none, the tick is refused — add a contact person to the supplier first.

### I changed the product head and some of my makes disappeared — why?

Makes are validated against the head. When you switch heads, any selected makes the new head does not allow are dropped automatically, because they could not be quoted under the new head anyway.

### The description looks different in walk mode versus plain mode — is that a bug?

No. In both modes the product code's default description is prepended when you pick the code. Walk mode additionally seeds the enquiry line's own description first, so you end up with *default description + the enquiry's text*. The order-driven flow behaves differently again — see [Add to cart from a sales order](/docs/procurement/add-to-cart-from-order).

### Can I edit the RFQ number, email wording, or attachments here?

Not on this screen — this screen only builds the cart. The RFQ number format, recipient policy, subject/body wording, and firm-wide CC/BCC live under *Settings → Firm Customisation → Procurement*; see [RFQ personalisation](/docs/settings/document-templates#rfq-personalisation) and [RFQ number format](/docs/settings/document-templates#rfq-number-format). Per-supplier attachments and extra recipients are set later in the [RFQ cart](/docs/procurement/rfq-cart).

### Is the cart shared with my colleagues?

No. The draft cart is **per user** — each person builds their own until they release it. Once you send the RFQ the draft is consumed and the supplier rows appear under [Procurement enquiries](/docs/procurement/enquiries), where replies come in — see [Vendor responses](/docs/procurement/vendor-responses).

### How do I clear the cart?

There is no "clear" on this screen. Remove lines individually inside the [RFQ cart](/docs/procurement/rfq-cart); the draft is cleared automatically once you send the RFQ.
