odooapps/sale_order_batch/models/sale_order_line.py

47 lines
1.6 KiB
Python

from odoo import api, fields, models
class SaleOrderLine(models.Model):
_inherit = "sale.order.line"
batch_id = fields.Many2one(related="order_id.batch_id")
batch_product_id = fields.Many2one("sale.order.batch.product")
# TODO:
# - recompute values on batchproduct
# - check for last item on unlink or removal ob batch_id and remove batch_product_id
def _update_batch_product(self):
for line in self:
batch_id = line.batch_id
if batch_id:
batch_product = line.env["sale.order.batch.product"].search(
[("product_id", "=", line.product_id.id), ("batch_id", "=", batch_id.id)], limit=1
)
if not batch_product:
batch_product = line.env["sale.order.batch.product"].create(
{"batch_id": batch_id.id, "product_id": line.product_id.id}
)
line.batch_product_id = batch_product
else:
line.batch_product_id.unlink()
line.batch_product_id = False
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
for line in res:
if line.batch_id:
line._update_batch_product()
return res
def write(self, vals):
res = super().write(vals)
if vals.get("product_id"):
self._update_batch_product()
return res
def unlink(self):
for line in self:
if line.batch_product_id:
line.batch_product_id.unlink()
return super().unlink()