← Back to team overview

banking-addons-team team mailing list archive

[Merge] lp:~akretion-team/banking-addons/70-fully-handle-payment-types into lp:banking-addons

 

Alexis de Lattre has proposed merging lp:~akretion-team/banking-addons/70-fully-handle-payment-types 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-fully-handle-payment-types/+merge/211283

This merge proposal is the result of the discussion that I started in the mailing-list banking-addons-drivers with subject "account_payment_extension", cf https://lists.launchpad.net/banking-addons-drivers/msg00059.html

The main changes in this merge proposal are :

1) Add 4 new modules to handle payment type and bank accounts:
    - account_payment_partner
    - account_payment_sale
    - account_payment_sale_stock
    - account_payment_purchase

2) Filter the selection of invoices per payment type.
    Add active field on payment.mode and payment.mode.type.
    Add menu entry for Payment Types.

This MP also contains smaller stuff :

3) Small code clean-up in the SEPA modules (views, 'state' field on SEPA file objects)

4) Code enhancement in the file account_banking_payment/model/account_payment.py (PEP-8, _prepare_* functions, support for payment lines with move_line_id = False)

I hope you will enjoy this work.


-- 
https://code.launchpad.net/~akretion-team/banking-addons/70-fully-handle-payment-types/+merge/211283
Your team Banking Addons Core Editors is requested to review the proposed merge of lp:~akretion-team/banking-addons/70-fully-handle-payment-types into lp:banking-addons.
=== modified file 'account_banking_pain_base/__openerp__.py'
--- account_banking_pain_base/__openerp__.py	2013-12-24 14:30:37 +0000
+++ account_banking_pain_base/__openerp__.py	2014-03-17 11:19:16 +0000
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
 ##############################################################################
 #
 #    PAIN base module for OpenERP

=== modified file 'account_banking_payment/model/account_payment.py'
--- account_banking_payment/model/account_payment.py	2014-02-16 16:13:15 +0000
+++ account_banking_payment/model/account_payment.py	2014-03-17 11:19:16 +0000
@@ -3,7 +3,7 @@
 #
 #    Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
 #              (C) 2011 - 2013 Therp BV (<http://therp.nl>).
-#            
+#
 #    All other contributions are (C) by their respective contributors
 #
 #    All Rights Reserved
@@ -63,11 +63,11 @@
         ),
         'state': fields.selection([
             ('draft', 'Draft'),
-            ('open','Confirmed'),
-            ('cancel','Cancelled'),
+            ('open', 'Confirmed'),
+            ('cancel', 'Cancelled'),
             ('sent', 'Sent'),
             ('rejected', 'Rejected'),
-            ('done','Done'),
+            ('done', 'Done'),
             ], 'State', select=True
         ),
         'line_ids': fields.one2many(
@@ -81,7 +81,7 @@
             },
         ),
         'user_id': fields.many2one(
-            'res.users','User', required=True,
+            'res.users', 'User', required=True,
             states={
                 'sent': [('readonly', True)],
                 'rejected': [('readonly', True)],
@@ -98,18 +98,19 @@
                 'rejected': [('readonly', True)],
                 'done': [('readonly', True)]
             },
-            help=("Choose an option for the Payment Order:'Fixed' stands for a "
-                  "date specified by you.'Directly' stands for the direct "
+            help=("Choose an option for the Payment Order:'Fixed' stands for "
+                  "a date specified by you.'Directly' stands for the direct "
                   "execution.'Due date' stands for the scheduled date of "
                   "execution."
-                 )
+                  )
             ),
         'date_sent': fields.date('Send date', readonly=True),
     }
 
     def _write_payment_lines(self, cr, uid, ids, **kwargs):
         '''
-        ORM method for setting attributes of corresponding payment.line objects.
+        ORM method for setting attributes of corresponding payment.line
+        objects.
         Note that while this is ORM compliant, it is also very ineffecient due
         to the absence of filters on writes and hence the requirement to
         filter on the client(=OpenERP server) side.
@@ -143,7 +144,7 @@
             cr, uid, ids, *args
         )
 
-    def debit_reconcile_transfer(self, cr, uid, payment_order_id, 
+    def debit_reconcile_transfer(self, cr, uid, payment_order_id,
                                  amount, currency, context=None):
         """
         During import of bank statements, create the reconcile on the transfer
@@ -163,10 +164,10 @@
                 if line.account_id.type == 'other' and not line.reconcile_id:
                     line_ids.append(line.id)
         if self.pool.get('res.currency').is_zero(
-            cr, uid, currency,
-            move_line_obj.get_balance(cr, uid, line_ids) - amount):
+                cr, uid, currency,
+                move_line_obj.get_balance(cr, uid, line_ids) - amount):
             reconcile_id = self.pool.get('account.move.reconcile').create(
-                cr, uid, 
+                cr, uid,
                 {'type': 'auto', 'line_id': [(6, 0, line_ids)]},
                 context)
             # set direct debit order to finished state
@@ -175,8 +176,9 @@
                 uid, 'payment.order', payment_order_id, 'done', cr)
         return reconcile_id
 
-    def debit_unreconcile_transfer(self, cr, uid, payment_order_id, reconcile_id,
-                                 amount, currency, context=None):
+    def debit_unreconcile_transfer(
+            self, cr, uid, payment_order_id, reconcile_id, amount, currency,
+            context=None):
         """
         Due to a cancelled bank statements import, unreconcile the move on
         the transfer account. Delegate the conditions to the workflow.
@@ -194,12 +196,12 @@
         if state != 'sent':
             raise orm.except_orm(
                 _("Cannot unreconcile"),
-                _("Cannot unreconcile payment order: "+
+                _("Cannot unreconcile payment order: "
                   "Workflow will not allow it."))
         return True
 
     def test_undo_done(self, cr, uid, ids, context=None):
-        """ 
+        """
         Called from the workflow. Used to unset done state on
         payment orders that were reconciled with bank transfers
         which are being cancelled.
@@ -213,14 +215,68 @@
         for order in self.browse(cr, uid, ids, context=context):
             for order_line in order.line_ids:
                 if order_line.transit_move_line_id.move_id:
-                    for line in order_line.transit_move_line_id.move_id.line_id:
+                    for line in \
+                            order_line.transit_move_line_id.move_id.line_id:
                         if (line.account_id.type == 'other' and
                                 line.reconcile_id):
                             return False
         return True
-        
+
+    def _prepare_transfer_move(
+            self, cr, uid, order, line, labels, context=None):
+        vals = {
+            'journal_id': order.mode.transfer_journal_id.id,
+            'name': '%s %s' % (labels[order.payment_order_type],
+                               line.move_line_id
+                               and line.move_line_id.move_id.name
+                               or line.communication),
+            'ref': '%s %s' % (order.payment_order_type[:3].upper(),
+                              line.move_line_id
+                              and line.move_line_id.move_id.name
+                              or line.communication),
+            }
+        return vals
+
+    def _prepare_move_line_transfer_account(
+            self, cr, uid, order, line, move_id, labels, context=None):
+        vals = {
+            'name': _('%s for %s') % (
+                labels[order.payment_order_type],
+                line.move_line_id and (line.move_line_id.invoice
+                                       and line.move_line_id.invoice.number
+                                       or line.move_line_id.name)
+                or line.communication),
+            'move_id': move_id,
+            'partner_id': False,
+            'account_id': order.mode.transfer_account_id.id,
+            'credit': (order.payment_order_type == 'payment'
+                       and line.amount or 0.0),
+            'debit': (order.payment_order_type == 'debit'
+                      and line.amount or 0.0),
+            'date': fields.date.context_today(
+                self, cr, uid, context=context),
+            }
+        return vals
+
+    def _update_move_line_partner_account(
+            self, cr, uid, order, line, vals, context=None):
+        vals.update({
+            'partner_id': line.partner_id.id,
+            'account_id': (line.move_line_id
+                           and line.move_line_id.account_id.id
+                           or False),
+            # if not line.move_line_id, the field 'account_id' must be set by
+            # another module that inherit this function, like for example in
+            # the module purchase_payment_order
+            'credit': (order.payment_order_type == 'debit'
+                       and line.amount or 0.0),
+            'debit': (order.payment_order_type == 'payment'
+                      and line.amount or 0.0),
+            })
+        return vals
+
     def action_sent(self, cr, uid, ids, context=None):
-        """ 
+        """
         Create the moves that pay off the move lines from
         the debit order. This happens when the debit order file is
         generated.
@@ -233,63 +289,35 @@
             'debit': _('Direct debit order'),
             }
         for order in self.browse(cr, uid, ids, context=context):
-            if not order.mode.transfer_journal_id or not order.mode.transfer_account_id:
+            if not order.mode.transfer_journal_id \
+                    or not order.mode.transfer_account_id:
                 continue
             for line in order.line_ids:
                 # basic checks
-                if not line.move_line_id:
-                    raise orm.except_orm(
-                        _('Error'),
-                        _('No move line provided for line %s') % line.name)
-                if line.move_line_id.reconcile_id:
-                    raise orm.except_orm(
-                        _('Error'),
-                        _('Move line %s has already been paid/reconciled') % 
-                        line.move_line_id.name
-                        )
+                if line.move_line_id and line.move_line_id.reconcile_id:
+                    raise orm.except_orm(
+                        _('Error'),
+                        _('Move line %s has already been paid/reconciled')
+                        % line.move_line_id.name)
 
-                move_id = account_move_obj.create(cr, uid, {
-                        'journal_id': order.mode.transfer_journal_id.id,
-                        'name': '%s %s' % (labels[order.payment_order_type], 
-                                           line.move_line_id.move_id.name),
-                        'ref': '%s%s' % (order.payment_order_type[:3].upper(),
-                                               line.move_line_id.move_id.name),
-                        }, context=context)
+                move_id = account_move_obj.create(
+                    cr, uid, self._prepare_transfer_move(
+                        cr, uid, order, line, labels, context=context),
+                    context=context)
 
                 # TODO: take multicurrency into account
-                
+
                 # create the debit move line on the transfer account
-                vals = {
-                    'name': _('%s for %s') % (
-                        labels[order.payment_order_type],
-                        line.move_line_id.invoice and 
-                        line.move_line_id.invoice.number or 
-                        line.move_line_id.name),
-                    'move_id': move_id,
-                    'partner_id': False,
-                    'account_id': order.mode.transfer_account_id.id,
-                    'credit': (order.payment_order_type == 'payment'
-                               and line.amount or 0.0),
-                    'debit': (order.payment_order_type == 'debit'
-                              and line.amount or 0.0),
-                    'date': fields.date.context_today(
-                        self, cr, uid, context=context),
-                    }
-                transfer_move_line_id = account_move_line_obj.create(
-                    cr, uid, vals, context=context)
+                ml_vals = self._prepare_move_line_transfer_account(
+                    cr, uid, order, line, move_id, labels, context=context)
+                account_move_line_obj.create(cr, uid, ml_vals, context=context)
 
-                # create the debit move line on the receivable account
-                vals.update({
-                        'partner_id': line.partner_id.id,
-                        'account_id': line.move_line_id.account_id.id,
-                        'credit': (order.payment_order_type == 'debit'
-                                   and line.amount or 0.0),
-                        'debit': (order.payment_order_type == 'payment'
-                                   and line.amount or 0.0),
-                        })               
+                # create the debit move line on the partner account
+                self._update_move_line_partner_account(
+                    cr, uid, order, line, ml_vals, context=context)
                 reconcile_move_line_id = account_move_line_obj.create(
-                    cr, uid, vals, context=context)
-                
+                    cr, uid, ml_vals, context=context)
+
                 # register the debit move line on the payment line
                 # and call reconciliation on it
                 payment_line_obj.write(
@@ -297,16 +325,15 @@
                     {'transit_move_line_id': reconcile_move_line_id},
                     context=context)
 
-                payment_line_obj.debit_reconcile(
-                    cr, uid, line.id, context=context)
+                if line.move_line_id:
+                    payment_line_obj.debit_reconcile(
+                        cr, uid, line.id, context=context)
                 account_move_obj.post(cr, uid, [move_id], context=context)
 
         # State field is written by act_sent_wait
         self.write(cr, uid, ids, {
-                'date_sent': fields.date.context_today(
-                    self, cr, uid, context=context),
-                }, context=context)
+            'date_sent': fields.date.context_today(
+                self, cr, uid, context=context),
+            }, context=context)
 
         return True
-
-

=== modified file 'account_banking_payment_export/model/__init__.py'
--- account_banking_payment_export/model/__init__.py	2014-02-16 14:03:28 +0000
+++ account_banking_payment_export/model/__init__.py	2014-03-17 11:19:16 +0000
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from . import account_move_line
 from . import account_payment
 from . import bank_payment_manual

=== modified file 'account_banking_payment_export/model/account_payment.py'
--- account_banking_payment_export/model/account_payment.py	2014-02-16 16:13:15 +0000
+++ account_banking_payment_export/model/account_payment.py	2014-03-17 11:19:16 +0000
@@ -37,6 +37,9 @@
             'Payment order type', required=True,
             readonly=True, states={'draft': [('readonly', False)]},
             ),
+        'mode_type': fields.related(
+            'mode', 'type', type='many2one', relation='payment.mode.type',
+            string='Payment Type'),
     }
 
     _defaults = {

=== modified file 'account_banking_payment_export/model/payment_mode.py'
--- account_banking_payment_export/model/payment_mode.py	2014-02-16 16:13:15 +0000
+++ account_banking_payment_export/model/payment_mode.py	2014-03-17 11:19:16 +0000
@@ -53,4 +53,9 @@
             'type', 'payment_order_type', readonly=True, type='selection',
             selection=[('payment', 'Payment'), ('debit', 'Direct debit')],
             string="Payment Order Type"),
+        'active': fields.boolean('Active'),
+        }
+
+    _defaults = {
+        'active': True,
         }

=== modified file 'account_banking_payment_export/model/payment_mode_type.py'
--- account_banking_payment_export/model/payment_mode_type.py	2014-02-16 16:13:15 +0000
+++ account_banking_payment_export/model/payment_mode_type.py	2014-03-17 11:19:16 +0000
@@ -53,10 +53,12 @@
             [('payment', 'Payment'), ('debit', 'Direct debit')],
             'Payment order type', required=True,
             ),
+        'active': fields.boolean('Active'),
     }
 
     _defaults = {
         'payment_order_type': 'payment',
+        'active': True,
     }
 
     def _auto_init(self, cr, context=None):

=== modified file 'account_banking_payment_export/view/account_payment.xml'
--- account_banking_payment_export/view/account_payment.xml	2013-08-09 20:55:49 +0000
+++ account_banking_payment_export/view/account_payment.xml	2014-03-17 11:19:16 +0000
@@ -9,12 +9,13 @@
             <field name="inherit_id" ref="account_payment.view_payment_order_form" />
             <field name="model">payment.order</field>
             <field name="arch" type="xml">
-                <data>
-                    <xpath expr="//button[@string='Make Payments']"
-                           position="attributes">
-                        <attribute name="name">launch_wizard</attribute>
-                    </xpath>
-                </data>
+                <xpath expr="//button[@string='Make Payments']"
+                       position="attributes">
+                    <attribute name="name">launch_wizard</attribute>
+                </xpath>
+                <field name="mode" position="after">
+                    <field name="mode_type" invisible="1"/>
+                </field>
             </field>
         </record>
 

=== modified file 'account_banking_payment_export/view/payment_mode.xml'
--- account_banking_payment_export/view/payment_mode.xml	2013-08-13 09:18:15 +0000
+++ account_banking_payment_export/view/payment_mode.xml	2014-03-17 11:19:16 +0000
@@ -11,6 +11,7 @@
             <field name="inherit_id" ref="account_payment.view_payment_mode_form"/>
             <field name="arch" type="xml">
                 <field name="company_id" position="after">
+                    <field name="active"/>
                     <field name="type"/>
                 </field>
             </field>

=== modified file 'account_banking_payment_export/view/payment_mode_type.xml'
--- account_banking_payment_export/view/payment_mode_type.xml	2013-09-12 07:32:00 +0000
+++ account_banking_payment_export/view/payment_mode_type.xml	2014-03-17 11:19:16 +0000
@@ -18,14 +18,40 @@
             <field name="name">view.payment.mode.type.form</field>
             <field name="model">payment.mode.type</field>
             <field name="arch" type="xml">
-                <form string="Payment mode">
-                    <field name="name" />
-                    <field name="code" />
-                    <field name="suitable_bank_types"/>
+                <form string="Payment Type" version="7.0">
+                    <group name="main">
+                        <field name="name"/>
+                        <field name="code"/>
+                        <field name="active"/>
+                        <field name="ir_model_id"/>
+                        <field name="suitable_bank_types"/>
+                    </group>
+                </form>
+            </field>
+        </record>
+
+        <record id="view_payment_mode_type_tree" model="ir.ui.view">
+            <field name="name">view.payment.mode.type.tree</field>
+            <field name="model">payment.mode.type</field>
+            <field name="arch" type="xml">
+                <tree string="Payment Types">
+                    <field name="name"/>
+                    <field name="code"/>
                     <field name="ir_model_id"/>
-                </form>
+                </tree>
             </field>
         </record>
 
+        <record id="action_payment_mode_type" model="ir.actions.act_window">
+            <field name="name">Payment Type</field>
+            <field name="res_model">payment.mode.type</field>
+            <field name="view_type">form</field>
+            <field name="view_mode">tree,form</field>
+        </record>
+
+        <menuitem id="menu_payment_mode_type"
+            action="action_payment_mode_type"
+            parent="account.menu_configuration_misc" />
+
     </data>
 </openerp>

=== modified file 'account_banking_sepa_credit_transfer/__openerp__.py'
--- account_banking_sepa_credit_transfer/__openerp__.py	2014-02-16 14:01:09 +0000
+++ account_banking_sepa_credit_transfer/__openerp__.py	2014-03-17 11:19:16 +0000
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
 ##############################################################################
 #
 #    SEPA Credit Transfer module for OpenERP

=== modified file 'account_banking_sepa_credit_transfer/account_banking_sepa.py'
--- account_banking_sepa_credit_transfer/account_banking_sepa.py	2013-12-24 00:01:04 +0000
+++ account_banking_sepa_credit_transfer/account_banking_sepa.py	2014-03-17 11:19:16 +0000
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
 ##############################################################################
 #
 #    SEPA Credit Transfer module for OpenERP
@@ -81,7 +82,6 @@
         'state': fields.selection([
             ('draft', 'Draft'),
             ('sent', 'Sent'),
-            ('done', 'Reconciled'),
             ], 'State', readonly=True),
     }
 

=== modified file 'account_banking_sepa_credit_transfer/account_banking_sepa_view.xml'
--- account_banking_sepa_credit_transfer/account_banking_sepa_view.xml	2013-11-21 23:41:32 +0000
+++ account_banking_sepa_credit_transfer/account_banking_sepa_view.xml	2014-03-17 11:19:16 +0000
@@ -11,28 +11,24 @@
     <field name="name">account.banking.export.sepa.form</field>
     <field name="model">banking.export.sepa</field>
     <field name="arch" type="xml">
-        <form string="SEPA Credit Transfer">
+        <form string="SEPA Credit Transfer" version="7.0">
+            <header>
+                <field name="state" widget="statusbar"/>
+            </header>
             <notebook>
                 <page string="General Information">
-                    <field name="total_amount" />
-                    <field name="nb_transactions" />
-                    <field name="batch_booking" />
-                    <field name="charge_bearer"/>
-                    <field name="create_date" />
-                    <newline />
-                    <field name="file" filename="filename"/>
-                    <field name="filename" invisible="True"/>
+                    <group name="main">
+                        <field name="total_amount" />
+                        <field name="nb_transactions" />
+                        <field name="batch_booking" />
+                        <field name="charge_bearer"/>
+                        <field name="create_date" />
+                        <field name="file" filename="filename"/>
+                        <field name="filename" invisible="True"/>
+                    </group>
                 </page>
                 <page string="Payment Orders">
-                    <field name="payment_order_ids" colspan="4" nolabel="1">
-                        <tree colors="blue:state in ('draft');gray:state in ('cancel','done');black:state in ('open')" string="Payment Orders">
-                            <field name="reference"/>
-                            <field name="date_created"/>
-                            <field name="date_done"/>
-                            <field name="total"/>
-                            <field name="state"/>
-                        </tree>
-                    </field>
+                    <field name="payment_order_ids" nolabel="1"/>
                 </page>
             </notebook>
         </form>
@@ -48,6 +44,7 @@
             <field name="filename"/>
             <field name="create_date"/>
             <field name="nb_transactions"/>
+            <field name="state"/>
         </tree>
     </field>
 </record>

=== modified file 'account_banking_sepa_direct_debit/__openerp__.py'
--- account_banking_sepa_direct_debit/__openerp__.py	2014-02-16 14:01:09 +0000
+++ account_banking_sepa_direct_debit/__openerp__.py	2014-03-17 11:19:16 +0000
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
 ##############################################################################
 #
 #    SEPA Direct Debit module for OpenERP

=== modified file 'account_banking_sepa_direct_debit/account_banking_sdd.py'
--- account_banking_sepa_direct_debit/account_banking_sdd.py	2013-12-24 00:01:04 +0000
+++ account_banking_sepa_direct_debit/account_banking_sdd.py	2014-03-17 11:19:16 +0000
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
 ##############################################################################
 #
 #    SEPA Direct Debit module for OpenERP
@@ -89,7 +90,6 @@
         'state': fields.selection([
             ('draft', 'Draft'),
             ('sent', 'Sent'),
-            ('done', 'Reconciled'),
             ], 'State', readonly=True),
     }
 

=== modified file 'account_banking_sepa_direct_debit/account_banking_sdd_view.xml'
--- account_banking_sepa_direct_debit/account_banking_sdd_view.xml	2013-12-12 22:19:53 +0000
+++ account_banking_sepa_direct_debit/account_banking_sdd_view.xml	2014-03-17 11:19:16 +0000
@@ -11,28 +11,24 @@
     <field name="name">account.banking.export.sdd.form</field>
     <field name="model">banking.export.sdd</field>
     <field name="arch" type="xml">
-        <form string="SEPA Direct Debit">
+        <form string="SEPA Direct Debit" version="7.0">
+            <header>
+                <field name="state" widget="statusbar"/>
+            </header>
             <notebook>
                 <page string="General Information">
-                    <field name="total_amount" />
-                    <field name="nb_transactions" />
-                    <field name="batch_booking" />
-                    <field name="charge_bearer"/>
-                    <field name="create_date" />
-                    <newline />
-                    <field name="file" filename="filename"/>
-                    <field name="filename" invisible="True"/>
+                    <group name="main">
+                        <field name="total_amount" />
+                        <field name="nb_transactions" />
+                        <field name="batch_booking" />
+                        <field name="charge_bearer"/>
+                        <field name="create_date" />
+                        <field name="file" filename="filename"/>
+                        <field name="filename" invisible="True"/>
+                    </group>
                 </page>
                 <page string="Payment Orders">
-                    <field name="payment_order_ids" colspan="4" nolabel="1">
-                        <tree colors="blue:state in ('draft');gray:state in ('cancel','done');black:state in ('open')" string="Payment Orders">
-                            <field name="reference"/>
-                            <field name="date_created"/>
-                            <field name="date_done"/>
-                            <field name="total"/>
-                            <field name="state"/>
-                        </tree>
-                    </field>
+                    <field name="payment_order_ids" nolabel="1"/>
                 </page>
             </notebook>
         </form>
@@ -48,6 +44,7 @@
             <field name="filename"/>
             <field name="create_date"/>
             <field name="nb_transactions"/>
+            <field name="state"/>
         </tree>
     </field>
 </record>

=== modified file 'account_banking_sepa_direct_debit/company.py'
--- account_banking_sepa_direct_debit/company.py	2013-12-24 00:01:04 +0000
+++ account_banking_sepa_direct_debit/company.py	2014-03-17 11:19:16 +0000
@@ -1,3 +1,4 @@
+# -*- encoding: utf-8 -*-
 ##############################################################################
 #
 #    SEPA Direct Debit module for OpenERP

=== added directory 'account_payment_partner'
=== added file 'account_payment_partner/__init__.py'
--- account_payment_partner/__init__.py	1970-01-01 00:00:00 +0000
+++ account_payment_partner/__init__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Partner Payment module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from . import model

=== added file 'account_payment_partner/__openerp__.py'
--- account_payment_partner/__openerp__.py	1970-01-01 00:00:00 +0000
+++ account_payment_partner/__openerp__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,55 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Partner Payment module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+
+{
+    'name': 'Account Partner Payment',
+    'version': '0.1',
+    'category': 'Banking addons',
+    'license': 'AGPL-3',
+    'summary': 'Adds payment type and receivable bank account on partners',
+    'description': """
+Account Partner Payment
+=======================
+
+This module adds severals fields :
+
+* the *Supplier Payment Type* and *Customer Payment Type* on Partners,
+
+* the *Receivable Bank Account* on Partners,
+
+* the *Payment Type* on Invoices.
+
+On a Payment Order, in the wizard *Select Invoices to Pay*, the invoices will be filtered per Payment Type.
+
+Please contact Alexis de Lattre from Akretion <alexis.delattre@xxxxxxxxxxxx> for any help or question about this module.
+    """,
+    'author': 'Akretion',
+    'website': 'http://www.akretion.com',
+    'depends': ['account_banking_payment_export'],
+    'data': [
+        'view/partner.xml',
+        'view/account_invoice.xml',
+    ],
+    'demo': [],
+    'active': False,
+}

=== added directory 'account_payment_partner/i18n'
=== added file 'account_payment_partner/i18n/account_payment_partner.pot'
--- account_payment_partner/i18n/account_payment_partner.pot	1970-01-01 00:00:00 +0000
+++ account_payment_partner/i18n/account_payment_partner.pot	2014-03-17 11:19:16 +0000
@@ -0,0 +1,67 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+#	* account_payment_partner
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-02-24 23:06+0000\n"
+"PO-Revision-Date: 2014-02-24 23:06+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: account_payment_partner
+#: field:account.invoice,payment_mode_type:0
+msgid "Payment Type"
+msgstr ""
+
+#. module: account_payment_partner
+#: model:ir.model,name:account_payment_partner.model_payment_order_create
+msgid "payment.order.create"
+msgstr ""
+
+#. module: account_payment_partner
+#: field:res.partner,supplier_payment_mode_type:0
+msgid "Supplier Payment Type"
+msgstr ""
+
+#. module: account_payment_partner
+#: help:res.partner,partner_bank_receivable:0
+msgid "Select the bank account of your company on which the customer should pay."
+msgstr ""
+
+#. module: account_payment_partner
+#: field:res.partner,partner_bank_receivable:0
+msgid "Receivable Bank Account"
+msgstr ""
+
+#. module: account_payment_partner
+#: help:res.partner,supplier_payment_mode_type:0
+msgid "Select the default payment type for this supplier."
+msgstr ""
+
+#. module: account_payment_partner
+#: field:res.partner,customer_payment_mode_type:0
+msgid "Customer Payment Type"
+msgstr ""
+
+#. module: account_payment_partner
+#: model:ir.model,name:account_payment_partner.model_account_invoice
+msgid "Invoice"
+msgstr ""
+
+#. module: account_payment_partner
+#: help:res.partner,customer_payment_mode_type:0
+msgid "Select the default payment type for this customer."
+msgstr ""
+
+#. module: account_payment_partner
+#: model:ir.model,name:account_payment_partner.model_res_partner
+msgid "Partner"
+msgstr ""
+

=== added directory 'account_payment_partner/model'
=== added file 'account_payment_partner/model/__init__.py'
--- account_payment_partner/model/__init__.py	1970-01-01 00:00:00 +0000
+++ account_payment_partner/model/__init__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,25 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Partner Payment module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from . import partner
+from . import account_invoice
+from . import payment_order_create

=== added file 'account_payment_partner/model/account_invoice.py'
--- account_payment_partner/model/account_invoice.py	1970-01-01 00:00:00 +0000
+++ account_payment_partner/model/account_invoice.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,53 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Partner Payment module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import orm, fields
+
+
+class account_invoice(orm.Model):
+    _inherit = 'account.invoice'
+
+    _columns = {
+        'payment_mode_type': fields.many2one(
+            'payment.mode.type', 'Payment Type'),
+        }
+
+    def onchange_partner_id(
+            self, cr, uid, ids, type, partner_id, date_invoice=False,
+            payment_term=False, partner_bank_id=False, company_id=False):
+        res = super(account_invoice, self).onchange_partner_id(
+            cr, uid, ids, type, partner_id, date_invoice=date_invoice,
+            payment_term=payment_term, partner_bank_id=partner_bank_id,
+            company_id=company_id)
+        if partner_id:
+            partner = self.pool['res.partner'].browse(cr, uid, partner_id)
+            # TODO what about refunds ? Should be really copy
+            # the payment type for refunds ?
+            if type and type in ('in_invoice', 'in_refund'):
+                res['value']['payment_mode_type'] = \
+                    partner.supplier_payment_mode_type.id or False
+            elif type and type in ('out_invoice', 'out_refund'):
+                res['value']['payment_mode_type'] = \
+                    partner.customer_payment_mode_type.id or False
+        else:
+            res['value']['payment_mode_type'] = False
+        return res

=== added file 'account_payment_partner/model/partner.py'
--- account_payment_partner/model/partner.py	1970-01-01 00:00:00 +0000
+++ account_payment_partner/model/partner.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,53 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Partner Payment module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import orm, fields
+
+
+class res_partner(orm.Model):
+    _inherit = 'res.partner'
+
+    _columns = {
+        'supplier_payment_mode_type': fields.property(
+            'payment.mode.type', type='many2one', relation='payment.mode.type',
+            string='Supplier Payment Type', view_load=True,
+            help="Select the default payment type for this supplier."),
+        'customer_payment_mode_type': fields.property(
+            'payment.mode.type', type='many2one', relation='payment.mode.type',
+            string='Customer Payment Type', view_load=True,
+            help="Select the default payment type for this customer."),
+        'partner_bank_receivable': fields.property(
+            'res.partner.bank', type='many2one', relation='res.partner.bank',
+            string='Receivable Bank Account', view_load=True,
+            help="Select the bank account of your company on which the "
+            "customer should pay."),
+        }
+
+    def _commercial_fields(self, cr, uid, context=None):
+        res = super(res_partner, self)._commercial_fields(
+            cr, uid, context=context)
+        res += [
+            'supplier_payment_mode_type',
+            'customer_payment_mode_type',
+            'partner_bank_receivable',
+            ]
+        return res

=== added file 'account_payment_partner/model/payment_order_create.py'
--- account_payment_partner/model/payment_order_create.py	1970-01-01 00:00:00 +0000
+++ account_payment_partner/model/payment_order_create.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,38 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Partner Payment module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import orm
+
+
+class payment_order_create(orm.Model):
+    _inherit = 'payment.order.create'
+
+    def extend_payment_order_domain(
+            self, cr, uid, payment_order, domain, context=None):
+        super(payment_order_create, self).extend_payment_order_domain(
+            cr, uid, payment_order, domain, context=context)
+        domain += [
+            '|',
+            ('invoice', '=', False),
+            ('invoice.payment_mode_type', '=', payment_order.mode_type.id)
+            ]
+        return True

=== added directory 'account_payment_partner/view'
=== added file 'account_payment_partner/view/account_invoice.xml'
--- account_payment_partner/view/account_invoice.xml	1970-01-01 00:00:00 +0000
+++ account_payment_partner/view/account_invoice.xml	2014-03-17 11:19:16 +0000
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+    Copyright (C) 2014 Akretion (http://www.akretion.com/)
+    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+    The licence is in the file __openerp__.py
+-->
+
+<openerp>
+<data>
+
+
+<record id="invoice_form" model="ir.ui.view">
+    <field name="name">account_partner_payment.invoice_form</field>
+    <field name="model">account.invoice</field>
+    <field name="inherit_id" ref="account.invoice_form" />
+    <field name="arch" type="xml">
+        <field name="partner_bank_id" position="after">
+            <field name="payment_mode_type"/>
+        </field>
+    </field>
+</record>
+
+
+<record id="invoice_supplier_form" model="ir.ui.view">
+    <field name="name">account_partner_payment.invoice_supplier_form</field>
+    <field name="model">account.invoice</field>
+    <field name="inherit_id" ref="account.invoice_supplier_form" />
+    <field name="arch" type="xml">
+        <field name="partner_bank_id" position="after">
+            <field name="payment_mode_type"/>
+        </field>
+    </field>
+</record>
+
+
+</data>
+</openerp>

=== added file 'account_payment_partner/view/partner.xml'
--- account_payment_partner/view/partner.xml	1970-01-01 00:00:00 +0000
+++ account_payment_partner/view/partner.xml	2014-03-17 11:19:16 +0000
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+    Copyright (C) 2014 Akretion (http://www.akretion.com/)
+    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+    The licence is in the file __openerp__.py
+-->
+
+<openerp>
+<data>
+
+
+<record id="view_partner_property_form" model="ir.ui.view">
+    <field name="name">account_partner_payment.partner_form</field>
+    <field name="model">res.partner</field>
+    <field name="inherit_id" ref="account.view_partner_property_form" />
+    <field name="arch" type="xml">
+        <field name="property_payment_term" position="after">
+            <field name="customer_payment_mode_type"
+                attrs="{'invisible': [('customer', '=', False)]}"/>
+            <field name="partner_bank_receivable"
+                domain="[('partner_id.ref_companies', 'in', [company_id])]"
+                attrs="{'invisible': [('customer', '=', False)]}" />
+        </field>
+        <field name="property_supplier_payment_term" position="after">
+            <field name="supplier_payment_mode_type"
+                attrs="{'invisible': [('supplier', '=', False)]}"/>
+        </field>
+    </field>
+</record>
+
+
+</data>
+</openerp>

=== added directory 'account_payment_purchase'
=== added file 'account_payment_purchase/__init__.py'
--- account_payment_purchase/__init__.py	1970-01-01 00:00:00 +0000
+++ account_payment_purchase/__init__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Purchase module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from . import model

=== added file 'account_payment_purchase/__openerp__.py'
--- account_payment_purchase/__openerp__.py	1970-01-01 00:00:00 +0000
+++ account_payment_purchase/__openerp__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,48 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Purchase module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com).
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+{
+    'name': 'Account Payment Purchase',
+    'version': '1.0',
+    'category': 'Banking addons',
+    'license': 'AGPL-3',
+    'summary': "Adds Bank Account and Payment Type on Purchase Orders",
+    'description': """
+Account Payment Purchase
+========================
+
+This modules adds 2 fields on purchase orders : *Bank Account* and *Payment Type*. These fields are copied from partner to purchase order and then from purchase order to supplier invoice.
+
+This module is similar to the *purchase_payment* module ; the main difference is that it doesn't depend on the *account_payment_extension* module (it's not the only module to conflict with *account_payment_extension* ; all the SEPA modules in the banking addons conflict with *account_payment_extension*, cf banking-addons-70/account_banking_payment_export/__openerp__.py).
+
+Please contact Alexis de Lattre from Akretion <alexis.delattre@xxxxxxxxxxxx> for any help or question about this module.
+    """,
+    'author': 'Akretion',
+    'website': 'http://www.akretion.com',
+    'depends': ['purchase', 'account_payment_partner'],
+    'conflicts': ['purchase_payment'],
+    'data': [
+        'view/purchase.xml',
+    ],
+    'installable': True,
+    'active': False,
+}

=== added directory 'account_payment_purchase/i18n'
=== added file 'account_payment_purchase/i18n/account_payment_purchase.pot'
--- account_payment_purchase/i18n/account_payment_purchase.pot	1970-01-01 00:00:00 +0000
+++ account_payment_purchase/i18n/account_payment_purchase.pot	2014-03-17 11:19:16 +0000
@@ -0,0 +1,42 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+#	* account_payment_purchase
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-02-24 23:07+0000\n"
+"PO-Revision-Date: 2014-02-24 23:07+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: account_payment_purchase
+#: field:purchase.order,payment_mode_type:0
+msgid "Payment Type"
+msgstr ""
+
+#. module: account_payment_purchase
+#: model:ir.model,name:account_payment_purchase.model_purchase_order
+msgid "Purchase Order"
+msgstr ""
+
+#. module: account_payment_purchase
+#: help:purchase.order,supplier_partner_bank:0
+msgid "Select the bank account of your supplier on which your company should send the payment. This field is copied from the partner and will be copied to the supplier invoice."
+msgstr ""
+
+#. module: account_payment_purchase
+#: field:purchase.order,supplier_partner_bank:0
+msgid "Supplier Bank Account"
+msgstr ""
+
+#. module: account_payment_purchase
+#: model:ir.model,name:account_payment_purchase.model_stock_picking
+msgid "Picking List"
+msgstr ""
+

=== added file 'account_payment_purchase/i18n/fr.po'
--- account_payment_purchase/i18n/fr.po	1970-01-01 00:00:00 +0000
+++ account_payment_purchase/i18n/fr.po	2014-03-17 11:19:16 +0000
@@ -0,0 +1,42 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+#	* account_payment_purchase
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-02-24 23:09+0000\n"
+"PO-Revision-Date: 2014-02-24 23:09+0000\n"
+"Last-Translator: Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: account_payment_purchase
+#: field:purchase.order,payment_mode_type:0
+msgid "Payment Type"
+msgstr "Type de Paiement"
+
+#. module: account_payment_purchase
+#: model:ir.model,name:account_payment_purchase.model_purchase_order
+msgid "Purchase Order"
+msgstr "Bon de commande"
+
+#. module: account_payment_purchase
+#: help:purchase.order,supplier_partner_bank:0
+msgid "Select the bank account of your supplier on which your company should send the payment. This field is copied from the partner and will be copied to the supplier invoice."
+msgstr "Selectionnez le compte bancaire du fournisseur sur lequel votre société devra effectuer le règlement. Ce champ est copié depuis le partenaire et sera recopié sur la facture fournisseur."
+
+#. module: account_payment_purchase
+#: field:purchase.order,supplier_partner_bank:0
+msgid "Supplier Bank Account"
+msgstr "Compte bancaire du fournisseur"
+
+#. module: account_payment_purchase
+#: model:ir.model,name:account_payment_purchase.model_stock_picking
+msgid "Picking List"
+msgstr "Bon de livraison"
+

=== added directory 'account_payment_purchase/model'
=== added file 'account_payment_purchase/model/__init__.py'
--- account_payment_purchase/model/__init__.py	1970-01-01 00:00:00 +0000
+++ account_payment_purchase/model/__init__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,24 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Purchase module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from . import purchase
+from . import stock

=== added file 'account_payment_purchase/model/purchase.py'
--- account_payment_purchase/model/purchase.py	1970-01-01 00:00:00 +0000
+++ account_payment_purchase/model/purchase.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,82 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Purchase module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import orm, fields
+
+
+class purchase_order(orm.Model):
+    _inherit = "purchase.order"
+
+    _columns = {
+        'supplier_partner_bank': fields.many2one(
+            'res.partner.bank', 'Supplier Bank Account',
+            help="Select the bank account of your supplier on which "
+            "your company should send the payment. This field is copied "
+            "from the partner and will be copied to the supplier invoice."),
+        'payment_mode_type': fields.many2one(
+            'payment.mode.type', 'Payment Type'),
+        }
+
+    def _get_default_supplier_partner_bank(
+            self, cr, uid, partner, context=None):
+        '''This function is designed to be inherited'''
+        if partner.bank_ids:
+            return partner.bank_ids[0].id
+        else:
+            return False
+
+    def onchange_partner_id(self, cr, uid, ids, partner_id):
+        res = super(purchase_order, self).onchange_partner_id(
+            cr, uid, ids, partner_id)
+        if partner_id:
+            partner = self.pool['res.partner'].browse(
+                cr, uid, partner_id)
+            res['value'].update({
+                'supplier_partner_bank':
+                self._get_default_supplier_partner_bank(
+                    cr, uid, partner),
+                'payment_mode_type':
+                partner.supplier_payment_mode_type.id or False,
+                })
+        else:
+            res['value'].update({
+                'supplier_partner_bank': False,
+                'payment_mode_type': False,
+                })
+        return res
+
+    def action_invoice_create(self, cr, uid, ids, context=None):
+        """Copy bank partner + payment type from PO to invoice"""
+        # as of OpenERP 7.0, there is no _prepare function for
+        # the invoice (the _prepare function only exists for invoice lines)
+        res = super(purchase_order, self).action_invoice_create(
+            cr, uid, ids, context=context)
+        for order in self.browse(cr, uid, ids, context=context):
+            for invoice in order.invoice_ids:
+                if invoice.state == 'draft':
+                    invoice.write({
+                        'partner_bank_id':
+                        order.supplier_partner_bank.id or False,
+                        'payment_mode_type':
+                        order.payment_mode_type.id or False,
+                        }, context=context)
+        return res

=== added file 'account_payment_purchase/model/stock.py'
--- account_payment_purchase/model/stock.py	1970-01-01 00:00:00 +0000
+++ account_payment_purchase/model/stock.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,42 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Purchase module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import orm
+
+
+class stock_picking(orm.Model):
+    _inherit = "stock.picking"
+
+    def _prepare_invoice(
+            self, cr, uid, picking, partner, inv_type, journal_id,
+            context=None):
+        """Copy bank partner and payment type from PO to invoice"""
+        invoice_vals = super(stock_picking, self)._prepare_invoice(
+            cr, uid, picking, partner, inv_type, journal_id, context=context)
+        if picking.purchase_id:
+            invoice_vals.update({
+                'partner_bank_id':
+                picking.purchase_id.supplier_partner_bank.id or False,
+                'payment_mode_type':
+                picking.purchase_id.payment_mode_type.id or False,
+                })
+        return invoice_vals

=== added directory 'account_payment_purchase/view'
=== added file 'account_payment_purchase/view/purchase.xml'
--- account_payment_purchase/view/purchase.xml	1970-01-01 00:00:00 +0000
+++ account_payment_purchase/view/purchase.xml	2014-03-17 11:19:16 +0000
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+    Copyright (C) 2014 Akretion (http://www.akretion.com/)
+    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+    The licence is in the file __openerp__.py
+-->
+
+<openerp>
+<data>
+
+<record id="purchase_order_form" model="ir.ui.view">
+    <field name="name">account_payment_purchase.purchase_order.form</field>
+    <field name="model">purchase.order</field>
+    <field name="inherit_id" ref="purchase.purchase_order_form"/>
+    <field name="arch" type="xml">
+        <field name="payment_term_id" position="after">
+            <field name="payment_mode_type"/>
+            <field name="supplier_partner_bank"
+                domain="[('partner_id', '=', partner_id)]" />
+        </field>
+    </field>
+</record>
+
+</data>
+</openerp>

=== added directory 'account_payment_sale'
=== added file 'account_payment_sale/__init__.py'
--- account_payment_sale/__init__.py	1970-01-01 00:00:00 +0000
+++ account_payment_sale/__init__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Sale module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from . import model

=== added file 'account_payment_sale/__openerp__.py'
--- account_payment_sale/__openerp__.py	1970-01-01 00:00:00 +0000
+++ account_payment_sale/__openerp__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,48 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Sale module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com).
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+{
+    'name': 'Account Payment Sale',
+    'version': '1.0',
+    'category': 'Banking addons',
+    'license': 'AGPL-3',
+    'summary': "Adds Bank Account and Payment Type on Sale Orders",
+    'description': """
+Account Payment Sale
+====================
+
+This modules adds 2 fields on sale orders : *Bank Account* and *Payment Type*. These fields are copied from partner to sale order and then from sale order to customer invoice.
+
+This module is similar to the *sale_payment* module ; the main difference is that it doesn't depend on the *account_payment_extension* module (it's not the only module to conflict with *account_payment_extension* ; all the SEPA modules in the banking addons conflict with *account_payment_extension*, cf banking-addons-70/account_banking_payment_export/__openerp__.py).
+
+Please contact Alexis de Lattre from Akretion <alexis.delattre@xxxxxxxxxxxx> for any help or question about this module.
+    """,
+    'author': 'Akretion',
+    'website': 'http://www.akretion.com',
+    'depends': ['sale', 'account_payment_partner'],
+    'conflicts': ['sale_payment'],
+    'data': [
+        'view/sale.xml',
+    ],
+    'installable': True,
+    'active': False,
+}

=== added directory 'account_payment_sale/i18n'
=== added file 'account_payment_sale/i18n/account_payment_sale.pot'
--- account_payment_sale/i18n/account_payment_sale.pot	1970-01-01 00:00:00 +0000
+++ account_payment_sale/i18n/account_payment_sale.pot	2014-03-17 11:19:16 +0000
@@ -0,0 +1,37 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+#	* account_payment_sale
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-02-24 23:07+0000\n"
+"PO-Revision-Date: 2014-02-24 23:07+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: account_payment_sale
+#: field:sale.order,payment_mode_type:0
+msgid "Payment Type"
+msgstr ""
+
+#. module: account_payment_sale
+#: model:ir.model,name:account_payment_sale.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: account_payment_sale
+#: help:sale.order,partner_bank_receivable:0
+msgid "Select the bank account of your company on which the customer should pay. This field is copied from the partner and will be copied to the customer invoice."
+msgstr ""
+
+#. module: account_payment_sale
+#: field:sale.order,partner_bank_receivable:0
+msgid "Receivable Bank Account"
+msgstr ""
+

=== added directory 'account_payment_sale/model'
=== added file 'account_payment_sale/model/__init__.py'
--- account_payment_sale/model/__init__.py	1970-01-01 00:00:00 +0000
+++ account_payment_sale/model/__init__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Sale module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from . import sale

=== added file 'account_payment_sale/model/sale.py'
--- account_payment_sale/model/sale.py	1970-01-01 00:00:00 +0000
+++ account_payment_sale/model/sale.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,66 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Sale module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import orm, fields
+
+
+class sale_order(orm.Model):
+    _inherit = "sale.order"
+
+    _columns = {
+        'partner_bank_receivable': fields.many2one(
+            'res.partner.bank', 'Receivable Bank Account',
+            help="Select the bank account of your company on which the "
+            "customer should pay. This field is copied from the partner "
+            "and will be copied to the customer invoice."),
+        'payment_mode_type': fields.many2one(
+            'payment.mode.type', 'Payment Type'),
+        }
+
+    def onchange_partner_id(self, cr, uid, ids, part, context=None):
+        res = super(sale_order, self).onchange_partner_id(
+            cr, uid, ids, part, context=context)
+        if part:
+            partner = self.pool['res.partner'].browse(
+                cr, uid, part, context=context)
+            res['value'].update({
+                'partner_bank_receivable':
+                partner.partner_bank_receivable.id or False,
+                'payment_mode_type':
+                partner.customer_payment_mode_type.id or False,
+                })
+        else:
+            res['value'].update({
+                'partner_bank_receivable': False,
+                'payment_mode_type': False,
+                })
+        return res
+
+    def _prepare_invoice(self, cr, uid, order, lines, context=None):
+        """Copy bank partner from sale order to invoice"""
+        invoice_vals = super(sale_order, self)._prepare_invoice(
+            cr, uid, order, lines, context=context)
+        invoice_vals.update({
+            'partner_bank_id': order.partner_bank_receivable.id or False,
+            'payment_mode_type': order.payment_mode_type.id or False,
+            })
+        return invoice_vals

=== added directory 'account_payment_sale/view'
=== added file 'account_payment_sale/view/sale.xml'
--- account_payment_sale/view/sale.xml	1970-01-01 00:00:00 +0000
+++ account_payment_sale/view/sale.xml	2014-03-17 11:19:16 +0000
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+    Copyright (C) 2014 Akretion (http://www.akretion.com/)
+    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+    The licence is in the file __openerp__.py
+-->
+
+<openerp>
+<data>
+
+<record id="view_order_form" model="ir.ui.view">
+    <field name="name">account_payment_sale.sale_order.form</field>
+    <field name="model">sale.order</field>
+    <field name="inherit_id" ref="sale.view_order_form"/>
+    <field name="arch" type="xml">
+        <field name="payment_term" position="after">
+            <field name="payment_mode_type"/>
+            <field name="partner_bank_receivable"
+                domain="[('partner_id.ref_companies', 'in', [company_id])]" />
+                <!-- I can't add widget=selection,
+                because it will break the domain instruction -->
+        </field>
+    </field>
+</record>
+
+</data>
+</openerp>

=== added directory 'account_payment_sale_stock'
=== added file 'account_payment_sale_stock/__init__.py'
--- account_payment_sale_stock/__init__.py	1970-01-01 00:00:00 +0000
+++ account_payment_sale_stock/__init__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Sale Stock module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from . import model

=== added file 'account_payment_sale_stock/__openerp__.py'
--- account_payment_sale_stock/__openerp__.py	1970-01-01 00:00:00 +0000
+++ account_payment_sale_stock/__openerp__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,43 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Sale Stock module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com).
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+{
+    'name': 'Account Payment Sale Stock',
+    'version': '1.0',
+    'category': 'Banking addons',
+    'license': 'AGPL-3',
+    'summary': "Manage Payment Type and Bank Account when invoicing from picking",
+    'description': """
+Account Payment Sale Stock
+==========================
+
+This modules copies *Bank Account* and *Payment Type* from Sale Order to Invoice when the Invoice is generated from the Picking.
+
+Please contact Alexis de Lattre from Akretion <alexis.delattre@xxxxxxxxxxxx> for any help or question about this module.
+    """,
+    'author': 'Akretion',
+    'website': 'http://www.akretion.com',
+    'depends': ['sale_stock', 'account_payment_sale'],
+    'conflicts': ['account_payment_extension'],
+    'data': [],
+    'active': False,
+}

=== added directory 'account_payment_sale_stock/model'
=== added file 'account_payment_sale_stock/model/__init__.py'
--- account_payment_sale_stock/model/__init__.py	1970-01-01 00:00:00 +0000
+++ account_payment_sale_stock/model/__init__.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,23 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Sale Stock module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from . import stock

=== added file 'account_payment_sale_stock/model/stock.py'
--- account_payment_sale_stock/model/stock.py	1970-01-01 00:00:00 +0000
+++ account_payment_sale_stock/model/stock.py	2014-03-17 11:19:16 +0000
@@ -0,0 +1,42 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    Account Payment Sale Stock module for OpenERP
+#    Copyright (C) 2014 Akretion (http://www.akretion.com)
+#    @author Alexis de Lattre <alexis.delattre@xxxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import orm
+
+
+class stock_picking(orm.Model):
+    _inherit = "stock.picking"
+
+    def _prepare_invoice(
+            self, cr, uid, picking, partner, inv_type, journal_id,
+            context=None):
+        """Copy bank partner and payment type from sale order to invoice"""
+        invoice_vals = super(stock_picking, self)._prepare_invoice(
+            cr, uid, picking, partner, inv_type, journal_id, context=context)
+        if picking.sale_id:
+            invoice_vals.update({
+                'partner_bank_id':
+                picking.sale_id.partner_bank_receivable.id or False,
+                'payment_mode_type':
+                picking.sale_id.payment_mode_type.id or False,
+                })
+        return invoice_vals


Follow ups