Manufacturing India Odoo 19 Live in production

Jewellery Jobwork Billing: From a Fixed-Column Sheet to Odoo

A live Odoo system for Visaman Jewels, a B2B jewellery manufacturer and jobwork house in Surat: packing-list bills with any number of named charges per item, clear ownership of metal, diamond and stone, and a printed bill in the format its customers already read.

Any number
of charges per item — the old sheet had room for three
Every line
shows who supplied metal & stones — customer or us, per component
Same
printed bill layout — column order customers already read

Executive summary

Visaman Jewels in Surat makes jewellery for other businesses. Many of its customers are jewellers who send their own gold and pay Visaman for the work. Billing these jobs ran on a spreadsheet “packing list / jobwork bill”, and the sheet had reached its limits. I designed and built an Odoo replacement, now live, based on three simple records: the bill, the item, and the charges on that item. It allows any number of named charges per piece, records who supplied each metal and stone, and still prints the bill in the layout Visaman’s customers already know.

The problem

  • Only three charges fitted per item. The sheet had fixed columns, so labour, plating and IGI certification were stacked as unnamed sub-rows. Any extra charge had nowhere to go.
  • Ownership was unclear. It was not obvious on each line whether the metal, diamonds or stones belonged to the customer or to Visaman, which matters for both the price and the stock.
  • Totals were counted by hand. IGI totals and charge reports meant going through bills one by one.
  • Carried balances had no check. Gold, silver and alloy balances and the running closing amount were typed in by hand, with nothing to catch a mistake.

Solution architecture

Data design — jobwork billing
Bill
Packing listone per bill, with carried balances
Per piece
Item lineitem no., design, metal & purity, weights
Per charge
Charge lineany number per item, each with a basis
Charge typesmaster data, added without a developer

Key custom work

  • One item line per piece. Each line holds the item number, design code, metal code with purity, and gross, net and pure weight. Pure weight is worked out as net weight × purity, but stays editable for the cases where the real figure differs.
  • Who supplied it, per component. Metal, diamond and stone each have their own “supplied by Customer / Us” switch. When the customer supplied it, the rate and amount are forced to zero, but the weight is still recorded.
  • Charges as separate lines. Charges are no longer columns. Each item can carry as many charge lines as it needs, and every line has a basis that decides how it is calculated:
BasisTypical use
Per gram of net weight, one-gram minimumLabour
Per carat of diamondIGI certification
Per carat of stoneStone charges
Per piecePer-item work
Fixed amountRepairing, courier, plating
Per gram of gross weightCharges based on full weight
  • New charge types without code. A new charge, such as hallmarking, is added as master data. No developer is needed.
  • Carried balances stay manual, but checked. The closing amount and the gold, silver and alloy balances are still entered by hand, on purpose. Odoo shows this bill’s own total beside them and flags any mismatch. It never overwrites them.
  • The same printed bill, made clearer. The printed packing list keeps the column order customers already read. Every charge row is now named and shows its basis, and the summary separates this bill from the carried position.

Challenges & decisions

Change the data, not the paper. Visaman’s customers already know how to read this bill. Changing its layout would have meant explaining it again to every one of them. So the structure underneath changed completely, while the printout stayed familiar.

Flag, don’t overwrite. The carried balances stay manual on purpose. Instead of replacing them with a calculation, Odoo shows the bill total beside the typed balance and flags any gap. People stay in control, and typing mistakes still get caught.

Checked against real bills. Before trusting the design, I reproduced real bill rows from the old sheet and made sure every formula gave the exact same result. For example, a diamond line of 42,000 × 0.014 × 4 comes to 2,352 on both.

Business impact

AreaBeforeAfter
Charges per itemThree, in fixed columnsAny number, each named
IGI collected per monthCounted by handA report
Metal, diamond & stone ownershipUnclearClear on every line
New charge typesNeeded a sheet redesignAdded as master data
Carried balancesTyped, no checkTyped, checked against the bill
Printed billFamiliar layoutSame layout, every charge named

Lessons learned

  • Columns are a limit; lines are not. Moving charges from columns to their own records removed the “three charges only” problem for good.
  • Respect the document people already trust. Keeping the bill layout the same made the new system an easy change for customers.

Visaman’s customers are not named in this case study.

Delivered by Dhiren Narola — Odoo Architect & AI Automation Engineer. About me · Discuss a similar project

Accepting 3–4 new engagements · Q4 2026

Facing something similar?

Bring the messy version of your situation — the discovery call is where it gets untangled. Written proposal within 3–5 business days after.