A build-to-order Odoo module that runs collection routes, container/skip registries, weighbridge ticket capture and recycling material tracking, then turns each service event into a correctly rated invoice. ECOSIRE scopes, builds, installs and supports it for your Odoo 17.0, 18.0 or 19.0 database. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $499.00 USD; request a quote for a scoped proposal.
Illustrative previewA build-to-order Odoo module that runs collection routes,
container/skip registries, weighbridge ticket capture and recycling material tracking, then turns each service event into a correctly rated invoice. ECOSIRE scopes, builds, installs and supports it for your Odoo 17.0, 18.0 or 19.0 database.
No DIY setup — a working app, built, installed and supported by ECOSIRE.
Start with a one-time build price. We scope it with you at kickoff.
ECOSIRE builds, configures and installs it on your Odoo.
You go live in about 2–4 weeks, with a post-launch support window.
Waste collection is a business of recurring service events attached to physical assets sitting on customer sites. A skip goes out on Tuesday, comes back Thursday at 3.42 tonnes of mixed C&D, gets tipped, and has to be rated against a contract that charges a rental day-rate plus a per-tonne gate fee with a contamination surcharge above a threshold. Odoo core has no vocabulary for any of that. stock.lot is not a skip, project.task is not a lift, and sale.order.line has no concept of a gross-minus-tare weight captured on a weighbridge at 06:10. Operators end up running routes on a whiteboard, containers in a spreadsheet nobody trusts, and billing in a monthly manual reconciliation between the weighbridge printout and the ERP — which is exactly where the revenue leakage lives.
We build a dedicated operations layer inside your database rather than bolting a second system onto the side of it. The core is a container asset model (ecosire.waste.container) carrying type, capacity, tare weight, current location as a res.partner site, and a full movement history, so at any moment you know which asset is on which customer site and how long it has been there. A service order model (ecosire.waste.service.order) represents one lift, exchange, delivery or collection, sequenced through states with @api.depends computed fields for planned versus actual, and grouped onto a route (ecosire.waste.route) with driver, vehicle and ordered stop lines. Routes are planned from calendar and list views, dispatched, and closed out against actuals; recurring contracted collections are generated ahead of time by an ir.cron scheduled action from a frequency rule on the contract, so Monday's commercial round appears without anyone re-keying it.
Weighbridge capture is a first-class model (ecosire.waste.weighbridge.ticket) holding gross, tare and a computed net weight, the material line-up by waste stream, the vehicle, the ticket reference and the timestamp. Tickets can be keyed at the gate on a stripped OWL form built for touch, or pushed in from an existing indicator or weighbridge PC over the XML-RPC/JSON-RPC API — we implement the ingest method and the idempotency key so a retried post never double-charges. Each ticket links back to its service order and container, and a QWeb report renders the customer-facing weighbridge docket plus, where you need it, the waste transfer note layout your regulator expects. Recycling material tracking sits alongside as waste-stream records with per-stream rates, contamination capture and inbound/outbound tonnage, which gives you a recovery-rate figure drawn from the same rows the invoice comes from rather than from a separate report nobody can tie out.
Billing is where the module earns its keep. A contract model holds the commercial terms — rental per container per day or per month, per-lift charges, per-tonne gate rates by material, minimum charges, surcharge rules and escalation dates — and an invoicing run walks unbilled service orders and weighbridge tickets for the period, rates each one, and produces account.move drafts with lines that link straight back to the docket. Nothing posts automatically without your say-so; a review step is deliberately built in. Security is real, not decorative: ir.model.access.csv grants for driver, weighbridge operator, dispatcher and manager groups, plus record rules so a driver sees only their assigned route and a multi-company operator sees only their own depot's containers. Everything is standard Odoo — models, views, security, reports — so it upgrades and backs up with the rest of your database.
Delivery is build-to-order, and we are explicit about what that means. This is not a listing you download from apps.odoo.com today. It starts with a short scoping call where we go through your container types, route structure, weighbridge hardware and above all your rate card, because the billing rules are the part that is genuinely different in every yard. We come back with a written scope and a fixed quotation. Once you confirm scope, typical delivery is 2-4 weeks to a working build installed on a staging copy of your database for UAT, followed by go-live with a rollback plan, a training session for dispatch and gate staff, and a post-go-live support window. You receive the full installable source for your Odoo version — 17.0, 18.0 or 19.0, Community or Enterprise — along with the git repository, so nothing about this leaves you dependent on us to keep operating.
Plans tomorrow's rounds and fields the calls when a skip isn't where the customer says it should be. Needs one screen showing every container on site with its age, resequencable route planning, and a run sheet the driver can actually work from — plus an audit trail when a customer disputes a wasted trip.
Turns vehicles around at the gate under time pressure. Needs a form that opens in one click, recalls the tare from the vehicle, computes net weight immediately, prints a docket, and never asks for a field that isn't on the scale ticket. Manual entry and automated ingest from the indicator both have to work.
Owns the month-end billing run and the revenue leakage hiding inside it. Needs every invoice line to trace back to a specific weighbridge ticket or lift, surcharges applied by rule rather than by memory, drafts reviewable before posting, and rate changes that are effective-dated instead of retro-applied.
Answers to the regulator on waste streams, transfer documentation and recovery rates. Needs stream-coded tonnage that reconciles to the same rows finance bills from, transfer-note output in the required layout, and a defensible record of what left which site on what date.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Container as a tracked asset | Dedicated container model with tare weight, capacity, current customer site and full dated movement history | Achievable, but the asset/movement model is the part teams usually under-design and rebuild later | Generic asset or equipment tracking with no tare weight and no site-days concept | No equivalent; `stock.lot` and product records do not represent a skip on a customer site |
| Weighbridge capture | Gross/tare/net ticket model, touch gate form, plus RPC ingest with an idempotency key | Depends entirely on whether the duplicate-post problem is anticipated up front | Rarely present; weights end up typed into a note or an order line | Not modelled at all — Odoo core has no weighbridge concept |
| Weight-based contract billing | Rated invoicing run producing reviewable drafts, each line traceable to its docket or lift | Possible, though rate-card edge cases are where custom builds overrun | Usually flat per-order pricing; tonnage rating is out of scope | Manual invoice lines keyed from the weighbridge printout each month |
| Route planning and dispatch | Routes with driver, vehicle, ordered stops, resequencing and a QWeb run sheet | Buildable, but the dispatcher UX takes several iterations to get right | Often a simple stop list with no container context or actuals capture | Field Service scheduling exists in Enterprise but carries no container or tonnage context |
| Recycling stream and recovery reporting | Stream catalogue with codes, contamination capture and tonnage reconciling to the billed rows | Frequently deferred to phase two and then never funded | Not typically covered by generic logistics modules | No waste stream concept; would require a parallel spreadsheet |
| Fit to your rate card and processes | Scoped against your actual contracts before a line is written; bespoke rules priced in the quotation | Fully yours, at the cost of specifying every rule from a blank page | You adapt your process to whatever the vendor assumed | You adapt entirely, or run the process outside Odoo |
| Access control and depot isolation | `ir.model.access.csv` groups plus record rules — driver sees own route, depot sees own containers | Often added late, after a driver has already seen the full customer list | Coarse group-level access with little or no record-rule work | Standard Odoo groups only, with no domain logic for routes or depots |
| Ownership, source and support | Full source, git repository handover, documented support window and a quoted upgrade path | You own it, and you own the maintenance and the bus factor | Vendor-controlled release cycle; fixes arrive when they arrive | Supported by Odoo, but only for what core actually does |
This is a build-to-order module, not an instant download. We start with a short scoping call (about 30 minutes) covering your container types, route structure, weighbridge hardware and rate card, then send a written scope and a fixed quotation. Once you confirm that scope, typical delivery is 2-4 weeks to a working build installed on a staging copy of your database for UAT, then go-live. Very unusual rate structures or a bespoke weighbridge integration can extend that, and if so we say so in the quotation rather than after.
Every build includes a post-go-live support window for defect fixes within the delivered scope, with an agreed response time and a named engineer. Beyond that we offer an optional annual maintenance arrangement covering compatibility with Odoo point releases and your minor change requests. Migrating the module to a future major Odoo version (for example 18.0 to 19.0) is quoted separately, because it is real engineering work. You also receive the git repository and full source, so you are never blocked from maintaining it yourself or handing it to another partner.
We build for Odoo 17.0, 18.0 and 19.0, on Community or Enterprise, and on odoo.sh, on-premise or a self-managed cloud instance. The module is written against standard framework APIs — `models.Model`, computed fields, `ir.model.access.csv`, record rules, XML/OWL views, QWeb reports and `ir.cron` — so it does not require Enterprise. Where an Enterprise feature genuinely improves the result, such as Gantt or map views for route planning, we implement a Community-compatible list/calendar equivalent and use the Enterprise widget only when your licence supports it. Tell us your version at scoping and the build targets it.
Yes, and this is a normal part of scope. The ticket model exposes an ingest method over Odoo's XML-RPC/JSON-RPC API with an idempotency key on your external ticket reference, so your weighbridge PC or middleware can post gross/tare/net readings without any risk of double-billing on a retry. If your indicator writes to a CSV drop or a local database instead, we build a scheduled import against that. If you have no automation at all today, the touch-optimised gate form covers manual entry and the integration can be added later without a rebuild.
The rate card is the part we expect to differ in every yard, which is why it is configuration on the contract model rather than logic hard-coded into the invoicing run. Rental day/month rates, per-lift charges, per-tonne gate rates by material, minimum charges, contamination surcharges and effective-dated escalations are all supported out of the build. Genuinely bespoke rules — a rebate formula tied to a market index, for instance — are captured at scoping and priced into the quotation, so you know before you commit whether your rules fit the standard configuration or need a specific extension.
Both are useful neighbours and we integrate with them where it makes sense rather than replacing them. What they do not model is a container as a tracked asset with a tare weight sitting on a customer site for an unknown number of days, a weighbridge ticket with gross/tare/net and a waste stream, or an invoicing run that rates a lift by tonnage against a contracted gate fee. Without those you get scheduling but still reconcile the weighbridge printout to the ERP by hand every month — which is the actual cost you are trying to remove.
Data migration is part of delivery. At scoping we take a sample of your current container spreadsheet, customer site list and rate card, and agree a mapping. We then load it into the staging database as part of the UAT build so you are testing against your own containers and customers, not demo records. Anything that will not map cleanly — duplicate asset tags, containers with no known location, historic rates with no start date — comes back to you as a data-quality list before go-live rather than being silently imported.

A made-to-order Odoo configuration package that turns Odoo into a practice-management platform for accounting firms — client onboarding, recurring engagements, deadline tracking, and time-to-invoice built to your workflow. ECOSIRE builds, installs, and supports it after you request a quotation.
A build-to-order Odoo module that runs collection routes, container/skip registries, weighbridge ticket capture and recycling material tracking, then turns each service event into a correctly rated invoice. ECOSIRE scopes, builds, installs and supports it for your Odoo 17.0, 18.0 or 19.0 database.