← Back to team overview

banking-addons-team team mailing list archive

lp:~camptocamp/banking-addons/bank-statement-reconcile-70-add-completion-rule into lp:banking-addons/bank-statement-reconcile-70

 

Nicolas Bessi - Camptocamp has proposed merging lp:~camptocamp/banking-addons/bank-statement-reconcile-70-add-completion-rule into lp:banking-addons/bank-statement-reconcile-70.

Requested reviews:
  Banking Addons Team (banking-addons-team)

For more details, see:
https://code.launchpad.net/~camptocamp/banking-addons/bank-statement-reconcile-70-add-completion-rule/+merge/151217

Add a completion rule to allows supplier invoice completion baser on invoice number
-- 
https://code.launchpad.net/~camptocamp/banking-addons/bank-statement-reconcile-70-add-completion-rule/+merge/151217
Your team Banking Addons Team is requested to review the proposed merge of lp:~camptocamp/banking-addons/bank-statement-reconcile-70-add-completion-rule into lp:banking-addons/bank-statement-reconcile-70.
=== modified file 'account_statement_base_completion/data.xml'
--- account_statement_base_completion/data.xml	2012-06-26 09:21:35 +0000
+++ account_statement_base_completion/data.xml	2013-03-01 12:32:22 +0000
@@ -7,7 +7,7 @@
           <field name="sequence">60</field>
           <field name="function_to_call">get_from_label_and_partner_field</field>
       </record>
-      
+
     <record id="bank_statement_completion_rule_3" model="account.statement.completion.rule">
          <field name="name">Match from line label (based on partner name)</field>
          <field name="sequence">70</field>
@@ -26,7 +26,12 @@
           <field name="function_to_call">get_from_ref_and_invoice</field>
       </record>
 
-
-    
+     <record id="bank_statement_completion_rule_5" model="account.statement.completion.rule">
+          <field name="name">Match from line reference (based on Invoice Supplier number)</field>
+          <field name="sequence">40</field>
+          <field name="function_to_call">get_from_ref_and_invoice</field>
+      </record>
+
+
 </data>
 </openerp>

=== modified file 'account_statement_base_completion/statement.py'
--- account_statement_base_completion/statement.py	2013-01-30 10:00:31 +0000
+++ account_statement_base_completion/statement.py	2013-03-01 12:32:22 +0000
@@ -107,6 +107,7 @@
         """
         return [
             ('get_from_ref_and_invoice', 'From line reference (based on invoice number)'),
+            ('get_from_ref_and_supplier_invoice', 'From line reference (based on supplier invoice number)'),
             ('get_from_ref_and_so', 'From line reference (based on SO number)'),
             ('get_from_label_and_partner_field', 'From line label (based on partner field)'),
             ('get_from_label_and_partner_name', 'From line label (based on partner name)'),
@@ -122,6 +123,48 @@
         'function_to_call': fields.selection(_get_functions, 'Method'),
     }
 
+    def get_from_ref_and_supplier_invoice(self, cr, uid, line_id, context=None):
+        """
+        Match the partner based on the invoice supplier invoice number and the reference of the statement
+        line. Then, call the generic get_values_for_line method to complete other values.
+        If more than one partner matched, raise the ErrorTooManyPartner error.
+
+        :param int/long line_id: id of the concerned account.bank.statement.line
+        :return:
+            A dict of value that can be passed directly to the write method of
+            the statement line or {}
+           {'partner_id': value,
+            'account_id' : value,
+
+            ...}
+        """
+        st_obj = self.pool['account.bank.statement.line']
+        st_line = st_obj.browse(cr, uid, line_id, context=context)
+        res = {}
+        inv_obj = self.pool.get('account.invoice')
+        if st_line:
+            inv_id = inv_obj.search(cr,
+                                    uid,
+                                    [('supplier_invoice_number', '=', st_line.ref),
+                                     ('type', 'in', ('in_invoice', 'in_refund'))],
+                                    context=context)
+            if inv_id:
+                if len(inv_id) == 1:
+                    inv = inv_obj.browse(cr, uid, inv_id[0], context=context)
+                    res['partner_id'] = inv.partner_id.id
+                else:
+                    raise ErrorTooManyPartner(_('Line named "%s" (Ref:%s) was matched by more '
+                                                'than one partner.') % (st_line.name, st_line.ref))
+                st_vals = st_obj.get_values_for_line(cr,
+                                                     uid,
+                                                     profile_id=st_line.statement_id.profile_id.id,
+                                                     partner_id=res.get('partner_id', False),
+                                                     line_type=st_line.type,
+                                                     amount=st_line.amount,
+                                                     context=context)
+                res.update(st_vals)
+        return res
+
     def get_from_ref_and_invoice(self, cr, uid, line_id, context=None):
         """
         Match the partner based on the invoice number and the reference of the statement
@@ -134,7 +177,6 @@
             the statement line or {}
            {'partner_id': value,
             'account_id' : value,
-
             ...}
         """
         st_obj = self.pool.get('account.bank.statement.line')
@@ -142,27 +184,24 @@
         res = {}
         if st_line:
             inv_obj = self.pool.get('account.invoice')
-            inv_id = inv_obj.search(
-                    cr,
-                    uid,
-                    [('number', '=', st_line.ref)],
-                    context=context)
+            inv_id = inv_obj.search(cr,
+                                    uid,
+                                    [('number', '=', st_line.ref)],
+                                    context=context)
             if inv_id:
-                if inv_id and len(inv_id) == 1:
+                if len(inv_id) == 1:
                     inv = inv_obj.browse(cr, uid, inv_id[0], context=context)
                     res['partner_id'] = inv.partner_id.id
-                elif inv_id and len(inv_id) > 1:
-                    raise ErrorTooManyPartner(
-                            _('Line named "%s" (Ref:%s) was matched by more '
-                              'than one partner.') % (st_line.name, st_line.ref))
-                st_vals = st_obj.get_values_for_line(
-                        cr,
-                        uid,
-                        profile_id=st_line.statement_id.profile_id.id,
-                        partner_id=res.get('partner_id', False),
-                        line_type=st_line.type,
-                        amount=st_line.amount,
-                        context=context)
+                else:
+                    raise ErrorTooManyPartner(_('Line named "%s" (Ref:%s) was matched by more '
+                                                'than one partner.') % (st_line.name, st_line.ref))
+                st_vals = st_obj.get_values_for_line(cr,
+                                                     uid,
+                                                     profile_id=st_line.statement_id.profile_id.id,
+                                                     partner_id=res.get('partner_id', False),
+                                                     line_type=st_line.type,
+                                                     amount=st_line.amount,
+                                                     context=context)
                 res.update(st_vals)
         return res
 


Follow ups