
Real Estate & Property Management
Real estate and property management: mandates that expire, protected introductions, offers that reject each other, and lettings deposits held right.
Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_real_estate.
Real Estate & Property Management
The thing that decides whether an agency gets paid is not the building. It is the instruction: the piece of paper that says this agency may market it, until when, and who pays the fee. Everything here is built around that.
The mandate
Exclusive or open, from when to when, asking price, floor price, fee percentage, minimum fee, and who pays it.
A property cannot carry two live mandates when either of them is exclusive. Two exclusive instructions on one flat is a lawsuit.
A scheduled job expires mandates that have run out, says so in the chatter, and puts a to-do on the agent - and it warns fourteen days before, which is the whole point. The warning is raised once: a to-do somebody dismissed does not come back tomorrow morning.
An accepted offer freezes the clock. A mandate that is under offer is not expired by the job when its term runs out, because conveyancing does not stop and a flat that is sold does not go back on the market because a date passed. The agent is told to get the extension on paper, and the sale still completes.
Extending renews from today, not from a date that went past in March, and a mandate that was under offer comes back under offer.
The property's own state is computed from the mandate, never typed - available, under offer, sold, let, mandate expired. An agency that types it ends up marketing a flat that was let last week.
Viewings, and the introduction
A viewing without a live instruction is refused, not warned about. It is the most expensive mistake in the trade: work nobody owes you a penny for. The same rule guards taking an offer.
The introduction is stamped when the viewing is marked done - when it actually happened. A booking that was cancelled or that nobody turned up to introduced nobody, and neither protects anybody. Show them again next month and the original date stands.
If they buy after the mandate lapses but inside the protection period, the offer still says protected - which is how an agency stops an owner waiting it out and dealing direct. That offer can be taken, and accepted, on the lapsed mandate: it is the whole reason the protection period exists.
A viewing that introduced somebody cannot be deleted, by anybody: it is the proof the fee is owed. Cancel it or mark it a no-show.
One negotiator cannot be in two flats at once; overlapping viewings are refused.
Yesterday's viewings are chased, not closed: the job puts a to-do on the negotiator asking whether they turned up, once. Software does not know, and a viewing closed by a job is an introduction date nobody can stand behind.
Offers
Accepting one offer rejects the others, puts the property under offer, and the chatter says how many were rejected.
One accepted offer at a time, said by the database. A unique index on the mandate refuses a second one even when somebody goes round the application, and the acceptance itself takes the mandate's row first, so two clerks clicking at once cannot both win.
Only an agent undoes an acceptance. Withdrawing or falling through an accepted offer is the agent's call - the owner has been told the flat is sold and the other applicants have been turned away. And an offer moves with the buttons: a negotiator cannot type a state into it.
Once an offer is accepted the fee terms are frozen - the offer amount, and the mandate's asking price, fee percentage, minimum and who pays it. Editing them afterwards edits what somebody gets invoiced.
An offer below the owner's floor price is refused outright, until somebody uses the explicit accept with the owner's approval - which is a different button, with a confirmation, and it leaves a trace.
Accepting is an agent's decision, not a negotiator's. A negotiator takes offers all day and cannot commit the owner.
An accepted offer cannot simply be "rejected": it fell through, which is a different thing to the owner and to the fee.
When a sale falls through the property goes back on the market and the other offers stay rejected until somebody deliberately puts them back on the table. Nothing un-rejects itself behind your back.
Offers nobody answered lapse on their own deadline.
The fee
Computed on the price agreed, never on the price that was asked, with a minimum, and invoiced to the owner, the buyer or split - whichever the mandate says. On a letting it is a share of a year's rent, not of a month's. It cannot be invoiced before completion, and never twice.
The fee is frozen at completion and invoiced from that figure, so what goes on the invoice is what both sides agreed on the day, whatever anybody edits afterwards. A split fee is rounded to the cent and the second share is the remainder, so the two invoices add up.
Lettings
Rent per week or month, arrears visible, and a rent run that bills every period that has fallen due and never bills the same period twice. It ships switched off, because letting software bill people should be a decision.
Periods are anchored on the rent day. The first one is pro-rated from the day they moved in and the last one is pro-rated to the day they leave, so a fortnight is not billed as a month and the anniversary does not walk down the calendar from the 31st.
Rent is written against a rent product, set per company, and against no product and no tax if there is none - never against the agency fee product, which books the owner's rent as the agency's income with the fee's tax on it.
A credit note frees the month it credited. The period goes back on the rent run, comes off what was billed, and stops counting as rent collected on the statement.
A break clause is a date, inside the term, not a note somebody typed. Once the tenancy is running the dates and the rent are frozen: they are what the tenant signed. A tenancy that ended early frees the property from the day they left, so the flat can be re-let without back-dating anything.
Starting a tenancy completes the mandate behind it and shows the property as let, so nobody markets a flat somebody lives in.
Per-tenancy charges are marked as the owner's or the tenant's. Guessing that is how an agency loses a landlord. The tenant's are invoiced to the tenant, once; the owner's come off the statement.
The landlord statement is a window on screen for a period you choose. It nets the management fee and the repairs the agency advanced for the owner off the rent actually collected, and reports it net of tax - the tax was never the owner's.
The deposit
The part software usually gets wrong. It is the tenant's money held by somebody else.
It is never invoiced. It is recorded as held on the tenancy and shown on the landlord statement as held - never as rent, and never in anybody's turnover.
A tenancy cannot start while a deposit that was agreed has not been taken.
It is settled once, and not before the tenancy has ended - until then the money is still the tenant's. Settling it asks how much comes off and why, and the reason goes into the chatter, which is what the agency reads out when the tenant rings up about it three weeks later. A deduction bigger than the deposit is refused.
Roles
A negotiator books viewings, takes offers and keeps applicants - and cannot sign or withdraw an instruction, accept an offer or undo somebody else's acceptance, delete a viewing, run a letting or invoice anything. An agent signs, accepts, lets and bills. The branch manager configures.
Community only
Depends on product, account and base_setup - all Community. Tested on 16.0, 17.0, 18.0 and 19.0.
Screens



