Customer Portal

portal
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/portal
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Josse Colpaert, David Monjoie, Xavier Morel, Nicolas Martinelli, Géry Debongnie, Aaron Bohy, Jeremy Kersten, qsm-odoo, Alexandre Kühn, Julien Castiaux, Victor Feyens, Sébastien Theys, std-odoo, Achraf (abz), Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, Kishan Gajjar, Benoit Socias, Miquel Raïch, Didier (did), Florian Vranckx, luvi, Alexandre D. Díaz, Thomas Lefebvre (thle), alsh-odoo, Louis Wicket (wil), tsm-odoo, Robin Lejeune (role), Dylan Kiss (dyki), Valeriya(vchu), Mayurrajsinh Rathod, bram1000, Zelong Lin, Walid (wasa), stefanorigano (SRI), aktr-odoo, Youssef Bashandy, Maryam Kia, Louis (loti), Serge Bayet (seba), kcv-odoo, Alex Kühn, Chrysanthe (chgo), Junqi Wu, mano-odoo, thle-odoo, Xavier Luyckx (xlu), Ryan Cen, gteboul, Manushi Shah, Rahil Ghanchi, Sébastien (blse), paan-odoo, sben-odoo, Bastien PIERRE, Anton Romanova (roan), Sherif Gabr, pish-odoo, Krzysztof Magusiak (krma), Hadi El Yakhni, Elier Ayala Bernal, Gurpreet Singh, pajo, defl, Giorgio Tocco (gito), Alessandro Lupo, adip-odoo, Nisarg (nipl), Lionel Piraux (lipi), Kevin Gerard (kege), mibav-odoo, Mazen, Romain (roto), Atovange, Julien (jdeh), ibo-odoo, raja prasad, Francesco Calicchio (frca), qucol-odoo, Haja Ram
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
    - html_editor
    - bus
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds required base code for a fully integrated customer portal.
It contains the base controller class and base templates. Business addons
will add their specific templates and controllers to extend the customer
portal.

This module contains most code coming from odoo v10 website_portal. Purpose
of this module is to allow the display of a customer portal without having
a dependency towards website editing and customization capabilities.

Code Analysis

Views touched (38)
XML IDNameModelTypeStatus
footer_language_selector Footer Language Selector ir.ui.view qweb Inherits portal.frontend_layout
frontend_layout Main Frontend Layout ir.ui.view qweb Inherits web.frontend_layout
language_selector Language Selector ir.ui.view qweb New
message_document_unfollowed message_document_unfollowed ir.ui.view qweb Inherits mail.message_document_unfollowed
message_thread message_thread ir.ui.view qweb New
my_account_link Link to frontend portal ir.ui.view qweb Inherits portal.user_dropdown
pager Pager ir.ui.view qweb New
placeholder_user_sign_in User Sign In Placeholder ir.ui.view qweb New
portal.address_card Address Card ir.ui.view qweb New
portal.address_footer portal.address_footer ir.ui.view qweb New
portal.address_form_fields Address Details ir.ui.view qweb New
portal.address_list portal.address_list ir.ui.view qweb New
portal.address_management Address Management ir.ui.view qweb New
portal.my_addresses portal.my_addresses ir.ui.view qweb New
portal.portal_my_details Contact Details ir.ui.view qweb New
portal.signature_form Ask Signature ir.ui.view qweb New
portal.user_sign_in_redirect User Sign In redirect ir.ui.view qweb Inherits portal.user_sign_in
portal_back_in_edit_mode Back to edit mode ir.ui.view qweb New
portal_breadcrumbs Portal Breadcrumbs ir.ui.view qweb New
portal_contact Contact ir.ui.view qweb New
portal_docs_entry My Portal Docs Entry ir.ui.view qweb New
portal_docs_entry_layout Use Pictograms ir.ui.view qweb Inherits portal.portal_docs_entry
portal_layout Portal Layout ir.ui.view qweb New
portal_my_contact portal_my_contact ir.ui.view qweb New
portal_my_home My Portal ir.ui.view qweb New
portal_my_security portal_my_security ir.ui.view qweb New
portal_record_sidebar My Portal Record Sidebar ir.ui.view qweb New
portal_searchbar Portal Search Bar ir.ui.view qweb New
portal_share_template portal_share_template ir.ui.view qweb New
portal_share_wizard portal.share.wizard portal.share form New
portal_sidebar Sidebar ir.ui.view qweb New
portal_table My Portal Table ir.ui.view qweb New
record_pager Portal Record Pager ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.portal res.config.settings xpath Inherits base_setup.res_config_settings_view_form
side_content side_content ir.ui.view qweb New
user_dropdown Portal User Dropdown ir.ui.view qweb New
user_sign_in User Sign In ir.ui.view qweb Inherits portal.placeholder_user_sign_in
wizard_view Grant portal access portal.wizard form New
Models touched (12)

New fields (0)

No new fields.

Public methods (1)
  • get_frontend_session_info(self)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • customize_show Boolean
    default=False args: 'Show As Optional Inherit'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • portal_message_format(self, options=None)
    Simpler and portal-oriented version of 'message_format'. Purpose is to prepare, organize and format values required by frontend widget (frontend Chatter). This public API asks for read access on messages before doing the actual computation in the private implementation. :param dict options: options, used notably for inheritance and adding specific fields or properties to compute; :returns: list of dict, one per message in self. Each dict contains values for either fields, either properties derived from fields. :rtype: list[dict]

New fields (1)
  • website_message_ids One2many → mail.message
    bypass_search_access=True domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (3)
  • access_token Char
    copy=False args: 'Security Token'
  • access_url Char
    compute='_compute_access_url' help='Customer Portal URL' args: 'Portal Access URL'
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
Public methods (2)
  • action_share(self)
    @api.model
  • get_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None)
    Get a portal url for this model, including access_token. The associated route must handle the flags for them to have any effect. - suffix: string to append to the url, before the query string - report_type: report_type query string, often one of: html, pdf, text - download: set the download query string to true - query_string: additional query string - anchor: string to append after the anchor #

New fields (7)
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
  • note Text
    help='Add extra content to display in the email'
  • partner_ids Many2many → res.partner
    required=True string='Recipients' args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • resource_ref Reference
    compute='_compute_resource_ref' args: '_selection_target_model', 'Related Document'
  • share_link Char
    compute='_compute_share_link' string='Link'
Public methods (2)
  • action_send_mail(self)
  • default_get(self, fields)
    @api.model

New fields (3)
  • partner_ids Many2many → res.partner
    default=_default_partner_ids string='Partners' args: 'res.partner'
  • user_ids One2many → portal.wizard.user
    compute='_compute_user_ids' readonly=False store=True string='Users' args: 'portal.wizard.user', 'wizard_id'
  • welcome_message Text
    help='This text is included in the email sent to new users of the portal.' args: 'Invitation Message'
Public methods (1)
  • action_open_wizard(self)
    @api.model
    Create a "portal.wizard" and open the form view. We need a server action for that because the one2many "user_ids" records need to exist to be able to execute an a button action on it. If they have no ID, the buttons will be disabled and we won't be able to click on them. That's why we need a server action, to create the records and then open the form view on them.

New fields (8)
  • email Char
    args: 'Email'
  • email_state Selection
    compute='_compute_email_state' default='ok' string='Status' args: [('ok', 'Valid'), ('ko', 'Invalid'), ('exist', 'Already Registered')]
  • is_internal Boolean
    compute='_compute_group_details' args: 'Is Internal'
  • is_portal Boolean
    compute='_compute_group_details' args: 'Is Portal'
  • login_date Datetime
    related='user_id.login_date' string='Latest Authentication'
  • partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True string='Contact' args: 'res.partner'
  • user_id Many2one → res.users
    compute='_compute_user_id' compute_sudo=True string='User' args: 'res.users'
  • wizard_id Many2one → portal.wizard
    ondelete='cascade' required=True string='Wizard' args: 'portal.wizard'
Public methods (4)
  • action_grant_access(self)
    Grant the portal access to the partner. If the partner has no linked user, we will create a new one in the same company as the partner (or in the current company if not set). An invitation email will be sent to the partner.
  • action_invite_again(self)
    Re-send the invitation email to the partner.
  • action_refresh_modal(self)
    Refresh the portal wizard modal and keep it open. Used as fallback action of email state icon buttons, required as they must be non-disabled buttons to fire mouse events to show tooltips on email state.
  • action_revoke_access(self)
    Archive the portal user of the partner. User is kept in `group_portal` as `group_public` should only be used for automated tasks and guest interactions.

New fields (1)
  • portal_allow_api_keys Boolean
    compute='_compute_portal_allow_api_keys' inverse='_inverse_portal_allow_api_keys' string='Customer API Keys'
Public methods (1)
  • get_values(self)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • can_edit_vat(self)
    `vat` is a commercial field, synced between the parent (commercial entity) and the children. Only the commercial entity should be able to edit it (as in backend).

New fields (0)

No new fields.

Public methods (1)
  • check_access_make_key(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/portal
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Xavier Morel, Mohammed Shekha, Nicolas Martinelli, Aaron Bohy, Jeremy Kersten, qsm-odoo, Odoo Online, Romain Derie, Alexandre Kühn, Xavier-Do, Victor Feyens, Paul Morelle, Sébastien Theys, std-odoo, Achraf (abz), Brice bib Bartoletti, Tiffany Chang (tic), Gorash, Pierre Paridans, Arnaud Joset, Kishan Gajjar, Florian Vranckx, Florian(flg), Alexandre D. Díaz, bve-odoo, Thomas Lefebvre (thle), alsh-odoo, Louis Wicket (wil), tsm-odoo, Adrien Widart (awt), nda, Maximilien (malb), Robin Lejeune (role), Louis (loco), Levi Siuzdak (sile), Dylan Kiss (dyki), hupo-odoo, Chong Wang (cwg), bram1000, Xavier Bol (xbo), Brieuc-brd, Mahdi Cheikh Rouhou (macr), Andrzej(pian), Walid (wasa), stefanorigano (SRI), Mattis Megevand, Youssef Bashandy, Ethan Vincent, Maryam Kia, Serge Bayet (seba), Eteil Djoumatchoua(etdj) etdj@odoo.com, Julien Carion (juca), adsh-odoo, Lina (liew), Chrysanthe (chgo), aath-odoo, Louis (wil), Junqi Wu, mano-odoo, Shaan Thakkar (THSH), Ryan Cen, gteboul, paru-odoo, Pierre Pulinckx (PIPU), Abdessamad Zouiten (abzo), sben-odoo, Khushi, Pierre Pulinckx (pipu), Pierre Pulinckx, Bastien PIERRE, K Theja (kthe), Sherif Gabr, Hazem Ibrahim, Hadi El Yakhni, Gurpreet Singh, pajo, defl, dise-odoo, Giorgio Tocco (gito), MAGREMENT, adip-odoo, saurabh, ibo-odoo, raja prasad, Francesco Calicchio (frca)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
    - web_editor
    - bus
    - html_editor
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds required base code for a fully integrated customer portal.
It contains the base controller class and base templates. Business addons
will add their specific templates and controllers to extend the customer
portal.

This module contains most code coming from odoo v10 website_portal. Purpose
of this module is to allow the display of a customer portal without having
a dependency towards website editing and customization capabilities.

Code Analysis

Views touched (33)
XML IDNameModelTypeStatus
footer_language_selector Footer Language Selector ir.ui.view qweb Inherits portal.frontend_layout
frontend_layout Main Frontend Layout ir.ui.view qweb Inherits web.frontend_layout
language_selector Language Selector ir.ui.view qweb New
message_document_unfollowed message_document_unfollowed ir.ui.view qweb Inherits mail.message_document_unfollowed
message_thread message_thread ir.ui.view qweb New
my_account_link Link to frontend portal ir.ui.view qweb Inherits portal.user_dropdown
pager Pager ir.ui.view qweb New
placeholder_user_sign_in User Sign In Placeholder ir.ui.view qweb New
portal.signature_form Ask Signature ir.ui.view qweb New
portal.user_sign_in_redirect User Sign In redirect ir.ui.view qweb Inherits portal.user_sign_in
portal_back_in_edit_mode Back to edit mode ir.ui.view qweb New
portal_breadcrumbs Portal Breadcrumbs ir.ui.view qweb New
portal_contact Contact ir.ui.view qweb New
portal_docs_entry My Portal Docs Entry ir.ui.view qweb New
portal_docs_entry_layout Use Pictograms ir.ui.view qweb Inherits portal.portal_docs_entry
portal_layout Portal Layout ir.ui.view qweb New
portal_my_contact portal_my_contact ir.ui.view qweb New
portal_my_details portal_my_details ir.ui.view qweb New
portal_my_details_fields portal_my_details_fields ir.ui.view qweb New
portal_my_home My Portal ir.ui.view qweb New
portal_my_security portal_my_security ir.ui.view qweb New
portal_record_sidebar My Portal Record Sidebar ir.ui.view qweb New
portal_searchbar Portal Search Bar ir.ui.view qweb New
portal_share_template portal_share_template ir.ui.view qweb New
portal_share_wizard portal.share.wizard portal.share form New
portal_sidebar Sidebar ir.ui.view qweb New
portal_table My Portal Table ir.ui.view qweb New
record_pager Portal Record Pager ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.portal res.config.settings xpath Inherits base_setup.res_config_settings_view_form
side_content side_content ir.ui.view qweb New
user_dropdown Portal User Dropdown ir.ui.view qweb New
user_sign_in User Sign In ir.ui.view qweb Inherits portal.placeholder_user_sign_in
wizard_view Grant portal access portal.wizard form New
Models touched (12)

New fields (0)

No new fields.

Public methods (1)
  • get_frontend_session_info(self)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • customize_show Boolean
    default=False args: 'Show As Optional Inherit'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • portal_message_format(self, options=None)
    Simpler and portal-oriented version of 'message_format'. Purpose is to prepare, organize and format values required by frontend widget (frontend Chatter). This public API asks for read access on messages before doing the actual computation in the private implementation. :param dict options: options, used notably for inheritance and adding specific fields or properties to compute; :return list: list of dict, one per message in self. Each dict contains values for either fields, either properties derived from fields.

New fields (1)
  • website_message_ids One2many → mail.message
    auto_join=True domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (3)
  • access_token Char
    copy=False args: 'Security Token'
  • access_url Char
    compute='_compute_access_url' help='Customer Portal URL' args: 'Portal Access URL'
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
Public methods (2)
  • action_share(self)
    @api.model
  • get_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None)
    Get a portal url for this model, including access_token. The associated route must handle the flags for them to have any effect. - suffix: string to append to the url, before the query string - report_type: report_type query string, often one of: html, pdf, text - download: set the download query string to true - query_string: additional query string - anchor: string to append after the anchor #

New fields (7)
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
  • note Text
    help='Add extra content to display in the email'
  • partner_ids Many2many → res.partner
    required=True string='Recipients' args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • resource_ref Reference
    compute='_compute_resource_ref' args: '_selection_target_model', 'Related Document'
  • share_link Char
    compute='_compute_share_link' string='Link'
Public methods (2)
  • action_send_mail(self)
  • default_get(self, fields)
    @api.model

New fields (3)
  • partner_ids Many2many → res.partner
    default=_default_partner_ids string='Partners' args: 'res.partner'
  • user_ids One2many → portal.wizard.user
    compute='_compute_user_ids' readonly=False store=True string='Users' args: 'portal.wizard.user', 'wizard_id'
  • welcome_message Text
    help='This text is included in the email sent to new users of the portal.' args: 'Invitation Message'
Public methods (1)
  • action_open_wizard(self)
    @api.model
    Create a "portal.wizard" and open the form view. We need a server action for that because the one2many "user_ids" records need to exist to be able to execute an a button action on it. If they have no ID, the buttons will be disabled and we won't be able to click on them. That's why we need a server action, to create the records and then open the form view on them.

New fields (8)
  • email Char
    args: 'Email'
  • email_state Selection
    compute='_compute_email_state' default='ok' string='Status' args: [('ok', 'Valid'), ('ko', 'Invalid'), ('exist', 'Already Registered')]
  • is_internal Boolean
    compute='_compute_group_details' args: 'Is Internal'
  • is_portal Boolean
    compute='_compute_group_details' args: 'Is Portal'
  • login_date Datetime
    related='user_id.login_date' string='Latest Authentication'
  • partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True string='Contact' args: 'res.partner'
  • user_id Many2one → res.users
    compute='_compute_user_id' compute_sudo=True string='User' args: 'res.users'
  • wizard_id Many2one → portal.wizard
    ondelete='cascade' required=True string='Wizard' args: 'portal.wizard'
Public methods (4)
  • action_grant_access(self)
    Grant the portal access to the partner. If the partner has no linked user, we will create a new one in the same company as the partner (or in the current company if not set). An invitation email will be sent to the partner.
  • action_invite_again(self)
    Re-send the invitation email to the partner.
  • action_refresh_modal(self)
    Refresh the portal wizard modal and keep it open. Used as fallback action of email state icon buttons, required as they must be non-disabled buttons to fire mouse events to show tooltips on email state.
  • action_revoke_access(self)
    Archive the portal user of the partner. User is kept in `group_portal` as `group_public` should only be used for automated tasks and guest interactions.

New fields (1)
  • portal_allow_api_keys Boolean
    compute='_compute_portal_allow_api_keys' inverse='_inverse_portal_allow_api_keys' string='Customer API Keys'
Public methods (1)
  • get_values(self)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • can_edit_vat(self)
    `vat` is a commercial field, synced between the parent (commercial entity) and the children. Only the commercial entity should be able to edit it (as in backend).

New fields (0)

No new fields.

Public methods (1)
  • check_access_make_key(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/portal
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Xavier Morel, Géry Debongnie, Aaron Bohy, Damien Bouvy, qsm-odoo, Odoo Online, Romain Derie, Jorge Pinna Puissant, Alexandre Kühn, Julien Castiaux, Xavier-Do, Victor Feyens, Paul Morelle, Sébastien Theys, Samuel Degueldre, std-odoo, Achraf (abz), Lucas Lefèvre, Nasreddin Boulif (bon), Tiffany Chang (tic), Gorash, Younn Olivier, Pierre Paridans, Arnaud Joset, William Braeckman, Romain Estievenart, Benjamin Vray, Kishan Gajjar, Miquel Raïch, momegahed, Guillaume (gdi), Julien Van Roy, Florian Vranckx, Antoine Vandevenne (anv), Alexandre D. Díaz, Renaud Thiry, bve-odoo, Louis Wicket (wil), David, nda, Maximilien (malb), Mahamadasif Ansari, Pierre-Yves Dufays, Robin Lejeune (role), Louis (loco), Levi Siuzdak (sile), Dylan Kiss (dyki), FrancoisGe, Michael (mcm), Kartik Chavda, bram1000, Xavier Bol (xbo), Noe Antoine, Walid (wasa), Deependra Solanki, Mattis Megevand, Youssef Bashandy, Ethan Vincent, Maryam Kia, Eteil Djoumatchoua(etdj) etdj@odoo.com, Julien Carion (juca), adsh-odoo, Lina (liew), Chrysanthe (chgo), Louis (wil), Shaan Thakkar (THSH), Ryan Cen, gteboul, Antoine (anso), Abdessamad Zouiten (abzo), Pierre Pulinckx (pipu), Bastien PIERRE, Pulinckx Pierre (PIPU), Hazem Ibrahim, pajo, defl, dise-odoo, MAGREMENT, Gautam
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
    - web_editor
    - bus
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds required base code for a fully integrated customer portal.
It contains the base controller class and base templates. Business addons
will add their specific templates and controllers to extend the customer
portal.

This module contains most code coming from odoo v10 website_portal. Purpose
of this module is to allow the display of a customer portal without having
a dependency towards website editing and customization capabilities.

Code Analysis

Views touched (32)
XML IDNameModelTypeStatus
footer_language_selector Footer Language Selector ir.ui.view qweb Inherits portal.frontend_layout
frontend_layout Main Frontend Layout ir.ui.view qweb Inherits web.frontend_layout
language_selector Language Selector ir.ui.view qweb New
message_document_unfollowed message_document_unfollowed ir.ui.view qweb Inherits mail.message_document_unfollowed
message_thread message_thread ir.ui.view qweb New
my_account_link Link to frontend portal ir.ui.view qweb Inherits portal.user_dropdown
pager Pager ir.ui.view qweb New
placeholder_user_sign_in User Sign In Placeholder ir.ui.view qweb New
portal.signature_form Ask Signature ir.ui.view qweb New
portal.user_sign_in_redirect User Sign In redirect ir.ui.view qweb Inherits portal.user_sign_in
portal_back_in_edit_mode Back to edit mode ir.ui.view qweb New
portal_breadcrumbs Portal Breadcrumbs ir.ui.view qweb New
portal_contact Contact ir.ui.view qweb New
portal_docs_entry My Portal Docs Entry ir.ui.view qweb New
portal_layout Portal Layout ir.ui.view qweb New
portal_my_details portal_my_details ir.ui.view qweb New
portal_my_details_fields portal_my_details_fields ir.ui.view qweb New
portal_my_home My Portal ir.ui.view qweb New
portal_my_security portal_my_security ir.ui.view qweb New
portal_record_layout Portal single record layout ir.ui.view qweb New
portal_record_sidebar My Portal Record Sidebar ir.ui.view qweb New
portal_searchbar Portal Search Bar ir.ui.view qweb New
portal_share_template portal_share_template ir.ui.view qweb New
portal_share_wizard portal.share.wizard portal.share form New
portal_sidebar Sidebar ir.ui.view qweb New
portal_table My Portal Table ir.ui.view qweb New
record_pager Portal Record Pager ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.portal res.config.settings xpath Inherits base_setup.res_config_settings_view_form
side_content side_content ir.ui.view qweb New
user_dropdown Portal User Dropdown ir.ui.view qweb New
user_sign_in User Sign In ir.ui.view qweb Inherits portal.placeholder_user_sign_in
wizard_view Grant portal access portal.wizard form New
Models touched (12)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • customize_show Boolean
    default=False args: 'Show As Optional Inherit'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • portal_message_format(self, options=None)
    Simpler and portal-oriented version of 'message_format'. Purpose is to prepare, organize and format values required by frontend widget (frontend Chatter). This public API asks for read access on messages before doing the actual computation in the private implementation. :param dict options: options, used notably for inheritance and adding specific fields or properties to compute; :return list: list of dict, one per message in self. Each dict contains values for either fields, either properties derived from fields.

New fields (1)
  • website_message_ids One2many → mail.message
    auto_join=True domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (3)
  • access_token Char
    copy=False args: 'Security Token'
  • access_url Char
    compute='_compute_access_url' help='Customer Portal URL' args: 'Portal Access URL'
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
Public methods (2)
  • action_share(self)
    @api.model
  • get_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None)
    Get a portal url for this model, including access_token. The associated route must handle the flags for them to have any effect. - suffix: string to append to the url, before the query string - report_type: report_type query string, often one of: html, pdf, text - download: set the download query string to true - query_string: additional query string - anchor: string to append after the anchor #

New fields (7)
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
  • note Text
    help='Add extra content to display in the email'
  • partner_ids Many2many → res.partner
    required=True string='Recipients' args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • resource_ref Reference
    compute='_compute_resource_ref' args: '_selection_target_model', 'Related Document'
  • share_link Char
    compute='_compute_share_link' string='Link'
Public methods (2)
  • action_send_mail(self)
  • default_get(self, fields)
    @api.model

New fields (3)
  • partner_ids Many2many → res.partner
    default=_default_partner_ids string='Partners' args: 'res.partner'
  • user_ids One2many → portal.wizard.user
    compute='_compute_user_ids' readonly=False store=True string='Users' args: 'portal.wizard.user', 'wizard_id'
  • welcome_message Text
    help='This text is included in the email sent to new users of the portal.' args: 'Invitation Message'
Public methods (1)
  • action_open_wizard(self)
    @api.model
    Create a "portal.wizard" and open the form view. We need a server action for that because the one2many "user_ids" records need to exist to be able to execute an a button action on it. If they have no ID, the buttons will be disabled and we won't be able to click on them. That's why we need a server action, to create the records and then open the form view on them.

New fields (8)
  • email Char
    args: 'Email'
  • email_state Selection
    compute='_compute_email_state' default='ok' string='Status' args: [('ok', 'Valid'), ('ko', 'Invalid'), ('exist', 'Already Registered')]
  • is_internal Boolean
    compute='_compute_group_details' args: 'Is Internal'
  • is_portal Boolean
    compute='_compute_group_details' args: 'Is Portal'
  • login_date Datetime
    related='user_id.login_date' string='Latest Authentication'
  • partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True string='Contact' args: 'res.partner'
  • user_id Many2one → res.users
    compute='_compute_user_id' compute_sudo=True string='User' args: 'res.users'
  • wizard_id Many2one → portal.wizard
    ondelete='cascade' required=True string='Wizard' args: 'portal.wizard'
Public methods (4)
  • action_grant_access(self)
    Grant the portal access to the partner. If the partner has no linked user, we will create a new one in the same company as the partner (or in the current company if not set). An invitation email will be sent to the partner.
  • action_invite_again(self)
    Re-send the invitation email to the partner.
  • action_refresh_modal(self)
    Refresh the portal wizard modal and keep it open. Used as fallback action of email state icon buttons, required as they must be non-disabled buttons to fire mouse events to show tooltips on email state.
  • action_revoke_access(self)
    Remove the user of the partner from the portal group. If the user was only in the portal group, we archive it.

New fields (1)
  • portal_allow_api_keys Boolean
    compute='_compute_portal_allow_api_keys' inverse='_inverse_portal_allow_api_keys' string='Customer API Keys'
Public methods (1)
  • get_values(self)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • can_edit_vat(self)
    `vat` is a commercial field, synced between the parent (commercial entity) and the children. Only the commercial entity should be able to edit it (as in backend).

New fields (0)

No new fields.

Public methods (1)
  • check_access_make_key(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/portal
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, GitHub, Damien Bouvy, Yannick Tivisse, qsm-odoo, Romain Derie, Jorge Pinna Puissant, Julien Castiaux, Romeo Fragomeli, Victor Feyens, Sébastien Theys, alt-odoo, std-odoo, Nasreddin Boulif (bon), Tiffany Chang (tic), Gorash, William Braeckman, Romain Estievenart, Benjamin Vray, Xavier BOL (xbo), Hubert Van de Walle (huvw), Nicolas (vin), mafo-odoo, Krzysztof Magusiak, Florian Vranckx, Florian Charlier, Patrick Hoste, Antoine Vandevenne (anv), Fabio Barbero, João Marques, Vincent Larcin, bve-odoo, David, nda, Pierre-Yves Dufays, Louis (loco), Levi Siuzdak (sile), bram1000, Xavier Bol (xbo), Brieuc-brd, Leonardo Pavan Rocha, Noe Antoine, Walid (wasa), stefanorigano (SRI), Ethan Vincent, Maryam Kia, Jérémy Hennecart (jeh), Eteil Djoumatchoua(etdj) etdj@odoo.com, Martin Trigaux (mat), dise, Junqi Wu
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
    - web_editor
    - bus
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds required base code for a fully integrated customer portal.
It contains the base controller class and base templates. Business addons
will add their specific templates and controllers to extend the customer
portal.

This module contains most code coming from odoo v10 website_portal. Purpose
of this module is to allow the display of a customer portal without having
a dependency towards website editing and customization capabilities.

Code Analysis

Views touched (29)
XML IDNameModelTypeStatus
footer_language_selector Footer Language Selector ir.ui.view qweb Inherits portal.frontend_layout
frontend_layout Main Frontend Layout ir.ui.view qweb Inherits web.frontend_layout
language_selector Language Selector ir.ui.view qweb New
message_thread message_thread ir.ui.view qweb New
my_account_link Link to frontend portal ir.ui.view qweb Inherits portal.user_dropdown
pager Pager ir.ui.view qweb New
placeholder_user_sign_in User Sign In Placeholder ir.ui.view qweb New
portal.signature_form Ask Signature ir.ui.view qweb New
portal_back_in_edit_mode Back to edit mode ir.ui.view qweb New
portal_breadcrumbs Portal Breadcrumbs ir.ui.view qweb New
portal_contact Contact ir.ui.view qweb New
portal_docs_entry My Portal Docs Entry ir.ui.view qweb New
portal_layout Portal Layout ir.ui.view qweb New
portal_my_details portal_my_details ir.ui.view qweb New
portal_my_details_fields portal_my_details_fields ir.ui.view qweb New
portal_my_home My Portal ir.ui.view qweb New
portal_my_security portal_my_security ir.ui.view qweb New
portal_record_layout Portal single record layout ir.ui.view qweb New
portal_record_sidebar My Portal Record Sidebar ir.ui.view qweb New
portal_searchbar Portal Search Bar ir.ui.view qweb New
portal_share_template portal_share_template ir.ui.view qweb New
portal_share_wizard portal.share.wizard portal.share form New
portal_sidebar Sidebar ir.ui.view qweb New
portal_table My Portal Table ir.ui.view qweb New
record_pager Portal Record Pager ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.portal res.config.settings xpath Inherits base_setup.res_config_settings_view_form
user_dropdown Portal User Dropdown ir.ui.view qweb New
user_sign_in User Sign In ir.ui.view qweb Inherits portal.placeholder_user_sign_in
wizard_view Grant portal access portal.wizard form New
Models touched (12)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • customize_show Boolean
    default=False args: 'Show As Optional Inherit'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • portal_message_format(self)

New fields (1)
  • website_message_ids One2many → mail.message
    auto_join=True domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (3)
  • access_token Char
    copy=False args: 'Security Token'
  • access_url Char
    compute='_compute_access_url' help='Customer Portal URL' args: 'Portal Access URL'
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
Public methods (2)
  • action_share(self)
    @api.model
  • get_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None)
    Get a portal url for this model, including access_token. The associated route must handle the flags for them to have any effect. - suffix: string to append to the url, before the query string - report_type: report_type query string, often one of: html, pdf, text - download: set the download query string to true - query_string: additional query string - anchor: string to append after the anchor #

New fields (7)
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
  • note Text
    help='Add extra content to display in the email'
  • partner_ids Many2many → res.partner
    required=True string='Recipients' args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • resource_ref Reference
    compute='_compute_resource_ref' args: '_selection_target_model', 'Related Document'
  • share_link Char
    compute='_compute_share_link' string='Link'
Public methods (2)
  • action_send_mail(self)
  • default_get(self, fields)
    @api.model

New fields (3)
  • partner_ids Many2many → res.partner
    default=_default_partner_ids string='Partners' args: 'res.partner'
  • user_ids One2many → portal.wizard.user
    compute='_compute_user_ids' readonly=False store=True string='Users' args: 'portal.wizard.user', 'wizard_id'
  • welcome_message Text
    help='This text is included in the email sent to new users of the portal.' args: 'Invitation Message'
Public methods (1)
  • action_open_wizard(self)
    @api.model
    Create a "portal.wizard" and open the form view. We need a server action for that because the one2many "user_ids" records need to exist to be able to execute an a button action on it. If they have no ID, the buttons will be disabled and we won't be able to click on them. That's why we need a server action, to create the records and then open the form view on them.

New fields (8)
  • email Char
    args: 'Email'
  • email_state Selection
    compute='_compute_email_state' default='ok' string='Status' args: [('ok', 'Valid'), ('ko', 'Invalid'), ('exist', 'Already Registered')]
  • is_internal Boolean
    compute='_compute_group_details' args: 'Is Internal'
  • is_portal Boolean
    compute='_compute_group_details' args: 'Is Portal'
  • login_date Datetime
    related='user_id.login_date' string='Latest Authentication'
  • partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True string='Contact' args: 'res.partner'
  • user_id Many2one → res.users
    compute='_compute_user_id' compute_sudo=True string='User' args: 'res.users'
  • wizard_id Many2one → portal.wizard
    ondelete='cascade' required=True string='Wizard' args: 'portal.wizard'
Public methods (4)
  • action_grant_access(self)
    Grant the portal access to the partner. If the partner has no linked user, we will create a new one in the same company as the partner (or in the current company if not set). An invitation email will be sent to the partner.
  • action_invite_again(self)
    Re-send the invitation email to the partner.
  • action_refresh_modal(self)
    Refresh the portal wizard modal and keep it open. Used as fallback action of email state icon buttons, required as they must be non-disabled buttons to fire mouse events to show tooltips on email state.
  • action_revoke_access(self)
    Remove the user of the partner from the portal group. If the user was only in the portal group, we archive it.

New fields (1)
  • portal_allow_api_keys Boolean
    compute='_compute_portal_allow_api_keys' inverse='_inverse_portal_allow_api_keys' string='Customer API Keys'
Public methods (1)
  • get_values(self)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • can_edit_vat(self)
    `vat` is a commercial field, synced between the parent (commercial entity) and the children. Only the commercial entity should be able to edit it (as in backend).

New fields (0)

No new fields.

Public methods (1)
  • check_access_make_key(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/portal
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Xavier Morel, Mohammed Shekha, Jeremy Kersten, Barad Mahendra, qsm-odoo, Nicolas Seinlet, Romain Derie, Adrian Torres, wan, Xavier-Do, Andrea Grazioso (agr-odoo), Sébastien Theys, david, Nasreddin (bon), alt-odoo, Julien Mougenot, std-odoo, David Beguin, Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), nie, Tiffany Chang (tic), Younn Olivier, Kevin Baptiste, Xavier BOL (xbo), Hubert Van de Walle (huvw), mafo-odoo, Patrick Hoste, Nicolas Bayet, Antoine Vandevenne (anv), Laurent Stukkens (LTU), João Marques, Julien Banken, Vincent Larcin, bve-odoo, David, nda, Siddarth Gajjar, Simon Genin (ges), Levi Siuzdak (sile), flvr-odoo, Cedric Prieels (cpr), bram1000, Xavier Bol (xbo), Leonardo Pavan Rocha, dise
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
    - web_editor
    - http_routing
    - mail
    - base_setup
    - bus
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds required base code for a fully integrated customer portal.
It contains the base controller class and base templates. Business addons
will add their specific templates and controllers to extend the customer
portal.

This module contains most code coming from odoo v10 website_portal. Purpose
of this module is to allow the display of a customer portal without having
a dependency towards website editing and customization capabilities.

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
footer_language_selector Footer Language Selector ir.ui.view qweb Inherits portal.frontend_layout
frontend_layout Main Frontend Layout ir.ui.view qweb Inherits web.frontend_layout
language_selector Language Selector ir.ui.view qweb New
message_thread message_thread ir.ui.view qweb New
my_account_link Link to frontend portal ir.ui.view qweb Inherits portal.user_dropdown
pager Pager ir.ui.view qweb New
placeholder_user_sign_in User Sign In Placeholder ir.ui.view qweb New
portal.signature_form Ask Signature ir.ui.view qweb New
portal_back_in_edit_mode Back to edit mode ir.ui.view qweb New
portal_breadcrumbs Portal Breadcrumbs ir.ui.view qweb New
portal_contact Contact ir.ui.view qweb New
portal_docs_entry My Portal Docs Entry ir.ui.view qweb New
portal_layout Portal Layout ir.ui.view qweb New
portal_my_details portal_my_details ir.ui.view qweb New
portal_my_home My Portal ir.ui.view qweb New
portal_my_security portal_my_security ir.ui.view qweb New
portal_record_layout Portal single record layout ir.ui.view qweb New
portal_record_sidebar My Portal Record Sidebar ir.ui.view qweb New
portal_searchbar Portal Search Bar ir.ui.view qweb New
portal_share_template portal_share_template ir.ui.view qweb New
portal_share_wizard portal.share.wizard portal.share form New
portal_sidebar Sidebar ir.ui.view qweb New
portal_table My Portal Table ir.ui.view qweb New
record_pager Portal Record Pager ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.portal res.config.settings xpath Inherits base.res_config_settings_view_form
user_dropdown Portal User Dropdown ir.ui.view qweb New
user_sign_in User Sign In ir.ui.view qweb Inherits portal.placeholder_user_sign_in
wizard_view Grant portal access portal.wizard form New
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • customize_show Boolean
    default=False args: 'Show As Optional Inherit'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • portal_message_format(self)

New fields (1)
  • website_message_ids One2many → mail.message
    auto_join=True domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (3)
  • access_token Char
    copy=False args: 'Security Token'
  • access_url Char
    compute='_compute_access_url' help='Customer Portal URL' args: 'Portal Access URL'
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
Public methods (3)
  • action_share(self)
    @api.model
  • get_access_action(self, access_uid=None)
    Instead of the classic form view, redirect to the online document for portal users or if force_website=True in the context.
  • get_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None)
    Get a portal url for this model, including access_token. The associated route must handle the flags for them to have any effect. - suffix: string to append to the url, before the query string - report_type: report_type query string, often one of: html, pdf, text - download: set the download query string to true - query_string: additional query string - anchor: string to append after the anchor #

New fields (7)
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
  • note Text
    help='Add extra content to display in the email'
  • partner_ids Many2many → res.partner
    required=True string='Recipients' args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • resource_ref Reference
    compute='_compute_resource_ref' args: '_selection_target_model', 'Related Document'
  • share_link Char
    compute='_compute_share_link' string='Link'
Public methods (2)
  • action_send_mail(self)
  • default_get(self, fields)
    @api.model

New fields (3)
  • partner_ids Many2many → res.partner
    default=_default_partner_ids string='Partners' args: 'res.partner'
  • user_ids One2many → portal.wizard.user
    compute='_compute_user_ids' readonly=False store=True string='Users' args: 'portal.wizard.user', 'wizard_id'
  • welcome_message Text
    help='This text is included in the email sent to new users of the portal.' args: 'Invitation Message'
Public methods (1)
  • action_open_wizard(self)
    @api.model
    Create a "portal.wizard" and open the form view. We need a server action for that because the one2many "user_ids" records need to exist to be able to execute an a button action on it. If they have no ID, the buttons will be disabled and we won't be able to click on them. That's why we need a server action, to create the records and then open the form view on them.

New fields (7)
  • email Char
    args: 'Email'
  • is_internal Boolean
    compute='_compute_group_details' args: 'Is Internal'
  • is_portal Boolean
    compute='_compute_group_details' args: 'Is Portal'
  • login_date Datetime
    related='user_id.login_date' string='Latest Authentication'
  • partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True string='Contact' args: 'res.partner'
  • user_id Many2one → res.users
    compute='_compute_user_id' compute_sudo=True string='User' args: 'res.users'
  • wizard_id Many2one → portal.wizard
    ondelete='cascade' required=True string='Wizard' args: 'portal.wizard'
Public methods (3)
  • action_grant_access(self)
    Grant the portal access to the partner. If the partner has no linked user, we will create a new one in the same company as the partner (or in the current company if not set). An invitation email will be sent to the partner.
  • action_invite_again(self)
    Re-send the invitation email to the partner.
  • action_revoke_access(self)
    Remove the user of the partner from the portal group. If the user was only in the portal group, we archive it.

New fields (1)
  • portal_allow_api_keys Boolean
    compute='_compute_portal_allow_api_keys' inverse='_inverse_portal_allow_api_keys' string='Customer API Keys'
Public methods (1)
  • get_values(self)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • can_edit_vat(self)
    `vat` is a commercial field, synced between the parent (commercial entity) and the children. Only the commercial entity should be able to edit it (as in backend).

New fields (0)

No new fields.

Public methods (1)
  • check_access_make_key(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/portal
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, GitHub, Barad Mahendra, Yannick Tivisse, qsm-odoo, Romain Derie, Adrien Dieudonne, wan, Xavier-Do, jerome hanke (jhk), Victor Feyens, Andrea Grazioso (agr-odoo), Sébastien Theys, david, Nasreddin (bon), alt-odoo, Julien Mougenot, fw-bot, std-odoo, David Beguin, Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), nie, Tiffany Chang (tic), Younn Olivier, Kevin Baptiste, Benjamin Vray, Xavier BOL (xbo), tranngocson1996, mafo-odoo, Patrick Hoste, Vincent Larcin, bve-odoo, nda, Levi Siuzdak (sile), Pierre Collinet (pic), Ravi Singh, Xavier Bol (xbo)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:31
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
    - web_editor
    - http_routing
    - mail
    - base_setup
    - bus
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds required base code for a fully integrated customer portal.
It contains the base controller class and base templates. Business addons
will add their specific templates and controllers to extend the customer
portal.

This module contains most code coming from odoo v10 website_portal. Purpose
of this module is to allow the display of a customer portal without having
a dependency towards website editing and customization capabilities.

Code Analysis

Views touched (31)
XML IDNameModelTypeStatus
_assets_frontend_helpers _assets_frontend_helpers ir.ui.view qweb Inherits web_editor._assets_frontend_helpers
_assets_primary_variables _assets_primary_variables ir.ui.view qweb Inherits web._assets_primary_variables
assets_frontend Portal Assets ir.ui.view qweb Inherits web_editor.assets_frontend
assets_tests Portal Assets Tests ir.ui.view qweb Inherits web.assets_tests
footer_language_selector Footer Language Selector ir.ui.view qweb Inherits portal.frontend_layout
frontend_layout Main Frontend Layout ir.ui.view qweb Inherits web.frontend_layout
language_selector Language Selector ir.ui.view qweb New
message_thread message_thread ir.ui.view qweb New
my_account_link Link to frontend portal ir.ui.view qweb Inherits portal.user_dropdown
pager Pager ir.ui.view qweb New
placeholder_user_sign_in User Sign In Placeholder ir.ui.view qweb New
portal.signature_form Ask Signature ir.ui.view qweb New
portal_back_in_edit_mode Back to edit mode ir.ui.view qweb New
portal_breadcrumbs Portal Breadcrumbs ir.ui.view qweb New
portal_contact Contact ir.ui.view qweb New
portal_docs_entry My Portal Docs Entry ir.ui.view qweb New
portal_layout Portal Layout ir.ui.view qweb New
portal_my_details portal_my_details ir.ui.view qweb New
portal_my_home My Portal ir.ui.view qweb New
portal_my_security portal_my_security ir.ui.view qweb New
portal_record_layout Portal single record layout ir.ui.view qweb New
portal_record_sidebar My Portal Record Sidebar ir.ui.view qweb New
portal_searchbar Portal Search Bar ir.ui.view qweb New
portal_share_template portal_share_template ir.ui.view qweb New
portal_share_wizard portal.share.wizard portal.share form New
portal_sidebar Sidebar ir.ui.view qweb New
portal_table My Portal Table ir.ui.view qweb New
record_pager Portal Record Pager ir.ui.view qweb New
user_dropdown Portal User Dropdown ir.ui.view qweb New
user_sign_in User Sign In ir.ui.view qweb Inherits portal.placeholder_user_sign_in
wizard_view Grant Portal Access portal.wizard form New
Models touched (9)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • customize_show Boolean
    default=False args: 'Show As Optional Inherit'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • portal_message_format(self)

New fields (1)
  • website_message_ids One2many → mail.message
    auto_join=True domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (3)
  • access_token Char
    copy=False args: 'Security Token'
  • access_url Char
    compute='_compute_access_url' help='Customer Portal URL' args: 'Portal Access URL'
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
Public methods (3)
  • action_share(self)
    @api.model
  • get_access_action(self, access_uid=None)
    Instead of the classic form view, redirect to the online document for portal users or if force_website=True in the context.
  • get_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None)
    Get a portal url for this model, including access_token. The associated route must handle the flags for them to have any effect. - suffix: string to append to the url, before the query string - report_type: report_type query string, often one of: html, pdf, text - download: set the download query string to true - query_string: additional query string - anchor: string to append after the anchor #

New fields (6)
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
  • note Text
    help='Add extra content to display in the email'
  • partner_ids Many2many → res.partner
    required=True string='Recipients' args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • share_link Char
    compute='_compute_share_link' string='Link'
Public methods (2)
  • action_send_mail(self)
  • default_get(self, fields)
    @api.model

New fields (2)
  • user_ids One2many → portal.wizard.user
    default=_default_user_ids string='Users' args: 'portal.wizard.user', 'wizard_id'
  • welcome_message Text
    help='This text is included in the email sent to new users of the portal.' args: 'Invitation Message'
Public methods (1)
  • action_apply(self)

New fields (5)
  • email Char
    args: 'Email'
  • in_portal Boolean
    args: 'In Portal'
  • partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True string='Contact' args: 'res.partner'
  • user_id Many2one → res.users
    string='Login User' args: 'res.users'
  • wizard_id Many2one → portal.wizard
    ondelete='cascade' required=True string='Wizard' args: 'portal.wizard'
Public methods (2)
  • action_apply(self)
  • get_error_messages(self)

New fields (0)

No new fields.

Public methods (1)
  • can_edit_vat(self)
    `vat` is a commercial field, synced between the parent (commercial entity) and the children. Only the commercial entity should be able to edit it (as in backend).
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/portal
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, Lucas Perais (lpe), Barad Mahendra, Yannick Tivisse, qsm-odoo, Odoo Online, Romain Derie, jem-odoo, Adrien Dieudonne, RomainLibert, Adrian Torres, Aurélien Warnon, Xavier-Do, jerome hanke (jhk), Victor Feyens, Andrea Grazioso (agr-odoo), Sébastien Theys, david, Nasreddin (bon), Vincent Schippefilt, fw-bot, Lucas Lefèvre, Nasreddin Boulif (bon), nie, fja-odoo, jbm-odoo, Arnaud Joset, Romain Estievenart, Benjamin Vray, Geoffroy Larue, mafo-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
    - web_editor
    - http_routing
    - mail
    - base_setup
    - bus
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds required base code for a fully integrated customer portal.
It contains the base controller class and base templates. Business addons
will add their specific templates and controllers to extend the customer
portal.

This module contains most code coming from odoo v10 website_portal. Purpose
of this module is to allow the display of a customer portal without having
a dependency towards website edition and customization capabilities.

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
_assets_frontend_helpers _assets_frontend_helpers ir.ui.view qweb Inherits web_editor._assets_frontend_helpers
_assets_primary_variables _assets_primary_variables ir.ui.view qweb Inherits web._assets_primary_variables
assets_frontend Portal Assets ir.ui.view qweb Inherits web_editor.assets_frontend
assets_tests Portal Assets Tests ir.ui.view qweb Inherits web.assets_tests
frontend_layout Main Frontend Layout ir.ui.view qweb Inherits web.frontend_layout
message_thread message_thread ir.ui.view qweb New
my_account_link Link to frontend portal ir.ui.view qweb Inherits portal.frontend_layout
pager Pager ir.ui.view qweb New
portal.signature_form Ask Signature ir.ui.view qweb New
portal_404 portal_404 ir.ui.view qweb Inherits http_routing.404
portal_archive_groups Portal Archive Groups ir.ui.view qweb New
portal_back_in_edit_mode Back to edit mode ir.ui.view qweb New
portal_breadcrumbs Portal Breadcrumbs ir.ui.view qweb New
portal_contact Contact ir.ui.view qweb New
portal_docs_entry My Portal Docs Entry ir.ui.view qweb New
portal_layout Portal Layout ir.ui.view qweb New
portal_my_details portal_my_details ir.ui.view qweb New
portal_my_home My Portal ir.ui.view qweb New
portal_record_layout Portal single record layout ir.ui.view qweb New
portal_record_sidebar My Portal Record Sidebar ir.ui.view qweb New
portal_searchbar Portal Search Bar ir.ui.view qweb New
portal_share_template portal_share_template ir.ui.view qweb New
portal_share_wizard portal.share.wizard portal.share form New
portal_show_sign_in Show Sign In ir.ui.view qweb Inherits portal.frontend_layout
portal_sidebar Sidebar ir.ui.view qweb New
portal_table My Portal Table ir.ui.view qweb New
record_pager Portal Record Pager ir.ui.view qweb New
wizard_view Grant Portal Access portal.wizard form New
Models touched (8)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • portal_message_format(self)

New fields (1)
  • website_message_ids One2many → mail.message
    auto_join=True domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (3)
  • access_token Char
    copy=False args: 'Security Token'
  • access_url Char
    compute='_compute_access_url' help='Customer Portal URL' args: 'Portal Access URL'
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
Public methods (3)
  • action_share(self)
    @api.model
  • get_access_action(self, access_uid=None)
    Instead of the classic form view, redirect to the online document for portal users or if force_website=True in the context.
  • get_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None)
    Get a portal url for this model, including access_token. The associated route must handle the flags for them to have any effect. - suffix: string to append to the url, before the query string - report_type: report_type query string, often one of: html, pdf, text - download: set the download query string to true - query_string: additional query string - anchor: string to append after the anchor #

New fields (6)
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
  • note Text
    help='Add extra content to display in the email'
  • partner_ids Many2many → res.partner
    required=True string='Recipients' args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • share_link Char
    compute='_compute_share_link' string='Link'
Public methods (2)
  • action_send_mail(self)
  • default_get(self, fields)
    @api.model

New fields (2)
  • user_ids One2many → portal.wizard.user
    default=_default_user_ids string='Users' args: 'portal.wizard.user', 'wizard_id'
  • welcome_message Text
    help='This text is included in the email sent to new users of the portal.' args: 'Invitation Message'
Public methods (1)
  • action_apply(self)

New fields (5)
  • email Char
    args: 'Email'
  • in_portal Boolean
    args: 'In Portal'
  • partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True string='Contact' args: 'res.partner'
  • user_id Many2one → res.users
    string='Login User' args: 'res.users'
  • wizard_id Many2one → portal.wizard
    ondelete='cascade' required=True string='Wizard' args: 'portal.wizard'
Public methods (2)
  • action_apply(self)
  • get_error_messages(self)

New fields (0)

No new fields.

Public methods (1)
  • can_edit_vat(self)
    `vat` is a commercial field, synced between the parent (commercial entity) and the children. Only the commercial entity should be able to edit it (as in backend).
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/portal
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Aaron Bohy, Pedro M. Baeza, ged-odoo, Jeremy Kersten, GitHub, Lucas Perais (lpe), Yannick Tivisse, qsm-odoo, Romain Derie, Christophe Monniez, Jorge Pinna Puissant, Jairo Llopis, Toufik Ben Jaa, XavierDo, Julien Castiaux, Xavier-Do, jerome hanke (jhk), Sébastien Theys, David Beguin, nie, Benjamin Vray
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - http_routing
    - web
    - base
    - mail
    - base_setup
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds required base code for a fully integrated customer portal.
It contains the base controller class and base templates. Business addons
will add their specific templates and controllers to extend the customer
portal.

This module contains most code coming from odoo v10 website_portal. Purpose
of this module is to allow the display of a customer portal without having
a dependency towards website edition and customization capabilities.

Code Analysis

Views touched (27)
XML IDNameModelTypeStatus
_assets_frontend_helpers _assets_frontend_helpers ir.ui.view qweb Inherits web._assets_frontend_helpers
_assets_primary_variables _assets_primary_variables ir.ui.view qweb Inherits web._assets_primary_variables
assets_common Portal Common Assets ir.ui.view qweb Inherits web.assets_common
assets_frontend Portal Assets ir.ui.view qweb Inherits web.assets_frontend
frontend_layout Main Frontend Layout ir.ui.view qweb New
message_thread message_thread ir.ui.view qweb New
my_account_link Link to frontend portal ir.ui.view qweb Inherits portal.frontend_layout
pager Pager ir.ui.view qweb New
portal_archive_groups Portal Archive Groups ir.ui.view qweb New
portal_back_in_edit_mode Back to edit mode ir.ui.view qweb New
portal_breadcrumbs Portal Breadcrumbs ir.ui.view qweb New
portal_contact Contact ir.ui.view qweb New
portal_docs_entry My Portal Docs Entry ir.ui.view qweb New
portal_layout Portal Layout ir.ui.view qweb New
portal_my_details portal_my_details ir.ui.view qweb New
portal_my_home My Portal ir.ui.view qweb New
portal_record_layout Portal single record layout ir.ui.view qweb New
portal_record_sidebar My Portal Record Sidebar ir.ui.view qweb New
portal_searchbar Portal Search Bar ir.ui.view qweb New
portal_share_template portal_share_template ir.ui.view qweb New
portal_share_wizard portal.share.wizard portal.share form New
portal_show_sign_in Show Sign In ir.ui.view qweb Inherits portal.frontend_layout
portal_sidebar Sidebar ir.ui.view qweb New
portal_signature Ask Signature ir.ui.view qweb New
portal_table My Portal Table ir.ui.view qweb New
record_pager Portal Record Pager ir.ui.view qweb New
wizard_view Grant Portal Access portal.wizard form New
Models touched (8)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • portal_message_format(self)
    @api.multi

New fields (1)
  • website_message_ids One2many → mail.message
    auto_join=True domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (3)
  • access_token Char
    copy=False args: 'Security Token'
  • access_url Char
    compute='_compute_access_url' help='Customer Portal URL' args: 'Portal Access URL'
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
Public methods (4)
  • action_share(self)
    @api.model
  • get_access_action(self, access_uid=None)
    @api.multi
    Instead of the classic form view, redirect to the online document for portal users or if force_website=True in the context.
  • get_base_url(self)
    @api.multi
    Get the base URL for the current model. Defined here to be overriden by website specific models. The method has to be public because it is called from mail templates.
  • get_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None)
    @api.multi
    Get a portal url for this model, including access_token. The associated route must handle the flags for them to have any effect. - suffix: string to append to the url, before the query string - report_type: report_type query string, often one of: html, pdf, text - download: set the download query string to true - query_string: additional query string - anchor: string to append after the anchor #

New fields (6)
  • access_warning Text
    compute='_compute_access_warning' args: 'Access warning'
  • note Text
    help='Add extra content to display in the email'
  • partner_ids Many2many → res.partner
    required=True string='Recipients' args: 'res.partner'
  • res_id Integer
    required=True args: 'Related Document ID'
  • res_model Char
    required=True args: 'Related Document Model'
  • share_link Char
    compute='_compute_share_link' string='Link'
Public methods (2)
  • action_send_mail(self)
    @api.multi
  • default_get(self, fields)
    @api.model

New fields (2)
  • user_ids One2many → portal.wizard.user
    default=_default_user_ids string='Users' args: 'portal.wizard.user', 'wizard_id'
  • welcome_message Text
    help='This text is included in the email sent to new users of the portal.' args: 'Invitation Message'
Public methods (1)
  • action_apply(self)
    @api.multi

New fields (5)
  • email Char
    args: 'Email'
  • in_portal Boolean
    args: 'In Portal'
  • partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True string='Contact' args: 'res.partner'
  • user_id Many2one → res.users
    string='Login User' args: 'res.users'
  • wizard_id Many2one → portal.wizard
    ondelete='cascade' required=True string='Wizard' args: 'portal.wizard'
Public methods (2)
  • action_apply(self)
    @api.multi
  • get_error_messages(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • can_edit_vat(self)
    `vat` is a commercial field, synced between the parent (commercial entity) and the children. Only the commercial entity should be able to edit it (as in backend).
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/portal
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Fabien Meghazi, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Géry Debongnie, Jeremy Kersten, Lucas Perais (lpe), qsm-odoo, Odoo Online, jem-odoo, rde, fda-odoo, XavierDo, Adrien Dieudonné, Alex Tuyls
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - http_routing
    - web
    - base
    - mail
    - base_setup
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds required base code for a fully integrated customer portal.
It contains the base controller class and base templates. Business addons
will add their specific templates and controllers to extend the customer
portal.

This module contains most code coming from odoo v10 website_portal. Purpose
of this module is to allow the display of a customer portal without having
a dependency towards website edition and customization capabilities.

Code Analysis

Views touched (16)
XML IDNameModelTypeStatus
assets_common Portal Common Assets ir.ui.view qweb Inherits web.assets_common
assets_frontend Portal Assets ir.ui.view qweb Inherits web.assets_frontend
frontend_layout Main Frontend Layout ir.ui.view qweb New
message_thread message_thread ir.ui.view qweb New
my_account_link Link to frontend portal ir.ui.view qweb Inherits portal.frontend_layout
pager Pager ir.ui.view qweb New
portal_archive_groups Portal Archive Groups ir.ui.view qweb New
portal_contact Contact ir.ui.view qweb New
portal_layout Portal Layout ir.ui.view qweb New
portal_my_details portal_my_details ir.ui.view qweb New
portal_my_home My Portal ir.ui.view qweb New
portal_searchbar Portal Search Bar ir.ui.view qweb New
portal_show_sign_in Show Sign In ir.ui.view qweb Inherits portal.frontend_layout
portal_signature Ask Signature ir.ui.view qweb New
record_pager Portal Record Pager ir.ui.view qweb New
wizard_view Portal Access Management portal.wizard form New
Models touched (6)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • portal_message_format(self)
    @api.multi

New fields (1)
  • website_message_ids One2many → mail.message
    auto_join=True domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (1)
  • portal_url Char
    compute='_compute_portal_url' help='Customer Portal URL' args: 'Portal Access URL'
Public methods (1)
  • get_share_url(self)

New fields (3)
  • portal_id Many2one → res.groups
    default=_default_portal domain=[('is_portal', '=', True)] help='The portal that users can be added in or removed from.' required=True string='Portal' args: 'res.groups'
  • user_ids One2many → portal.wizard.user
    string='Users' args: 'portal.wizard.user', 'wizard_id'
  • welcome_message Text
    help='This text is included in the email sent to new users of the portal.' args: 'Invitation Message'
Public methods (2)
  • action_apply(self)
    @api.multi
  • onchange_portal_id(self)
    @api.onchange('portal_id')

New fields (5)
  • email Char
    args: 'Email'
  • in_portal Boolean
    args: 'In Portal'
  • partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True string='Contact' args: 'res.partner'
  • user_id Many2one → res.users
    string='Login User' args: 'res.users'
  • wizard_id Many2one → portal.wizard
    ondelete='cascade' required=True string='Wizard' args: 'portal.wizard'
Public methods (2)
  • action_apply(self)
    @api.multi
  • get_error_messages(self)
    @api.multi
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/portal
VERSION
VERSION 1.0
CATEGORY
CATEGORYExtra Tools
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Christophe Simonis, Jérome Maes, Julien Legros, qdp-odoo, Jeremy Kersten, Yannick Tivisse, Toufik Ben Jaa
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - auth_signup
    - base_setup
    - web_kanban
    - web
    - mail
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Customize access to your Odoo database to external users by creating portals.
================================================================================
A portal defines a specific user menu and access rights for its members.  This
menu can be seen by portal members, public users and any other user that
have the access to technical features (e.g. the administrator).
Also, each portal member is linked to a specific partner.

The module also associates user groups to the portal users (adding a group in
the portal automatically adds it to the portal users, etc).  That feature is
very handy when used in combination with the module 'share'.
    

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
group_form_view Portal Form res.groups field Inherits base.view_groups_form
group_search_view Group Search res.groups field Inherits base.view_groups_search
wizard_view Portal Access Management portal.wizard form New
Models touched (3)

New fields (3)
  • portal_id Many2one → res.groups
    default=_default_portal domain=[('is_portal', '=', True)] help='The portal that users can be added in or removed from.' required=True string='Portal' args: 'res.groups'
  • user_ids One2many → portal.wizard.user
    string='Users' args: 'portal.wizard.user', 'wizard_id'
  • welcome_message Text
    help='This text is included in the email sent to new users of the portal.' args: 'Invitation Message'
Public methods (2)
  • action_apply(self)
    @api.multi
  • onchange_portal_id(self)
    @api.onchange('portal_id')

New fields (5)
  • email Char
    args: 'Email'
  • in_portal Boolean
    args: 'In Portal'
  • partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True string='Contact' args: 'res.partner'
  • user_id Many2one → res.users
    string='Login User' args: 'res.users'
  • wizard_id Many2one → portal.wizard
    ondelete='cascade' required=True string='Wizard' args: 'portal.wizard'
Public methods (2)
  • action_apply(self)
    @api.multi
  • get_error_messages(self)
    @api.multi

New fields (1)
  • is_portal Boolean
    help='If checked, this group is usable as a portal.' args: 'Portal'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/portal
VERSION
VERSION 1.0
CATEGORY
CATEGORYExtra Tools
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Richard Mathot, Aaron Bohy, Damien Bouvy, Yannick Tivisse, odoo-tac
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:31
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - auth_signup
    - base_setup
    - web_kanban
    - web
    - mail
    - bus
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Customize access to your OpenERP database to external users by creating portals.
================================================================================
A portal defines a specific user menu and access rights for its members.  This
menu can be seen by portal members, public users and any other user that
have the access to technical features (e.g. the administrator).
Also, each portal member is linked to a specific partner.

The module also associates user groups to the portal users (adding a group in
the portal automatically adds it to the portal users, etc).  That feature is
very handy when used in combination with the module 'share'.
    

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
group_form_view Portal Form res.groups field Inherits base.view_groups_form
group_search_view Group Search res.groups field Inherits base.view_groups_search
wizard_view Portal Access Management portal.wizard form New
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/portal
VERSION
VERSION 1.0
CATEGORY
CATEGORYPortal
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Atul Patel (OpenERP), Odoo Translation Bot, Turkesh Patel (Open ERP), Christophe Matthieu, ajay javiya (OpenERP), Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Vo Minh Thu, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Denis Ledoux, Fabien Meghazi, ggh-openerp, Christophe Simonis, Xavier Morel, Kersten Jeremy, Amit Bhavsar (Open ERP), xmo-odoo, Amit Vora, Richard Mathot, jke-openerp, bth-openerp, Kuldeep Joshi, ima-openerp, GitHub, Chirag Dodiya (OpenERP), nafex
WEBSITE
WEBSITEhttps://www.odoo.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - share
    - mail
    - base_setup
    - web_kanban
    - web
    - auth_signup
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Customize access to your OpenERP database to external users by creating portals.
================================================================================
A portal defines a specific user menu and access rights for its members.  This
menu can be seen by portal members, public users and any other user that
have the access to technical features (e.g. the administrator).
Also, each portal member is linked to a specific partner.

The module also associates user groups to the portal users (adding a group in
the portal automatically adds it to the portal users, etc).  That feature is
very handy when used in combination with the module 'share'.
    

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
assets_backend portal assets ir.ui.view qweb Inherits web.assets_backend
group_form_view Portal Form res.groups field Inherits base.view_groups_form
group_search_view Group Search res.groups field Inherits base.view_groups_search
share_step1_form_portal share.step1.form.portal share.wizard xpath Inherits share.share_step1_form
share_step2_form_portal share.step2.form.portal share.wizard xpath Inherits share.share_step2_form
wizard_user_tree_view Portal Users portal.wizard.user tree New
wizard_view Portal Access Management portal.wizard form New
Models touched (4)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • check_access_rule(self, cr, uid, ids, operation, context=None)
    Add Access rules of mail.message for non-employee user: - read: - raise if the type is comment and subtype NULL (internal note)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • copy_share_group_access_and_delete(self, cr, wizard_data, share_group_id, context=None)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/7.0/portal
VERSION
VERSION 1.0
CATEGORY
CATEGORYPortal
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Atul Patel (OpenERP), Randhir Mayatra (OpenERP), Odoo Translation Bot, Christophe Matthieu, Pinakin Nayi (OpenERP), Harry (OpenERP), Antonin Bourguignon, ajay javiya (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Purnendu Singh (OpenERP), Fabien Pinckaers, Antony Lesuisse, Bharat Devnani (OpenERP), Olivier Dony, Twinkle (OpenERP), Thibault Delavallée, Vo Minh Thu, Arnaud Pineux, pso (OpenERP), Sbh (Openerp), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Kuldeep Joshi (OpenERP), Denis Ledoux, ara@tinyerp.com, Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, Sanjay Gohel (Open ERP), help, Christophe Simonis, Khushboo Bhatt (Open ERP), Amit (OpenERP), MVA
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:43:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - share
    - mail
    - base_setup
    - web_kanban
    - web
    - auth_signup
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Customize access to your OpenERP database to external users by creating portals.
================================================================================
A portal defines a specific user menu and access rights for its members.  This
menu can ben seen by portal members, anonymous users and any other user that
have the access to technical features (e.g. the administrator).
Also, each portal member is linked to a specific partner.

The module also associates user groups to the portal users (adding a group in
the portal automatically adds it to the portal users, etc).  That feature is
very handy when used in combination with the module 'share'.
    

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
acquirer_form portal.payment.acquirer form New
acquirer_list portal.payment.acquirer tree New
acquirer_search portal.payment.acquirer search New
group_form_view Portal Form res.groups field Inherits base.view_groups_form
group_search_view Group Search res.groups field Inherits base.view_groups_search
share_step1_form_portal share.step1.form.portal share.wizard xpath Inherits share.share_step1_form
share_step2_form_portal share.step2.form.portal share.wizard xpath Inherits share.share_step2_form
wizard_user_tree_view Portal Users portal.wizard.user tree New
wizard_view Portal Access Management portal.wizard form New
Models touched (4)

New fields (0)

No new fields.

Public methods (1)
  • check_access_rule(self, cr, uid, ids, operation, context=None)
    Add Access rules of mail.message for non-employee user: - read: - raise if the type is comment and subtype NULL (internal note)

New fields (0)

No new fields.

Public methods (2)
  • render(self, cr, uid, id, object, reference, currency, amount, context=None, **kwargs)
    Renders the form template of the given acquirer as a mako template
  • render_payment_block(self, cr, uid, object, reference, currency, amount, context=None, **kwargs)
    Renders all visible payment acquirer forms for the given rendering context, and return them wrapped in an appropriate HTML block, ready for direct inclusion in an OpenERP v7 form view

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • copy_share_group_access_and_delete(self, cr, wizard_data, share_group_id, context=None)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/6.1/portal
VERSION
VERSION 1.0
CATEGORY
CATEGORYPortal
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Stephane Wirtel, Numerigraphe - Lionel Sausin, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Kuldeep Joshi (OpenERP), olt@tinyerp.com, Christophe Simonis, Carlos Vásquez, Israel Fermin Montilla, Kirti Savalia (OpenERP)
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:41:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - share
    - mail
    - base_tools
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module defines 'portals' to customize the access to your OpenERP database
for external users.

A portal defines customized user menu and access rights for a group of users
(the ones associated to that portal).  It also associates user groups to the
portal users (adding a group in the portal automatically adds it to the portal
users, etc).  That feature is very handy when used in combination with the
module 'share'.
    

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
portal_form_view Portal Form res.portal page Inherits base.view_groups_form
portal_list_view Portal List res.portal tree New
share_step1_form_portal share.step1.form.portal share.wizard xpath Inherits share.share_step1_form
share_step2_form_portal share.step2.form.portal share.wizard xpath Inherits share.share_step2_form
view_users_form res.portal.users.form res.users field Inherits base.view_users_form
wizard_user_form_view Portal User res.portal.wizard.user form New
wizard_user_tree_view Portal Users res.portal.wizard.user tree New
wizard_view Add Portal Access res.portal.wizard form New
Models touched (0)

No models found for this module.