BFBambooForge Labs

Car Dealership Management

Used-car dealership stock with true cost per unit, days-in-stock ageing, and a deal that shows gross after discount, over-allowance and recon.

Buy on the Odoo Apps StoreOpen the live demoIndustries€290Community & Enterprise

Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_car_dealership.

Odoo 16.0Odoo 17.0Odoo 18.0Odoo 19.0
Full walkthrough on a live Odoo 19.0 database, with subtitles. It ends with what this app deliberately does not do.

Car Dealership Management

For a single dealership - the forecourt, not a dealer network. Built around the two numbers a used-car business lives on: what a unit stands you in at, and how long it has been sitting there.

Stock

  • VIN, plate, model, year, mileage, colour, photo, and where on the site it actually is. Cars go missing on forecourts more often than anybody admits.

  • The cost is the buying price plus transport plus every preparation line. That total, not the buying price, is what a deal is judged against.

  • Days in stock is computed and banded: under 30, 30-60, 60-90, over 90 - coloured on the forecourt board. A scheduled job puts the ninety-day cars on the list of whoever bought them - never on OdooBot's, where nobody would ever see it - because they are the ones nobody mentions in the morning meeting. The note it leaves says how long the car has stood there and nothing about what it cost: everyone who can read the car can read its notes.

  • A preparation line that has been paid is not rewritten once the car is sold. A late bill goes on as its own line, and it moves the unit's cost without moving the gross of a deal that is already done.

  • A salesperson may say where a car is, what the odometer reads and what it needs. What it cost, what it is priced at and when it came in belong to the manager who bought it - field by field, not just on the screen.

The deal

The gross is shown after the three ways money quietly leaves, and before the one that comes back:

  1. the discount off the screen price;

  2. the over-allowance on the part exchange - what was allowed for the customer's car less what it is really worth;

  3. the cost of the extras, so a warranty sold at cost shows as the favour it is - and the cost comes off the product on the server, so an extra added by a salesperson who cannot see costs still carries one;

  4. plus the finance commission, because a car sold on finance makes more than the same car sold for cash.

  • The floor price is enforced on the server, not in the button bar. A deal under it needs a sign below the floor action that refuses anyone but a manager - no context flag, no hidden button, and who signed it off goes on the record. The message deliberately does not name the figure, because a salesperson who knows the floor negotiates to it. The over-allowance counts against the floor: money given away on the trade-in is money off the car.

  • A part exchange is taken into stock at what it is really worth, as its own unit, through a short form that asks what the customer's car actually is. Only a manager puts the value on it; taking the car in and signing the deal are both refused while an allowance has been promised for a car nobody has appraised.

  • A deposit holds the car, and nothing else does: a deal cannot be reserved without one and it is refundable until signature. After signature it is part of the price, and a manager either keeps it or releases it - either way it is on the record, and either way the deal can then be lost. A signed deal that falls through is not left standing for ever with the car marked sold.

  • What a deal was signed on stops moving. Price, allowance, car, customer and extras are locked at signature; a manager who needs to change one reopens the deal in the open and signs it again. A live deal is lost, not deleted.

  • The gross is frozen at signature on what the car stood us in at that day, so a bill that turns up a fortnight later moves the unit's cost without rewriting a month that has already been reported.

  • One car, one live deal - held by a unique index as well as by the check, because two salespeople in two tabs on a Saturday is exactly when the check is too late.

Delivery

Cars leave against paperwork: delivery is refused until a posted invoice exists that has not been credited - a reversed invoice is no paperwork, and it lets the deal be invoiced again. Invoicing and handing the car over are the manager's, on the server and not only on the screen. The invoice carries the part exchange as a negative line, so the customer reads one figure rather than two documents, the extras sit on it with their own tax, and the vehicle line is raised on a product chosen once in the settings, so it has a tax and an income account like every other line in the ledger.

A lost deal gives the customer their car back: the part exchange comes off the forecourt with it.

Roles

A salesperson quotes, reserves and signs within the floor, takes a part exchange in, and sees the screen price but never the cost, the floor, the over-allowance or the gross - all of them are field-level rules, and none of the figures appear in a chatter note either. A sales manager buys stock, sets the floor, values a part exchange, signs off deals below it, reopens a signed deal, settles a deposit after signature, invoices, hands the car over, and sees every number.

Every one of those is checked on the server. A hidden button is not a rule.

Community only

Depends on product and account - both Community. Tested on 16.0, 17.0, 18.0 and 19.0.

Screens

Deal - bambooforge_car_dealership
Deal
Stock - bambooforge_car_dealership
Stock
Unit - bambooforge_car_dealership
Unit