mirror of
https://github.com/OCA/rma.git
synced 2025-02-16 17:11:47 +02:00
56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import _, fields, models
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.tools import float_compare
|
|
|
|
|
|
class AccountMove(models.Model):
|
|
_inherit = "account.move"
|
|
|
|
def _check_rma_invoice_lines_qty(self):
|
|
"""We can't refund a different qty than the stated in the RMA.
|
|
Extend to change criteria"""
|
|
precision = self.env["decimal.precision"].precision_get(
|
|
"Product Unit of Measure"
|
|
)
|
|
return (
|
|
self.sudo()
|
|
.mapped("invoice_line_ids")
|
|
.filtered(
|
|
lambda r: (
|
|
r.rma_id
|
|
and float_compare(r.quantity, r.rma_id.product_uom_qty, precision)
|
|
< 0
|
|
)
|
|
)
|
|
)
|
|
|
|
def action_post(self):
|
|
"""Avoids to validate a refund with less quantity of product than
|
|
quantity in the linked RMA.
|
|
"""
|
|
if self._check_rma_invoice_lines_qty():
|
|
raise ValidationError(
|
|
_(
|
|
"There is at least one invoice lines whose quantity is "
|
|
"less than the quantity specified in its linked RMA."
|
|
)
|
|
)
|
|
return super().action_post()
|
|
|
|
def unlink(self):
|
|
rma = self.mapped("invoice_line_ids.rma_id")
|
|
rma.write({"state": "received"})
|
|
return super().unlink()
|
|
|
|
|
|
class AccountMoveLine(models.Model):
|
|
_inherit = "account.move.line"
|
|
|
|
rma_id = fields.Many2one(
|
|
comodel_name="rma",
|
|
string="RMA",
|
|
)
|