mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
[ADD] account_banking_aggregate_payment
This commit is contained in:
1
account_banking_aggregate_payment/__init__.py
Normal file
1
account_banking_aggregate_payment/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
import model
|
||||
49
account_banking_aggregate_payment/__openerp__.py
Normal file
49
account_banking_aggregate_payment/__openerp__.py
Normal file
@@ -0,0 +1,49 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# This module copyright (C) 2013 Therp BV (<http://therp.nl>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
{
|
||||
'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,
|
||||
}
|
||||
17
account_banking_aggregate_payment/data/payment_mode_type.xml
Normal file
17
account_banking_aggregate_payment/data/payment_mode_type.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record model="payment.mode.type"
|
||||
id="type_aggregate">
|
||||
<field name="name">Aggregate payment</field>
|
||||
<field name="code">AGGR</field>
|
||||
<field name="suitable_bank_types"
|
||||
eval="[(6, 0, (ref('base_iban.bank_iban'),
|
||||
ref('base.bank_normal')))]" />
|
||||
<field name="ir_model_id"
|
||||
ref="model_banking_export_aggregate"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -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"
|
||||
|
||||
170
account_banking_aggregate_payment/i18n/nl.po
Normal file
170
account_banking_aggregate_payment/i18n/nl.po
Normal file
@@ -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: <stefan@therp.nl>\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"
|
||||
|
||||
2
account_banking_aggregate_payment/model/__init__.py
Normal file
2
account_banking_aggregate_payment/model/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
import payment_mode
|
||||
import export_aggregate
|
||||
268
account_banking_aggregate_payment/model/export_aggregate.py
Normal file
268
account_banking_aggregate_payment/model/export_aggregate.py
Normal file
@@ -0,0 +1,268 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# This module copyright (C) 2013 Therp BV (<http://therp.nl>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
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,
|
||||
}
|
||||
35
account_banking_aggregate_payment/model/payment_mode.py
Normal file
35
account_banking_aggregate_payment/model/payment_mode.py
Normal file
@@ -0,0 +1,35 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# This module copyright (C) 2013 Therp BV (<http://therp.nl>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
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"),
|
||||
}
|
||||
30
account_banking_aggregate_payment/view/export_aggregate.xml
Normal file
30
account_banking_aggregate_payment/view/export_aggregate.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="banking_export_aggregate_view" model="ir.ui.view">
|
||||
<field name="name">Export aggregate payment order</field>
|
||||
<field name="model">banking.export.aggregate</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Export aggregate payment order">
|
||||
<label string="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."/>
|
||||
<group col="2" colspan="1">
|
||||
<button icon="gtk-close"
|
||||
special="cancel"
|
||||
string="Cancel"
|
||||
/>
|
||||
<button icon="gtk-ok"
|
||||
string="Create"
|
||||
name="create_aggregate_order"
|
||||
type="object"
|
||||
/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
52
account_banking_aggregate_payment/view/payment_mode.xml
Normal file
52
account_banking_aggregate_payment/view/payment_mode.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_payment_mode_form" model="ir.ui.view">
|
||||
<field name="name">Adaptations for aggregate payment modes</field>
|
||||
<field name="model">payment.mode</field>
|
||||
<field name="inherit_id"
|
||||
ref="account_direct_debit.view_payment_mode_form"/>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="payment_term_ids" position="after">
|
||||
<group colspan="2" col="2" string="Aggregate payment"
|
||||
attrs="{
|
||||
'invisible': [
|
||||
('type', '!=',
|
||||
%(account_banking_aggregate_payment.type_aggregate)d
|
||||
)]}">
|
||||
<field name="aggregate_partner_id"
|
||||
attrs="{'required': [
|
||||
('type', '=',
|
||||
%(account_banking_aggregate_payment.type_aggregate)d
|
||||
)]}"
|
||||
/>
|
||||
<field name="chained_mode_id"
|
||||
attrs="{'required': [
|
||||
('type', '=',
|
||||
%(account_banking_aggregate_payment.type_aggregate)d
|
||||
)]}"
|
||||
/>
|
||||
</group>
|
||||
</field>
|
||||
|
||||
<field name="transfer_account_id" position="attributes">
|
||||
<attribute name="attrs">{
|
||||
'required': [
|
||||
('type', '=',
|
||||
%(account_banking_aggregate_payment.type_aggregate)d
|
||||
)]}</attribute>
|
||||
</field>
|
||||
|
||||
<field name="transfer_journal_id" position="attributes">
|
||||
<attribute name="attrs">{
|
||||
'required': [
|
||||
('type', '=',
|
||||
%(account_banking_aggregate_payment.type_aggregate)d
|
||||
)]}</attribute>
|
||||
</field>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
Reference in New Issue
Block a user