← Back to team overview

banking-addons-team team mailing list archive

[Merge] lp:~acsone-openerp/banking-addons/bank-statement-reconcile-70-import-statement-hook into lp:banking-addons/bank-statement-reconcile-7.0

 

Laurent Mignon (Acsone) has proposed merging lp:~acsone-openerp/banking-addons/bank-statement-reconcile-70-import-statement-hook into lp:banking-addons/bank-statement-reconcile-7.0.

Requested reviews:
  Pedro Manuel Baeza (pedro.baeza)

For more details, see:
https://code.launchpad.net/~acsone-openerp/banking-addons/bank-statement-reconcile-70-import-statement-hook/+merge/203127

Hi,

In some cases, the imported file may contains information about the account.bank.statement. 
The proposal add a new method 'get_st_vals' on the 'BankStatementImportParser' that can be used to provide statement info from the parsed file and a new method 'prepare_statement_vals' on 'AccountStatementProfil' that fills the statement values with the profile_id and the result to the call to the new method on the parser.
-- 
https://code.launchpad.net/~acsone-openerp/banking-addons/bank-statement-reconcile-70-import-statement-hook/+merge/203127
Your team Banking Addons Core Editors is subscribed to branch lp:banking-addons/bank-statement-reconcile-7.0.
=== modified file 'account_statement_base_completion/statement.py'
--- account_statement_base_completion/statement.py	2014-01-23 08:44:24 +0000
+++ account_statement_base_completion/statement.py	2014-01-24 17:16:24 +0000
@@ -184,7 +184,7 @@
         inv = self._find_invoice(cr, uid, line, inv_type, context=context)
         if inv:
             # FIXME use only commercial_partner_id of invoice in 7.1
-            # this is for backward compatibility in 7.0 before 
+            # this is for backward compatibility in 7.0 before
             # the refactoring of res.partner
             if hasattr(inv, 'commercial_partner_id'):
                 partner_id = inv.commercial_partner_id.id
@@ -418,7 +418,7 @@
         """
         statement_line_obj = self.pool['account.bank.statement.line']
         model_cols = statement_line_obj._columns
-        sparse_fields = dict([(k , col) for k, col in model_cols.iteritems() if isinstance(col, fields.sparse) and col._type == 'char'])
+        sparse_fields = dict([(k, col) for k, col in model_cols.iteritems() if isinstance(col, fields.sparse) and col._type == 'char'])
         values = []
         for statement in statement_store:
             to_json_k = set()
@@ -429,10 +429,9 @@
                     serialized = st_copy.setdefault(col.serialization_field, {})
                     serialized[k] = st_copy[k]
             for k in to_json_k:
-                st_copy[k] =  simplejson.dumps(st_copy[k])
+                st_copy[k] = simplejson.dumps(st_copy[k])
             values.append(st_copy)
         return values
-        
 
     def _insert_lines(self, cr, uid, statement_store, context=None):
         """ Do raw insert into database because ORM is awfully slow
@@ -456,7 +455,7 @@
             when cheking security.
         TODO / WARM: sparse fields are skipped by the method. IOW, if your
         completion rule update an sparse field, the updated value will never
-        be stored in the database. It would be safer to call the update method 
+        be stored in the database. It would be safer to call the update method
         from the ORM for records updating this kind of fields.
         """
         cols = self._get_available_columns([vals])

=== modified file 'account_statement_base_import/parser/parser.py'
--- account_statement_base_import/parser/parser.py	2013-12-11 19:11:44 +0000
+++ account_statement_base_import/parser/parser.py	2014-01-24 17:16:24 +0000
@@ -20,7 +20,6 @@
 ##############################################################################
 import base64
 import csv
-from datetime import datetime
 
 
 def UnicodeDictReader(utf8_data, **kwargs):
@@ -115,6 +114,19 @@
         """
         return NotImplementedError
 
+    def get_st_vals(self):
+        """
+        This method return a dict of vals that ca be passed to
+        create method of statement.
+        :return: dict of vals that represent additional infos for the statement
+        """
+        return {
+                'name': self.statement_name,
+                'balance_start': self.balance_start,
+                'balance_end_real': self.balance_end,
+                'date': self.statement_date
+        }
+
     def get_st_line_vals(self, line, *args, **kwargs):
         """
         Implement a method in your parser that must return a dict of vals that can be
@@ -155,37 +167,6 @@
         self._post(*args, **kwargs)
         return self.result_row_list
 
-    def get_start_balance(self, *args, **kwargs):
-        """
-        This is called by the importation method to set the balance start
-        amount in the bank statement.
-            return: float of the balance start (self.balance_start)
-        """
-        return self.balance_start
-
-    def get_end_balance(self, *args, **kwargs):
-        """
-        This is called by the importation method to set the balance end
-        amount in the bank statement.
-            return: float of the balance end (self.balance_end)
-        """
-        return self.balance_end
-
-    def get_statement_name(self, *args, **kwargs):
-        """
-        This is called by the importation method to set the statement
-        name in the bank statement.
-            return: string of the statement name (self.statement_name)
-        """
-        return self.statement_name or '/'
-
-    def get_statement_date(self, *args, **kwargs):
-        """
-        This is called by the importation method to set the statement
-        date in the bank statement.
-            return: datetime of the statement date (self.statement_date)
-        """
-        return self.statement_date or datetime.now()
 
 def itersubclasses(cls, _seen=None):
     """

=== modified file 'account_statement_base_import/statement.py'
--- account_statement_base_import/statement.py	2013-12-04 17:39:04 +0000
+++ account_statement_base_import/statement.py	2014-01-24 17:16:24 +0000
@@ -90,7 +90,7 @@
             statement_id, context):
         """
         Hook to build the values of a line from the parser returned values. At
-        least it fullfill the statement_id and account_id. Overide it to add your
+        least it fullfill the statement_id and account_id. Override it to add your
         own completion if needed.
 
         :param dict of vals from parser for account.bank.statement.line (called by
@@ -126,14 +126,14 @@
         values['type'] = 'general'
         return values
 
-
-    def _prepare_statement_vals(self, cr, uid, prof, parser, context=None):
-        return {
-            'profile_id': prof.id,
-            'name': parser.get_statement_name(),
-            'balance_start': parser.get_start_balance(),
-            'balance_end_real': parser.get_end_balance(),
-        }
+    def prepare_statement_vals(self, cr, uid, profile_id, result_row_list, parser, context):
+        """
+        Hook to build the values of the statement from the parser and
+        the profile.
+        """
+        vals = {'profile_id': profile_id}
+        vals.update(parser.get_st_vals())
+        return vals
 
     def statement_import(self, cr, uid, ids, profile_id, file_stream, ftype="csv", context=None):
         """
@@ -168,8 +168,11 @@
                                      _("Column %s you try to import is not "
                                        "present in the bank statement line!") % col)
 
-        st_vals = self._prepare_statement_vals(cr, uid, prof, parser, context=context) 
-        statement_id = statement_obj.create(cr, uid, st_vals, context=context)
+        statement_vals = self.prepare_statement_vals(cr, uid, prof.id, result_row_list, parser, context)
+        statement_id = statement_obj.create(cr, uid,
+                                            statement_vals,
+                                            context=context)
+
         if prof.receivable_account_id:
             account_receivable = account_payable = prof.receivable_account_id.id
         else:

=== modified file 'account_statement_commission/commission.py'
--- account_statement_commission/commission.py	2013-12-04 14:14:56 +0000
+++ account_statement_commission/commission.py	2014-01-24 17:16:24 +0000
@@ -2,9 +2,11 @@
 import datetime
 from openerp.osv import orm, fields
 
+
 def float_or_zero(val):
     return float(val) if val else 0.0
 
+
 class AccountStatementProfil(orm.Model):
     _inherit = "account.statement.profile"
 
@@ -22,7 +24,7 @@
         commission_analytic_id = profile.commission_analytic_id and profile.commission_analytic_id.id or False
         comm_values = {
             'name': 'IN ' + _('Commission line'),
-            'date': parser.get_statement_date(),
+            'date': parser.get_st_vals().get('date') or datetime.datetime.now(),
             'amount': global_commission_amount,
             'partner_id': partner_id,
             'type': 'general',
@@ -36,6 +38,7 @@
         statement_line_obj = self.pool.get('account.bank.statement.line')
         statement_line_obj.create(cr, uid, comm_values, context=context)
 
+
 class AccountStatementLineWithCommission(orm.Model):
     _inherit = "account.bank.statement.line"
     _columns = {
@@ -45,6 +48,7 @@
             serialization_field='additionnal_bank_fields'),
     }
 
+
 class CreditPartnerStatementImporter(orm.TransientModel):
     _inherit = "credit.statement.import"
 


Follow ups