IB SolutionsGlobal

Chapter 4

Sales History

Finance → Sales shows every sale that has been rung up at your branch (or, for company-wide users, the branch selected in the header).

4.1 Finding a sale#

The Sales History page opens with stat cards for Today's Total Sales, Cash Sales, Mobile-Money Sales, and Outstanding balances, followed by a filterable table (Search, Status — Paid / Partial / Unpaid, and a date range) listing Sale #, Customer, Items, Total, Paid, Due, Method, Status, and Date. When truck & driver recording is on, Search also finds sales by truck number, driver's name, or driver's phone.

4.2 What you can do with a sale#

  • 👁 View — open the full sale detail, itemized, with its payment history
  • 🖨 Print Receipt
  • ✏ Edit — needs sales.edit; you must enter an Edit Reason, which is kept for the audit trail
  • 💳 Record Payment — on any sale that isn't fully paid
  • ⚠ Void Sale — from the sale detail page; needs sales.edit

4.3 Recording a payment against a sale#

  1. Open the sale and click “💳 Record Payment” (or use the 💳 icon in the list).
  2. Choose how the customer paid — Cash, Mobile, Bank, or Deposit — and, for Cash / Mobile / Bank, the account the money went into.
  3. Enter the amount (it can't be more than what's still owed) and click “✓ Record Payment.”

4.4 Editing a sale#

  • If you change a payment's method or account, the money moves to the right account automatically.
  • Switching a paid sale to Credit resets Amount Paid to 0 — enter what the customer actually paid, if anything.
  • To take new money on a credit sale, use Record Payment rather than Edit. Edit only lets you lower the amount paid on a credit sale (to correct a mistake), and links you to Record Payment otherwise.
  • A walk-in sale can't be edited into one that leaves a balance owing.
  • When truck & driver recording is on, the edit page has the truck and driver fields too, so they can be corrected. A change to them is listed in the edit's audit entry, like any other change.

4.5 Voiding a sale#

4.6 Proforma invoices#

A proforma invoice is a priced quote: what the customer would pay for a list of items, given to them before they buy — for example so they can get approval or arrange the money. Saving a proforma doesn't move any stock or money, and proformas are left out of every report. When the customer buys, you convert the proforma into a sale at the POS.

Turning it on#

  1. Administration → Settings → Optional features.
  2. Switch on “Proforma invoices.”
  3. Set “A new proforma is valid for” — how many days a new proforma's prices hold (default 14). Staff can change the date on each proforma.
  4. Optionally enter Default terms, such as a deposit to confirm the order, delivery time, and bank details. They're printed at the foot of each new proforma, and can be changed on each one.
  5. Click “Save settings.”

Finance → Proformas then appears in the menu, and the POS screen gets a “📄 Proformas” button.

Creating a proforma#

  1. Finance → Proformas → “+ New Proforma.”
  2. Choose the customer: search for a registered customer, or leave it on walk-in and type the Name on invoice and, optionally, a Phone.
  3. Add items by name or SKU, or scan a barcode, and set each line's quantity. Products that are out of stock can be quoted too.
  4. Prices come from each product's selling price. For a service priced at sale (section 8.5), type the price for the job.
  5. Set an overall Discount and, if you charge tax on sales, the Tax rate, then check the Total.
  6. Check the Valid until date and the Terms, which are printed. Internal notes are for your staff and aren't printed.
  7. Click “✓ Save Proforma.” It gets a number such as PF-20261018-0001, and its page opens.

Printing and sending it#

On the proforma's page, click “🖨 Print / PDF.” It opens an A4 proforma invoice with your business details and TIN, the customer, the items, the totals and tax, the Valid until date, your terms, and a space for the customer's acceptance. Print it, or choose “Save as PDF” in the print window to send it by email or WhatsApp. An expired, converted, or cancelled proforma prints with a stamp saying so.

Editing, expiry, and cancelling#

  • ✏️ Edit — an open proforma can be changed until it's converted or cancelled. Items already on it keep the price you quoted; items you add come in at today's selling price.
  • Expiry — after its Valid until date, a proforma shows as Expired. It can still be converted at the quoted prices, or edited to give it a new date (check the prices) before you send it again.
  • ✕ Cancel Proforma — on the proforma's page, when the customer won't be buying. A cancelled proforma stays on record, but can't be edited or converted. Needs “Edit / Void Sales.”

Converting it to a sale#

  1. Open the proforma and click “🛒 Convert to Sale.” The POS opens with the proforma's customer and items, at the quoted prices, discount, and tax rate.
  2. Check the cart. Anything that can't be sold as quoted is listed above it: an item that is no longer sold, or has no stock at your branch, is left out, and a quantity larger than your stock is reduced to what you have.
  3. Take payment as usual and click “✓ Complete Sale.” The proforma is marked Converted, with a link to the sale, and the sale's page links back to the proforma.

The Proformas list#

Finance → Proformas lists the proformas at your branch, with cards for Open, Value of open proformas, Expired, not converted, and Converted this month. Search by proforma number or customer, and filter by status: Open, Expired, Converted, or Cancelled.

4.7 Importing past sales#

If you counted your stock a few days before you started using IBS, the sales made since the count are missing, and your stock looks higher than it is. You don't need to count again: import those sales from a spreadsheet. Each one is recorded as if it had been rung up at the POS on its date.

Before you import#

  1. Add your products with the stock you counted (section 20.1).
  2. Record any purchases made since the count (Chapter 5).
  3. Add the customers who bought on credit or paid from a deposit (Chapter 6), with what they already owed (section 6.3).
  4. Then import the sales.

Importing the file#

  1. Finance → Sales → “📥 Import Sales.”
  2. Click “Download Template” and fill in one row per item sold.
  3. Upload the CSV, click “Preview Import →,” check the rows, and confirm.

The columns#

  • sale_date (required): YYYY-MM-DD, optionally with a time, such as 2026-10-15 14:30. Without a time, the sale is recorded at noon. It can't be in the future.
  • sku (required): the SKU or barcode of an active product. quantity (required).
  • receipt_number: rows with the same receipt number are one sale; a row without one is a sale on its own. The sale's date, customer, payment, sale_discount, tax_percent, and notes come from its first row. The receipt number itself isn't kept — each sale gets a new sale number — so copy it into notes if you want to find the sale by it later.
  • customer: the customer's phone or customer code (or exact name, if only one customer has it). Blank means a walk-in customer, who must pay in full.
  • unit_price: blank uses your branch's selling price; a service priced at sale (section 8.5) needs one. discount (per line) and sale_discount (the whole sale) are percentages or amounts, following your POS discount setting (section 21.5).
  • payment_method: cash, mobile, bank, credit, or deposit (blank means cash). payment_account: an account name or number (blank means your branch's account for that method).
  • amount_paid: blank means paid in full, or nothing on credit. Less than the total leaves the rest owing, as at the POS.
  • tax_percent: the sale's tax rate, when tax is on (blank means your usual rate).
  • notes: kept with the sale, as at the POS.
  • truck_number, driver_name, driver_phone: while truck & driver recording is on (Chapter 11), optional. They belong to the whole sale and are taken from its first row that has them, with the same rules as at the POS (section 11.3). A driver_phone that isn't a phone number marks its row as an error in the preview.

What happens#

  • Sales are recorded oldest first, at your active branch, and each goes through the same checks as the POS: enough undamaged stock (not expired, if your settings refuse expired stock), walk-in customers pay in full, deposits, and credit limits.
  • Stock comes off your branch, and a credit sale adds to what the customer owes, dated sale_date, so the reports for those days include them. The money goes into the account too, but shows in the account's ledger on the day you import, as for any back-dated sale.
  • A sale that fails a check is skipped and listed with the reason; the rest are imported. Fix the skipped ones and import a file with only those.
  • Imported sales appear in Sales History like any other sale, and the import is recorded in the Audit Log.