81 lines
3.0 KiB
Python
81 lines
3.0 KiB
Python
# Copyright 2016 Acsone
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import api, fields, models
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class AccountMove(models.Model):
|
|
_inherit = "account.move"
|
|
|
|
supplier_invoice_number = fields.Char(
|
|
string="Vendor invoice number",
|
|
readonly=True,
|
|
copy=False,
|
|
)
|
|
|
|
@api.constrains("supplier_invoice_number")
|
|
def _check_unique_supplier_invoice_number_insensitive(self):
|
|
"""
|
|
Check if an other vendor bill has the same supplier_invoice_number
|
|
and the same commercial_partner_id than the current instance
|
|
"""
|
|
for rec in self:
|
|
if (
|
|
rec.company_id.check_invoice_supplier_number
|
|
and rec.supplier_invoice_number
|
|
and rec.is_purchase_document(include_receipts=True)
|
|
):
|
|
same_supplier_inv_num = rec.search(
|
|
[
|
|
("commercial_partner_id", "=", rec.commercial_partner_id.id),
|
|
("move_type", "in", ("in_invoice", "in_refund")),
|
|
(
|
|
"supplier_invoice_number",
|
|
"=ilike",
|
|
rec.supplier_invoice_number,
|
|
),
|
|
("id", "!=", rec.id),
|
|
],
|
|
limit=1,
|
|
)
|
|
if same_supplier_inv_num:
|
|
raise ValidationError(
|
|
self.env._(
|
|
"The invoice/refund with supplier "
|
|
"invoice number %(number)s "
|
|
"already exists in Odoo under the number %(same)s "
|
|
"for supplier %(supplier)s.",
|
|
number=same_supplier_inv_num.supplier_invoice_number,
|
|
same=same_supplier_inv_num.name or "-",
|
|
supplier=same_supplier_inv_num.partner_id.display_name,
|
|
)
|
|
)
|
|
|
|
@api.onchange("supplier_invoice_number")
|
|
def _onchange_supplier_invoice_number(self):
|
|
if not self.ref:
|
|
self.ref = self.supplier_invoice_number
|
|
|
|
def _reverse_moves(self, default_values_list=None, cancel=False):
|
|
# OVERRIDE
|
|
if default_values_list:
|
|
for move, default_values in zip(self, default_values_list, strict=False):
|
|
if (
|
|
move
|
|
and move.is_purchase_document(include_receipts=True)
|
|
and default_values.get("ref")
|
|
):
|
|
default_values.update({"ref": ""})
|
|
return super()._reverse_moves(
|
|
default_values_list=default_values_list, cancel=cancel
|
|
)
|
|
|
|
def copy(self, default=None):
|
|
"""
|
|
The unique vendor invoice number is not copied in vendor bills
|
|
"""
|
|
if self.is_purchase_document(include_receipts=True):
|
|
default = dict(default or {}, ref="")
|
|
return super().copy(default)
|