mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
# Copyright (C) 2021 Open Source Integrators
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
|
|
from odoo import api, models
|
|
|
|
|
|
class StockMove(models.Model):
|
|
_inherit = "stock.move"
|
|
|
|
def _prepare_mrp_raw_material_analytic_line(self):
|
|
"""
|
|
Prepare additional values for Analytic Items created.
|
|
"""
|
|
self.ensure_one()
|
|
move = self
|
|
mrp_order = move.raw_material_production_id
|
|
return {
|
|
"date": move.date,
|
|
"name": "{} / {}".format(mrp_order.name, move.product_id.display_name),
|
|
"ref": mrp_order.name,
|
|
"account_id": mrp_order.analytic_account_id.id,
|
|
"manufacturing_order_id": mrp_order.id,
|
|
"company_id": mrp_order.company_id.id,
|
|
"stock_move_id": move.id,
|
|
"product_id": move.product_id.id,
|
|
"unit_amount": move.quantity_done,
|
|
}
|
|
|
|
def generate_mrp_raw_analytic_line(self):
|
|
"""
|
|
Generate Analytic Lines.
|
|
One Analytic Item for each Stock Move line.
|
|
If the Stock Move is updated, the existing Analytic Item is updated.
|
|
"""
|
|
AnalyticLine = self.env["account.analytic.line"].sudo()
|
|
existing_items = AnalyticLine.search([("stock_move_id", "in", self.ids)])
|
|
for move in self.filtered("raw_material_production_id.analytic_account_id"):
|
|
line_vals = move._prepare_mrp_raw_material_analytic_line()
|
|
if move in existing_items.mapped("stock_move_id"):
|
|
analytic_line = existing_items.filtered(
|
|
lambda x: x.stock_move_id == move
|
|
)
|
|
analytic_line.write(line_vals)
|
|
analytic_line.on_change_unit_amount()
|
|
elif line_vals.get("unit_amount"):
|
|
analytic_line = AnalyticLine.create(line_vals)
|
|
analytic_line.on_change_unit_amount()
|
|
|
|
def write(self, vals):
|
|
"""When material is consumed, generate Analytic Items"""
|
|
res = super().write(vals)
|
|
if vals.get("quantity_done"):
|
|
self.generate_mrp_raw_analytic_line()
|
|
return res
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
qty_done = vals.get("quantity_done")
|
|
res = super().create(vals)
|
|
if qty_done:
|
|
res.generate_mrp_raw_analytic_line()
|
|
return res
|
|
|
|
|
|
class StockMoveLine(models.Model):
|
|
_inherit = "stock.move.line"
|
|
|
|
def write(self, vals):
|
|
qty_done = vals.get("qty_done")
|
|
res = super().write(vals)
|
|
if qty_done:
|
|
self.mapped("move_id").generate_mrp_raw_analytic_line()
|
|
return res
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
qty_done = vals.get("qty_done")
|
|
res = super().create(vals)
|
|
if qty_done:
|
|
res.mapped("move_id").generate_mrp_raw_analytic_line()
|
|
return res
|