diff --git a/account_banking_mandate/README.rst b/account_banking_mandate/README.rst index 48d7f74f7..2366bc8c8 100644 --- a/account_banking_mandate/README.rst +++ b/account_banking_mandate/README.rst @@ -31,22 +31,26 @@ Usage To use this module, see menu "Accounting > payment > SEPA direct debit mandates" -For further information, please visit: - - * https://www.odoo.com/forum/help-1 +.. 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 `_. -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 -`here `_. +Bugs are tracked on `GitHub 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 +`_. Credits ======= @@ -54,11 +58,11 @@ Credits Contributors ------------ -* Alexis de Lattre +* Alexis de Lattre * Pedro M. Baeza * Alexandre Fayolle -* Stéphane Bidoul -* Sergio Teruel (Incaser) +* Stéphane Bidoul +* Sergio Teruel (Incaser) Maintainer ---------- diff --git a/account_banking_mandate/__openerp__.py b/account_banking_mandate/__openerp__.py index 1fff79f66..a53d4e75b 100644 --- a/account_banking_mandate/__openerp__.py +++ b/account_banking_mandate/__openerp__.py @@ -20,6 +20,7 @@ ], 'data': [ 'views/account_banking_mandate_view.xml', + 'views/account_payment_mode.xml', 'views/account_invoice_view.xml', 'views/account_payment_line.xml', 'views/res_partner_bank_view.xml', diff --git a/account_banking_mandate/models/__init__.py b/account_banking_mandate/models/__init__.py index 646eec280..50af22b59 100644 --- a/account_banking_mandate/models/__init__.py +++ b/account_banking_mandate/models/__init__.py @@ -4,6 +4,8 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import account_banking_mandate +from . import account_payment_mode +from . import account_payment_order from . import account_invoice from . import res_partner_bank from . import account_payment_line diff --git a/account_banking_mandate/models/account_invoice.py b/account_banking_mandate/models/account_invoice.py index e1152569c..12afdc33e 100644 --- a/account_banking_mandate/models/account_invoice.py +++ b/account_banking_mandate/models/account_invoice.py @@ -40,3 +40,17 @@ class AccountInvoice(models.Model): if invoice.type == 'out_invoice': vals['mandate_id'] = invoice.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.type in ('out_invoice', 'out_refund') and + self.payment_mode_id.payment_type == 'inbound' and + 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] diff --git a/account_banking_mandate/models/account_payment_mode.py b/account_banking_mandate/models/account_payment_mode.py new file mode 100644 index 000000000..6f46ab430 --- /dev/null +++ b/account_banking_mandate/models/account_payment_mode.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, fields + + +class AccountPaymentMode(models.Model): + _inherit = "account.payment.mode" + + mandate_required = fields.Boolean( + string='Mandate Required', + help="Activate this option is this payment mode requires your " + "customer to sign a direct debit mandate with your company.") diff --git a/account_banking_mandate/models/account_payment_order.py b/account_banking_mandate/models/account_payment_order.py new file mode 100644 index 000000000..c9f762c95 --- /dev/null +++ b/account_banking_mandate/models/account_payment_order.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre - alexis.delattre@akretion.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api, _ +from openerp.exceptions import UserError + + +class AccountPaymentOrder(models.Model): + _inherit = 'account.payment.order' + + @api.multi + def draft2open(self): + for order in self: + if order.payment_mode_id.mandate_required: + for line in order.payment_line_ids: + if not line.mandate_id: + raise UserError(_( + "Missing mandate in payment line %s") % line.name) + return super(AccountPaymentOrder, self).draft2open() diff --git a/account_banking_mandate/views/account_payment_mode.xml b/account_banking_mandate/views/account_payment_mode.xml new file mode 100644 index 000000000..488251185 --- /dev/null +++ b/account_banking_mandate/views/account_payment_mode.xml @@ -0,0 +1,20 @@ + + + + + + + account_banking_mandate.account.payment.mode.form + account.payment.mode + + + + + + + + + + + diff --git a/account_banking_mandate_sale/README.rst b/account_banking_mandate_sale/README.rst new file mode 100644 index 000000000..eb73e9cc8 --- /dev/null +++ b/account_banking_mandate_sale/README.rst @@ -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 +`_. 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 +`_. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Alexis de Lattre + +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. diff --git a/account_banking_mandate_sale/__init__.py b/account_banking_mandate_sale/__init__.py new file mode 100644 index 000000000..35e7c9600 --- /dev/null +++ b/account_banking_mandate_sale/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import models +from . import wizard diff --git a/account_banking_mandate_sale/__openerp__.py b/account_banking_mandate_sale/__openerp__.py new file mode 100644 index 000000000..810cd5aa0 --- /dev/null +++ b/account_banking_mandate_sale/__openerp__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre ) +# 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, +} diff --git a/account_banking_mandate_sale/models/__init__.py b/account_banking_mandate_sale/models/__init__.py new file mode 100644 index 000000000..6064afee1 --- /dev/null +++ b/account_banking_mandate_sale/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import sale_order diff --git a/account_banking_mandate_sale/models/sale_order.py b/account_banking_mandate_sale/models/sale_order.py new file mode 100644 index 000000000..beba347e8 --- /dev/null +++ b/account_banking_mandate_sale/models/sale_order.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# © 2014-2016 Akretion (Alexis de Lattre ) +# 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] diff --git a/account_banking_mandate_sale/views/sale_order.xml b/account_banking_mandate_sale/views/sale_order.xml new file mode 100644 index 000000000..d14faf64f --- /dev/null +++ b/account_banking_mandate_sale/views/sale_order.xml @@ -0,0 +1,27 @@ + + + + + + + + + account_banking_mandate_sale.sale_order.form + sale.order + + + + + + + + + + + + diff --git a/account_banking_mandate_sale/wizard/__init__.py b/account_banking_mandate_sale/wizard/__init__.py new file mode 100644 index 000000000..1eb17ffa1 --- /dev/null +++ b/account_banking_mandate_sale/wizard/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import sale_make_invoice_advance diff --git a/account_banking_mandate_sale/wizard/sale_make_invoice_advance.py b/account_banking_mandate_sale/wizard/sale_make_invoice_advance.py new file mode 100644 index 000000000..0e9d34aa4 --- /dev/null +++ b/account_banking_mandate_sale/wizard/sale_make_invoice_advance.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre ) +# 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 diff --git a/account_banking_pain_base/README.rst b/account_banking_pain_base/README.rst index 36f50e1d9..f9e08a6b6 100644 --- a/account_banking_pain_base/README.rst +++ b/account_banking_pain_base/README.rst @@ -31,6 +31,10 @@ Usage See 'readme' files of the OCA/bank-payment suite. +.. 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 ====================== @@ -39,10 +43,14 @@ Known issues / Roadmap Bug Tracker =========== -Bugs are tracked on `GitHub 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 -`here `_. +Bugs are tracked on `GitHub 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 +`_. Credits ======= @@ -52,7 +60,7 @@ Contributors * Alexis de Lattre * Pedro M. Baeza -* Stéphane Bidoul +* Stéphane Bidoul * Ignacio Ibeas - Acysos S.L. * Alexandre Fayolle * Raphaël Valyi diff --git a/account_banking_sepa_credit_transfer/README.rst b/account_banking_sepa_credit_transfer/README.rst index fa1e446fb..0e12698f5 100644 --- a/account_banking_sepa_credit_transfer/README.rst +++ b/account_banking_sepa_credit_transfer/README.rst @@ -32,12 +32,21 @@ This module is part of the OCA/bank-payment suite. Configuration ============= -No specific configuration. +Create a Payment Mode dedicated to SEPA Credit Transfer and select +the Payment Method *SEPA Credit Transfer to suppliers* (which is +automatically created upon module installation) and check that this +payment method uses the proper version of PAIN. Usage ===== -* You need to choose first an SEPA export type on a payment mode. +In the menu *Accounting > Payments > Payment Order*, create a new +payment order and select the Payment Mode dedicated to SEPA Credit +Transfer that you created during the configuration step. + +.. 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 ====================== @@ -47,10 +56,14 @@ Known issues / Roadmap Bug Tracker =========== -Bugs are tracked on `GitHub 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 -`here `_. +Bugs are tracked on `GitHub 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 +`_. Credits ======= diff --git a/account_banking_sepa_direct_debit/README.rst b/account_banking_sepa_direct_debit/README.rst index 4a2788e68..000b0263d 100644 --- a/account_banking_sepa_direct_debit/README.rst +++ b/account_banking_sepa_direct_debit/README.rst @@ -24,7 +24,6 @@ Installation This module depends on : -* account_direct_debit * account_banking_pain_base * account_banking_mandate @@ -33,14 +32,21 @@ This module is part of the OCA/bank-payment suite. Configuration ============= -To configure this module, you need to: - - * Create a payment mode and select an export type related to debit order ( eg. "SEPA direct debit ...") +Create a Payment Mode dedicated to SEPA Direct Debit and select the +Payment Method *SEPA Direct Debit for customers* (which is automatically +created upon module installation) and check that this payment method +uses the proper version of PAIN. Usage ===== -To use this module, you must select this payment mode on a direct debit order (Menu :Accounting > Payment > Debit Orders) +In the menu *Accounting > Payments > Debit Order*, create a new debit +order and select the Payment Mode dedicated to SEPA Direct Debit that +you created during the configuration step. + +.. 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 ====================== @@ -50,10 +56,14 @@ Known issues / Roadmap Bug Tracker =========== -Bugs are tracked on `GitHub 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 -`here `_. +Bugs are tracked on `GitHub 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 +`_. Credits ======= diff --git a/account_banking_sepa_direct_debit/demo/sepa_direct_debit_demo.xml b/account_banking_sepa_direct_debit/demo/sepa_direct_debit_demo.xml index 4548d0cf4..fb72bb89f 100644 --- a/account_banking_sepa_direct_debit/demo/sepa_direct_debit_demo.xml +++ b/account_banking_sepa_direct_debit/demo/sepa_direct_debit_demo.xml @@ -9,6 +9,7 @@ variable + diff --git a/account_payment_mode/views/account_payment_mode.xml b/account_payment_mode/views/account_payment_mode.xml index f7213621b..90ffb114f 100644 --- a/account_payment_mode/views/account_payment_mode.xml +++ b/account_payment_mode/views/account_payment_mode.xml @@ -12,6 +12,7 @@ + Payments > Debit Orders a This module also adds a button *Add to Payment Order* on supplier invoices and a button *Add to Debit Order* on customer invoices. +.. 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 `_. -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 -`here `_. - +Bugs are tracked on `GitHub 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 +`_. Credits ======= @@ -68,8 +75,8 @@ Contributors ------------ * Stéphane Bidoul -* Alexis de Lattre -* Pedro M. Baeza +* Alexis de Lattre +* Pedro M. Baeza * Adrien Peiffer * Stefan Rijnhart * Laurent Mignon diff --git a/account_payment_order/models/account_payment_order.py b/account_payment_order/models/account_payment_order.py index fe214b8d2..cccf28126 100644 --- a/account_payment_order/models/account_payment_order.py +++ b/account_payment_order/models/account_payment_order.py @@ -34,7 +34,7 @@ class AccountPaymentOrder(models.Model): bank_account_link = fields.Selection( related='payment_mode_id.bank_account_link', readonly=True) journal_id = fields.Many2one( - 'account.journal', string='Bank Journal', + 'account.journal', string='Bank Journal', ondelete='restrict', readonly=True, states={'draft': [('readonly', False)]}) allowed_journal_ids = fields.Many2many( 'account.journal', compute='_compute_allowed_journals', readonly=True, diff --git a/account_payment_order/wizard/account_payment_line_create.py b/account_payment_order/wizard/account_payment_line_create.py index b8769032e..f131db886 100644 --- a/account_payment_order/wizard/account_payment_line_create.py +++ b/account_payment_order/wizard/account_payment_line_create.py @@ -20,6 +20,8 @@ class AccountPaymentLineCreate(models.TransientModel): ('posted', 'All Posted Entries'), ('all', 'All Entries'), ], string='Target Moves') + allow_blocked = fields.Boolean( + string='Allow Litigation Move Lines') invoice = fields.Boolean( string='Linked to an Invoice or Refund') date_type = fields.Selection([ @@ -65,6 +67,8 @@ class AccountPaymentLineCreate(models.TransientModel): ('journal_id', 'in', journals.ids)] if self.target_move == 'posted': domain += [('move_id.state', '=', 'posted')] + if not self.allow_blocked: + domain += [('blocked', '!=', True)] if self.date_type == 'due': domain += [ '|', diff --git a/account_payment_order/wizard/account_payment_line_create_view.xml b/account_payment_order/wizard/account_payment_line_create_view.xml index e12034e75..de7d836d0 100644 --- a/account_payment_order/wizard/account_payment_line_create_view.xml +++ b/account_payment_order/wizard/account_payment_line_create_view.xml @@ -23,6 +23,7 @@ +