Browse the documentation

Features

Sales and Purchase Orders

Track what a customer ordered from you (sales orders), what you ordered from suppliers and what has arrived (purchase orders), and the deliveries that fulfil each order, from receipt to completion.

Winning a tender starts three steps: the buyer's purchase order arrives (an incoming sales order for you), you order the goods from your suppliers (outgoing purchase orders) and record what arrives, then the goods go out to the buyer as deliveries. The Sales orders page (Sales section) and the Purchase orders page (Procurement section) in the navigation bar track the three steps, and every record links to what came before and after it: the quotation the customer accepted, the tender, the sales order a purchase sources, and the deliveries that fulfil it.

Sales orders

A sales order is what a customer ordered from you: the customer (required; pick one from the customer directory and its name is copied, or type it), their reference (their PO or contract number), the order date, the due date they expect delivery by, the currency, and the lines: description, quantity, unit and unit price when known. Every order gets a sequential number for your organization (SO-000001, then SO-000002...) that never changes, and its total is computed from the priced lines only; an order whose lines are not priced yet has no total.

The quickest way to create one is from a quotation: the Create sales order button on the quotation page opens the form filled with the customer, the tender and the quoted lines at their prices, and nothing is saved until you click save. You can also create one from scratch and pick the tender and quotation from the lists. Every line starts at its product from the product catalog: search by name or code and pick, and the pick fills the description, unit and sale price where the cells are empty. When the product is missing, create it from the line itself in a short panel under it, without leaving the order. A new line cannot be saved without a product, while a line saved earlier without one keeps saving as it is.

Each line can also carry what concerns its delivery: the customer's line number, the item code, the delivery address and the delivery date. These fields show in the lines table and are kept as they are when you edit the order, so saving the form erases none of them. They are what the delivery calendar and delivery planning rely on.

Sales order status

  • New: the order arrived and was recorded.
  • Confirmed: you reviewed it and confirmed it to the customer.
  • In progress: deliveries have started. The order moves here on its own when the first linked delivery is created.
  • Fulfilled: every line has been delivered. The order moves here on its own when the last delivery is marked delivered, and the completion time is recorded.
  • Cancelled: the order was called off. Nothing moves it automatically afterwards.
Note:The automatic move only ever goes forward: deliveries push an order to In progress and then Fulfilled, never back, and never out of Cancelled. The status buttons on the order page are the manual override, and let you undo any move made by mistake.

Importing a customer's purchase order

Instead of typing the sales order yourself, upload the purchase order the customer sent: the Import purchase order button on the Sales orders page. The platform reads NUPCO purchase orders directly, whether they were issued for a tender or from Marketplace, and reads other layouts automatically. It then shows what it read for you to review, and nothing is saved until you confirm. You can choose several files at once: each is read, then all their orders appear in one list that one press creates.

The orders read appear in a table, and every ticked row is created when you press the create button. Tick or untick rows, or use the box in the table's header to select them all. Above the table, one set of settings applies to every order: attach the PDF, plan the draft deliveries, and what happens to a purchase order that already has a sales order (skip it by default, or create another). The Actions menu removes the ticked rows from the list or clears it. Open any row to see its lines and change its customer. If your organization connects Zoho Books in the "Import the attached PO only" mode, open the "From Zoho Books" tab and tick Zoho orders in its table, or read everything not imported since a day you choose.

From the file it takes the purchase order number (the customer's reference), its date and, for each line, the customer's line number, item code, description, quantity, unit, price, delivery address and delivery date. A line with several delivery dates becomes one line for each date, each with its own quantity and date. The platform looks up the tender by the number the order names, the customer by VAT number, and catalog products by NUPCO code, and links a product only when exactly one carries the code.

The purchase order import page after a file is read: the customer matched by VAT number, the tender, the totals, and the lines with their catalog products, delivery addresses and dates
What was read from the file, for you to review before anything is saved. The two options at the bottom keep the PDF with the order and plan its draft deliveries.
  • Totals: the platform compares the lines, the VAT and the purchase order value with what the file prints, and flags every difference.
  • Errors: a purchase order that cannot be filed as read, with no lines or a line with no quantity, starts left out until you deal with it.
  • Duplicates: if a sales order already carries the same purchase order number as its reference, no second order is created until you confirm it.
  • Digits: the platform reads numbers printed with either the Arabic (0-9) or the Eastern Arabic (Hindi) digits, and always shows them as 0-9.
  • Customer: picked by VAT number when a matching customer profile exists, and you can change it.

One file can hold several purchase orders. The platform splits its pages by purchase order number and shows each order on its own card, so you confirm the ones you want and each purchase order becomes a sales order. Each order keeps its own pages of the file, with the terms pages that follow it.

On confirmation the sales order is created, the original PDF is kept in the Documents card (you can turn that off), and if you have the deliveries permission a draft delivery is planned for each destination and day. You can still add any other document to the order with the Add a document button.

A sales order created from a purchase order: each line shows its delivery address and date, with the original PDF in the Documents card and the planned draft deliveries in the Deliveries card
The order after confirmation: each line carries its delivery address and date, the original PDF is kept under Documents, and the draft deliveries planned for each address and day are listed under Deliveries.
Note:The platform does not guess: a value it cannot find in the document's text is left blank, and anything read automatically carries a note asking you to compare every figure with the file. Review the notes before you confirm; the review is what makes sure the order matches what the customer sent.

Fulfilment by deliveries

The Create delivery button on a sales order page opens the delivery form linked to the order and filled with one line per order line still to deliver, at the remaining quantity; when the customer's name matches a saved destination it is picked for you. In the delivery form itself you can pick the Sales order from the list and click Fill lines from the order. Every delivery line linked to an order line (the "Order line" column says linked or not linked) counts toward that line's fulfilment.

The Fulfilment card on the order page sums it up: delivered of ordered, what is on the way, and what remains, with a progress bar, and every line carries Delivered (on deliveries marked delivered), On the way (deliveries still draft, scheduled or in transit) and Remaining columns. A cancelled delivery counts for nothing. The Deliveries list beneath links each delivery to its page and status.

When the order's lines carry delivery addresses and dates, the Plan deliveries button on the order page plans one draft delivery for each destination and day, carrying the lines that go there and scheduled for noon Riyadh time on the due day. A line with no date of its own goes on the order's due date. The button never repeats what was planned, so running it again plans only what is left, and the order's status does not move until one of the deliveries is worked on. It needs the Admin or Owner role.

When a delivery deviates from the order

A delivery is not held to the order: it records what actually left the warehouse, and the platform blocks nothing. What it does is show every difference in a Deviations from the order card that appears on the sales order page whenever there is one: a line delivered beyond its ordered quantity (the excess also shows beside the delivered count in the lines table), a line on a linked delivery that is not on the order at all, a line shipped as a different product than the order line's (when both sides carry a catalog product), a delivery delivered or scheduled after the due date, and an order marked fulfilled by hand while quantities remain. When the deliveries match, the fulfilment card says so. An over-delivered line never covers for a short one: remaining is counted per line.

In the delivery form, once it is linked to a sales order, the "Order line" column says how much of each order line remains and turns amber when the quantity exceeds it; a hint only, and saving is always possible.

Delivery calendar

The Delivery calendar page (Sales section, and a button on the Sales orders page) shows the days orders have to be delivered by. Each day has one entry for each sales order and destination: the lines due there, how many of them are still open, and the deliveries that cover them.

  • Overdue: something is still open and the day has passed.
  • Upcoming: something is open and the day is today or later. It turns amber when it is due within 3 days.
  • Delivered: every line has shipped on deliveries marked delivered, or the order was closed as fulfilled.

The Needs attention section at the top gathers every open deadline that has passed and everything due within 30 days, with counts of what is overdue, what is due within 3 days and what has no delivery planned yet. Clicking a day in the grid opens its entries under its week. Every entry links to its sales order and shows its deliveries with their statuses; when it has none it carries a No delivery planned badge.

The delivery calendar: counts of what is overdue, what is due within 3 days and what has no delivery planned, a Needs attention list of entries, and the month grid below it
The three counts, the Needs attention list and the month grid. Each entry is one order's lines for one destination on one day, linked to its sales order and its deliveries.

The Map button at the top shows the same open deadlines on a map of the Kingdom's regions. Each region is coloured by its nearest deadline (red for overdue, amber for due within 3 days, teal after that) and carries its number of deliveries. You can limit the map to what is due within 3, 7 or 30 days; what is overdue always stays on it. Clicking a region, on the map or in the list of areas beside it, opens its deliveries below.

The map view of the delivery calendar: the Kingdom's regions coloured by their nearest deadline with a delivery count on each, the list of areas beside it, and the chosen region's deliveries below
Each region is coloured by its nearest deadline: red for overdue, amber for due within 3 days and teal after that. Choosing a region opens its deliveries below, as the same cards the calendar uses.

The platform finds a delivery's region from the words of the address on the line, by the first place it names (a warehouse "in Qassim for Hail" delivers to Qassim, not Hail). An address that names no region the platform knows is not on the map, but stays in the list of areas as "Area not recognised", so a delivery is never lost to the way an address was typed.

A line is placed on its own date, or on the order's due date when it has none. A line with no date of its own or its order's does not appear, and neither do cancelled orders. Days are Riyadh days.

Purchase orders

A purchase order is what you ordered from a supplier: the supplier (pick one from the manufacturer directory and its name is copied, or type it), the supplier's reference (their confirmation or proforma number), the order date, the expected arrival date, the currency, and the lines with their unit cost. It gets a sequential number (PO-000001...) and its total is computed from the priced lines. The Create purchase order button on a sales order page fills the lines from the order and links it, without prices; what the customer pays says nothing about the supplier's cost.

Recording receipts

When goods arrive, click Record receipt on the purchase order page: a panel appears with one row per line where you enter what arrived now, and it is added to that line's received total. The received total can never exceed the ordered quantity; a panel that would is refused whole and nothing from it is saved. After saving, the order moves on its own to Partially received or, once every line is complete, to Received, with the receipt time recorded. The Goods received card and the Received and Remaining columns in the lines table show where things stand.

Purchase order status

  • Draft: being prepared, not sent yet.
  • Sent: sent to the supplier.
  • Confirmed: the supplier confirmed it (record their confirmation number as the supplier reference).
  • Partially received and Received: moved by receipts on their own, and can be set by hand too.
  • Cancelled: takes no receipts; move it back to draft first.

Editing orders

The Edit button on any order page opens the same form. Lines are edited in place, never replaced: a sales order line keeps its linked deliveries, a purchase order line keeps what was received, and its quantity cannot be lowered below that. Removing a line from the form removes it from the order. The order number never changes, and the status is changed with the status buttons, not the form.

Warning:Deleting a sales order removes its lines for good, while the deliveries and purchase orders linked to it stay and are unlinked. Deleting a purchase order removes its lines and the receipts recorded on them. Neither can be undone.

Roles

Sales orders are visible to every role but Technical and Purchasing, and editable by Sales, Admin and Owner; Viewer (no pricing) sees them without unit prices or totals. Purchase orders are cost data end to end (the supplier and what you pay them), so only roles that see cost prices can open them: Purchasing, Admin, Owner and Viewer; the Sales role sees neither them nor their list on a sales order page.

The delivery calendar is visible to everyone who sees sales orders, and shows no prices. An order's documents are visible to everyone who sees the order, and are also listed in the document library. Creating deliveries, from the import or from the planning button, needs the Admin or Owner role; the Sales role can import an order and keep its file, without the deliveries option.

Over the API and MCP

Everything above is available over the REST API under /api/v1/sales-orders and /api/v1/purchase-orders (with .../status and .../receive) behind the orders.read and orders.write scopes, and through the MCP tools sales_orders_* and purchase_orders_*, among them purchase_orders_receive for goods receipts. The delivery tools take sales_order_id and a per-line sales_order_item_id. Planning deliveries, the calendar and the order's documents are available too: sales_orders_create_deliveries, sales_orders_calendar, sales_order_document_upload_url_create and its companions. Reading a purchase order PDF is done in the app only; your assistant reads the file itself and then uses sales_orders_create. So you can tell your assistant: "record that 200 pieces of line one on PO-000004 arrived today".