Files
suite/product_catch_weight/models/stock.py

65 lines
2.8 KiB
Python

from odoo import api, fields, models
class StockProductionLot(models.Model):
_inherit = 'stock.production.lot'
catch_weight_ratio = fields.Float(string='Catch Weight Ratio', digits=(10, 6), compute='_compute_catch_weight_ratio')
catch_weight = fields.Float(string='Catch Weight', digits=(10, 4))
catch_weight_uom_id = fields.Many2one('product.uom', related='product_id.catch_weight_uom_id')
@api.depends('catch_weight')
def _compute_catch_weight_ratio(self):
for lot in self:
if not lot.catch_weight_uom_id:
lot.catch_weight_ratio = 1.0
else:
lot.catch_weight_ratio = lot.catch_weight_uom_id._compute_quantity(lot.catch_weight,
lot.product_id.uom_id,
rounding_method='DOWN')
class StockMove(models.Model):
_inherit = 'stock.move'
product_catch_weight_uom_id = fields.Many2one('product.uom', related="product_id.catch_weight_uom_id")
def _prepare_move_line_vals(self, quantity=None, reserved_quant=None):
vals = super(StockMove, self)._prepare_move_line_vals(quantity=quantity, reserved_quant=reserved_quant)
vals['catch_weight_uom_id'] = self.product_catch_weight_uom_id.id if self.product_catch_weight_uom_id else False
return vals
def action_show_details(self):
action = super(StockMove, self).action_show_details()
action['context']['show_catch_weight'] = bool(self.product_id.catch_weight_uom_id)
return action
class StockMoveLine(models.Model):
_inherit = 'stock.move.line'
catch_weight_ratio = fields.Float(string='Catch Weight Ratio', digits=(10, 6), default=1.0)
catch_weight = fields.Float(string='Catch Weight', digits=(10,4))
catch_weight_uom_id = fields.Many2one('product.uom', string='Catch Weight UOM')
lot_catch_weight = fields.Float(related='lot_id.catch_weight')
lot_catch_weight_uom_id = fields.Many2one('product.uom', related='product_id.catch_weight_uom_id')
class StockPicking(models.Model):
_inherit = 'stock.picking'
has_catch_weight = fields.Boolean(string="Has Catch Weight", compute='_compute_has_catch_weight', store=True)
@api.depends('move_lines.product_catch_weight_uom_id')
def _compute_has_catch_weight(self):
for picking in self:
picking.has_catch_weight = any(picking.mapped('move_lines.product_catch_weight_uom_id'))
class StockQuant(models.Model):
_inherit = 'stock.quant'
lot_catch_weight_ratio = fields.Float(related='lot_id.catch_weight_ratio')
lot_catch_weight = fields.Float(related='lot_id.catch_weight')
lot_catch_weight_uom_id = fields.Many2one('product.uom', related='lot_id.catch_weight_uom_id')