[IMP] ADD picking_status on sale order

This commit is contained in:
Mourad
2019-09-09 15:37:38 +02:00
parent e220da006f
commit 30334e617d
2 changed files with 68 additions and 1 deletions

View File

@@ -2,7 +2,7 @@
# @author Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields
from odoo import models, fields, api
class SaleOrder(models.Model):
@@ -10,3 +10,35 @@ class SaleOrder(models.Model):
warehouse_id = fields.Many2one(track_visibility='onchange')
incoterm = fields.Many2one(track_visibility='onchange')
picking_status = fields.Selection([
('deliverd', 'Fully deliverd'),
('partialy delivered', 'Partialy Delivered'),
('to deliver', 'To Deliver'),
('no', 'Nothing to Deliver')
], string='Picking Status', compute='_get_delivered', store=True, readonly=True)
@api.depends('state', 'picking_ids.state')
def _get_delivered(self):
"""
Compute the picking status for the SO. Possible statuses:
- no: if the SO is not in status 'sale' or 'done', we consider that there is nothing to
deliver. This is also the default value if the conditions of no other status is met.
- delivered: if all pickings are done.
- Partialy Done : If at least one picking is done.
- To deliver : if all pickings are in confirmed, assigned or waiting state.
"""
for order in self:
if order.state not in ('sale', 'done') or not order.picking_ids:
picking_status = 'no'
elif all(picking.state == 'done' for picking in order.picking_ids):
picking_status = 'deliverd'
elif any(picking.state == 'done' for picking in order.picking_ids):
picking_status = 'partialy delivered'
elif all(picking.state in ('confirmed', 'assigned', 'waiting') for picking in order.picking_ids):
picking_status = 'to deliver'
else:
picking_status = 'no'
order.picking_status = picking_status

View File

@@ -30,4 +30,39 @@
</field>
</record>
<record id="view_order_form" model="ir.ui.view">
<field name="name">sale_stock_usability.order.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<field name="pricelist_id" position="after">
<field name="picking_status"/>
</field>
</field>
</record>
<record id="view_order_tree" model="ir.ui.view">
<field name="name">sale_stock_usability.order.tree</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_tree"/>
<field name="arch" type="xml">
<field name="invoice_status" position="after">
<field name="picking_status"/>
</field>
</field>
</record>
<record id="view_sales_order_filter" model="ir.ui.view">
<field name="name">sale_stock_usability.order.search</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_sales_order_filter"/>
<field name="arch" type="xml">
<filter name="order_month" position="after">
<filter string="To Deliver" name="to_deliver"
domain="['|', ('picking_status','=','to deliver'), ('picking_status','=','partialy delivered')]"/>
<filter string="Fully deliverd" name="fully_deliverd" domain="[('picking_status','=','deliverd')]"/>
</filter>
</field>
</record>
</odoo>