from odoo import fields, models, api, tools import logging _logger = logging.getLogger(__name__) class SaleMonitoringDetailV2(models.Model): _name = 'sale.monitoring.detail.v2' _auto = False _rec_name = 'sale_order_id' id = fields.Integer() sale_order_id = fields.Many2one("sale.order", string="Sale Order") partner_id = fields.Many2one("res.partner", string="Customer") user_id = fields.Many2one("res.users", string="Salesperson") product_id = fields.Many2one("product.product", string="Product") qty_so = fields.Integer(string="Qty SO") qty_po = fields.Integer(string="Qty PO") qty_po_received = fields.Integer(string="Qty PO Received") qty_so_delivered = fields.Integer(string="Qty SO Delivered") qty_so_invoiced = fields.Integer(string="Qty SO Invoiced") date_order = fields.Datetime(string="Date Order") status = fields.Char(string="Status") qty_reserved = fields.Integer(string="Qty Reserved") note = fields.Char(string="Note") def init(self): tools.drop_view_if_exists(self.env.cr, self._table) self.env.cr.execute(""" CREATE OR REPLACE VIEW %s AS ( SELECT *, CASE when qty_so_delivered = qty_so then 'Delivered' when qty_reserved >= qty_so then 'Siap kirim' when qty_po + qty_reserved - qty_po_received < qty_so then 'Belum/Kurang PO' when qty_po_received = 0 then 'Belum terima' when qty_po_received < qty_po then 'Terima sebagian' when qty_so_invoiced = qty_so then 'Invoiced' END AS status FROM ( SELECT sol.id AS id, so.id AS sale_order_id, so.partner_id as partner_id, so.user_id, p.id AS product_id, sol.product_uom_qty AS qty_so, sol.qty_delivered AS qty_so_delivered, get_qty_to_delivered(sol.id) as qty_to_delivered, sol.qty_invoiced AS qty_so_invoiced, so.date_order AS date_order, get_qty_po_matches_so(so.id, sol.product_id) AS qty_po, get_qty_received(so.id, sol.product_id) AS qty_po_received, get_qty_reserved(so.id, sol.product_id) as qty_reserved, sol.note_procurement as note FROM sale_order so JOIN sale_order_line sol ON sol.order_id = so.id JOIN product_product p ON p.id = sol.product_id JOIN product_template pt ON pt.id = p.product_tmpl_id WHERE pt.type IN ('consu','product') AND so.state IN ('sale','done') AND so.create_date >= '2022-08-10' and so.so_status not in('terproses') ) a ) """ % self._table)