I've been working on a MRP system to handle parts and BOM for electronic manufacturing.
Each bomline is related to a part, but when I save the bomline in a bom, all the bomlines point to part #1. If I edit and save a bomline, the line gets deleted.
Here are the related classes:
Bom:
class bom(models.Model):
_name = 'components.bom'
_rec_name = 'resultingpart'
lines = fields.One2many('components.bomline', 'partnumber', 'Items', ondelete='cascade')
partcount = fields.Integer(compute='_compute_part_count', string="Part Count")
resultingpart = fields.Many2one('components.part', 'Resulting Part', ondelete='no action')
description = fields.Text()
@api.one
def _compute_part_count(self):
self.partcount = 0
Bomline:
class bomline(models.Model):
_name = 'components.bomline'
name = fields.Char(string="Part Identifier", required=True)
partnumber = fields.Many2one('components.part', string="Part Number", relation='line2part')
description = fields.Text(string="Description", related='partnumber.description', readonly=True)
Part:
class part(models.Model):
_name = 'components.part'
_rec_name = 'part_number'
part_id = fields.Integer(string="ID", required=True)
part_number = fields.Char(compute='_compute_part_name', string="Part Number")
description = fields.Text()
part_type = fields.Many2one('components.part_type', 'Type', ondelete='no action')
manufacturer_part = fields.Many2many('components.manufacturer_part', string="Manufacturer Part Number")
@api.one
def _compute_part_name(self):
self.part_number = "GSS-P" + str(self.part_id).zfill(6)
def getNext(self, cr, uid):
recs = self.pool.get("components.part").search(cr, uid, [])
if recs:
next = 0
for rec in recs:
part_rec = self.browse(cr, uid, rec)
next = max(next, part_rec.part_id)
return next + 1
else:
return 1
_defaults = {'part_id': lambda self, cr, uid, context: self.getNext(cr, uid),}