Add module account_banking_mandate_sale

Add option 'mandate_required' on payment orders
Autoselect first valid mandate on customer invoice that have a payment mode 'mandate_required' = True
Add option on select move lines to pay wizard to allow selection of litigation moves (unchecked by default), in order to integrate the feature of the module account_payment_blocking
This commit is contained in:
Alexis de Lattre
2016-05-07 23:55:46 +02:00
committed by ferran-73
parent 5e750f942b
commit 8b61d56f72
8 changed files with 182 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:alt: License: AGPL-3
Account Banking Mandate Sale
============================
This modules adds the field *Direct Debit Mandate* on sale orders.
Configuration
=============
There is nothing to configure.
Usage
=====
When you select a payment mode that requires mandate on a sale order, Odoo will
select by default the first valid mandate of this customer.
The mandate will be copied from the sale order to the invoice.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/173/9.0
Known issues / Roadmap
======================
* No known issues.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/bank-payment/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smashing it by providing a detailed and welcomed `feedback
<https://github.com/OCA/
bank-payment/issues/new?body=module:%20
account_banking_mandate_sale%0Aversion:%20
9.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Images
------
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
Contributors
------------
* Alexis de Lattre <alexis.delattre@akretion.com>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization
whose mission is to support the collaborative development of Odoo
features and promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.

View File

@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
from . import models
from . import wizard

View File

@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# © 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Account Banking Mandate Sale',
'version': '9.0.1.0.0',
'category': 'Banking addons',
'license': 'AGPL-3',
'summary': "Adds mandates on sale orders",
'author': "Akretion, "
"Odoo Community Association (OCA)",
'website': 'https://github.com/OCA/bank-payment',
'depends': [
'account_payment_sale',
'account_banking_mandate',
],
'data': [
'views/sale_order.xml',
],
'installable': True,
}

View File

@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import sale_order

View File

@@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
# © 2014-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from openerp import models, fields, api
class SaleOrder(models.Model):
_inherit = "sale.order"
# This field commercial_partner_id should be moved
# in an OCA base module named for example sale_commercial_partner
commercial_partner_id = fields.Many2one(
related='partner_id.commercial_partner_id', string='Commercial Entity',
store=True, readonly=True)
mandate_id = fields.Many2one(
'account.banking.mandate', string='Direct Debit Mandate',
ondelete='restrict', readonly=True,
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]})
@api.multi
def _prepare_invoice(self):
"""Copy mandate from sale order to invoice"""
vals = super(SaleOrder, self)._prepare_invoice()
vals['mandate_id'] = self.mandate_id.id
return vals
@api.onchange('payment_mode_id')
def payment_mode_change(self):
"""Select by default the first valid mandate of the partner"""
if self.payment_mode_id.mandate_required and self.partner_id:
mandates = self.env['account.banking.mandate'].search([
('state', '=', 'valid'),
('partner_id', '=', self.commercial_partner_id.id),
])
self.mandate_id = mandates[0]

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2016 Akretion (http://www.akretion.com/)
@author Alexis de Lattre <alexis.delattre@akretion.com>
The licence is in the file __openerp__.py
-->
<openerp>
<data>
<record id="view_order_form" model="ir.ui.view">
<field name="name">account_banking_mandate_sale.sale_order.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="account_payment_sale.view_order_form"/>
<field name="arch" type="xml">
<field name="payment_mode_id" position="after">
<field name="commercial_partner_id" invisible="1"/>
<field name="mandate_id"
domain="[('partner_id', '=', commercial_partner_id), ('state', 'in', ('draft', 'valid'))]"/>
</field>
</field>
</record>
</data>
</openerp>

View File

@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import sale_make_invoice_advance

View File

@@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
# © 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from openerp import models, api
class SaleAdvancePaymentInv(models.TransientModel):
_inherit = 'sale.advance.payment.inv'
@api.multi
def _create_invoice(self, order, so_line, amount):
"""Copy mandate from sale order to invoice"""
inv = super(SaleAdvancePaymentInv, self)._create_invoice(
order, so_line, amount)
if order.mandate_id:
inv.mandate_id = order.mandate_id.id
return inv