Merge lp:~camptocamp/banking-addons/bank-statement-reconcile-7.0_voucher_killer_vre into lp:banking-addons

Proposed by Vincent Renaville@camptocamp
Status: Superseded
Proposed branch: lp:~camptocamp/banking-addons/bank-statement-reconcile-7.0_voucher_killer_vre
Merge into: lp:banking-addons
Diff against target: 13731 lines (+12871/-0)
160 files modified
account_advanced_reconcile/__init__.py (+24/-0)
account_advanced_reconcile/__openerp__.py (+83/-0)
account_advanced_reconcile/advanced_reconciliation.py (+118/-0)
account_advanced_reconcile/base_advanced_reconciliation.py (+272/-0)
account_advanced_reconcile/easy_reconcile.py (+36/-0)
account_advanced_reconcile/easy_reconcile_view.xml (+19/-0)
account_advanced_reconcile/i18n/account_advanced_reconcile.pot (+90/-0)
account_advanced_reconcile/i18n/fr.po (+98/-0)
account_advanced_reconcile_transaction_ref/__init__.py (+24/-0)
account_advanced_reconcile_transaction_ref/__openerp__.py (+40/-0)
account_advanced_reconcile_transaction_ref/account.py (+54/-0)
account_advanced_reconcile_transaction_ref/advanced_reconciliation.py (+43/-0)
account_advanced_reconcile_transaction_ref/base_advanced_reconciliation.py (+46/-0)
account_advanced_reconcile_transaction_ref/easy_reconcile.py (+37/-0)
account_advanced_reconcile_transaction_ref/easy_reconcile_view.xml (+19/-0)
account_advanced_reconcile_transaction_ref/i18n/account_advanced_reconcile_transaction_ref.pot (+97/-0)
account_advanced_reconcile_transaction_ref/i18n/fr.po (+106/-0)
account_easy_reconcile/__init__.py (+25/-0)
account_easy_reconcile/__openerp__.py (+66/-0)
account_easy_reconcile/base_reconciliation.py (+208/-0)
account_easy_reconcile/easy_reconcile.py (+338/-0)
account_easy_reconcile/easy_reconcile.xml (+162/-0)
account_easy_reconcile/easy_reconcile_history.py (+153/-0)
account_easy_reconcile/easy_reconcile_history_view.xml (+98/-0)
account_easy_reconcile/i18n/account_easy_reconcile.pot (+406/-0)
account_easy_reconcile/i18n/es.po (+415/-0)
account_easy_reconcile/i18n/fr.po (+432/-0)
account_easy_reconcile/security/ir.model.access.csv (+15/-0)
account_easy_reconcile/security/ir_rule.xml (+25/-0)
account_easy_reconcile/simple_reconciliation.py (+120/-0)
account_statement_bankaccount_completion/__init__.py (+21/-0)
account_statement_bankaccount_completion/__openerp__.py (+48/-0)
account_statement_bankaccount_completion/data.xml (+12/-0)
account_statement_bankaccount_completion/i18n/account_statement_bankaccount_completion.pot (+43/-0)
account_statement_bankaccount_completion/statement.py (+96/-0)
account_statement_bankaccount_completion/tests/__init__.py (+27/-0)
account_statement_bankaccount_completion/tests/test_bankaccount_completion.py (+91/-0)
account_statement_base_completion/__init__.py (+23/-0)
account_statement_base_completion/__openerp__.py (+77/-0)
account_statement_base_completion/data.xml (+31/-0)
account_statement_base_completion/i18n/ab.po (+216/-0)
account_statement_base_completion/i18n/account_statement_base_completion.pot (+199/-0)
account_statement_base_completion/i18n/fr.po (+216/-0)
account_statement_base_completion/partner.py (+38/-0)
account_statement_base_completion/partner_view.xml (+22/-0)
account_statement_base_completion/security/ir.model.access.csv (+3/-0)
account_statement_base_completion/statement.py (+576/-0)
account_statement_base_completion/statement_view.xml (+104/-0)
account_statement_base_completion/test/completion_test.yml (+87/-0)
account_statement_base_completion/test/invoice.yml (+32/-0)
account_statement_base_completion/test/partner.yml (+5/-0)
account_statement_base_completion/test/supplier_invoice.yml (+31/-0)
account_statement_base_completion/tests/__init__.py (+27/-0)
account_statement_base_completion/tests/test_base_completion.py (+95/-0)
account_statement_base_import/__init__.py (+23/-0)
account_statement_base_import/__openerp__.py (+69/-0)
account_statement_base_import/data/statement.csv (+4/-0)
account_statement_base_import/i18n/account_statement_base_import.pot (+289/-0)
account_statement_base_import/i18n/es.po (+305/-0)
account_statement_base_import/i18n/fr.po (+303/-0)
account_statement_base_import/parser/__init__.py (+25/-0)
account_statement_base_import/parser/file_parser.py (+221/-0)
account_statement_base_import/parser/generic_file_parser.py (+74/-0)
account_statement_base_import/parser/parser.py (+222/-0)
account_statement_base_import/statement.py (+241/-0)
account_statement_base_import/statement_view.xml (+30/-0)
account_statement_base_import/wizard/__init__.py (+20/-0)
account_statement_base_import/wizard/import_statement.py (+116/-0)
account_statement_base_import/wizard/import_statement_view.xml (+42/-0)
account_statement_commission/__init__.py (+22/-0)
account_statement_commission/__openerp__.py (+47/-0)
account_statement_commission/commission.py (+72/-0)
account_statement_commission/i18n/account_statement_commission.pot (+53/-0)
account_statement_commission/import_statement_view.xml (+18/-0)
account_statement_commission/statement_view.xml (+21/-0)
account_statement_completion_voucher/__init__.py (+20/-0)
account_statement_completion_voucher/__openerp__.py (+46/-0)
account_statement_completion_voucher/statement_view.xml (+21/-0)
account_statement_ext/__init__.py (+25/-0)
account_statement_ext/__openerp__.py (+89/-0)
account_statement_ext/account.py (+41/-0)
account_statement_ext/account_view.xml (+17/-0)
account_statement_ext/i18n/fr.po (+301/-0)
account_statement_ext/report.xml (+25/-0)
account_statement_ext/report/__init__.py (+26/-0)
account_statement_ext/report/bank_statement_report.mako (+70/-0)
account_statement_ext/report/bank_statement_report.py (+71/-0)
account_statement_ext/report/bank_statement_webkit_header.xml (+180/-0)
account_statement_ext/security/ir.model.access.csv (+3/-0)
account_statement_ext/security/ir_rule.xml (+10/-0)
account_statement_ext/statement.py (+745/-0)
account_statement_ext/statement_view.xml (+160/-0)
account_statement_ext/test/test_profile_related_fields.yml (+78/-0)
account_statement_ext/voucher.py (+49/-0)
account_statement_ext_point_of_sale/__init__.py (+22/-0)
account_statement_ext_point_of_sale/__openerp__.py (+43/-0)
account_statement_ext_point_of_sale/point_of_sale.py (+123/-0)
account_statement_ext_voucher/__init__.py (+20/-0)
account_statement_ext_voucher/__openerp__.py (+52/-0)
account_statement_ext_voucher/statement_voucher.py (+51/-0)
account_statement_no_invoice_import/__init__.py (+22/-0)
account_statement_no_invoice_import/__openerp__.py (+40/-0)
account_statement_no_invoice_import/statement_view.xml (+21/-0)
account_statement_ofx_import/__init__.py (+22/-0)
account_statement_ofx_import/__openerp__.py (+49/-0)
account_statement_ofx_import/i18n/account_statement_ofx_import.pot (+34/-0)
account_statement_ofx_import/parser/__init__.py (+22/-0)
account_statement_ofx_import/parser/ofx_parser.py (+118/-0)
account_statement_ofx_import/statement.py (+35/-0)
account_statement_one_move/__init__.py (+23/-0)
account_statement_one_move/__openerp__.py (+45/-0)
account_statement_one_move/statement.py (+225/-0)
account_statement_one_move/statement_view.xml (+26/-0)
account_statement_regex_account_completion/__init__.py (+32/-0)
account_statement_regex_account_completion/__openerp__.py (+56/-0)
account_statement_regex_account_completion/i18n/account_statement_regex_account_completion.pot (+32/-0)
account_statement_regex_account_completion/i18n/fr.po (+32/-0)
account_statement_regex_account_completion/statement.py (+75/-0)
account_statement_regex_account_completion/statement_view.xml (+21/-0)
account_statement_regex_account_completion/tests/__init__.py (+36/-0)
account_statement_regex_account_completion/tests/test_regex_account_completion.py (+91/-0)
account_statement_so_completion/__init__.py (+25/-0)
account_statement_so_completion/__openerp__.py (+52/-0)
account_statement_so_completion/data.xml (+12/-0)
account_statement_so_completion/i18n/account_statement_so_completion.pot (+28/-0)
account_statement_so_completion/statement.py (+94/-0)
account_statement_so_completion/test/completion_so_test.yml (+44/-0)
account_statement_transactionid_completion/__init__.py (+22/-0)
account_statement_transactionid_completion/__openerp__.py (+59/-0)
account_statement_transactionid_completion/data.xml (+12/-0)
account_statement_transactionid_completion/i18n/account_statement_transactionid_completion.pot (+43/-0)
account_statement_transactionid_completion/statement.py (+94/-0)
account_statement_transactionid_completion/statement_view.xml (+22/-0)
account_statement_transactionid_completion/test/completion_transactionid_test.yml (+44/-0)
account_statement_transactionid_completion/test/sale.yml (+11/-0)
account_statement_transactionid_import/__init__.py (+22/-0)
account_statement_transactionid_import/__openerp__.py (+60/-0)
account_statement_transactionid_import/data/statement.csv (+4/-0)
account_statement_transactionid_import/i18n/account_statement_transactionid_import.pot (+21/-0)
account_statement_transactionid_import/parser/__init__.py (+22/-0)
account_statement_transactionid_import/parser/transactionid_file_parser.py (+80/-0)
account_statement_transactionid_import/statement.py (+47/-0)
base_transaction_id/__init__.py (+24/-0)
base_transaction_id/__openerp__.py (+57/-0)
base_transaction_id/i18n/base_transaction_id.pot (+58/-0)
base_transaction_id/invoice.py (+36/-0)
base_transaction_id/invoice_view.xml (+30/-0)
base_transaction_id/sale.py (+43/-0)
base_transaction_id/sale_view.xml (+21/-0)
base_transaction_id/stock.py (+42/-0)
invoicing_voucher_killer/__init__.py (+20/-0)
invoicing_voucher_killer/__openerp__.py (+39/-0)
invoicing_voucher_killer/i18n/invoicing_voucher_killer.pot (+32/-0)
invoicing_voucher_killer/invoice_data.xml (+7/-0)
invoicing_voucher_killer/invoice_view.xml (+48/-0)
statement_voucher_killer/__init__.py (+21/-0)
statement_voucher_killer/__openerp__.py (+48/-0)
statement_voucher_killer/i18n/statement_voucher_killer.pot (+27/-0)
statement_voucher_killer/statement_view.xml (+20/-0)
statement_voucher_killer/voucher.py (+129/-0)
To merge this branch: bzr merge lp:~camptocamp/banking-addons/bank-statement-reconcile-7.0_voucher_killer_vre
Reviewer Review Type Date Requested Status
Pedro Manuel Baeza Needs Fixing
Review via email: mp+213973@code.launchpad.net

This proposal has been superseded by a proposal from 2014-04-03.

Description of the change

It take the date of the payment line to set the bank statement line instead of maturity date of the payment line
See bug report

To post a comment you must log in.
Revision history for this message
Pedro Manuel Baeza (pedro.baeza) wrote :

Hi, Vincent, please make the MP against the correct branch bank-statement-reconcile-70. You can do it from "Resubmit proposal" link on the right part.

Regards.

review: Needs Fixing
142. By Vincent Renaville@camptocamp

[FIX] pep8

Unmerged revisions

142. By Vincent Renaville@camptocamp

[FIX] pep8

141. By Vincent Renaville@camptocamp

[FIx] set correct date when import payment line into payment order: see bug #1301781

140. By Launchpad Translations on behalf of banking-addons-team

Launchpad automatic translations update.

139. By Joël Grand-Guillaume @ camptocamp

[IMP] Add buttons to open unreconciled and partially reconciled items from a profile to easy the verification and controlling
  [IMP] Add the number of lines in completion log to let the user know if some hasn't been auto-completed (e.g. 332/335 line compelted)
  [IMP] Add a group by bank statement in journal items search view to ease the reconciliation

138. By Leonardo Pistone

[fix] account_statement_base_import: add all missing default values to the statement line.
This has to be done manually because the module uses sql trickery

137. By Launchpad Translations on behalf of banking-addons-team

Launchpad automatic translations update.

136. By Pedro Manuel Baeza

[IMP] Translation template files.

135. By Launchpad Translations on behalf of banking-addons-team

Launchpad automatic translations update.

134. By Leonardo Pistone

[fix] account_statement_ext: trigger related fields

133. By Alexandre Fayolle - camptocamp

fix issue when creating empty statement (lp:1247876) and add a module which enables bank statement creation from the point of sale with the banking framework installed.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory 'account_advanced_reconcile'
=== added file 'account_advanced_reconcile/__init__.py'
--- account_advanced_reconcile/__init__.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile/__init__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,24 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Guewen Baconnier
5# Copyright 2012 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22import easy_reconcile
23import base_advanced_reconciliation
24import advanced_reconciliation
025
=== added file 'account_advanced_reconcile/__openerp__.py'
--- account_advanced_reconcile/__openerp__.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile/__openerp__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,83 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Guewen Baconnier
5# Copyright 2012 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22{'name': "Advanced Reconcile",
23 'version': '1.0',
24 'author': 'Camptocamp',
25 'maintainer': 'Camptocamp',
26 'category': 'Finance',
27 'complexity': 'normal',
28 'depends': ['account_easy_reconcile',
29 ],
30 'description': """
31Advanced reconciliation methods for the module account_easy_reconcile.
32
33In addition to the features implemented in account_easy_reconcile, which are:
34 - reconciliation facilities for big volume of transactions
35 - setup different profiles of reconciliation by account
36 - each profile can use many methods of reconciliation
37 - this module is also a base to create others reconciliation methods
38 which can plug in the profiles
39 - a profile a reconciliation can be run manually or by a cron
40 - monitoring of reconcilation runs with an history
41
42It implements a basis to created advanced reconciliation methods in a few lines
43of code.
44
45Typically, such a method can be:
46 - Reconcile Journal items if the partner and the ref are equal
47 - Reconcile Journal items if the partner is equal and the ref
48 is the same than ref or name
49 - Reconcile Journal items if the partner is equal and the ref
50 match with a pattern
51
52And they allows:
53 - Reconciliations with multiple credit / multiple debit lines
54 - Partial reconciliations
55 - Write-off amount as well
56
57A method is already implemented in this module, it matches on items:
58 - Partner
59 - Ref on credit move lines should be case insensitive equals to the ref or
60 the name of the debit move line
61
62The base class to find the reconciliations is built to be as efficient as
63possible.
64
65So basically, if you have an invoice with 3 payments (one per month), the first
66month, it will partial reconcile the debit move line with the first payment, the second
67month, it will partial reconcile the debit move line with 2 first payments,
68the third month, it will make the full reconciliation.
69
70This module is perfectly adapted for E-Commerce business where a big volume of
71move lines and so, reconciliations, are involved and payments often come from
72many offices.
73
74 """,
75 'website': 'http://www.camptocamp.com',
76 'data': ['easy_reconcile_view.xml'],
77 'test': [],
78 'images': [],
79 'installable': True,
80 'auto_install': False,
81 'license': 'AGPL-3',
82 'application': True,
83}
084
=== added file 'account_advanced_reconcile/advanced_reconciliation.py'
--- account_advanced_reconcile/advanced_reconciliation.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile/advanced_reconciliation.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,118 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Guewen Baconnier
5# Copyright 2012 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from openerp.osv import orm
23
24
25class easy_reconcile_advanced_ref(orm.TransientModel):
26
27 _name = 'easy.reconcile.advanced.ref'
28 _inherit = 'easy.reconcile.advanced'
29
30 def _skip_line(self, cr, uid, rec, move_line, context=None):
31 """
32 When True is returned on some conditions, the credit move line
33 will be skipped for reconciliation. Can be inherited to
34 skip on some conditions. ie: ref or partner_id is empty.
35 """
36 return not (move_line.get('ref') and move_line.get('partner_id'))
37
38 def _matchers(self, cr, uid, rec, move_line, context=None):
39 """
40 Return the values used as matchers to find the opposite lines
41
42 All the matcher keys in the dict must have their equivalent in
43 the `_opposite_matchers`.
44
45 The values of each matcher key will be searched in the
46 one returned by the `_opposite_matchers`
47
48 Must be inherited to implement the matchers for one method
49
50 For instance, it can return:
51 return ('ref', move_line['rec'])
52
53 or
54 return (('partner_id', move_line['partner_id']),
55 ('ref', "prefix_%s" % move_line['rec']))
56
57 All the matchers have to be found in the opposite lines
58 to consider them as "opposite"
59
60 The matchers will be evaluated in the same order as declared
61 vs the the opposite matchers, so you can gain performance by
62 declaring first the partners with the less computation.
63
64 All matchers should match with their opposite to be considered
65 as "matching".
66 So with the previous example, partner_id and ref have to be
67 equals on the opposite line matchers.
68
69 :return: tuple of tuples (key, value) where the keys are
70 the matchers keys
71 (must be the same than `_opposite_matchers` returns,
72 and their values to match in the opposite lines.
73 A matching key can have multiples values.
74 """
75 return (('partner_id', move_line['partner_id']),
76 ('ref', move_line['ref'].lower().strip()))
77
78 def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
79 """
80 Return the values of the opposite line used as matchers
81 so the line is matched
82
83 Must be inherited to implement the matchers for one method
84 It can be inherited to apply some formatting of fields
85 (strip(), lower() and so on)
86
87 This method is the counterpart of the `_matchers()` method.
88
89 Each matcher has to yield its value respecting the order
90 of the `_matchers()`.
91
92 When a matcher does not correspond, the next matchers won't
93 be evaluated so the ones which need the less computation
94 have to be executed first.
95
96 If the `_matchers()` returns:
97 (('partner_id', move_line['partner_id']),
98 ('ref', move_line['ref']))
99
100 Here, you should yield :
101 yield ('partner_id', move_line['partner_id'])
102 yield ('ref', move_line['ref'])
103
104 Note that a matcher can contain multiple values, as instance,
105 if for a move line, you want to search from its `ref` in the
106 `ref` or `name` fields of the opposite move lines, you have to
107 yield ('partner_id', move_line['partner_id'])
108 yield ('ref', (move_line['ref'], move_line['name'])
109
110 An OR is used between the values for the same key.
111 An AND is used between the differents keys.
112
113 :param dict move_line: values of the move_line
114 :yield: matchers as tuple ('matcher key', value(s))
115 """
116 yield ('partner_id', move_line['partner_id'])
117 yield ('ref', ((move_line['ref'] or '').lower().strip(),
118 move_line['name'].lower().strip()))
0119
=== added file 'account_advanced_reconcile/base_advanced_reconciliation.py'
--- account_advanced_reconcile/base_advanced_reconciliation.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile/base_advanced_reconciliation.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,272 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Guewen Baconnier
5# Copyright 2012 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from itertools import product
23from openerp.osv import orm
24
25
26class easy_reconcile_advanced(orm.AbstractModel):
27
28 _name = 'easy.reconcile.advanced'
29 _inherit = 'easy.reconcile.base'
30
31 def _query_debit(self, cr, uid, rec, context=None):
32 """Select all move (debit>0) as candidate. """
33 select = self._select(rec)
34 sql_from = self._from(rec)
35 where, params = self._where(rec)
36 where += " AND account_move_line.debit > 0 "
37
38 where2, params2 = self._get_filter(cr, uid, rec, context=context)
39
40 query = ' '.join((select, sql_from, where, where2))
41
42 cr.execute(query, params + params2)
43 return cr.dictfetchall()
44
45 def _query_credit(self, cr, uid, rec, context=None):
46 """Select all move (credit>0) as candidate. """
47 select = self._select(rec)
48 sql_from = self._from(rec)
49 where, params = self._where(rec)
50 where += " AND account_move_line.credit > 0 "
51
52 where2, params2 = self._get_filter(cr, uid, rec, context=context)
53
54 query = ' '.join((select, sql_from, where, where2))
55
56 cr.execute(query, params + params2)
57 return cr.dictfetchall()
58
59 def _matchers(self, cr, uid, rec, move_line, context=None):
60 """
61 Return the values used as matchers to find the opposite lines
62
63 All the matcher keys in the dict must have their equivalent in
64 the `_opposite_matchers`.
65
66 The values of each matcher key will be searched in the
67 one returned by the `_opposite_matchers`
68
69 Must be inherited to implement the matchers for one method
70
71 As instance, it can return:
72 return ('ref', move_line['rec'])
73
74 or
75 return (('partner_id', move_line['partner_id']),
76 ('ref', "prefix_%s" % move_line['rec']))
77
78 All the matchers have to be found in the opposite lines
79 to consider them as "opposite"
80
81 The matchers will be evaluated in the same order as declared
82 vs the the opposite matchers, so you can gain performance by
83 declaring first the partners with the less computation.
84
85 All matchers should match with their opposite to be considered
86 as "matching".
87 So with the previous example, partner_id and ref have to be
88 equals on the opposite line matchers.
89
90 :return: tuple of tuples (key, value) where the keys are
91 the matchers keys
92 (must be the same than `_opposite_matchers` returns,
93 and their values to match in the opposite lines.
94 A matching key can have multiples values.
95 """
96 raise NotImplementedError
97
98 def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
99 """
100 Return the values of the opposite line used as matchers
101 so the line is matched
102
103 Must be inherited to implement the matchers for one method
104 It can be inherited to apply some formatting of fields
105 (strip(), lower() and so on)
106
107 This method is the counterpart of the `_matchers()` method.
108
109 Each matcher has to yield its value respecting the order
110 of the `_matchers()`.
111
112 When a matcher does not correspond, the next matchers won't
113 be evaluated so the ones which need the less computation
114 have to be executed first.
115
116 If the `_matchers()` returns:
117 (('partner_id', move_line['partner_id']),
118 ('ref', move_line['ref']))
119
120 Here, you should yield :
121 yield ('partner_id', move_line['partner_id'])
122 yield ('ref', move_line['ref'])
123
124 Note that a matcher can contain multiple values, as instance,
125 if for a move line, you want to search from its `ref` in the
126 `ref` or `name` fields of the opposite move lines, you have to
127 yield ('partner_id', move_line['partner_id'])
128 yield ('ref', (move_line['ref'], move_line['name'])
129
130 An OR is used between the values for the same key.
131 An AND is used between the differents keys.
132
133 :param dict move_line: values of the move_line
134 :yield: matchers as tuple ('matcher key', value(s))
135 """
136 raise NotImplementedError
137
138 @staticmethod
139 def _compare_values(key, value, opposite_value):
140 """Can be inherited to modify the equality condition
141 specifically according to the matcher key (maybe using
142 a like operator instead of equality on 'ref' as instance)
143 """
144 # consider that empty vals are not valid matchers
145 # it can still be inherited for some special cases
146 # where it would be allowed
147 if not (value and opposite_value):
148 return False
149
150 if value == opposite_value:
151 return True
152 return False
153
154 @staticmethod
155 def _compare_matcher_values(key, values, opposite_values):
156 """ Compare every values from a matcher vs an opposite matcher
157 and return True if it matches
158 """
159 for value, ovalue in product(values, opposite_values):
160 # we do not need to compare all values, if one matches
161 # we are done
162 if easy_reconcile_advanced._compare_values(key, value, ovalue):
163 return True
164 return False
165
166 @staticmethod
167 def _compare_matchers(matcher, opposite_matcher):
168 """
169 Prepare and check the matchers to compare
170 """
171 mkey, mvalue = matcher
172 omkey, omvalue = opposite_matcher
173 assert mkey == omkey, ("A matcher %s is compared with a matcher %s, "
174 " the _matchers and _opposite_matchers are probably wrong" %
175 (mkey, omkey))
176 if not isinstance(mvalue, (list, tuple)):
177 mvalue = mvalue,
178 if not isinstance(omvalue, (list, tuple)):
179 omvalue = omvalue,
180 return easy_reconcile_advanced._compare_matcher_values(mkey, mvalue, omvalue)
181
182 def _compare_opposite(self, cr, uid, rec, move_line, opposite_move_line,
183 matchers, context=None):
184 """ Iterate over the matchers of the move lines vs opposite move lines
185 and if they all match, return True.
186
187 If all the matchers match for a move line and an opposite move line,
188 they are candidate for a reconciliation.
189 """
190 opp_matchers = self._opposite_matchers(cr, uid, rec, opposite_move_line,
191 context=context)
192 for matcher in matchers:
193 try:
194 opp_matcher = opp_matchers.next()
195 except StopIteration:
196 # if you fall here, you probably missed to put a `yield`
197 # in `_opposite_matchers()`
198 raise ValueError("Missing _opposite_matcher: %s" % matcher[0])
199
200 if not self._compare_matchers(matcher, opp_matcher):
201 # if any of the matcher fails, the opposite line
202 # is not a valid counterpart
203 # directly returns so the next yield of _opposite_matchers
204 # are not evaluated
205 return False
206
207 return True
208
209 def _search_opposites(self, cr, uid, rec, move_line, opposite_move_lines, context=None):
210 """
211 Search the opposite move lines for a move line
212
213 :param dict move_line: the move line for which we search opposites
214 :param list opposite_move_lines: list of dict of move lines values, the move
215 lines we want to search for
216 :return: list of matching lines
217 """
218 matchers = self._matchers(cr, uid, rec, move_line, context=context)
219 return [op for op in opposite_move_lines if
220 self._compare_opposite(
221 cr, uid, rec, move_line, op, matchers, context=context)]
222
223 def _action_rec(self, cr, uid, rec, context=None):
224 credit_lines = self._query_credit(cr, uid, rec, context=context)
225 debit_lines = self._query_debit(cr, uid, rec, context=context)
226 return self._rec_auto_lines_advanced(
227 cr, uid, rec, credit_lines, debit_lines, context=context)
228
229 def _skip_line(self, cr, uid, rec, move_line, context=None):
230 """
231 When True is returned on some conditions, the credit move line
232 will be skipped for reconciliation. Can be inherited to
233 skip on some conditions. ie: ref or partner_id is empty.
234 """
235 return False
236
237 def _rec_auto_lines_advanced(self, cr, uid, rec, credit_lines, debit_lines, context=None):
238 """ Advanced reconciliation main loop """
239 reconciled_ids = []
240 partial_reconciled_ids = []
241 reconcile_groups = []
242
243 for credit_line in credit_lines:
244 if self._skip_line(cr, uid, rec, credit_line, context=context):
245 continue
246
247 opposite_lines = self._search_opposites(
248 cr, uid, rec, credit_line, debit_lines, context=context)
249
250 if not opposite_lines:
251 continue
252
253 opposite_ids = [l['id'] for l in opposite_lines]
254 line_ids = opposite_ids + [credit_line['id']]
255 for group in reconcile_groups:
256 if any([lid in group for lid in opposite_ids]):
257 group.update(line_ids)
258 break
259 else:
260 reconcile_groups.append(set(line_ids))
261
262 lines_by_id = dict([(l['id'], l) for l in credit_lines + debit_lines])
263 for reconcile_group_ids in reconcile_groups:
264 group_lines = [lines_by_id[lid] for lid in reconcile_group_ids]
265 reconciled, full = self._reconcile_lines(
266 cr, uid, rec, group_lines, allow_partial=True, context=context)
267 if reconciled and full:
268 reconciled_ids += reconcile_group_ids
269 elif reconciled:
270 partial_reconciled_ids += reconcile_group_ids
271
272 return reconciled_ids, partial_reconciled_ids
0273
=== added file 'account_advanced_reconcile/easy_reconcile.py'
--- account_advanced_reconcile/easy_reconcile.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile/easy_reconcile.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,36 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Guewen Baconnier
5# Copyright 2012 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from openerp.osv import orm
23
24
25class account_easy_reconcile_method(orm.Model):
26
27 _inherit = 'account.easy.reconcile.method'
28
29 def _get_all_rec_method(self, cr, uid, context=None):
30 methods = super(account_easy_reconcile_method, self).\
31 _get_all_rec_method(cr, uid, context=context)
32 methods += [
33 ('easy.reconcile.advanced.ref',
34 'Advanced. Partner and Ref.'),
35 ]
36 return methods
037
=== added file 'account_advanced_reconcile/easy_reconcile_view.xml'
--- account_advanced_reconcile/easy_reconcile_view.xml 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile/easy_reconcile_view.xml 2014-04-03 07:40:14 +0000
@@ -0,0 +1,19 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="0">
4 <record id="view_easy_reconcile_form" model="ir.ui.view">
5 <field name="name">account.easy.reconcile.form</field>
6 <field name="model">account.easy.reconcile</field>
7 <field name="inherit_id" ref="account_easy_reconcile.account_easy_reconcile_form"/>
8 <field name="arch" type="xml">
9 <page name="information" position="inside">
10 <group colspan="2" col="2">
11 <separator colspan="4" string="Advanced. Partner and Ref"/>
12 <label string="Match multiple debit vs multiple credit entries. Allow partial reconciliation.
13The lines should have the partner, the credit entry ref. is matched vs the debit entry ref. or name." colspan="4"/>
14 </group>
15 </page>
16 </field>
17 </record>
18 </data>
19</openerp>
020
=== added directory 'account_advanced_reconcile/i18n'
=== added file 'account_advanced_reconcile/i18n/account_advanced_reconcile.pot'
--- account_advanced_reconcile/i18n/account_advanced_reconcile.pot 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile/i18n/account_advanced_reconcile.pot 2014-04-03 07:40:14 +0000
@@ -0,0 +1,90 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_advanced_reconcile
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-21 11:54+0000\n"
10"PO-Revision-Date: 2014-01-21 11:54+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_advanced_reconcile
19#: field:easy.reconcile.advanced,partner_ids:0
20#: field:easy.reconcile.advanced.ref,partner_ids:0
21msgid "Restrict on partners"
22msgstr ""
23
24#. module: account_advanced_reconcile
25#: field:easy.reconcile.advanced,account_id:0
26#: field:easy.reconcile.advanced.ref,account_id:0
27msgid "Account"
28msgstr ""
29
30#. module: account_advanced_reconcile
31#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
32msgid "reconcile method for account_easy_reconcile"
33msgstr ""
34
35#. module: account_advanced_reconcile
36#: field:easy.reconcile.advanced,journal_id:0
37#: field:easy.reconcile.advanced.ref,journal_id:0
38msgid "Journal"
39msgstr ""
40
41#. module: account_advanced_reconcile
42#: field:easy.reconcile.advanced,account_profit_id:0
43#: field:easy.reconcile.advanced.ref,account_profit_id:0
44msgid "Account Profit"
45msgstr ""
46
47#. module: account_advanced_reconcile
48#: view:account.easy.reconcile:0
49msgid "Match multiple debit vs multiple credit entries. Allow partial reconciliation. The lines should have the partner, the credit entry ref. is matched vs the debit entry ref. or name."
50msgstr ""
51
52#. module: account_advanced_reconcile
53#: field:easy.reconcile.advanced,filter:0
54#: field:easy.reconcile.advanced.ref,filter:0
55msgid "Filter"
56msgstr ""
57
58#. module: account_advanced_reconcile
59#: view:account.easy.reconcile:0
60msgid "Advanced. Partner and Ref"
61msgstr ""
62
63#. module: account_advanced_reconcile
64#: field:easy.reconcile.advanced,date_base_on:0
65#: field:easy.reconcile.advanced.ref,date_base_on:0
66msgid "Date of reconciliation"
67msgstr ""
68
69#. module: account_advanced_reconcile
70#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
71msgid "easy.reconcile.advanced"
72msgstr ""
73
74#. module: account_advanced_reconcile
75#: field:easy.reconcile.advanced,account_lost_id:0
76#: field:easy.reconcile.advanced.ref,account_lost_id:0
77msgid "Account Lost"
78msgstr ""
79
80#. module: account_advanced_reconcile
81#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
82msgid "easy.reconcile.advanced.ref"
83msgstr ""
84
85#. module: account_advanced_reconcile
86#: field:easy.reconcile.advanced,write_off:0
87#: field:easy.reconcile.advanced.ref,write_off:0
88msgid "Write off allowed"
89msgstr ""
90
091
=== added file 'account_advanced_reconcile/i18n/fr.po'
--- account_advanced_reconcile/i18n/fr.po 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile/i18n/fr.po 2014-04-03 07:40:14 +0000
@@ -0,0 +1,98 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_advanced_reconcile
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 6.1\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-21 11:54+0000\n"
10"PO-Revision-Date: 2014-03-21 15:24+0000\n"
11"Last-Translator: Guewen Baconnier @ Camptocamp <Unknown>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: 8bit\n"
16"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
17"X-Generator: Launchpad (build 16967)\n"
18"Language: \n"
19
20#. module: account_advanced_reconcile
21#: field:easy.reconcile.advanced,partner_ids:0
22#: field:easy.reconcile.advanced.ref,partner_ids:0
23msgid "Restrict on partners"
24msgstr "Restriction sur les partenaires"
25
26#. module: account_advanced_reconcile
27#: field:easy.reconcile.advanced,account_id:0
28#: field:easy.reconcile.advanced.ref,account_id:0
29msgid "Account"
30msgstr "Compte"
31
32#. module: account_advanced_reconcile
33#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
34msgid "reconcile method for account_easy_reconcile"
35msgstr "Méthode de lettrage pour le module account_easy_reconcile"
36
37#. module: account_advanced_reconcile
38#: field:easy.reconcile.advanced,journal_id:0
39#: field:easy.reconcile.advanced.ref,journal_id:0
40msgid "Journal"
41msgstr "Journal"
42
43#. module: account_advanced_reconcile
44#: field:easy.reconcile.advanced,account_profit_id:0
45#: field:easy.reconcile.advanced.ref,account_profit_id:0
46msgid "Account Profit"
47msgstr "Compte de produit"
48
49#. module: account_advanced_reconcile
50#: view:account.easy.reconcile:0
51msgid ""
52"Match multiple debit vs multiple credit entries. Allow partial "
53"reconciliation. The lines should have the partner, the credit entry ref. is "
54"matched vs the debit entry ref. or name."
55msgstr ""
56"Le Lettrage peut s'effectuer sur plusieurs écritures de débit et crédit. Le "
57"Lettrage partiel est autorisé. Les écritures doivent avoir le même "
58"partenaire et la référence sur les écritures de crédit doit se retrouver "
59"dans la référence ou la description sur les écritures de débit."
60
61#. module: account_advanced_reconcile
62#: field:easy.reconcile.advanced,filter:0
63#: field:easy.reconcile.advanced.ref,filter:0
64msgid "Filter"
65msgstr "Filtre"
66
67#. module: account_advanced_reconcile
68#: view:account.easy.reconcile:0
69msgid "Advanced. Partner and Ref"
70msgstr "Avancé. Partenaire et Réf."
71
72#. module: account_advanced_reconcile
73#: field:easy.reconcile.advanced,date_base_on:0
74#: field:easy.reconcile.advanced.ref,date_base_on:0
75msgid "Date of reconciliation"
76msgstr "Date de lettrage"
77
78#. module: account_advanced_reconcile
79#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
80msgid "easy.reconcile.advanced"
81msgstr "easy.reconcile.advanced"
82
83#. module: account_advanced_reconcile
84#: field:easy.reconcile.advanced,account_lost_id:0
85#: field:easy.reconcile.advanced.ref,account_lost_id:0
86msgid "Account Lost"
87msgstr "Compte de charge"
88
89#. module: account_advanced_reconcile
90#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
91msgid "easy.reconcile.advanced.ref"
92msgstr "easy.reconcile.advanced.ref"
93
94#. module: account_advanced_reconcile
95#: field:easy.reconcile.advanced,write_off:0
96#: field:easy.reconcile.advanced.ref,write_off:0
97msgid "Write off allowed"
98msgstr "Écart autorisé"
099
=== added directory 'account_advanced_reconcile_transaction_ref'
=== added file 'account_advanced_reconcile_transaction_ref/__init__.py'
--- account_advanced_reconcile_transaction_ref/__init__.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile_transaction_ref/__init__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,24 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Romain Deheele. Copyright Camptocamp SA
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as
8# published by the Free Software Foundation, either version 3 of the
9# License, or (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU Affero General Public License for more details.
15#
16# You should have received a copy of the GNU Affero General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
19##############################################################################
20
21from . import account
22from . import easy_reconcile
23from . import base_advanced_reconciliation
24from . import advanced_reconciliation
025
=== added file 'account_advanced_reconcile_transaction_ref/__openerp__.py'
--- account_advanced_reconcile_transaction_ref/__openerp__.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile_transaction_ref/__openerp__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,40 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Romain Deheele. Copyright Camptocamp SA
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as
8# published by the Free Software Foundation, either version 3 of the
9# License, or (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU Affero General Public License for more details.
15#
16# You should have received a copy of the GNU Affero General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
19##############################################################################
20
21{'name': 'Advanced Reconcile Transaction Ref',
22 'description': """
23Advanced reconciliation method for the module account_easy_reconcile
24=================================================
25Reconcile rules with transaction_ref
26
27""",
28 'version': '1.0.1',
29 'author': 'Camptocamp',
30 'category': 'Finance',
31 'website': 'http://www.camptocamp.com',
32 'depends': ['account_advanced_reconcile'],
33 'data': ['easy_reconcile_view.xml'],
34 'demo': [],
35 'test': [], # To be ported or migrate to unit tests or scenarios
36 'auto_install': False,
37 'installable': True,
38 'images': []
39}
40# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
041
=== added file 'account_advanced_reconcile_transaction_ref/account.py'
--- account_advanced_reconcile_transaction_ref/account.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile_transaction_ref/account.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,54 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Romain Deheele
5# Copyright 2013 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from openerp.osv.orm import Model, fields
23
24class AccountMoveLine(Model):
25 """
26 Inherit account.move.line class in order to add transaction_ref field
27 """
28 _inherit = "account.move.line"
29 _columns = {
30 'transaction_ref': fields.char('Transaction Ref.', size=128),
31 }
32
33class AccountBankStatement(Model):
34 """
35 Inherit account.bank.statement class in order to set transaction_ref info on account.move.line
36 """
37 _inherit = "account.bank.statement"
38
39 def _prepare_move_line_vals(
40 self, cr, uid, st_line, move_id, debit, credit, currency_id=False,
41 amount_currency=False, account_id=False, analytic_id=False,
42 partner_id=False, context=None):
43
44 if context is None:
45 context = {}
46 res = super(AccountBankStatement, self)._prepare_move_line_vals(
47 cr, uid, st_line, move_id, debit, credit,
48 currency_id=currency_id,
49 amount_currency=amount_currency,
50 account_id=account_id,
51 analytic_id=analytic_id,
52 partner_id=partner_id, context=context)
53 res.update({'transaction_ref': st_line.ref})
54 return res
055
=== added file 'account_advanced_reconcile_transaction_ref/advanced_reconciliation.py'
--- account_advanced_reconcile_transaction_ref/advanced_reconciliation.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile_transaction_ref/advanced_reconciliation.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,43 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Romain Deheele. Copyright Camptocamp SA
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU Affero General Public License as
8# published by the Free Software Foundation, either version 3 of the
9# License, or (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU Affero General Public License for more details.
15#
16# You should have received a copy of the GNU Affero General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18#
19##############################################################################
20
21from openerp.osv import orm
22
23
24class easy_reconcile_advanced_transaction_ref(orm.TransientModel):
25
26 _name = 'easy.reconcile.advanced.transaction_ref'
27 _inherit = 'easy.reconcile.advanced'
28
29 def _skip_line(self, cr, uid, rec, move_line, context=None):
30 """
31 When True is returned on some conditions, the credit move line
32 will be skipped for reconciliation. Can be inherited to
33 skip on some conditions. ie: ref or partner_id is empty.
34 """
35 return not (move_line.get('ref') and move_line.get('partner_id'))
36
37 def _matchers(self, cr, uid, rec, move_line, context=None):
38 return (('partner_id', move_line['partner_id']),
39 ('ref', move_line['transaction_ref'].lower().strip()))
40
41 def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
42 yield ('partner_id', move_line['partner_id'])
43 yield ('ref', (move_line['transaction_ref'] or '').lower().strip())
044
=== added file 'account_advanced_reconcile_transaction_ref/base_advanced_reconciliation.py'
--- account_advanced_reconcile_transaction_ref/base_advanced_reconciliation.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile_transaction_ref/base_advanced_reconciliation.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,46 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Romain Deheele
5# Copyright 2013 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from itertools import product
23from openerp.osv import orm
24
25
26class easy_reconcile_advanced(orm.AbstractModel):
27
28 _inherit = 'easy.reconcile.advanced'
29
30 def _base_columns(self, rec):
31 """ Mandatory columns for move lines queries
32 An extra column aliased as ``key`` should be defined
33 in each query."""
34 aml_cols = (
35 'id',
36 'debit',
37 'credit',
38 'date',
39 'period_id',
40 'ref',
41 'name',
42 'partner_id',
43 'account_id',
44 'move_id',
45 'transaction_ref')
46 return ["account_move_line.%s" % col for col in aml_cols]
047
=== added file 'account_advanced_reconcile_transaction_ref/easy_reconcile.py'
--- account_advanced_reconcile_transaction_ref/easy_reconcile.py 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile_transaction_ref/easy_reconcile.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,37 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Romain Deheele
5# Copyright 2013 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from openerp.osv import orm
23
24
25class account_easy_reconcile_method(orm.Model):
26
27 _inherit = 'account.easy.reconcile.method'
28
29 def _get_all_rec_method(self, cr, uid, context=None):
30 methods = super(account_easy_reconcile_method, self).\
31 _get_all_rec_method(cr, uid, context=context)
32 methods += [
33 ('easy.reconcile.advanced.transaction_ref',
34 'Advanced. Partner and Transaction Ref.'),
35 ]
36 return methods
37
038
=== added file 'account_advanced_reconcile_transaction_ref/easy_reconcile_view.xml'
--- account_advanced_reconcile_transaction_ref/easy_reconcile_view.xml 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile_transaction_ref/easy_reconcile_view.xml 2014-04-03 07:40:14 +0000
@@ -0,0 +1,19 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="0">
4 <record id="view_easy_reconcile_form" model="ir.ui.view">
5 <field name="name">account.easy.reconcile.form</field>
6 <field name="model">account.easy.reconcile</field>
7 <field name="inherit_id" ref="account_easy_reconcile.account_easy_reconcile_form"/>
8 <field name="arch" type="xml">
9 <page name="information" position="inside">
10 <group colspan="2" col="2">
11 <separator colspan="4" string="Advanced. Partner and Transaction Ref"/>
12 <label string="Match multiple debit vs multiple credit entries. Allow partial reconciliation.
13The lines should have the partner, the credit entry transaction ref. is matched vs the debit entry transaction ref. or name." colspan="4"/>
14 </group>
15 </page>
16 </field>
17 </record>
18 </data>
19</openerp>
020
=== added directory 'account_advanced_reconcile_transaction_ref/i18n'
=== added file 'account_advanced_reconcile_transaction_ref/i18n/account_advanced_reconcile_transaction_ref.pot'
--- account_advanced_reconcile_transaction_ref/i18n/account_advanced_reconcile_transaction_ref.pot 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile_transaction_ref/i18n/account_advanced_reconcile_transaction_ref.pot 2014-04-03 07:40:14 +0000
@@ -0,0 +1,97 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_advanced_reconcile_transaction_ref
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-21 11:55+0000\n"
10"PO-Revision-Date: 2014-01-21 11:55+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_advanced_reconcile_transaction_ref
19#: field:easy.reconcile.advanced.transaction_ref,partner_ids:0
20msgid "Restrict on partners"
21msgstr ""
22
23#. module: account_advanced_reconcile_transaction_ref
24#: field:easy.reconcile.advanced.transaction_ref,account_id:0
25msgid "Account"
26msgstr ""
27
28#. module: account_advanced_reconcile_transaction_ref
29#: view:account.easy.reconcile:0
30msgid "Advanced. Partner and Transaction Ref"
31msgstr ""
32
33#. module: account_advanced_reconcile_transaction_ref
34#: view:account.easy.reconcile:0
35msgid "Match multiple debit vs multiple credit entries. Allow partial reconciliation. The lines should have the partner, the credit entry transaction ref. is matched vs the debit entry transaction ref. or name."
36msgstr ""
37
38#. module: account_advanced_reconcile_transaction_ref
39#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced_transaction_ref
40msgid "easy.reconcile.advanced.transaction_ref"
41msgstr ""
42
43#. module: account_advanced_reconcile_transaction_ref
44#: field:account.move.line,transaction_ref:0
45msgid "Transaction Ref."
46msgstr ""
47
48#. module: account_advanced_reconcile_transaction_ref
49#: field:easy.reconcile.advanced.transaction_ref,journal_id:0
50msgid "Journal"
51msgstr ""
52
53#. module: account_advanced_reconcile_transaction_ref
54#: field:easy.reconcile.advanced.transaction_ref,account_profit_id:0
55msgid "Account Profit"
56msgstr ""
57
58#. module: account_advanced_reconcile_transaction_ref
59#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_bank_statement
60msgid "Bank Statement"
61msgstr ""
62
63#. module: account_advanced_reconcile_transaction_ref
64#: field:easy.reconcile.advanced.transaction_ref,filter:0
65msgid "Filter"
66msgstr ""
67
68#. module: account_advanced_reconcile_transaction_ref
69#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_easy_reconcile_method
70msgid "reconcile method for account_easy_reconcile"
71msgstr ""
72
73#. module: account_advanced_reconcile_transaction_ref
74#: field:easy.reconcile.advanced.transaction_ref,date_base_on:0
75msgid "Date of reconciliation"
76msgstr ""
77
78#. module: account_advanced_reconcile_transaction_ref
79#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_move_line
80msgid "Journal Items"
81msgstr ""
82
83#. module: account_advanced_reconcile_transaction_ref
84#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced
85msgid "easy.reconcile.advanced"
86msgstr ""
87
88#. module: account_advanced_reconcile_transaction_ref
89#: field:easy.reconcile.advanced.transaction_ref,account_lost_id:0
90msgid "Account Lost"
91msgstr ""
92
93#. module: account_advanced_reconcile_transaction_ref
94#: field:easy.reconcile.advanced.transaction_ref,write_off:0
95msgid "Write off allowed"
96msgstr ""
97
098
=== added file 'account_advanced_reconcile_transaction_ref/i18n/fr.po'
--- account_advanced_reconcile_transaction_ref/i18n/fr.po 1970-01-01 00:00:00 +0000
+++ account_advanced_reconcile_transaction_ref/i18n/fr.po 2014-04-03 07:40:14 +0000
@@ -0,0 +1,106 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_advanced_reconcile_transaction_ref
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-21 11:55+0000\n"
10"PO-Revision-Date: 2014-03-21 15:25+0000\n"
11"Last-Translator: Vincent Renaville@camptocamp "
12"<vincent.renaville@camptocamp.com>\n"
13"Language-Team: \n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
17"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
18"X-Generator: Launchpad (build 16967)\n"
19
20#. module: account_advanced_reconcile_transaction_ref
21#: field:easy.reconcile.advanced.transaction_ref,partner_ids:0
22msgid "Restrict on partners"
23msgstr "Restriction sur les partenaires"
24
25#. module: account_advanced_reconcile_transaction_ref
26#: field:easy.reconcile.advanced.transaction_ref,account_id:0
27msgid "Account"
28msgstr "Compte"
29
30#. module: account_advanced_reconcile_transaction_ref
31#: view:account.easy.reconcile:0
32msgid "Advanced. Partner and Transaction Ref"
33msgstr "Avancé. Partenaire et Référence de transaction"
34
35#. module: account_advanced_reconcile_transaction_ref
36#: view:account.easy.reconcile:0
37msgid ""
38"Match multiple debit vs multiple credit entries. Allow partial "
39"reconciliation. The lines should have the partner, the credit entry "
40"transaction ref. is matched vs the debit entry transaction ref. or name."
41msgstr ""
42"Le lettrage peut s'effectuer sur plusieurs écritures de débit et crédit. Le "
43"Lettrage partiel est autorisé. Les écritures doivent avoir le même "
44"partenaire et la même référence de transaction sur les écritures de crédit "
45"doit se retrouver dans la référence de transaction ou la description sur les "
46"écritures de débit."
47
48#. module: account_advanced_reconcile_transaction_ref
49#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced_transaction_ref
50msgid "easy.reconcile.advanced.transaction_ref"
51msgstr "easy.reconcile.advanced.transaction_ref"
52
53#. module: account_advanced_reconcile_transaction_ref
54#: field:account.move.line,transaction_ref:0
55msgid "Transaction Ref."
56msgstr "Réf. de transaction"
57
58#. module: account_advanced_reconcile_transaction_ref
59#: field:easy.reconcile.advanced.transaction_ref,journal_id:0
60msgid "Journal"
61msgstr "Journal"
62
63#. module: account_advanced_reconcile_transaction_ref
64#: field:easy.reconcile.advanced.transaction_ref,account_profit_id:0
65msgid "Account Profit"
66msgstr "Compte de produit"
67
68#. module: account_advanced_reconcile_transaction_ref
69#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_bank_statement
70msgid "Bank Statement"
71msgstr "Relevé bancaire"
72
73#. module: account_advanced_reconcile_transaction_ref
74#: field:easy.reconcile.advanced.transaction_ref,filter:0
75msgid "Filter"
76msgstr "Filtre"
77
78#. module: account_advanced_reconcile_transaction_ref
79#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_easy_reconcile_method
80msgid "reconcile method for account_easy_reconcile"
81msgstr "Méthode de lettrage pour le module account_easy_reconcile"
82
83#. module: account_advanced_reconcile_transaction_ref
84#: field:easy.reconcile.advanced.transaction_ref,date_base_on:0
85msgid "Date of reconciliation"
86msgstr "Date de lettrage"
87
88#. module: account_advanced_reconcile_transaction_ref
89#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_move_line
90msgid "Journal Items"
91msgstr "Écritures comptables"
92
93#. module: account_advanced_reconcile_transaction_ref
94#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced
95msgid "easy.reconcile.advanced"
96msgstr "easy.reconcile.advanced"
97
98#. module: account_advanced_reconcile_transaction_ref
99#: field:easy.reconcile.advanced.transaction_ref,account_lost_id:0
100msgid "Account Lost"
101msgstr "Compte de charge"
102
103#. module: account_advanced_reconcile_transaction_ref
104#: field:easy.reconcile.advanced.transaction_ref,write_off:0
105msgid "Write off allowed"
106msgstr "Ecart autorisé"
0107
=== added directory 'account_easy_reconcile'
=== added file 'account_easy_reconcile/__init__.py'
--- account_easy_reconcile/__init__.py 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/__init__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,25 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright 2012 Camptocamp SA (Guewen Baconnier)
5# Copyright (C) 2010 Sébastien Beau
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22import easy_reconcile
23import base_reconciliation
24import simple_reconciliation
25import easy_reconcile_history
026
=== added file 'account_easy_reconcile/__openerp__.py'
--- account_easy_reconcile/__openerp__.py 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/__openerp__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,66 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright 2012 Camptocamp SA (Guewen Baconnier)
5# Copyright (C) 2010 Sébastien Beau
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22{
23 "name": "Easy Reconcile",
24 "version": "1.3.1",
25 "depends": ["account"],
26 "author": "Akretion,Camptocamp",
27 "description": """
28Easy Reconcile
29==============
30
31This is a shared work between Akretion and Camptocamp
32in order to provide:
33 - reconciliation facilities for big volume of transactions
34 - setup different profiles of reconciliation by account
35 - each profile can use many methods of reconciliation
36 - this module is also a base to create others
37 reconciliation methods which can plug in the profiles
38 - a profile a reconciliation can be run manually
39 or by a cron
40 - monitoring of reconciliation runs with an history
41 which keep track of the reconciled Journal items
42
432 simple reconciliation methods are integrated
44in this module, the simple reconciliations works
45on 2 lines (1 debit / 1 credit) and do not allow
46partial reconcilation, they also match on 1 key,
47partner or Journal item name.
48
49You may be interested to install also the
50``account_advanced_reconciliation`` module.
51This latter add more complex reconciliations,
52allows multiple lines and partial.
53
54""",
55 "website": "http://www.akretion.com/",
56 "category": "Finance",
57 "demo_xml": [],
58 "data": ["easy_reconcile.xml",
59 "easy_reconcile_history_view.xml",
60 "security/ir_rule.xml",
61 "security/ir.model.access.csv"],
62 'license': 'AGPL-3',
63 "auto_install": False,
64 "installable": True,
65
66}
067
=== added file 'account_easy_reconcile/base_reconciliation.py'
--- account_easy_reconcile/base_reconciliation.py 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/base_reconciliation.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,208 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
5# Copyright (C) 2010 Sébastien Beau
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from openerp.osv import fields, orm
23from operator import itemgetter, attrgetter
24
25
26class easy_reconcile_base(orm.AbstractModel):
27 """Abstract Model for reconciliation methods"""
28
29 _name = 'easy.reconcile.base'
30
31 _inherit = 'easy.reconcile.options'
32
33 _columns = {
34 'account_id': fields.many2one(
35 'account.account', 'Account', required=True),
36 'partner_ids': fields.many2many(
37 'res.partner', string="Restrict on partners"),
38 # other columns are inherited from easy.reconcile.options
39 }
40
41 def automatic_reconcile(self, cr, uid, ids, context=None):
42 """ Reconciliation method called from the view.
43
44 :return: list of reconciled ids, list of partially reconciled items
45 """
46 if isinstance(ids, (int, long)):
47 ids = [ids]
48 assert len(ids) == 1, "Has to be called on one id"
49 rec = self.browse(cr, uid, ids[0], context=context)
50 return self._action_rec(cr, uid, rec, context=context)
51
52 def _action_rec(self, cr, uid, rec, context=None):
53 """ Must be inherited to implement the reconciliation
54
55 :return: list of reconciled ids
56 """
57 raise NotImplementedError
58
59 def _base_columns(self, rec):
60 """ Mandatory columns for move lines queries
61 An extra column aliased as ``key`` should be defined
62 in each query."""
63 aml_cols = (
64 'id',
65 'debit',
66 'credit',
67 'date',
68 'period_id',
69 'ref',
70 'name',
71 'partner_id',
72 'account_id',
73 'move_id')
74 return ["account_move_line.%s" % col for col in aml_cols]
75
76 def _select(self, rec, *args, **kwargs):
77 return "SELECT %s" % ', '.join(self._base_columns(rec))
78
79 def _from(self, rec, *args, **kwargs):
80 return "FROM account_move_line"
81
82 def _where(self, rec, *args, **kwargs):
83 where = ("WHERE account_move_line.account_id = %s "
84 "AND account_move_line.reconcile_id IS NULL ")
85 # it would be great to use dict for params
86 # but as we use _where_calc in _get_filter
87 # which returns a list, we have to
88 # accomodate with that
89 params = [rec.account_id.id]
90
91 if rec.partner_ids:
92 where += " AND account_move_line.partner_id IN %s"
93 params.append(tuple([l.id for l in rec.partner_ids]))
94 return where, params
95
96 def _get_filter(self, cr, uid, rec, context):
97 ml_obj = self.pool.get('account.move.line')
98 where = ''
99 params = []
100 if rec.filter:
101 dummy, where, params = ml_obj._where_calc(
102 cr, uid, eval(rec.filter), context=context).get_sql()
103 if where:
104 where = " AND %s" % where
105 return where, params
106
107 def _below_writeoff_limit(self, cr, uid, rec, lines,
108 writeoff_limit, context=None):
109 precision = self.pool.get('decimal.precision').precision_get(
110 cr, uid, 'Account')
111 keys = ('debit', 'credit')
112 sums = reduce(
113 lambda line, memo:
114 dict((key, value + memo[key])
115 for key, value
116 in line.iteritems()
117 if key in keys), lines)
118
119 debit, credit = sums['debit'], sums['credit']
120 writeoff_amount = round(debit - credit, precision)
121 return bool(writeoff_limit >= abs(writeoff_amount)), debit, credit
122
123 def _get_rec_date(self, cr, uid, rec, lines,
124 based_on='end_period_last_credit', context=None):
125 period_obj = self.pool.get('account.period')
126
127 def last_period(mlines):
128 period_ids = [ml['period_id'] for ml in mlines]
129 periods = period_obj.browse(
130 cr, uid, period_ids, context=context)
131 return max(periods, key=attrgetter('date_stop'))
132
133 def last_date(mlines):
134 return max(mlines, key=itemgetter('date'))
135
136 def credit(mlines):
137 return [l for l in mlines if l['credit'] > 0]
138
139 def debit(mlines):
140 return [l for l in mlines if l['debit'] > 0]
141
142 if based_on == 'end_period_last_credit':
143 return last_period(credit(lines)).date_stop
144 if based_on == 'end_period':
145 return last_period(lines).date_stop
146 elif based_on == 'newest':
147 return last_date(lines)['date']
148 elif based_on == 'newest_credit':
149 return last_date(credit(lines))['date']
150 elif based_on == 'newest_debit':
151 return last_date(debit(lines))['date']
152 # reconcilation date will be today
153 # when date is None
154 return None
155
156 def _reconcile_lines(self, cr, uid, rec, lines, allow_partial=False, context=None):
157 """ Try to reconcile given lines
158
159 :param list lines: list of dict of move lines, they must at least
160 contain values for : id, debit, credit
161 :param boolean allow_partial: if True, partial reconciliation will be
162 created, otherwise only Full
163 reconciliation will be created
164 :return: tuple of boolean values, first item is wether the items
165 have been reconciled or not,
166 the second is wether the reconciliation is full (True)
167 or partial (False)
168 """
169 if context is None:
170 context = {}
171
172 ml_obj = self.pool.get('account.move.line')
173 writeoff = rec.write_off
174
175 line_ids = [l['id'] for l in lines]
176 below_writeoff, sum_debit, sum_credit = self._below_writeoff_limit(
177 cr, uid, rec, lines, writeoff, context=context)
178 date = self._get_rec_date(
179 cr, uid, rec, lines, rec.date_base_on, context=context)
180
181 rec_ctx = dict(context, date_p=date)
182 if below_writeoff:
183 if sum_credit < sum_debit:
184 writeoff_account_id = rec.account_profit_id.id
185 else:
186 writeoff_account_id = rec.account_lost_id.id
187
188 period_id = self.pool.get('account.period').find(
189 cr, uid, dt=date, context=context)[0]
190
191 ml_obj.reconcile(
192 cr, uid,
193 line_ids,
194 type='auto',
195 writeoff_acc_id=writeoff_account_id,
196 writeoff_period_id=period_id,
197 writeoff_journal_id=rec.journal_id.id,
198 context=rec_ctx)
199 return True, True
200 elif allow_partial:
201 ml_obj.reconcile_partial(
202 cr, uid,
203 line_ids,
204 type='manual',
205 context=rec_ctx)
206 return True, False
207
208 return False, False
0209
=== added file 'account_easy_reconcile/easy_reconcile.py'
--- account_easy_reconcile/easy_reconcile.py 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/easy_reconcile.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,338 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
5# Copyright (C) 2010 Sébastien Beau
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from openerp.osv import fields, osv, orm
23from openerp.tools.translate import _
24from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
25from openerp.tools.translate import _
26
27
28class easy_reconcile_options(orm.AbstractModel):
29 """Options of a reconciliation profile
30
31 Columns shared by the configuration of methods
32 and by the reconciliation wizards.
33 This allows decoupling of the methods and the
34 wizards and allows to launch the wizards alone
35 """
36
37 _name = 'easy.reconcile.options'
38
39 def _get_rec_base_date(self, cr, uid, context=None):
40 return [('end_period_last_credit', 'End of period of most recent credit'),
41 ('newest', 'Most recent move line'),
42 ('actual', 'Today'),
43 ('end_period', 'End of period of most recent move line'),
44 ('newest_credit', 'Date of most recent credit'),
45 ('newest_debit', 'Date of most recent debit')]
46
47 _columns = {
48 'write_off': fields.float('Write off allowed'),
49 'account_lost_id': fields.many2one(
50 'account.account', 'Account Lost'),
51 'account_profit_id': fields.many2one(
52 'account.account', 'Account Profit'),
53 'journal_id': fields.many2one(
54 'account.journal', 'Journal'),
55 'date_base_on': fields.selection(
56 _get_rec_base_date,
57 required=True,
58 string='Date of reconciliation'),
59 'filter': fields.char('Filter', size=128),
60 }
61
62 _defaults = {
63 'write_off': 0.,
64 'date_base_on': 'end_period_last_credit',
65 }
66
67
68class account_easy_reconcile_method(orm.Model):
69
70 _name = 'account.easy.reconcile.method'
71 _description = 'reconcile method for account_easy_reconcile'
72
73 _inherit = 'easy.reconcile.options'
74
75 _order = 'sequence'
76
77 def _get_all_rec_method(self, cr, uid, context=None):
78 return [
79 ('easy.reconcile.simple.name', 'Simple. Amount and Name'),
80 ('easy.reconcile.simple.partner', 'Simple. Amount and Partner'),
81 ('easy.reconcile.simple.reference', 'Simple. Amount and Reference'),
82 ]
83
84 def _get_rec_method(self, cr, uid, context=None):
85 return self._get_all_rec_method(cr, uid, context=None)
86
87 _columns = {
88 'name': fields.selection(
89 _get_rec_method, 'Type', required=True),
90 'sequence': fields.integer(
91 'Sequence',
92 required=True,
93 help="The sequence field is used to order "
94 "the reconcile method"),
95 'task_id': fields.many2one(
96 'account.easy.reconcile',
97 string='Task',
98 required=True,
99 ondelete='cascade'),
100 'company_id': fields.related('task_id','company_id',
101 relation='res.company',
102 type='many2one',
103 string='Company',
104 store=True,
105 readonly=True),
106 }
107
108 _defaults = {
109 'sequence': 1,
110 }
111
112 def init(self, cr):
113 """ Migration stuff
114
115 Name is not anymore methods names but the name
116 of the model which does the reconciliation
117 """
118 cr.execute("""
119 UPDATE account_easy_reconcile_method
120 SET name = 'easy.reconcile.simple.partner'
121 WHERE name = 'action_rec_auto_partner'
122 """)
123 cr.execute("""
124 UPDATE account_easy_reconcile_method
125 SET name = 'easy.reconcile.simple.name'
126 WHERE name = 'action_rec_auto_name'
127 """)
128
129
130class account_easy_reconcile(orm.Model):
131
132 _name = 'account.easy.reconcile'
133 _description = 'account easy reconcile'
134
135 def _get_total_unrec(self, cr, uid, ids, name, arg, context=None):
136 obj_move_line = self.pool.get('account.move.line')
137 res = {}
138 for task in self.browse(cr, uid, ids, context=context):
139 res[task.id] = len(obj_move_line.search(
140 cr, uid,
141 [('account_id', '=', task.account.id),
142 ('reconcile_id', '=', False),
143 ('reconcile_partial_id', '=', False)],
144 context=context))
145 return res
146
147 def _get_partial_rec(self, cr, uid, ids, name, arg, context=None):
148 obj_move_line = self.pool.get('account.move.line')
149 res = {}
150 for task in self.browse(cr, uid, ids, context=context):
151 res[task.id] = len(obj_move_line.search(
152 cr, uid,
153 [('account_id', '=', task.account.id),
154 ('reconcile_id', '=', False),
155 ('reconcile_partial_id', '!=', False)],
156 context=context))
157 return res
158
159 def _last_history(self, cr, uid, ids, name, args, context=None):
160 result = {}
161 for history in self.browse(cr, uid, ids, context=context):
162 result[history.id] = False
163 if history.history_ids:
164 # history is sorted by date desc
165 result[history.id] = history.history_ids[0].id
166 return result
167
168 _columns = {
169 'name': fields.char('Name', required=True),
170 'account': fields.many2one(
171 'account.account', 'Account', required=True),
172 'reconcile_method': fields.one2many(
173 'account.easy.reconcile.method', 'task_id', 'Method'),
174 'unreconciled_count': fields.function(
175 _get_total_unrec, type='integer', string='Unreconciled Items'),
176 'reconciled_partial_count': fields.function(
177 _get_partial_rec,
178 type='integer',
179 string='Partially Reconciled Items'),
180 'history_ids': fields.one2many(
181 'easy.reconcile.history',
182 'easy_reconcile_id',
183 string='History',
184 readonly=True),
185 'last_history':
186 fields.function(
187 _last_history,
188 string='Last History',
189 type='many2one',
190 relation='easy.reconcile.history',
191 readonly=True),
192 'company_id': fields.many2one('res.company', 'Company'),
193 }
194
195 def _prepare_run_transient(self, cr, uid, rec_method, context=None):
196 return {'account_id': rec_method.task_id.account.id,
197 'write_off': rec_method.write_off,
198 'account_lost_id': (rec_method.account_lost_id and
199 rec_method.account_lost_id.id),
200 'account_profit_id': (rec_method.account_profit_id and
201 rec_method.account_profit_id.id),
202 'journal_id': (rec_method.journal_id and
203 rec_method.journal_id.id),
204 'date_base_on': rec_method.date_base_on,
205 'filter': rec_method.filter}
206
207 def run_reconcile(self, cr, uid, ids, context=None):
208 def find_reconcile_ids(fieldname, move_line_ids):
209 if not move_line_ids:
210 return []
211 sql = ("SELECT DISTINCT " + fieldname +
212 " FROM account_move_line "
213 " WHERE id in %s "
214 " AND " + fieldname + " IS NOT NULL")
215 cr.execute(sql, (tuple(move_line_ids),))
216 res = cr.fetchall()
217 return [row[0] for row in res]
218
219 for rec in self.browse(cr, uid, ids, context=context):
220 all_ml_rec_ids = []
221 all_ml_partial_ids = []
222
223 for method in rec.reconcile_method:
224 rec_model = self.pool.get(method.name)
225 auto_rec_id = rec_model.create(
226 cr, uid,
227 self._prepare_run_transient(
228 cr, uid, method, context=context),
229 context=context)
230
231 ml_rec_ids, ml_partial_ids = rec_model.automatic_reconcile(
232 cr, uid, auto_rec_id, context=context)
233
234 all_ml_rec_ids += ml_rec_ids
235 all_ml_partial_ids += ml_partial_ids
236
237 reconcile_ids = find_reconcile_ids(
238 'reconcile_id', all_ml_rec_ids)
239 partial_ids = find_reconcile_ids(
240 'reconcile_partial_id', all_ml_partial_ids)
241
242 self.pool.get('easy.reconcile.history').create(
243 cr,
244 uid,
245 {'easy_reconcile_id': rec.id,
246 'date': fields.datetime.now(),
247 'reconcile_ids': [(4, rid) for rid in reconcile_ids],
248 'reconcile_partial_ids': [(4, rid) for rid in partial_ids]},
249 context=context)
250 return True
251
252 def _no_history(self, cr, uid, rec, context=None):
253 """ Raise an `osv.except_osv` error, supposed to
254 be called when there is no history on the reconciliation
255 task.
256 """
257 raise osv.except_osv(
258 _('Error'),
259 _('There is no history of reconciled '
260 'items on the task: %s.') % rec.name)
261
262 def _open_move_line_list(sefl, cr, uid, move_line_ids, name, context=None):
263 return {
264 'name': name,
265 'view_mode': 'tree,form',
266 'view_id': False,
267 'view_type': 'form',
268 'res_model': 'account.move.line',
269 'type': 'ir.actions.act_window',
270 'nodestroy': True,
271 'target': 'current',
272 'domain': unicode([('id', 'in', move_line_ids)]),
273 }
274
275 def open_unreconcile(self, cr, uid, ids, context=None):
276 """ Open the view of move line with the unreconciled move lines
277 """
278
279 assert len(ids) == 1 , \
280 "You can only open entries from one profile at a time"
281
282 obj_move_line = self.pool.get('account.move.line')
283 res = {}
284 for task in self.browse(cr, uid, ids, context=context):
285 line_ids = obj_move_line.search(
286 cr, uid,
287 [('account_id', '=', task.account.id),
288 ('reconcile_id', '=', False),
289 ('reconcile_partial_id', '=', False)],
290 context=context)
291
292 name = _('Unreconciled items')
293 return self._open_move_line_list(cr, uid, line_ids, name, context=context)
294
295 def open_partial_reconcile(self, cr, uid, ids, context=None):
296 """ Open the view of move line with the unreconciled move lines
297 """
298
299 assert len(ids) == 1 , \
300 "You can only open entries from one profile at a time"
301
302 obj_move_line = self.pool.get('account.move.line')
303 res = {}
304 for task in self.browse(cr, uid, ids, context=context):
305 line_ids = obj_move_line.search(
306 cr, uid,
307 [('account_id', '=', task.account.id),
308 ('reconcile_id', '=', False),
309 ('reconcile_partial_id', '!=', False)],
310 context=context)
311 name = _('Partial reconciled items')
312 return self._open_move_line_list(cr, uid, line_ids, name, context=context)
313
314 def last_history_reconcile(self, cr, uid, rec_id, context=None):
315 """ Get the last history record for this reconciliation profile
316 and return the action which opens move lines reconciled
317 """
318 if isinstance(rec_id, (tuple, list)):
319 assert len(rec_id) == 1, \
320 "Only 1 id expected"
321 rec_id = rec_id[0]
322 rec = self.browse(cr, uid, rec_id, context=context)
323 if not rec.last_history:
324 self._no_history(cr, uid, rec, context=context)
325 return rec.last_history.open_reconcile()
326
327 def last_history_partial(self, cr, uid, rec_id, context=None):
328 """ Get the last history record for this reconciliation profile
329 and return the action which opens move lines reconciled
330 """
331 if isinstance(rec_id, (tuple, list)):
332 assert len(rec_id) == 1, \
333 "Only 1 id expected"
334 rec_id = rec_id[0]
335 rec = self.browse(cr, uid, rec_id, context=context)
336 if not rec.last_history:
337 self._no_history(cr, uid, rec, context=context)
338 return rec.last_history.open_partial()
0339
=== added file 'account_easy_reconcile/easy_reconcile.xml'
--- account_easy_reconcile/easy_reconcile.xml 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/easy_reconcile.xml 2014-04-03 07:40:14 +0000
@@ -0,0 +1,162 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<openerp>
3<data>
4
5 <!-- account.easy.reconcile view -->
6 <record id="account_easy_reconcile_form" model="ir.ui.view">
7 <field name="name">account.easy.reconcile.form</field>
8 <field name="priority">20</field>
9 <field name="model">account.easy.reconcile</field>
10 <field name="arch" type="xml">
11 <form string="Automatic Easy Reconcile" version="7.0">
12 <header>
13 <button name="run_reconcile" class="oe_highlight"
14 string="Start Auto Reconciliation" type="object"/>
15 <button icon="STOCK_JUMP_TO" name="last_history_reconcile"
16 string="Display items reconciled on the last run"
17 type="object"/>
18 <button icon="STOCK_JUMP_TO" name="last_history_partial"
19 string="Display items partially reconciled on the last run"
20 type="object"/>
21 </header>
22 <sheet>
23 <separator colspan="4" string="Profile Information" />
24 <group>
25 <group>
26 <field name="name" select="1"/>
27 <field name="account"/>
28 <field name="company_id" groups="base.group_multi_company"/>
29 </group>
30 <group>
31 <group>
32 <field name="unreconciled_count"/>
33 <button icon="STOCK_JUMP_TO" name="open_unreconcile"
34 string="Go to unreconciled items" type="object"/>
35 </group>
36 <group>
37 <field name="reconciled_partial_count"/>
38 <button icon="STOCK_JUMP_TO" name="open_partial_reconcile"
39 string="Go to partial reconciled items" type="object"/>
40 </group>
41 </group>
42 </group>
43 <notebook colspan="4">
44 <page name="methods" string="Configuration">
45 <field name="reconcile_method" colspan = "4" nolabel="1"/>
46 </page>
47 <page name="history" string="History">
48 <field name="history_ids" nolabel="1">
49 <tree string="Automatic Easy Reconcile History">
50 <field name="date"/>
51 <button icon="STOCK_JUMP_TO" name="open_reconcile"
52 string="Go to reconciled items" type="object"/>
53 <button icon="STOCK_JUMP_TO" name="open_partial"
54 string="Go to partially reconciled items" type="object"/>
55 </tree>
56 </field>
57 </page>
58 <page name="information" string="Information">
59 <separator colspan="4" string="Simple. Amount and Name"/>
60 <label string="Match one debit line vs one credit line. Do not allow partial reconciliation.
61The lines should have the same amount (with the write-off) and the same name to be reconciled." colspan="4"/>
62
63 <separator colspan="4" string="Simple. Amount and Partner"/>
64 <label string="Match one debit line vs one credit line. Do not allow partial reconciliation.
65The lines should have the same amount (with the write-off) and the same partner to be reconciled." colspan="4"/>
66
67 <separator colspan="4" string="Simple. Amount and Reference"/>
68 <label string="Match one debit line vs one credit line. Do not allow partial reconciliation.
69The lines should have the same amount (with the write-off) and the same reference to be reconciled." colspan="4"/>
70
71 </page>
72 </notebook>
73 </sheet>
74 </form>
75 </field>
76 </record>
77
78 <record id="account_easy_reconcile_tree" model="ir.ui.view">
79 <field name="name">account.easy.reconcile.tree</field>
80 <field name="priority">20</field>
81 <field name="model">account.easy.reconcile</field>
82 <field name="arch" type="xml">
83 <tree string="Automatic Easy Reconcile">
84 <field name="name"/>
85 <field name="account"/>
86 <field name="company_id" groups="base.group_multi_company"/>
87 <field name="unreconciled_count"/>
88 <field name="reconciled_partial_count"/>
89 <button icon="gtk-ok" name="run_reconcile" colspan="4"
90 string="Start Auto Reconcilation" type="object"/>
91 <button icon="STOCK_JUMP_TO" name="last_history_reconcile" colspan="2"
92 string="Display items reconciled on the last run" type="object"/>
93 <button icon="STOCK_JUMP_TO" name="last_history_partial" colspan="2"
94 string="Display items partially reconciled on the last run"
95 type="object"/>
96 </tree>
97 </field>
98 </record>
99
100 <record id="action_account_easy_reconcile" model="ir.actions.act_window">
101 <field name="name">Easy Automatic Reconcile</field>
102 <field name="type">ir.actions.act_window</field>
103 <field name="res_model">account.easy.reconcile</field>
104 <field name="view_type">form</field>
105 <field name="view_mode">tree,form</field>
106 <field name="help" type="html">
107 <p class="oe_view_nocontent_create">
108 Click to add a reconciliation profile.
109 </p><p>
110 A reconciliation profile specifies, for one account, how
111 the entries should be reconciled.
112 You can select one or many reconciliation methods which will
113 be run sequentially to match the entries between them.
114 </p>
115 </field>
116 </record>
117
118
119 <!-- account.easy.reconcile.method view -->
120
121 <record id="account_easy_reconcile_method_form" model="ir.ui.view">
122 <field name="name">account.easy.reconcile.method.form</field>
123 <field name="priority">20</field>
124 <field name="model">account.easy.reconcile.method</field>
125 <field name="arch" type="xml">
126 <form string="Automatic Easy Reconcile Method">
127 <field name="sequence"/>
128 <field name="name"/>
129 <field name="write_off"/>
130 <field name="account_lost_id" attrs="{'required':[('write_off','>',0)]}"/>
131 <field name="account_profit_id" attrs="{'required':[('write_off','>',0)]}"/>
132 <field name="journal_id" attrs="{'required':[('write_off','>',0)]}"/>
133 <field name="date_base_on"/>
134 </form>
135 </field>
136 </record>
137
138 <record id="account_easy_reconcile_method_tree" model="ir.ui.view">
139 <field name="name">account.easy.reconcile.method.tree</field>
140 <field name="priority">20</field>
141 <field name="model">account.easy.reconcile.method</field>
142 <field name="arch" type="xml">
143 <tree editable="top" string="Automatic Easy Reconcile Method">
144 <field name="sequence"/>
145 <field name="name"/>
146 <field name="write_off"/>
147 <field name="account_lost_id" attrs="{'required':[('write_off','>',0)]}"/>
148 <field name="account_profit_id" attrs="{'required':[('write_off','>',0)]}"/>
149 <field name="journal_id" attrs="{'required':[('write_off','>',0)]}"/>
150 <field name="date_base_on"/>
151 </tree>
152 </field>
153 </record>
154
155 <!-- menu item -->
156
157 <menuitem action="action_account_easy_reconcile"
158 id="menu_easy_reconcile"
159 parent="account.periodical_processing_reconciliation"/>
160
161</data>
162</openerp>
0163
=== added file 'account_easy_reconcile/easy_reconcile_history.py'
--- account_easy_reconcile/easy_reconcile_history.py 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/easy_reconcile_history.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,153 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Guewen Baconnier
5# Copyright 2012 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from openerp.osv import orm, fields
23from openerp.tools.translate import _
24
25
26class easy_reconcile_history(orm.Model):
27 """ Store an history of the runs per profile
28 Each history stores the list of reconciliations done"""
29
30 _name = 'easy.reconcile.history'
31 _rec_name = 'easy_reconcile_id'
32 _order = 'date DESC'
33
34 def _reconcile_line_ids(self, cr, uid, ids, name, args, context=None):
35 result = {}
36
37 for history in self.browse(cr, uid, ids, context=context):
38 result[history.id] = {}
39
40 move_line_ids = []
41 for reconcile in history.reconcile_ids:
42 move_line_ids += [line.id
43 for line
44 in reconcile.line_id]
45 result[history.id]['reconcile_line_ids'] = move_line_ids
46
47 move_line_ids = []
48 for reconcile in history.reconcile_partial_ids:
49 move_line_ids += [line.id
50 for line
51 in reconcile.line_partial_ids]
52 result[history.id]['partial_line_ids'] = move_line_ids
53
54 return result
55
56 _columns = {
57 'easy_reconcile_id': fields.many2one(
58 'account.easy.reconcile', 'Reconcile Profile', readonly=True),
59 'date': fields.datetime('Run date', readonly=True),
60 'reconcile_ids': fields.many2many(
61 'account.move.reconcile',
62 'account_move_reconcile_history_rel',
63 string='Reconciliations', readonly=True),
64 'reconcile_partial_ids': fields.many2many(
65 'account.move.reconcile',
66 'account_move_reconcile_history_partial_rel',
67 string='Partial Reconciliations', readonly=True),
68 'reconcile_line_ids':
69 fields.function(
70 _reconcile_line_ids,
71 string='Reconciled Items',
72 type='many2many',
73 relation='account.move.line',
74 readonly=True,
75 multi='lines'),
76 'partial_line_ids':
77 fields.function(
78 _reconcile_line_ids,
79 string='Partially Reconciled Items',
80 type='many2many',
81 relation='account.move.line',
82 readonly=True,
83 multi='lines'),
84 'company_id': fields.related('easy_reconcile_id','company_id',
85 relation='res.company',
86 type='many2one',
87 string='Company',
88 store=True,
89 readonly=True),
90
91 }
92
93 def _open_move_lines(self, cr, uid, history_id, rec_type='full', context=None):
94 """ For an history record, open the view of move line with
95 the reconciled or partially reconciled move lines
96
97 :param history_id: id of the history
98 :param rec_type: 'full' or 'partial'
99 :return: action to open the move lines
100 """
101 assert rec_type in ('full', 'partial'), \
102 "rec_type must be 'full' or 'partial'"
103
104 history = self.browse(cr, uid, history_id, context=context)
105
106 if rec_type == 'full':
107 field = 'reconcile_line_ids'
108 name = _('Reconciliations')
109 else:
110 field = 'partial_line_ids'
111 name = _('Partial Reconciliations')
112
113 move_line_ids = [line.id for line in getattr(history, field)]
114
115 return {
116 'name': name,
117 'view_mode': 'tree,form',
118 'view_id': False,
119 'view_type': 'form',
120 'res_model': 'account.move.line',
121 'type': 'ir.actions.act_window',
122 'nodestroy': True,
123 'target': 'current',
124 'domain': unicode([('id', 'in', move_line_ids)]),
125 }
126
127 def open_reconcile(self, cr, uid, history_ids, context=None):
128 """ For an history record, open the view of move line
129 with the reconciled move lines
130
131 :param history_ids: id of the record as int or long
132 Accept a list with 1 id too to be
133 used from the client.
134 """
135 if isinstance(history_ids, (tuple, list)):
136 assert len(history_ids) == 1, "only 1 ID is accepted"
137 history_ids = history_ids[0]
138 return self._open_move_lines(
139 cr, uid, history_ids, rec_type='full', context=None)
140
141 def open_partial(self, cr, uid, history_ids, context=None):
142 """ For an history record, open the view of move line
143 with the partially reconciled move lines
144
145 :param history_ids: id of the record as int or long
146 Accept a list with 1 id too to be
147 used from the client.
148 """
149 if isinstance(history_ids, (tuple, list)):
150 assert len(history_ids) == 1, "only 1 ID is accepted"
151 history_ids = history_ids[0]
152 return self._open_move_lines(
153 cr, uid, history_ids, rec_type='partial', context=None)
0154
=== added file 'account_easy_reconcile/easy_reconcile_history_view.xml'
--- account_easy_reconcile/easy_reconcile_history_view.xml 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/easy_reconcile_history_view.xml 2014-04-03 07:40:14 +0000
@@ -0,0 +1,98 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="0">
4
5 <record id="view_easy_reconcile_history_search" model="ir.ui.view">
6 <field name="name">easy.reconcile.history.search</field>
7 <field name="model">easy.reconcile.history</field>
8 <field name="arch" type="xml">
9 <search string="Automatic Easy Reconcile History">
10 <filter icon="terp-go-today" string="Today"
11 domain="[('date','&lt;', time.strftime('%%Y-%%m-%%d 23:59:59')), ('date','&gt;=', time.strftime('%%Y-%%m-%%d 00:00:00'))]"
12 help="Todays' Reconcilations" />
13 <filter icon="terp-go-week" string="7 Days"
14 help="Reconciliations of last 7 days"
15 domain="[('date','&lt;', time.strftime('%%Y-%%m-%%d 23:59:59')),('date','&gt;=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d 00:00:00'))]"
16 />
17
18 <separator orientation="vertical"/>
19 <field name="easy_reconcile_id"/>
20 <field name="date"/>
21
22 <newline/>
23 <group expand="0" string="Group By...">
24 <filter string="Reconciliation Profile"
25 icon="terp-stock_effects-object-colorize"
26 domain="[]" context="{'group_by': 'easy_reconcile_id'}"/>
27 <filter string="Date" icon="terp-go-month" domain="[]"
28 context="{'group_by': 'date'}"/>
29 </group>
30 </search>
31 </field>
32 </record>
33
34 <record id="easy_reconcile_history_form" model="ir.ui.view">
35 <field name="name">easy.reconcile.history.form</field>
36 <field name="model">easy.reconcile.history</field>
37 <field name="arch" type="xml">
38 <form string="Automatic Easy Reconcile History" version="7.0">
39 <header>
40 <button name="open_reconcile"
41 string="Go to reconciled items"
42 icon="STOCK_JUMP_TO" type="object"/>
43 <button name="open_partial"
44 string="Go to partially reconciled items"
45 icon="STOCK_JUMP_TO" type="object"/>
46 </header>
47 <sheet>
48 <group>
49 <field name="easy_reconcile_id"/>
50 <field name="date"/>
51 <field name="company_id" groups="base.group_multi_company"/>
52 </group>
53 <group col="2">
54 <separator colspan="2" string="Reconciliations"/>
55 <field name="reconcile_ids" nolabel="1"/>
56 </group>
57 <group col="2">
58 <separator colspan="2" string="Partial Reconciliations"/>
59 <field name="reconcile_partial_ids" nolabel="1"/>
60 </group>
61 </sheet>
62 </form>
63 </field>
64 </record>
65
66 <record id="easy_reconcile_history_tree" model="ir.ui.view">
67 <field name="name">easy.reconcile.history.tree</field>
68 <field name="model">easy.reconcile.history</field>
69 <field name="arch" type="xml">
70 <tree string="Automatic Easy Reconcile History">
71 <field name="easy_reconcile_id"/>
72 <field name="date"/>
73 <button icon="STOCK_JUMP_TO" name="open_reconcile"
74 string="Go to reconciled items" type="object"/>
75 <button icon="STOCK_JUMP_TO" name="open_partial"
76 string="Go to partially reconciled items" type="object"/>
77 </tree>
78 </field>
79 </record>
80
81 <record id="action_easy_reconcile_history" model="ir.actions.act_window">
82 <field name="name">Easy Automatic Reconcile History</field>
83 <field name="type">ir.actions.act_window</field>
84 <field name="res_model">easy.reconcile.history</field>
85 <field name="view_type">form</field>
86 <field name="view_mode">tree,form</field>
87 </record>
88
89 <act_window
90 context="{'search_default_easy_reconcile_id': [active_id], 'default_easy_reconcile_id': active_id}"
91 id="act_easy_reconcile_to_history"
92 name="History Details"
93 groups=""
94 res_model="easy.reconcile.history"
95 src_model="account.easy.reconcile"/>
96
97 </data>
98</openerp>
099
=== added directory 'account_easy_reconcile/i18n'
=== added file 'account_easy_reconcile/i18n/account_easy_reconcile.pot'
--- account_easy_reconcile/i18n/account_easy_reconcile.pot 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/i18n/account_easy_reconcile.pot 2014-04-03 07:40:14 +0000
@@ -0,0 +1,406 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_easy_reconcile
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-21 11:55+0000\n"
10"PO-Revision-Date: 2014-01-21 11:55+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_easy_reconcile
19#: code:addons/account_easy_reconcile/easy_reconcile_history.py:108
20#: view:easy.reconcile.history:0
21#: field:easy.reconcile.history,reconcile_ids:0
22#, python-format
23msgid "Reconciliations"
24msgstr ""
25
26#. module: account_easy_reconcile
27#: view:account.easy.reconcile:0
28#: view:easy.reconcile.history:0
29msgid "Automatic Easy Reconcile History"
30msgstr ""
31
32#. module: account_easy_reconcile
33#: view:account.easy.reconcile:0
34msgid "Information"
35msgstr ""
36
37#. module: account_easy_reconcile
38#: view:account.easy.reconcile:0
39#: view:easy.reconcile.history:0
40msgid "Go to partially reconciled items"
41msgstr ""
42
43#. module: account_easy_reconcile
44#: help:account.easy.reconcile.method,sequence:0
45msgid "The sequence field is used to order the reconcile method"
46msgstr ""
47
48#. module: account_easy_reconcile
49#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
50msgid "easy.reconcile.history"
51msgstr ""
52
53#. module: account_easy_reconcile
54#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_reconcile
55msgid "<p class=\"oe_view_nocontent_create\">\n"
56" Click to add a reconciliation profile.\n"
57" </p><p>\n"
58" A reconciliation profile specifies, for one account, how\n"
59" the entries should be reconciled.\n"
60" You can select one or many reconciliation methods which will\n"
61" be run sequentially to match the entries between them.\n"
62" </p>\n"
63" "
64msgstr ""
65
66#. module: account_easy_reconcile
67#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
68msgid "easy.reconcile.options"
69msgstr ""
70
71#. module: account_easy_reconcile
72#: view:easy.reconcile.history:0
73msgid "Group By..."
74msgstr ""
75
76#. module: account_easy_reconcile
77#: field:account.easy.reconcile,unreconciled_count:0
78msgid "Unreconciled Items"
79msgstr ""
80
81#. module: account_easy_reconcile
82#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
83msgid "easy.reconcile.base"
84msgstr ""
85
86#. module: account_easy_reconcile
87#: field:easy.reconcile.history,reconcile_line_ids:0
88msgid "Reconciled Items"
89msgstr ""
90
91#. module: account_easy_reconcile
92#: field:account.easy.reconcile,reconcile_method:0
93msgid "Method"
94msgstr ""
95
96#. module: account_easy_reconcile
97#: view:easy.reconcile.history:0
98msgid "7 Days"
99msgstr ""
100
101#. module: account_easy_reconcile
102#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
103msgid "Easy Automatic Reconcile History"
104msgstr ""
105
106#. module: account_easy_reconcile
107#: field:easy.reconcile.history,date:0
108msgid "Run date"
109msgstr ""
110
111#. module: account_easy_reconcile
112#: view:account.easy.reconcile:0
113msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same reference to be reconciled."
114msgstr ""
115
116#. module: account_easy_reconcile
117#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
118msgid "History Details"
119msgstr ""
120
121#. module: account_easy_reconcile
122#: view:account.easy.reconcile:0
123msgid "Display items reconciled on the last run"
124msgstr ""
125
126#. module: account_easy_reconcile
127#: field:account.easy.reconcile.method,name:0
128msgid "Type"
129msgstr ""
130
131#. module: account_easy_reconcile
132#: field:account.easy.reconcile,company_id:0
133#: field:account.easy.reconcile.method,company_id:0
134#: field:easy.reconcile.history,company_id:0
135msgid "Company"
136msgstr ""
137
138#. module: account_easy_reconcile
139#: field:account.easy.reconcile.method,account_profit_id:0
140#: field:easy.reconcile.base,account_profit_id:0
141#: field:easy.reconcile.options,account_profit_id:0
142#: field:easy.reconcile.simple,account_profit_id:0
143#: field:easy.reconcile.simple.name,account_profit_id:0
144#: field:easy.reconcile.simple.partner,account_profit_id:0
145#: field:easy.reconcile.simple.reference,account_profit_id:0
146msgid "Account Profit"
147msgstr ""
148
149#. module: account_easy_reconcile
150#: view:easy.reconcile.history:0
151msgid "Todays' Reconcilations"
152msgstr ""
153
154#. module: account_easy_reconcile
155#: view:account.easy.reconcile:0
156msgid "Simple. Amount and Name"
157msgstr ""
158
159#. module: account_easy_reconcile
160#: field:easy.reconcile.base,partner_ids:0
161#: field:easy.reconcile.simple,partner_ids:0
162#: field:easy.reconcile.simple.name,partner_ids:0
163#: field:easy.reconcile.simple.partner,partner_ids:0
164#: field:easy.reconcile.simple.reference,partner_ids:0
165msgid "Restrict on partners"
166msgstr ""
167
168#. module: account_easy_reconcile
169#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
170#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
171msgid "Easy Automatic Reconcile"
172msgstr ""
173
174#. module: account_easy_reconcile
175#: view:easy.reconcile.history:0
176msgid "Today"
177msgstr ""
178
179#. module: account_easy_reconcile
180#: view:easy.reconcile.history:0
181msgid "Date"
182msgstr ""
183
184#. module: account_easy_reconcile
185#: field:account.easy.reconcile,last_history:0
186msgid "Last History"
187msgstr ""
188
189#. module: account_easy_reconcile
190#: view:account.easy.reconcile:0
191msgid "Configuration"
192msgstr ""
193
194#. module: account_easy_reconcile
195#: field:account.easy.reconcile,reconciled_partial_count:0
196#: field:easy.reconcile.history,partial_line_ids:0
197msgid "Partially Reconciled Items"
198msgstr ""
199
200#. module: account_easy_reconcile
201#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
202msgid "easy.reconcile.simple.partner"
203msgstr ""
204
205#. module: account_easy_reconcile
206#: field:account.easy.reconcile.method,write_off:0
207#: field:easy.reconcile.base,write_off:0
208#: field:easy.reconcile.options,write_off:0
209#: field:easy.reconcile.simple,write_off:0
210#: field:easy.reconcile.simple.name,write_off:0
211#: field:easy.reconcile.simple.partner,write_off:0
212#: field:easy.reconcile.simple.reference,write_off:0
213msgid "Write off allowed"
214msgstr ""
215
216#. module: account_easy_reconcile
217#: view:account.easy.reconcile:0
218msgid "Automatic Easy Reconcile"
219msgstr ""
220
221#. module: account_easy_reconcile
222#: field:account.easy.reconcile,account:0
223#: field:easy.reconcile.base,account_id:0
224#: field:easy.reconcile.simple,account_id:0
225#: field:easy.reconcile.simple.name,account_id:0
226#: field:easy.reconcile.simple.partner,account_id:0
227#: field:easy.reconcile.simple.reference,account_id:0
228msgid "Account"
229msgstr ""
230
231#. module: account_easy_reconcile
232#: field:account.easy.reconcile.method,task_id:0
233msgid "Task"
234msgstr ""
235
236#. module: account_easy_reconcile
237#: field:account.easy.reconcile,name:0
238msgid "Name"
239msgstr ""
240
241#. module: account_easy_reconcile
242#: view:account.easy.reconcile:0
243msgid "Simple. Amount and Partner"
244msgstr ""
245
246#. module: account_easy_reconcile
247#: view:account.easy.reconcile:0
248msgid "Start Auto Reconcilation"
249msgstr ""
250
251#. module: account_easy_reconcile
252#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
253msgid "easy.reconcile.simple.name"
254msgstr ""
255
256#. module: account_easy_reconcile
257#: field:account.easy.reconcile.method,filter:0
258#: field:easy.reconcile.base,filter:0
259#: field:easy.reconcile.options,filter:0
260#: field:easy.reconcile.simple,filter:0
261#: field:easy.reconcile.simple.name,filter:0
262#: field:easy.reconcile.simple.partner,filter:0
263#: field:easy.reconcile.simple.reference,filter:0
264msgid "Filter"
265msgstr ""
266
267#. module: account_easy_reconcile
268#: view:account.easy.reconcile:0
269msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same partner to be reconciled."
270msgstr ""
271
272#. module: account_easy_reconcile
273#: field:easy.reconcile.history,easy_reconcile_id:0
274msgid "Reconcile Profile"
275msgstr ""
276
277#. module: account_easy_reconcile
278#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
279msgid "reconcile method for account_easy_reconcile"
280msgstr ""
281
282#. module: account_easy_reconcile
283#: view:account.easy.reconcile:0
284msgid "Start Auto Reconciliation"
285msgstr ""
286
287#. module: account_easy_reconcile
288#: code:addons/account_easy_reconcile/easy_reconcile.py:257
289#, python-format
290msgid "Error"
291msgstr ""
292
293#. module: account_easy_reconcile
294#: code:addons/account_easy_reconcile/easy_reconcile.py:258
295#, python-format
296msgid "There is no history of reconciled items on the task: %s."
297msgstr ""
298
299#. module: account_easy_reconcile
300#: view:account.easy.reconcile:0
301msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same name to be reconciled."
302msgstr ""
303
304#. module: account_easy_reconcile
305#: field:account.easy.reconcile.method,account_lost_id:0
306#: field:easy.reconcile.base,account_lost_id:0
307#: field:easy.reconcile.options,account_lost_id:0
308#: field:easy.reconcile.simple,account_lost_id:0
309#: field:easy.reconcile.simple.name,account_lost_id:0
310#: field:easy.reconcile.simple.partner,account_lost_id:0
311#: field:easy.reconcile.simple.reference,account_lost_id:0
312msgid "Account Lost"
313msgstr ""
314
315#. module: account_easy_reconcile
316#: view:easy.reconcile.history:0
317msgid "Reconciliation Profile"
318msgstr ""
319
320#. module: account_easy_reconcile
321#: view:account.easy.reconcile:0
322#: field:account.easy.reconcile,history_ids:0
323msgid "History"
324msgstr ""
325
326#. module: account_easy_reconcile
327#: view:account.easy.reconcile:0
328#: view:easy.reconcile.history:0
329msgid "Go to reconciled items"
330msgstr ""
331
332#. module: account_easy_reconcile
333#: view:account.easy.reconcile:0
334msgid "Profile Information"
335msgstr ""
336
337#. module: account_easy_reconcile
338#: view:account.easy.reconcile.method:0
339msgid "Automatic Easy Reconcile Method"
340msgstr ""
341
342#. module: account_easy_reconcile
343#: view:account.easy.reconcile:0
344msgid "Simple. Amount and Reference"
345msgstr ""
346
347#. module: account_easy_reconcile
348#: view:account.easy.reconcile:0
349msgid "Display items partially reconciled on the last run"
350msgstr ""
351
352#. module: account_easy_reconcile
353#: field:account.easy.reconcile.method,sequence:0
354msgid "Sequence"
355msgstr ""
356
357#. module: account_easy_reconcile
358#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
359msgid "easy.reconcile.simple"
360msgstr ""
361
362#. module: account_easy_reconcile
363#: view:easy.reconcile.history:0
364msgid "Reconciliations of last 7 days"
365msgstr ""
366
367#. module: account_easy_reconcile
368#: field:account.easy.reconcile.method,date_base_on:0
369#: field:easy.reconcile.base,date_base_on:0
370#: field:easy.reconcile.options,date_base_on:0
371#: field:easy.reconcile.simple,date_base_on:0
372#: field:easy.reconcile.simple.name,date_base_on:0
373#: field:easy.reconcile.simple.partner,date_base_on:0
374#: field:easy.reconcile.simple.reference,date_base_on:0
375msgid "Date of reconciliation"
376msgstr ""
377
378#. module: account_easy_reconcile
379#: code:addons/account_easy_reconcile/easy_reconcile_history.py:111
380#: view:easy.reconcile.history:0
381#: field:easy.reconcile.history,reconcile_partial_ids:0
382#, python-format
383msgid "Partial Reconciliations"
384msgstr ""
385
386#. module: account_easy_reconcile
387#: field:account.easy.reconcile.method,journal_id:0
388#: field:easy.reconcile.base,journal_id:0
389#: field:easy.reconcile.options,journal_id:0
390#: field:easy.reconcile.simple,journal_id:0
391#: field:easy.reconcile.simple.name,journal_id:0
392#: field:easy.reconcile.simple.partner,journal_id:0
393#: field:easy.reconcile.simple.reference,journal_id:0
394msgid "Journal"
395msgstr ""
396
397#. module: account_easy_reconcile
398#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
399msgid "easy.reconcile.simple.reference"
400msgstr ""
401
402#. module: account_easy_reconcile
403#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
404msgid "account easy reconcile"
405msgstr ""
406
0407
=== added file 'account_easy_reconcile/i18n/es.po'
--- account_easy_reconcile/i18n/es.po 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/i18n/es.po 2014-04-03 07:40:14 +0000
@@ -0,0 +1,415 @@
1# Spanish translation for banking-addons
2# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3# This file is distributed under the same license as the banking-addons package.
4# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5#
6msgid ""
7msgstr ""
8"Project-Id-Version: banking-addons\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-01-21 11:55+0000\n"
11"PO-Revision-Date: 2014-04-02 21:56+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Spanish <es@li.org>\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
17"X-Launchpad-Export-Date: 2014-04-03 06:06+0000\n"
18"X-Generator: Launchpad (build 16967)\n"
19
20#. module: account_easy_reconcile
21#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
22#: field:easy.reconcile.history,reconcile_ids:0
23#, python-format
24msgid "Reconciliations"
25msgstr "Conciliaciones"
26
27#. module: account_easy_reconcile
28#: view:account.easy.reconcile:0
29#: view:easy.reconcile.history:0
30msgid "Automatic Easy Reconcile History"
31msgstr "Historial de conciliación automática sencilla"
32
33#. module: account_easy_reconcile
34#: view:account.easy.reconcile:0
35msgid "Information"
36msgstr "Información"
37
38#. module: account_easy_reconcile
39#: view:account.easy.reconcile:0
40#: view:easy.reconcile.history:0
41msgid "Go to partially reconciled items"
42msgstr "Ir a los elementos parcialmente conciliados"
43
44#. module: account_easy_reconcile
45#: help:account.easy.reconcile.method,sequence:0
46msgid "The sequence field is used to order the reconcile method"
47msgstr ""
48"El campo de secuencia se usa para ordenar los métodos de conciliación"
49
50#. module: account_easy_reconcile
51#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
52msgid "easy.reconcile.history"
53msgstr "easy.reconcile.history"
54
55#. module: account_easy_reconcile
56#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_reconcile
57msgid ""
58"<p class=\"oe_view_nocontent_create\">\n"
59" Click to add a reconciliation profile.\n"
60" </p><p>\n"
61" A reconciliation profile specifies, for one account, how\n"
62" the entries should be reconciled.\n"
63" You can select one or many reconciliation methods which will\n"
64" be run sequentially to match the entries between them.\n"
65" </p>\n"
66" "
67msgstr ""
68
69#. module: account_easy_reconcile
70#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
71msgid "easy.reconcile.options"
72msgstr "easy.reconcile.options"
73
74#. module: account_easy_reconcile
75#: view:easy.reconcile.history:0
76msgid "Group By..."
77msgstr "Agrupar por..."
78
79#. module: account_easy_reconcile
80#: field:account.easy.reconcile,unreconciled_count:0
81msgid "Unreconciled Items"
82msgstr ""
83
84#. module: account_easy_reconcile
85#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
86msgid "easy.reconcile.base"
87msgstr "easy.reconcile.base"
88
89#. module: account_easy_reconcile
90#: field:easy.reconcile.history,reconcile_line_ids:0
91msgid "Reconciled Items"
92msgstr "Elementos conciliados"
93
94#. module: account_easy_reconcile
95#: field:account.easy.reconcile,reconcile_method:0
96msgid "Method"
97msgstr "Método"
98
99#. module: account_easy_reconcile
100#: view:easy.reconcile.history:0
101msgid "7 Days"
102msgstr "7 días"
103
104#. module: account_easy_reconcile
105#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
106msgid "Easy Automatic Reconcile History"
107msgstr "Historial de la conciliación automática sencilla"
108
109#. module: account_easy_reconcile
110#: field:easy.reconcile.history,date:0
111msgid "Run date"
112msgstr "Fecha ejecucción"
113
114#. module: account_easy_reconcile
115#: view:account.easy.reconcile:0
116msgid ""
117"Match one debit line vs one credit line. Do not allow partial "
118"reconciliation. The lines should have the same amount (with the write-off) "
119"and the same reference to be reconciled."
120msgstr ""
121
122#. module: account_easy_reconcile
123#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
124msgid "History Details"
125msgstr "Detalles del historial"
126
127#. module: account_easy_reconcile
128#: view:account.easy.reconcile:0
129msgid "Display items reconciled on the last run"
130msgstr "Mostrar elementos conciliados en la última ejecucción"
131
132#. module: account_easy_reconcile
133#: field:account.easy.reconcile.method,name:0
134msgid "Type"
135msgstr "Tipo"
136
137#. module: account_easy_reconcile
138#: field:account.easy.reconcile,company_id:0
139#: field:account.easy.reconcile.method,company_id:0
140#: field:easy.reconcile.history,company_id:0
141msgid "Company"
142msgstr ""
143
144#. module: account_easy_reconcile
145#: field:account.easy.reconcile.method,account_profit_id:0
146#: field:easy.reconcile.base,account_profit_id:0
147#: field:easy.reconcile.options,account_profit_id:0
148#: field:easy.reconcile.simple,account_profit_id:0
149#: field:easy.reconcile.simple.name,account_profit_id:0
150#: field:easy.reconcile.simple.partner,account_profit_id:0
151#: field:easy.reconcile.simple.reference,account_profit_id:0
152msgid "Account Profit"
153msgstr "Cuenta de ganancias"
154
155#. module: account_easy_reconcile
156#: view:easy.reconcile.history:0
157msgid "Todays' Reconcilations"
158msgstr "Conciliaciones de hoy"
159
160#. module: account_easy_reconcile
161#: view:account.easy.reconcile:0
162msgid "Simple. Amount and Name"
163msgstr "Simple. Cantidad y nombre"
164
165#. module: account_easy_reconcile
166#: field:easy.reconcile.base,partner_ids:0
167#: field:easy.reconcile.simple,partner_ids:0
168#: field:easy.reconcile.simple.name,partner_ids:0
169#: field:easy.reconcile.simple.partner,partner_ids:0
170#: field:easy.reconcile.simple.reference,partner_ids:0
171msgid "Restrict on partners"
172msgstr "Restringir en las empresas"
173
174#. module: account_easy_reconcile
175#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
176#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
177msgid "Easy Automatic Reconcile"
178msgstr "Conciliación automática simple"
179
180#. module: account_easy_reconcile
181#: view:easy.reconcile.history:0
182msgid "Today"
183msgstr "Hoy"
184
185#. module: account_easy_reconcile
186#: view:easy.reconcile.history:0
187msgid "Date"
188msgstr "Fecha"
189
190#. module: account_easy_reconcile
191#: field:account.easy.reconcile,last_history:0
192msgid "Last History"
193msgstr "Último historial"
194
195#. module: account_easy_reconcile
196#: view:account.easy.reconcile:0
197msgid "Configuration"
198msgstr "Configuración"
199
200#. module: account_easy_reconcile
201#: field:easy.reconcile.history,partial_line_ids:0
202msgid "Partially Reconciled Items"
203msgstr "Elementos parcialmente conciliados"
204
205#. module: account_easy_reconcile
206#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
207msgid "easy.reconcile.simple.partner"
208msgstr "easy.reconcile.simple.partner"
209
210#. module: account_easy_reconcile
211#: field:account.easy.reconcile.method,write_off:0
212#: field:easy.reconcile.base,write_off:0
213#: field:easy.reconcile.options,write_off:0
214#: field:easy.reconcile.simple,write_off:0
215#: field:easy.reconcile.simple.name,write_off:0
216#: field:easy.reconcile.simple.partner,write_off:0
217#: field:easy.reconcile.simple.reference,write_off:0
218msgid "Write off allowed"
219msgstr "Desajuste permitido"
220
221#. module: account_easy_reconcile
222#: view:account.easy.reconcile:0
223msgid "Automatic Easy Reconcile"
224msgstr "Conciliación automática sencilla"
225
226#. module: account_easy_reconcile
227#: field:account.easy.reconcile,account:0
228#: field:easy.reconcile.base,account_id:0
229#: field:easy.reconcile.simple,account_id:0
230#: field:easy.reconcile.simple.name,account_id:0
231#: field:easy.reconcile.simple.partner,account_id:0
232#: field:easy.reconcile.simple.reference,account_id:0
233msgid "Account"
234msgstr "Cuenta"
235
236#. module: account_easy_reconcile
237#: field:account.easy.reconcile.method,task_id:0
238msgid "Task"
239msgstr "Tarea"
240
241#. module: account_easy_reconcile
242#: field:account.easy.reconcile,name:0
243msgid "Name"
244msgstr "Nombre"
245
246#. module: account_easy_reconcile
247#: view:account.easy.reconcile:0
248msgid "Simple. Amount and Partner"
249msgstr ""
250
251#. module: account_easy_reconcile
252#: view:account.easy.reconcile:0
253msgid "Start Auto Reconcilation"
254msgstr "Iniciar conciliación automática"
255
256#. module: account_easy_reconcile
257#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
258msgid "easy.reconcile.simple.name"
259msgstr "easy.reconcile.simple.name"
260
261#. module: account_easy_reconcile
262#: field:account.easy.reconcile.method,filter:0
263#: field:easy.reconcile.base,filter:0
264#: field:easy.reconcile.options,filter:0
265#: field:easy.reconcile.simple,filter:0
266#: field:easy.reconcile.simple.name,filter:0
267#: field:easy.reconcile.simple.partner,filter:0
268#: field:easy.reconcile.simple.reference,filter:0
269msgid "Filter"
270msgstr "Filtro"
271
272#. module: account_easy_reconcile
273#: view:account.easy.reconcile:0
274msgid ""
275"Match one debit line vs one credit line. Do not allow partial "
276"reconciliation. The lines should have the same amount (with the write-off) "
277"and the same partner to be reconciled."
278msgstr ""
279
280#. module: account_easy_reconcile
281#: field:easy.reconcile.history,easy_reconcile_id:0
282msgid "Reconcile Profile"
283msgstr "Perfil de conciliación"
284
285#. module: account_easy_reconcile
286#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
287msgid "reconcile method for account_easy_reconcile"
288msgstr "Método de conciliación para account_easy_reconcile"
289
290#. module: account_easy_reconcile
291#: view:account.easy.reconcile:0
292msgid "Start Auto Reconciliation"
293msgstr ""
294
295#. module: account_easy_reconcile
296#: code:addons/account_easy_reconcile/easy_reconcile.py:233
297#, python-format
298msgid "Error"
299msgstr "Error"
300
301#. module: account_easy_reconcile
302#: code:addons/account_easy_reconcile/easy_reconcile.py:258
303#, python-format
304msgid "There is no history of reconciled items on the task: %s."
305msgstr ""
306
307#. module: account_easy_reconcile
308#: view:account.easy.reconcile:0
309msgid ""
310"Match one debit line vs one credit line. Do not allow partial "
311"reconciliation. The lines should have the same amount (with the write-off) "
312"and the same name to be reconciled."
313msgstr ""
314
315#. module: account_easy_reconcile
316#: field:account.easy.reconcile.method,account_lost_id:0
317#: field:easy.reconcile.base,account_lost_id:0
318#: field:easy.reconcile.options,account_lost_id:0
319#: field:easy.reconcile.simple,account_lost_id:0
320#: field:easy.reconcile.simple.name,account_lost_id:0
321#: field:easy.reconcile.simple.partner,account_lost_id:0
322#: field:easy.reconcile.simple.reference,account_lost_id:0
323msgid "Account Lost"
324msgstr "Cuenta de pérdidas"
325
326#. module: account_easy_reconcile
327#: view:easy.reconcile.history:0
328msgid "Reconciliation Profile"
329msgstr "Perfil de conciliación"
330
331#. module: account_easy_reconcile
332#: view:account.easy.reconcile:0
333#: field:account.easy.reconcile,history_ids:0
334msgid "History"
335msgstr "Historial"
336
337#. module: account_easy_reconcile
338#: view:account.easy.reconcile:0
339#: view:easy.reconcile.history:0
340msgid "Go to reconciled items"
341msgstr "Ir a los elementos conciliados"
342
343#. module: account_easy_reconcile
344#: view:account.easy.reconcile:0
345msgid "Profile Information"
346msgstr ""
347
348#. module: account_easy_reconcile
349#: view:account.easy.reconcile.method:0
350msgid "Automatic Easy Reconcile Method"
351msgstr "Método de conciliación automática sencilla"
352
353#. module: account_easy_reconcile
354#: view:account.easy.reconcile:0
355msgid "Simple. Amount and Reference"
356msgstr ""
357
358#. module: account_easy_reconcile
359#: view:account.easy.reconcile:0
360msgid "Display items partially reconciled on the last run"
361msgstr "Mostrar elementos conciliados parcialmente en la última ejecucción"
362
363#. module: account_easy_reconcile
364#: field:account.easy.reconcile.method,sequence:0
365msgid "Sequence"
366msgstr "Secuencia"
367
368#. module: account_easy_reconcile
369#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
370msgid "easy.reconcile.simple"
371msgstr "easy.reconcile.simple"
372
373#. module: account_easy_reconcile
374#: view:easy.reconcile.history:0
375msgid "Reconciliations of last 7 days"
376msgstr "Conciliaciones de los últimos 7 días"
377
378#. module: account_easy_reconcile
379#: field:account.easy.reconcile.method,date_base_on:0
380#: field:easy.reconcile.base,date_base_on:0
381#: field:easy.reconcile.options,date_base_on:0
382#: field:easy.reconcile.simple,date_base_on:0
383#: field:easy.reconcile.simple.name,date_base_on:0
384#: field:easy.reconcile.simple.partner,date_base_on:0
385#: field:easy.reconcile.simple.reference,date_base_on:0
386msgid "Date of reconciliation"
387msgstr ""
388
389#. module: account_easy_reconcile
390#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
391#: field:easy.reconcile.history,reconcile_partial_ids:0
392#, python-format
393msgid "Partial Reconciliations"
394msgstr "Conciliaciones parciales"
395
396#. module: account_easy_reconcile
397#: field:account.easy.reconcile.method,journal_id:0
398#: field:easy.reconcile.base,journal_id:0
399#: field:easy.reconcile.options,journal_id:0
400#: field:easy.reconcile.simple,journal_id:0
401#: field:easy.reconcile.simple.name,journal_id:0
402#: field:easy.reconcile.simple.partner,journal_id:0
403#: field:easy.reconcile.simple.reference,journal_id:0
404msgid "Journal"
405msgstr "Diario"
406
407#. module: account_easy_reconcile
408#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
409msgid "easy.reconcile.simple.reference"
410msgstr "easy.reconcile.simple.reference"
411
412#. module: account_easy_reconcile
413#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
414msgid "account easy reconcile"
415msgstr "account easy reconcile"
0416
=== added file 'account_easy_reconcile/i18n/fr.po'
--- account_easy_reconcile/i18n/fr.po 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/i18n/fr.po 2014-04-03 07:40:14 +0000
@@ -0,0 +1,432 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_easy_reconcile
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 6.1\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-21 11:55+0000\n"
10"PO-Revision-Date: 2014-03-21 15:25+0000\n"
11"Last-Translator: Guewen Baconnier @ Camptocamp <Unknown>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: 8bit\n"
16"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
17"X-Generator: Launchpad (build 16967)\n"
18"Language: \n"
19
20#. module: account_easy_reconcile
21#: code:addons/account_easy_reconcile/easy_reconcile_history.py:108
22#: view:easy.reconcile.history:0
23#: field:easy.reconcile.history,reconcile_ids:0
24#, python-format
25msgid "Reconciliations"
26msgstr "Lettrages"
27
28#. module: account_easy_reconcile
29#: view:account.easy.reconcile:0
30#: view:easy.reconcile.history:0
31msgid "Automatic Easy Reconcile History"
32msgstr "Historique des lettrages automatisés"
33
34#. module: account_easy_reconcile
35#: view:account.easy.reconcile:0
36msgid "Information"
37msgstr "Information"
38
39#. module: account_easy_reconcile
40#: view:account.easy.reconcile:0
41#: view:easy.reconcile.history:0
42msgid "Go to partially reconciled items"
43msgstr "Voir les entrées partiellement lettrées"
44
45#. module: account_easy_reconcile
46#: help:account.easy.reconcile.method,sequence:0
47msgid "The sequence field is used to order the reconcile method"
48msgstr "La séquence détermine l'ordre des méthodes de lettrage"
49
50#. module: account_easy_reconcile
51#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
52msgid "easy.reconcile.history"
53msgstr "easy.reconcile.history"
54
55#. module: account_easy_reconcile
56#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_reconcile
57msgid ""
58"<p class=\"oe_view_nocontent_create\">\n"
59" Click to add a reconciliation profile.\n"
60" </p><p>\n"
61" A reconciliation profile specifies, for one account, how\n"
62" the entries should be reconciled.\n"
63" You can select one or many reconciliation methods which will\n"
64" be run sequentially to match the entries between them.\n"
65" </p>\n"
66" "
67msgstr ""
68"<p class=\"oe_view_nocontent_create\">\n"
69" Cliquez pour ajouter un profil de lettrage.\n"
70" </p><p>\n"
71" Un profil de lettrage spécifie, pour un compte, comment\n"
72" les écritures doivent être lettrées.\n"
73" Vous pouvez sélectionner une ou plusieurs méthodes de lettrage\n"
74" qui seront lancées successivement pour identifier les écritures\n"
75" devant être lettrées. </p>\n"
76" "
77
78#. module: account_easy_reconcile
79#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
80msgid "easy.reconcile.options"
81msgstr "easy.reconcile.options"
82
83#. module: account_easy_reconcile
84#: view:easy.reconcile.history:0
85msgid "Group By..."
86msgstr "Grouper par..."
87
88#. module: account_easy_reconcile
89#: field:account.easy.reconcile,unreconciled_count:0
90msgid "Unreconciled Items"
91msgstr "Écritures non lettrées"
92
93#. module: account_easy_reconcile
94#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
95msgid "easy.reconcile.base"
96msgstr "easy.reconcile.base"
97
98#. module: account_easy_reconcile
99#: field:easy.reconcile.history,reconcile_line_ids:0
100msgid "Reconciled Items"
101msgstr "Écritures lettrées"
102
103#. module: account_easy_reconcile
104#: field:account.easy.reconcile,reconcile_method:0
105msgid "Method"
106msgstr "Méthode"
107
108#. module: account_easy_reconcile
109#: view:easy.reconcile.history:0
110msgid "7 Days"
111msgstr "7 jours"
112
113#. module: account_easy_reconcile
114#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
115msgid "Easy Automatic Reconcile History"
116msgstr "Lettrage automatisé"
117
118#. module: account_easy_reconcile
119#: field:easy.reconcile.history,date:0
120msgid "Run date"
121msgstr "Date de lancement"
122
123#. module: account_easy_reconcile
124#: view:account.easy.reconcile:0
125msgid ""
126"Match one debit line vs one credit line. Do not allow partial "
127"reconciliation. The lines should have the same amount (with the write-off) "
128"and the same reference to be reconciled."
129msgstr ""
130"Lettre un débit avec un crédit ayant le même montant et la même référence. "
131"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
132
133#. module: account_easy_reconcile
134#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
135msgid "History Details"
136msgstr "Détails de l'historique"
137
138#. module: account_easy_reconcile
139#: view:account.easy.reconcile:0
140msgid "Display items reconciled on the last run"
141msgstr "Voir les entrées lettrées au dernier lettrage"
142
143#. module: account_easy_reconcile
144#: field:account.easy.reconcile.method,name:0
145msgid "Type"
146msgstr "Type"
147
148#. module: account_easy_reconcile
149#: field:account.easy.reconcile,company_id:0
150#: field:account.easy.reconcile.method,company_id:0
151#: field:easy.reconcile.history,company_id:0
152msgid "Company"
153msgstr ""
154
155#. module: account_easy_reconcile
156#: field:account.easy.reconcile.method,account_profit_id:0
157#: field:easy.reconcile.base,account_profit_id:0
158#: field:easy.reconcile.options,account_profit_id:0
159#: field:easy.reconcile.simple,account_profit_id:0
160#: field:easy.reconcile.simple.name,account_profit_id:0
161#: field:easy.reconcile.simple.partner,account_profit_id:0
162#: field:easy.reconcile.simple.reference,account_profit_id:0
163msgid "Account Profit"
164msgstr "Compte de profits"
165
166#. module: account_easy_reconcile
167#: view:easy.reconcile.history:0
168msgid "Todays' Reconcilations"
169msgstr "Lettrages du jour"
170
171#. module: account_easy_reconcile
172#: view:account.easy.reconcile:0
173msgid "Simple. Amount and Name"
174msgstr "Simple. Montant et description"
175
176#. module: account_easy_reconcile
177#: field:easy.reconcile.base,partner_ids:0
178#: field:easy.reconcile.simple,partner_ids:0
179#: field:easy.reconcile.simple.name,partner_ids:0
180#: field:easy.reconcile.simple.partner,partner_ids:0
181#: field:easy.reconcile.simple.reference,partner_ids:0
182msgid "Restrict on partners"
183msgstr "Filtrer sur des partenaires"
184
185#. module: account_easy_reconcile
186#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
187#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
188msgid "Easy Automatic Reconcile"
189msgstr "Lettrage automatisé"
190
191#. module: account_easy_reconcile
192#: view:easy.reconcile.history:0
193msgid "Today"
194msgstr "Aujourd'hui"
195
196#. module: account_easy_reconcile
197#: view:easy.reconcile.history:0
198msgid "Date"
199msgstr "Date"
200
201#. module: account_easy_reconcile
202#: field:account.easy.reconcile,last_history:0
203msgid "Last History"
204msgstr "Dernier historique"
205
206#. module: account_easy_reconcile
207#: view:account.easy.reconcile:0
208msgid "Configuration"
209msgstr "Configuration"
210
211#. module: account_easy_reconcile
212#: field:account.easy.reconcile,reconciled_partial_count:0
213#: field:easy.reconcile.history,partial_line_ids:0
214msgid "Partially Reconciled Items"
215msgstr "Écritures partiellement lettrées"
216
217#. module: account_easy_reconcile
218#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
219msgid "easy.reconcile.simple.partner"
220msgstr "easy.reconcile.simple.partner"
221
222#. module: account_easy_reconcile
223#: field:account.easy.reconcile.method,write_off:0
224#: field:easy.reconcile.base,write_off:0
225#: field:easy.reconcile.options,write_off:0
226#: field:easy.reconcile.simple,write_off:0
227#: field:easy.reconcile.simple.name,write_off:0
228#: field:easy.reconcile.simple.partner,write_off:0
229#: field:easy.reconcile.simple.reference,write_off:0
230msgid "Write off allowed"
231msgstr "Écart autorisé"
232
233#. module: account_easy_reconcile
234#: view:account.easy.reconcile:0
235msgid "Automatic Easy Reconcile"
236msgstr "Lettrage automatisé"
237
238#. module: account_easy_reconcile
239#: field:account.easy.reconcile,account:0
240#: field:easy.reconcile.base,account_id:0
241#: field:easy.reconcile.simple,account_id:0
242#: field:easy.reconcile.simple.name,account_id:0
243#: field:easy.reconcile.simple.partner,account_id:0
244#: field:easy.reconcile.simple.reference,account_id:0
245msgid "Account"
246msgstr "Compte"
247
248#. module: account_easy_reconcile
249#: field:account.easy.reconcile.method,task_id:0
250msgid "Task"
251msgstr "Tâche"
252
253#. module: account_easy_reconcile
254#: field:account.easy.reconcile,name:0
255msgid "Name"
256msgstr "Nom"
257
258#. module: account_easy_reconcile
259#: view:account.easy.reconcile:0
260msgid "Simple. Amount and Partner"
261msgstr "Simple. Montant et partenaire"
262
263#. module: account_easy_reconcile
264#: view:account.easy.reconcile:0
265msgid "Start Auto Reconcilation"
266msgstr "Lancer le lettrage automatisé"
267
268#. module: account_easy_reconcile
269#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
270msgid "easy.reconcile.simple.name"
271msgstr "easy.reconcile.simple.name"
272
273#. module: account_easy_reconcile
274#: field:account.easy.reconcile.method,filter:0
275#: field:easy.reconcile.base,filter:0
276#: field:easy.reconcile.options,filter:0
277#: field:easy.reconcile.simple,filter:0
278#: field:easy.reconcile.simple.name,filter:0
279#: field:easy.reconcile.simple.partner,filter:0
280#: field:easy.reconcile.simple.reference,filter:0
281msgid "Filter"
282msgstr "Filtre"
283
284#. module: account_easy_reconcile
285#: view:account.easy.reconcile:0
286msgid ""
287"Match one debit line vs one credit line. Do not allow partial "
288"reconciliation. The lines should have the same amount (with the write-off) "
289"and the same partner to be reconciled."
290msgstr ""
291"Lettre un débit avec un crédit ayant le même montant et le même partenaire. "
292"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
293
294#. module: account_easy_reconcile
295#: field:easy.reconcile.history,easy_reconcile_id:0
296msgid "Reconcile Profile"
297msgstr "Profil de réconciliation"
298
299#. module: account_easy_reconcile
300#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
301msgid "reconcile method for account_easy_reconcile"
302msgstr "Méthode de lettrage"
303
304#. module: account_easy_reconcile
305#: view:account.easy.reconcile:0
306msgid "Start Auto Reconciliation"
307msgstr "Lancer le lettrage automatisé"
308
309#. module: account_easy_reconcile
310#: code:addons/account_easy_reconcile/easy_reconcile.py:257
311#, python-format
312msgid "Error"
313msgstr "Erreur"
314
315#. module: account_easy_reconcile
316#: code:addons/account_easy_reconcile/easy_reconcile.py:258
317#, python-format
318msgid "There is no history of reconciled items on the task: %s."
319msgstr "Il n'y a pas d'historique d'écritures lettrées sur la tâche: %s."
320
321#. module: account_easy_reconcile
322#: view:account.easy.reconcile:0
323msgid ""
324"Match one debit line vs one credit line. Do not allow partial "
325"reconciliation. The lines should have the same amount (with the write-off) "
326"and the same name to be reconciled."
327msgstr ""
328"Lettre un débit avec un crédit ayant le même montant et la même description. "
329"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
330
331#. module: account_easy_reconcile
332#: field:account.easy.reconcile.method,account_lost_id:0
333#: field:easy.reconcile.base,account_lost_id:0
334#: field:easy.reconcile.options,account_lost_id:0
335#: field:easy.reconcile.simple,account_lost_id:0
336#: field:easy.reconcile.simple.name,account_lost_id:0
337#: field:easy.reconcile.simple.partner,account_lost_id:0
338#: field:easy.reconcile.simple.reference,account_lost_id:0
339msgid "Account Lost"
340msgstr "Compte de pertes"
341
342#. module: account_easy_reconcile
343#: view:easy.reconcile.history:0
344msgid "Reconciliation Profile"
345msgstr "Profil de réconciliation"
346
347#. module: account_easy_reconcile
348#: view:account.easy.reconcile:0
349#: field:account.easy.reconcile,history_ids:0
350msgid "History"
351msgstr "Historique"
352
353#. module: account_easy_reconcile
354#: view:account.easy.reconcile:0
355#: view:easy.reconcile.history:0
356msgid "Go to reconciled items"
357msgstr "Voir les entrées lettrées"
358
359#. module: account_easy_reconcile
360#: view:account.easy.reconcile:0
361msgid "Profile Information"
362msgstr "Information sur le profil"
363
364#. module: account_easy_reconcile
365#: view:account.easy.reconcile.method:0
366msgid "Automatic Easy Reconcile Method"
367msgstr "Méthode de lettrage automatisé"
368
369#. module: account_easy_reconcile
370#: view:account.easy.reconcile:0
371msgid "Simple. Amount and Reference"
372msgstr "Simple. Montant et référence"
373
374#. module: account_easy_reconcile
375#: view:account.easy.reconcile:0
376msgid "Display items partially reconciled on the last run"
377msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
378
379#. module: account_easy_reconcile
380#: field:account.easy.reconcile.method,sequence:0
381msgid "Sequence"
382msgstr "Séquence"
383
384#. module: account_easy_reconcile
385#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
386msgid "easy.reconcile.simple"
387msgstr "easy.reconcile.simple"
388
389#. module: account_easy_reconcile
390#: view:easy.reconcile.history:0
391msgid "Reconciliations of last 7 days"
392msgstr "Lettrages des 7 derniers jours"
393
394#. module: account_easy_reconcile
395#: field:account.easy.reconcile.method,date_base_on:0
396#: field:easy.reconcile.base,date_base_on:0
397#: field:easy.reconcile.options,date_base_on:0
398#: field:easy.reconcile.simple,date_base_on:0
399#: field:easy.reconcile.simple.name,date_base_on:0
400#: field:easy.reconcile.simple.partner,date_base_on:0
401#: field:easy.reconcile.simple.reference,date_base_on:0
402msgid "Date of reconciliation"
403msgstr "Date de lettrage"
404
405#. module: account_easy_reconcile
406#: code:addons/account_easy_reconcile/easy_reconcile_history.py:111
407#: view:easy.reconcile.history:0
408#: field:easy.reconcile.history,reconcile_partial_ids:0
409#, python-format
410msgid "Partial Reconciliations"
411msgstr "Lettrages partiels"
412
413#. module: account_easy_reconcile
414#: field:account.easy.reconcile.method,journal_id:0
415#: field:easy.reconcile.base,journal_id:0
416#: field:easy.reconcile.options,journal_id:0
417#: field:easy.reconcile.simple,journal_id:0
418#: field:easy.reconcile.simple.name,journal_id:0
419#: field:easy.reconcile.simple.partner,journal_id:0
420#: field:easy.reconcile.simple.reference,journal_id:0
421msgid "Journal"
422msgstr "Journal"
423
424#. module: account_easy_reconcile
425#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
426msgid "easy.reconcile.simple.reference"
427msgstr "easy.reconcile.simple.reference"
428
429#. module: account_easy_reconcile
430#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
431msgid "account easy reconcile"
432msgstr "Lettrage automatisé"
0433
=== added directory 'account_easy_reconcile/security'
=== added file 'account_easy_reconcile/security/ir.model.access.csv'
--- account_easy_reconcile/security/ir.model.access.csv 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/security/ir.model.access.csv 2014-04-03 07:40:14 +0000
@@ -0,0 +1,15 @@
1id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2access_easy_reconcile_options_acc_user,easy.reconcile.options,model_easy_reconcile_options,account.group_account_user,1,0,0,0
3access_account_easy_reconcile_method_acc_user,account.easy.reconcile.method,model_account_easy_reconcile_method,account.group_account_user,1,0,0,0
4access_account_easy_reconcile_acc_user,account.easy.reconcile,model_account_easy_reconcile,account.group_account_user,1,1,0,0
5access_easy_reconcile_simple_name_acc_user,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
6access_easy_reconcile_simple_partner_acc_user,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
7access_easy_reconcile_simple_reference_acc_user,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
8access_easy_reconcile_options_acc_mgr,easy.reconcile.options,model_easy_reconcile_options,account.group_account_user,1,0,0,0
9access_account_easy_reconcile_method_acc_mgr,account.easy.reconcile.method,model_account_easy_reconcile_method,account.group_account_user,1,1,1,1
10access_account_easy_reconcile_acc_mgr,account.easy.reconcile,model_account_easy_reconcile,account.group_account_user,1,1,1,1
11access_easy_reconcile_simple_name_acc_mgr,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
12access_easy_reconcile_simple_partner_acc_mgr,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
13access_easy_reconcile_simple_reference_acc_mgr,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
14access_easy_reconcile_history_acc_user,easy.reconcile.history,model_easy_reconcile_history,account.group_account_user,1,1,1,0
15access_easy_reconcile_history_acc_mgr,easy.reconcile.history,model_easy_reconcile_history,account.group_account_manager,1,1,1,1
016
=== added file 'account_easy_reconcile/security/ir_rule.xml'
--- account_easy_reconcile/security/ir_rule.xml 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/security/ir_rule.xml 2014-04-03 07:40:14 +0000
@@ -0,0 +1,25 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="1">
4 <record id="easy_reconcile_rule" model="ir.rule">
5 <field name="name">Easy reconcile multi-company</field>
6 <field name="model_id" ref="model_account_easy_reconcile"/>
7 <field name="global" eval="True"/>
8 <field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
9 </record>
10
11 <record id="easy_reconcile_history_rule" model="ir.rule">
12 <field name="name">Easy reconcile history multi-company</field>
13 <field name="model_id" ref="model_easy_reconcile_history"/>
14 <field name="global" eval="True"/>
15 <field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
16 </record>
17
18 <record id="easy_reconcile_method_rule" model="ir.rule">
19 <field name="name">Easy reconcile method multi-company</field>
20 <field name="model_id" ref="model_account_easy_reconcile_method"/>
21 <field name="global" eval="True"/>
22 <field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
23 </record>
24 </data>
25</openerp>
026
=== added file 'account_easy_reconcile/simple_reconciliation.py'
--- account_easy_reconcile/simple_reconciliation.py 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/simple_reconciliation.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,120 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
5# Copyright (C) 2010 Sébastien Beau
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from openerp.osv.orm import AbstractModel, TransientModel
23
24
25class easy_reconcile_simple(AbstractModel):
26
27 _name = 'easy.reconcile.simple'
28 _inherit = 'easy.reconcile.base'
29
30 # has to be subclassed
31 # field name used as key for matching the move lines
32 _key_field = None
33
34 def rec_auto_lines_simple(self, cr, uid, rec, lines, context=None):
35 if context is None:
36 context = {}
37
38 if self._key_field is None:
39 raise ValueError("_key_field has to be defined")
40
41 count = 0
42 res = []
43 while (count < len(lines)):
44 for i in xrange(count+1, len(lines)):
45 writeoff_account_id = False
46 if lines[count][self._key_field] != lines[i][self._key_field]:
47 break
48
49 check = False
50 if lines[count]['credit'] > 0 and lines[i]['debit'] > 0:
51 credit_line = lines[count]
52 debit_line = lines[i]
53 check = True
54 elif lines[i]['credit'] > 0 and lines[count]['debit'] > 0:
55 credit_line = lines[i]
56 debit_line = lines[count]
57 check = True
58 if not check:
59 continue
60
61 reconciled, dummy = self._reconcile_lines(
62 cr, uid, rec, [credit_line, debit_line],
63 allow_partial=False, context=context)
64 if reconciled:
65 res += [credit_line['id'], debit_line['id']]
66 del lines[i]
67 break
68 count += 1
69 return res, [] # empty list for partial, only full rec in "simple" rec
70
71 def _simple_order(self, rec, *args, **kwargs):
72 return "ORDER BY account_move_line.%s" % self._key_field
73
74 def _action_rec(self, cr, uid, rec, context=None):
75 """Match only 2 move lines, do not allow partial reconcile"""
76 select = self._select(rec)
77 select += ", account_move_line.%s " % self._key_field
78 where, params = self._where(rec)
79 where += " AND account_move_line.%s IS NOT NULL " % self._key_field
80
81 where2, params2 = self._get_filter(cr, uid, rec, context=context)
82 query = ' '.join((
83 select,
84 self._from(rec),
85 where, where2,
86 self._simple_order(rec)))
87
88 cr.execute(query, params + params2)
89 lines = cr.dictfetchall()
90 return self.rec_auto_lines_simple(cr, uid, rec, lines, context)
91
92
93class easy_reconcile_simple_name(TransientModel):
94
95 _name = 'easy.reconcile.simple.name'
96 _inherit = 'easy.reconcile.simple'
97
98 # has to be subclassed
99 # field name used as key for matching the move lines
100 _key_field = 'name'
101
102
103class easy_reconcile_simple_partner(TransientModel):
104
105 _name = 'easy.reconcile.simple.partner'
106 _inherit = 'easy.reconcile.simple'
107
108 # has to be subclassed
109 # field name used as key for matching the move lines
110 _key_field = 'partner_id'
111
112
113class easy_reconcile_simple_reference(TransientModel):
114
115 _name = 'easy.reconcile.simple.reference'
116 _inherit = 'easy.reconcile.simple'
117
118 # has to be subclassed
119 # field name used as key for matching the move lines
120 _key_field = 'ref'
0121
=== added directory 'account_statement_bankaccount_completion'
=== added file 'account_statement_bankaccount_completion/__init__.py'
--- account_statement_bankaccount_completion/__init__.py 1970-01-01 00:00:00 +0000
+++ account_statement_bankaccount_completion/__init__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,21 @@
1# -*- coding: utf-8 -*-
2#
3#
4# Author: Laurent Mignon
5# Copyright 2013 'ACSONE SA/NV'
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20#
21import statement
022
=== added file 'account_statement_bankaccount_completion/__openerp__.py'
--- account_statement_bankaccount_completion/__openerp__.py 1970-01-01 00:00:00 +0000
+++ account_statement_bankaccount_completion/__openerp__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,48 @@
1# -*- coding: utf-8 -*-
2#
3#
4# Author: Laurent Mignon
5# Copyright 2013 'ACSONE SA/NV'
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20#
21
22{'name': "Bank statement completion from bank account number",
23 'version': '1.0.1',
24 'author': 'ACSONE SA/NV',
25 'maintainer': 'ACSONE SA/NV',
26 'category': 'Finance',
27 'complexity': 'normal',
28 'depends': [
29 'account_statement_base_completion',
30 ],
31 'description': """
32 Add a completion method based on the partner bank account number
33 provided by the bank/office.
34
35 Completion will look in the partner with that bank account number
36 to match the partner, then it will fill in the bank statement line
37 with it to ease the reconciliation.
38
39 """,
40 'website': 'http://www.acsone.eu',
41 'data': [
42 "data.xml",
43 ],
44 'demo': [],
45 'installable': True,
46 'auto_install': False,
47 'license': 'AGPL-3',
48 }
049
=== added file 'account_statement_bankaccount_completion/data.xml'
--- account_statement_bankaccount_completion/data.xml 1970-01-01 00:00:00 +0000
+++ account_statement_bankaccount_completion/data.xml 2014-04-03 07:40:14 +0000
@@ -0,0 +1,12 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3<data noupdate="1">
4
5 <record id="bank_statement_completion_rule_10" model="account.statement.completion.rule">
6 <field name="name">Match from bank account number (Normal or IBAN))</field>
7 <field name="sequence">10</field>
8 <field name="function_to_call">get_from_bank_account</field>
9 </record>
10
11</data>
12</openerp>
013
=== added directory 'account_statement_bankaccount_completion/i18n'
=== added file 'account_statement_bankaccount_completion/i18n/account_statement_bankaccount_completion.pot'
--- account_statement_bankaccount_completion/i18n/account_statement_bankaccount_completion.pot 1970-01-01 00:00:00 +0000
+++ account_statement_bankaccount_completion/i18n/account_statement_bankaccount_completion.pot 2014-04-03 07:40:14 +0000
@@ -0,0 +1,43 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_statement_bankaccount_completion
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-21 11:57+0000\n"
10"PO-Revision-Date: 2014-01-21 11:57+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_statement_bankaccount_completion
19#: help:account.bank.statement.line,partner_acc_number:0
20msgid "Account number of the partner"
21msgstr ""
22
23#. module: account_statement_bankaccount_completion
24#: model:ir.model,name:account_statement_bankaccount_completion.model_account_bank_statement_line
25msgid "Bank Statement Line"
26msgstr ""
27
28#. module: account_statement_bankaccount_completion
29#: code:addons/account_statement_bankaccount_completion/statement.py:68
30#, python-format
31msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner for account number \"%s\"."
32msgstr ""
33
34#. module: account_statement_bankaccount_completion
35#: field:account.bank.statement.line,partner_acc_number:0
36msgid "Account Number"
37msgstr ""
38
39#. module: account_statement_bankaccount_completion
40#: model:ir.model,name:account_statement_bankaccount_completion.model_account_statement_completion_rule
41msgid "account.statement.completion.rule"
42msgstr ""
43
044
=== added file 'account_statement_bankaccount_completion/statement.py'
--- account_statement_bankaccount_completion/statement.py 1970-01-01 00:00:00 +0000
+++ account_statement_bankaccount_completion/statement.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,96 @@
1# -*- coding: utf-8 -*-
2#
3#
4# Author: Laurent Mignon
5# Copyright 2013 'ACSONE SA/NV'
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20#
21
22
23from openerp.tools.translate import _
24from openerp.osv.orm import Model
25from openerp.osv import fields
26from openerp.addons.account_statement_base_completion.statement import ErrorTooManyPartner
27
28
29class AccountStatementCompletionRule(Model):
30 """Add a rule based on transaction ID"""
31
32 _inherit = "account.statement.completion.rule"
33
34 def _get_functions(self, cr, uid, context=None):
35 res = super(AccountStatementCompletionRule, self)._get_functions(
36 cr, uid, context=context)
37 res.append(('get_from_bank_account',
38 'From bank account number (Normal or IBAN)'))
39 return res
40
41 _columns = {
42 'function_to_call': fields.selection(_get_functions, 'Method'),
43 }
44
45 def get_from_bank_account(self, cr, uid, st_line, context=None):
46 """
47 Match the partner based on the partner account number field
48 Then, call the generic st_line method to complete other values.
49 :param dict st_line: read of the concerned account.bank.statement.line
50 :return:
51 A dict of value that can be passed directly to the write method of
52 the statement line or {}
53 {'partner_id': value,
54 'account_id' : value,
55 ...}
56 """
57 partner_acc_number = st_line['partner_acc_number']
58 if not partner_acc_number:
59 return {}
60 st_obj = self.pool.get('account.bank.statement.line')
61 res = {}
62 res_bank_obj = self.pool.get('res.partner.bank')
63 ids = res_bank_obj.search(cr,
64 uid,
65 [('acc_number', '=', partner_acc_number)],
66 context=context)
67 if len(ids) > 1:
68 raise ErrorTooManyPartner(_('Line named "%s" (Ref:%s) was matched by more than '
69 'one partner for account number "%s".') % (st_line['name'], st_line['ref'], partner_acc_number))
70 if len(ids) == 1:
71 partner = res_bank_obj.browse(cr, uid, ids[0], context=context).partner_id
72 res['partner_id'] = partner.id
73 st_vals = st_obj.get_values_for_line(cr,
74 uid,
75 profile_id=st_line['profile_id'],
76 master_account_id=st_line['master_account_id'],
77 partner_id=res.get('partner_id', False),
78 line_type=st_line['type'],
79 amount=st_line['amount'] if st_line['amount'] else 0.0,
80 context=context)
81 res.update(st_vals)
82 return res
83
84
85class AccountStatementLine(Model):
86 _inherit = "account.bank.statement.line"
87
88 _columns = {
89 # 'additional_bank_fields' : fields.serialized('Additional infos from bank', help="Used by completion and import system."),
90 'partner_acc_number': fields.sparse(
91 type='char',
92 string='Account Number',
93 size=64,
94 serialization_field='additionnal_bank_fields',
95 help="Account number of the partner"),
96 }
097
=== added directory 'account_statement_bankaccount_completion/tests'
=== added file 'account_statement_bankaccount_completion/tests/__init__.py'
--- account_statement_bankaccount_completion/tests/__init__.py 1970-01-01 00:00:00 +0000
+++ account_statement_bankaccount_completion/tests/__init__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,27 @@
1# -*- coding: utf-8 -*-
2#
3#
4# Authors: Laurent Mignon
5# Copyright (c) 2013 Acsone SA/NV (http://www.acsone.eu)
6# All Rights Reserved
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU Affero General Public License as
10# published by the Free Software Foundation, either version 3 of the
11# License, or (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU Affero General Public License for more details.
17#
18# You should have received a copy of the GNU Affero General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21#
22
23from . import test_bankaccount_completion
24
25checks = [
26 test_bankaccount_completion
27]
028
=== added file 'account_statement_bankaccount_completion/tests/test_bankaccount_completion.py'
--- account_statement_bankaccount_completion/tests/test_bankaccount_completion.py 1970-01-01 00:00:00 +0000
+++ account_statement_bankaccount_completion/tests/test_bankaccount_completion.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,91 @@
1# -*- coding: utf-8 -*-
2#
3#
4# Authors: Laurent Mignon
5# Copyright (c) 2013 Acsone SA/NV (http://www.acsone.eu)
6# All Rights Reserved
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU Affero General Public License as
10# published by the Free Software Foundation, either version 3 of the
11# License, or (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU Affero General Public License for more details.
17#
18# You should have received a copy of the GNU Affero General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21#
22from openerp.tests import common
23import time
24
25ACC_NUMBER = "BE38733040385372"
26
27
28class bankaccount_completion(common.TransactionCase):
29
30 def prepare(self):
31 self.company_a = self.browse_ref('base.main_company')
32 self.profile_obj = self.registry("account.statement.profile")
33 self.account_bank_statement_obj = self.registry("account.bank.statement")
34 self.account_bank_statement_line_obj = self.registry("account.bank.statement.line")
35 self.completion_rule_id = self.ref('account_statement_bankaccount_completion.bank_statement_completion_rule_10')
36 self.journal_id = self.registry("ir.model.data").get_object_reference(self.cr, self. uid, "account", "bank_journal")[1]
37 self.partner_id = self.ref('base.main_partner')
38 # Create the profile
39 self.account_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "account", "a_recv")[1]
40 self.journal_id = self.registry("ir.model.data").get_object_reference(self.cr, self. uid, "account", "bank_journal")[1]
41 self.profile_id = self.profile_obj.create(self.cr, self.uid, {
42 "name": "TEST",
43 "commission_account_id": self.account_id,
44 "journal_id": self.journal_id,
45 "rule_ids": [(6, 0, [self.completion_rule_id])]})
46 # Create the completion rule
47
48 # Create a bank statement
49 self.statement_id = self.account_bank_statement_obj.create(self.cr, self.uid, {
50 "balance_end_real": 0.0,
51 "balance_start": 0.0,
52 "date": time.strftime('%Y-%m-%d'),
53 "journal_id": self.journal_id,
54 "profile_id": self.profile_id
55
56 })
57
58 # Create bank a statement line
59 self.statement_line_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, {
60 'amount': 1000.0,
61 'name': 'EXT001',
62 'ref': 'My ref',
63 'statement_id': self.statement_id,
64 'partner_acc_number': ACC_NUMBER
65 })
66
67 # Add a bank account number to the partner
68 res_bank_obj = self.registry('res.partner.bank')
69 res_bank_obj.create(self.cr, self.uid, {
70 "state": "bank",
71 "company_id": self.company_a.id,
72 "partner_id": self.partner_id,
73 "acc_number": ACC_NUMBER,
74 "footer": True,
75 "bank_name": "Reserve"
76 })
77
78 def test_00(self):
79 """Test complete partner_id from bank account number
80
81 Test the automatic completion of the partner_id based on the account number associated to the
82 statement line
83 """
84 self.prepare()
85 statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line_id)
86 # before import, the
87 self.assertFalse(statement_line.partner_id, "Partner_id must be blank before completion")
88 statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id)
89 statement_obj.button_auto_completion()
90 statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line_id)
91 self.assertEquals(self.partner_id, statement_line.partner_id['id'], "Missing expected partner id after completion")
092
=== added directory 'account_statement_base_completion'
=== added file 'account_statement_base_completion/__init__.py'
--- account_statement_base_completion/__init__.py 1970-01-01 00:00:00 +0000
+++ account_statement_base_completion/__init__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,23 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Joel Grand-Guillaume
5# Copyright 2011-2012 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from . import partner
23from . import statement
024
=== added file 'account_statement_base_completion/__openerp__.py'
--- account_statement_base_completion/__openerp__.py 1970-01-01 00:00:00 +0000
+++ account_statement_base_completion/__openerp__.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,77 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Joel Grand-Guillaume
5# Copyright 2011-2012 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22{'name': "Bank statement base completion",
23 'version': '1.0.2',
24 'author': 'Camptocamp',
25 'maintainer': 'Camptocamp',
26 'category': 'Finance',
27 'complexity': 'normal',
28 'depends': ['account_statement_ext'],
29 'description': """
30 The goal of this module is to improve the basic bank statement, help dealing with huge volume of
31 reconciliation by providing basic rules to identify the partner of a bank statement line.
32 Each bank statement profile can have its own rules to be applied according to a sequence order.
33
34 Some basic rules are provided in this module:
35
36 1) Match from statement line label (based on partner field 'Bank Statement Label')
37 2) Match from statement line label (based on partner name)
38 3) Match from statement line reference (based on Invoice number)
39
40 You can easily override this module and add your own rules in your own one. The basic rules only
41 fill in the partner, but you can use them to fill in any value of the line (in the future, we will
42 add a rule to automatically match and reconcile the line).
43
44 It adds as well a label on the bank statement line (on which the pre-define rules can match) and
45 a char field on the partner called 'Bank Statement Label'. Using the pre-define rules, you will be
46 able to match various labels for a partner.
47
48 The reference of the line is always used by the reconciliation process. We're supposed to copy
49 there (or write manually) the matching string. This can be: the order Number or an invoice number,
50 or anything that will be found in the invoice accounting entry part to make the match.
51
52 You can use it with our account_advanced_reconcile module to automatize the reconciliation process.
53
54
55 TODO: The rules that look for invoices to find out the partner should take back the payable / receivable
56 account from there directly instead of retrieving it from partner properties !
57
58 """,
59 'website': 'http://www.camptocamp.com',
60 'data': [
61 'statement_view.xml',
62 'partner_view.xml',
63 'data.xml',
64 'security/ir.model.access.csv',
65 ],
66 'demo': [],
67 'test': [
68 'test/partner.yml',
69 'test/invoice.yml',
70 'test/supplier_invoice.yml',
71 'test/completion_test.yml'
72 ],
73 'installable': True,
74 'images': [],
75 'auto_install': False,
76 'license': 'AGPL-3',
77}
078
=== added file 'account_statement_base_completion/data.xml'
--- account_statement_base_completion/data.xml 1970-01-01 00:00:00 +0000
+++ account_statement_base_completion/data.xml 2014-04-03 07:40:14 +0000
@@ -0,0 +1,31 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3<data noupdate="1">
4
5 <record id="bank_statement_completion_rule_2" model="account.statement.completion.rule">
6 <field name="name">Match from line label (based on partner field 'Bank Statement Label')</field>
7 <field name="sequence">60</field>
8 <field name="function_to_call">get_from_label_and_partner_field</field>
9 </record>
10
11 <record id="bank_statement_completion_rule_3" model="account.statement.completion.rule">
12 <field name="name">Match from line label (based on partner name)</field>
13 <field name="sequence">70</field>
14 <field name="function_to_call">get_from_label_and_partner_name</field>
15 </record>
16
17 <record id="bank_statement_completion_rule_4" model="account.statement.completion.rule">
18 <field name="name">Match from line reference (based on Invoice number)</field>
19 <field name="sequence">40</field>
20 <field name="function_to_call">get_from_ref_and_invoice</field>
21 </record>
22
23 <record id="bank_statement_completion_rule_5" model="account.statement.completion.rule">
24 <field name="name">Match from line reference (based on Invoice Supplier number)</field>
25 <field name="sequence">45</field>
26 <field name="function_to_call">get_from_ref_and_supplier_invoice</field>
27 </record>
28
29
30</data>
31</openerp>
032
=== added directory 'account_statement_base_completion/i18n'
=== added file 'account_statement_base_completion/i18n/ab.po'
--- account_statement_base_completion/i18n/ab.po 1970-01-01 00:00:00 +0000
+++ account_statement_base_completion/i18n/ab.po 2014-04-03 07:40:14 +0000
@@ -0,0 +1,216 @@
1# Abkhazian translation for banking-addons
2# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3# This file is distributed under the same license as the banking-addons package.
4# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5#
6msgid ""
7msgstr ""
8"Project-Id-Version: banking-addons\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-01-21 11:57+0000\n"
11"PO-Revision-Date: 2014-04-02 23:04+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Abkhazian <ab@li.org>\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
17"X-Launchpad-Export-Date: 2014-04-03 06:06+0000\n"
18"X-Generator: Launchpad (build 16967)\n"
19
20#. module: account_statement_base_completion
21#: view:account.statement.completion.rule:0
22msgid "Related Profiles"
23msgstr ""
24
25#. module: account_statement_base_completion
26#: help:account.bank.statement.line,label:0
27msgid ""
28"Generic field to store a label given from the bank/office on which we can "
29"base the default/standard providen rule."
30msgstr ""
31
32#. module: account_statement_base_completion
33#: code:addons/account_statement_base_completion/statement.py:169
34#, python-format
35msgid ""
36"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
37"looking on %s invoices"
38msgstr ""
39
40#. module: account_statement_base_completion
41#: field:account.bank.statement,completion_logs:0
42msgid "Completion Log"
43msgstr ""
44
45#. module: account_statement_base_completion
46#: field:account.bank.statement.line,label:0
47msgid "Label"
48msgstr ""
49
50#. module: account_statement_base_completion
51#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement
52msgid "Bank Statement"
53msgstr ""
54
55#. module: account_statement_base_completion
56#: field:account.statement.completion.rule,function_to_call:0
57msgid "Method"
58msgstr ""
59
60#. module: account_statement_base_completion
61#: code:addons/account_statement_base_completion/statement.py:326
62#, python-format
63msgid ""
64"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
65"looking on partner by name"
66msgstr ""
67
68#. module: account_statement_base_completion
69#: code:addons/account_statement_base_completion/statement.py:504
70#, python-format
71msgid "Statement ID %s auto-completed for %s lines completed"
72msgstr ""
73
74#. module: account_statement_base_completion
75#: code:addons/account_statement_base_completion/statement.py:500
76#, python-format
77msgid ""
78"%s Bank Statement ID %s has %s lines completed by %s \n"
79"%s\n"
80"%s\n"
81msgstr ""
82
83#. module: account_statement_base_completion
84#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement_line
85msgid "Bank Statement Line"
86msgstr ""
87
88#. module: account_statement_base_completion
89#: field:account.bank.statement.line,additionnal_bank_fields:0
90msgid "Additionnal infos from bank"
91msgstr ""
92
93#. module: account_statement_base_completion
94#: view:account.statement.profile:0
95msgid "Auto-Completion Rules"
96msgstr ""
97
98#. module: account_statement_base_completion
99#: view:account.bank.statement:0
100msgid "Importation related infos"
101msgstr ""
102
103#. module: account_statement_base_completion
104#: code:addons/account_statement_base_completion/statement.py:159
105#: code:addons/account_statement_base_completion/statement.py:179
106#, python-format
107msgid "Invalid invoice type for completion: %"
108msgstr ""
109
110#. module: account_statement_base_completion
111#: field:account.statement.completion.rule,name:0
112msgid "Name"
113msgstr ""
114
115#. module: account_statement_base_completion
116#: model:ir.model,name:account_statement_base_completion.model_account_statement_profile
117msgid "Statement Profile"
118msgstr ""
119
120#. module: account_statement_base_completion
121#: view:account.bank.statement:0
122msgid "Auto Completion"
123msgstr ""
124
125#. module: account_statement_base_completion
126#: view:account.statement.completion.rule:0
127#: model:ir.actions.act_window,name:account_statement_base_completion.action_st_completion_rule_tree
128#: model:ir.ui.menu,name:account_statement_base_completion.menu_action_st_completion_rule_tree_menu
129msgid "Statement Completion Rule"
130msgstr ""
131
132#. module: account_statement_base_completion
133#: model:ir.model,name:account_statement_base_completion.model_account_statement_completion_rule
134msgid "account.statement.completion.rule"
135msgstr ""
136
137#. module: account_statement_base_completion
138#: help:account.bank.statement.line,additionnal_bank_fields:0
139msgid ""
140"Used by completion and import system. Adds every field that is present in "
141"your bank/office statement file"
142msgstr ""
143
144#. module: account_statement_base_completion
145#: field:account.statement.completion.rule,profile_ids:0
146#: field:account.statement.profile,rule_ids:0
147msgid "Related statement profiles"
148msgstr ""
149
150#. module: account_statement_base_completion
151#: code:addons/account_statement_base_completion/statement.py:158
152#: code:addons/account_statement_base_completion/statement.py:178
153#, python-format
154msgid "System error"
155msgstr ""
156
157#. module: account_statement_base_completion
158#: field:account.bank.statement.line,already_completed:0
159msgid "Auto-Completed"
160msgstr ""
161
162#. module: account_statement_base_completion
163#: code:addons/account_statement_base_completion/statement.py:448
164#: code:addons/account_statement_base_completion/statement.py:466
165#, python-format
166msgid "ORM bypass error"
167msgstr ""
168
169#. module: account_statement_base_completion
170#: field:account.statement.completion.rule,sequence:0
171msgid "Sequence"
172msgstr ""
173
174#. module: account_statement_base_completion
175#: code:addons/account_statement_base_completion/statement.py:280
176#, python-format
177msgid ""
178"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
179"looking on partner label: %s"
180msgstr ""
181
182#. module: account_statement_base_completion
183#: help:account.statement.completion.rule,sequence:0
184msgid "Lower means parsed first."
185msgstr ""
186
187#. module: account_statement_base_completion
188#: field:res.partner,bank_statement_label:0
189msgid "Bank Statement Label"
190msgstr ""
191
192#. module: account_statement_base_completion
193#: help:account.bank.statement.line,already_completed:0
194msgid ""
195"When this checkbox is ticked, the auto-completion process/button will ignore "
196"this line."
197msgstr ""
198
199#. module: account_statement_base_completion
200#: help:res.partner,bank_statement_label:0
201msgid ""
202"Enter the various label found on your bank statement separated by a ; If "
203" one of this label is include in the bank statement line, the "
204"partner will be automatically filled (as long as you use "
205"this method/rules in your statement profile)."
206msgstr ""
207
208#. module: account_statement_base_completion
209#: model:ir.model,name:account_statement_base_completion.model_res_partner
210msgid "Partner"
211msgstr ""
212
213#. module: account_statement_base_completion
214#: view:account.bank.statement:0
215msgid "Completion Logs"
216msgstr ""
0217
=== added file 'account_statement_base_completion/i18n/account_statement_base_completion.pot'
--- account_statement_base_completion/i18n/account_statement_base_completion.pot 1970-01-01 00:00:00 +0000
+++ account_statement_base_completion/i18n/account_statement_base_completion.pot 2014-04-03 07:40:14 +0000
@@ -0,0 +1,199 @@
1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:
3# * account_statement_base_completion
4#
5msgid ""
6msgstr ""
7"Project-Id-Version: OpenERP Server 7.0\n"
8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2014-01-21 11:57+0000\n"
10"PO-Revision-Date: 2014-01-21 11:57+0000\n"
11"Last-Translator: <>\n"
12"Language-Team: \n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"
17
18#. module: account_statement_base_completion
19#: view:account.statement.completion.rule:0
20msgid "Related Profiles"
21msgstr ""
22
23#. module: account_statement_base_completion
24#: help:account.bank.statement.line,label:0
25msgid "Generic field to store a label given from the bank/office on which we can base the default/standard providen rule."
26msgstr ""
27
28#. module: account_statement_base_completion
29#: code:addons/account_statement_base_completion/statement.py:169
30#, python-format
31msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner while looking on %s invoices"
32msgstr ""
33
34#. module: account_statement_base_completion
35#: field:account.bank.statement,completion_logs:0
36msgid "Completion Log"
37msgstr ""
38
39#. module: account_statement_base_completion
40#: field:account.bank.statement.line,label:0
41msgid "Label"
42msgstr ""
43
44#. module: account_statement_base_completion
45#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement
46msgid "Bank Statement"
47msgstr ""
48
49#. module: account_statement_base_completion
50#: field:account.statement.completion.rule,function_to_call:0
51msgid "Method"
52msgstr ""
53
54#. module: account_statement_base_completion
55#: code:addons/account_statement_base_completion/statement.py:326
56#, python-format
57msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner while looking on partner by name"
58msgstr ""
59
60#. module: account_statement_base_completion
61#: code:addons/account_statement_base_completion/statement.py:504
62#, python-format
63msgid "Statement ID %s auto-completed for %s lines completed"
64msgstr ""
65
66#. module: account_statement_base_completion
67#: code:addons/account_statement_base_completion/statement.py:500
68#, python-format
69msgid "%s Bank Statement ID %s has %s lines completed by %s \n"
70"%s\n"
71"%s\n"
72""
73msgstr ""
74
75#. module: account_statement_base_completion
76#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement_line
77msgid "Bank Statement Line"
78msgstr ""
79
80#. module: account_statement_base_completion
81#: field:account.bank.statement.line,additionnal_bank_fields:0
82msgid "Additionnal infos from bank"
83msgstr ""
84
85#. module: account_statement_base_completion
86#: view:account.statement.profile:0
87msgid "Auto-Completion Rules"
88msgstr ""
89
90#. module: account_statement_base_completion
91#: view:account.bank.statement:0
92msgid "Importation related infos"
93msgstr ""
94
95#. module: account_statement_base_completion
96#: code:addons/account_statement_base_completion/statement.py:159
97#: code:addons/account_statement_base_completion/statement.py:179
98#, python-format
99msgid "Invalid invoice type for completion: %"
100msgstr ""
101
102#. module: account_statement_base_completion
103#: field:account.statement.completion.rule,name:0
104msgid "Name"
105msgstr ""
106
107#. module: account_statement_base_completion
108#: model:ir.model,name:account_statement_base_completion.model_account_statement_profile
109msgid "Statement Profile"
110msgstr ""
111
112#. module: account_statement_base_completion
113#: view:account.bank.statement:0
114msgid "Auto Completion"
115msgstr ""
116
117#. module: account_statement_base_completion
118#: view:account.statement.completion.rule:0
119#: model:ir.actions.act_window,name:account_statement_base_completion.action_st_completion_rule_tree
120#: model:ir.ui.menu,name:account_statement_base_completion.menu_action_st_completion_rule_tree_menu
121msgid "Statement Completion Rule"
122msgstr ""
123
124#. module: account_statement_base_completion
125#: model:ir.model,name:account_statement_base_completion.model_account_statement_completion_rule
126msgid "account.statement.completion.rule"
127msgstr ""
128
129#. module: account_statement_base_completion
130#: help:account.bank.statement.line,additionnal_bank_fields:0
131msgid "Used by completion and import system. Adds every field that is present in your bank/office statement file"
132msgstr ""
133
134#. module: account_statement_base_completion
135#: field:account.statement.completion.rule,profile_ids:0
136#: field:account.statement.profile,rule_ids:0
137msgid "Related statement profiles"
138msgstr ""
139
140#. module: account_statement_base_completion
141#: code:addons/account_statement_base_completion/statement.py:158
142#: code:addons/account_statement_base_completion/statement.py:178
143#, python-format
144msgid "System error"
145msgstr ""
146
147#. module: account_statement_base_completion
148#: field:account.bank.statement.line,already_completed:0
149msgid "Auto-Completed"
150msgstr ""
151
152#. module: account_statement_base_completion
153#: code:addons/account_statement_base_completion/statement.py:448
154#: code:addons/account_statement_base_completion/statement.py:466
155#, python-format
156msgid "ORM bypass error"
157msgstr ""
158
159#. module: account_statement_base_completion
160#: field:account.statement.completion.rule,sequence:0
161msgid "Sequence"
162msgstr ""
163
164#. module: account_statement_base_completion
165#: code:addons/account_statement_base_completion/statement.py:280
166#, python-format
167msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner while looking on partner label: %s"
168msgstr ""
169
170#. module: account_statement_base_completion
171#: help:account.statement.completion.rule,sequence:0
172msgid "Lower means parsed first."
173msgstr ""
174
175#. module: account_statement_base_completion
176#: field:res.partner,bank_statement_label:0
177msgid "Bank Statement Label"
178msgstr ""
179
180#. module: account_statement_base_completion
181#: help:account.bank.statement.line,already_completed:0
182msgid "When this checkbox is ticked, the auto-completion process/button will ignore this line."
183msgstr ""
184
185#. module: account_statement_base_completion
186#: help:res.partner,bank_statement_label:0
187msgid "Enter the various label found on your bank statement separated by a ; If one of this label is include in the bank statement line, the partner will be automatically filled (as long as you use this method/rules in your statement profile)."
188msgstr ""
189
190#. module: account_statement_base_completion
191#: model:ir.model,name:account_statement_base_completion.model_res_partner
192msgid "Partner"
193msgstr ""
194
195#. module: account_statement_base_completion
196#: view:account.bank.statement:0
197msgid "Completion Logs"
198msgstr ""
199
0200
=== added file 'account_statement_base_completion/i18n/fr.po'
--- account_statement_base_completion/i18n/fr.po 1970-01-01 00:00:00 +0000
+++ account_statement_base_completion/i18n/fr.po 2014-04-03 07:40:14 +0000
@@ -0,0 +1,216 @@
1# French translation for banking-addons
2# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3# This file is distributed under the same license as the banking-addons package.
4# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5#
6msgid ""
7msgstr ""
8"Project-Id-Version: banking-addons\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2014-01-21 11:57+0000\n"
11"PO-Revision-Date: 2014-03-21 15:17+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: French <fr@li.org>\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
17"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
18"X-Generator: Launchpad (build 16967)\n"
19
20#. module: account_statement_base_completion
21#: view:account.statement.completion.rule:0
22msgid "Related Profiles"
23msgstr ""
24
25#. module: account_statement_base_completion
26#: help:account.bank.statement.line,label:0
27msgid ""
28"Generic field to store a label given from the bank/office on which we can "
29"base the default/standard providen rule."
30msgstr ""
31
32#. module: account_statement_base_completion
33#: code:addons/account_statement_base_completion/statement.py:169
34#, python-format
35msgid ""
36"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
37"looking on %s invoices"
38msgstr ""
39
40#. module: account_statement_base_completion
41#: field:account.bank.statement,completion_logs:0
42msgid "Completion Log"
43msgstr ""
44
45#. module: account_statement_base_completion
46#: field:account.bank.statement.line,label:0
47msgid "Label"
48msgstr ""
49
50#. module: account_statement_base_completion
51#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement
52msgid "Bank Statement"
53msgstr ""
54
55#. module: account_statement_base_completion
56#: field:account.statement.completion.rule,function_to_call:0
57msgid "Method"
58msgstr ""
59
60#. module: account_statement_base_completion
61#: code:addons/account_statement_base_completion/statement.py:326
62#, python-format
63msgid ""
64"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
65"looking on partner by name"
66msgstr ""
67
68#. module: account_statement_base_completion
69#: code:addons/account_statement_base_completion/statement.py:504
70#, python-format
71msgid "Statement ID %s auto-completed for %s lines completed"
72msgstr ""
73
74#. module: account_statement_base_completion
75#: code:addons/account_statement_base_completion/statement.py:500
76#, python-format
77msgid ""
78"%s Bank Statement ID %s has %s lines completed by %s \n"
79"%s\n"
80"%s\n"
81msgstr ""
82
83#. module: account_statement_base_completion
84#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement_line
85msgid "Bank Statement Line"
86msgstr ""
87
88#. module: account_statement_base_completion
89#: field:account.bank.statement.line,additionnal_bank_fields:0
90msgid "Additionnal infos from bank"
91msgstr ""
92
93#. module: account_statement_base_completion
94#: view:account.statement.profile:0
95msgid "Auto-Completion Rules"
96msgstr ""
97
98#. module: account_statement_base_completion
99#: view:account.bank.statement:0
100msgid "Importation related infos"
101msgstr ""
102
103#. module: account_statement_base_completion
104#: code:addons/account_statement_base_completion/statement.py:159
105#: code:addons/account_statement_base_completion/statement.py:179
106#, python-format
107msgid "Invalid invoice type for completion: %"
108msgstr ""
109
110#. module: account_statement_base_completion
111#: field:account.statement.completion.rule,name:0
112msgid "Name"
113msgstr ""
114
115#. module: account_statement_base_completion
116#: model:ir.model,name:account_statement_base_completion.model_account_statement_profile
117msgid "Statement Profile"
118msgstr ""
119
120#. module: account_statement_base_completion
121#: view:account.bank.statement:0
122msgid "Auto Completion"
123msgstr ""
124
125#. module: account_statement_base_completion
126#: view:account.statement.completion.rule:0
127#: model:ir.actions.act_window,name:account_statement_base_completion.action_st_completion_rule_tree
128#: model:ir.ui.menu,name:account_statement_base_completion.menu_action_st_completion_rule_tree_menu
129msgid "Statement Completion Rule"
130msgstr ""
131
132#. module: account_statement_base_completion
133#: model:ir.model,name:account_statement_base_completion.model_account_statement_completion_rule
134msgid "account.statement.completion.rule"
135msgstr ""
136
137#. module: account_statement_base_completion
138#: help:account.bank.statement.line,additionnal_bank_fields:0
139msgid ""
140"Used by completion and import system. Adds every field that is present in "
141"your bank/office statement file"
142msgstr ""
143
144#. module: account_statement_base_completion
145#: field:account.statement.completion.rule,profile_ids:0
146#: field:account.statement.profile,rule_ids:0
147msgid "Related statement profiles"
148msgstr ""
149
150#. module: account_statement_base_completion
151#: code:addons/account_statement_base_completion/statement.py:158
152#: code:addons/account_statement_base_completion/statement.py:178
153#, python-format
154msgid "System error"
155msgstr ""
156
157#. module: account_statement_base_completion
158#: field:account.bank.statement.line,already_completed:0
159msgid "Auto-Completed"
160msgstr ""
161
162#. module: account_statement_base_completion
163#: code:addons/account_statement_base_completion/statement.py:448
164#: code:addons/account_statement_base_completion/statement.py:466
165#, python-format
166msgid "ORM bypass error"
167msgstr ""
168
169#. module: account_statement_base_completion
170#: field:account.statement.completion.rule,sequence:0
171msgid "Sequence"
172msgstr ""
173
174#. module: account_statement_base_completion
175#: code:addons/account_statement_base_completion/statement.py:280
176#, python-format
177msgid ""
178"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
179"looking on partner label: %s"
180msgstr ""
181
182#. module: account_statement_base_completion
183#: help:account.statement.completion.rule,sequence:0
184msgid "Lower means parsed first."
185msgstr ""
186
187#. module: account_statement_base_completion
188#: field:res.partner,bank_statement_label:0
189msgid "Bank Statement Label"
190msgstr ""
191
192#. module: account_statement_base_completion
193#: help:account.bank.statement.line,already_completed:0
194msgid ""
195"When this checkbox is ticked, the auto-completion process/button will ignore "
196"this line."
197msgstr ""
198
199#. module: account_statement_base_completion
200#: help:res.partner,bank_statement_label:0
201msgid ""
202"Enter the various label found on your bank statement separated by a ; If "
203" one of this label is include in the bank statement line, the "
204"partner will be automatically filled (as long as you use "
205"this method/rules in your statement profile)."
206msgstr ""
207
208#. module: account_statement_base_completion
209#: model:ir.model,name:account_statement_base_completion.model_res_partner
210msgid "Partner"
211msgstr ""
212
213#. module: account_statement_base_completion
214#: view:account.bank.statement:0
215msgid "Completion Logs"
216msgstr ""
0217
=== added file 'account_statement_base_completion/partner.py'
--- account_statement_base_completion/partner.py 1970-01-01 00:00:00 +0000
+++ account_statement_base_completion/partner.py 2014-04-03 07:40:14 +0000
@@ -0,0 +1,38 @@
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to status/vote changes: