[ADD]16.0-bank_and_contract_portal:add rules for internal user using portal
This commit is contained in:
@@ -33,7 +33,6 @@
|
|||||||
"views/portal_my_bank_accounts_template.xml",
|
"views/portal_my_bank_accounts_template.xml",
|
||||||
"views/portal_my_bank_account_template.xml",
|
"views/portal_my_bank_account_template.xml",
|
||||||
"views/portal_my_mandates_template.xml",
|
"views/portal_my_mandates_template.xml",
|
||||||
"views/portal_my_mandate_template.xml",
|
|
||||||
"views/portal_my_contract_template_inherit.xml",
|
"views/portal_my_contract_template_inherit.xml",
|
||||||
],
|
],
|
||||||
# only loaded in demonstration mode
|
# only loaded in demonstration mode
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
# Copyright 2020 Lokavaluto ()
|
# Copyright 2024 Lokavaluto ()
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
import base64
|
|
||||||
from odoo import http, tools, _
|
from odoo import http, tools, _
|
||||||
from odoo.exceptions import AccessError, MissingError
|
from odoo.exceptions import AccessError, MissingError
|
||||||
from odoo.http import request
|
from odoo.http import request
|
||||||
@@ -49,45 +48,10 @@ class CustomerPortalBankAccount(CustomerPortal):
|
|||||||
]
|
]
|
||||||
return fields
|
return fields
|
||||||
|
|
||||||
def _get_id_fields(self):
|
|
||||||
fields = [
|
|
||||||
"bank_id",
|
|
||||||
]
|
|
||||||
return fields
|
|
||||||
|
|
||||||
def _get_main_boolean_bank_account_fields(self):
|
|
||||||
'''Provides the fields for which we must check the presence
|
|
||||||
in form's kw to know the value to save in the partner field.
|
|
||||||
All of them MUST start with "main_".'''
|
|
||||||
fields = []
|
|
||||||
return fields
|
|
||||||
|
|
||||||
def _transform_res_partner_fields(self, kw, bank_account_fields, prefix=""):
|
def _transform_res_partner_fields(self, kw, bank_account_fields, prefix=""):
|
||||||
'''Transforms kw's values in res_partner fields and values'''
|
'''Transforms kw's values in res_partner fields and values'''
|
||||||
return {key[len(prefix):]: kw[key] for key in bank_account_fields if key in kw}
|
return {key[len(prefix):]: kw[key] for key in bank_account_fields if key in kw}
|
||||||
|
|
||||||
def _cast_id_fields(self, kw, id_fields):
|
|
||||||
'''Cast ids fields in kw's values into a integer'''
|
|
||||||
result = {}
|
|
||||||
for key in id_fields:
|
|
||||||
if key in kw:
|
|
||||||
if kw[key] == '':
|
|
||||||
result[key] = None
|
|
||||||
elif not isinstance(kw[key], int):
|
|
||||||
result[key] = int(kw[key])
|
|
||||||
else:
|
|
||||||
result[key] = kw[key]
|
|
||||||
return result
|
|
||||||
|
|
||||||
def _add_boolean_values(self, values, kw, boolean_fields, prefix=""):
|
|
||||||
for key in boolean_fields:
|
|
||||||
values.update(
|
|
||||||
{
|
|
||||||
key[len(prefix):]: kw.get(key, "off") == "on",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
return values
|
|
||||||
|
|
||||||
def _get_page_saving_bank_account_values(self, kw):
|
def _get_page_saving_bank_account_values(self, kw):
|
||||||
bank_account_fields = self._get_bank_account_fields()
|
bank_account_fields = self._get_bank_account_fields()
|
||||||
values = self._transform_res_partner_fields(kw, bank_account_fields)
|
values = self._transform_res_partner_fields(kw, bank_account_fields)
|
||||||
|
@@ -14,7 +14,7 @@ class CustomerPortalBankAccounts(CustomerPortal):
|
|||||||
def _prepare_home_portal_values(self, counters):
|
def _prepare_home_portal_values(self, counters):
|
||||||
values = super()._prepare_home_portal_values(counters)
|
values = super()._prepare_home_portal_values(counters)
|
||||||
if 'bank_account_count' in counters:
|
if 'bank_account_count' in counters:
|
||||||
bank_account_count = request.env['res.partner.bank'].search_count([])
|
bank_account_count = request.env['res.partner.bank'].search_count([('partner_id', '=', request.env.user.partner_id.id)])
|
||||||
values['bank_account_count'] = bank_account_count
|
values['bank_account_count'] = bank_account_count
|
||||||
return values
|
return values
|
||||||
|
|
||||||
@@ -23,8 +23,6 @@ class CustomerPortalBankAccounts(CustomerPortal):
|
|||||||
res['acc_number'] = {'label': _('IBAN'), 'order': 'acc_number'}
|
res['acc_number'] = {'label': _('IBAN'), 'order': 'acc_number'}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@http.route(['/my/bank_accounts', '/my/bank_accounts/page/<int:page>'], type='http', auth="user", website=True)
|
@http.route(['/my/bank_accounts', '/my/bank_accounts/page/<int:page>'], type='http', auth="user", website=True)
|
||||||
def portal_my_bank_accounts(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw):
|
def portal_my_bank_accounts(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw):
|
||||||
values = self._prepare_my_bank_accounts_values(page, date_begin, date_end, sortby, filterby)
|
values = self._prepare_my_bank_accounts_values(page, date_begin, date_end, sortby, filterby)
|
||||||
@@ -43,7 +41,7 @@ class CustomerPortalBankAccounts(CustomerPortal):
|
|||||||
return request.render("partner_bank_account_portal.portal_my_bank_accounts", values)
|
return request.render("partner_bank_account_portal.portal_my_bank_accounts", values)
|
||||||
|
|
||||||
def _get_bank_accounts_domain(self):
|
def _get_bank_accounts_domain(self):
|
||||||
return [('active', '=', True)]
|
return [('active', '=', True),('partner_id', '=', request.env.user.partner_id.id)]
|
||||||
|
|
||||||
|
|
||||||
def _prepare_my_bank_accounts_values(self, page, date_begin, date_end, sortby, filterby, domain=None, url="/my/bank_accounts"):
|
def _prepare_my_bank_accounts_values(self, page, date_begin, date_end, sortby, filterby, domain=None, url="/my/bank_accounts"):
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
# Copyright 2020 Lokavaluto ()
|
# Copyright 2024 Lokavaluto ()
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
import base64
|
|
||||||
from odoo import http, tools, _
|
from odoo import http, tools, _
|
||||||
from odoo.exceptions import AccessError, MissingError
|
from odoo.exceptions import AccessError, MissingError
|
||||||
from odoo.http import request
|
from odoo.http import request
|
||||||
@@ -51,31 +50,13 @@ class CustomerPortalMandate(CustomerPortal):
|
|||||||
]
|
]
|
||||||
return fields
|
return fields
|
||||||
|
|
||||||
def _get_main_boolean_mandate_fields(self):
|
|
||||||
'''Provides the fields for which we must check the presence
|
|
||||||
in form's kw to know the value to save in the partner field.
|
|
||||||
All of them MUST start with "main_".'''
|
|
||||||
fields = []
|
|
||||||
return fields
|
|
||||||
|
|
||||||
def _transform_in_res_partner_fields(self, kw, mandate_fields, prefix=""):
|
def _transform_in_res_partner_fields(self, kw, mandate_fields, prefix=""):
|
||||||
'''Transforms kw's values in res_partner fields and values'''
|
'''Transforms kw's values in res_partner fields and values'''
|
||||||
return {key[len(prefix):]: kw[key] for key in mandate_fields if key in kw}
|
return {key[len(prefix):]: kw[key] for key in mandate_fields if key in kw}
|
||||||
|
|
||||||
def _add_boolean_values(self, values, kw, boolean_fields, prefix=""):
|
|
||||||
for key in boolean_fields:
|
|
||||||
values.update(
|
|
||||||
{
|
|
||||||
key[len(prefix):]: kw.get(key, "off") == "on",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
return values
|
|
||||||
|
|
||||||
def _get_page_saving_mandate_values(self, kw):
|
def _get_page_saving_mandate_values(self, kw):
|
||||||
mandate_fields = self._get_mandate_fields()
|
mandate_fields = self._get_mandate_fields()
|
||||||
values = self._transform_in_res_partner_fields(kw, mandate_fields)
|
values = self._transform_in_res_partner_fields(kw, mandate_fields)
|
||||||
# boolean_fields = self._get_main_boolean_bank_account_fields()
|
|
||||||
# values = self._add_boolean_values(values, kw, boolean_fields)
|
|
||||||
return values
|
return values
|
||||||
|
|
||||||
def _get_page_opening_values(self):
|
def _get_page_opening_values(self):
|
||||||
@@ -95,12 +76,8 @@ class CustomerPortalMandate(CustomerPortal):
|
|||||||
def portal_my_mandate(
|
def portal_my_mandate(
|
||||||
self,mandate_id=None, access_token=None, redirect=None, **kw
|
self,mandate_id=None, access_token=None, redirect=None, **kw
|
||||||
):
|
):
|
||||||
# The following condition is to transform profile_id to an int, as it is sent as a string from the templace "portal_my_profile"
|
|
||||||
# TODO: find a better way to retrieve the profile_id at form submit step
|
|
||||||
if not isinstance(mandate_id, int):
|
if not isinstance(mandate_id, int):
|
||||||
mandate_id = int(mandate_id)
|
mandate_id = int(mandate_id)
|
||||||
|
|
||||||
# Check that the user has the right to see this profile
|
|
||||||
try:
|
try:
|
||||||
mandate_sudo = self._document_check_access(
|
mandate_sudo = self._document_check_access(
|
||||||
"account.banking.mandate", mandate_id, access_token
|
"account.banking.mandate", mandate_id, access_token
|
||||||
@@ -125,16 +102,8 @@ class CustomerPortalMandate(CustomerPortal):
|
|||||||
values.update({"error": error, "error_message": error_message})
|
values.update({"error": error, "error_message": error_message})
|
||||||
values.update(kw)
|
values.update(kw)
|
||||||
if not error:
|
if not error:
|
||||||
# Update main profile
|
|
||||||
new_values = self._get_page_saving_mandate_values(kw)
|
new_values = self._get_page_saving_mandate_values(kw)
|
||||||
mandate.sudo().write(new_values)
|
mandate.sudo().write(new_values)
|
||||||
# Update public profile
|
|
||||||
# new_values = self._get_page_saving_public_structure_values(kw)
|
|
||||||
# public_profile.sudo().write(new_values)
|
|
||||||
# Update position profile
|
|
||||||
# new_values = self._get_page_saving_position_structure_values(kw)
|
|
||||||
# position_profile.sudo().write(new_values)
|
|
||||||
# End of updates
|
|
||||||
if redirect:
|
if redirect:
|
||||||
return request.redirect(redirect)
|
return request.redirect(redirect)
|
||||||
return request.redirect("/my/mandates")
|
return request.redirect("/my/mandates")
|
||||||
|
@@ -1,11 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||||
|
|
||||||
from odoo import http, _
|
from odoo import http
|
||||||
from odoo.osv import expression
|
from odoo.osv import expression
|
||||||
from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager
|
from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager
|
||||||
from odoo.exceptions import AccessError, MissingError
|
|
||||||
from collections import OrderedDict
|
|
||||||
from odoo.http import request
|
from odoo.http import request
|
||||||
|
|
||||||
|
|
||||||
@@ -14,7 +12,7 @@ class CustomerPortalMandates(CustomerPortal):
|
|||||||
def _prepare_home_portal_values(self, counters):
|
def _prepare_home_portal_values(self, counters):
|
||||||
values = super()._prepare_home_portal_values(counters)
|
values = super()._prepare_home_portal_values(counters)
|
||||||
if 'mandate_count' in counters:
|
if 'mandate_count' in counters:
|
||||||
mandate_count = request.env['account.banking.mandate'].search_count([])
|
mandate_count = request.env['account.banking.mandate'].search_count([('partner_id', '=', request.env.user.partner_id.id)])
|
||||||
values['mandate_count'] = mandate_count
|
values['mandate_count'] = mandate_count
|
||||||
return values
|
return values
|
||||||
|
|
||||||
@@ -36,7 +34,7 @@ class CustomerPortalMandates(CustomerPortal):
|
|||||||
return request.render("partner_bank_account_portal.portal_my_mandates", values)
|
return request.render("partner_bank_account_portal.portal_my_mandates", values)
|
||||||
|
|
||||||
def _get_mandate_domain(self):
|
def _get_mandate_domain(self):
|
||||||
return []
|
return [('partner_id', '=', request.env.user.partner_id.id)]
|
||||||
|
|
||||||
def _prepare_my_mandates_values(self, page, date_begin, date_end, domain=None, url="/my/mandates"):
|
def _prepare_my_mandates_values(self, page, date_begin, date_end, domain=None, url="/my/mandates"):
|
||||||
values = self._prepare_portal_layout_values()
|
values = self._prepare_portal_layout_values()
|
||||||
|
@@ -56,7 +56,7 @@ msgstr "Comptes bancaires"
|
|||||||
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_accounts
|
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_accounts
|
||||||
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_home_bank_accounts
|
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_home_bank_accounts
|
||||||
msgid "Bank accounts"
|
msgid "Bank accounts"
|
||||||
msgstr "Comptes bancaires"
|
msgstr "IBAN"
|
||||||
|
|
||||||
#. module: partner_bank_account_portal
|
#. module: partner_bank_account_portal
|
||||||
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_accounts
|
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_accounts
|
||||||
@@ -110,7 +110,7 @@ msgstr "Date du dernier débit"
|
|||||||
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_home_menu_contract
|
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_home_menu_contract
|
||||||
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_mandates
|
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_mandates
|
||||||
msgid "Mandates"
|
msgid "Mandates"
|
||||||
msgstr "Mandats"
|
msgstr "Mandat de prélèvement SEPA"
|
||||||
|
|
||||||
#. module: partner_bank_account_portal
|
#. module: partner_bank_account_portal
|
||||||
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_account
|
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_account
|
||||||
@@ -125,7 +125,7 @@ msgstr "Details du mandat"
|
|||||||
#. module: partner_bank_account_portal
|
#. module: partner_bank_account_portal
|
||||||
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_accounts
|
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_accounts
|
||||||
msgid "Name of IBAN holder if different"
|
msgid "Name of IBAN holder if different"
|
||||||
msgstr "Nom du titulaire de l'IBAN si différent :"
|
msgstr "Nom du titulaire de l'IBAN si différent"
|
||||||
|
|
||||||
#. module: partner_bank_account_portal
|
#. module: partner_bank_account_portal
|
||||||
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_account
|
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_account
|
||||||
@@ -190,3 +190,8 @@ msgstr "Ce nom est déjà utilisé, veuillez trouver un autre nom."
|
|||||||
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_accounts
|
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_accounts
|
||||||
msgid "records"
|
msgid "records"
|
||||||
msgstr "enregistrements"
|
msgstr "enregistrements"
|
||||||
|
|
||||||
|
#. module: partner_bank_account_portal
|
||||||
|
#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_account
|
||||||
|
msgid "<option value=\"\">My bank is not in the list</option>"
|
||||||
|
msgstr "<option value=\"\">Ma banque n'est pas dans la liste</option>"
|
@@ -1,34 +1,70 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<record model="ir.rule" id="res_partner_portal_members_bank_accounts_read_rule">
|
|
||||||
<field name="name">res_partner: portal: read access on my bank accounts</field>
|
|
||||||
<field name="model_id" ref="base.model_res_partner_bank" />
|
|
||||||
<field name="domain_force">[('partner_id', '=', user.partner_id.id)]</field>
|
|
||||||
<field name="groups" eval="[(4, ref('base.group_portal'))]" />
|
|
||||||
<field name="perm_read" eval="True" />
|
|
||||||
<field name="perm_write" eval="False" />
|
|
||||||
<field name="perm_create" eval="False" />
|
|
||||||
<field name="perm_unlink" eval="False" />
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.rule" id="res_partner_portal_bank_read_rule">
|
<data noupdate="0">
|
||||||
<field name="name">res_partner: portal: read access on my banks</field>
|
<!-- ###################### -->
|
||||||
<field name="model_id" ref="base.model_res_bank" />
|
<!-- RULES FOR PORTAL USERS -->
|
||||||
<field name="groups" eval="[(4, ref('base.group_portal'))]" />
|
<!-- ###################### -->
|
||||||
<field name="perm_read" eval="True" />
|
<record model="ir.rule" id="res_partner_portal_members_bank_accounts_read_rule">
|
||||||
<field name="perm_write" eval="False" />
|
<field name="name">res_partner: portal: read and write access on my bank accounts</field>
|
||||||
<field name="perm_create" eval="False" />
|
<field name="model_id" ref="base.model_res_partner_bank" />
|
||||||
<field name="perm_unlink" eval="False" />
|
<field name="domain_force">[('partner_id', '=', user.partner_id.id)]</field>
|
||||||
</record>
|
<field name="groups" eval="[(4, ref('base.group_portal')),(4, ref('base.group_user'))]" />
|
||||||
|
<field name="perm_read" eval="True" />
|
||||||
|
<field name="perm_write" eval="True" />
|
||||||
|
<field name="perm_create" eval="False" />
|
||||||
|
<field name="perm_unlink" eval="False" />
|
||||||
|
</record>
|
||||||
|
|
||||||
<record model="ir.rule" id="res_partner_portal_mandate_read_rule">
|
<record model="ir.rule" id="res_partner_portal_bank_read_rule">
|
||||||
<field name="name">res_partner: portal: read access on my mandates</field>
|
<field name="name">res_partner: portal: read access on my banks</field>
|
||||||
<field name="model_id" ref="account_banking_mandate.model_account_banking_mandate" />
|
<field name="model_id" ref="base.model_res_bank" />
|
||||||
<field name="domain_force">[('partner_id', '=', user.partner_id.id)]</field>
|
<field name="groups" eval="[(4, ref('base.group_portal'))]" />
|
||||||
<field name="groups" eval="[(4, ref('base.group_portal'))]" />
|
<field name="perm_read" eval="True" />
|
||||||
<field name="perm_read" eval="True" />
|
<field name="perm_write" eval="False" />
|
||||||
<field name="perm_write" eval="False" />
|
<field name="perm_create" eval="False" />
|
||||||
<field name="perm_create" eval="False" />
|
<field name="perm_unlink" eval="False" />
|
||||||
<field name="perm_unlink" eval="False" />
|
</record>
|
||||||
</record>
|
|
||||||
|
<record model="ir.rule" id="res_partner_portal_mandate_read_rule">
|
||||||
|
<field name="name">res_partner: portal: read access on my mandates</field>
|
||||||
|
<field name="model_id" ref="account_banking_mandate.model_account_banking_mandate" />
|
||||||
|
<field name="domain_force">[('partner_id', '=', user.partner_id.id)]</field>
|
||||||
|
<field name="groups" eval="[(4, ref('base.group_portal'))]" />
|
||||||
|
<field name="perm_read" eval="True" />
|
||||||
|
<field name="perm_write" eval="False" />
|
||||||
|
<field name="perm_create" eval="False" />
|
||||||
|
<field name="perm_unlink" eval="False" />
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ######################## -->
|
||||||
|
<!-- RULES FOR INTERNAL USERS -->
|
||||||
|
<!-- ######################## -->
|
||||||
|
|
||||||
|
<!-- restricts access to res.partner.bank as internal user if this internal user do not be part of account manager group or account user group -->
|
||||||
|
<record model="ir.rule" id="portal_internal_user_partner_bank_rules">
|
||||||
|
<field name="name">res_partner: internal users: full access on my bank accounts</field>
|
||||||
|
<field name="model_id" ref="base.model_res_partner_bank" />
|
||||||
|
<field name="domain_force">[('partner_id', '=', user.partner_id.id)]</field>
|
||||||
|
<field name="groups" eval="[(4, ref('base.group_user'))]" />
|
||||||
|
<field name="perm_read" eval="True" />
|
||||||
|
<field name="perm_write" eval="True" />
|
||||||
|
<field name="perm_create" eval="True" />
|
||||||
|
<field name="perm_unlink" eval="True" />
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.rule" id="portal_account_manager_partner_bank_rules">
|
||||||
|
<field name="name">res_partner: account users and managers: full access on all bank accounts</field>
|
||||||
|
<field name="model_id" ref="base.model_res_partner_bank" />
|
||||||
|
<field name="domain_force">['|', ('company_id', 'in', company_ids), ('company_id', '=',
|
||||||
|
False)]</field>
|
||||||
|
<field name="groups"
|
||||||
|
eval="[(4, ref('account.group_account_manager')),(4, ref('account.group_account_invoice')),(4, ref('account.group_account_user'))]" />
|
||||||
|
<field name="perm_read" eval="True" />
|
||||||
|
<field name="perm_write" eval="True" />
|
||||||
|
<field name="perm_create" eval="True" />
|
||||||
|
<field name="perm_unlink" eval="True" />
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
</odoo>
|
</odoo>
|
@@ -18,7 +18,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div id="iban"
|
<div id="iban"
|
||||||
t-attf-class="form-group #{error.get('acc_number') and 'o_has_error' or ''} col-xl-12">
|
t-attf-class="form-group #{error.get('acc_number') and 'o_has_error' or ''}">
|
||||||
<label class="col-form-label" for="acc_number">IBAN : </label>
|
<label class="col-form-label" for="acc_number">IBAN : </label>
|
||||||
<label class="text-danger"> *</label>
|
<label class="text-danger"> *</label>
|
||||||
<input t-if="can_edit_bank_account" type="text" name="acc_number"
|
<input t-if="can_edit_bank_account" type="text" name="acc_number"
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
<span t-if="not can_edit_bank_account" t-field="bank_account.acc_number" />
|
<span t-if="not can_edit_bank_account" t-field="bank_account.acc_number" />
|
||||||
</div>
|
</div>
|
||||||
<div id="partner_id"
|
<div id="partner_id"
|
||||||
t-attf-class="form-group #{error.get('partner_id') and 'o_has_error' or ''} col-xl-12">
|
t-attf-class="form-group #{error.get('partner_id') and 'o_has_error' or ''}">
|
||||||
<label class="col-form-label" for="partner_id">Contact name: </label>
|
<label class="col-form-label" for="partner_id">Contact name: </label>
|
||||||
<input t-if="can_edit_bank_account" type="text" name="partner_id"
|
<input t-if="can_edit_bank_account" type="text" name="partner_id"
|
||||||
required="False"
|
required="False"
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
<span t-if="not can_edit_bank_account" t-field="bank_account.partner_id.name" />
|
<span t-if="not can_edit_bank_account" t-field="bank_account.partner_id.name" />
|
||||||
</div>
|
</div>
|
||||||
<div id="iban_holder_name_if_different"
|
<div id="iban_holder_name_if_different"
|
||||||
t-attf-class="form-group #{error.get('acc_holder_name') and 'o_has_error' or ''} col-xl-12">
|
t-attf-class="form-group #{error.get('acc_holder_name') and 'o_has_error' or ''">
|
||||||
<label class="col-form-label" for="bank_id">Name of IBAN holder if different : </label>
|
<label class="col-form-label" for="bank_id">Name of IBAN holder if different : </label>
|
||||||
<input t-if="can_edit_bank_account" type="text" name="acc_holder_name"
|
<input t-if="can_edit_bank_account" type="text" name="acc_holder_name"
|
||||||
t-attf-class="form-control #{error.get('acc_holder_name') and 'is-invalid' or ''}"
|
t-attf-class="form-control #{error.get('acc_holder_name') and 'is-invalid' or ''}"
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
<span t-if="not can_edit_bank_account" t-field="bank_account.acc_holder_name" />
|
<span t-if="not can_edit_bank_account" t-field="bank_account.acc_holder_name" />
|
||||||
</div>
|
</div>
|
||||||
<div id="bank_id"
|
<div id="bank_id"
|
||||||
t-attf-class="form-group #{error.get('bank_id') and 'o_has_error' or ''} col-xl-12">
|
t-attf-class="form-group #{error.get('bank_id') and 'o_has_error' or ''}">
|
||||||
<label class="col-form-label" for="bank_id">Banque name : </label>
|
<label class="col-form-label" for="bank_id">Banque name : </label>
|
||||||
<select t-if="can_edit_bank_account" type="text" name="bank_id"
|
<select t-if="can_edit_bank_account" type="text" name="bank_id"
|
||||||
t-attf-class="form-control #{error.get('bank_id') and 'is-invalid' or ''}">
|
t-attf-class="form-control #{error.get('bank_id') and 'is-invalid' or ''}">
|
||||||
|
@@ -15,14 +15,14 @@
|
|||||||
<tr class="active">
|
<tr class="active">
|
||||||
<th>IBAN</th>
|
<th>IBAN</th>
|
||||||
<th>Contact name</th>
|
<th>Contact name</th>
|
||||||
<th>Name of IBAN holder if different</th>
|
<th style="max-width: 15rem;">Name of IBAN holder if different</th>
|
||||||
<th>Number of associated mandates</th>
|
<th>Number of associated mandates</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<t t-foreach="bank_accounts" t-as="bank_account">
|
<t t-foreach="bank_accounts" t-as="bank_account">
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td style="min-width: 294px;">
|
||||||
<a
|
<a
|
||||||
t-attf-href="/my/bank_account/#{bank_account.id}?{{ keep_query() }}">
|
t-attf-href="/my/bank_account/#{bank_account.id}?{{ keep_query() }}">
|
||||||
<span t-field="bank_account.acc_number" />
|
<span t-field="bank_account.acc_number" />
|
||||||
|
@@ -1,60 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<odoo>
|
|
||||||
<template id="portal_my_mandate" name="Mandate details">
|
|
||||||
<t t-call="portal.portal_layout">
|
|
||||||
<t t-set="additional_title">My mandate details</t>
|
|
||||||
<form action="/my/mandate/save" method="post" enctype="multipart/form-data">
|
|
||||||
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" />
|
|
||||||
<div class="row o_portal_details">
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<br />
|
|
||||||
<div t-if="success" class="alert alert-success py-1 mb-2">
|
|
||||||
<i class="fa fa-fw fa-check-circle" /> Data saved! </div>
|
|
||||||
<div t-if="error_message" role="alert" class="col-lg-12 alert alert-danger">
|
|
||||||
<t t-foreach="error_message" t-as="err">
|
|
||||||
<t t-out="err" />
|
|
||||||
<br />
|
|
||||||
</t>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div id="reference"
|
|
||||||
t-attf-class="form-group #{error.get('unique_mandate_reference') and 'o_has_error' or ''} col-xl-12">
|
|
||||||
<label class="col-form-label" for="unique_mandate_reference">Reference : </label>
|
|
||||||
<label class="text-danger"> *</label>
|
|
||||||
<input t-if="can_edit_mandate" type="text" name="unique_mandate_reference"
|
|
||||||
required="True"
|
|
||||||
t-attf-class="form-control #{error.get('unique_mandate_reference') and 'is-invalid' or ''}"
|
|
||||||
t-att-value="unique_mandate_reference or mandate.unique_mandate_reference" />
|
|
||||||
<span t-if="not can_edit_mandate" t-field="mandate.unique_mandate_reference" />
|
|
||||||
</div>
|
|
||||||
<div id="format"
|
|
||||||
t-attf-class="form-group #{error.get('format') and 'o_has_error' or ''} col-xl-12">
|
|
||||||
<label class="col-form-label" for="format">Format : </label>
|
|
||||||
<label class="text-danger"> *</label>
|
|
||||||
<input t-if="can_edit_mandate" type="text" name="format"
|
|
||||||
required="True"
|
|
||||||
t-attf-class="form-control #{error.get('format') and 'is-invalid' or ''}"
|
|
||||||
t-att-value="format or mandate.format" />
|
|
||||||
<span t-if="not can_edit_mandate" t-field="mandate.format" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br />
|
|
||||||
<input type="hidden" name="mandate_id" t-att-value="mandate_id" />
|
|
||||||
<input type="hidden" name="redirect" t-att-value="redirect" />
|
|
||||||
<div style="text-align:right;">
|
|
||||||
<button type="submit"
|
|
||||||
class="btn btn-primary ">Save
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<div style="text-align:right">
|
|
||||||
<br />
|
|
||||||
<a href="/my/mandates">
|
|
||||||
<span class="fa fa-arrow-left" /> Back to my mandates list </a>
|
|
||||||
</div>
|
|
||||||
</t>
|
|
||||||
</template>
|
|
||||||
</odoo>
|
|
@@ -14,7 +14,6 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr class="active">
|
<tr class="active">
|
||||||
<th>Reference</th>
|
<th>Reference</th>
|
||||||
<th>Format</th>
|
|
||||||
<th>Contact name</th>
|
<th>Contact name</th>
|
||||||
<th>Signature date</th>
|
<th>Signature date</th>
|
||||||
<th>Last debit date</th>
|
<th>Last debit date</th>
|
||||||
@@ -28,17 +27,14 @@
|
|||||||
<td>
|
<td>
|
||||||
<span t-field="mandate.unique_mandate_reference" />
|
<span t-field="mandate.unique_mandate_reference" />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
|
||||||
<span t-field="mandate.format" />
|
|
||||||
</td>
|
|
||||||
<td>
|
<td>
|
||||||
<span t-field="mandate.partner_id" />
|
<span t-field="mandate.partner_id" />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<span t-field="mandate.last_debit_date" />
|
<span t-field="mandate.signature_date" />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<span t-field="mandate.signature_date" />
|
<span t-field="mandate.last_debit_date" />
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<span t-field="mandate.state" />
|
<span t-field="mandate.state" />
|
||||||
|
Reference in New Issue
Block a user