from odoo import models, api, fields from odoo.exceptions import AccessError, UserError, ValidationError from datetime import timedelta, date import logging _logger = logging.getLogger(__name__) class ShipmentGroup(models.Model): _name = "shipment.group" _description = "Shipment Group" _inherit = ['mail.thread'] _rec_name = 'number' 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) @api.model def create(self, vals): vals['number'] = self.env['ir.sequence'].next_by_code('shipment.group') or '0' result = super(ShipmentGroup, self).create(vals) return result class ShipmentGroupLine(models.Model): _name = 'shipment.group.line' _description = 'Shipment Group Line' _order = 'shipment_id, id' shipment_id = fields.Many2one('shipment.group', string='Shipment Ref', required=True, ondelete='cascade', index=True, copy=False) 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') def _get_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' 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) self.partner_id = picking.partner_id self.state = picking.state self.sale_id = picking.sale_id