# Laundry & Dry Cleaning Management

> Laundry and dry cleaning: a tag on every garment, a care label the machine respects, a bag that cannot go home short, and a clear compensation rule.

- **What it is:** Laundry and dry cleaning: a tag on every garment, a care label the machine respects, a bag that cannot go home short, and a clear compensation rule.
- **For:** Industries
- **Odoo versions:** 16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
- **Runs on:** Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
- **Price:** 129 EUR, one-time, on the Odoo Apps Store
- **Technical name:** bambooforge_laundry
- **Not for:** Said before you buy, because it is the half that decides whether the app fits:; Put a garment into the shop uninspected, or into a machine that does the wrong process.; Book a garment for a service its care label does not allow.
- **Manual:** https://docs.bambooforge.dev/bambooforge_laundry/
- **Live demo:** https://demo20.bambooforge.dev/odoo/action-bambooforge_laundry.action_bf_laundry_ticket
- **Store page:** https://apps.odoo.com/apps/modules/20.0/bambooforge_laundry
- **Manual last updated:** 2026-09-21

---
# Laundry & Dry Cleaning Management

Built around the four arguments every shop has at the counter.

## "That mark was already there"

- Every garment is **inspected at intake** with the customer standing
  there, and what was found is written on the garment record.
- A ticket **cannot go into the shop** while any garment on it is
  uninspected, and an uninspected garment cannot go into a machine.
- The customer's **declared value** is asked for at the counter, not
  after the garment is ruined. It is the ceiling on any compensation.

## "You washed a dry-clean-only coat"

- The **care label is a rule**. A garment cannot be booked for a service
  its label does not allow - dry-clean-only takes dry cleaning, pressing
  or a repair, and nothing else.
- A garment cannot go into a **machine that does the wrong process**. A
  washer takes wash work; the dry-cleaning machine takes dry-cleaning
  work.
- Garments go into a load through **Add garments** on the load, which
  offers only what may legally go in that machine - and the same
  refusals hold on every other route in, including writing the load
  onto the garment by hand or swapping the machine under a full drum.
- Once a garment is in a load its **service, care label, colour and
  inspection stop moving**, so the record and the drum cannot end up
  saying different things.
- A **whites load refuses a dark garment** and a darks load refuses a
  white one, before the drum turns rather than after a shirt comes out
  pink.
- An **overloaded machine** is flagged: a drum past its capacity does
  not clean, and the garments come back grey.

## "I gave you five shirts"

- Every garment is a **record with a tag**, unique in the shop.
- A bag **cannot be handed over** while anything on the ticket is
  unfinished - counted again at the door, off the garments themselves.
  The count in is the count out.
- Garments are **added and removed at the counter**, while the bag is
  still being booked in. Once it is in the shop nothing is added to the
  ticket and nothing is deleted from it.
- A missing garment has to be **written off explicitly** as lost, which
  takes it off the bill and puts a claim behind it. Nothing disappears
  quietly.
- A garment moves through **its buttons** - inspected, ready, written
  off - so what happened to it is a record rather than an edit, and a
  garment that has gone home is not editable at all. A correction is a
  note.

## "You said you'd look after me"

- The compensation policy is **arithmetic**: a multiple of the cleaning
  charge, capped, and never above the value the customer declared.
- The figures it is worked out from are **frozen when the bag goes into
  the shop**: the price, the declared value and the marks stop being
  editable, and the claim keeps its own copy of them. A compensation
  base that can be raised after the garment is lost is a compensation
  base nobody can defend.
- An offer **above the policy needs a manager** - to offer it, to write
  it, and to settle it - and is recorded as above the policy either
  way.
- **One garment, one claim.** A second live claim on the same shirt is
  refused, and a claim for a lost garment needs the garment written off
  first.
- A claim carries the **machine load** the garment was in, which is
  usually the answer to how it happened.

## Money and collection

- **Nothing leaves unpaid.** The balance is read again at the door and
  settled at the counter before the bag goes out of it.
- What the counter **actually took** is recorded as a figure, not as a
  tick. Storage that runs up after the money was taken is still owed,
  and the balance says so.
- Unless the customer is **on account** - a hotel, a restaurant, a gym -
  in which case the bag leaves on a signature and the work is invoiced.
  Who is on account is the **manager's decision**, and the ticket keeps
  the answer it was booked under.
- **Who took the bag** is written down, with how many garments went with
  them. It is not always the customer, and it is the one thing nobody
  records.
- A deposit taken at drop-off comes off the balance. A deposit **bigger
  than the bill**, or a bag cancelled after money was taken, is flagged
  as a refund rather than left as a negative.
- The invoice is raised **once the bag has gone home**, so the storage
  that ran up while it sat there is on it.

## Uncollected bags

- A daily job picks up bags finished more than the free storage period
  ago: the customer is **written to once**, the date is recorded, and
  **storage is charged from that date** - not from a date the shop
  never wrote to anybody about.
- Every company is swept with **its own free period**, and the call
  lands on the person who booked the bag in rather than on the job
  scheduler.
- Storage is **worked out when it is asked for**, so a bag that has been
  on the rail for six weeks shows six weeks of storage without anybody
  having to touch the ticket first.
- That date is what a disposal has to be able to show later. A shop
  that cannot produce it is disposing of somebody else's property.

## Roles

- **Counter and shop floor** - books bags in, inspects garments, runs
  machines, hands bags over, opens claims. Cannot change the price
  list, delete a ticket, put a customer on account, or offer or settle
  a claim above the policy.
- **Shop manager** - sets services, machines and the compensation
  policy, decides who is an account customer, invoices them, and
  settles what is above the policy.

## Installation

1. Copy `bambooforge_laundry` into your addons path and update the app list, or install the ZIP from the Odoo Apps Store. Community only; it depends on `base`, `base_setup`, `mail`, `product` and `account`.
2. Install **Laundry & Dry Cleaning Management**.
3. Set up the services first: process, turnaround, price.
4. Set up the machines with their real capacity.
5. Set the four numbers under Settings: free storage days, storage per day, the compensation multiple and the cap.
6. Mark your trade customers as account customers on their contact record before their first bag.

## How we make sure it works

Before every release, **137 automated checks** run against this app on Odoo 16, 17, 18, 19 and 20.
Among them:

- A dry clean only garment cannot be booked for a wash.
- A garment is not deleted once the bag is in the shop.
- The price is not raised once the bag is in the shop.
- A bag that is not ready cannot be handed over.
- A hand wash garment cannot go through a machine wash.

The complete list is in the source you receive.

## What it does not do

Said before you buy, because it is the half that decides whether the app fits:

- Put a garment into the shop uninspected, or into a machine that does the wrong process.
- Book a garment for a service its care label does not allow.

## Questions people ask

****Which Odoo versions does it run on?****

Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing.

****Community or Enterprise?****

Both. It needs no Enterprise app.

****What does it need?****

The standard Discuss, Invoicing, Products, Settings apps. No extra Python package.

****Where does it show up?****

Under the **Laundry** menu (Tickets, Garments, Machine loads, Claims).

****Does anything leave my server?****

No. It makes no call outside your Odoo server: no telemetry, no licence check, no third-party service.

****What happens if I uninstall it?****

Odoo drops the app's own tables and fields; the standard records it worked on (contacts, orders, products) stay as they are.

## Support

[support@bambooforge.dev](mailto:support@bambooforge.dev)
