A purpose-built ERP for a tile distributor that replaced a patchwork of spreadsheets and disconnected tools with one connected system, cutting order processing time by 70% and giving the operations team accurate numbers for the first time.
Vedi Tutti i Casi di Studio
This is a tile and surface materials distributor supplying ceramic, porcelain, and natural stone to trade buyers, independent retailers, and commercial contractors. Order volumes are high. Each order needs a stock check across multiple warehouses, a pricing lookup specific to the customer account, and a delivery arrangement that depends on order size and destination. The business had been handling all of it for years. The problem was not that anything had failed. The problem was that every system involved was doing its own thing, in isolation, and someone was manually stitching the result together every single day.
Three departments. Three separate tools. Nobody's data matching anyone else's.
Sales would confirm an order and send an email to the warehouse. The warehouse would update their own pick sheet. Finance would raise an invoice from a third system at the end of the day. None of it was automatic. If the warehouse shipped a partial order because one product line was short, finance might not know until the customer rang to query the discrepancy on their invoice. By which point the order had already left the building.
Pricing was a specific headache. The distributor had dozens of trade accounts, each on negotiated rates that had been agreed at different times, stored as individual files on a shared drive. Finding the right rate card for a returning customer took time. Checking whether it was still current took more. A new member of the sales team quoting a long-standing account could easily pull the wrong file, apply an outdated rate, and send a confirmation the business could not honour. It happened. Not every week, but enough to create friction with customers who noticed.
Then there was stock. The figure that appeared in the ordering tool was updated periodically, not in real time. So a buyer could confirm a line item that the warehouse had picked out for a different order two hours earlier. The order went through. The problem surfaced when someone tried to pick it. Average stock accuracy across the operation was around 65%, which means roughly one in three orders involved a line that was either short or unavailable in the quantity sold.
Start to finish, a single order took between 25 and 40 minutes to process.
Tiles IT Solutions built a custom ERP on Odoo, shaped around this distributor's actual workflows rather than a generic out-of-the-box setup.
Order entry was the first thing to fix. Before, a rep opened three tools to process one order. Now they open one. The customer's account pulls up their rate card automatically. Product search shows live stock across every warehouse. As lines go in, the total updates. The rep hits confirm and it is done. The warehouse sees the task appear in their queue before the rep has stood up from their desk. No email, no print run, no gap.
Pricing rules were moved out of the shared drive entirely. Every trade account has its rate card stored as a structured rule inside the ERP, linked to the customer profile. A rep quoting any account sees their correct price without looking anything up. When a rate changes, one person makes one update. Every quote from that point forward reflects it. The problem of the wrong file, the outdated rate, the awkward call: gone.
The hardest part was getting the warehouse right. Not the technology side. The data side. Before go-live, a full physical count ran across every warehouse location. Shelves counted, compared to what the old system said was there, reconciled. The gaps were bigger than expected. That count took eight days. Without it, the ERP would have launched with inaccurate opening stock and replicated every downstream error the team was already dealing with. It was the least glamorous part of the project and the part that made everything else work.
After go-live, pick tasks appear on a live screen in the warehouse the moment an order is confirmed. The team works the queue in order. When a partial shipment happens, it is logged immediately. Finance sees the updated invoice. The customer record reflects the outstanding line. Nothing has to be communicated manually between departments because the system handles it.
Grafana sits on top of the ERP database and gives management a real-time dashboard: queued orders, active picks, short lines, dispatched count. The operations manager used to walk the floor twice a day to get that information. Now it is on a screen at their desk.
Before: A confirmed order sat in a sales inbox until someone emailed the warehouse. The warehouse worked from a shift sheet printed in the morning, which was already out of date by mid-afternoon. Pricing lookups meant finding a file, checking its date, and typing figures manually. Stock numbers were stale. A partial shipment might not reach finance until the customer called to query it. Forty minutes per order, on a good day.
After: One screen, one form, two minutes. The customer account loads with their correct rate. Live stock shows per warehouse. The warehouse queue updates the moment the rep confirms. Partial shipments log automatically and update finance before the truck moves. The ops dashboard shows the full day's position in real time. Eight minutes per order, on average.
Forty minutes per order is not a people problem. It is a process problem. Three tools, multiple manual steps, and a gap between each department where information got lost or went stale. One connected system removes those gaps. The team did not change. The time did.