From 80d28d4d5787468f88ee04cfead226bcfa76a1c6 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Tue, 28 Feb 2017 18:45:32 +0100 Subject: [PATCH] [ADD] Adyen statement import --- .../__init__.py | 1 + .../__openerp__.py | 14 ++++ .../models/__init__.py | 1 + .../models/account_bank_statement.py | 80 +++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 account_bank_statement_clearing_account/__init__.py create mode 100644 account_bank_statement_clearing_account/__openerp__.py create mode 100644 account_bank_statement_clearing_account/models/__init__.py create mode 100644 account_bank_statement_clearing_account/models/account_bank_statement.py diff --git a/account_bank_statement_clearing_account/__init__.py b/account_bank_statement_clearing_account/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/account_bank_statement_clearing_account/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/account_bank_statement_clearing_account/__openerp__.py b/account_bank_statement_clearing_account/__openerp__.py new file mode 100644 index 00000000..f69fe697 --- /dev/null +++ b/account_bank_statement_clearing_account/__openerp__.py @@ -0,0 +1,14 @@ +# coding: utf-8 +# © 2017 Opener BV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': 'Reconcile entries from pseudo bank statements', + 'version': '8.0.1.0.0', + 'author': 'Opener B.V.', + 'category': 'Banking addons', + 'website': 'https://opener.am', + 'depends': [ + 'account_cancel', + ], + 'installable': True, +} diff --git a/account_bank_statement_clearing_account/models/__init__.py b/account_bank_statement_clearing_account/models/__init__.py new file mode 100644 index 00000000..0882dd26 --- /dev/null +++ b/account_bank_statement_clearing_account/models/__init__.py @@ -0,0 +1 @@ +from . import account_bank_statement diff --git a/account_bank_statement_clearing_account/models/account_bank_statement.py b/account_bank_statement_clearing_account/models/account_bank_statement.py new file mode 100644 index 00000000..06ee1e16 --- /dev/null +++ b/account_bank_statement_clearing_account/models/account_bank_statement.py @@ -0,0 +1,80 @@ +# coding: utf-8 +from openerp import api, models + + +class BankStatement(models.Model): + _inherit = 'account.bank.statement' + + @api.multi + def get_reconcile_clearing_account_lines(self): + if (self.journal_id.default_debit_account_id != + self.journal_id.default_credit_account_id or + not self.journal_id.default_debit_account_id.reconcile): + return False + account = self.journal_id.default_debit_account_id + currency = self.journal_id.currency or self.company_id.currency_id + + def get_bank_line(st_line): + for line in st_line.journal_entry_id.line_id: + if st_line.amount > 0: + compare_amount = st_line.amount + field = 'debit' + else: + compare_amount = -st_line.amount + field = 'credit' + if (line[field] and + not currency.compare_amounts( + line[field], compare_amount) and + line.account_id == account): + return line + return False + + move_lines = self.env['account.move.line'] + for st_line in self.line_ids: + bank_line = get_bank_line(st_line) + if not bank_line: + return False + move_lines += bank_line + balance = sum(line.debit - line.credit for line in move_lines) + if not currency.is_zero(balance): + return False + return move_lines + + @api.multi + def reconcile_clearing_account(self): + self.ensure_one() + lines = self.get_reconcile_clearing_account_lines() + if not lines: + return False + if any(line.reconcile_id or line.reconcile_partial_id + for line in lines): + return False + lines.reconcile_partial() + + @api.multi + def unreconcile_clearing_account(self): + self.ensure_one() + lines = self.get_reconcile_clearing_account_lines() + if not lines: + return False + reconciliation = lines[0].reconcile_id + if reconciliation and all( + line.reconcile_id == reconciliation + for line in lines) and all( + line in lines + for line in reconciliation.line_id): + reconciliation.unlink() + + @api.multi + def button_draft(self): + res = super(BankStatement, self).button_draft() + for statement in self: + statement.unreconcile_clearing_account() + return res + + @api.multi + def button_confirm_bank(self): + res = super(BankStatement, self).button_confirm_bank() + for statement in self: + statement.reconcile_clearing_account() + return res