The work your staff stop doing

A business customer's quote is rarely a list price times a quantity. The customer has their own price level. Products are cut to size and priced by area. A tariff applies to the imported lines and not the rest. Installation is a separate charge. Tax depends on what is taxable. Some of the job is in your warehouse and some has to be ordered from two different suppliers.

When that lives in spreadsheets and email, staff do the arithmetic, retype the job at each step and keep track of the goods in their heads. CommerceServer does that work for them.

Your staff decide the customer, the products, quantities and sizes, any price they want to change, discounts, when to send the quote, which supplier to order from, and when goods have shipped or arrived.

CommerceServer works out and keeps track of:

  • the customer's price for each product, including quantity price breaks
  • the area of each cut-to-size piece and its price per square foot or square yard
  • service charges and tariffs, applied only to the lines they belong to
  • tax for the taxable products, and the quote total every time something changes
  • cost against sell price, so the margin is visible before the quote goes out
  • every detail of the job, carried from the quote to the sales order, the invoice and the supplier purchase orders without retyping
  • how much of each order line still has to be ordered from a supplier
  • the goods themselves: on order, in transit, in stock and held for that customer's order

The rest of this article follows one job through all of it.

An example job

The company, prices and quantities below are illustrative. They show how the steps fit together; they are not a customer case study.

A flooring distributor is quoting a hotel renovation for an interior design firm that buys at trade prices. The job includes:

  • 20 custom area rugs, 9 ft by 12 ft, made by an overseas rug mill and priced by the square yard
  • 20 rug pads from a domestic supplier, priced each
  • 1,800 square feet of corridor carpet, priced by the square foot and already in the distributor's warehouse
  • installation, as a fixed service charge
  • a 4% tariff on the imported rugs only
  • sales tax on the taxable products
  • a $500 project discount the sales rep agreed with the designer

Pricing: staff choose, CommerceServer calculates

The customer's own prices

The rep opens a quote for the design firm and adds the products. The firm's account is set to trade pricing, so every product comes in at the trade price without the rep looking anything up. If a job calls for a different price level, the quote can use it. Where a product has quantity price breaks, the price follows the quantity on the line.

The rep can still change any price. CommerceServer marks the line as an override, so a reviewer can see which prices came from the price list and which were typed in. If the rep wants the design firm to keep that price, they can save it as the firm's price for next time. Nothing changes the customer's prices unless the rep chooses to save it.

Sizes and area

The rep enters 9 ft by 12 ft for the rugs. CommerceServer works out that each rug is 108 square feet, which is 12 square yards. At the trade price of $85 per square yard, each rug is $1,020, and the line for 20 rugs is $20,400. The rep never converts square feet to square yards or multiplies it out.

The corridor carpet is priced by the square foot: 1,800 square feet at $6.50 comes to $11,700. The rug pads are priced each.

Each line can also carry a description, a note and product images, such as the colorway, the edge finish or "match the sample approved on site". Those details travel with the line for the rest of the job.

Cost and sell price on the same job

CommerceServer keeps what you pay the supplier alongside what you charge the customer. In the example, the mill charges the distributor $52 per square yard, so each rug costs $624 and sells for $1,020. The rep sees the margin while building the quote, not weeks later when the supplier's invoice arrives.

Charges, tariffs, tax and discounts

Installation is added as a fixed service charge. The tariff is set up as a 4% charge on the rug lines only, so CommerceServer calculates $816 on the $20,400 of rugs and leaves the carpet, the pads and the installation alone. Each charge has the label the customer sees on the quote and on printed documents, such as "Installation" or "Tariff".

Tax is calculated from whether each product is taxable. The rep enters the $500 project discount with a note explaining why it was given. CommerceServer won't let a discount exceed the remaining subtotal, and it shows any automatic discounts by name.

The total is the subtotal plus shipping and tax, minus discounts. When the designer adds two more rugs, every one of those figures recalculates.

A missing price can't become a free line

If the rep is still waiting on a price from the mill, that line can be marked "price not set". It isn't treated as $0, and CommerceServer won't let the quote become an order until every line has a price.

Sending and revising the quote

The rep emails the designer a link to the quote. The email gives the quote number, total and amount due. The link opens the current quote, where the designer can review it and pay online.

CommerceServer controls that link:

  • it expires, after 30 days by default
  • the rep can cancel it at any time
  • CommerceServer records when it was opened and when it was completed
  • it only works while the quote is open, and it can't be used to pay an order twice

When the designer asks for changes, the rep edits the same quote and sends it again. There is one current version of the job, not a set of attachments named "final" and "final revised".

Approval: the quote becomes the sales order

When the designer approves, the rep converts the quote to a sales order and records the customer's purchase order number and the payment terms, such as net 30. Everything else is already there: the lines, the sizes and areas, the notes, the charges, the tax and the discount. It is the same record, so nobody retypes it and the order matches exactly what was quoted.

CommerceServer won't convert an empty quote or a quote with a missing price.

Invoicing is not the same as being paid

The invoice is the bill for the sales order. It shows the lines, the charges, tax and discount, the terms and due date, the amount paid and the balance still owed.

Issuing an invoice doesn't mark the order as paid. On net 30, the invoice goes out now and the payment arrives later. The order is marked as paid when the payment is recorded, and the invoice shows the open balance until then. A customer who pays through the quote link receives a receipt.

The order's status follows what actually happened: open, converted to an order, paid, fulfilled or voided.

Ordering from suppliers

The rugs come from the mill and the pads come from a domestic supplier, so the job needs two purchase orders.

From the sales order, the buyer chooses the lines and the supplier. CommerceServer already knows which suppliers carry each product and what they charge. It shows how much of each line still has to be ordered and which purchase orders already cover part of it. The selected lines are copied into a new purchase order for that supplier, or added to a draft already open for the same supplier.

The buyer doesn't retype anything. The purchase order already has the product, quantity, sizes, specifications and line notes from the sales order. The buyer adds the delivery warehouse, a sidemark for the hotel job, the expected ship date and any special instructions, then prints the purchase order to send to the supplier.

Each purchase order links to the sales order it came from, and the sales order lists its purchase orders. Each purchase order also shows its known cost total and flags any line that still has no cost.

A purchase order is a draft until the buyer places it. Placed means you have ordered from the supplier. It is not proof that the supplier confirmed the order.

Inventory: ordered, in transit, in stock and held for the customer

This is where most companies lose track. CommerceServer tracks the goods themselves, not just the paperwork.

On order. When the buyer places the rug purchase order, CommerceServer creates a record for each of the 20 incoming rugs, linked to that purchase order. Because the purchase order came from the hotel sales order, CommerceServer holds those 20 rugs for that order line automatically. Staff can change the hold if they need to. Rugs ordered just to restock the warehouse aren't held for anyone.

In transit. When the mill ships, the buyer records the shipment on the purchase order with the expected arrival date and the shipment reference. The same 20 rugs move to in transit. No new records are created, and they are still held for the hotel job. Your staff record this from the supplier's shipping notice; CommerceServer doesn't need a feed from the mill or the carrier to keep this status.

In stock. When the container arrives, the warehouse receives the rugs into a warehouse location with the date received. They are now in stock, and still held for the hotel order. Nobody has to remember which incoming rugs were for which customer.

Held for the customer. The corridor carpet was already in the warehouse. The buyer selects the carpet roll pieces that cover the job, identified by their warehouse tags, and CommerceServer holds them for the hotel order. The order's packing list is built from exactly the pieces held for it.

For any product, CommerceServer shows how much is in stock, on order, in transit and allocated to orders. A salesperson can answer "do we have it, and when is more coming?" without walking the warehouse or reading the buyer's email.

A quote doesn't reserve stock. Goods are held once there is a sales order, and if a held line is removed, its pieces are released.

What is already set up for the next job

The second hotel job takes less work than the first, because CommerceServer kept everything:

  • Products and sizes: custom products, their dimensions and descriptions are saved.
  • Customer prices: the design firm's account still uses trade pricing, and any price the rep saved for them is there.
  • Charges: installation, the tariff and other service charges are set up once and added to any quote.
  • Suppliers and costs: each product knows its suppliers and their costs. When a supplier's price changes, the buyer can update that default cost while placing the order.

What to look for in B2B quoting software

When you compare systems, ask how much of this the software does for your staff and how much it leaves to them:

  1. Does it find the customer's price, including quantity breaks, and show any price changed by hand?
  2. Does it calculate the area and price from real dimensions?
  3. Can tariffs and service charges apply to only the right lines, with tax and discounts calculated?
  4. Does it block lines with no price instead of treating them as free?
  5. Does the approved quote become the sales order without retyping?
  6. Does it keep the invoice separate from payment and show the balance?
  7. Can one order become purchase orders to several suppliers, linked back to the customer's order?
  8. Does it track the goods themselves from ordered to in transit, in stock and held for a specific order?

See B2B quoting in CommerceServer

CommerceServer includes these pricing, quoting, ordering, invoicing, purchasing and inventory tools, and we set them up around your products, customers and suppliers. See how B2B quoting works in CommerceServer, or tell us about the quotes your team prepares today.