mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
before this commit, field date is not used, new account move is create with date now. After commit, field date is used for new account move
45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
|
|
from odoo import _, models
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class AccountPayment(models.Model):
|
|
_name = "account.payment"
|
|
_inherit = ["account.payment", "account.document.reversal"]
|
|
|
|
def cancel_reversal(self):
|
|
return self.reverse_document_wizard()
|
|
|
|
def action_draft(self):
|
|
""" Case cancel reversal, set to draft allowed only when no moves """
|
|
for rec in self:
|
|
if rec.is_cancel_reversal and rec.move_line_ids:
|
|
raise UserError(_("Cannot set to draft!"))
|
|
return super().action_draft()
|
|
|
|
def cancel(self):
|
|
if any(self.mapped("is_cancel_reversal")):
|
|
raise UserError(_("Please use cancel_reversal()"))
|
|
return super().cancel()
|
|
|
|
def action_document_reversal(self, date=None, journal_id=None):
|
|
""" Reverse all moves related to this payment + set state to cancel """
|
|
# Check document readiness
|
|
valid_state = (
|
|
len(self.mapped("state")) == 1
|
|
and list(set(self.mapped("state")))[0] == "posted"
|
|
)
|
|
if not valid_state:
|
|
raise UserError(_("Only validated document can be cancelled (reversal)"))
|
|
# Find moves to get reversed
|
|
move_lines = self.mapped("move_line_ids").filtered(
|
|
lambda x: x.journal_id == self.mapped("journal_id")[0]
|
|
)
|
|
moves = move_lines.mapped("move_id")
|
|
# Create reverse entries
|
|
moves._cancel_reversal(journal_id, date=date)
|
|
# Set state cancelled and unlink with account.move
|
|
self.write({"state": "cancelled"})
|
|
return True
|