From 8b2c182103304b08b5869665139e7f980229cf59 Mon Sep 17 00:00:00 2001 From: Laetitia Da Costa Date: Thu, 26 Sep 2024 14:33:55 +0200 Subject: [PATCH] [ADD]16.0-bank_and_contract_portal:add rules for internal user using portal --- partner_bank_account_portal/__manifest__.py | 1 - .../controllers/portal_my_bank_account.py | 38 +------- .../controllers/portal_my_bank_accounts.py | 6 +- .../controllers/portal_my_mandate.py | 33 +------ .../controllers/portal_my_mandates.py | 8 +- partner_bank_account_portal/i18n/fr.po | 13 ++- .../security/members_security.xml | 96 +++++++++++++------ .../views/portal_my_bank_account_template.xml | 8 +- .../portal_my_bank_accounts_template.xml | 4 +- .../views/portal_my_mandate_template.xml | 60 ------------ .../views/portal_my_mandates_template.xml | 8 +- 11 files changed, 90 insertions(+), 185 deletions(-) delete mode 100644 partner_bank_account_portal/views/portal_my_mandate_template.xml diff --git a/partner_bank_account_portal/__manifest__.py b/partner_bank_account_portal/__manifest__.py index 847eede..16be39f 100644 --- a/partner_bank_account_portal/__manifest__.py +++ b/partner_bank_account_portal/__manifest__.py @@ -33,7 +33,6 @@ "views/portal_my_bank_accounts_template.xml", "views/portal_my_bank_account_template.xml", "views/portal_my_mandates_template.xml", - "views/portal_my_mandate_template.xml", "views/portal_my_contract_template_inherit.xml", ], # only loaded in demonstration mode diff --git a/partner_bank_account_portal/controllers/portal_my_bank_account.py b/partner_bank_account_portal/controllers/portal_my_bank_account.py index 8fe1132..f849704 100644 --- a/partner_bank_account_portal/controllers/portal_my_bank_account.py +++ b/partner_bank_account_portal/controllers/portal_my_bank_account.py @@ -1,6 +1,5 @@ -# Copyright 2020 Lokavaluto () +# Copyright 2024 Lokavaluto () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -import base64 from odoo import http, tools, _ from odoo.exceptions import AccessError, MissingError from odoo.http import request @@ -49,45 +48,10 @@ class CustomerPortalBankAccount(CustomerPortal): ] 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=""): '''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} - 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): bank_account_fields = self._get_bank_account_fields() values = self._transform_res_partner_fields(kw, bank_account_fields) diff --git a/partner_bank_account_portal/controllers/portal_my_bank_accounts.py b/partner_bank_account_portal/controllers/portal_my_bank_accounts.py index 749156d..1ca30e3 100644 --- a/partner_bank_account_portal/controllers/portal_my_bank_accounts.py +++ b/partner_bank_account_portal/controllers/portal_my_bank_accounts.py @@ -14,7 +14,7 @@ class CustomerPortalBankAccounts(CustomerPortal): def _prepare_home_portal_values(self, counters): values = super()._prepare_home_portal_values(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 return values @@ -23,8 +23,6 @@ class CustomerPortalBankAccounts(CustomerPortal): res['acc_number'] = {'label': _('IBAN'), 'order': 'acc_number'} return res - - @http.route(['/my/bank_accounts', '/my/bank_accounts/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): 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) 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"): diff --git a/partner_bank_account_portal/controllers/portal_my_mandate.py b/partner_bank_account_portal/controllers/portal_my_mandate.py index e3c306a..3864205 100644 --- a/partner_bank_account_portal/controllers/portal_my_mandate.py +++ b/partner_bank_account_portal/controllers/portal_my_mandate.py @@ -1,6 +1,5 @@ -# Copyright 2020 Lokavaluto () +# Copyright 2024 Lokavaluto () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -import base64 from odoo import http, tools, _ from odoo.exceptions import AccessError, MissingError from odoo.http import request @@ -51,31 +50,13 @@ class CustomerPortalMandate(CustomerPortal): ] 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=""): '''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} - 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): mandate_fields = self._get_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 def _get_page_opening_values(self): @@ -95,12 +76,8 @@ class CustomerPortalMandate(CustomerPortal): def portal_my_mandate( 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): mandate_id = int(mandate_id) - - # Check that the user has the right to see this profile try: mandate_sudo = self._document_check_access( "account.banking.mandate", mandate_id, access_token @@ -125,16 +102,8 @@ class CustomerPortalMandate(CustomerPortal): values.update({"error": error, "error_message": error_message}) values.update(kw) if not error: - # Update main profile new_values = self._get_page_saving_mandate_values(kw) 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: return request.redirect(redirect) return request.redirect("/my/mandates") diff --git a/partner_bank_account_portal/controllers/portal_my_mandates.py b/partner_bank_account_portal/controllers/portal_my_mandates.py index 97a85a1..361ad50 100644 --- a/partner_bank_account_portal/controllers/portal_my_mandates.py +++ b/partner_bank_account_portal/controllers/portal_my_mandates.py @@ -1,11 +1,9 @@ # -*- coding: utf-8 -*- # 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.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 @@ -14,7 +12,7 @@ class CustomerPortalMandates(CustomerPortal): def _prepare_home_portal_values(self, counters): values = super()._prepare_home_portal_values(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 return values @@ -36,7 +34,7 @@ class CustomerPortalMandates(CustomerPortal): return request.render("partner_bank_account_portal.portal_my_mandates", values) 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"): values = self._prepare_portal_layout_values() diff --git a/partner_bank_account_portal/i18n/fr.po b/partner_bank_account_portal/i18n/fr.po index e6eeb6f..895ebb2 100644 --- a/partner_bank_account_portal/i18n/fr.po +++ b/partner_bank_account_portal/i18n/fr.po @@ -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_home_bank_accounts msgid "Bank accounts" -msgstr "Comptes bancaires" +msgstr "IBAN" #. module: partner_bank_account_portal #: 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_mandates msgid "Mandates" -msgstr "Mandats" +msgstr "Mandat de prélèvement SEPA" #. module: partner_bank_account_portal #: 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 #: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_accounts 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 #: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_account @@ -189,4 +189,9 @@ msgstr "Ce nom est déjà utilisé, veuillez trouver un autre nom." #. module: partner_bank_account_portal #: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_accounts msgid "records" -msgstr "enregistrements" \ No newline at end of file +msgstr "enregistrements" + +#. module: partner_bank_account_portal +#: model_terms:ir.ui.view,arch_db:partner_bank_account_portal.portal_my_bank_account +msgid "" +msgstr "" \ No newline at end of file diff --git a/partner_bank_account_portal/security/members_security.xml b/partner_bank_account_portal/security/members_security.xml index 89d6008..05e0832 100644 --- a/partner_bank_account_portal/security/members_security.xml +++ b/partner_bank_account_portal/security/members_security.xml @@ -1,34 +1,70 @@ - - res_partner: portal: read access on my bank accounts - - [('partner_id', '=', user.partner_id.id)] - - - - - - - - res_partner: portal: read access on my banks - - - - - - - + + + + + + res_partner: portal: read and write access on my bank accounts + + [('partner_id', '=', user.partner_id.id)] + + + + + + - - res_partner: portal: read access on my mandates - - [('partner_id', '=', user.partner_id.id)] - - - - - - - \ No newline at end of file + + res_partner: portal: read access on my banks + + + + + + + + + + res_partner: portal: read access on my mandates + + [('partner_id', '=', user.partner_id.id)] + + + + + + + + + + + + + + + res_partner: internal users: full access on my bank accounts + + [('partner_id', '=', user.partner_id.id)] + + + + + + + + + res_partner: account users and managers: full access on all bank accounts + + ['|', ('company_id', 'in', company_ids), ('company_id', '=', + False)] + + + + + + + + diff --git a/partner_bank_account_portal/views/portal_my_bank_account_template.xml b/partner_bank_account_portal/views/portal_my_bank_account_template.xml index 6fed7f8..36115bd 100644 --- a/partner_bank_account_portal/views/portal_my_bank_account_template.xml +++ b/partner_bank_account_portal/views/portal_my_bank_account_template.xml @@ -18,7 +18,7 @@
+ t-attf-class="form-group #{error.get('acc_number') and 'o_has_error' or ''}">
+ t-attf-class="form-group #{error.get('partner_id') and 'o_has_error' or ''}">
+ t-attf-class="form-group #{error.get('acc_holder_name') and 'o_has_error' or ''">
+ t-attf-class="form-group #{error.get('bank_id') and 'o_has_error' or ''}">