I have calculated 2 fields with my method. it calculates the number of products that are assigned.
class ProductProduct(models.Model):
_inherit = 'product.product'
planned_qty_cust = fields.Float(compute='_calculate_planned_qty', string='Planned Qty Customer', )
planned_qty_supl = fields.Float(compute='_calculate_planned_qty', string='Planned Qty Suplier', )
@api.multi
def _calculate_planned_qty(self):
for product in self:
stock_move_obj = self.env['stock.move']
domain = [('product_id', '=', product.id),
('state', 'not in', ['cancel', 'done','draft']),
('location_dest_id.usage', '=', 'customer'),
]
stock_moves_cust = stock_move_obj.search(domain)
qty = sum(stock_moves_cust.mapped('product_uom_qty'))
product.planned_qty_cust = qty
domain2 = [('product_id', '=', product.id),
('state', 'not in', ['cancel', 'done', 'draft']),
('location_dest_id.usage', '=', 'supplier'),
]
stock_moves_cust = stock_move_obj.search(domain2)
qty = sum(stock_moves_cust.mapped('product_uom_qty'))
product.planned_qty_supl = qty
the thing is that I need to filter on these fields, and probably I need to create search function but it's kinda complicated.
maybe someone can help me with this how this method should look, or maybe there is already a module for this type of calculation?
This is how I managed to solve this problem
planned_qty_cust = fields.Float(
compute='_calculate_planned_qty',
string='Planned Qty Customer',
search='_search_name_qty_cust',
)
planned_qty_supl = fields.Float(
compute='_calculate_planned_qty', string='Planned Qty Suplier',
search='_search_name_qty_sup',
)
def _calc_planned_qty(self, domain, operator, value):
move_data = self.env['stock.move'].read_group(
[
('product_uom_qty', operator, value),
('state', 'not in', ['cancel', 'done', 'draft']),
domain,
],
['product_id'],
['product_id'],
)
res = [data['product_id'][0] for data in move_data]
return res
def _search_name_qty_cust(self, operator, value):
domain = ('location_dest_id.usage', '=', 'customer')
res = self._calc_planned_qty(domain,operator,value)
return [('id', 'in', res)]
def _search_name_qty_sup(self, operator, value):
domain = ('location_dest_id.usage', '=', 'supplier')
res = self._calc_planned_qty(domain, operator, value)
return [('id', 'in', res)]