From 074f7e6c0190c1ae5e08db6db0dd3f4f3e28e941 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Fri, 5 Jul 2024 15:08:02 +0700 Subject: change request --- indoteknik_custom/models/shipment_group.py | 55 +++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 16 deletions(-) (limited to 'indoteknik_custom/models/shipment_group.py') diff --git a/indoteknik_custom/models/shipment_group.py b/indoteknik_custom/models/shipment_group.py index bc593437..92f76db7 100644 --- a/indoteknik_custom/models/shipment_group.py +++ b/indoteknik_custom/models/shipment_group.py @@ -13,6 +13,7 @@ class ShipmentGroup(models.Model): number = fields.Char(string='Document No', index=True, copy=False, readonly=True, tracking=True) shipment_line = fields.One2many('shipment.group.line', 'shipment_id', string='Shipment Group Lines', auto_join=True) + partner_id = fields.Many2one('res.partner', string='Customer') @api.model def create(self, vals): @@ -29,30 +30,52 @@ class ShipmentGroupLine(models.Model): partner_id = fields.Many2one('res.partner', string='Customer') picking_id = fields.Many2one('stock.picking', string='Picking') sale_id = fields.Many2one('sale.order', string='Sale Order') - state = fields.Char(string='Status', readonly=True, compute='_get_state') + state = fields.Char(string='Status', readonly=True, compute='_compute_state') - def _get_state(self): + @api.depends('picking_id.state') + def _compute_state(self): for rec in self: - if rec.picking_id.state == 'assigned': - rec.state = 'Ready' - elif rec.picking_id.state == 'done': - rec.state = 'Done' - elif rec.picking_id.state == 'cancel': - rec.state = 'Cancelled' - elif rec.picking_id.state == 'confirmed': - rec.state = 'Waiting' - elif rec.picking_id.state == 'waiting': - rec.state = 'Waiting Another Operation' + if rec.picking_id: + if rec.picking_id.state == 'assigned': + rec.state = 'Ready' + elif rec.picking_id.state == 'done': + rec.state = 'Done' + elif rec.picking_id.state == 'cancel': + rec.state = 'Cancelled' + elif rec.picking_id.state == 'confirmed': + rec.state = 'Waiting' + elif rec.picking_id.state == 'waiting': + rec.state = 'Waiting Another Operation' + else: + rec.state = 'draft' else: rec.state = 'draft' @api.onchange('picking_id') def onchange_picking_id(self): - picking = self.env['stock.picking'].search([('id', '=', self.picking_id.id)], limit=1) + if self.picking_id: + picking = self.env['stock.picking'].browse(self.picking_id.id) + + if self.shipment_id.partner_id and self.shipment_id.partner_id != picking.partner_id: + raise UserError('Partner must be same as shipment group') + + self.partner_id = picking.partner_id - self.partner_id = picking.partner_id + if not self.shipment_id.partner_id: + self.shipment_id.partner_id = picking.partner_id - self.state = picking.state + self.sale_id = picking.sale_id + + @api.model + def create(self, vals): + record = super(ShipmentGroupLine, self).create(vals) + if record.picking_id: + record.onchange_picking_id() + return record - self.sale_id = picking.sale_id + def write(self, vals): + res = super(ShipmentGroupLine, self).write(vals) + if 'picking_id' in vals: + self.onchange_picking_id() + return res -- cgit v1.2.3