← Back to team overview

banking-addons-team team mailing list archive

[Merge] lp:~akretion-team/banking-addons/70-communication-communication2-clarify into lp:banking-addons

 

Alexis de Lattre has proposed merging lp:~akretion-team/banking-addons/70-communication-communication2-clarify into lp:banking-addons.

Requested reviews:
  Banking Addons Core Editors (banking-addons-team)

For more details, see:
https://code.launchpad.net/~akretion-team/banking-addons/70-communication-communication2-clarify/+merge/212271

As discussed in the banking-addons-drivers mailing-list (https://lists.launchpad.net/banking-addons-drivers/msg00080.html), we would like to clarify the use of the fields 'communication' and 'communication2' :
- Structured => 'communication'
- Free => 'communication' + 'communication2'

But the most important stuff in the MP is the addition of a _prepare method in the wizard "Select Invoices to Pay", so that you can easily inherit the creation of payment lines from the wizard ! I think this is very welcomed for integration work and customer-specific adaptations.



-- 
https://code.launchpad.net/~akretion-team/banking-addons/70-communication-communication2-clarify/+merge/212271
Your team Banking Addons Core Editors is requested to review the proposed merge of lp:~akretion-team/banking-addons/70-communication-communication2-clarify into lp:banking-addons.
=== modified file 'account_banking_payment/model/payment_line.py'
--- account_banking_payment/model/payment_line.py	2013-08-16 15:05:21 +0000
+++ account_banking_payment/model/payment_line.py	2014-03-22 01:00:54 +0000
@@ -40,14 +40,6 @@
         'msg': fields.char('Message', size=255, required=False, readonly=True),
         'date_done': fields.date(
             'Date Confirmed', select=True, readonly=True),
-        # Communication: required is dependend on the mode
-        'communication': fields.char(
-            'Communication', size=64, required=False, 
-            help=("Used as the message between ordering customer and current "
-                  "company. Depicts 'What do you want to say to the recipient"
-                  " about this order ?'"
-                 ),
-        ),
         # Communication2: enlarge to 128
         'communication2': fields.char(
             'Communication 2', size=128,

=== modified file 'account_banking_payment/view/account_payment.xml'
--- account_banking_payment/view/account_payment.xml	2013-08-09 20:55:49 +0000
+++ account_banking_payment/view/account_payment.xml	2014-03-22 01:00:54 +0000
@@ -17,13 +17,6 @@
                             'invisible':[('state','!=','draft')]
                         }</attribute>
                     </xpath>
-                    <!-- Communication only used for 'structured' communication -->
-                    <xpath expr="//field[@name='line_ids']/form//field[@name='communication']"
-                           position="attributes">
-                        <attribute name="attrs">{
-                        'readonly': [('state', '=', 'normal')]
-                        }</attribute>
-                    </xpath>
                 </data>
             </field>
         </record>

=== modified file 'account_banking_payment_export/model/payment_order_create.py'
--- account_banking_payment_export/model/payment_order_create.py	2014-03-13 17:39:51 +0000
+++ account_banking_payment_export/model/payment_order_create.py	2014-03-22 01:00:54 +0000
@@ -88,6 +88,82 @@
                 'target': 'new',
         }
 
+    def _prepare_payment_line(self, cr, uid, payment, line, context=None):
+        '''This function is designed to be inherited
+        The resulting dict is passed to the create method of payment.line'''
+        _today = fields.date.context_today(self, cr, uid, context=context)
+        if payment.date_prefered == "now":
+            #no payment date => immediate payment
+            date_to_pay = False
+        elif payment.date_prefered == 'due':
+            ### account_banking
+            # date_to_pay = line.date_maturity
+            date_to_pay = (
+                line.date_maturity
+                if line.date_maturity and line.date_maturity > _today
+                else False)
+            ### end account banking
+        elif payment.date_prefered == 'fixed':
+            ### account_banking
+            # date_to_pay = payment.date_scheduled
+            date_to_pay = (
+                payment.date_scheduled
+                if payment.date_scheduled and payment.date_scheduled > _today
+                else False)
+            ### end account banking
+
+        ### account_banking
+        state = 'normal'
+        communication = line.ref or '-'
+        if line.invoice:
+            if line.invoice.type in ('in_invoice', 'in_refund'):
+                if line.invoice.reference_type == 'structured':
+                    state = 'structured'
+                    communication = line.invoice.reference
+                else:
+                    if line.invoice.reference:
+                        communication = line.invoice.reference
+                    elif line.invoice.supplier_invoice_number:
+                        communication = line.invoice.supplier_invoice_number
+            else:
+                # Make sure that the communication includes the
+                # customer invoice number (in the case of debit order)
+                communication = line.invoice.number.replace('/', '')
+                state = 'structured'
+
+        # support debit orders when enabled
+        if (payment.payment_order_type == 'debit' and
+            'amount_to_receive' in line):
+            amount_currency = line.amount_to_receive
+        else:
+            amount_currency = line.amount_to_pay
+        ### end account_banking
+
+        ### account banking
+        # t = None
+        # line2bank = line_obj.line2bank(cr, uid, line_ids, t, context)
+        line2bank = self.pool['account.move.line'].line2bank(
+            cr, uid, [line.id], payment.mode.id, context)
+        ### end account banking
+
+        res = {
+            'move_line_id': line.id,
+            'amount_currency': amount_currency,
+            'bank_id': line2bank.get(line.id),
+            'order_id': payment.id,
+            'partner_id': line.partner_id and line.partner_id.id or False,
+            ### account banking
+            # 'communication': line.ref or '/'
+            'communication': communication,
+            'state': state,
+            ### end account banking
+            'date': date_to_pay,
+            'currency': (line.invoice and line.invoice.currency_id.id
+                         or line.journal_id.currency.id
+                         or line.journal_id.company_id.currency_id.id),
+            }
+        return res
+
     def create_payment(self, cr, uid, ids, context=None):
         '''
         This method is a slightly modified version of the existing method on this
@@ -97,10 +173,6 @@
         references are allowed, but others as well
         - check date_to_pay is not in the past.
         '''
-
-        order_obj = self.pool.get('payment.order')
-        line_obj = self.pool.get('account.move.line')
-        payment_obj = self.pool.get('payment.line')
         if context is None:
             context = {}
         data = self.read(cr, uid, ids, [], context=context)[0]
@@ -108,85 +180,14 @@
         if not line_ids:
             return {'type': 'ir.actions.act_window_close'}
 
-        payment = order_obj.browse(
+        payment = self.pool['payment.order'].browse(
             cr, uid, context['active_id'], context=context)
-        ### account banking
-        # t = None
-        # line2bank = line_obj.line2bank(cr, uid, line_ids, t, context)
-        line2bank = line_obj.line2bank(
-            cr, uid, line_ids, payment.mode.id, context)
-        _today = fields.date.context_today(self, cr, uid, context=context)
-        ### end account banking
-
-        ## Finally populate the current payment with new lines:
-        for line in line_obj.browse(cr, uid, line_ids, context=context):
-            if payment.date_prefered == "now":
-                #no payment date => immediate payment
-                date_to_pay = False
-            elif payment.date_prefered == 'due':
-                ### account_banking
-                # date_to_pay = line.date_maturity
-                date_to_pay = (
-                    line.date_maturity
-                    if line.date_maturity and line.date_maturity > _today
-                    else False)
-                ### end account banking
-            elif payment.date_prefered == 'fixed':
-                ### account_banking
-                # date_to_pay = payment.date_scheduled
-                date_to_pay = (
-                    payment.date_scheduled
-                    if payment.date_scheduled and payment.date_scheduled > _today
-                    else False)
-                ### end account banking
-
-            ### account_banking
-            state = communication2 = False
-            communication = line.ref or '/'
-            if line.invoice:
-                if line.invoice.type in ('in_invoice', 'in_refund'):
-                    if line.invoice.reference_type == 'structured':
-                        state = 'structured'
-                        communication = line.invoice.reference
-                    else:
-                        state = 'normal'
-                        communication2 = line.invoice.reference
-                else:
-                    # Make sure that the communication includes the
-                    # customer invoice number (in the case of debit order)
-                    communication = line.invoice.number.replace('/', '')
-                    state = 'structured'
-                    if line.invoice.number != line.ref:
-                        communication2 = line.ref
-            else:
-                state = 'normal'
-                communication2 = line.ref
-
-            # support debit orders when enabled
-            if (payment.payment_order_type == 'debit' and
-                'amount_to_receive' in line):
-                amount_currency = line.amount_to_receive
-            else:
-                amount_currency = line.amount_to_pay
-            ### end account_banking
-
-            payment_obj.create(cr, uid, {
-                'move_line_id': line.id,
-                'amount_currency': amount_currency,
-                'bank_id': line2bank.get(line.id),
-                'order_id': payment.id,
-                'partner_id': line.partner_id and line.partner_id.id or False,
-                ### account banking
-                # 'communication': line.ref or '/'
-                'communication': communication,
-                'communication2': communication2,
-                'state': state,
-                ### end account banking
-                'date': date_to_pay,
-                'currency': (line.invoice and line.invoice.currency_id.id
-                             or line.journal_id.currency.id
-                             or line.journal_id.company_id.currency_id.id),
-                }, context=context)
+        ## Populate the current payment with new lines:
+        for line in self.pool['account.move.line'].browse(
+                cr, uid, line_ids, context=context):
+            vals = self._prepare_payment_line(
+                cr, uid, payment, line, context=context)
+            self.pool['payment.line'].create(cr, uid, vals, context=context)
         # Force reload of payment order view as a workaround for lp:1155525
         return {'name': _('Payment Orders'),
                 'context': context,


Follow ups