|
@ -1,4 +1,5 @@ |
|
|
from odoo import api, fields, models, _ |
|
|
from odoo import api, fields, models, _ |
|
|
|
|
|
from odoo.tools import float_compare |
|
|
from odoo.exceptions import UserError |
|
|
from odoo.exceptions import UserError |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -7,16 +8,23 @@ class AccountInvoice(models.Model): |
|
|
|
|
|
|
|
|
@api.multi |
|
|
@api.multi |
|
|
def action_invoice_open(self): |
|
|
def action_invoice_open(self): |
|
|
|
|
|
to_open_invoices = self.filtered(lambda inv: inv.state != "open") |
|
|
if self.user_has_groups( |
|
|
if self.user_has_groups( |
|
|
"beesdoo_account." "group_validate_invoice_negative_total_amount" |
|
|
"beesdoo_account." "group_validate_invoice_negative_total_amount" |
|
|
|
|
|
) and to_open_invoices.filtered( |
|
|
|
|
|
lambda inv: float_compare( |
|
|
|
|
|
inv.amount_total, |
|
|
|
|
|
0.0, |
|
|
|
|
|
precision_rounding=inv.currency_id.rounding, |
|
|
|
|
|
) |
|
|
|
|
|
== -1 |
|
|
): |
|
|
): |
|
|
return self.action_invoice_negative_amount_open() |
|
|
|
|
|
|
|
|
return self.action_invoice_negative_amount_open(to_open_invoices) |
|
|
return super(AccountInvoice, self).action_invoice_open() |
|
|
return super(AccountInvoice, self).action_invoice_open() |
|
|
|
|
|
|
|
|
@api.multi |
|
|
@api.multi |
|
|
def action_invoice_negative_amount_open(self): |
|
|
|
|
|
"""Identical to action_invoice_open without UserError on an invoice with a negative total amount""" |
|
|
|
|
|
to_open_invoices = self.filtered(lambda inv: inv.state != "open") |
|
|
|
|
|
|
|
|
def action_invoice_negative_amount_open(self, to_open_invoices): |
|
|
|
|
|
"""Similar to action_invoice_open without UserError on an invoice with a negative total amount""" |
|
|
if to_open_invoices.filtered(lambda inv: not inv.partner_id): |
|
|
if to_open_invoices.filtered(lambda inv: not inv.partner_id): |
|
|
raise UserError( |
|
|
raise UserError( |
|
|
_( |
|
|
_( |
|
|