feat(fusion_repairs): repair.order reference format -> RO-YYYYMM-NN

Replaced the picking-type default reference (BR-WA/RO/00010) with a
date-based monthly-resetting sequence: RO-202605-01, RO-202605-02, ...
where YYYY is the year and MM is the zero-padded month. The counter
resets to 01 every time the month rolls over.

Implementation:
- New ir.sequence 'fusion.repair.order.monthly' with prefix
  'RO-%(year)s%(month)s-', padding=2, use_date_range=True (Odoo creates
  one ir.sequence.date_range per month, each with its own number_next)
- repair.order.create() override pre-fills vals['name'] with the new
  sequence BEFORE super(), so Odoo's native picking-type sequence
  assignment (which only fires when name is empty / 'New') is bypassed

Verified on local westin-v19: three back-to-back creates produced
RO-202605-01 / -02 / -03. Existing records (pre-upgrade) keep their
old BR-WA/RO/##### references - this only affects repairs created
from this version onward.

Bumped to 19.0.1.0.4.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
gsinghpal
2026-05-20 22:43:29 -04:00
parent cb56a38680
commit 5a5e310a83
3 changed files with 33 additions and 1 deletions

View File

@@ -4,7 +4,7 @@
{
'name': 'Fusion Repairs',
'version': '19.0.1.0.3',
'version': '19.0.1.0.4',
'category': 'Inventory/Repairs',
'summary': 'Guided medical equipment repair intake, dispatch, maintenance, and self-service portal',
'description': """

View File

@@ -23,5 +23,21 @@
<field name="number_increment">1</field>
<field name="company_id" eval="False"/>
</record>
<!-- Date-based repair.order reference: RO-YYYYMM-NN, counter resets monthly.
use_date_range=True so Odoo creates an ir.sequence.date_range record
per month with its own number_next, giving each month a fresh -01.
%(year)s -> 4-digit year, %(month)s -> zero-padded month (per strftime %m). -->
<record id="seq_repair_order_monthly" model="ir.sequence">
<field name="name">Repair Order (RO-YYYYMM-NN)</field>
<field name="code">fusion.repair.order.monthly</field>
<field name="prefix">RO-%(year)s%(month)s-</field>
<field name="suffix"/>
<field name="padding">2</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
<field name="use_date_range" eval="True"/>
<field name="company_id" eval="False"/>
</record>
</data>
</odoo>

View File

@@ -28,6 +28,22 @@ class RepairOrder(models.Model):
_inherit = 'repair.order'
# ------------------------------------------------------------------
# CREATE - replace the picking-type default sequence with our
# date-based RO-YYYYMM-NN reference. We set vals['name'] BEFORE
# super() so Odoo's native create() (which only assigns the picking
# type sequence when name is empty or 'New') skips its own numbering.
# ------------------------------------------------------------------
@api.model_create_multi
def create(self, vals_list):
Sequence = self.env['ir.sequence'].sudo()
for vals in vals_list:
if not vals.get('name') or vals.get('name') == 'New':
next_name = Sequence.next_by_code('fusion.repair.order.monthly')
if next_name:
vals['name'] = next_name
return super().create(vals_list)
# ------------------------------------------------------------------
# INTAKE METADATA
# ------------------------------------------------------------------