Files
stock-logistics-warehouse/stock_secondary_unit/models/stock_move.py
2020-01-27 15:26:20 +07:00

48 lines
1.6 KiB
Python

# Copyright 2018 Tecnativa - Sergio Teruel
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
from odoo.tools.float_utils import float_round
class StockSecondaryUnitMixin(models.AbstractModel):
_name = "stock.secondary.unit.mixin"
_description = "Stock Secondary Unit Mixin"
secondary_uom_id = fields.Many2one(
comodel_name="product.secondary.unit", string="Second unit"
)
secondary_uom_qty = fields.Float(
string="Secondary Qty", digits="Product Unit of Measure"
)
class StockMove(models.Model):
_inherit = ["stock.move", "stock.secondary.unit.mixin"]
_name = "stock.move"
def _merge_moves_fields(self):
res = super()._merge_moves_fields()
res["secondary_uom_qty"] = self[-1:].secondary_uom_qty
return res
class StockMoveLine(models.Model):
_inherit = ["stock.move.line", "stock.secondary.unit.mixin"]
_name = "stock.move.line"
@api.model
def create(self, vals):
move = self.env["stock.move"].browse(vals.get("move_id", False))
if move.secondary_uom_id:
uom = self.env["uom.uom"].browse(vals["product_uom_id"])
factor = move.secondary_uom_id.factor * uom.factor
move_line_qty = vals.get("product_uom_qty", vals.get("qty_done", 0.0))
qty = float_round(
move_line_qty / (factor or 1.0),
precision_rounding=move.secondary_uom_id.uom_id.rounding,
)
vals.update(
{"secondary_uom_qty": qty, "secondary_uom_id": move.secondary_uom_id.id}
)
return super().create(vals)