From f4b9c51d5de6a859c28d102421f904ad27c6a5b8 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Sat, 1 Dec 2012 19:31:34 +0100 Subject: [PATCH 1/3] [IMP] Create import transactions instantly on manually encoded statements when matching wizard is run --- account_banking/banking_import_transaction.py | 55 +++++++++++++++++-- .../wizard/banking_transaction_wizard.py | 12 ++++ 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/account_banking/banking_import_transaction.py b/account_banking/banking_import_transaction.py index 330a0710d..bc6bd0682 100644 --- a/account_banking/banking_import_transaction.py +++ b/account_banking/banking_import_transaction.py @@ -606,7 +606,7 @@ class banking_import_transaction(osv.osv): payment_line_obj.write( cr, uid, transaction.payment_line_id.id, { 'export_state': 'done', - 'date_done': transaction.effective_date, + 'date_done': transaction.statement_line_id.date, } ) self._confirm_move(cr, uid, transaction_id, context=context) @@ -961,9 +961,14 @@ class banking_import_transaction(osv.osv): ] def create(self, cr, uid, vals, context=None): + """ + Search for duplicates of the newly created transaction + and mark them as such unless a context key + 'transaction_no_duplicate_search' is defined and true. + """ res = super(banking_import_transaction, self).create( cr, uid, vals, context) - if res: + if res and not context.get('transaction_no_duplicate_search'): me = self.browse(cr, uid, res, context) search_vals = [(key, '=', me[key]) for key in self.signal_duplicate_keys] @@ -1556,8 +1561,16 @@ class banking_import_transaction(osv.osv): if transaction.move_line_id: move_line_amount = transaction.move_line_id.amount_residual_currency - to_curr_id = transaction.statement_id.journal_id.currency and transaction.statement_id.journal_id.currency.id or transaction.statement_line_id.statement_id.company_id.currency_id.id - from_curr_id = transaction.move_line_id.currency_id and transaction.move_line_id.currency_id.id or transaction.statement_id.company_id.currency_id.id + to_curr_id = ( + transaction.statement_line_id.statement_id.journal_id.currency + and transaction.statement_line_id.statement_id.journal_id.currency.id + or transaction.statement_line_id.statement_id.company_id.currency_id.id + ) + from_curr_id = ( + transaction.move_line_id.currency_id + and transaction.move_line_id.currency_id.id + or transaction.statement_line_id.statement_id.company_id.currency_id.id + ) if from_curr_id != to_curr_id: amount_currency = stline_pool._convert_currency(cr, uid, from_curr_id, to_curr_id, move_line_amount, round=True, date=time.strftime('%Y-%m-%d'), context=context) @@ -1871,6 +1884,40 @@ class account_bank_statement_line(osv.osv): return super(account_bank_statement_line, self).unlink( cr, uid, ids, context=context) + def create_instant_transaction( + self, cr, uid, ids, context=None): + """ + Check for existance of import transaction on the + bank statement lines. Create instant items if appropriate. + + This way, the matching wizard works on manually + encoded statements. + + The transaction is only filled with the most basic + information. The use of the transaction at this point + is rather to store matching data rather than to + provide data about the transaction which have all been + transferred to the bank statement line. + """ + import_transaction_pool = self.pool.get('banking.import.transaction') + if ids and isinstance(ids, (int, long)): + ids = [ids] + localcontext = context.copy() + localcontext['transaction_no_duplicate_search'] = True + for line in self.browse( + cr, uid, ids, context=context): + if line.state != 'confirmed' and not line.import_transaction_id: + res = import_transaction_pool.create( + cr, uid, { + 'company_id': line.statement_id.company_id.id, + 'statement_line_id': line.id, + }, + context=localcontext) + self.write( + cr, uid, line.id, { + 'import_transaction_id': res}, + context=context) + account_bank_statement_line() class account_bank_statement(osv.osv): diff --git a/account_banking/wizard/banking_transaction_wizard.py b/account_banking/wizard/banking_transaction_wizard.py index 8171cb776..53d2158d3 100644 --- a/account_banking/wizard/banking_transaction_wizard.py +++ b/account_banking/wizard/banking_transaction_wizard.py @@ -35,6 +35,18 @@ class banking_transaction_wizard(osv.osv_memory): _name = 'banking.transaction.wizard' _description = 'Match transaction' + def create(self, cr, uid, vals, context=None): + """ + Make sure that the statement line has an import transaction + """ + res = super(banking_transaction_wizard, self).create( + cr, uid, vals, context=context) + if res and vals.get('statement_line_id'): + line_pool = self.pool.get('account.bank.statement.line') + line_pool.create_instant_transaction( + cr, uid, vals['statement_line_id'], context=context) + return res + def create_act_window(self, cr, uid, ids, nodestroy=True, context=None): """ Return a popup window for this model From dcfea3a6a1d0b65dabe9b690f45c9d6849500490 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Sat, 1 Dec 2012 19:36:21 +0100 Subject: [PATCH 2/3] [FIX] Check for context is None --- account_banking/banking_import_transaction.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/account_banking/banking_import_transaction.py b/account_banking/banking_import_transaction.py index bc6bd0682..2d7533b73 100644 --- a/account_banking/banking_import_transaction.py +++ b/account_banking/banking_import_transaction.py @@ -1902,6 +1902,8 @@ class account_bank_statement_line(osv.osv): import_transaction_pool = self.pool.get('banking.import.transaction') if ids and isinstance(ids, (int, long)): ids = [ids] + if context = None: + context = {} localcontext = context.copy() localcontext['transaction_no_duplicate_search'] = True for line in self.browse( From 2e24c3a3e3a4c05de810bdbecf0c5f19dbe5b6dd Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Mon, 10 Dec 2012 10:32:39 +0100 Subject: [PATCH 3/3] [FIX] Fix context comparison with None --- account_banking/banking_import_transaction.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/account_banking/banking_import_transaction.py b/account_banking/banking_import_transaction.py index 2d7533b73..8ef9aaa01 100644 --- a/account_banking/banking_import_transaction.py +++ b/account_banking/banking_import_transaction.py @@ -1902,7 +1902,7 @@ class account_bank_statement_line(osv.osv): import_transaction_pool = self.pool.get('banking.import.transaction') if ids and isinstance(ids, (int, long)): ids = [ids] - if context = None: + if context is None: context = {} localcontext = context.copy() localcontext['transaction_no_duplicate_search'] = True