1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
from odoo import models, fields, tools, api
class ProductMonitoring(models.Model):
_name = 'product.monitoring'
_auto = False
_rec_name = 'product_id'
id = fields.Integer()
product_id = fields.Many2one('product.product', string='Product')
outgoing_qty = fields.Float(string="Outgoing", related='product_id.outgoing_qty')
incoming_qty = fields.Float(string="Incoming", related='product_id.incoming_qty')
qty_available = fields.Float(string="On Hand", related='product_id.qty_available')
qty_upcoming = fields.Float(string="Upcoming", related='product_id.qty_upcoming')
status_stock = fields.Selection([
('outgoing_gt_stock', 'Outgoing > Stock'),
('outgoing_lt_stock', 'Outgoing < Stock'),
], string="Status Stock", compute='_compute_status_stock')
def _compute_status_stock(self):
for product in self:
product.status_stock = 'outgoing_lt_stock' if product.outgoing_qty <= product.qty_upcoming else 'outgoing_gt_stock'
def init(self):
tools.drop_view_if_exists(self.env.cr, self._table)
self.env.cr.execute("""
CREATE OR REPLACE VIEW %s AS (
SELECT
sm.product_id AS id,
sm.product_id AS product_id
FROM stock_move sm
LEFT JOIN stock_picking sp ON sm.picking_id = sp.id
WHERE sp.state NOT IN ('cancel', 'done') AND sm.product_id IS NOT null
GROUP BY sm.product_id
)
""" % self._table)
|