diff --git a/account_bank_statement_tax/__init__.py b/account_bank_statement_tax/__init__.py new file mode 100644 index 000000000..16e8b082f --- /dev/null +++ b/account_bank_statement_tax/__init__.py @@ -0,0 +1 @@ +import model diff --git a/account_bank_statement_tax/__openerp__.py b/account_bank_statement_tax/__openerp__.py new file mode 100644 index 000000000..b488d090d --- /dev/null +++ b/account_bank_statement_tax/__openerp__.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2012 - 2013 Therp BV (). +# All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +{ + 'name': 'Apply a tax on bank statement lines', + 'version': '0.1', + 'license': 'AGPL-3', + 'author': 'Therp BV', + 'website': 'https://launchpad.net/banking-addons', + 'category': 'Banking addons', + 'depends': [ + 'account', + ], + 'data': [ + 'view/account_bank_statement.xml', + ], + 'description': ''' +Allow an (inclusive) tax to be set on a bank statement line. When the +statement is configured, the tax will be processed like on a move line. + ''', + 'installable': True, +} diff --git a/account_bank_statement_tax/model/__init__.py b/account_bank_statement_tax/model/__init__.py new file mode 100644 index 000000000..0a522c87a --- /dev/null +++ b/account_bank_statement_tax/model/__init__.py @@ -0,0 +1,2 @@ +import account_bank_statement_line +import account_bank_statement diff --git a/account_bank_statement_tax/model/account_bank_statement.py b/account_bank_statement_tax/model/account_bank_statement.py new file mode 100644 index 000000000..9f6930b21 --- /dev/null +++ b/account_bank_statement_tax/model/account_bank_statement.py @@ -0,0 +1,102 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2012 - 2013 Therp BV (). +# All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.osv import orm +from openerp.tools import ustr + + +class AccountBankStatement(orm.Model): + _inherit = 'account.bank.statement' + + def get_tax_move_lines( + self, cr, uid, st_line, defaults, + company_currency_id, context=None): + """ + Process inclusive taxes on bank statement lines. + + @param st_line: browse record of the statement line + @param defaults: dictionary of default move line values. Usually + the same as the originating move line. + + return one or more serialized tax move lines and a set of values to + update the originating move line with, containing the new amount. + + TODO: apply fiscal position, multicurrency + """ + + if not st_line.tax_id: + return False, False + tax_obj = self.pool.get('account.tax') + move_lines = [] + update_move_line = {} + import pdb + pdb.set_trace() + base_amount = -defaults['credit'] or defaults['debit'] + computed_taxes = tax_obj.compute_all( + cr, uid, [st_line.tax_id], base_amount, 1.00) + + for tax in computed_taxes['taxes']: + if tax['tax_code_id']: + if not update_move_line.get('tax_code_id'): + update_move_line['tax_code_id'] = tax['base_code_id'] + update_move_line['tax_amount'] = tax['base_sign'] * abs( + computed_taxes.get('total', 0.0)) + # As the tax is inclusive, we need to correct the amount on the + # original move line + amount = computed_taxes.get('total', 0.0) + update_move_line['credit'] = ((amount < 0) and -amount) or 0.0 + update_move_line['debit'] = ((amount > 0) and amount) or 0.0 + + move_lines.append({ + 'move_id': defaults['move_id'], + 'name': defaults.get('name', '') + ' ' + ustr(tax['name'] or ''), + 'date': defaults.get('date', False), + 'partner_id': defaults.get('partner_id', False), + 'ref': defaults.get('ref', False), + 'statement_id': defaults.get('statement_id'), + 'tax_code_id': tax['tax_code_id'], + 'tax_amount': tax['tax_sign'] * abs(tax.get('amount', 0.0)), + 'account_id': tax.get('account_collected_id', defaults['account_id']), + 'credit': tax['amount'] < 0 and - tax['amount'] or 0.0, + 'debit': tax['amount'] > 0 and tax['amount'] or 0.0, + 'account_id': tax.get('account_collected_id', defaults['account_id']), + }) + + return move_lines, update_move_line + + def _prepare_counterpart_move_line( + self, cr, uid, st_line, move_id, amount, company_currency_id, + context=None): + """ + Overload of the original method from the account module. Create + the tax move lines. + """ + res = super(AccountBankStatement, self)._prepare_counterpart_move_line( + cr, uid, st_line, move_id, amount, company_currency_id, + context=context) + if st_line.tax_id: + tax_move_lines, counterpart_update_vals = self.get_tax_move_lines( + cr, uid, st_line, res, company_currency_id, context=context) + res.update(counterpart_update_vals) + for tax_move_line in tax_move_lines: + self.pool.get('account.move.line').create( + cr, uid, tax_move_line, context=context) + return res diff --git a/account_bank_statement_tax/model/account_bank_statement_line.py b/account_bank_statement_tax/model/account_bank_statement_line.py new file mode 100644 index 000000000..4d965cdef --- /dev/null +++ b/account_bank_statement_tax/model/account_bank_statement_line.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2012 - 2013 Therp BV (). +# All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.osv import orm, fields + + +class AccountBankStatementLine(orm.Model): + _inherit = 'account.bank.statement.line' + + _columns = { + 'tax_id': fields.many2one( + 'account.tax', 'Tax', + domain=[('price_include','=', True)], + help="Apply an (inclusive) tax from the bank statement line", + ), + } diff --git a/account_bank_statement_tax/view/account_bank_statement.xml b/account_bank_statement_tax/view/account_bank_statement.xml new file mode 100644 index 000000000..2065e6d7d --- /dev/null +++ b/account_bank_statement_tax/view/account_bank_statement.xml @@ -0,0 +1,20 @@ + + + + + Add tax to the embedded bank statement line form + + account.bank.statement + + + + + + + +