You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

33 lines
1.6 KiB

# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class SalesOrder(models.Model):
_inherit = 'sale.order'
delivery_status = fields.Selection(selection=[
('nothing', 'Nothing to Deliver'), ('to_deliver', 'To Deliver'),
('partial', 'Partially Deliver'), ('delivered', 'Delivered'),
('processing', 'Processing')
], string='Delivery Status', compute='_compute_delivery_status', store=True,
readonly=True, copy=False, default='nothing')
@api.depends('state', 'order_line.qty_delivered')
def _compute_delivery_status(self):
for rec in self:
pickings = self.env['stock.picking'].search([('sale_id', '=', rec.id)])
orderlines = rec.mapped('order_line').filtered(lambda x:x.product_id.type != 'service')
service_orderlines = rec.mapped('order_line').filtered(lambda x:x.product_id.type == 'service')
if not pickings and not service_orderlines:
rec.delivery_status = 'nothing'
elif all(o.qty_delivered == 0 for o in orderlines):
rec.delivery_status = 'to_deliver'
elif orderlines.filtered(lambda x: x.qty_delivered < x.product_uom_qty):
rec.delivery_status = 'partial'
elif all(o.qty_delivered == o.product_uom_qty for o in orderlines):
rec.delivery_status = 'delivered'
elif any(p.state in ('waiting', 'confirmed') for p in pickings):
rec.delivery_status = 'processing'
if not orderlines and service_orderlines and rec.state == 'sale':
rec.delivery_status = 'delivered'