Skip to main content

Laundry Operations

Laundry Operations tracks garment custody from counted intake to final collection or acknowledged exception. It uses native Odoo service quotations and invoices for billing. Garments are customer property described by intake tags; this addon does not replace Odoo Sales, Invoicing or POS.

Installation and edition​

Install corvus_laundry_operations on Odoo 20. Dependencies are sale_management, account and mail. No external service, paid device connection or extra Python package is required. Tested on Odoo 20 Enterprise, including installation with and without demo data and focused workflow checks. Community edition has not been qualified.

Normal installation supplies intake, garment-tag and batch sequences, two editable service routes and native service products. Optional demos add fictional customers and custody cases. Use demos in a demonstration database. The sample garment image is labeled as an original reference illustration, not a real customer photograph.

Roles and companies​

Laundry Operator staff receive garments, allocate and split batches, advance washing/pressing/inspection, request rewash and record ready collections or rejected returns.

Laundry Manager staff additionally configure services, declare damage or loss, record exception dispositions, recover garments for inspection, reverse mistakes, reopen settled custody and use billing actions. This role includes native Sales access to all documents within allowed companies and native Invoicing access. Assign it deliberately. Server checks enforce these distinctions.

Orders, garments, batches, collection events and wizards are restricted to allowed companies. Each child retains its intake company. Services may be shared or company-specific. Choose the intake company before adding garments; assignees must belong to that company.

Configure service routes​

Open Laundry → Service Routes. Wash and Press and Press Only are supplied. Every route finishes with inspection. Set whether washing and pressing are required, treatment instructions and the native service product.

Review native product prices, taxes, currencies, income accounts and company accounting setup before real use. Initial service prices are editable examples in the native product currency. The normal products invoice ordered quantities. A used service cannot change billing product or company; create another route for a different service identity. Each new batch snapshots its route, so later configuration edits do not rewrite existing work.

Receive and tag garments​

Create an Intake Order with customer, promised date/time and responsible operator. Times display in the user's timezone. Add a line for each garment or intentional group of identical garments:

  • Description, colour and identifying marks.
  • Service and whole Received quantity.
  • Rejected quantity and a required reason when processing is unsuitable.
  • Condition/stain notes, care-label observations and an optional image through Condition and Photo.

Each line receives a unique garment tag. Use quantity one for individual tracking. A grouped line receives one reference tag stating the group's quantity; it does not receive an extra serial for every piece.

Received quantity includes rejected garments physically handed to the desk. Those pieces stay in custody until a Rejected Return is recorded. They cannot enter processing and are excluded from the generated service quotation.

Choose Receive Garments after checking the physical count. Garment quantities, service, condition evidence, customer and tag are then frozen. Cancel a draft if needed. For garments arriving later, create another intake rather than changing the original count.

Allocate, process and split​

Use Allocate beside a received garment tag. Enter a quantity within its unallocated accepted pieces and assign washing, pressing and inspection staff. Several batches can share the original tag. Their total cannot exceed its accepted quantity.

Open Processing Batches or the intake's smart button. Start Processing follows the configured route; finish washing and pressing where required, then inspect. Pass Inspection makes the whole batch ready for collection.

For a partial result, enter Split Quantity on the Split and Route tab and choose Split These Pieces. Leave at least one piece in the original. The child keeps the tag, stage, route, assignments and rewash count; the original loses exactly that quantity. Splitting adds no received pieces or sales charges.

An original unstarted queued batch can be deleted, releasing its quantity back to unallocated. Split children and started batches retain their history.

Inspect and rewash​

At Inspection, pass the batch or use Reprocess / Rewash with a reason. It follows the same configured route again and increments its cycle count. Press-only work returns to pressing. Rewash retains the original pieces and tag and does not automatically bill again.

For mixed outcomes, split first. For example, split two stained shirts from a six-piece inspection batch. Pass four and rewash two. Their total remains six.

Partial collections, damage and loss​

Choose Record Collection, select the tag, disposition and quantity, and enter the collector or acknowledgment name.

  • Ready Collection: returns inspected pieces within the current ready balance.
  • Rejected Return: returns pieces rejected at intake.
  • Damaged Return: returns manager-declared damaged pieces; requires manager access and an explanation.
  • Loss Acknowledgment: accounts for manager-declared lost pieces; requires manager access and an explanation. This is not a physical return.

Declare damage or loss while a batch is washing, pressing or being inspected. Split affected pieces first where necessary, enter the exception explanation, then use the manager action. Completed ready batches retain their inspection outcome.

A manager may Recover to Inspection a damaged or lost batch still awaiting disposition, with an explanation. If a disposition was mistakenly recorded, reverse it first. Garments genuinely returned by the customer after an earlier valid collection need a new intake. Never reverse a true old collection to disguise new custody.

Exception actions do not create payments, compensation, refunds or customer waivers. Review commercial adjustments separately in native Sales and Accounting.

Worked example and reconciliation​

Receive ten matching cotton shirts under one tag. Allocate six and four. Process and pass six. The other four fail collar-stain inspection; record a reason and rewash them.

The customer collects three ready shirts. The intake shows Received 10, Ready 3, Returned 3 and Outstanding 7: four are processing and three await collection. When the rewashed four pass, Ready becomes seven. Collect those seven and Settle Custody. Original intake stays ten despite the repeated processing.

The fictional Harbour House demo shows this partial state. Westport Workshop shows rejected returns, one pending damaged return and an acknowledged loss. Willow Studio is fully collected and settled, with a draft native quotation.

For every tag, Received = physical returns + acknowledged losses + outstanding custody. Accepted is received minus rejected. Unallocated is accepted minus assigned batches. Ready, damage pending and loss pending subtract their corresponding non-reversed dispositions. Rewash changes stage and cycle count, never original quantity. Physical returns include good, rejected and damaged returns, but exclude losses.

Settle Custody requires zero outstanding and zero unallocated pieces. It does not prove payment. Custody and billing have separate lifecycles. The register and promise calendar help find active orders, ready work, exceptions and planned dates.

Native service billing​

A manager uses Create / Open Native Quotation on the Service Billing tab. The first click creates one draft sale order, with a service line for each accepted tag and its accepted quantity. Later clicks open that same document. Rejected pieces are excluded; rewash adds no sales line.

Native service pricing, pricelists and taxes apply. Review charges, quantities and exceptions in Sales, and confirm the quotation there. The laundry app never confirms automatically. Damage or loss never silently changes a bill.

After confirmation, Create / Open Draft Invoice calls the native sales invoicing method. It creates a draft only when no active customer invoice exists and opens existing invoices on repeat use. It never posts an invoice or collects payment. A cancelled invoice may be replaced if native invoiceability permits.

Use native Sales directly for deposits, incremental invoices, refunds and complex commercial changes; the laundry shortcut opens existing invoices rather than creating another active one. A cancelled quotation stays linked and is not silently replaced. Correct it through native Sales where permitted. No accepted pieces means there is no service quotation to create.

Reports​

The Print menu includes:

  • Laundry Intake Receipt: tags, descriptions, condition notes, received/rejected counts and promise time.
  • Laundry Garment Tags: one identification panel per tagged group, including its quantity and service.
  • Laundry Collection Summary: physical returns, acknowledged losses, outstanding balances and event history, including reversals.

Native HTML report rendering has been verified on the tested Odoo 20 Enterprise target. PDF generation requires a working Odoo server PDF engine; server PDF output has not been qualified on this target. Tags are not a calibrated printer layout, barcode device protocol or treatment certificate. Photos use native image/model access; contextual files may also be attached to intake chatter.

Corrections​

Edit draft details before receipt. Received intake facts are frozen; keep explanatory chatter and create a new intake for new physical custody.

To correct a collection or disposition, a manager opens its event from Collections and Exceptions, enters Reversal Reason and chooses Reverse Incorrect Event. The original remains marked reversed and its quantity becomes available/outstanding again. Record the correct event separately. Reversal cannot be repeated.

For a settled order, enter Correction Reason and Reopen for Correction first. Reopening alone changes no counts. Do not reverse a correctly recorded physical handover because the customer later brings garments back.

Troubleshooting and boundaries​

  • Excess batch quantity: refresh the intake and use only its unallocated accepted pieces.
  • Wrong processing step: use the action for the current stage; finished batches retain evidence.
  • Mixed inspection results: split the nonterminal batch before passing, rewash, damage or loss.
  • Rejected collection quantity: check both the selected tag and its current disposition balance.
  • Cannot settle: process unallocated accepted pieces and account for every held or lost piece.
  • Missing exception/billing buttons: ask for the manager role where appropriate.
  • Invoice not available: confirm native Sales first and review invoiceable lines, product invoicing policy and accounting configuration.
  • Company mismatch: select company-compatible customers, assignees and services.

This version tracks whole pieces and grouped tags. It excludes POS replacement, paid devices, automatic customer messages, weight-based billing, treatment guarantees, delivery routing, automatic compensation and payment reconciliation. Each garment line supports one native image; use intake attachments for additional evidence.

Upgrades, support and license​

Sequences, supplied products and service defaults use Odoo's upgrade-preserving data settings. Back up the database and filestore before a normal module upgrade, then verify your configuration and retained business history. Keep completed history instead of deleting it to change a count.

Corvus Nexus Technologies LTD — https://corvusnexus.com. Contact support@corvusnexus.com with the Odoo version, intake/tag reference and reproducible steps. Do not send credentials or customer photos without appropriate permission. Licensed under Odoo Proprietary License v1.0 (OPL-1).

Availability​

This guide covers the Odoo 20 package. Older-version packages are not part of this release.

Browse the Corvus Odoo Apps catalogue.