mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
[IMP] account_banking_madante: black, isort
This commit is contained in:
@@ -1,2 +1 @@
|
||||
|
||||
from . import models
|
||||
|
||||
@@ -5,31 +5,29 @@
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
{
|
||||
'name': 'Account Banking Mandate',
|
||||
'summary': 'Banking mandates',
|
||||
'version': '12.0.2.0.0',
|
||||
'license': 'AGPL-3',
|
||||
'author': "Compassion CH, "
|
||||
"Tecnativa, "
|
||||
"Akretion, "
|
||||
"Odoo Community Association (OCA)",
|
||||
'website': 'https://github.com/OCA/bank-payment',
|
||||
'category': 'Banking addons',
|
||||
'depends': [
|
||||
'account_payment_order',
|
||||
"name": "Account Banking Mandate",
|
||||
"summary": "Banking mandates",
|
||||
"version": "12.0.2.0.0",
|
||||
"license": "AGPL-3",
|
||||
"author": "Compassion CH, "
|
||||
"Tecnativa, "
|
||||
"Akretion, "
|
||||
"Odoo Community Association (OCA)",
|
||||
"website": "https://github.com/OCA/bank-payment",
|
||||
"category": "Banking addons",
|
||||
"depends": ["account_payment_order"],
|
||||
"data": [
|
||||
"views/account_banking_mandate_view.xml",
|
||||
"views/account_payment_method.xml",
|
||||
"views/account_invoice_view.xml",
|
||||
"views/account_payment_line.xml",
|
||||
"views/res_partner_bank_view.xml",
|
||||
"views/res_partner.xml",
|
||||
"views/bank_payment_line_view.xml",
|
||||
"views/account_move_line.xml",
|
||||
"data/mandate_reference_sequence.xml",
|
||||
"security/mandate_security.xml",
|
||||
"security/ir.model.access.csv",
|
||||
],
|
||||
'data': [
|
||||
'views/account_banking_mandate_view.xml',
|
||||
'views/account_payment_method.xml',
|
||||
'views/account_invoice_view.xml',
|
||||
'views/account_payment_line.xml',
|
||||
'views/res_partner_bank_view.xml',
|
||||
'views/res_partner.xml',
|
||||
'views/bank_payment_line_view.xml',
|
||||
'views/account_move_line.xml',
|
||||
'data/mandate_reference_sequence.xml',
|
||||
'security/mandate_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
],
|
||||
'installable': True,
|
||||
"installable": True,
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo noupdate="1">
|
||||
|
||||
<record id="dd_mandate_seq" model="ir.sequence">
|
||||
<field name="name">DD Mandate Reference</field>
|
||||
<field name="code">account.banking.mandate</field>
|
||||
<field name="prefix">BM</field>
|
||||
<field name="padding" eval="7"/>
|
||||
</record>
|
||||
|
||||
<record id="dd_mandate_seq" model="ir.sequence">
|
||||
<field name="name">DD Mandate Reference</field>
|
||||
<field name="code">account.banking.mandate</field>
|
||||
<field name="prefix">BM</field>
|
||||
<field name="padding" eval="7" />
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
# Copyright 2019 Tecnativa - Pedro M. Baeza
|
||||
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
|
||||
|
||||
from openupgradelib import openupgrade
|
||||
from openupgradelib import openupgrade_90
|
||||
from openupgradelib import openupgrade, openupgrade_90
|
||||
|
||||
|
||||
@openupgrade.migrate(use_env=True)
|
||||
def migrate(env, version):
|
||||
column = openupgrade.get_legacy_name('scan')
|
||||
if openupgrade.column_exists(env.cr, 'account_banking_mandate', column):
|
||||
column = openupgrade.get_legacy_name("scan")
|
||||
if openupgrade.column_exists(env.cr, "account_banking_mandate", column):
|
||||
openupgrade_90.convert_binary_field_to_attachment(
|
||||
env, {'account.banking.mandate': [('scan', None)]},
|
||||
env, {"account.banking.mandate": [("scan", None)]},
|
||||
)
|
||||
|
||||
@@ -4,13 +4,11 @@
|
||||
from openupgradelib import openupgrade
|
||||
|
||||
column_renames = {
|
||||
'account_banking_mandate': [
|
||||
('scan', None),
|
||||
],
|
||||
"account_banking_mandate": [("scan", None)],
|
||||
}
|
||||
|
||||
|
||||
@openupgrade.migrate()
|
||||
def migrate(env, version):
|
||||
if openupgrade.column_exists(env.cr, 'account_banking_mandate', 'scan'):
|
||||
if openupgrade.column_exists(env.cr, "account_banking_mandate", "scan"):
|
||||
openupgrade.rename_columns(env.cr, column_renames)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
from . import account_banking_mandate
|
||||
from . import account_payment_method
|
||||
from . import account_invoice
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# Copyright 2020 Tecnativa - Carlos Dauden
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import models, fields, api, _
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
|
||||
|
||||
@@ -13,71 +13,88 @@ class AccountBankingMandate(models.Model):
|
||||
authorization that the bank account owner gives to a company for a
|
||||
specific operation (such as direct debit)
|
||||
"""
|
||||
_name = 'account.banking.mandate'
|
||||
|
||||
_name = "account.banking.mandate"
|
||||
_description = "A generic banking mandate"
|
||||
_inherit = ['mail.thread']
|
||||
_order = 'signature_date desc'
|
||||
_inherit = ["mail.thread"]
|
||||
_order = "signature_date desc"
|
||||
|
||||
def _get_default_partner_bank_id_domain(self):
|
||||
if 'default_partner_id' in self.env.context:
|
||||
return [('partner_id', '=', self.env.context.get(
|
||||
'default_partner_id'))]
|
||||
if "default_partner_id" in self.env.context:
|
||||
return [("partner_id", "=", self.env.context.get("default_partner_id"))]
|
||||
else:
|
||||
return []
|
||||
|
||||
format = fields.Selection(
|
||||
[('basic', 'Basic Mandate')], default='basic', required=True,
|
||||
string='Mandate Format', track_visibility='onchange')
|
||||
[("basic", "Basic Mandate")],
|
||||
default="basic",
|
||||
required=True,
|
||||
string="Mandate Format",
|
||||
track_visibility="onchange",
|
||||
)
|
||||
type = fields.Selection(
|
||||
[('generic', 'Generic Mandate')],
|
||||
string='Type of Mandate',
|
||||
track_visibility='onchange'
|
||||
[("generic", "Generic Mandate")],
|
||||
string="Type of Mandate",
|
||||
track_visibility="onchange",
|
||||
)
|
||||
partner_bank_id = fields.Many2one(
|
||||
comodel_name='res.partner.bank', string='Bank Account',
|
||||
track_visibility='onchange',
|
||||
comodel_name="res.partner.bank",
|
||||
string="Bank Account",
|
||||
track_visibility="onchange",
|
||||
domain=lambda self: self._get_default_partner_bank_id_domain(),
|
||||
ondelete='restrict',
|
||||
ondelete="restrict",
|
||||
index=True,
|
||||
)
|
||||
partner_id = fields.Many2one(
|
||||
comodel_name='res.partner', related='partner_bank_id.partner_id',
|
||||
string='Partner', store=True, index=True)
|
||||
comodel_name="res.partner",
|
||||
related="partner_bank_id.partner_id",
|
||||
string="Partner",
|
||||
store=True,
|
||||
index=True,
|
||||
)
|
||||
company_id = fields.Many2one(
|
||||
comodel_name='res.company', string='Company', required=True,
|
||||
default=lambda self: self.env['res.company']._company_default_get(
|
||||
'account.banking.mandate'))
|
||||
comodel_name="res.company",
|
||||
string="Company",
|
||||
required=True,
|
||||
default=lambda self: self.env["res.company"]._company_default_get(
|
||||
"account.banking.mandate"
|
||||
),
|
||||
)
|
||||
unique_mandate_reference = fields.Char(
|
||||
string='Unique Mandate Reference', track_visibility='onchange',
|
||||
copy=False,
|
||||
string="Unique Mandate Reference", track_visibility="onchange", copy=False,
|
||||
)
|
||||
signature_date = fields.Date(string='Date of Signature of the Mandate',
|
||||
track_visibility='onchange')
|
||||
scan = fields.Binary(
|
||||
string='Scan of the Mandate',
|
||||
attachment=True,
|
||||
signature_date = fields.Date(
|
||||
string="Date of Signature of the Mandate", track_visibility="onchange"
|
||||
)
|
||||
last_debit_date = fields.Date(string='Date of the Last Debit',
|
||||
readonly=True)
|
||||
state = fields.Selection([
|
||||
('draft', 'Draft'),
|
||||
('valid', 'Valid'),
|
||||
('expired', 'Expired'),
|
||||
('cancel', 'Cancelled'),
|
||||
], string='Status', default='draft', track_visibility='onchange',
|
||||
scan = fields.Binary(string="Scan of the Mandate", attachment=True,)
|
||||
last_debit_date = fields.Date(string="Date of the Last Debit", readonly=True)
|
||||
state = fields.Selection(
|
||||
[
|
||||
("draft", "Draft"),
|
||||
("valid", "Valid"),
|
||||
("expired", "Expired"),
|
||||
("cancel", "Cancelled"),
|
||||
],
|
||||
string="Status",
|
||||
default="draft",
|
||||
track_visibility="onchange",
|
||||
help="Only valid mandates can be used in a payment line. A cancelled "
|
||||
"mandate is a mandate that has been cancelled by the customer.")
|
||||
payment_line_ids = fields.One2many(
|
||||
comodel_name='account.payment.line', inverse_name='mandate_id',
|
||||
string="Related Payment Lines")
|
||||
payment_line_ids_count = fields.Integer(
|
||||
compute='_compute_payment_line_ids_count',
|
||||
"mandate is a mandate that has been cancelled by the customer.",
|
||||
)
|
||||
payment_line_ids = fields.One2many(
|
||||
comodel_name="account.payment.line",
|
||||
inverse_name="mandate_id",
|
||||
string="Related Payment Lines",
|
||||
)
|
||||
payment_line_ids_count = fields.Integer(compute="_compute_payment_line_ids_count",)
|
||||
|
||||
_sql_constraints = [(
|
||||
'mandate_ref_company_uniq',
|
||||
'unique(unique_mandate_reference, company_id)',
|
||||
'A Mandate with the same reference already exists for this company!')]
|
||||
_sql_constraints = [
|
||||
(
|
||||
"mandate_ref_company_uniq",
|
||||
"unique(unique_mandate_reference, company_id)",
|
||||
"A Mandate with the same reference already exists for this company!",
|
||||
)
|
||||
]
|
||||
|
||||
def name_get(self):
|
||||
result = []
|
||||
@@ -85,25 +102,23 @@ class AccountBankingMandate(models.Model):
|
||||
name = mandate.unique_mandate_reference
|
||||
acc_number = mandate.partner_bank_id.acc_number
|
||||
if acc_number:
|
||||
name = '{} [...{}]'.format(name, acc_number[-4:])
|
||||
name = "{} [...{}]".format(name, acc_number[-4:])
|
||||
result.append((mandate.id, name))
|
||||
return result
|
||||
|
||||
@api.multi
|
||||
@api.depends('payment_line_ids')
|
||||
@api.depends("payment_line_ids")
|
||||
def _compute_payment_line_ids_count(self):
|
||||
payment_line_model = self.env['account.payment.line']
|
||||
domain = [('mandate_id', 'in', self.ids)]
|
||||
payment_line_model = self.env["account.payment.line"]
|
||||
domain = [("mandate_id", "in", self.ids)]
|
||||
res = payment_line_model.read_group(
|
||||
domain=domain,
|
||||
fields=['mandate_id'],
|
||||
groupby=['mandate_id'],
|
||||
domain=domain, fields=["mandate_id"], groupby=["mandate_id"],
|
||||
)
|
||||
payment_line_dict = {}
|
||||
for dic in res:
|
||||
mandate_id = dic['mandate_id'][0]
|
||||
mandate_id = dic["mandate_id"][0]
|
||||
payment_line_dict.setdefault(mandate_id, 0)
|
||||
payment_line_dict[mandate_id] += dic['mandate_id_count']
|
||||
payment_line_dict[mandate_id] += dic["mandate_id_count"]
|
||||
for rec in self:
|
||||
rec.payment_line_ids_count = payment_line_dict.get(rec.id, 0)
|
||||
|
||||
@@ -111,103 +126,166 @@ class AccountBankingMandate(models.Model):
|
||||
def show_payment_lines(self):
|
||||
self.ensure_one()
|
||||
return {
|
||||
'name': _("Payment lines"),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'account.payment.line',
|
||||
'domain': [('mandate_id', '=', self.id)],
|
||||
"name": _("Payment lines"),
|
||||
"type": "ir.actions.act_window",
|
||||
"view_mode": "tree,form",
|
||||
"res_model": "account.payment.line",
|
||||
"domain": [("mandate_id", "=", self.id)],
|
||||
}
|
||||
|
||||
@api.multi
|
||||
@api.constrains('signature_date', 'last_debit_date')
|
||||
@api.constrains("signature_date", "last_debit_date")
|
||||
def _check_dates(self):
|
||||
for mandate in self:
|
||||
if (mandate.signature_date and
|
||||
mandate.signature_date > fields.Date.context_today(
|
||||
mandate)):
|
||||
if (
|
||||
mandate.signature_date
|
||||
and mandate.signature_date > fields.Date.context_today(mandate)
|
||||
):
|
||||
raise ValidationError(
|
||||
_("The date of signature of mandate '%s' "
|
||||
"is in the future!")
|
||||
% mandate.unique_mandate_reference)
|
||||
if (mandate.signature_date and mandate.last_debit_date and
|
||||
mandate.signature_date > mandate.last_debit_date):
|
||||
_("The date of signature of mandate '%s' " "is in the future!")
|
||||
% mandate.unique_mandate_reference
|
||||
)
|
||||
if (
|
||||
mandate.signature_date
|
||||
and mandate.last_debit_date
|
||||
and mandate.signature_date > mandate.last_debit_date
|
||||
):
|
||||
raise ValidationError(
|
||||
_("The mandate '%s' can't have a date of last debit "
|
||||
"before the date of signature."
|
||||
) % mandate.unique_mandate_reference)
|
||||
_(
|
||||
"The mandate '%s' can't have a date of last debit "
|
||||
"before the date of signature."
|
||||
)
|
||||
% mandate.unique_mandate_reference
|
||||
)
|
||||
|
||||
@api.constrains('company_id', 'payment_line_ids', 'partner_bank_id')
|
||||
@api.constrains("company_id", "payment_line_ids", "partner_bank_id")
|
||||
def _company_constrains(self):
|
||||
for mandate in self:
|
||||
if mandate.partner_bank_id.company_id and \
|
||||
mandate.partner_bank_id.company_id != mandate.company_id:
|
||||
if (
|
||||
mandate.partner_bank_id.company_id
|
||||
and mandate.partner_bank_id.company_id != mandate.company_id
|
||||
):
|
||||
raise ValidationError(
|
||||
_("The company of the mandate %s differs from the "
|
||||
"company of partner %s.") %
|
||||
(mandate.display_name, mandate.partner_id.name))
|
||||
_(
|
||||
"The company of the mandate %s differs from the "
|
||||
"company of partner %s."
|
||||
)
|
||||
% (mandate.display_name, mandate.partner_id.name)
|
||||
)
|
||||
|
||||
if self.env['account.payment.line'].sudo().search(
|
||||
[('mandate_id', '=', mandate.id),
|
||||
('company_id', '!=', mandate.company_id.id)], limit=1):
|
||||
if (
|
||||
self.env["account.payment.line"]
|
||||
.sudo()
|
||||
.search(
|
||||
[
|
||||
("mandate_id", "=", mandate.id),
|
||||
("company_id", "!=", mandate.company_id.id),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
):
|
||||
raise ValidationError(
|
||||
_("You cannot change the company of mandate %s, "
|
||||
"as there exists payment lines referencing it that "
|
||||
"belong to another company.") %
|
||||
(mandate.display_name, ))
|
||||
_(
|
||||
"You cannot change the company of mandate %s, "
|
||||
"as there exists payment lines referencing it that "
|
||||
"belong to another company."
|
||||
)
|
||||
% (mandate.display_name,)
|
||||
)
|
||||
|
||||
if self.env['account.invoice'].sudo().search(
|
||||
[('mandate_id', '=', mandate.id),
|
||||
('company_id', '!=', mandate.company_id.id)], limit=1):
|
||||
if (
|
||||
self.env["account.invoice"]
|
||||
.sudo()
|
||||
.search(
|
||||
[
|
||||
("mandate_id", "=", mandate.id),
|
||||
("company_id", "!=", mandate.company_id.id),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
):
|
||||
raise ValidationError(
|
||||
_("You cannot change the company of mandate %s, "
|
||||
"as there exists invoices referencing it that belong to "
|
||||
"another company.") %
|
||||
(mandate.display_name, ))
|
||||
_(
|
||||
"You cannot change the company of mandate %s, "
|
||||
"as there exists invoices referencing it that belong to "
|
||||
"another company."
|
||||
)
|
||||
% (mandate.display_name,)
|
||||
)
|
||||
|
||||
if self.env['account.move.line'].sudo().search(
|
||||
[('mandate_id', '=', mandate.id),
|
||||
('company_id', '!=', mandate.company_id.id)], limit=1):
|
||||
if (
|
||||
self.env["account.move.line"]
|
||||
.sudo()
|
||||
.search(
|
||||
[
|
||||
("mandate_id", "=", mandate.id),
|
||||
("company_id", "!=", mandate.company_id.id),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
):
|
||||
raise ValidationError(
|
||||
_("You cannot change the company of mandate %s, "
|
||||
"as there exists journal items referencing it that "
|
||||
"belong to another company.") %
|
||||
(mandate.display_name, ))
|
||||
_(
|
||||
"You cannot change the company of mandate %s, "
|
||||
"as there exists journal items referencing it that "
|
||||
"belong to another company."
|
||||
)
|
||||
% (mandate.display_name,)
|
||||
)
|
||||
|
||||
if self.env['bank.payment.line'].sudo().search(
|
||||
[('mandate_id', '=', mandate.id),
|
||||
('company_id', '!=', mandate.company_id.id)], limit=1):
|
||||
if (
|
||||
self.env["bank.payment.line"]
|
||||
.sudo()
|
||||
.search(
|
||||
[
|
||||
("mandate_id", "=", mandate.id),
|
||||
("company_id", "!=", mandate.company_id.id),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
):
|
||||
raise ValidationError(
|
||||
_("You cannot change the company of mandate %s, "
|
||||
"as there exists bank payment lines referencing it that "
|
||||
"belong to another company.") %
|
||||
(mandate.display_name, ))
|
||||
_(
|
||||
"You cannot change the company of mandate %s, "
|
||||
"as there exists bank payment lines referencing it that "
|
||||
"belong to another company."
|
||||
)
|
||||
% (mandate.display_name,)
|
||||
)
|
||||
|
||||
@api.multi
|
||||
@api.constrains('state', 'partner_bank_id', 'signature_date')
|
||||
@api.constrains("state", "partner_bank_id", "signature_date")
|
||||
def _check_valid_state(self):
|
||||
for mandate in self:
|
||||
if mandate.state == 'valid':
|
||||
if mandate.state == "valid":
|
||||
if not mandate.signature_date:
|
||||
raise ValidationError(
|
||||
_("Cannot validate the mandate '%s' without a date of "
|
||||
"signature.") % mandate.unique_mandate_reference)
|
||||
_(
|
||||
"Cannot validate the mandate '%s' without a date of "
|
||||
"signature."
|
||||
)
|
||||
% mandate.unique_mandate_reference
|
||||
)
|
||||
if not mandate.partner_bank_id:
|
||||
raise ValidationError(
|
||||
_("Cannot validate the mandate '%s' because it is not "
|
||||
"attached to a bank account.") %
|
||||
mandate.unique_mandate_reference)
|
||||
_(
|
||||
"Cannot validate the mandate '%s' because it is not "
|
||||
"attached to a bank account."
|
||||
)
|
||||
% mandate.unique_mandate_reference
|
||||
)
|
||||
|
||||
@api.model
|
||||
def create(self, vals=None):
|
||||
unique_mandate_reference = vals.get('unique_mandate_reference')
|
||||
if not unique_mandate_reference or unique_mandate_reference == 'New':
|
||||
vals['unique_mandate_reference'] = \
|
||||
self.env['ir.sequence'].next_by_code(
|
||||
'account.banking.mandate') or 'New'
|
||||
unique_mandate_reference = vals.get("unique_mandate_reference")
|
||||
if not unique_mandate_reference or unique_mandate_reference == "New":
|
||||
vals["unique_mandate_reference"] = (
|
||||
self.env["ir.sequence"].next_by_code("account.banking.mandate") or "New"
|
||||
)
|
||||
return super(AccountBankingMandate, self).create(vals)
|
||||
|
||||
@api.multi
|
||||
@api.onchange('partner_bank_id')
|
||||
@api.onchange("partner_bank_id")
|
||||
def mandate_partner_bank_change(self):
|
||||
for mandate in self:
|
||||
mandate.partner_id = mandate.partner_bank_id.partner_id
|
||||
@@ -215,19 +293,17 @@ class AccountBankingMandate(models.Model):
|
||||
@api.multi
|
||||
def validate(self):
|
||||
for mandate in self:
|
||||
if mandate.state != 'draft':
|
||||
raise UserError(
|
||||
_('Mandate should be in draft state.'))
|
||||
self.write({'state': 'valid'})
|
||||
if mandate.state != "draft":
|
||||
raise UserError(_("Mandate should be in draft state."))
|
||||
self.write({"state": "valid"})
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def cancel(self):
|
||||
for mandate in self:
|
||||
if mandate.state not in ('draft', 'valid'):
|
||||
raise UserError(
|
||||
_('Mandate should be in draft or valid state.'))
|
||||
self.write({'state': 'cancel'})
|
||||
if mandate.state not in ("draft", "valid"):
|
||||
raise UserError(_("Mandate should be in draft or valid state."))
|
||||
self.write({"state": "cancel"})
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
@@ -236,8 +312,7 @@ class AccountBankingMandate(models.Model):
|
||||
This is for mandates cancelled by mistake.
|
||||
"""
|
||||
for mandate in self:
|
||||
if mandate.state != 'cancel':
|
||||
raise UserError(
|
||||
_('Mandate should be in cancel state.'))
|
||||
self.write({'state': 'draft'})
|
||||
if mandate.state != "cancel":
|
||||
raise UserError(_("Mandate should be in cancel state."))
|
||||
self.write({"state": "draft"})
|
||||
return True
|
||||
|
||||
@@ -5,29 +5,32 @@
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class AccountInvoice(models.Model):
|
||||
_inherit = 'account.invoice'
|
||||
_inherit = "account.invoice"
|
||||
|
||||
mandate_id = fields.Many2one(
|
||||
'account.banking.mandate', string='Direct Debit Mandate',
|
||||
ondelete='restrict',
|
||||
readonly=True, states={'draft': [('readonly', False)]})
|
||||
"account.banking.mandate",
|
||||
string="Direct Debit Mandate",
|
||||
ondelete="restrict",
|
||||
readonly=True,
|
||||
states={"draft": [("readonly", False)]},
|
||||
)
|
||||
mandate_required = fields.Boolean(
|
||||
related='payment_mode_id.payment_method_id.mandate_required',
|
||||
readonly=True)
|
||||
related="payment_mode_id.payment_method_id.mandate_required", readonly=True
|
||||
)
|
||||
|
||||
@api.model
|
||||
def line_get_convert(self, line, part):
|
||||
"""Copy mandate from invoice to account move line"""
|
||||
res = super(AccountInvoice, self).line_get_convert(line, part)
|
||||
if line.get('type') == 'dest' and line.get('invoice_id'):
|
||||
invoice = self.browse(line['invoice_id'])
|
||||
if invoice.type in ('out_invoice', 'out_refund'):
|
||||
res['mandate_id'] = invoice.mandate_id.id or False
|
||||
if line.get("type") == "dest" and line.get("invoice_id"):
|
||||
invoice = self.browse(line["invoice_id"])
|
||||
if invoice.type in ("out_invoice", "out_refund"):
|
||||
res["mandate_id"] = invoice.mandate_id.id or False
|
||||
return res
|
||||
|
||||
@api.model
|
||||
@@ -35,8 +38,8 @@ class AccountInvoice(models.Model):
|
||||
"""Fill the mandate_id from the partner if none is provided on
|
||||
creation, using same method as upstream."""
|
||||
onchanges = {
|
||||
'_onchange_partner_id': ['mandate_id'],
|
||||
'_onchange_payment_mode_id': ['mandate_id'],
|
||||
"_onchange_partner_id": ["mandate_id"],
|
||||
"_onchange_payment_mode_id": ["mandate_id"],
|
||||
}
|
||||
for onchange_method, changed_fields in list(onchanges.items()):
|
||||
if any(f not in vals for f in changed_fields):
|
||||
@@ -55,13 +58,17 @@ class AccountInvoice(models.Model):
|
||||
# to refund, and we also need to copy mandate from invoice to refund
|
||||
@api.model
|
||||
def _prepare_refund(
|
||||
self, invoice, date_invoice=None, date=None, description=None,
|
||||
journal_id=None):
|
||||
self, invoice, date_invoice=None, date=None, description=None, journal_id=None
|
||||
):
|
||||
vals = super(AccountInvoice, self)._prepare_refund(
|
||||
invoice, date_invoice=date_invoice, date=date,
|
||||
description=description, journal_id=journal_id)
|
||||
if invoice.type == 'out_invoice':
|
||||
vals['mandate_id'] = invoice.mandate_id.id
|
||||
invoice,
|
||||
date_invoice=date_invoice,
|
||||
date=date,
|
||||
description=description,
|
||||
journal_id=journal_id,
|
||||
)
|
||||
if invoice.type == "out_invoice":
|
||||
vals["mandate_id"] = invoice.mandate_id.id
|
||||
return vals
|
||||
|
||||
def set_mandate(self):
|
||||
@@ -70,24 +77,29 @@ class AccountInvoice(models.Model):
|
||||
else:
|
||||
self.mandate_id = False
|
||||
|
||||
@api.onchange('partner_id', 'company_id')
|
||||
@api.onchange("partner_id", "company_id")
|
||||
def _onchange_partner_id(self):
|
||||
"""Select by default the first valid mandate of the partner"""
|
||||
res = super(AccountInvoice, self)._onchange_partner_id()
|
||||
self.set_mandate()
|
||||
return res
|
||||
|
||||
@api.onchange('payment_mode_id')
|
||||
@api.onchange("payment_mode_id")
|
||||
def _onchange_payment_mode_id(self):
|
||||
super(AccountInvoice, self)._onchange_payment_mode_id()
|
||||
self.set_mandate()
|
||||
|
||||
@api.constrains('mandate_id', 'company_id')
|
||||
@api.constrains("mandate_id", "company_id")
|
||||
def _check_company_constrains(self):
|
||||
for inv in self:
|
||||
if inv.mandate_id.company_id and inv.mandate_id.company_id != \
|
||||
inv.company_id:
|
||||
raise ValidationError(_(
|
||||
"The invoice %s has a different company than "
|
||||
"that of the linked mandate %s).") %
|
||||
(inv.name, inv.mandate_id.display_name))
|
||||
if (
|
||||
inv.mandate_id.company_id
|
||||
and inv.mandate_id.company_id != inv.company_id
|
||||
):
|
||||
raise ValidationError(
|
||||
_(
|
||||
"The invoice %s has a different company than "
|
||||
"that of the linked mandate %s)."
|
||||
)
|
||||
% (inv.name, inv.mandate_id.display_name)
|
||||
)
|
||||
|
||||
@@ -3,47 +3,51 @@
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class AccountMoveLine(models.Model):
|
||||
_inherit = 'account.move.line'
|
||||
_inherit = "account.move.line"
|
||||
|
||||
mandate_id = fields.Many2one(
|
||||
'account.banking.mandate', string='Direct Debit Mandate',
|
||||
ondelete='restrict')
|
||||
"account.banking.mandate", string="Direct Debit Mandate", ondelete="restrict"
|
||||
)
|
||||
|
||||
@api.multi
|
||||
def _prepare_payment_line_vals(self, payment_order):
|
||||
vals = super(AccountMoveLine, self)._prepare_payment_line_vals(
|
||||
payment_order)
|
||||
if payment_order.payment_type != 'inbound':
|
||||
vals = super(AccountMoveLine, self)._prepare_payment_line_vals(payment_order)
|
||||
if payment_order.payment_type != "inbound":
|
||||
return vals
|
||||
mandate = self.mandate_id
|
||||
if not mandate and vals.get('mandate_id', False):
|
||||
mandate = mandate.browse(vals['mandate_id'])
|
||||
partner_bank_id = vals.get('partner_bank_id', False)
|
||||
if not mandate and vals.get("mandate_id", False):
|
||||
mandate = mandate.browse(vals["mandate_id"])
|
||||
partner_bank_id = vals.get("partner_bank_id", False)
|
||||
if not mandate:
|
||||
if partner_bank_id:
|
||||
domain = [('partner_bank_id', '=', partner_bank_id)]
|
||||
domain = [("partner_bank_id", "=", partner_bank_id)]
|
||||
else:
|
||||
domain = [('partner_id', '=', self.partner_id.id)]
|
||||
domain.append(('state', '=', 'valid'))
|
||||
domain = [("partner_id", "=", self.partner_id.id)]
|
||||
domain.append(("state", "=", "valid"))
|
||||
mandate = mandate.search(domain, limit=1)
|
||||
vals.update({
|
||||
'mandate_id': mandate.id,
|
||||
'partner_bank_id': mandate.partner_bank_id.id or partner_bank_id,
|
||||
})
|
||||
vals.update(
|
||||
{
|
||||
"mandate_id": mandate.id,
|
||||
"partner_bank_id": mandate.partner_bank_id.id or partner_bank_id,
|
||||
}
|
||||
)
|
||||
return vals
|
||||
|
||||
@api.multi
|
||||
@api.constrains('mandate_id', 'company_id')
|
||||
@api.constrains("mandate_id", "company_id")
|
||||
def _check_company_constrains(self):
|
||||
for ml in self:
|
||||
mandate = ml.mandate_id
|
||||
if mandate.company_id and mandate.company_id != ml.company_id:
|
||||
raise ValidationError(_(
|
||||
"The item %s of journal %s has a different company than "
|
||||
"that of the linked mandate %s).") %
|
||||
(ml.name, ml.move_id.name, ml.mandate_id.display_name))
|
||||
raise ValidationError(
|
||||
_(
|
||||
"The item %s of journal %s has a different company than "
|
||||
"that of the linked mandate %s)."
|
||||
)
|
||||
% (ml.name, ml.move_id.name, ml.mandate_id.display_name)
|
||||
)
|
||||
|
||||
@@ -3,51 +3,64 @@
|
||||
# Copyright 2015-16 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError, UserError
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
|
||||
|
||||
class AccountPaymentLine(models.Model):
|
||||
_inherit = 'account.payment.line'
|
||||
_inherit = "account.payment.line"
|
||||
|
||||
mandate_id = fields.Many2one(
|
||||
comodel_name='account.banking.mandate', string='Direct Debit Mandate',
|
||||
domain=[('state', '=', 'valid')])
|
||||
comodel_name="account.banking.mandate",
|
||||
string="Direct Debit Mandate",
|
||||
domain=[("state", "=", "valid")],
|
||||
)
|
||||
mandate_required = fields.Boolean(
|
||||
related='order_id.payment_method_id.mandate_required', readonly=True)
|
||||
related="order_id.payment_method_id.mandate_required", readonly=True
|
||||
)
|
||||
|
||||
@api.multi
|
||||
@api.constrains('mandate_id', 'partner_bank_id')
|
||||
@api.constrains("mandate_id", "partner_bank_id")
|
||||
def _check_mandate_bank_link(self):
|
||||
for pline in self:
|
||||
if (pline.mandate_id and pline.partner_bank_id and
|
||||
pline.mandate_id.partner_bank_id !=
|
||||
pline.partner_bank_id):
|
||||
raise ValidationError(_(
|
||||
"The payment line number %s has the bank account "
|
||||
"'%s' which is not attached to the mandate '%s' (this "
|
||||
"mandate is attached to the bank account '%s').") %
|
||||
(pline.name,
|
||||
pline.partner_bank_id.acc_number,
|
||||
pline.mandate_id.unique_mandate_reference,
|
||||
pline.mandate_id.partner_bank_id.acc_number))
|
||||
if (
|
||||
pline.mandate_id
|
||||
and pline.partner_bank_id
|
||||
and pline.mandate_id.partner_bank_id != pline.partner_bank_id
|
||||
):
|
||||
raise ValidationError(
|
||||
_(
|
||||
"The payment line number %s has the bank account "
|
||||
"'%s' which is not attached to the mandate '%s' (this "
|
||||
"mandate is attached to the bank account '%s')."
|
||||
)
|
||||
% (
|
||||
pline.name,
|
||||
pline.partner_bank_id.acc_number,
|
||||
pline.mandate_id.unique_mandate_reference,
|
||||
pline.mandate_id.partner_bank_id.acc_number,
|
||||
)
|
||||
)
|
||||
|
||||
@api.multi
|
||||
@api.constrains('mandate_id', 'company_id')
|
||||
@api.constrains("mandate_id", "company_id")
|
||||
def _check_company_constrains(self):
|
||||
for pline in self:
|
||||
if pline.mandate_id.company_id and pline.mandate_id.company_id != \
|
||||
pline.company_id:
|
||||
raise ValidationError(_(
|
||||
"The payment line number %s a different company than "
|
||||
"that of the linked mandate %s).") %
|
||||
(pline.name,
|
||||
pline.mandate_id.display_name))
|
||||
if (
|
||||
pline.mandate_id.company_id
|
||||
and pline.mandate_id.company_id != pline.company_id
|
||||
):
|
||||
raise ValidationError(
|
||||
_(
|
||||
"The payment line number %s a different company than "
|
||||
"that of the linked mandate %s)."
|
||||
)
|
||||
% (pline.name, pline.mandate_id.display_name)
|
||||
)
|
||||
|
||||
@api.multi
|
||||
def draft2open_payment_line_check(self):
|
||||
res = super(AccountPaymentLine, self).draft2open_payment_line_check()
|
||||
if self.mandate_required and not self.mandate_id:
|
||||
raise UserError(_(
|
||||
'Missing Mandate on payment line %s') % self.name)
|
||||
raise UserError(_("Missing Mandate on payment line %s") % self.name)
|
||||
return res
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
# Copyright 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import models, fields
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class AccountPaymentMethod(models.Model):
|
||||
_inherit = "account.payment.method"
|
||||
|
||||
mandate_required = fields.Boolean(
|
||||
string='Mandate Required',
|
||||
string="Mandate Required",
|
||||
help="Activate this option if this payment method requires your "
|
||||
"customer to sign a direct debit mandate with your company.")
|
||||
"customer to sign a direct debit mandate with your company.",
|
||||
)
|
||||
|
||||
@@ -7,15 +7,18 @@ from odoo import api, fields, models
|
||||
|
||||
|
||||
class BankPaymentLine(models.Model):
|
||||
_inherit = 'bank.payment.line'
|
||||
_inherit = "bank.payment.line"
|
||||
|
||||
mandate_id = fields.Many2one(
|
||||
comodel_name='account.banking.mandate', string='Direct Debit Mandate',
|
||||
related='payment_line_ids.mandate_id')
|
||||
comodel_name="account.banking.mandate",
|
||||
string="Direct Debit Mandate",
|
||||
related="payment_line_ids.mandate_id",
|
||||
)
|
||||
|
||||
@api.model
|
||||
def same_fields_payment_line_and_bank_payment_line(self):
|
||||
res = super(BankPaymentLine, self).\
|
||||
same_fields_payment_line_and_bank_payment_line()
|
||||
res.append('mandate_id')
|
||||
res = super(
|
||||
BankPaymentLine, self
|
||||
).same_fields_payment_line_and_bank_payment_line()
|
||||
res.append("mandate_id")
|
||||
return res
|
||||
|
||||
@@ -2,39 +2,43 @@
|
||||
# Copyright 2017 Carlos Dauden <carlos.dauden@tecnativa.com>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import models, fields, api
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class ResPartner(models.Model):
|
||||
_inherit = 'res.partner'
|
||||
_inherit = "res.partner"
|
||||
|
||||
mandate_count = fields.Integer(
|
||||
compute='_compute_mandate_count', string="Number of Mandates",
|
||||
readonly=True)
|
||||
compute="_compute_mandate_count", string="Number of Mandates", readonly=True
|
||||
)
|
||||
valid_mandate_id = fields.Many2one(
|
||||
comodel_name='account.banking.mandate',
|
||||
compute='_compute_valid_mandate_id',
|
||||
string='First Valid Mandate')
|
||||
comodel_name="account.banking.mandate",
|
||||
compute="_compute_valid_mandate_id",
|
||||
string="First Valid Mandate",
|
||||
)
|
||||
|
||||
@api.multi
|
||||
def _compute_mandate_count(self):
|
||||
mandate_data = self.env['account.banking.mandate'].read_group(
|
||||
[('partner_id', 'in', self.ids)], ['partner_id'], ['partner_id'])
|
||||
mapped_data = dict([
|
||||
(mandate['partner_id'][0], mandate['partner_id_count'])
|
||||
for mandate in mandate_data])
|
||||
mandate_data = self.env["account.banking.mandate"].read_group(
|
||||
[("partner_id", "in", self.ids)], ["partner_id"], ["partner_id"]
|
||||
)
|
||||
mapped_data = {
|
||||
mandate["partner_id"][0]: mandate["partner_id_count"]
|
||||
for mandate in mandate_data
|
||||
}
|
||||
for partner in self:
|
||||
partner.mandate_count = mapped_data.get(partner.id, 0)
|
||||
|
||||
@api.multi
|
||||
def _compute_valid_mandate_id(self):
|
||||
# Dict for reducing the duplicated searches on parent/child partners
|
||||
company_id = self.env.context.get('force_company', False)
|
||||
company_id = self.env.context.get("force_company", False)
|
||||
if company_id:
|
||||
company = self.env['res.company'].browse(company_id)
|
||||
company = self.env["res.company"].browse(company_id)
|
||||
else:
|
||||
company = self.env['res.company']._company_default_get(
|
||||
'account.banking.mandate')
|
||||
company = self.env["res.company"]._company_default_get(
|
||||
"account.banking.mandate"
|
||||
)
|
||||
|
||||
mandates_dic = {}
|
||||
for partner in self:
|
||||
@@ -43,8 +47,8 @@ class ResPartner(models.Model):
|
||||
partner.valid_mandate_id = mandates_dic[commercial_partner_id]
|
||||
else:
|
||||
mandates = partner.commercial_partner_id.bank_ids.mapped(
|
||||
'mandate_ids').filtered(
|
||||
lambda x: x.state == 'valid' and x.company_id == company)
|
||||
"mandate_ids"
|
||||
).filtered(lambda x: x.state == "valid" and x.company_id == company)
|
||||
first_valid_mandate_id = mandates[:1].id
|
||||
partner.valid_mandate_id = first_valid_mandate_id
|
||||
mandates_dic[commercial_partner_id] = first_valid_mandate_id
|
||||
|
||||
@@ -2,26 +2,40 @@
|
||||
# Copyright 2014 Tecnativa - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class ResPartnerBank(models.Model):
|
||||
_inherit = 'res.partner.bank'
|
||||
_inherit = "res.partner.bank"
|
||||
|
||||
mandate_ids = fields.One2many(
|
||||
comodel_name='account.banking.mandate', inverse_name='partner_bank_id',
|
||||
string='Direct Debit Mandates',
|
||||
help='Banking mandates represent an authorization that the bank '
|
||||
'account owner gives to a company for a specific operation.')
|
||||
comodel_name="account.banking.mandate",
|
||||
inverse_name="partner_bank_id",
|
||||
string="Direct Debit Mandates",
|
||||
help="Banking mandates represent an authorization that the bank "
|
||||
"account owner gives to a company for a specific operation.",
|
||||
)
|
||||
|
||||
@api.constrains('company_id')
|
||||
@api.constrains("company_id")
|
||||
def _company_constrains(self):
|
||||
for rpb in self:
|
||||
if self.env['account.banking.mandate'].sudo().search(
|
||||
[('partner_bank_id', '=', rpb.id),
|
||||
('company_id', '!=', rpb.company_id.id)], limit=1):
|
||||
if (
|
||||
self.env["account.banking.mandate"]
|
||||
.sudo()
|
||||
.search(
|
||||
[
|
||||
("partner_bank_id", "=", rpb.id),
|
||||
("company_id", "!=", rpb.company_id.id),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
):
|
||||
raise ValidationError(
|
||||
_("You cannot change the company of Partner Bank %s, "
|
||||
"as there exists mandates referencing it that "
|
||||
"belong to another company.") % (rpb.display_name,))
|
||||
_(
|
||||
"You cannot change the company of Partner Bank %s, "
|
||||
"as there exists mandates referencing it that "
|
||||
"belong to another company."
|
||||
)
|
||||
% (rpb.display_name,)
|
||||
)
|
||||
|
||||
@@ -1,21 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2015-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
|
||||
<odoo noupdate="1">
|
||||
|
||||
|
||||
<record id="account_banking_mandate_rule" model="ir.rule">
|
||||
<field name="name">Banking Mandate multi-company</field>
|
||||
<field name="model_id" ref="model_account_banking_mandate"/>
|
||||
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_unlink" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="account_banking_mandate_rule" model="ir.rule">
|
||||
<field name="name">Banking Mandate multi-company</field>
|
||||
<field name="model_id" ref="model_account_banking_mandate" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
|
||||
<field name="perm_read" eval="True" />
|
||||
<field name="perm_write" eval="False" />
|
||||
<field name="perm_unlink" eval="True" />
|
||||
<field name="perm_create" eval="True" />
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
|
||||
from . import test_mandate
|
||||
from . import test_invoice_mandate
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
|
||||
# Copyright 2017 Creu Blanca
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo.tests.common import TransactionCase
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestInvoiceMandate(TransactionCase):
|
||||
|
||||
def test_post_invoice_01(self):
|
||||
self.invoice._onchange_partner_id()
|
||||
|
||||
@@ -16,16 +14,16 @@ class TestInvoiceMandate(TransactionCase):
|
||||
self.invoice.action_invoice_open()
|
||||
|
||||
payable_move_lines = self.invoice.move_id.line_ids.filtered(
|
||||
lambda s: s.account_id == self.invoice_account)
|
||||
lambda s: s.account_id == self.invoice_account
|
||||
)
|
||||
if payable_move_lines:
|
||||
self.assertEqual(payable_move_lines[0].mandate_id, self.mandate)
|
||||
|
||||
self.env['account.invoice.payment.line.multi'].with_context(
|
||||
active_model='account.invoice',
|
||||
active_ids=self.invoice.ids
|
||||
self.env["account.invoice.payment.line.multi"].with_context(
|
||||
active_model="account.invoice", active_ids=self.invoice.ids
|
||||
).create({}).run()
|
||||
|
||||
payment_order = self.env['account.payment.order'].search([])
|
||||
payment_order = self.env["account.payment.order"].search([])
|
||||
self.assertEqual(len(payment_order.ids), 1)
|
||||
payment_order.payment_mode_id_change()
|
||||
payment_order.draft2open()
|
||||
@@ -34,20 +32,24 @@ class TestInvoiceMandate(TransactionCase):
|
||||
self.assertEqual(self.mandate.payment_line_ids_count, 1)
|
||||
|
||||
def test_post_invoice_02(self):
|
||||
partner_2 = self._create_res_partner('Jane with ACME Bank')
|
||||
partner_2 = self._create_res_partner("Jane with ACME Bank")
|
||||
partner_2.customer_payment_mode_id = self.mode_inbound_acme
|
||||
bank_account = self.env['res.partner.bank'].create({
|
||||
'acc_number': '0023032234211',
|
||||
'partner_id': partner_2.id,
|
||||
'bank_id': self.acme_bank.id,
|
||||
'company_id': self.company_2.id
|
||||
})
|
||||
bank_account = self.env["res.partner.bank"].create(
|
||||
{
|
||||
"acc_number": "0023032234211",
|
||||
"partner_id": partner_2.id,
|
||||
"bank_id": self.acme_bank.id,
|
||||
"company_id": self.company_2.id,
|
||||
}
|
||||
)
|
||||
|
||||
mandate_2 = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company_2.id,
|
||||
})
|
||||
mandate_2 = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company_2.id,
|
||||
}
|
||||
)
|
||||
mandate_2.validate()
|
||||
|
||||
self.invoice._onchange_partner_id()
|
||||
@@ -55,7 +57,8 @@ class TestInvoiceMandate(TransactionCase):
|
||||
self.invoice.action_invoice_open()
|
||||
|
||||
payable_move_lines = self.invoice.move_id.line_ids.filtered(
|
||||
lambda s: s.account_id == self.invoice_account)
|
||||
lambda s: s.account_id == self.invoice_account
|
||||
)
|
||||
if payable_move_lines:
|
||||
with self.assertRaises(ValidationError):
|
||||
payable_move_lines[0].mandate_id = mandate_2
|
||||
@@ -67,167 +70,205 @@ class TestInvoiceMandate(TransactionCase):
|
||||
self.invoice.refund()
|
||||
|
||||
def test_onchange_partner(self):
|
||||
partner_2 = self._create_res_partner('Jane with ACME Bank')
|
||||
partner_2 = self._create_res_partner("Jane with ACME Bank")
|
||||
partner_2.customer_payment_mode_id = self.mode_inbound_acme
|
||||
bank_account = self.env['res.partner.bank'].create({
|
||||
'acc_number': '0023032234211',
|
||||
'partner_id': partner_2.id,
|
||||
'bank_id': self.acme_bank.id,
|
||||
'company_id': self.company.id
|
||||
})
|
||||
bank_account = self.env["res.partner.bank"].create(
|
||||
{
|
||||
"acc_number": "0023032234211",
|
||||
"partner_id": partner_2.id,
|
||||
"bank_id": self.acme_bank.id,
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
|
||||
mandate_2 = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
mandate_2 = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
mandate_2.validate()
|
||||
|
||||
invoice = self.env['account.invoice'].new({
|
||||
'partner_id': self.partner.id,
|
||||
'account_id': self.invoice_account.id,
|
||||
'type': 'out_invoice',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
invoice = self.env["account.invoice"].new(
|
||||
{
|
||||
"partner_id": self.partner.id,
|
||||
"account_id": self.invoice_account.id,
|
||||
"type": "out_invoice",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
|
||||
invoice.partner_id = partner_2
|
||||
invoice._onchange_partner_id()
|
||||
self.assertEqual(invoice.mandate_id, mandate_2)
|
||||
|
||||
def test_onchange_payment_mode(self):
|
||||
invoice = self.env['account.invoice'].new({
|
||||
'partner_id': self.partner.id,
|
||||
'account_id': self.invoice_account.id,
|
||||
'type': 'out_invoice',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
invoice = self.env["account.invoice"].new(
|
||||
{
|
||||
"partner_id": self.partner.id,
|
||||
"account_id": self.invoice_account.id,
|
||||
"type": "out_invoice",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
invoice._onchange_partner_id()
|
||||
|
||||
pay_method_test = self.env['account.payment.method'].create({
|
||||
'name': 'Test',
|
||||
'code': 'test',
|
||||
'payment_type': 'inbound',
|
||||
'mandate_required': False
|
||||
})
|
||||
mode_inbound_acme_2 = self.env['account.payment.mode'].create({
|
||||
'name': 'Inbound Credit ACME Bank 2',
|
||||
'company_id': self.company.id,
|
||||
'bank_account_link': 'variable',
|
||||
'payment_method_id': pay_method_test.id,
|
||||
})
|
||||
pay_method_test = self.env["account.payment.method"].create(
|
||||
{
|
||||
"name": "Test",
|
||||
"code": "test",
|
||||
"payment_type": "inbound",
|
||||
"mandate_required": False,
|
||||
}
|
||||
)
|
||||
mode_inbound_acme_2 = self.env["account.payment.mode"].create(
|
||||
{
|
||||
"name": "Inbound Credit ACME Bank 2",
|
||||
"company_id": self.company.id,
|
||||
"bank_account_link": "variable",
|
||||
"payment_method_id": pay_method_test.id,
|
||||
}
|
||||
)
|
||||
|
||||
invoice.payment_mode_id = mode_inbound_acme_2
|
||||
invoice._onchange_payment_mode_id()
|
||||
self.assertEqual(invoice.mandate_id, self.env[
|
||||
'account.banking.mandate'])
|
||||
self.assertEqual(invoice.mandate_id, self.env["account.banking.mandate"])
|
||||
|
||||
def test_invoice_constrains(self):
|
||||
partner_2 = self._create_res_partner('Jane with ACME Bank')
|
||||
partner_2 = self._create_res_partner("Jane with ACME Bank")
|
||||
partner_2.customer_payment_mode_id = self.mode_inbound_acme
|
||||
bank_account = self.env['res.partner.bank'].create({
|
||||
'acc_number': '0023032234211',
|
||||
'partner_id': partner_2.id,
|
||||
'bank_id': self.acme_bank.id,
|
||||
'company_id': self.company_2.id
|
||||
})
|
||||
bank_account = self.env["res.partner.bank"].create(
|
||||
{
|
||||
"acc_number": "0023032234211",
|
||||
"partner_id": partner_2.id,
|
||||
"bank_id": self.acme_bank.id,
|
||||
"company_id": self.company_2.id,
|
||||
}
|
||||
)
|
||||
|
||||
mandate_2 = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company_2.id,
|
||||
})
|
||||
mandate_2 = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company_2.id,
|
||||
}
|
||||
)
|
||||
mandate_2.validate()
|
||||
|
||||
invoice = self.env['account.invoice'].create({
|
||||
'partner_id': self.partner.id,
|
||||
'account_id': self.invoice_account.id,
|
||||
'type': 'out_invoice',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
invoice = self.env["account.invoice"].create(
|
||||
{
|
||||
"partner_id": self.partner.id,
|
||||
"account_id": self.invoice_account.id,
|
||||
"type": "out_invoice",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
|
||||
with self.assertRaises(ValidationError):
|
||||
invoice.mandate_id = mandate_2
|
||||
|
||||
def _create_res_partner(self, name):
|
||||
return self.env['res.partner'].create({
|
||||
'name': name
|
||||
})
|
||||
return self.env["res.partner"].create({"name": name})
|
||||
|
||||
def _create_res_bank(self, name, bic, city, country):
|
||||
return self.env['res.bank'].create({
|
||||
'name': name,
|
||||
'bic': bic,
|
||||
'city': city,
|
||||
'country': country.id,
|
||||
})
|
||||
return self.env["res.bank"].create(
|
||||
{"name": name, "bic": bic, "city": city, "country": country.id}
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
res = super(TestInvoiceMandate, self).setUp()
|
||||
self.company = self.env.ref('base.main_company')
|
||||
self.company = self.env.ref("base.main_company")
|
||||
|
||||
self.partner = self._create_res_partner('Peter with ACME Bank')
|
||||
self.acme_bank = self._create_res_bank('ACME Bank', 'GEBABEBB03B',
|
||||
'Charleroi',
|
||||
self.env.ref('base.be'))
|
||||
self.partner = self._create_res_partner("Peter with ACME Bank")
|
||||
self.acme_bank = self._create_res_bank(
|
||||
"ACME Bank", "GEBABEBB03B", "Charleroi", self.env.ref("base.be")
|
||||
)
|
||||
|
||||
bank_account = self.env['res.partner.bank'].create({
|
||||
'acc_number': '0023032234211123',
|
||||
'partner_id': self.partner.id,
|
||||
'bank_id': self.acme_bank.id,
|
||||
'company_id': self.company.id
|
||||
})
|
||||
bank_account = self.env["res.partner.bank"].create(
|
||||
{
|
||||
"acc_number": "0023032234211123",
|
||||
"partner_id": self.partner.id,
|
||||
"bank_id": self.acme_bank.id,
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
|
||||
self.company_2 = self.env['res.company'].create({
|
||||
'name': 'Company 2',
|
||||
})
|
||||
self.company_2 = self.env["res.company"].create({"name": "Company 2"})
|
||||
|
||||
self.mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
self.mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
|
||||
self.mandate.validate()
|
||||
|
||||
self.mode_inbound_acme = self.env['account.payment.mode'].create({
|
||||
'name': 'Inbound Credit ACME Bank',
|
||||
'company_id': self.company.id,
|
||||
'bank_account_link': 'variable',
|
||||
'payment_method_id':
|
||||
self.env.ref('account.account_payment_method_manual_in').id,
|
||||
})
|
||||
bank_journal = self.env['account.journal'].search(
|
||||
[('type', '=', 'bank')], limit=1)
|
||||
self.mode_inbound_acme = self.env["account.payment.mode"].create(
|
||||
{
|
||||
"name": "Inbound Credit ACME Bank",
|
||||
"company_id": self.company.id,
|
||||
"bank_account_link": "variable",
|
||||
"payment_method_id": self.env.ref(
|
||||
"account.account_payment_method_manual_in"
|
||||
).id,
|
||||
}
|
||||
)
|
||||
bank_journal = self.env["account.journal"].search(
|
||||
[("type", "=", "bank")], limit=1
|
||||
)
|
||||
self.mode_inbound_acme.variable_journal_ids = bank_journal
|
||||
self.mode_inbound_acme.payment_method_id.mandate_required = True
|
||||
self.mode_inbound_acme.payment_order_ok = True
|
||||
|
||||
self.partner.customer_payment_mode_id = self.mode_inbound_acme
|
||||
|
||||
self.invoice_account = self.env['account.account'].search(
|
||||
[('user_type_id', '=', self.env.ref(
|
||||
'account.data_account_type_receivable').id),
|
||||
('company_id', '=', self.company.id)],
|
||||
limit=1)
|
||||
invoice_line_account = self.env['account.account'].search(
|
||||
[('user_type_id', '=', self.env.ref(
|
||||
'account.data_account_type_expenses').id),
|
||||
('company_id', '=', self.company.id)],
|
||||
limit=1).id
|
||||
self.invoice_account = self.env["account.account"].search(
|
||||
[
|
||||
(
|
||||
"user_type_id",
|
||||
"=",
|
||||
self.env.ref("account.data_account_type_receivable").id,
|
||||
),
|
||||
("company_id", "=", self.company.id),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
invoice_line_account = (
|
||||
self.env["account.account"]
|
||||
.search(
|
||||
[
|
||||
(
|
||||
"user_type_id",
|
||||
"=",
|
||||
self.env.ref("account.data_account_type_expenses").id,
|
||||
),
|
||||
("company_id", "=", self.company.id),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
.id
|
||||
)
|
||||
|
||||
self.invoice = self.env['account.invoice'].create({
|
||||
'partner_id': self.partner.id,
|
||||
'account_id': self.invoice_account.id,
|
||||
'type': 'out_invoice',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
self.invoice = self.env["account.invoice"].create(
|
||||
{
|
||||
"partner_id": self.partner.id,
|
||||
"account_id": self.invoice_account.id,
|
||||
"type": "out_invoice",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
|
||||
self.env['account.invoice.line'].create({
|
||||
'product_id': self.env.ref('product.product_product_4').id,
|
||||
'quantity': 1.0,
|
||||
'price_unit': 100.0,
|
||||
'invoice_id': self.invoice.id,
|
||||
'name': 'product that cost 100',
|
||||
'account_id': invoice_line_account,
|
||||
})
|
||||
self.env["account.invoice.line"].create(
|
||||
{
|
||||
"product_id": self.env.ref("product.product_product_4").id,
|
||||
"quantity": 1.0,
|
||||
"price_unit": 100.0,
|
||||
"invoice_id": self.invoice.id,
|
||||
"name": "product that cost 100",
|
||||
"account_id": invoice_line_account,
|
||||
}
|
||||
)
|
||||
return res
|
||||
|
||||
@@ -1,127 +1,144 @@
|
||||
# © 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo.tests.common import TransactionCase
|
||||
from datetime import timedelta
|
||||
|
||||
from odoo import fields
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
from datetime import timedelta
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestMandate(TransactionCase):
|
||||
|
||||
def test_mandate_01(self):
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
self.assertEqual(mandate.state, 'draft')
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
self.assertEqual(mandate.state, "draft")
|
||||
mandate.validate()
|
||||
self.assertEqual(mandate.state, 'valid')
|
||||
self.assertEqual(mandate.state, "valid")
|
||||
mandate.cancel()
|
||||
self.assertEqual(mandate.state, 'cancel')
|
||||
self.assertEqual(mandate.state, "cancel")
|
||||
mandate.back2draft()
|
||||
self.assertEqual(mandate.state, 'draft')
|
||||
self.assertEqual(mandate.state, "draft")
|
||||
|
||||
def test_mandate_02(self):
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
with self.assertRaises(UserError):
|
||||
mandate.back2draft()
|
||||
|
||||
def test_mandate_03(self):
|
||||
bank_account = self.env.ref(
|
||||
'account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
mandate.validate()
|
||||
|
||||
with self.assertRaises(UserError):
|
||||
mandate.validate()
|
||||
|
||||
def test_mandate_04(self):
|
||||
bank_account = self.env.ref(
|
||||
'account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
mandate.validate()
|
||||
mandate.cancel()
|
||||
with self.assertRaises(UserError):
|
||||
mandate.cancel()
|
||||
|
||||
def test_onchange_methods(self):
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].new({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
bank_account_2 = self.env.ref(
|
||||
'account_payment_mode.res_partner_2_iban')
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].new(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
bank_account_2 = self.env.ref("account_payment_mode.res_partner_2_iban")
|
||||
mandate.partner_bank_id = bank_account_2
|
||||
mandate.mandate_partner_bank_change()
|
||||
self.assertEquals(mandate.partner_id, bank_account_2.partner_id)
|
||||
|
||||
def test_constrains_01(self):
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
mandate.validate()
|
||||
with self.assertRaises(ValidationError):
|
||||
mandate.signature_date = fields.Date.to_string(
|
||||
fields.Date.from_string(
|
||||
fields.Date.context_today(mandate)) + timedelta(days=1))
|
||||
fields.Date.from_string(fields.Date.context_today(mandate))
|
||||
+ timedelta(days=1)
|
||||
)
|
||||
|
||||
def test_constrains_02(self):
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
|
||||
with self.assertRaises(ValidationError):
|
||||
mandate.company_id = self.company_2
|
||||
|
||||
def test_constrains_03(self):
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
bank_account_2 = self.env['res.partner.bank'].create({
|
||||
'acc_number': '1234',
|
||||
'company_id': self.company_2.id,
|
||||
'partner_id': self.company_2.partner_id.id,
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
bank_account_2 = self.env["res.partner.bank"].create(
|
||||
{
|
||||
"acc_number": "1234",
|
||||
"company_id": self.company_2.id,
|
||||
"partner_id": self.company_2.partner_id.id,
|
||||
}
|
||||
)
|
||||
with self.assertRaises(ValidationError):
|
||||
mandate.partner_bank_id = bank_account_2
|
||||
|
||||
def test_constrains_04(self):
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
bank_account = self.env['res.partner.bank'].create({
|
||||
'acc_number': '1234',
|
||||
'company_id': self.company_2.id,
|
||||
'partner_id': self.company_2.partner_id.id,
|
||||
})
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{"signature_date": "2015-01-01", "company_id": self.company.id}
|
||||
)
|
||||
bank_account = self.env["res.partner.bank"].create(
|
||||
{
|
||||
"acc_number": "1234",
|
||||
"company_id": self.company_2.id,
|
||||
"partner_id": self.company_2.partner_id.id,
|
||||
}
|
||||
)
|
||||
with self.assertRaises(ValidationError):
|
||||
bank_account.mandate_ids += mandate
|
||||
|
||||
@@ -130,12 +147,14 @@ class TestMandate(TransactionCase):
|
||||
Test case: create a mandate with no reference
|
||||
Expected result: the reference of the created mandate is not empty
|
||||
"""
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
}
|
||||
)
|
||||
self.assertTrue(mandate.unique_mandate_reference)
|
||||
|
||||
def test_mandate_reference_02(self):
|
||||
@@ -143,13 +162,15 @@ class TestMandate(TransactionCase):
|
||||
Test case: create a mandate with "ref01" as reference
|
||||
Expected result: the reference of the created mandate is "ref01"
|
||||
"""
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
'unique_mandate_reference': "ref01",
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
"unique_mandate_reference": "ref01",
|
||||
}
|
||||
)
|
||||
self.assertEqual(mandate.unique_mandate_reference, "ref01")
|
||||
|
||||
def test_mandate_reference_03(self):
|
||||
@@ -158,13 +179,15 @@ class TestMandate(TransactionCase):
|
||||
Expected result: the reference of the created mandate is not empty and
|
||||
is not "New"
|
||||
"""
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
'unique_mandate_reference': "New",
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
"unique_mandate_reference": "New",
|
||||
}
|
||||
)
|
||||
self.assertTrue(mandate.unique_mandate_reference)
|
||||
self.assertNotEqual(mandate.unique_mandate_reference, "New")
|
||||
|
||||
@@ -173,13 +196,15 @@ class TestMandate(TransactionCase):
|
||||
Test case: create a mandate with False as reference
|
||||
Expected result: the reference of the created mandate is not empty
|
||||
"""
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
'unique_mandate_reference': False,
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
"unique_mandate_reference": False,
|
||||
}
|
||||
)
|
||||
self.assertTrue(mandate.unique_mandate_reference)
|
||||
|
||||
def test_mandate_reference_06(self):
|
||||
@@ -187,22 +212,22 @@ class TestMandate(TransactionCase):
|
||||
Test case: create a mandate with a empty string as reference
|
||||
Expected result: the reference of the created mandate is not empty
|
||||
"""
|
||||
bank_account = self.env.ref('account_payment_mode.res_partner_12_iban')
|
||||
mandate = self.env['account.banking.mandate'].create({
|
||||
'partner_bank_id': bank_account.id,
|
||||
'signature_date': '2015-01-01',
|
||||
'company_id': self.company.id,
|
||||
'unique_mandate_reference': '',
|
||||
})
|
||||
bank_account = self.env.ref("account_payment_mode.res_partner_12_iban")
|
||||
mandate = self.env["account.banking.mandate"].create(
|
||||
{
|
||||
"partner_bank_id": bank_account.id,
|
||||
"signature_date": "2015-01-01",
|
||||
"company_id": self.company.id,
|
||||
"unique_mandate_reference": "",
|
||||
}
|
||||
)
|
||||
self.assertTrue(mandate.unique_mandate_reference)
|
||||
|
||||
def setUp(self):
|
||||
res = super(TestMandate, self).setUp()
|
||||
# Company
|
||||
self.company = self.env.ref('base.main_company')
|
||||
self.company = self.env.ref("base.main_company")
|
||||
|
||||
# Company 2
|
||||
self.company_2 = self.env['res.company'].create({
|
||||
'name': 'Company 2',
|
||||
})
|
||||
self.company_2 = self.env["res.company"].create({"name": "Company 2"})
|
||||
return res
|
||||
|
||||
@@ -1,149 +1,211 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2013-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
|
||||
<record id="view_mandate_form" model="ir.ui.view">
|
||||
<field name="name">view.mandate.form</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Banking Mandate">
|
||||
<header>
|
||||
<button name="validate" type="object" string="Validate" states="draft" class="oe_highlight"
|
||||
invisible="context.get('mandate_bank_partner_view')"/>
|
||||
<button name="cancel" type="object" string="Cancel" states="draft,valid"
|
||||
invisible="context.get('mandate_bank_partner_view')"/>
|
||||
<button name="back2draft" type="object" string="Back to Draft"
|
||||
states="cancel" groups="account.group_account_manager"
|
||||
confirm="You should set a mandate back to draft only if you cancelled it by mistake. Do you want to continue?"
|
||||
invisible="context.get('mandate_bank_partner_view')"/>
|
||||
<field name="state" widget="statusbar"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box"/>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="unique_mandate_reference"
|
||||
class="oe_inline"
|
||||
readonly="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group name="main">
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="format" string="Format"/>
|
||||
<field name="type" string="Type"/>
|
||||
<field name="partner_bank_id"
|
||||
options="{'create_name_field': 'acc_number'}"
|
||||
invisible="context.get('mandate_bank_partner_view')" />
|
||||
<field name="partner_id"
|
||||
<record id="view_mandate_form" model="ir.ui.view">
|
||||
<field name="name">view.mandate.form</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Banking Mandate">
|
||||
<header>
|
||||
<button
|
||||
name="validate"
|
||||
type="object"
|
||||
string="Validate"
|
||||
states="draft"
|
||||
class="oe_highlight"
|
||||
invisible="context.get('mandate_bank_partner_view')"
|
||||
readonly="True"/>
|
||||
<field name="signature_date"/>
|
||||
<field name="scan"/>
|
||||
<field name="last_debit_date"/>
|
||||
</group>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="views_mandate_form_buttons" model="ir.ui.view">
|
||||
<field name="name">view.mandate.form.buttons</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="inherit_id" ref="account_banking_mandate.view_mandate_form"/>
|
||||
<field name="groups_id" eval="[(6, 0, [ref('account_payment_order.group_account_payment')])]"/>
|
||||
<field name="arch" type="xml">
|
||||
<div name="button_box" position="inside">
|
||||
<button name="show_payment_lines"
|
||||
/>
|
||||
<button
|
||||
name="cancel"
|
||||
type="object"
|
||||
string="Cancel"
|
||||
states="draft,valid"
|
||||
invisible="context.get('mandate_bank_partner_view')"
|
||||
/>
|
||||
<button
|
||||
name="back2draft"
|
||||
type="object"
|
||||
string="Back to Draft"
|
||||
states="cancel"
|
||||
groups="account.group_account_manager"
|
||||
confirm="You should set a mandate back to draft only if you cancelled it by mistake. Do you want to continue?"
|
||||
invisible="context.get('mandate_bank_partner_view')"
|
||||
/>
|
||||
<field name="state" widget="statusbar" />
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box" />
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field
|
||||
name="unique_mandate_reference"
|
||||
class="oe_inline"
|
||||
readonly="1"
|
||||
/>
|
||||
</h1>
|
||||
</div>
|
||||
<group name="main">
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="format" string="Format" />
|
||||
<field name="type" string="Type" />
|
||||
<field
|
||||
name="partner_bank_id"
|
||||
options="{'create_name_field': 'acc_number'}"
|
||||
invisible="context.get('mandate_bank_partner_view')"
|
||||
/>
|
||||
<field
|
||||
name="partner_id"
|
||||
invisible="context.get('mandate_bank_partner_view')"
|
||||
readonly="True"
|
||||
/>
|
||||
<field name="signature_date" />
|
||||
<field name="scan" />
|
||||
<field name="last_debit_date" />
|
||||
</group>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers" />
|
||||
<field name="message_ids" widget="mail_thread" />
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="views_mandate_form_buttons" model="ir.ui.view">
|
||||
<field name="name">view.mandate.form.buttons</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="inherit_id" ref="account_banking_mandate.view_mandate_form" />
|
||||
<field
|
||||
name="groups_id"
|
||||
eval="[(6, 0, [ref('account_payment_order.group_account_payment')])]"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<div name="button_box" position="inside">
|
||||
<button
|
||||
name="show_payment_lines"
|
||||
help="Payment lines"
|
||||
class="oe_stat_button"
|
||||
icon="fa-list"
|
||||
type="object">
|
||||
<field name="payment_line_ids_count"
|
||||
widget="statinfo"
|
||||
string="Payment lines"/>
|
||||
</button>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_mandate_tree" model="ir.ui.view">
|
||||
<field name="name">view.mandate.tree</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Banking Mandate" colors="blue:state=='draft';black:state in ('expired', 'cancel')">
|
||||
<field name="id" invisible="1"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="partner_id" invisible="context.get('mandate_bank_partner_view')"/>
|
||||
<field name="format" string="Format"/>
|
||||
<field name="unique_mandate_reference" string="Reference"/>
|
||||
<field name="signature_date" string="Signature Date"/>
|
||||
<field name="last_debit_date"/>
|
||||
<button name="validate"
|
||||
type="object"
|
||||
>
|
||||
<field
|
||||
name="payment_line_ids_count"
|
||||
widget="statinfo"
|
||||
string="Payment lines"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_mandate_tree" model="ir.ui.view">
|
||||
<field name="name">view.mandate.tree</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree
|
||||
string="Banking Mandate"
|
||||
colors="blue:state=='draft';black:state in ('expired', 'cancel')"
|
||||
>
|
||||
<field name="id" invisible="1" />
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field
|
||||
name="partner_id"
|
||||
invisible="context.get('mandate_bank_partner_view')"
|
||||
/>
|
||||
<field name="format" string="Format" />
|
||||
<field name="unique_mandate_reference" string="Reference" />
|
||||
<field name="signature_date" string="Signature Date" />
|
||||
<field name="last_debit_date" />
|
||||
<button
|
||||
name="validate"
|
||||
type="object"
|
||||
icon="fa-check"
|
||||
string="Validate"
|
||||
attrs="{'invisible': ['|', ('id', '=', False), ('state', '!=', 'draft')]}"/>
|
||||
<button name="cancel"
|
||||
attrs="{'invisible': ['|', ('id', '=', False), ('state', '!=', 'draft')]}"
|
||||
/>
|
||||
<button
|
||||
name="cancel"
|
||||
type="object"
|
||||
icon="fa-times"
|
||||
string="Cancel"
|
||||
attrs="{'invisible': ['|', ('id', '=', False), ('state', '=', 'cancel')]}"/>
|
||||
<button name="back2draft"
|
||||
attrs="{'invisible': ['|', ('id', '=', False), ('state', '=', 'cancel')]}"
|
||||
/>
|
||||
<button
|
||||
name="back2draft"
|
||||
type="object"
|
||||
icon="fa-undo"
|
||||
string="Draft"
|
||||
groups="account.group_account_manager"
|
||||
attrs="{'invisible': ['|', ('id', '=', False), ('state', '!=', 'cancel')]}"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_mandate_search" model="ir.ui.view">
|
||||
<field name="name">view.mandate.search</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Banking Mandates">
|
||||
<field name="unique_mandate_reference" string="Reference or Partner" filter_domain="['|', ('unique_mandate_reference', 'ilike', self), ('partner_id', 'ilike', self)]"/>
|
||||
<field name="partner_id"/>
|
||||
<filter name="draft" string="Draft" domain="[('state', '=', 'draft')]" />
|
||||
<filter name="valid" string="Valid" domain="[('state', '=', 'valid')]" />
|
||||
<filter name="cancel" string="Cancelled" domain="[('state', '=', 'cancel')]" />
|
||||
<filter name="expired" string="Expired" domain="[('state', '=', 'expired')]" />
|
||||
<group string="Group By" name="groupby">
|
||||
<filter name="state_groupby" string="State" context="{'group_by': 'state'}"/>
|
||||
<filter name="signature_date_groupby" string="Signature Date" context="{'group_by': 'signature_date'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mandate_action" model="ir.actions.act_window">
|
||||
<field name="name">Banking Mandates</field>
|
||||
<field name="res_model">account.banking.mandate</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
attrs="{'invisible': ['|', ('id', '=', False), ('state', '!=', 'cancel')]}"
|
||||
/>
|
||||
<field name="state" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_mandate_search" model="ir.ui.view">
|
||||
<field name="name">view.mandate.search</field>
|
||||
<field name="model">account.banking.mandate</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Banking Mandates">
|
||||
<field
|
||||
name="unique_mandate_reference"
|
||||
string="Reference or Partner"
|
||||
filter_domain="['|', ('unique_mandate_reference', 'ilike', self), ('partner_id', 'ilike', self)]"
|
||||
/>
|
||||
<field name="partner_id" />
|
||||
<filter
|
||||
name="draft"
|
||||
string="Draft"
|
||||
domain="[('state', '=', 'draft')]"
|
||||
/>
|
||||
<filter
|
||||
name="valid"
|
||||
string="Valid"
|
||||
domain="[('state', '=', 'valid')]"
|
||||
/>
|
||||
<filter
|
||||
name="cancel"
|
||||
string="Cancelled"
|
||||
domain="[('state', '=', 'cancel')]"
|
||||
/>
|
||||
<filter
|
||||
name="expired"
|
||||
string="Expired"
|
||||
domain="[('state', '=', 'expired')]"
|
||||
/>
|
||||
<group string="Group By" name="groupby">
|
||||
<filter
|
||||
name="state_groupby"
|
||||
string="State"
|
||||
context="{'group_by': 'state'}"
|
||||
/>
|
||||
<filter
|
||||
name="signature_date_groupby"
|
||||
string="Signature Date"
|
||||
context="{'group_by': 'signature_date'}"
|
||||
/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="mandate_action" model="ir.actions.act_window">
|
||||
<field name="name">Banking Mandates</field>
|
||||
<field name="res_model">account.banking.mandate</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new Banking Mandate.
|
||||
</p><p>
|
||||
</p>
|
||||
<p>
|
||||
A Banking Mandate is a document signed by your customer that gives you the autorization to do one or several operations on his bank account.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="mandate_menu"
|
||||
parent="account_payment_order.payment_root"
|
||||
action="mandate_action"
|
||||
sequence="30"
|
||||
</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="mandate_menu"
|
||||
parent="account_payment_order.payment_root"
|
||||
action="mandate_action"
|
||||
sequence="30"
|
||||
/>
|
||||
|
||||
|
||||
</odoo>
|
||||
|
||||
@@ -1,24 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2013-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
|
||||
<record id="invoice_form" model="ir.ui.view">
|
||||
<field name="name">add.mandate.on.customer.invoice.form</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="inherit_id" ref="account_payment_partner.invoice_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field name="mandate_id"
|
||||
domain="[('partner_id', '=', commercial_partner_id), ('state', '=', 'valid')]"
|
||||
attrs="{'required': [('mandate_required', '=', True)], 'invisible': [('mandate_required', '=', False)]}"/>
|
||||
<field name="mandate_required" invisible="1"/>
|
||||
<record id="invoice_form" model="ir.ui.view">
|
||||
<field name="name">add.mandate.on.customer.invoice.form</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="inherit_id" ref="account_payment_partner.invoice_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field
|
||||
name="mandate_id"
|
||||
domain="[('partner_id', '=', commercial_partner_id), ('state', '=', 'valid')]"
|
||||
attrs="{'required': [('mandate_required', '=', True)], 'invisible': [('mandate_required', '=', False)]}"
|
||||
/>
|
||||
<field name="mandate_required" invisible="1" />
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,23 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
|
||||
<odoo>
|
||||
|
||||
|
||||
<record id="view_move_line_form" model="ir.ui.view">
|
||||
<field name="name">account_banking_mandate.move_line_form</field>
|
||||
<field name="model">account.move.line</field>
|
||||
<field name="inherit_id" ref="account_payment_order.view_move_line_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field name="mandate_id"
|
||||
domain="[('partner_id', '=', partner_id), ('state', '=', 'valid')]"/>
|
||||
<record id="view_move_line_form" model="ir.ui.view">
|
||||
<field name="name">account_banking_mandate.move_line_form</field>
|
||||
<field name="model">account.move.line</field>
|
||||
<field name="inherit_id" ref="account_payment_order.view_move_line_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field
|
||||
name="mandate_id"
|
||||
domain="[('partner_id', '=', partner_id), ('state', '=', 'valid')]"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,37 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2013-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
|
||||
<record id="account_payment_line_form" model="ir.ui.view">
|
||||
<field name="name">account_banking_mandate.account.payment.line.form</field>
|
||||
<field name="model">account.payment.line</field>
|
||||
<field name="inherit_id" ref="account_payment_order.account_payment_line_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field name="mandate_required" invisible="1"/>
|
||||
<field name="mandate_id"
|
||||
domain="[('partner_bank_id', '=', partner_bank_id), ('state', '=', 'valid')]"
|
||||
attrs="{'invisible': [('mandate_required', '=', False)], 'required': [('mandate_required', '=', True)]}"
|
||||
context="{'default_partner_bank_id': partner_bank_id}"/>
|
||||
<record id="account_payment_line_form" model="ir.ui.view">
|
||||
<field name="name">account_banking_mandate.account.payment.line.form</field>
|
||||
<field name="model">account.payment.line</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_order.account_payment_line_form"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field name="mandate_required" invisible="1" />
|
||||
<field
|
||||
name="mandate_id"
|
||||
domain="[('partner_bank_id', '=', partner_bank_id), ('state', '=', 'valid')]"
|
||||
attrs="{'invisible': [('mandate_required', '=', False)], 'required': [('mandate_required', '=', True)]}"
|
||||
context="{'default_partner_bank_id': partner_bank_id}"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_payment_line_tree" model="ir.ui.view">
|
||||
<field name="name">account_banking_mandate.account.payment.line.tree</field>
|
||||
<field name="model">account.payment.line</field>
|
||||
<field name="inherit_id" ref="account_payment_order.account_payment_line_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field name="mandate_id"
|
||||
invisible="context.get('default_payment_type') != 'inbound'"/>
|
||||
</record>
|
||||
<record id="account_payment_line_tree" model="ir.ui.view">
|
||||
<field name="name">account_banking_mandate.account.payment.line.tree</field>
|
||||
<field name="model">account.payment.line</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_order.account_payment_line_tree"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field
|
||||
name="mandate_id"
|
||||
invisible="context.get('default_payment_type') != 'inbound'"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
|
||||
<record id="account_payment_method_form" model="ir.ui.view">
|
||||
<field name="name">account_banking_mandate.account.payment.method.form</field>
|
||||
<field name="model">account.payment.method</field>
|
||||
<field name="inherit_id" ref="account_payment_mode.account_payment_method_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="bank_account_required" position="after">
|
||||
<field name="mandate_required"
|
||||
attrs="{'invisible': [('payment_type', '!=', 'inbound')]}"/>
|
||||
<record id="account_payment_method_form" model="ir.ui.view">
|
||||
<field name="name">account_banking_mandate.account.payment.method.form</field>
|
||||
<field name="model">account.payment.method</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_mode.account_payment_method_form"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="bank_account_required" position="after">
|
||||
<field
|
||||
name="mandate_required"
|
||||
attrs="{'invisible': [('payment_type', '!=', 'inbound')]}"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2015-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
|
||||
<record id="bank_payment_line_form" model="ir.ui.view">
|
||||
<field name="name">banking.mandate.bank.payment.line.form</field>
|
||||
<field name="model">bank.payment.line</field>
|
||||
<field name="inherit_id" ref="account_payment_order.bank_payment_line_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field name="mandate_id"
|
||||
invisible="context.get('default_payment_type')!='inbound'"/>
|
||||
<record id="bank_payment_line_form" model="ir.ui.view">
|
||||
<field name="name">banking.mandate.bank.payment.line.form</field>
|
||||
<field name="model">bank.payment.line</field>
|
||||
<field name="inherit_id" ref="account_payment_order.bank_payment_line_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field
|
||||
name="mandate_id"
|
||||
invisible="context.get('default_payment_type')!='inbound'"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="bank_payment_line_tree" model="ir.ui.view">
|
||||
<field name="name">banking.mandate.bank.payment.line.tree</field>
|
||||
<field name="model">bank.payment.line</field>
|
||||
<field name="inherit_id" ref="account_payment_order.bank_payment_line_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field name="mandate_id" string="Mandate"
|
||||
invisible="context.get('default_payment_type')!='inbound'"/>
|
||||
</record>
|
||||
<record id="bank_payment_line_tree" model="ir.ui.view">
|
||||
<field name="name">banking.mandate.bank.payment.line.tree</field>
|
||||
<field name="model">bank.payment.line</field>
|
||||
<field name="inherit_id" ref="account_payment_order.bank_payment_line_tree" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field
|
||||
name="mandate_id"
|
||||
string="Mandate"
|
||||
invisible="context.get('default_payment_type')!='inbound'"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,25 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
|
||||
<record id="partner_view_buttons" model="ir.ui.view">
|
||||
<field name="name">mandate.res.partner.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="account.partner_view_buttons"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//button[@name='%(base.action_res_partner_bank_account_form)d']" position="after">
|
||||
<button type="action" class="btn-link"
|
||||
<record id="partner_view_buttons" model="ir.ui.view">
|
||||
<field name="name">mandate.res.partner.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="account.partner_view_buttons" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath
|
||||
expr="//button[@name='%(base.action_res_partner_bank_account_form)d']"
|
||||
position="after"
|
||||
>
|
||||
<button
|
||||
type="action"
|
||||
class="btn-link"
|
||||
name="%(account_banking_mandate.mandate_action)d"
|
||||
context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}">
|
||||
<field string="Mandate(s)" name="mandate_count" widget="statinfo"/>
|
||||
</button>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
|
||||
>
|
||||
<field string="Mandate(s)" name="mandate_count" widget="statinfo" />
|
||||
</button>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,34 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
© 2013-2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
|
||||
<record id="mandate_partner_bank_form" model="ir.ui.view">
|
||||
<field name="name">mandate.res.partner.bank.form</field>
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="inherit_id" ref="base.view_partner_bank_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form/group" position="inside">
|
||||
<group name="mandates" string="Direct Debit Mandates">
|
||||
<field name="mandate_ids" context="{'mandate_bank_partner_view': True}" nolabel="1"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mandate_partner_bank_tree" model="ir.ui.view">
|
||||
<field name="name">mandate.res.partner.bank.tree</field>
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="inherit_id" ref="base.view_partner_bank_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_id" position="after">
|
||||
<field name="mandate_ids" string="Mandates"/>
|
||||
<record id="mandate_partner_bank_form" model="ir.ui.view">
|
||||
<field name="name">mandate.res.partner.bank.form</field>
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="inherit_id" ref="base.view_partner_bank_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form/group" position="inside">
|
||||
<group name="mandates" string="Direct Debit Mandates">
|
||||
<field
|
||||
name="mandate_ids"
|
||||
context="{'mandate_bank_partner_view': True}"
|
||||
nolabel="1"
|
||||
/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</record>
|
||||
<record id="mandate_partner_bank_tree" model="ir.ui.view">
|
||||
<field name="name">mandate.res.partner.bank.tree</field>
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="inherit_id" ref="base.view_partner_bank_tree" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_id" position="after">
|
||||
<field name="mandate_ids" string="Mandates" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
Reference in New Issue
Block a user