Repository
odoo/odoo · module folder
Module version
1.0
Category
Hidden
Folder size
75.73 MB
License
LGPL-3
Application
No
Auto-installable
Yes
Website
None
Last tracking update
2026-08-20 22:13:23
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Olivier Dony, Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Denis Ledoux, David Monjoie, Joren Van Onder, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, Aaron Bohy, Géry Debongnie, Lucas Perais (lpe), Yannick Tivisse, qsm-odoo, Laurent Smet, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Lucas Perais, Alexandre Kühn, Arnold Moyaux, Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, Paul Morelle, Sébastien Theys, Julien Mougenot, Anh Thao Pham (pta), svs-odoo, Samuel Degueldre, std-odoo, Achraf (abz), Nasreddin Boulif (bon), Prakash Prajapati, Rémy Voet (ryv), Tiffany Chang (tic), Pierre Rousseau, Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, abd-msyukyu-odoo, William Braeckman, Romain Estievenart, bit-odoo, Benjamin Vray, Benoit Socias, Sylvain Francis, Stanislas Sobieski, william-andre, JF Aubert, yhu-odoo, Didier (did), Antoine Guenet, Florian Charlier, Patrick Hoste, Abdelouahab (abla), Florian Gilbert, Mathieu Walravens, luvi, Hubert Van De Walle, Valentin Chevalier, Renaud Thiry, Julien Banken, Vincent Larcin, niyasraphy, Habib (ayh), tsm-odoo, Laurent Desausoi, Louis Wicket (wil), Thomas Lefebvre (thle), alsh-odoo, Pedram (PEBR), Gaetan Vanden Bergh (gavb), Maximilien (malb), Victor Piryns (pivi), Julien (jula), Thomas Becquevort (thbe), Mahamadasif Ansari, amdi-odoo, Pierre-Yves Dufays, Pieter Claeys (clpi), Robin Lejeune (role), Louis (loco), Levi Siuzdak (sile), Maruan Aguerdouh (magm), Dylan Kiss (dyki), Paolo Gatti, Bruno Boi, FrancoisGe, Valeriya(vchu), Mayurrajsinh Rathod, Rahul Prajapati, Chong Wang (cwg), Simon Goffaux (sigo), Adrien Schoffeniels, Vivek Pathak, bram1000, Martin Maes, Xavier Bol (xbo), Brieuc-brd, micheledic, Louis Travaux, Mahdi Cheikh Rouhou (macr), Arnaud Sibille, omra-odoo, Zelong Lin, rajh-odoo, shag-odoo, Walid (wasa), Deependra Solanki, maad-odoo, aktr-odoo, Mattis Megevand, lase@odoo.com, Maryam Kia, Maxime de Neuville, Mehdi Outagant (MOU), reka-odoo, “Beekan”, Bruno Boi (boi), dhba, Julien Carion (juca), Bastien Fafchamps (bafa), adsh-odoo, mega, Tanguy Quéguineur, TSO, Alex Kühn, SaddemAmine, Ritika Rathore, Lina (liew), nihp-odoo, adch-odoo, Adnan Saiyed, Chrysanthe (chgo), sami odoo, Sanjay Sharma, mano-odoo, Max Whale, Hussein Ebrahim(hyhe), Joseph (jcb), Loukas Wets (lowe), Mathieu Coutant, Xavier Luyckx (xlu), guce, yagp-odoo, Abdelrahman Mahmoud (amah), Stéphane Diez, kawkb, Antoine (anso), sabr, Manushi Shah, Abdo Mongy, Léo Gizard, Arib Ansari, LauraCForgeFlow, Pierre Pulinckx (PIPU), Sébastien (blse), paru-odoo, Hesham Saleh, David Monnom, Victor Miguel Armenta Carrillo, Maira Salazar (srma), sben-odoo, AhmedElemary57, gvar-odoo, Trinh Ngoc Hung, abdelrahmanfawzy, Christopher Maloney (cmal), Chris Duvivier, David Van Droogenbroeck (DROD), Mohammad Abdulmoneim (abdu), Iván Todorovich, djameltouati, khsr-odoo, Rémi Rahir (rar), Lucas Lefèvre (lul), Pierre Lamotte (pila), Pierre Pulinckx, wt, Anton Romanova (roan), Bastien PIERRE, fdardenne, Michaël Mattiello, K Theja (kthe), Corentin Heinix (cohe), zel-odoo, Carmine, pish-odoo, lse-odoo, Thomas Josse (THJO), Krzysztof Magusiak (krma), kkuj-odoo, Ajit Singh, yavy-odoo, krip-odoo, Hazem Ibrahim, zadh-odoo, Basioni (basm), vpan-odoo, kdes-odoo, vlst-odoo, Sylvio Poliart (sypol), Meet Jivani [MEJI], Hadi El Yakhni, nsirjacobs, Gurpreet Singh, mjvi-odoo, bhra-odoo, mojem, bhna-odoo, Dirk Douglas, Ayush Chauhan (aych), Giorgio Tocco (gito), akha, MAGREMENT, sawer, igbe, times-odoo, Tudor-Calin Panzaru (tupan), Julien Launois (jula), Laetitia (ldau), rusp-odoo, aans-odoo, adip-odoo, alap-odoo, Augustin (duau), Serhii Rubanskyi, romo, Alessandro Lupo, macs-odoo, Kai Chang (kacha), suju-odoo, ramh, Waleed Elgamal, leclerc-leo, Saurabh, Amr Elkhatieb, dhrp-odoo, abdrahmanrashed, Yash Tiwari (Yatiw), Nisarg (nipl), Bruno BOI, assh-odoo, Robert Smith (rosm), Beekoan, cro, Elliot ELCO, Lionel Piraux (lipi), Kevin Gerard (kege), pmah-odoo, nmak-odoo, Benoit Socias (bso), Ziri, Maxime de Neuville (mane), maap-odoo, Aurélien Bertrand, damrOdoo, Mohamed Barakat, Sébastien Geelen, saurabh, Omar Khalil (omkha), sbbh-odoo, Stephane Vanmeerhaeghe (stva), Eve Lin (evlin), lebm-odoo, alan-odoo, Julien (jdeh), Romaric MOYEUVRE, ibo-odoo, raja prasad, Akash, jowes-odoo, Farah (ahmfa), akth-odoo, MostafaTwfiq, Takahiro SUNAGA, Julien Carion, Nikhil Kajavadra, ELCO, Ricard Calvo, Thomas des Touches, karygauss03, Guillaume Jacquet, Oussema Heni, Claire Nguyen (clan), mear-odoo, Dylan Provoost, Kai (kache), Sreedev Kodichath (srkod), Dhrumit Parmar, FedericoBraidi, Marceline (matho), Vedant Pandey (vpan-odoo), Mariano I. Baragiola, Julien Coppin (jucop)
Odoo dependencies
odoo/odoo:
Python dependencies
None
System dependencies
None
Required by
api_doc, attachment_indexation, attribute_set, auth_oauth, auth_passkey, auth_password_policy, auth_signup, auth_totp, barcodes, base_export_manager, base_iban, base_import, base_import_module, base_report_to_printer, base_rest, base_search_custom_field_filter, base_setup, base_user_signature, base_write_diff, bus, date_range, dbfilter_from_header, fs_image, google_address_autocomplete, hr, html_editor, http_routing, iap, iot_base, l10n_jp_address_layout, l10n_th_base_utils, mail_activity_team, mail_plugin, onboarding, onchange_helper, portal, project, queue_job, report_alternative_layout, report_context, report_csv, report_partner_address, report_py3o, report_qweb_element_page_visibility, report_qweb_encrypt, report_qweb_parameter, report_wkhtmltopdf_param, report_xlsx, report_xml, resource, spreadsheet, test_http, test_import_export, test_orm, test_read_group, test_rpc, test_search_panel, test_testing_utilities, tms_sale, transifex, utm, web_calendar_slot_duration, web_chatter_position, web_company_context_highlight, web_dark_mode, web_date_format_numeric, web_dialog_size, web_environment_ribbon, web_favicon, web_form_banner, web_group_expand, web_hierarchy, web_ir_actions_act_multi, web_ir_actions_act_window_message, web_m2x_options, web_no_bubble, web_notify, web_pwa_customize, web_refresher, web_remember_tree_column_width, web_responsive, web_search_with_and, web_timeline, web_tour, web_tree_many2one_clickable, web_widget_bokeh_chart, web_widget_one2many_tree_line_duplicate, web_widget_product_label_section_and_note_full_label, web_widget_product_label_section_and_note_name_visibility, web_widget_section_and_note_text_scrollable, web_widget_url_advanced, webservice_server_env, website
Description
Odoo Web core module.
========================

This module provides the core of the Odoo Web Client.

Code Analysis

Views touched (42)
XML IDNameModelTypeStatus
address_layout address_layout ir.ui.view qweb New
basic_layout basic_layout ir.ui.view qweb New
brand_promotion Brand Promotion ir.ui.view qweb New
brand_promotion_message Brand Promotion Message ir.ui.view qweb New
conditional_assets_tests Tests Assets Bundle ir.ui.view qweb New
config_speedscope_index config_speedscope_index ir.ui.view qweb New
external_layout external_layout ir.ui.view qweb New
external_layout_bold external_layout_bold ir.ui.view qweb New
external_layout_boxed external_layout_boxed ir.ui.view qweb New
external_layout_bubble external_layout_bubble ir.ui.view qweb New
external_layout_folder external_layout_folder ir.ui.view qweb New
external_layout_standard external_layout_standard ir.ui.view qweb New
external_layout_striped external_layout_striped ir.ui.view qweb New
external_layout_wave external_layout_wave ir.ui.view qweb New
html_container html_container ir.ui.view qweb New
html_preview_container html_preview_container ir.ui.view qweb New
internal_layout internal_layout ir.ui.view qweb New
minimal_layout minimal_layout ir.ui.view qweb New
preview_externalreport preview_externalreport ir.ui.view qweb New
preview_internalreport preview_internalreport ir.ui.view qweb New
preview_layout_report preview_layout_report ir.ui.view qweb New
report_invoice_wizard_preview report_invoice_wizard_preview ir.ui.view qweb New
report_layout Report layout ir.ui.view qweb New
report_preview_layout Report layout ir.ui.view qweb New
styles_company_report styles_company_report ir.ui.view qweb New
view_base_document_layout Document Layout base.document.layout form New
view_memory view_memory ir.ui.view qweb New
view_speedscope_index view_speedscope_index ir.ui.view qweb New
view_view_form_inherit_view ir.ui.view.form.inherit ir.ui.view form Inherits base.view_view_form
web.frontend_layout Frontend Layout ir.ui.view qweb Inherits web.layout
web.layout Web layout ir.ui.view qweb New
web.login Login ir.ui.view qweb New
web.login_layout Login Layout ir.ui.view qweb New
web.login_oauth Login OAuth ir.ui.view qweb New
web.login_successful Login successful ir.ui.view qweb New
web.neutralize_banner Neutralize Banner ir.ui.view qweb Inherits web.layout
web.qunit_suite web.qunit_suite ir.ui.view qweb New
web.test_helpers web.test_helpers ir.ui.view qweb New
web.unit_tests_suite web.unit_tests_suite ir.ui.view qweb New
web.webclient_bootstrap web.webclient_bootstrap ir.ui.view qweb New
webclient_offline webclient_offline ir.ui.view qweb New
webclient_scoped_app webclient_scoped_app ir.ui.view qweb New
HTTP endpoints (68)
Route(s)HandlerAuthTypeMethodsFlags
/web/action/load Action.load user jsonrpc ALL sudo
/web/action/load_breadcrumbs Action.load_breadcrumbs user jsonrpc ALL
/web/action/run Action.run user jsonrpc ALL
/web/binary/company_logo, /logo, /logo.png Binary.company_logo none http ALL
/web/assets/<string:unique>/<string:filename> Binary.content_assets public http ALL sudo
/web/content, /web/content/<string:xmlid>, /web/content/<string:xmlid>/<string:filename>, /web/content/<int:id>, /web/content/<int:id>/<string:filename>, /web/content/<string:model>/<int:id>/<string:field>, /web/content/<string:model>/<int:id>/<string:field>/<string:filename> Binary.content_common public http ALL
/web/filestore/<path:_path> Binary.content_filestore none http ALL
/web/image, /web/image/<string:xmlid>, /web/image/<string:xmlid>/<string:filename>, /web/image/<string:xmlid>/<int:width>x<int:height>, /web/image/<string:xmlid>/<int:width>x<int:height>/<string:filename>, /web/image/<string:model>/<int:id>/<string:field>, /web/image/<string:model>/<int:id>/<string:field>/<string:filename>, /web/image/<string:model>/<int:id>/<string:field>/<int:width>x<int:height>, /web/image/<string:model>/<int:id>/<string:field>/<int:width>x<int:height>/<string:filename>, /web/image/<int:id>, /web/image/<int:id>/<string:filename>, /web/image/<int:id>/<int:width>x<int:height>, /web/image/<int:id>/<int:width>x<int:height>/<string:filename>, /web/image/<int:id>-<string:unique>, /web/image/<int:id>-<string:unique>/<string:filename>, /web/image/<int:id>-<string:unique>/<int:width>x<int:height>, /web/image/<int:id>-<string:unique>/<int:width>x<int:height>/<string:filename> Binary.content_image public http ALL sudo
/web/sign/get_fonts, /web/sign/get_fonts/<string:fontname> Binary.get_fonts none jsonrpc ALL
/web/binary/upload_attachment Binary.upload_attachment user http ALL
/web/export/csv CSVExport.web_export_csv user http ALL
/web/dataset/call_button, /web/dataset/call_button/<path:path> DataSet.call_button user jsonrpc ALL
/web/dataset/call_kw, /web/dataset/call_kw/<path:path> DataSet.call_kw user jsonrpc ALL
/web/database/backup Database.backup none http POST csrf off
/web/database/change_password Database.change_password none http POST csrf off
/web/database/create Database.create none http POST csrf off
/web/database/drop Database.drop none http POST csrf off
/web/database/duplicate Database.duplicate none http POST csrf off
/web/database/list Database.list none jsonrpc ALL
/web/database/manager Database.manager none http ALL
/web/database/restore Database.restore none http POST csrf off
/web/database/selector Database.selector none http ALL
/web/domain/validate Domain.validate user jsonrpc ALL sudo
/web/export/xlsx ExcelExport.web_export_xlsx user http ALL
/web/export/formats Export.formats user jsonrpc ALL
/web/export/get_fields Export.get_fields user jsonrpc ALL
/web/export/namelist Export.namelist user jsonrpc ALL
/web/health Home.health none http ALL
/ Home.index none http ALL
/web/login_successful Home.login_successful_external_user user http ALL website
/robots.txt Home.robots none http ALL
/web/become Home.switch_to_admin user http ALL
/web, /odoo, /odoo/<path:subpath>, /scoped_app/<path:subpath> Home.web_client none http ALL
/web/webclient/load_menus Home.web_load_menus user http GET
/web/login Home.web_login none http ALL
/web/model/get_definitions Model.get_model_definitions user http POST
/web_enterprise/partner/<model("res.partner"):partner>/vcard, /web/partner/vcard Partner.download_vcard user http ALL
/web/set_profiling Profiling.profile public http ALL
/web/profile_config/<profile> Profiling.profile_config user http ALL
/web/speedscope/<profile> Profiling.speedscope user http ALL sudo
/report/check_wkhtmltopdf ReportController.check_wkhtmltopdf user jsonrpc ALL
/report/barcode, /report/barcode/<barcode_type>/<path:value> ReportController.report_barcode public http ALL
/report/download ReportController.report_download user http ALL
/report/<converter>/<reportname>, /report/<converter>/<reportname>/<docids> ReportController.report_routes user http ALL website
/web/session/account Session.account user jsonrpc ALL sudo
/web/session/authenticate Session.authenticate none jsonrpc ALL
/web/session/check Session.check user jsonrpc ALL
/web/session/destroy Session.destroy user jsonrpc ALL
/web/session/get_lang_list Session.get_lang_list none jsonrpc ALL
/web/session/get_session_info Session.get_session_info user jsonrpc ALL
/web/session/logout Session.logout none http ALL
/web/session/modules Session.modules user jsonrpc ALL
/web/pivot/export_xlsx TableExporter.export_xlsx user http ALL
/web/view/edit_custom View.edit_custom user jsonrpc ALL sudo
/web/webclient/bootstrap_translations WebClient.bootstrap_translations none jsonrpc ALL
/web/bundle/<string:bundle_name> WebClient.bundle public http GET
/web/tests/legacy WebClient.test_suite user http ALL
/web/webclient/translations WebClient.translations public http ALL sudo
/web/tests WebClient.unit_tests_suite user http ALL
/web/webclient/version_info WebClient.version_info none jsonrpc ALL
/json/<path:subpath> WebJsonController.web_json user http ALL
/json/1/<path:subpath> WebJsonController.web_json_1 bearer http ALL
/odoo/offline WebManifest.offline public http GET
/scoped_app WebManifest.scoped_app public http GET
/scoped_app_icon_png WebManifest.scoped_app_icon_png public http GET
/web/manifest.scoped_app_manifest WebManifest.scoped_app_manifest public http GET
/web/service-worker.js WebManifest.service_worker public http GET
/web/manifest.webmanifest WebManifest.webmanifest public http GET
Models touched (15)

New fields (0)

No new fields.

Public methods (14)
  • formatted_read_group(self, domain: DomainType, groupby: <expr>=(), aggregates: <expr>=(), having: DomainType=(), offset: int=0, limit: <expr>=None, order: <expr>=None) -> <expr>
    @api.model@api.readonly
    A method similar to :meth:`_read_group` but with all the formatting needed by the webclient. :param domain: :ref:`A search domain <reference/orm/domains>`. Use an empty list to match all records. :param groupby: list of groupby descriptions by which the records will be grouped. A groupby description is either a field (then it will be grouped by that field) or a string ``'<field>:<granularity>'``. Right now, the only supported granularities are: * ``day`` * ``week`` * ``month`` * ``quarter`` * ``year`` and they only make sense for date/datetime fields. Additionally integer date parts are also supported: * ``year_number`` * ``quarter_number`` * ``month_number`` * ``iso_week_number`` * ``day_of_year`` * ``day_of_month`` * ``day_of_week`` * ``hour_number`` * ``minute_number`` * ``second_number`` :param aggregates: list of aggregates specification. Each element is ``'<field>:<agg>'`` (aggregate field with aggregation function ``agg``). The possible aggregation functions are the ones provided by `PostgreSQL <https://www.postgresql.org/docs/current/static/functions-aggregate.html>`_, except ``count_distinct`` and ``array_agg_distinct`` with the expected meaning. :param having: A domain where the valid "fields" are the aggregates. :param offset: optional number of groups to skip :param limit: optional max number of groups to return :param order: optional ``order by`` specification, for overriding the natural sort ordering of the groups, see :meth:`~.search`. :return: list of dict such as ``[{'groupy_spec': value, ...}, ...]`` containing: * the groupby values: ``{groupby[i]: <value>}`` * the aggregate values: ``{aggregates[i]: <value>}`` * ``'__extra_domain'``: list of tuples specifying the group search criteria * ``'__fold'``: boolean if a fold_name is set on the comodel and read_group_expand is activated :raise AccessError: if user is not allowed to access requested information
  • formatted_read_grouping_sets(self, domain: DomainType, grouping_sets: <expr>, aggregates: <expr>=(), *, order: <expr>=None)
    @api.model@api.readonly
    A method similar to :meth:`_read_grouping_set` but with all the formatting needed by the webclient. It is a multi groupby version of formatted_read_group allowing to have aggregates for different groupby specifications in a single SQL requests. :param domain: :ref:`A search domain <reference/orm/domains>`. Use an empty list to match all records. :param grouping_sets: list of list of groupby descriptions by which the records will be grouped. A groupby description is either a field (then it will be grouped by that field) or a string ``'<field>:<granularity>'``. Right now, the only supported granularities are: * ``day`` * ``week`` * ``month`` * ``quarter`` * ``year`` and they only make sense for date/datetime fields. Additionally integer date parts are also supported: * ``year_number`` * ``quarter_number`` * ``month_number`` * ``iso_week_number`` * ``day_of_year`` * ``day_of_month`` * ``day_of_week`` * ``hour_number`` * ``minute_number`` * ``second_number`` :param aggregates: list of aggregates specification. Each element is ``'<field>:<agg>'`` (aggregate field with aggregation function ``agg``). The possible aggregation functions are the ones provided by `PostgreSQL <https://www.postgresql.org/docs/current/static/functions-aggregate.html>`_, except ``count_distinct`` and ``array_agg_distinct`` with the expected meaning. :param order: optional ``order by`` specification, for overriding the natural sort ordering of the groups, see :meth:`~.search`. :return: list of list of dict such as ``[[{'groupy_spec': value, ...}, ...], ...]`` containing: * the groupby values: ``{groupby[i]: <value>}`` * the aggregate values: ``{aggregates[i]: <value>}`` * ``'__extra_domain'``: list of tuples specifying the group search criteria * ``'__fold'``: boolean if a fold_name is set on the comodel and read_group_expand is activated :raise AccessError: if user is not allowed to access requested information
  • onchange(self, values: dict, field_names: <expr>, fields_spec: dict)
    Perform an onchange on the given fields, and return the result. :param values: dictionary mapping field names to values on the form view, giving the current state of modification :param field_names: names of the modified fields :param fields_spec: dictionary specifying the fields in the view, just like the one used by :meth:`web_read`; it is used to format the resulting values When creating a record from scratch, the client should call this with an empty list as ``field_names``. In that case, the method first adds default values to ``values``, computes the remaining fields, applies onchange methods to them, and return all the fields in ``fields_spec``. The result is a dictionary with two optional keys. The key ``"value"`` is used to return field values that should be modified on the caller. The corresponding value is a dict mapping field names to their value, in the format of :meth:`web_read`, except for x2many fields, where the value is a list of commands to be applied on the caller's field value. The key ``"warning"`` provides a warning message to the caller. The corresponding value is a dictionary like:: { "title": "Be careful!", # subject of message "message": "Blah blah blah.", # full warning message "type": "dialog", # how to display the warning }
  • read_progress_bar(self, domain, group_by, progress_bar)
    @api.model@api.readonly
    Gets the data needed for all the kanban column progressbars. These are fetched alongside read_group operation. :param domain: the domain used in the kanban view to filter records :param group_by: the name of the field used to group records into kanban columns :param progress_bar: the ``<progressbar/>`` declaration attributes (field, colors, sum) :return: a dictionnary mapping group_by values to dictionnaries mapping progress bar field values to the related number of records
  • search_panel_select_multi_range(self, field_name, **kwargs)
    @api.model
    Return possible values of the field field_name (case select="multi"), possibly with counters and groups. :param field_name: the name of a filter field; possible types are many2one, many2many, selection. :param kwargs: additional features :param category_domain: domain generated by categories. Default is ``[]``. :param comodel_domain: domain of field values (if relational) (this parameter is used in :meth:`_search_panel_range`). Default is ``[]``. :param enable_counters: whether to count records by value. Default is ``False``. :param expand: whether to return the full range of field values in ``comodel_domain`` or only the field image values. Default is ``False``. :param filter_domain: domain generated by filters. Default is ``[]``. :param group_by: extra field to read on comodel, to group comodel records. :param group_domain: dict, one domain for each activated group for the group_by (if any). Those domains are used to fech accurate counters for values in each group. Default is ``[]`` (many2one case) or ``None``. :param limit: integer, maximal number of values to fetch. Default is ``None`` (no limit). :param search_domain: base domain of search. Default is ``[]``. :return: :: { 'values': a list of possible values, each being a dict with keys 'id' (value), 'name' (value label), '__count' (how many records with that value), 'group_id' (value of group), set if a group_by has been provided, 'group_name' (label of group), set if a group_by has been provided } or an object with an error message when limit is defined and reached.
  • search_panel_select_range(self, field_name, **kwargs)
    @api.model
    Return possible values of the field field_name (case select="one"), possibly with counters, and the parent field (if any and required) used to hierarchize them. :param field_name: the name of a field; of type many2one or selection. :param kwargs: additional features * category_domain: domain generated by categories. Default is ``[]``. * comodel_domain: domain of field values (if relational). Default is ``[]``. * enable_counters: whether to count records by value. Default is ``False``. * expand: whether to return the full range of field values in comodel_domain or only the field image values (possibly filtered and/or completed with parents if hierarchize is set). Default is ``False``. * filter_domain: domain generated by filters. Default is ``[]``. * hierarchize: determines if the categories must be displayed hierarchically (if possible). If set to true and ``_parent_name`` is set on the comodel field, the information necessary for the hierarchization will be returned. Default is ``True``. * limit: integer, maximal number of values to fetch. Default is ``None`` (no limit). * search_domain: base domain of search. Default is ``[]``. :return: :: { 'parent_field': parent field on the comodel of field, or False 'values': array of dictionaries containing some info on the records available on the comodel of the field 'field_name'. The display name, the __count (how many records with that value) and possibly parent_field are fetched. } or an object with an error message when limit is defined and is reached.
  • web_name_search(self, name, specification, domain=None, operator='ilike', limit=100)
    @api.model@api.readonly
  • web_override_translations(self, values)
    This method is used to override all the modal translations of the given fields with the provided value for each field. :param values: dictionary of the translations to apply for each field name ex: ``{ "field_name": "new_value" }``
  • web_read(self, specification: <expr>) -> <expr>
    @api.readonly
  • web_read_group(self, domain: DomainType, groupby: <expr>, aggregates: <expr>=(), limit: <expr>=None, offset: int=0, order: <expr>=None, *, auto_unfold: bool=False, opening_info: <expr>=None, unfold_read_specification: <expr>=None, unfold_read_default_limit: <expr>=80, groupby_read_specification: <expr>=None) -> <expr>
    @api.model@api.readonly
    Serves as the primary method for loading grouped data in list and kanban views. This method wraps :meth:`~.formatted_read_group` to return both the grouped data and the total number of groups matching the search domain. It also conditionally opens (unfolds) groups based on the `auto_unfold` parameter and the `__fold` key returned by :meth:`~.formatted_read_group`. A group is considered "open" if it contains a `__records` or `__groups` key. - `__records`: The result of a :meth:`~.web_search_read` call for the group. - `__groups`: The results of subgroupings. :param domain: :ref:`A search domain <reference/orm/domains>`. :param groupby: A list of groupby specification at each level, see :meth:`~.formatted_read_group`. :param aggregates: A list of aggregate specifications. see :meth:`~.formatted_read_group` :param limit: The maximum number of top-level groups to return. see :meth:`~.formatted_read_group` :param offset: The offset for the top-level groups. see :meth:`~.formatted_read_group` :param order: A sort string, as used in :meth:`~.search` :param auto_unfold: If `True`, automatically unfolds the first 10 groups according to their `__fold` key, if present; otherwise, it is unfolded by default. This is typically `True` for kanban views and `False` for list views. :param opening_info: The state of currently opened groups, used for reloading. :: opening_info = [{ "value": raw_value_groupby, "folded": True or False, ["offset": int,] # present if unfolded ["limit": int,] # present if unfolded ["progressbar_domain": progressbar_domain,] # present if unfolded, e.g., when clicking on a progress bar section ["groups": <opening_info>,] # present if unfolded }] :param unfold_read_specification: The read specification for :meth:`~.web_read` when unfolding a group. :param unfold_read_default_limit: The default record limit to apply when unfolding a group. :param groupby_read_specification: The :meth:`~.web_read` specification for reading the records that are being grouped on. This is mainly for list views with <groupby> leaves. {<groupby_spec>: <read_specification>} :return: A dictionary with the following structure: :: { 'groups': <groups>, 'length': <total_group_count>, } Where <groups> is the result of :meth:`~.formatted_read_group`, but with an added `__groups` key for subgroups or a `__records` key for the result of :meth:`~.web_read` for records within the group.
  • web_resequence(self, specification: <expr>, field_name: str='sequence', offset: int=0) -> <expr>
    Re-sequences a number of records in the model, by their ids. The re-sequencing starts at the first record of ``ids``, the sequence number starts at ``offset`` and is incremented by one after each record. The returning value is a read of the resequenced records with the specification given in the parameter. :param specification: specification for the read of the resequenced records :param field_name: field used for sequence specification, defaults to ``"sequence"`` :param offset: sequence number for first record in ``ids``, allows starting the resequencing from an arbitrary number, defaults to ``0``
  • web_save(self, vals, specification: <expr>, next_id=None) -> <expr>
  • web_save_multi(self, vals_list: <expr>, specification: <expr>) -> <expr>
  • web_search_read(self, domain, specification, offset=0, limit=None, order=None, count_limit=None)
    @api.model@api.readonly

New fields (26)
  • company_details Html
    default=_default_company_details readonly=False related='company_id.company_details'
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • country_id Many2one
    readonly=True related='company_id.country_id'
  • custom_colors Boolean
    compute='_compute_custom_colors' readonly=False
  • email Char
    readonly=True related='company_id.email'
  • external_report_layout_id Many2one
    readonly=False related='company_id.external_report_layout_id'
  • font Selection
    readonly=False related='company_id.font'
  • is_company_details_empty Boolean
    compute='_compute_empty_company_details'
  • layout_background Selection
    readonly=False related='company_id.layout_background'
  • layout_background_image Binary
    readonly=False related='company_id.layout_background_image'
  • logo Binary
    readonly=False related='company_id.logo'
  • logo_primary_color Char
    compute='_compute_logo_colors'
  • logo_secondary_color Char
    compute='_compute_logo_colors'
  • name Char
    readonly=True related='company_id.name'
  • paperformat_id Many2one
    readonly=False related='company_id.paperformat_id'
  • partner_id Many2one
    readonly=True related='company_id.partner_id'
  • phone Char
    readonly=True related='company_id.phone'
  • preview Html
    compute='_compute_preview' sanitize=False
  • preview_logo Binary
    related='logo' string='Preview logo'
  • primary_color Char
    readonly=False related='company_id.primary_color'
  • report_footer Html
    default=_default_report_footer readonly=False related='company_id.report_footer'
  • report_header Html
    readonly=False related='company_id.report_header'
  • report_layout_id Many2one → report.layout
    args: 'report.layout'
  • secondary_color Char
    readonly=False related='company_id.secondary_color'
  • vat Char
    readonly=True related='company_id.vat'
  • website Char
    readonly=True related='company_id.website'
Public methods (2)
  • document_layout_save(self)
  • extract_image_primary_secondary_colors(self, logo, white_threshold=225, mitigate=175)
    @api.model
    Identifies dominant colors First resizes the original image to improve performance, then discards transparent colors and white-ish colors, then calls the averaging method twice to evaluate both primary and secondary colors. :param logo: logo to process :param white_threshold: arbitrary value defining the maximum value a color can reach :param mitigate: arbitrary value defining the maximum value a band can reach :return: a 2-value tuple with hex values of primary and secondary colors

New fields (0)

No new fields.

Public methods (7)
  • color_scheme(self)
  • get_currencies(self)
    @api.deprecated("Deprecated since 19.0, use get_all_currencies on 'res.currency'")
  • get_frontend_session_info(self)
    @api.model
  • is_a_bot(cls)
    @classmethod
  • lazy_session_info(self)
    @api.model
  • session_info(self)
  • webclient_rendering_context(self)

New fields (0)

No new fields.

Public methods (2)
  • display_name_for(self, models)
    @api.model
    Returns the display names from provided models which the current user can access. The result is the same whether someone tries to access an inexistent model or a model they cannot access. :models list(str): list of technical model names to lookup (e.g. `["res.partner"]`) :return: list of dicts of the form `{ "model", "display_name" }` (e.g. `{ "model": "res_partner", "display_name": "Contact"}`)
  • get_available_models(self)
    @api.model
    Return the list of models the current user has access to, with their corresponding display name.

New fields (0)

No new fields.

Public methods (1)
  • record_to_html(self, record, field_name, options)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • load_web_menus(self, debug)
    Loads all menu items (all applications and their sub-menus) and processes them to be used by the webclient. Mainly, it associates with each application (top level menu) the action of its first child menu that is associated with an action (recursively), i.e. with the action to execute when the opening the app. :return: the menus (including the images in Base64)

New fields (0)

No new fields.

Public methods (1)
  • get_view_info(self)

New fields (0)

No new fields.

Public methods (1)
  • get_properties_base_definition(self, model_name, field_name)
    @api.model
    Return the base properties definition if we can read the model.

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (1)
  • web_app_name Char
    config_parameter='web.web_app_name' args: 'Web App Name'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • name_search(self, name='', domain=None, operator='ilike', limit=100)
    @api.model

New fields (1)
  • embedded_actions_config_ids One2many → res.users.settings.embedded.action
    args: 'res.users.settings.embedded.action', 'user_setting_id'
Public methods (2)
  • get_embedded_actions_settings(self)
  • set_embedded_actions_setting(self, action_id, res_id, vals)

New fields (7)
  • action_id Many2one → ir.actions.act_window
    export_string_translation=False ondelete='cascade' required=True args: 'ir.actions.act_window'
  • embedded_actions_order Char
    export_string_translation=False args: 'List order of embedded action ids'
  • embedded_actions_visibility Char
    export_string_translation=False args: 'List visibility of embedded actions ids'
  • embedded_visibility Boolean
    export_string_translation=False args: 'Is top bar visible'
  • res_id Integer
    export_string_translation=False
  • res_model Char
    export_string_translation=False required=True
  • user_setting_id Many2one → res.users.settings
    export_string_translation=False index='btree_not_null' ondelete='cascade' required=True args: 'res.users.settings'
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…