diff --git a/account_banking_aggregate_payment/__init__.py b/account_banking_aggregate_payment/__init__.py new file mode 100644 index 000000000..16e8b082f --- /dev/null +++ b/account_banking_aggregate_payment/__init__.py @@ -0,0 +1 @@ +import model diff --git a/account_banking_aggregate_payment/__openerp__.py b/account_banking_aggregate_payment/__openerp__.py new file mode 100644 index 000000000..fff16c8ac --- /dev/null +++ b/account_banking_aggregate_payment/__openerp__.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013 Therp BV (). +# +# 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': 'Account Banking Aggregate Payment', + 'version': '0.1.173', + 'license': 'AGPL-3', + 'author': 'Therp BV', + 'website': 'https://launchpad.net/banking-addons', + 'category': 'Banking addons', + 'depends': ['account_direct_debit'], + 'data': [ + 'data/payment_mode_type.xml', + 'view/payment_mode.xml', + 'view/export_aggregate.xml', + ], + 'description': ''' + This module allows for aggregating payments for various creditors + and making them payable to a single partner. This is practiced in + certain purchasing consortia. + + After collection of the payable invoices on a payment order of type + 'Aggregate payment', the move lines in the payment order are + reconciled by a move on a transit account, the total amount of which + is then transferred onto the designated partner's account payable + (upon confirmation of the aggregate payment order). + + The payment order wizard then proceeds to create a new payment order + of a user chosen payment mode with only the aggregate move line in it. + ''', + 'active': False, +} diff --git a/account_banking_aggregate_payment/data/payment_mode_type.xml b/account_banking_aggregate_payment/data/payment_mode_type.xml new file mode 100644 index 000000000..6d88152f6 --- /dev/null +++ b/account_banking_aggregate_payment/data/payment_mode_type.xml @@ -0,0 +1,17 @@ + + + + + + Aggregate payment + AGGR + + + + + + diff --git a/account_banking_aggregate_payment/i18n/account_banking_aggregate_payment.pot b/account_banking_aggregate_payment/i18n/account_banking_aggregate_payment.pot new file mode 100644 index 000000000..37a66c393 --- /dev/null +++ b/account_banking_aggregate_payment/i18n/account_banking_aggregate_payment.pot @@ -0,0 +1,175 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * account_banking_aggregate_payment +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-06-13 19:35+0000\n" +"PO-Revision-Date: 2013-06-13 19:35+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_banking_aggregate_payment +#: view:payment.mode:0 +msgid "Aggregate payment" +msgstr "Aggregate payment" + +#. module: account_banking_aggregate_payment +#: view:banking.export.aggregate:0 +msgid "Create" +msgstr "Create" + +#. module: account_banking_aggregate_payment +#: help:payment.mode,aggregate_partner_id:0 +msgid "The single partner on the chained payment order" +msgstr "The single partner on the chained payment order" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:134 +#, python-format +msgid "Aggregate Payment Order %s" +msgstr "Aggregate Payment Order %s" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:230 +#, python-format +msgid "Payment order workflow does not go into state \"done\"" +msgstr "Payment order workflow does not go into state \"done\"" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:143 +#, python-format +msgid "No move line provided for line %s" +msgstr "No move line provided for line %s" + +#. module: account_banking_aggregate_payment +#: model:ir.model,name:account_banking_aggregate_payment.model_payment_mode +msgid "Payment Mode" +msgstr "Payment Mode" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:48 +#, python-format +msgid "Please only select a single payment order" +msgstr "Please only select a single payment order" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:147 +#, python-format +msgid "Move line %s has already been paid/reconciled" +msgstr "Move line %s has already been paid/reconciled" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:44 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:121 +#, python-format +msgid "Please select a payment order" +msgstr "Please select a payment order" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:125 +#, python-format +msgid "This operation can only be performed on a single payment order" +msgstr "This operation can only be performed on a single payment order" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:155 +#, python-format +msgid "Transit %s" +msgstr "Transit %s" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:191 +#, python-format +msgid "Transit reconciliation" +msgstr "Transit reconciliation" + +#. module: account_banking_aggregate_payment +#: view:banking.export.aggregate:0 +msgid "Export aggregate payment order" +msgstr "Export aggregate payment order" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:208 +#, python-format +msgid "Amount payable" +msgstr "Amount payable" + +#. module: account_banking_aggregate_payment +#: field:payment.mode,aggregate_partner_id:0 +msgid "Aggregate payment beneficiary" +msgstr "Aggregate payment beneficiary" + +#. module: account_banking_aggregate_payment +#: help:payment.mode,chained_mode_id:0 +msgid "The payment type of the chained payment order" +msgstr "The payment type of the chained payment order" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:43 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:47 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:65 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:71 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:120 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:124 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:142 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:146 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:229 +#, python-format +msgid "Error" +msgstr "Error" + +#. module: account_banking_aggregate_payment +#: model:ir.model,name:account_banking_aggregate_payment.model_banking_export_aggregate +msgid "Execute aggregate payment" +msgstr "Execute aggregate payment" + +#. module: account_banking_aggregate_payment +#: view:banking.export.aggregate:0 +msgid "When you confirm this order, the total amount will be made payable to the partner that has been set on the payment mode. A new payment order will open in your screen with this one payment." +msgstr "When you confirm this order, the total amount will be made payable to the partner that has been set on the payment mode. A new payment order will open in your screen with this one payment." + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:172 +#, python-format +msgid "Reconciliation %s" +msgstr "Reconciliation %s" + +#. module: account_banking_aggregate_payment +#: field:banking.export.aggregate,reference:0 +msgid "Reference" +msgstr "Reference" + +#. module: account_banking_aggregate_payment +#: field:banking.export.aggregate,payment_order_id:0 +msgid "Payment order" +msgstr "Payment order" + +#. module: account_banking_aggregate_payment +#: field:payment.mode,chained_mode_id:0 +msgid "Chained payment mode" +msgstr "Chained payment mode" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:66 +#, python-format +msgid "Cannot reconcile between different accounts" +msgstr "Cannot reconcile between different accounts" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:72 +#, python-format +msgid "Line is already fully reconciled" +msgstr "Line is already fully reconciled" + +#. module: account_banking_aggregate_payment +#: view:banking.export.aggregate:0 +msgid "Cancel" +msgstr "Cancel" + diff --git a/account_banking_aggregate_payment/i18n/nl.po b/account_banking_aggregate_payment/i18n/nl.po new file mode 100644 index 000000000..2e5c67431 --- /dev/null +++ b/account_banking_aggregate_payment/i18n/nl.po @@ -0,0 +1,170 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * account_banking_aggregate_payment +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-06-13 19:35+0000\n" +"PO-Revision-Date: 2013-06-13 19:35+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_banking_aggregate_payment +#: view:payment.mode:0 +msgid "Aggregate payment" +msgstr "Verzamelbetaalopdracht" + +#. module: account_banking_aggregate_payment +#: view:banking.export.aggregate:0 +msgid "Create" +msgstr "Aanmaken" + +#. module: account_banking_aggregate_payment +#: help:payment.mode,aggregate_partner_id:0 +msgid "The single partner on the chained payment order" +msgstr "De relatie die geldt als crediteur van het verzameld bedrag" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:134 +#, python-format +msgid "Aggregate Payment Order %s" +msgstr "Verzamelbetaling %s" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:230 +#, python-format +msgid "Payment order workflow does not go into state \"done\"" +msgstr "De workflow van de betaalopdracht komt niet in de status \"verwerkt\"" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:143 +#, python-format +msgid "No move line provided for line %s" +msgstr "Er is geen boeking voor regel %s" + +#. module: account_banking_aggregate_payment +#: model:ir.model,name:account_banking_aggregate_payment.model_payment_mode +msgid "Payment Mode" +msgstr "Betaalwijze" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:48 +#, python-format +msgid "Please only select a single payment order" +msgstr "Er kan maar één betaalopdracht worden geselecteerd" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:147 +#, python-format +msgid "Move line %s has already been paid/reconciled" +msgstr "Boekingsregel %s is al afgeletterd" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:44 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:121 +#, python-format +msgid "Please select a payment order" +msgstr "Selecteer alstublieft een betaalopdracht" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:125 +#, python-format +msgid "This operation can only be performed on a single payment order" +msgstr "Deze bewerking kan alleen worden uitgevoerd op een enkele betaalopdracht" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:155 +#, python-format +msgid "Transit %s" +msgstr "Tussenboeking %s" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:191 +#, python-format +msgid "Transit reconciliation" +msgstr "Aflettering tussenboeking" + +#. module: account_banking_aggregate_payment +#: view:banking.export.aggregate:0 +msgid "Export aggregate payment order" +msgstr "Verwerken een verzamelbetalingsopdracht" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:208 +#, python-format +msgid "Amount payable" +msgstr "Verschuldigd bedrag" + +#. module: account_banking_aggregate_payment +#: field:payment.mode,aggregate_partner_id:0 +msgid "Aggregate payment beneficiary" +msgstr "Begunstigde van de verzamelbetaling" + +#. module: account_banking_aggregate_payment +#: help:payment.mode,chained_mode_id:0 +msgid "The payment type of the chained payment order" +msgstr "De betaalwijze van de gekoppelde betaalopdracht" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:43 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:47 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:65 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:71 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:120 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:124 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:142 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:146 +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:229 +#, python-format +msgid "Error" +msgstr "Fout" + +#. module: account_banking_aggregate_payment +#: model:ir.model,name:account_banking_aggregate_payment.model_banking_export_aggregate +msgid "Execute aggregate payment" +msgstr "Verzamelbetaling boeken" + +#. module: account_banking_aggregate_payment +#: view:banking.export.aggregate:0 +msgid "When you confirm this order, the total amount will be made payable to the partner that has been set on the payment mode. A new payment order will open in your screen with this one payment." +msgstr "Als u deze betaalopdracht bevestigd, dan wordt het totaalbedrag betaalbaar gemaakt aan de relatie die op de betaalwijze aangegeven staat. In het scherm wordt een nieuwe betaalopdracht geopend met alleen dit totaalbedrag." + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:172 +#, python-format +msgid "Reconciliation %s" +msgstr "Aflettering %s" + +#. module: account_banking_aggregate_payment +#: field:banking.export.aggregate,payment_order_id:0 +msgid "Payment order" +msgstr "Betaalopdracht" + +#. module: account_banking_aggregate_payment +#: field:payment.mode,chained_mode_id:0 +msgid "Chained payment mode" +msgstr "Gekoppelde betaalwijze" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:66 +#, python-format +msgid "Cannot reconcile between different accounts" +msgstr "Kan niet afletteren tussen verschillende grootboekrekeningen" + +#. module: account_banking_aggregate_payment +#: code:addons/account_banking_aggregate_payment/model/export_aggregate.py:72 +#, python-format +msgid "Line is already fully reconciled" +msgstr "De regel is al afgeletterd" + +#. module: account_banking_aggregate_payment +#: view:banking.export.aggregate:0 +msgid "Cancel" +msgstr "Annuleer" + diff --git a/account_banking_aggregate_payment/model/__init__.py b/account_banking_aggregate_payment/model/__init__.py new file mode 100644 index 000000000..94bbdd9f5 --- /dev/null +++ b/account_banking_aggregate_payment/model/__init__.py @@ -0,0 +1,2 @@ +import payment_mode +import export_aggregate diff --git a/account_banking_aggregate_payment/model/export_aggregate.py b/account_banking_aggregate_payment/model/export_aggregate.py new file mode 100644 index 000000000..be1c245f7 --- /dev/null +++ b/account_banking_aggregate_payment/model/export_aggregate.py @@ -0,0 +1,268 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013 Therp BV (). +# +# 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 +from openerp.tools.translate import _ +from openerp import netsvc + + +class banking_export_aggregate(orm.TransientModel): + _name = 'banking.export.aggregate' + _description = 'Execute aggregate payment order' + _rec_name = 'payment_order_id' + + _columns = { + 'payment_order_id': fields.many2one( + 'payment.order', 'Payment order', + required=True), + } + + def create(self, cr, uid, vals, context=None): + if context is None: + context = {} + if not vals.get('payment_order_id'): + if not context.get('active_ids'): + raise orm.except_orm( + _('Error'), + _('Please select a payment order')) + if len(context['active_ids']) > 1: + raise orm.except_orm( + _('Error'), + _('Please only select a single payment order')) + vals['payment_order_id'] = context['active_ids'][0] + return super(banking_export_aggregate, self).create( + cr, uid, vals, context=context) + + def reconcile_lines(self, cr, uid, move_line_ids, context=None): + """ + Reconcile move lines lines, really. ERP core functionality. + """ + reconcile_obj = self.pool.get('account.move.reconcile') + account_move_line_obj = self.pool.get('account.move.line') + currency_obj = self.pool.get('res.currency') + lines = account_move_line_obj.browse(cr, uid, move_line_ids, context=context) + + for line in lines[1:]: + if line.account_id != lines[0].account_id: + raise orm.except_orm( + _('Error'), + _('Cannot reconcile between different accounts')) + + if any([line.reconcile_id and line.reconcile_id.line_id + for line in lines]): + raise orm.except_orm( + _('Error'), + _('Line is already fully reconciled')) + + currency = lines[0].company_id.currency_id + + partials = [] + line_ids = [] + for line in lines: + if line.id not in line_ids: + line_ids.append(line.id) + if line.reconcile_partial_id: + line_ids += line.reconcile_partial_id.line_partial_ids + if line.reconcile_partial_id.id not in partials: + partials.append(line.reconcile_partial_id.id) + + total = account_move_line_obj.get_balance(cr, uid, line_ids) + is_zero = currency_obj.is_zero(cr, uid, currency, total) + + vals = { + 'type': 'auto', + 'line_id': is_zero and [(6, 0, line_ids)] or [(6, 0, [])], + 'line_partial_ids': is_zero and [(6, 0, [])] or [(6, 0, line_ids)], + } + + if partials: + if len(partials) > 1: + reconcile_obj.unlink( + cr, uid, partials[1:], context=context) + reconcile_obj.write( + cr, uid, partials[0], + vals, context=context) + else: + reconcile_obj.create( + cr, uid, vals, context=context) + + for line_id in line_ids: + netsvc.LocalService("workflow").trg_trigger( + uid, 'account.move.line', line_id, cr) + return True + + def create_aggregate_order(self, cr, uid, ids, context=None): + wiz = self.browse(cr, uid, ids[0], context=context) + account_move_line_obj = self.pool.get('account.move.line') + account_move_obj = self.pool.get('account.move') + payment_order_obj = self.pool.get('payment.order') + payment_order_line_obj = self.pool.get('payment.line') + payment_order_ids = context.get('active_ids', []) + if not payment_order_ids: + raise orm.except_orm( + _('Error'), + _('Please select a payment order')) + if len(payment_order_ids) > 1: + raise orm.except_orm( + _('Error'), + _('This operation can only be performed on a single ' + 'payment order')) + + today = fields.date.context_today(self, cr, uid, context=context) + order = payment_order_obj.browse( + cr, uid, payment_order_ids[0], context=context) + + move_id = account_move_obj.create(cr, uid, { + 'journal_id': order.mode.transfer_journal_id.id, + 'ref': _('Aggregate Payment Order %s') % order.reference, + }, context=context) + + counter_move_line_ids = [] + for line in order.line_ids: + # basic checks + if not line.move_line_id: + raise orm.except_orm( + _('Error'), + _('No move line provided for line %s') % line.name) + if line.move_line_id.reconcile_id: + raise orm.except_orm( + _('Error'), + _('Move line %s has already been paid/reconciled') % + line.move_line_id.name + ) + + # TODO: take multicurrency into account? + + # create the move line on the transfer account + vals = { + 'name': _('Transit %s') % ( + line.move_line_id.invoice and + line.move_line_id.invoice.number or + line.move_line_id.ref), + 'move_id': move_id, + 'partner_id': line.partner_id and line.partner_id.id or False, + 'account_id': order.mode.transfer_account_id.id, + 'credit': line.amount, + 'debit': 0.0, + 'date': today, + } + counter_move_line_id = account_move_line_obj.create( + cr, uid, vals, context=context) + counter_move_line_ids.append(counter_move_line_id) + + # create the debit move line on the receivable account + vals.update({ + 'name': _('Reconciliation %s') % ( + line.move_line_id.invoice and + line.move_line_id.invoice.number or + line.move_line_id.name), + 'account_id': line.move_line_id.account_id.id, + 'credit': 0.0, + 'debit': line.amount, + }) + reconcile_move_line_id = account_move_line_obj.create( + cr, uid, vals, context=context) + + self.reconcile_lines( + cr, uid, [reconcile_move_line_id, line.move_line_id.id], + context=context) + + total = account_move_line_obj.get_balance( + cr, uid, counter_move_line_ids) + + vals = { + 'name': _('Transit reconciliation'), + 'move_id': move_id, + 'partner_id': order.mode.aggregate_partner_id.id, + 'account_id': order.mode.transfer_account_id.id, + 'debit': total < 0 and -total or 0.0, + 'credit': total >= 0 and total or 0.0, + 'date': today, + } + aggregate_move_line_id = account_move_line_obj.create( + cr, uid, vals, context=context) + + self.reconcile_lines( + cr, uid, counter_move_line_ids + [aggregate_move_line_id], + context=context) + + # create the credit move line on the aggregate partner + vals.update({ + 'name': _('Amount payable'), + 'account_id': order.mode.aggregate_partner_id.property_account_payable.id, + 'partner_id': order.mode.aggregate_partner_id.id, + 'debit': total >= 0 and total or 0.0, + 'credit': total < 0 and -total or 0.0, + }) + + payable_move_line = account_move_line_obj.browse( + cr, uid, + account_move_line_obj.create( + cr, uid, vals, context=context), + context=context) + + account_move_obj.post(cr, uid, [move_id], context=context) + + wf_service = netsvc.LocalService('workflow') + wf_service.trg_validate(uid, 'payment.order', order.id, 'sent', cr) + wf_service.trg_validate(uid, 'payment.order', order.id, 'done', cr) + order.refresh() + if order.state != 'done': + raise orm.except_orm( + _('Error'), + _('Payment order workflow does not go into state "done"')) + + payment_order_id = payment_order_obj.create( + cr, uid, { + 'company_id': order.company_id.id, + 'mode': order.mode.chained_mode_id.id, + }, context=context) + + lines2bank = account_move_line_obj.line2bank( + cr, uid, [payable_move_line.id], order.mode.id, context) + + payment_order_line_obj.create(cr, uid,{ + 'move_line_id': payable_move_line.id, + 'amount_currency': payable_move_line.amount_to_pay, + 'bank_id': lines2bank.get(payable_move_line.id), + 'order_id': payment_order_id, + 'partner_id': order.mode.aggregate_partner_id.id, + 'communication': order.reference.replace('/', ''), + 'communication2': False, + 'state': 'structured', + 'date': today, + 'currency': ( + line.move_line_id.journal_id.currency.id or + line.move_line_id.journal_id.company_id.currency_id.id), + }, context=context) + + return { + 'name': payment_order_obj._description, + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': payment_order_obj._name, + 'domain': [], + 'context': context, + 'type': 'ir.actions.act_window', + 'target': 'current', + 'res_id': payment_order_id, + 'nodestroy': True, + } diff --git a/account_banking_aggregate_payment/model/payment_mode.py b/account_banking_aggregate_payment/model/payment_mode.py new file mode 100644 index 000000000..8ca89b604 --- /dev/null +++ b/account_banking_aggregate_payment/model/payment_mode.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013 Therp BV (). +# +# 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 payment_mode(orm.Model): + _inherit = "payment.mode" + _columns = { + 'aggregate_partner_id': fields.many2one( + 'res.partner', 'Aggregate payment beneficiary', + help="The single partner on the chained payment order", + ), + 'chained_mode_id': fields.many2one( + 'payment.mode', 'Chained payment mode', + help="The payment type of the chained payment order"), + } diff --git a/account_banking_aggregate_payment/view/export_aggregate.xml b/account_banking_aggregate_payment/view/export_aggregate.xml new file mode 100644 index 000000000..3429db046 --- /dev/null +++ b/account_banking_aggregate_payment/view/export_aggregate.xml @@ -0,0 +1,30 @@ + + + + + Export aggregate payment order + banking.export.aggregate + form + +
+