This article covers the six things the software has to handle, how to test each one, and how CommerceServer handles them. Facts about our client, a flooring wholesaler that left Zoho, come from how a flooring wholesaler left 15 years of Zoho patches in one month. Anything described as typical is general flooring practice, not a client fact.

Illustration titled What flooring software has to handle. Six cards read Rolls and cuts, Price by area, Samples and consignment, Custom rugs, Vendor orders tied to sales, and Customer portal. A bar at the bottom reads: Test each one with your own records.
Figure 1. Six things general order software usually gets wrong for a flooring or rug wholesaler.

Rolls, cuts and pieces

A product is a style and color in a vendor's line. An inventory piece is a specific roll or cut of that product in a warehouse. Customers order the product; the warehouse ships pieces. Software that blurs the two cannot tell you whether the stock on hand is one long roll or several short cuts, and that decides whether you can fill an order for a single room.

In CommerceServer each piece is its own record. Staff select the measured pieces that cover an order line by their warehouse tags, the pieces are held for that order, and the packing list is built from the pieces held. The product view shows how much is in stock, on order, in transit and allocated. What a flooring distributor's data model looks like covers the records behind this.

Illustration titled One product, many pieces. A card labelled Style and color leads to three cards labelled Long roll, Short cut and Remnant, each showing a roll of a different length. A bar at the bottom reads: Customers order the product. The warehouse ships pieces.
Figure 2. Customers order a style and color. The warehouse ships the particular roll, cut or remnant that covers the order.

Pricing by the square foot or square yard

Carpet and many rugs are priced by area, while pads and accessories are priced each. The software has to work out the area from the size, apply the right unit and keep the cost from the vendor in that vendor's unit.

CommerceServer prices a line from its dimensions in square feet or square yards, where a square yard is nine square feet. In our walkthrough of one B2B job from quote to purchase order, a 9 ft by 12 ft rug is 108 sq ft, or 12 sq yd. At $85 per square yard it sells for $1,020; at the mill's $52 per square yard it costs $624. The prices there are illustrative.

Trade pricing is the other half. CommerceServer prices by customer type, applies quantity price breaks, marks a price the rep typed in as an override and saves a price for a customer only when the rep chooses to.

Samples and consignment

Samples go out to showrooms, designers and sales reps and are expected to come back. Consignment goods typically sit at a retailer's or customer's location while still belonging to the wholesaler until they are sold. In both cases the question is the same: where is this piece, and who has it? A system that only knows warehouse locations cannot answer.

CommerceServer records where each piece is. Customer consignment is one of its location types, alongside warehouse, hold and in transit. When we moved our client's sister company, its staff needed a fast way to record sample and stock moves: scan the barcode, choose where it went, record who moved it and when, and send it back home. That workflow is described in tracking samples and consignment inventory.

Custom rugs

A custom rug does not exist in the catalog until a customer asks for it. It has a size, a material and a color, it is made by a mill, and its cost comes from that mill.

In CommerceServer the rep creates the custom rug from the quote. The form takes a style, width and length in the chosen unit, color, material, the vendor, the vendor's product code, the cost with its unit and the sell price with its unit. A rug can start as a copy of an existing catalog product without changing the original. The custom rug is saved as a product, so it is still there for the next job. Custom rug orders from quote to purchase order follows one through.

Vendor orders tied to customer orders

Most special orders and custom rugs are bought for a specific customer order. The purchase order to the vendor has to know which order it fills, and the goods have to be held for that order when they arrive.

From a sales order, CommerceServer shows the known suppliers and their costs, the quantity still needed and any purchase order that already covers it, then creates a new purchase order or adds to an existing draft, with links both ways. The purchase order carries the ship-to warehouse, the sidemark and the expected ship date. When it is placed, the incoming pieces are held for the order line it came from; restocking orders are not held for anyone. Staff record the shipment and the receipt, and the same pieces move from on order to in transit to in stock.

A portal for trade customers

Trade customers want to check stock and place orders without calling. That only works if the portal shows the same stock the staff see.

Our client's customers now log in, check inventory and submit purchase orders themselves. The portal runs on the same CommerceServer data the staff use, so the stock a customer sees is the stock in the system. A B2B ordering portal for distributors explains what such a portal needs underneath it.

Beyond the six

Every wholesaler also has needs that are its own. Our client now runs its own custom workflow, custom business rules and custom reporting, all supported in CommerceServer. It never had that in 15 years on Zoho. Every feature and report it asked for was built, plus the B2B portal.

Flooring data also arrives in many layouts: vendor price lists, order documents and old exports. When a file arrives in a layout the agents have not seen, Buffaly writes a new reader for it and uses it in the same session. We consider this key to how Buffaly works. Buffaly Builds Its Own Tools describes the behavior.

What was learned moving our client became the tools for its sister company's migration: the import method and the checks run before and after each load. The second migration was the easy one tells that story.

How to test software against these six

Ask any vendor, including us, to show each of these with your own records:

  • A product with several pieces of different lengths, and which piece would ship for a given order.
  • A 9 ft by 12 ft rug priced by the square yard, with your cost from the mill beside it.
  • A sample sent to a designer and returned, and goods on consignment at a customer's location.
  • A custom rug created on a quote and ordered from the mill.
  • A purchase order placed from a sales order, and the incoming goods shown as held for that order.
  • A trade customer logged in to the portal, seeing the same stock your staff see.

If any of these needs a workaround, a spreadsheet on the side or a custom field nobody can explain, that is where your current problems will follow you.

Show us how your stock and orders work

CommerceServer is built, run and continually improved by one accountable team, with the improvement capacity agreed for each engagement. Tell us about your current system, or read how full service works.