Repository
odoo/odoo · module folder
Module version
1.3
Category
Hidden
Folder size
106.37 MB
License
LGPL-3
Application
No
Auto-installable
Yes
Website
None
Last tracking update
2026-08-21 16:14:26
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Xavier ALT, Olivier Dony, Fabien Pinckaers, Raphael Collet, Christophe Simonis, Thibault Delavallée, odoo, Florent Xicluna, Josse Colpaert, Odoo Translation Bot, Denis Ledoux, Joren Van Onder, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, Aaron Bohy, Jeremy Kersten, Lucas Perais (lpe), Yannick Tivisse, qsm-odoo, Pierre Masereel, Laurent Smet, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Denis Vermylen, Lucas Perais, Toufik Ben Jaa, Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, Sébastien Theys, oco-odoo, Alvaro Fuentes, std-odoo, Achraf (abz), Prakash Prajapati, Rémy Voet (ryv), Tiffany Chang (tic), fja-odoo, Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, Hoang Tran, abd-msyukyu-odoo, Arnaud Joset, William Braeckman, Romain Estievenart, Arnaud Baes, Miquel Raïch, Stanislas Sobieski, william-andre, Florian Damhaut, Florian Vranckx, Florian Charlier, John (jol), Ruben Gomes, Aurelien van Delft (avd), Mathieu Walravens, luvi, Hubert Van De Walle, Florian(flg), Valentin Chevalier, Renaud Thiry, Julien Banken, Vincent Larcin, Ipsita Borisagar, tsm-odoo, Laurent Desausoi, Louis Wicket (wil), Thomas Lefebvre (thle), alsh-odoo, Gaetan Vanden Bergh (gavb), Adrien Widart (awt), Maximilien (malb), Victor Piryns (pivi), Thomas Becquevort (thbe), Mahamadasif Ansari, amdi-odoo, Gauthier Wala (gawa), Ali Alfie (alal), Pieter Claeys (clpi), Yosua Nicolaus, Levi Siuzdak (sile), Dylan Kiss (dyki), Paolo Gatti, Antoine Boonen, Jinane Maksoud, Antoine Dupuis (andu), Bruno Boi, Antoine (ande), Mayurrajsinh Rathod, Chong Wang (cwg), Leloup Loïc (lole), Adrien Schoffeniels, bram1000, tong-odoo, Xavier Bol (xbo), Brieuc-brd, Nguyễn Đại Dương, Mahdi Cheikh Rouhou (macr), Arnaud Sibille, Moises Lopez - https://www.vauxoo.com/, omra-odoo, Andrzej(pian), sesn-odoo, Nicolas Viseur (vin), guva-odoo, Walid (wasa), Paul Stroobant, Hesham, Aurelien MARIE (auma), Ethan Vincent, Maryam Kia, jorv-odoo, Serge Bayet (seba), reka-odoo, Sven Fuehr, Seif (segn), jugj-odoo, vava-odoo, Bruno Boi (boi), Julien Carion (juca), odoostan, adsh-odoo, Tanguy Quéguineur, SaddemAmine, Martin Trigaux (mat), Louis Gobert, nihp-odoo, Shubham Thanki, Emilio Pascual, aath-odoo, Chrysanthe (chgo), sami odoo, Sanjay Sharma, dijo-odoo, hatr-odoo, aamo-odoo, Joseph (jcb), thle-odoo, Mathieu Coutant, Patricia Daloze (pda), Khumam Alzagim, Xavier Luyckx (xlu), yagp-odoo, Yousef Alnashef (alny), Abdelrahman Mahmoud (amah), Claire (clbr), Rocío Vega, Manushi Shah, Hammad Arif, Léo Gizard, Sébastien (blse), Hesham Saleh, Julien Schwanen, Victor Miguel Armenta Carrillo, dija-odoo, sben-odoo, Logan Staelens, Arthur Nanson, Ricardo Gomes Rodrigues, aizu-odoo, roto-odoo, David Van Droogenbroeck (DROD), elhayyany, Cuong, Nguyen Minh Tran Manh, Mohammad Abdulmoneim (abdu), khsr-odoo, Pierre Pulinckx, Anton Romanova (roan), Bastien PIERRE, masm-odoo, K Theja (kthe), Shrey Mehta, Renaud Thiry (reth), Thomas Josse (THJO), Krzysztof Magusiak (krma), nape-odoo, Omar (OSAH), Ajit Singh, Armin-FalDiS, KonstantinosPaschopoulos, Christophe Matthieu (chm), Akash Pandey, PaoloYam, dvsh-odoo, nees-odoo, krip-odoo, Basioni (basm), sagu-odoo, utma-odoo, ijja-odoo, mojem, bhna-odoo, defl, Dirk Douglas, Giorgio Tocco (gito), romc-odoo, kinhosz, Elijah Tay (elct), Lulu Grimalkin (lugr), Yash Pathak, Jugurtha, Dhwani Patel, hisi-odoo, Alice Gaudon, adip-odoo, Augustin (duau), Davide Bonetto, Quentin Colla (qucol), pssh-odoo, suju-odoo, kmdi-odoo, path-odoo, Waleed Elgamal, leclerc-leo, Ayush Modi, Bruno BOI, assh-odoo, Robert Smith (rosm), Beekoan, cro, Elliot ELCO, Nesma Harraz (neha), matd-odoo, Mohamed Barakat, saurabh, Yannis Burkhalter, bepro@odoo, rugot-odoo, Toma Tomov, Randall Castro - https://www.vauxoo.com, Traina Ludo, Romain (roto), Zachary (zavan), Vincent Van Rossem, Jason (jaca), Kadam Darji, Mauricio Rubio Haro, jowes-odoo, soza-odoo, ELCO, lase, Do Anh Duy, flotchet, Cyril Moreau, panj-odoo, shmn-odoo, Claire Nguyen (clan), 3amo-magdy, Mohamed Ayman, Divyesh Vyas (divy), kiga-odoo, Omar Khair, Yusuf Köksal, Abdelrahman Ibrahim, bamu, MED-B, tharcisse, Ewetoye Ibrahim, Sakesun, calkikhunt
Odoo dependencies
None
Python dependencies
None
System dependencies
None
Required by
account_credit_control, analytic, attachment_zipped_download, auditlog, auth_ldap, auth_oauth, base_address_extended, base_automation, base_cancel_confirm, base_comment_template, base_country_state_translatable, base_cron_exclusion, base_edi, base_external_dbsource, base_iso3166, base_optional_quick_create, base_partition, base_partner_company_group, base_partner_sequence, base_revision, base_search_fuzzy, base_setup, base_sparse_field, base_substate, base_technical_features, base_technical_user, base_territory, base_time_window, base_ubl, base_unece, base_user_role, base_view_inheritance_extension, base_write_diff, bus, calendar, commission_oca, component, contacts, contract, currency_rate_update, database_cleanup, document_knowledge, endpoint_route_handler, field_vector, fleet, fs_storage, html_builder, html_editor, l10n_br_base, l10n_cn, l10n_co_electronic_invoice, l10n_co_withholding_advance, l10n_ec, l10n_es_aeat_partner_check, l10n_es_partner_mercantil, l10n_fi_banks, l10n_fr, l10n_fr_cog, l10n_fr_state, l10n_gt, l10n_hn, l10n_ir_states, l10n_jp_partner_title_qweb, l10n_ma, l10n_mx_catalogs, l10n_mx_catalogs_comex, l10n_mx_cfdi_comex, l10n_mx_cfdi_waybill, l10n_mx_sat, l10n_mz, l10n_pt, l10n_th_amount_to_text, l10n_th_base_sequence, l10n_us, mail, mail_outbound_static, mgmtsystem, module_auto_update, module_change_auto_install, operating_unit, partner_affiliate, partner_company_default, partner_company_type, partner_contact_access_link, partner_contact_personal_information_page, partner_country_lang, partner_country_state_required, partner_email_duplicate_warn, partner_iterative_archive, partner_mobile, partner_phone_secondary, partner_ref_unique, partner_supplier_ref, partner_title, partner_tz, pdf_xml_attachment, phone_validation, product, report_csv, report_xlsx, res_company_active, res_company_search_view, resource, rpc, sales_team, sentry, sequence_python, sequence_reset_period, server_action_mass_edit, server_environment, sms, social_media, storage_backend, test_assetsbundle, test_converter, test_inherit, test_inherits, test_lint, test_orm, test_read_group, test_testing_utilities, test_translation_import, test_uninstall, tms, transifex, uom, upgrade_analysis, utm, web, web_notify
Description
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

Views touched (182)
XML IDNameModelTypeStatus
act_report_xml_search_view ir.actions.report.search ir.actions.report search New
act_report_xml_view ir.actions.report ir.actions.report form New
act_report_xml_view_tree ir.actions.report.list ir.actions.report list New
action_view ir.actions.actions ir.actions.actions form New
action_view_search ir.actions.actions.search ir.actions.actions search New
action_view_tree ir.actions.actions.list ir.actions.actions list New
asset_view_form ir.asset form New
asset_view_search ir.asset search New
asset_view_tree ir.asset list New
base.language_install_view_form_lang_switch Switch to language base.language.install form New
base_partner_merge_automatic_wizard_form base.partner.merge.automatic.wizard.form base.partner.merge.automatic.wizard form New
change_password_own_form Change Own Password change.password.own form New
change_password_wizard_user_tree_view Change Password Users change.password.user list New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
contact_name contact_name ir.ui.view qweb New
demo_failures_dialog Demo Failure Dialog ir.demo_failure.wizard form New
demo_force_install_form ir.demo.form ir.demo form New
demo_wizard_form_view Demo Failure Form ir.demo_failure form New
edit_menu ir.ui.menu list New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
embedded_action_form ir.embedded.actions.form ir.embedded.actions form New
embedded_action_tree Embedded Actions ir.embedded.actions list New
enable_profiling_wizard Enable profiling base.enable.profiling.wizard form New
form_res_users_key_description API Key: description input form res.users.apikeys.description form New
form_res_users_key_show API Key: show res.users.apikeys.show form New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access.view.list ir.model.access list New
ir_access_view_tree_edition ir.model.access.view.list.edition ir.model.access list New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo list New
ir_cron_trigger_view_form ir.cron.trigger.view.form ir.cron.trigger form New
ir_cron_trigger_view_search ir.cron.trigger.view.search ir.cron.trigger search New
ir_cron_trigger_view_tree ir.cron.trigger.view.list ir.cron.trigger list New
ir_cron_view_calendar ir.cron calendar New
ir_cron_view_form ir.cron.view.form ir.cron form Inherits base.view_server_action_form
ir_cron_view_search ir.cron search New
ir_cron_view_tree ir.cron list New
ir_default_form_view ir.default form view ir.default form New
ir_default_search_view ir.default search view ir.default search New
ir_default_tree_view ir.default list view ir.default list New
ir_filters_view_edit_form ir.filters form Inherits base.ir_filters_view_form
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters list New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging list New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server list New
ir_profile_view_form IR Profile Form ir.profile form New
ir_profile_view_list IR Profile List ir.profile list New
ir_profile_view_search IR Profile Search ir.profile search New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.list ir.module.module list New
module_view_kanban Apps Kanban ir.module.module kanban New
no_contact no_contact ir.ui.view qweb New
paperformat_view_form paper_format_view_form report.paperformat form New
paperformat_view_tree paper_format_view_tree report.paperformat list New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_bank_view_search res.bank.view.search res.bank search New
res_config_settings_view_form res.config.settings.view.form res.config.settings form New
res_config_view_base res.config.view.base res.config form New
res_device_view_form res.device.form res.device form New
res_device_view_kanban res.device.kanban res.device kanban New
res_device_view_tree res.device.list res.device list New
res_lang_form res.lang.form res.lang form New
res_lang_search res.lang.search res.lang search New
res_lang_tree res.lang.list res.lang list New
res_partner_category_view_search res.partner.category.view.search res.partner.category search New
res_partner_industry_view_form Industry res.partner.industry form New
res_partner_industry_view_search res.partner.industry.view.search res.partner.industry search New
res_partner_industry_view_tree Industry res.partner.industry list New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_users_apikeys_view_kanban res.users.apikeys.kanban res.users.apikeys kanban New
res_users_identitycheck_view_form res.users.identitycheck form New
reset_view_arch_wizard_view Reset View Architecture reset.view.arch.wizard form New
sequence_view ir.sequence form New
sequence_view_tree ir.sequence list New
server_action_history_wizard_view Server Action History Wizard server.action.history.wizard form New
view_apikeys API Keys Listing res.users.apikeys list New
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment list New
view_base_import_language Import Translation base.language.import form New
view_base_language_install Load a Translation base.language.install form New
view_base_module_uninstall Uninstall module base.module.uninstall form New
view_base_module_update Module Update base.module.update form New
view_base_module_upgrade Module Upgrade base.module.upgrade form New
view_base_module_upgrade_install Module Upgrade Install base.module.upgrade form New
view_client_action_form ir.actions.client.form ir.actions.client form New
view_client_action_tree Client Actions ir.actions.client list New
view_company_form res.company.form res.company form New
view_company_tree res.company.list res.company list New
view_country_form res.country.form res.country form New
view_country_group_form res.country.group.form res.country.group form New
view_country_group_tree res.country.group.list res.country.group list New
view_country_search res.country.search res.country search New
view_country_state_form res.country.state.form res.country.state form New
view_country_state_search res.country.state.search res.country.state search New
view_country_state_tree res.country.state.list res.country.state list New
view_country_tree res.country.list res.country list New
view_currency_form res.currency.form res.currency form New
view_currency_kanban res.currency.kanban res.currency kanban New
view_currency_rate_form res.currency.rate.form res.currency.rate form New
view_currency_rate_search res.currency.rate.search res.currency.rate search New
view_currency_rate_tree res.currency.rate.list res.currency.rate list New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.list res.currency list New
view_decimal_precision_form Decimal Precision decimal.precision form New
view_decimal_precision_tree Decimal Precision List decimal.precision list New
view_default_groups_form res.groups default groups form res.groups form New
view_groups_form res.groups.form res.groups form New
view_groups_list res.groups.list res.groups list New
view_groups_search res.groups.search res.groups search New
view_ir_config_form ir.config_parameter form New
view_ir_config_list ir.config_parameter list New
view_ir_config_search ir.config_parameter search New
view_ir_mail_server_search ir.mail_server search New
view_model_constraint_form ir.model.constraint form New
view_model_constraint_list ir.model.constraint list New
view_model_constraint_search ir.model.constraint search New
view_model_data_form ir.model.data form New
view_model_data_list ir.model.data list New
view_model_data_search ir.model.data search New
view_model_fields_form ir.model.fields form New
view_model_fields_search ir.model.fields search New
view_model_fields_selection_form ir.model.fields.selection form New
view_model_fields_selection_search ir.model.fields.selection search New
view_model_fields_selection_tree ir.model.fields.selection list New
view_model_fields_tree ir.model.fields list New
view_model_form ir.model form New
view_model_menu_create Create Menu wizard.ir.model.menu.create form New
view_model_relation_form ir.model.relation form New
view_model_relation_list ir.model.relation list New
view_model_search ir.model search New
view_model_tree ir.model list New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_filter ir.module.module.list.select ir.module.module search New
view_partner_address_form res.partner.form.address res.partner form New
view_partner_bank_form res.partner.bank.form res.partner.bank form New
view_partner_bank_search res.partner.bank.search res.partner.bank search New
view_partner_bank_tree res.partner.bank.list res.partner.bank list New
view_partner_category_form Contact Tags res.partner.category form New
view_partner_category_list Contact Tags res.partner.category list New
view_partner_form res.partner.form res.partner form New
view_partner_simple_form res.partner.simplified.form res.partner form New
view_partner_tree res.partner.list res.partner list New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.list res.bank list New
view_res_company_kanban res.company.kanban res.company kanban New
view_res_groups_privilege_form res.groups.privilege.form res.groups.privilege form New
view_res_groups_privilege_list res.groups.privilege.list res.groups.privilege list New
view_res_partner_filter res.partner.select res.partner search New
view_res_users_kanban res.users.kanban res.users kanban New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule list New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_kanban Server Actions ir.actions.server kanban New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server list New
view_users_form res.users.form res.users form New
view_users_form_simple_modif res.users.preferences.form res.users form New
view_users_search res.users.search res.users search New
view_users_simple_form res.users.simplified.form res.users form New
view_users_tree res.users.list res.users list New
view_view_custom_form ir.ui.view.custom form New
view_view_custom_search ir.ui.view.custom search New
view_view_custom_tree ir.ui.view.custom list New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view list New
view_window_action_form ir.actions.windows.form ir.actions.act_window form New
view_window_action_search ir.actions.windows.search ir.actions.act_window search New
view_window_action_tree ir.actions.windows.list ir.actions.act_window list New
wizard_lang_export Export Translations base.language.export form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (126)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • avatar_1024 Image
    compute='_compute_avatar_1024' args: 'Avatar 1024'
  • avatar_128 Image
    compute='_compute_avatar_128' args: 'Avatar 128'
  • avatar_1920 Image
    compute='_compute_avatar_1920' args: 'Avatar'
  • avatar_256 Image
    compute='_compute_avatar_256' args: 'Avatar 256'
  • avatar_512 Image
    compute='_compute_avatar_512' args: 'Avatar 512'
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 (6)
  • get_empty_list_help(self, help_message: str) -> str
    @api.model
    Hook method to customize the help message in empty list/kanban views. By default, it returns the help received as parameter. :param help_message: ir.actions.act_window help content :return: help message displayed when there is no result to display in a list/kanban view (by default, it returns the action help)
  • get_formview_action(self, access_uid=None)
    @api.readonly
    Return an action to open the document ``self``. This method is meant to be overridden in addons that want to give specific view ids for example. An optional access_uid holds the user that will access the document that could be different from the current user.
  • get_formview_id(self, access_uid=None)
    @api.readonly
    Return a view id to open the document ``self`` with. This method is meant to be overridden in addons that want to give specific view ids for example. Optional access_uid holds the user that would access the form view id different from the current environment user.
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    get_view([view_id | view_type='form']) Get the detailed composition of the requested view like model, view architecture. The return of the method can only depend on the requested view types, access rights (views or other records), view access rules, options, context lang and TYPE_view_ref (other context values cannot be used). :param view_id: id of the view or None :type view_id: int or None :param str view_type: type of the view to return if view_id is None, one of ``'form'``, ``'list'``, ... :param options: options to return additional features :param bool mobile: true if the web client is currently using the responsive mobile view (to use kanban views instead of list views for x2many fields) :return: composition of the requested view (including inherited views and extensions) :rtype: dict :raise AttributeError: * if the inherited view has unknown position to work with other than 'before', 'after', 'inside', 'replace' * if some tag other than 'position' is found in parent view
  • get_views(self, views, options=None)
    @api.model@api.readonly
    Returns the fields_views of given views, along with the fields of the current model, and optionally its filters for the given action. The return of the method can only depend on the requested view types, access rights (views or other records), view access rules, options, context lang and TYPE_view_ref (other context values cannot be used). Python expressions contained in views or representing domains (on python fields) will be evaluated by the client with all the context values as well as the record values it has. :param views: list of [view_id, view_type] :param dict options: a dict optional boolean flags, set to enable: ``toolbar`` includes contextual actions when loading fields_views ``load_filters`` returns the model's filters ``action_id`` id of the action to get the filters, otherwise loads the global filters or the model :return: dictionary with fields_views, fields and optionally filters
  • view_header_get(self, view_id, view_type)
    @api.model

New fields (2)
  • duration Selection
    string='Enable profiling for' args: [('minutes_5', '5 Minutes'), ('hours_1', '1 Hour'), ('days_1', '1 Day'), ('months_1', '1 Month')]
  • expiration Datetime
    compute='_compute_expiration' readonly=False store=True args: 'Enable profiling until'
Public methods (1)
  • submit(self)

New fields (10)
  • data Binary
    attachment=False readonly=True args: 'File'
  • domain Char
    default='[]' string='Model Domain'
  • export_type Selection
    default='module' required=True string='Export Type' args: [('module', 'Module'), ('model', 'Model')]
  • format Selection
    default='po' required=True string='File Format' args: [('csv', 'CSV File'), ('po', 'PO File'), ('tgz', 'TGZ Archive')]
  • lang Selection
    default=NEW_LANG_KEY required=True string='Language' args: _get_languages
  • model_id Many2one → ir.model
    domain=[('transient', '=', False)] string='Model to Export' args: 'ir.model'
  • model_name Char
    related='model_id.model' string='Model Name'
  • modules Many2many → ir.module.module
    domain=[('state', '=', 'installed')] string='Apps To Export' args: 'ir.module.module', 'rel_modules_langexport', 'wiz_id', 'module_id'
  • name Char
    readonly=True args: 'File Name'
  • state Selection
    default='choose' args: [('choose', 'choose'), ('get', 'get')]
Public methods (1)
  • act_getfile(self)

New fields (5)
  • code Char
    help='ISO Language and Country code, e.g. en_US' required=True args: 'ISO Code'
  • data Binary
    attachment=False required=True args: 'File'
  • filename Char
    required=True args: 'File Name'
  • name Char
    required=True args: 'Language Name'
  • overwrite Boolean
    default=True help='If you enable this option, existing translations (including custom ones) will be overwritten and replaced by those in this file' args: 'Overwrite Existing Terms'
Public methods (1)
  • import_lang(self)

New fields (3)
  • first_lang_id Many2one → res.lang
    compute='_compute_first_lang_id' help='Used when the user only selects one language and is given the option to switch to it' args: 'res.lang'
  • lang_ids Many2many → res.lang
    context={'active_test': False} default=_default_lang_ids required=True args: 'res.lang', 'res_lang_install_rel', 'language_wizard_id', 'lang_id', 'Languages'
  • overwrite Boolean
    default=True help='If you check this box, your customized translations will be overwritten and replaced by the official ones.' args: 'Overwrite Existing Terms'
Public methods (3)
  • lang_install(self)
  • reload(self)
  • switch_lang(self)

New fields (4)
  • impacted_module_ids Many2many → ir.module.module
    compute='_compute_impacted_module_ids' string='Impacted modules' args: 'ir.module.module'
  • model_ids Many2many → ir.model
    compute='_compute_model_ids' string='Impacted data models' args: 'ir.model'
  • module_ids Many2many → ir.module.module
    domain=[('state', 'in', ['installed', 'to upgrade', 'to install'])] ondelete='cascade' readonly=True required=True string='Module(s)' args: 'ir.module.module'
  • show_all Boolean
Public methods (1)
  • action_uninstall(self)

New fields (3)
  • added Integer
    readonly=True args: 'Number of modules added'
  • state Selection
    default='init' readonly=True args: [('init', 'init'), ('done', 'done')], 'Status'
  • updated Integer
    readonly=True args: 'Number of modules updated'
Public methods (2)
  • action_module_open(self)
  • update_module(self)

New fields (1)
  • module_info Text
    default=_default_module_info readonly=True args: 'Apps to Update'
Public methods (5)
  • config(self)
  • get_module_list(self)
    @api.model
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
  • upgrade_module(self)
  • upgrade_module_cancel(self)

New fields (14)
  • current_line_id Many2one → base.partner.merge.line
    string='Current Line' args: 'base.partner.merge.line'
  • dst_partner_id Many2one → res.partner
    string='Destination Contact' args: 'res.partner'
  • exclude_contact Boolean
    args: 'A user associated to the contact'
  • exclude_journal_item Boolean
    args: 'Journal Items associated to the contact'
  • group_by_email Boolean
    args: 'Email'
  • group_by_is_company Boolean
    args: 'Is Company'
  • group_by_name Boolean
    args: 'Name'
  • group_by_parent_id Boolean
    args: 'Parent Company'
  • group_by_vat Boolean
    args: 'VAT'
  • line_ids One2many → base.partner.merge.line
    string='Lines' args: 'base.partner.merge.line', 'wizard_id'
  • maximum_group Integer
    args: 'Maximum of Group of Contacts'
  • number_group Integer
    readonly=True args: 'Group of Contacts'
  • partner_ids Many2many → res.partner
    context={'active_test': False} string='Contacts' args: 'res.partner'
  • state Selection
    default='option' readonly=True required=True string='State' args: [('option', 'Option'), ('selection', 'Selection'), ('finished', 'Finished')]
Public methods (7)
  • action_merge(self)
    Merge Contact button. Merge the selected partners, and redirect to the end screen (since there is no other wizard line to process.
  • action_skip(self)
    Skip this wizard line. Don't compute any thing, and simply redirect to the new step.
  • action_start_automatic_process(self)
    Start the process 'Merge Automatically'. This will fill the wizard with the same mechanism as 'Merge with Manual Check', but instead of refreshing wizard with the current line, it will automatically process all lines by merging partner grouped according to the checked options.
  • action_start_manual_process(self)
    Start the process 'Merge with Manual Check'. Fill the wizard according to the group_by and exclude options, and redirect to the first step (treatment of first wizard line). After, for each subset of partner to merge, the wizard will be actualized. - Compute the selected groups (with duplication) - If the user has selected the ``exclude_xxx`` fields, avoid the partners
  • action_update_all_process(self)
  • default_get(self, fields)
    @api.model
  • parent_migration_process_cb(self)

New fields (3)
  • aggr_ids Char
    required=True args: 'Ids'
  • min_id Integer
    args: 'MinID'
  • wizard_id Many2one → base.partner.merge.automatic.wizard
    args: 'base.partner.merge.automatic.wizard', 'Wizard'
Public methods (0)

No public methods.

New fields (2)
  • confirm_password Char
    string='New Password (Confirmation)'
  • new_password Char
    string='New Password'
Public methods (1)
  • change_password(self)
    @check_identity

New fields (4)
  • new_passwd Char
    default='' string='New Password'
  • user_id Many2one → res.users
    ondelete='cascade' required=True string='User' args: 'res.users'
  • user_login Char
    readonly=True string='User Login'
  • wizard_id Many2one → change.password.wizard
    ondelete='cascade' required=True string='Wizard' args: 'change.password.wizard'
Public methods (1)
  • change_password_button(self)

New fields (1)
  • user_ids One2many → change.password.user
    default=_default_user_ids string='Users' args: 'change.password.user', 'wizard_id'
Public methods (1)
  • change_password_button(self)

New fields (2)
  • digits Integer
    default=2 required=True args: 'Digits'
  • name Char
    required=True args: 'Usage'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • precision_get(self, application)
    @api.model@tools.ormcache('application', cache='stable')
  • unlink(self)
  • write(self, vals)

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 (5)
  • image_1024 Image
    max_height=1024 max_width=1024 related='image_1920' store=True args: 'Image 1024'
  • image_128 Image
    max_height=128 max_width=128 related='image_1920' store=True args: 'Image 128'
  • image_1920 Image
    max_height=1920 max_width=1920 args: 'Image'
  • image_256 Image
    max_height=256 max_width=256 related='image_1920' store=True args: 'Image 256'
  • image_512 Image
    max_height=512 max_width=512 related='image_1920' store=True args: 'Image 512'
Public methods (0)

No public methods.

New fields (3)
  • target Selection
    default='new' required=True string='Action Target' args: [('new', 'New Window'), ('self', 'This Window'), ('download', 'Download')]
  • type Char
    default='ir.actions.act_url'
  • url Text
    required=True string='Action URL'
Public methods (0)

No public methods.

New fields (18)
  • cache Boolean
    default=True help='If enabled, this action will cache the related data used in list, Kanban and form views with the aim to increase the loading speed' string='Data Caching'
  • context Char
    default={} help='Context dictionary as Python expression, empty by default (Default: {})' required=True string='Context Value'
  • domain Char
    help='Optional domain filtering of the destination data, as a Python expression' string='Domain Value'
  • embedded_action_ids One2many → ir.embedded.actions
    compute='_compute_embedded_actions' args: 'ir.embedded.actions'
  • filter Boolean
  • group_ids Many2many → res.groups
    string='Groups' args: 'res.groups', 'ir_act_window_group_rel', 'act_id', 'gid'
  • limit Integer
    default=80 help='Default limit for the list view'
  • mobile_view_mode Char
    default='kanban' help="First view mode in mobile and small screen environments (default='kanban'). If it can't be found among available view modes, the same mode as for wider screens is used)"
  • res_id Integer
    help="Database ID of record to open in form view, when ``view_mode`` is set to 'form' only" string='Record ID'
  • res_model Char
    help='Model name of the object to open in the view window' required=True string='Destination Model'
  • search_view_id Many2one → ir.ui.view
    string='Search View Ref.' args: 'ir.ui.view'
  • target Selection
    default='current' string='Target Window' args: [('current', 'Current Window'), ('new', 'New Window'), ('fullscreen', 'Full Screen'), ('main', 'Main action of Current Window')]
  • type Char
    default='ir.actions.act_window'
  • usage Char
    help='Used to filter menu and home actions from the user form.' string='Action Usage'
  • view_id Many2one → ir.ui.view
    ondelete='set null' string='View Ref.' args: 'ir.ui.view'
  • view_ids One2many → ir.actions.act_window.view
    string='No of Views' args: 'ir.actions.act_window.view', 'act_window_id'
  • view_mode Char
    default='list,form' help="Comma-separated list of allowed view modes, such as 'form', 'list', 'calendar', etc. (Default: list,form)" required=True
  • views Binary
    compute='_compute_views' help='This function field computes the ordered list of views that should be enabled when displaying the result of an action, federating view mode, views and reference view. The result is returned as an ordered list of pairs (view_id,view_mode).'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • exists(self)
  • read(self, fields=None, load='_classic_read')
    call the method get_empty_list_help of the model and set the window action help message
  • unlink(self)

New fields (5)
  • act_window_id Many2one → ir.actions.act_window
    index='btree_not_null' ondelete='cascade' string='Action' args: 'ir.actions.act_window'
  • multi Boolean
    help='If set to true, the action will not be displayed on the right toolbar of a form view.' string='On Multiple Doc.'
  • sequence Integer
  • view_id Many2one → ir.ui.view
    string='View' args: 'ir.ui.view'
  • view_mode Selection
    required=True string='View Type' args: VIEW_TYPES
Public methods (0)

No public methods.

New fields (1)
  • type Char
    default='ir.actions.act_window_close'
Public methods (0)

No public methods.

New fields (8)
  • binding_model_id Many2one → ir.model
    help='Setting a value makes this action available in the sidebar for the given model.' ondelete='cascade' args: 'ir.model'
  • binding_type Selection
    default='action' required=True args: [('action', 'Action'), ('report', 'Report')]
  • binding_view_types Char
    default='list,form'
  • help Html
    help='Optional help text for the users with a description of the target view, such as its usage and purpose.' string='Action Description' translate=True
  • name Char
    required=True string='Action Name' translate=True
  • path Char
    string='Path to show in the URL'
  • type Char
    required=True string='Action Type'
  • xml_id Char
    compute='_compute_xml_id' string='External ID'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_bindings(self, model_name)
    @api.model
    Retrieve the list of actions bound to the given model. :return: a dict mapping binding types to a list of dict describing actions, where the latter is given by calling the method ``read`` on the action record.
  • unlink(self)
    unlink ir.action.todo/ir.filters which are related to actions which will be deleted. NOTE: ondelete cascade will not work on ir.actions.actions so we will need to do it manually.
  • write(self, vals)

New fields (7)
  • context Char
    default='{}' help='Context dictionary as Python expression, empty by default (Default: {})' required=True string='Context Value'
  • params Binary
    compute='_compute_params' help='Arguments sent to the client along with the view tag' inverse='_inverse_params' string='Supplementary arguments'
  • params_store Binary
    attachment=False readonly=True string='Params storage'
  • res_model Char
    help='Optional model, mostly used for needactions.' string='Destination Model'
  • tag Char
    help='An arbitrary string, interpreted by the client according to its own needs and wishes. There is no central tag repository across clients.' required=True string='Client action tag'
  • target Selection
    default='current' string='Target Window' args: [('current', 'Current Window'), ('new', 'New Window'), ('fullscreen', 'Full Screen'), ('main', 'Main action of Current Window')]
  • type Char
    default='ir.actions.client'
Public methods (0)

No public methods.

New fields (14)
  • attachment Char
    help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.' string='Save as Attachment Prefix'
  • attachment_use Boolean
    help='If enabled, then the second time the user prints with same attachment name, it returns the previous report.' string='Reload from Attachment'
  • binding_type Selection
    default='report'
  • domain Char
    help='If set, the action will only appear on records that matches the domain.' string='Filter domain'
  • group_ids Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_report_rel', 'uid', 'gid'
  • model Char
    required=True string='Model Name'
  • model_id Many2one → ir.model
    compute='_compute_model_id' search='_search_model_id' string='Model' args: 'ir.model'
  • multi Boolean
    help='If set to true, the action will not be displayed on the right toolbar of a form view.' string='On Multiple Doc.'
  • paperformat_id Many2one → report.paperformat
    index='btree_not_null' args: 'report.paperformat', 'Paper Format'
  • print_report_name Char
    help="This is the filename of the report going to download. Keep empty to not change the report filename. You can use a python expression with the 'object' and 'time' variables." translate=True args: 'Printed Report Name'
  • report_file Char
    help='The path to the main report file (depending on Report Type) or empty if the content is in another field' readonly=False required=False store=True string='Report File'
  • report_name Char
    required=True string='Template Name'
  • report_type Selection
    default='qweb-pdf' help='The type of the report that will be rendered, each one having its own rendering method. HTML means the report will be opened directly in your browser PDF means the report will be rendered using Wkhtmltopdf and downloaded by the user.' required=True args: [('qweb-html', 'HTML'), ('qweb-pdf', 'PDF'), ('qweb-text', 'Text')]
  • type Char
    default='ir.actions.report'
Public methods (11)
  • associated_view(self)
    Used in the ir.actions.report form view in order to search naively after the view(s) used in the rendering.
  • barcode(self, barcode_type, value, **kwargs)
    @api.model
  • create_action(self)
    Create a contextual action for each report.
  • get_available_barcode_masks(self)
    @api.model
    Hook for extension. This function returns the available QR-code masks, in the form of a list of (code, mask_function) elements, where code is a string identifying the mask uniquely, and mask_function is a function returning a reportlab Drawing object with the result of the mask, and taking as parameters: - width of the QR-code, in pixels - height of the QR-code, in pixels - reportlab Drawing object containing the barcode to apply the mask on
  • get_paperformat(self)
  • get_paperformat_by_xmlid(self, xml_id)
  • get_valid_action_reports(self, model, record_ids)
    Return the list of ids of actions for which the domain is satisfied by at least one record in record_ids. :param model: the model of the records to validate :param record_ids: list of ids of records to validate
  • get_wkhtmltopdf_state(self)
    @api.model
    Get the current state of wkhtmltopdf: install, ok, upgrade, workers or broken. * install: Starting state. * upgrade: The binary is an older version (< 0.12.0). * ok: A binary was found with a recent version (>= 0.12.0). * workers: Not enough workers found to perform the pdf rendering process (< 2 workers). * broken: A binary was found but not responding. :return: wkhtmltopdf_state
  • report_action(self, docids, data=None, config=True)
    Return an action of type ir.actions.report. :param docids: id/ids/browse record of the records to print (if not used, pass an empty list) :param data: :param bool config: :rtype: bytes
  • retrieve_attachment(self, record)
    Retrieve an attachment for a specific record. :param record: The record owning of the attachment. :return: A recordset of length <=1 or None
  • unlink_action(self)
    Remove the contextual actions created for the reports.

New fields (36)
  • allowed_states Json
    compute='_compute_allowed_states' string='Allowed states'
  • automated_name Char
    compute='_compute_name' store=True
  • available_model_ids Many2many → ir.model
    compute='_compute_available_model_ids' store=False string='Available Models' args: 'ir.model'
  • child_ids One2many → ir.actions.server
    copy=True domain=<expr> help='Child server actions that will be executed. Note that the last return returned action value will be used as global return value.' string='Child Actions' args: 'ir.actions.server', 'parent_id'
  • code Text
    groups='base.group_system' help='Write Python code that the action will execute. Some variables are available for use; help about python expression is given in the help tab.' string='Python Code'
  • crud_model_id Many2one → ir.model
    compute='_compute_crud_relations' help='Specify which kind of record should be created. Set this field only to specify a different model than the base model.' inverse='_set_crud_model_id' readonly=False store=True string='Record to Create' args: 'ir.model'
  • crud_model_name Char
    readonly=True related='crud_model_id.model' string='Target Model Name'
  • evaluation_type Selection
    change_default=True default='value' args: [('value', 'Update'), ('sequence', 'Sequence'), ('equation', 'Compute')], 'Value Type'
  • group_ids Many2many → res.groups
    help='Groups that can execute the server action. Leave empty to allow everybody.' string='Allowed Groups' args: 'res.groups', 'ir_act_server_group_rel', 'act_id', 'gid'
  • html_value Html
  • ir_cron_ids One2many → ir.cron
    context={'active_test': False} args: 'ir.cron', 'ir_actions_server_id', 'Scheduled Action'
  • link_field_id Many2one → ir.model.fields
    help='Specify a field used to link the newly created record on the record used by the server action.' string='Link Field' args: 'ir.model.fields'
  • model_id Many2one → ir.model
    help='Model on which the server action runs.' index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • model_name Char
    related='model_id.model' string='Model Name'
  • name Char
    compute='_compute_name' readonly=False store=True
  • parent_id Many2one → ir.actions.server
    index=True ondelete='cascade' string='Parent Action' args: 'ir.actions.server'
  • resource_ref Reference
    inverse='_set_resource_ref' selection='_selection_target_model' string='Record'
  • selection_value Many2one → ir.model.fields.selection
    domain='[("field_id", "=", update_field_id)]' inverse='_set_selection_value' ondelete='cascade' string='Custom Value' args: 'ir.model.fields.selection'
  • sequence Integer
    default=5 help='When dealing with multiple actions, the execution order is based on the sequence. Low number means high priority.'
  • sequence_id Many2one → ir.sequence
    string='Sequence to use' args: 'ir.sequence'
  • show_code_history Boolean
    compute='_compute_show_code_history'
  • state Selection
    copy=True help="Type of server action. The following values are available:\n- 'Update a Record': update the values of a record\n- 'Create Activity': create an activity (Discuss)\n- 'Send Email': post a message, a note or send an email (Discuss)\n- 'Send SMS': send SMS, log them on documents (SMS)- 'Add/Remove Followers': add or remove followers to a record (Discuss)\n- 'Create Record': create a new record with new values\n- 'Execute Code': a block of Python code that will be executed\n- 'Send Webhook Notification': send a POST request to an external system, also known as a Webhook\n- 'Multi Actions': define an action that triggers several other server actions\n" required=True string='Type' args: [('object_write', 'Update Record'), ('object_create', 'Create Record'), ('object_copy', 'Duplicate Record'), ('code', 'Execute Code'), ('webhook', 'Send Webhook Notification'), ('multi', 'Multi Actions')]
  • type Char
    default='ir.actions.server'
  • update_boolean_value Selection
    default='true' string='Boolean Value' args: [('true', 'Yes (True)'), ('false', 'No (False)')]
  • update_field_id Many2one → ir.model.fields
    compute='_compute_crud_relations' ondelete='cascade' readonly=False store=True string='Field to Update' args: 'ir.model.fields'
  • update_field_type Selection
    readonly=True related='update_field_id.ttype'
  • update_m2m_operation Selection
    default='add' string='Many2many Operations' args: [('add', 'Adding'), ('remove', 'Removing'), ('set', 'Setting it to'), ('clear', 'Clearing it')]
  • update_path Char
    default=_default_update_path help="Path to the field to update, e.g. 'partner_id.name'" string='Field to Update Path'
  • update_related_model_id Many2one → ir.model
    compute='_compute_crud_relations' readonly=False store=True args: 'ir.model'
  • usage Selection
    default='ir_actions_server' required=True string='Usage' args: [('ir_actions_server', 'Server Action'), ('ir_cron', 'Scheduled Action')]
  • value Text
    help="For Python expressions, this field may hold a Python expression that can use the same values as for the code field on the server action,e.g. `env.user.name` to set the current user's name as the value or `record.id` to set the ID of the record on which the action is run.\n\nFor Static values, the value will be used directly without evaluation, e.g.`42` or `My custom name` or the selected record."
  • value_field_to_show Selection
    compute='_compute_value_field_to_show' args: [('value', 'value'), ('html_value', 'html_value'), ('sequence_id', 'sequence_id'), ('resource_ref', 'reference'), ('update_boolean_value', 'update_boolean_value'), ('selection_value', 'selection_value')]
  • warning Text
    compute='_compute_warning' recursive=True string='Warning'
  • webhook_field_ids Many2many → ir.model.fields
    help="Fields to send in the POST request. The id and model of the record are always sent as '_id' and '_model'. The name of the action that triggered the webhook is always sent as '_name'." string='Webhook Fields' args: 'ir.model.fields', 'ir_act_server_webhook_field_rel', 'server_id', 'field_id'
  • webhook_sample_payload Text
    compute='_compute_webhook_sample_payload' string='Sample Payload'
  • webhook_url Char
    help='URL to send the POST request to.' string='Webhook URL'
Public methods (9)
  • action_open_parent_action(self)
  • action_open_scheduled_action(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_action(self)
    Create a contextual action for each server action.
  • history_wizard_action(self)
  • run(self)
    Runs the server action. For each server action, the :samp:`_run_action_{TYPE}[_multi]` method is called. This allows easy overriding of the server actions. The ``_multi`` suffix means the runner can operate on multiple records, otherwise if there are multiple records the runner will be called once for each. The call context should contain the following keys: active_id id of the current object (single mode) active_model current model that should equal the action's model active_ids (optional) ids of the current records (mass mode). If ``active_ids`` and ``active_id`` are present, ``active_ids`` is given precedence. :return: an ``action_id`` to be executed, or ``False`` is finished correctly without return action
  • unlink_action(self)
    Remove the contextual actions created for the server actions.
  • write(self, vals)

New fields (2)
  • action_id Many2one → ir.actions.server
    ondelete='cascade' required=True args: 'ir.actions.server'
  • code Text
Public methods (0)

No public methods.

New fields (4)
  • action_id Many2one → ir.actions.actions
    index=True required=True string='Action' args: 'ir.actions.actions'
  • name Char
  • sequence Integer
    default=10
  • state Selection
    default='open' required=True string='Status' args: [('open', 'To Do'), ('done', 'Done')]
Public methods (6)
  • action_launch(self)
    Launch Action of Wizard
  • action_open(self)
    Sets configuration wizard in TODO state
  • create(self, vals_list)
    @api.model_create_multi
  • ensure_one_open_todo(self)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True string='active'
  • bundle Char
    required=True string='Bundle name'
  • directive Selection
    default=APPEND_DIRECTIVE selection=[(APPEND_DIRECTIVE, 'Append'), (PREPEND_DIRECTIVE, 'Prepend'), (AFTER_DIRECTIVE, 'After'), (BEFORE_DIRECTIVE, 'Before'), (REMOVE_DIRECTIVE, 'Remove'), (REPLACE_DIRECTIVE, 'Replace'), (INCLUDE_DIRECTIVE, 'Include')] string='Directive'
  • name Char
    required=True string='Name'
  • path Char
    required=True string='Path (or glob pattern)'
  • sequence Integer
    default=DEFAULT_SEQUENCE required=True string='Sequence'
  • target Char
    string='Target'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (19)
  • access_token Char
    groups='base.group_user' args: 'Access Token'
  • checksum Char
    readonly=True size=40 args: 'Checksum/SHA1'
  • company_id Many2one → res.company
    change_default=True default=<expr> string='Company' args: 'res.company'
  • datas Binary
    compute='_compute_datas' inverse='_inverse_datas' string='File Content (base64)'
  • db_datas Binary
    attachment=False args: 'Database Data'
  • description Text
    args: 'Description'
  • file_size Integer
    readonly=True args: 'File Size'
  • index_content Text
    prefetch=False readonly=True args: 'Indexed Content'
  • mimetype Char
    readonly=True args: 'Mime Type'
  • name Char
    required=True args: 'Name'
  • public Boolean
    args: 'Is public document'
  • raw Binary
    compute='_compute_raw' inverse='_inverse_raw' string='File Content (raw)'
  • res_field Char
    args: 'Resource Field'
  • res_id Many2oneReference
    model_field='res_model' args: 'Resource ID'
  • res_model Char
    args: 'Resource Model'
  • res_name Char
    compute='_compute_res_name' args: 'Resource Name'
  • store_fname Char
    index=True args: 'Stored Filename'
  • type Selection
    change_default=True default='binary' help='You can either upload a file from your computer or copy/paste an internet link to your file.' required=True string='Type' args: [('url', 'URL'), ('binary', 'File')]
  • url Char
    index='btree_not_null' size=1024 args: 'Url'
Public methods (11)
  • action_get(self)
    @api.model
  • check(self, mode, values=None)
    @api.model
    Restricts the access to an ir.attachment, according to referred mode
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_unique(self, values_list)
    @api.model
  • force_storage(self)
    @api.model
    Force all attachments to be stored in the currently configured storage
  • generate_access_token(self)
  • get_serving_groups(self)
    @api.model
    An ir.attachment record may be used as a fallback in the http dispatch if its type field is set to "binary" and its url field is set as the request's url. Only the groups returned by this method are allowed to create and write on such records.
  • regenerate_assets_bundles(self)
    @api.model
  • unlink(self)
  • write(self, vals)

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 (2)
  • key Char
    required=True
  • value Text
    required=True
Public methods (7)
  • create(self, vals_list)
    @api.model_create_multi
  • get_param(self, key, default=False)
    @api.model
    Retrieve the value for a given key. :param string key: The key of the parameter value to retrieve. :param string default: default value if parameter is missing. :return: The value of the parameter, or ``default`` if it does not exist. :rtype: string
  • init(self, force=False)
    @mute_logger('odoo.addons.base.models.ir_config_parameter')
    Initializes the parameters listed in _default_parameters. It overrides existing parameters if force is ``True``.
  • set_param(self, key, value)
    @api.model
    Sets the value of a parameter. :param string key: The key of the parameter value to set. :param string value: The value to set. :return: the previous value of the parameter or False if it did not exist. :rtype: string
  • unlink(self)
  • unlink_default_parameters(self)
    @api.ondelete(at_uninstall=False)
  • write(self, vals)

New fields (11)
  • active Boolean
    default=True
  • cron_name Char
    compute='_compute_cron_name' store=True args: 'Name'
  • failure_count Integer
    default=0 help='The number of consecutive failures of this job. It is automatically reset on success.'
  • first_failure_date Datetime
    help='The first time the cron failed. It is automatically reset on success.' string='First Failure Date'
  • interval_number Integer
    aggregator='avg' default=1 help='Repeat every x.' required=True
  • interval_type Selection
    default='months' required=True string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • ir_actions_server_id Many2one → ir.actions.server
    delegate=True index=True ondelete='restrict' required=True args: 'ir.actions.server', 'Server action'
  • lastcall Datetime
    help='Previous time the cron ran successfully, provided to the job through the context on the `lastcall` key' string='Last Execution Date'
  • nextcall Datetime
    default=fields.Datetime.now help='Next planned execution date for this job.' required=True string='Next Execution Date'
  • priority Integer
    aggregator=None default=5 help='The priority of the job, as an integer: 0 means higher priority, 10 means lower priority.'
  • user_id Many2one → res.users
    default=<expr> required=True string='Scheduler User' args: 'res.users'
Public methods (7)
  • action_open_parent_action(self)
  • action_open_scheduled_action(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • method_direct_trigger(self)
    Run the CRON job in the current (HTTP) thread. The job is still ran as it would be by the scheduler: a new cursor is used for the execution of the job. :raises UserError: when the job is already running
  • toggle(self, model, domain)
    @api.model
  • write(self, vals)

New fields (5)
  • cron_id Many2one → ir.cron
    index=True ondelete='cascade' required=True args: 'ir.cron'
  • deactivate Boolean
  • done Integer
    default=0
  • remaining Integer
    default=0
  • timed_out_counter Integer
    default=0
Public methods (0)

No public methods.

New fields (2)
  • call_at Datetime
    index=True required=True
  • cron_id Many2one → ir.cron
    index=True ondelete='cascade' required=True args: 'ir.cron'
Public methods (0)

No public methods.

New fields (5)
  • company_id Many2one → res.company
    help='If set, action binding only applies for this company' index=True ondelete='cascade' string='Company' args: 'res.company'
  • condition Char
    help='If set, applies the default upon condition.' args: 'Condition'
  • field_id Many2one → ir.model.fields
    index=True ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • json_value Char
    required=True args: 'Default Value (JSON format)'
  • user_id Many2one → res.users
    help='If set, action binding only applies for this user.' index=True ondelete='cascade' string='User' args: 'res.users'
Public methods (6)
  • create(self, vals_list)
    @api.model_create_multi
  • discard_records(self, records)
    @api.model
    Discard all the defaults of many2one fields using any of the given records.
  • discard_values(self, model_name, field_name, values)
    @api.model
    Discard all the defaults for any of the given values.
  • set(self, model_name, field_name, value, user_id=False, company_id=False, condition=False)
    @api.model
    Defines a default value for the given field. Any entry for the same scope (field, user, company) will be replaced. The value is encoded in JSON to be stored to the database. :param model_name: :param field_name: :param value: :param user_id: may be ``False`` for all users, ``True`` for the current user, or any user id :param company_id: may be ``False`` for all companies, ``True`` for the current user's company, or any company id :param condition: optional condition that restricts the applicability of the default value; this is an opaque string, but the client typically uses single-field conditions in the form ``'key=val'``.
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • install_demo(self)
    @assert_log_admin_access

New fields (3)
  • error Char
    string='Error'
  • module_id Many2one → ir.module.module
    required=True string='Module' args: 'ir.module.module'
  • wizard_id Many2one → ir.demo_failure.wizard
    args: 'ir.demo_failure.wizard'
Public methods (0)

No public methods.

New fields (2)
  • failure_ids One2many → ir.demo_failure
    readonly=True string='Demo Installation Failures' args: 'ir.demo_failure', 'wizard_id'
  • failures_count Integer
    compute='_compute_failures_count'
Public methods (1)
  • done(self)

New fields (15)
  • action_id Many2one → ir.actions.actions
    ondelete='cascade' string='Action' args: 'ir.actions.actions'
  • context Char
    default='{}' help='Context dictionary as Python expression, empty by default (Default: {})'
  • default_view_mode Char
    help='Default view (if none, default view of the action is taken)' string='Default View'
  • domain Char
    default='[]' help='Domain applied to the active id of the parent model'
  • filter_ids One2many → ir.filters
    help='Default filter of the embedded action (if none, no filters)' args: 'ir.filters', 'embedded_action_id'
  • groups_ids Many2many → res.groups
    help='Groups that can execute the embedded action. Leave empty to allow everybody.' args: 'res.groups'
  • is_deletable Boolean
    compute='_compute_is_deletable'
  • is_visible Boolean
    compute='_compute_is_visible' help='Computed field to check if the record should be visible according to the domain' string='Embedded visibility'
  • name Char
    translate=True
  • parent_action_id Many2one → ir.actions.act_window
    ondelete='cascade' required=True string='Parent Action' args: 'ir.actions.act_window'
  • parent_res_id Integer
    string='Active Parent Id'
  • parent_res_model Char
    required=True string='Active Parent Model'
  • python_method Char
    help='Python method returning an action'
  • sequence Integer
  • user_id Many2one → res.users
    help='User specific embedded action. If empty, shared embedded action' ondelete='cascade' string='User' args: 'res.users'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (3)
  • export_fields One2many → ir.exports.line
    copy=True string='Export ID' args: 'ir.exports.line', 'export_id'
  • name Char
    string='Export Name'
  • resource Char
    index=True
Public methods (0)

No public methods.

New fields (2)
  • export_id Many2one → ir.exports
    index=True ondelete='cascade' string='Export' args: 'ir.exports'
  • name Char
    string='Field Name'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • db_id_for(self, model, field, subfield, value, savepoint)
    @api.model
    Finds a database id for the reference ``value`` in the referencing subfield ``subfield`` of the provided field of the provided model. :param model: model to which the field belongs :param field: relational field for which references are provided :param subfield: a relational subfield allowing building of refs to existing records: ``None`` for a name_search, ``id`` for an external id and ``.id`` for a database id :param value: value of the reference to match to an actual record :param savepoint: savepoint for rollback on errors :return: a pair of the matched database identifier (if any), the translated user-readable name for the field and the list of warnings :rtype: (ID|None, unicode, list)
  • for_model(self, model, fromtype=str, *, savepoint)
    @api.model
    Returns a converter object for the model. A converter is a callable taking a record-ish (a dictionary representing an odoo record with values of typetag ``fromtype``) and returning a converted records matching what :meth:`odoo.models.Model.write` expects. :param model: :class:`odoo.models.Model` for the conversion base :param fromtype: :param savepoint: savepoint to rollback to on error :returns: a converter callable :rtype: (record: dict, logger: (field, error) -> None) -> dict
  • to_field(self, model, field, fromtype=str, *, savepoint)
    @api.model
    Fetches a converter for the provided field object, from the specified type. A converter is simply a callable taking a value of type ``fromtype`` (or a composite of ``fromtype``, e.g. list or dict) and returning a value acceptable for a write() on the field ``field``. By default, tries to get a method on itself with a name matching the pattern ``_$fromtype_to_$field.type`` and returns it. Converter callables can either return a value and a list of warnings to their caller or raise ``ValueError``, which will be interpreted as a validation & conversion failure. ValueError can have either one or two parameters. The first parameter is mandatory, **must** be a unicode string and will be used as the user-visible message for the error (it should be translatable and translated). It can contain a ``field`` named format placeholder so the caller can inject the field's translated, user-facing name (@string). The second parameter is optional and, if provided, must be a mapping. This mapping will be merged into the error dictionary returned to the client. If a converter can perform its function but has to make assumptions about the data, it can send a warning to the user through adding an instance of :class:`~.ImportWarning` to the second value it returns. The handling of a warning at the upper levels is the same as ``ValueError`` above. :param model: :param field: field object to generate a value for :type field: :class:`odoo.fields.Field` :param fromtype: type to convert to something fitting for ``field`` :type fromtype: type | str :param savepoint: savepoint to rollback to on errors :return: a function (fromtype -> field.write_type), if a converter is found :rtype: Callable | None

New fields (11)
  • action_id Many2one → ir.actions.actions
    help='The menu action this filter applies to. When left empty the filter applies to all menus for this model.' ondelete='cascade' string='Action' args: 'ir.actions.actions'
  • active Boolean
    default=True
  • context Text
    default='{}' required=True
  • domain Text
    default='[]' required=True
  • embedded_action_id Many2one → ir.embedded.actions
    help='The embedded action this filter is applied to' index='btree_not_null' ondelete='cascade' args: 'ir.embedded.actions'
  • embedded_parent_res_id Integer
    help='id of the record the filter should be applied to. Only used in combination with embedded actions'
  • is_default Boolean
    string='Default Filter'
  • model_id Selection
    required=True selection='_list_all_models' string='Model'
  • name Char
    required=True string='Filter Name'
  • sort Char
    default='[]' required=True
  • user_ids Many2many → res.users
    context={'active_test': False} help='The users the filter is shared with. If empty, the filter is shared with all users.' ondelete='cascade' string='Users' args: 'res.users'
Public methods (4)
  • copy_data(self, default=None)
  • create_filter(self, vals)
    @api.model
  • get_filters(self, model, action_id=None, embedded_action_id=None, embedded_parent_res_id=None)
    @api.model
    Obtain the list of filters available for the user on the given model. :param int model: id of model to find filters for :param action_id: optional ID of action to restrict filters to this action plus global filters. If missing only global filters are returned. The action does not have to correspond to the model, it may only be a contextual action. :return: list of :meth:`~osv.read`-like dicts containing the ``name``, ``is_default``, ``domain``, ``user_ids`` (m2m), ``action_id`` (m2o tuple), ``embedded_action_id`` (m2o tuple), ``embedded_parent_res_id`` and ``context`` of the matching ``ir.filters``.
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • routing_map(self, key=None)
    @tools.ormcache('key', cache='routing')

New fields (12)
  • create_date Datetime
    readonly=True string='Created on'
  • create_uid Integer
    readonly=True string='Created by'
  • dbname Char
    index=True string='Database Name'
  • func Char
    required=True string='Function'
  • level Char
    index=True
  • line Char
    required=True
  • message Text
    required=True
  • name Char
    required=True
  • path Char
    required=True
  • type Selection
    index=True required=True args: [('client', 'Client'), ('server', 'Server')]
  • write_date Datetime
    readonly=True string='Last Updated on'
  • write_uid Integer
    readonly=True string='Last Updated by'
Public methods (1)
  • init(self)

New fields (15)
  • active Boolean
    default=True
  • from_filter Char
    help='Comma-separated list of addresses or domains for which this server can be used.\ne.g.: "notification@odoo.com" or "odoo.com"' args: 'FROM Filtering'
  • max_email_size Float
    string='Max Email Size'
  • name Char
    index=True required=True string='Name'
  • sequence Integer
    default=10 help='When no specific mail server is requested for a mail, the highest priority one is used. Default priority is 10 (smaller number = higher priority)' string='Priority'
  • smtp_authentication Selection
    default='login' required=True string='Authenticate with' args: [('login', 'Username'), ('certificate', 'SSL Certificate'), ('cli', 'Command Line Interface')]
  • smtp_authentication_info Text
    compute='_compute_smtp_authentication_info' args: 'Authentication Info'
  • smtp_debug Boolean
    help='If enabled, the full output of SMTP sessions will be written to the server log at DEBUG level (this is very verbose and may include confidential info!)' string='Debugging'
  • smtp_encryption Selection
    default='none' help='Choose the connection encryption scheme:\n- None: SMTP sessions are done in cleartext.\n- TLS (STARTTLS): TLS encryption is requested at start of SMTP session (Recommended)\n- SSL/TLS: SMTP sessions are encrypted with SSL/TLS through a dedicated port (default: 465)\n\nChoose an additionnal variant for SSL or TLS:\n- encryption and validation: encrypt the data and authentify the server using its SSL certificate (Recommended)\n- encryption only: encrypt the data but skip server authentication' required=True string='Connection Encryption' args: [('none', 'None'), ('starttls_strict', 'TLS (STARTTLS), encryption and validation'), ('starttls', 'TLS (STARTTLS), encryption only'), ('ssl_strict', 'SSL/TLS, encryption and validation'), ('ssl', 'SSL/TLS, encryption only')]
  • smtp_host Char
    help='Hostname or IP of SMTP server' string='SMTP Server'
  • smtp_pass Char
    groups='base.group_system' help='Optional password for SMTP authentication' string='Password'
  • smtp_port Integer
    default=25 help='SMTP Port. Usually 465 for SSL, and 25 or 587 for other cases.' string='SMTP Port'
  • smtp_ssl_certificate Binary
    attachment=False groups='base.group_system' help='SSL certificate used for authentication' args: 'SSL Certificate'
  • smtp_ssl_private_key Binary
    attachment=False groups='base.group_system' help='SSL private key used for authentication' args: 'SSL Private Key'
  • smtp_user Char
    groups='base.group_system' help='Optional username for SMTP authentication' string='Username'
Public methods (4)
  • action_retrieve_max_email_size(self)
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_ssl_certificate=None, smtp_ssl_private_key=None, smtp_debug=False, smtp_session=None)
    @api.model
    Sends an email directly (no queuing). No retries are done, the caller should handle MailDeliveryException in order to ensure that the mail is never lost. If the mail_server_id is provided, sends using this mail server, ignoring other smtp_* arguments. If mail_server_id is None and smtp_server is None, use the default mail server (highest priority). If mail_server_id is None and smtp_server is not None, use the provided smtp_* arguments. If both mail_server_id and smtp_server are None, look for an 'smtp_server' value in server config, and fails if not found. :param message: the email.message.Message to send. The envelope sender will be extracted from the ``Return-Path`` (if present), or will be set to the default bounce address. The envelope recipients will be extracted from the combined list of ``To``, ``CC`` and ``BCC`` headers. :param smtp_session: optional pre-established SMTP session. When provided, overrides `mail_server_id` and all the `smtp_*` parameters. Passing the matching `mail_server_id` may yield better debugging/log messages. The caller is in charge of disconnecting the session. :param mail_server_id: optional id of ir.mail_server to use for sending. overrides other smtp_* arguments. :param smtp_server: optional hostname of SMTP server to use :param smtp_encryption: optional TLS mode, one of 'none', 'starttls', 'starttls_strict', 'ssl', or 'ssl_strict'. The 'strict' variants verify the remote server's certificate against the operating system trust store. :param smtp_port: optional SMTP port, if mail_server_id is not passed :param smtp_user: optional SMTP user, if mail_server_id is not passed :param smtp_password: optional SMTP password to use, if mail_server_id is not passed :param smtp_ssl_certificate: filename of the SSL certificate used for authentication :param smtp_ssl_private_key: filename of the SSL private key used for authentication :param smtp_debug: optional SMTP debug flag, if mail_server_id is not passed :return: the Message-ID of the message that was just sent, if successfully sent, otherwise raises MailDeliveryException and logs root cause.
  • test_smtp_connection(self, autodetect_max_email_size=False)
    Test the connection and if autodetect_max_email_size, set auto-detected max email size. :param bool autodetect_max_email_size: whether to autodetect the max email size :return: client action to notify the user of the result of the operation (connection test or auto-detection successful depending on the ``autodetect_max_email_size`` parameter) :rtype: dict :raises UserError: if the connection fails and if ``autodetect_max_email_size`` and the server doesn't support the auto-detection of email max size
  • write(self, vals)
    Ensure we cannot archive a server in-use

New fields (15)
  • abstract Boolean
    string='Abstract Model'
  • access_ids One2many → ir.model.access
    string='Access' args: 'ir.model.access', 'model_id'
  • count Integer
    compute='_compute_count' help='Total number of records in this model' string='Count (Incl. Archived)'
  • field_id One2many → ir.model.fields
    copy=True default=_default_field_id required=True string='Fields' args: 'ir.model.fields', 'model_id'
  • fold_name Char
    help='In a Kanban view where columns are records of this model, the value of this (boolean) field determines which column should be folded by default.' string='Fold Field'
  • info Text
    string='Information'
  • inherited_model_ids Many2many → ir.model
    compute='_inherited_models' help='The list of models that extends the current model.' string='Inherited models' args: 'ir.model'
  • model Char
    default='x_' required=True
  • modules Char
    compute='_in_modules' help='List of modules in which the object is defined or inherited' string='In Apps'
  • name Char
    required=True string='Model Description' translate=True
  • order Char
    default='id' help='SQL expression for ordering records in the model; e.g. "x_sequence asc, id desc"' required=True string='Order'
  • rule_ids One2many → ir.rule
    string='Record Rules' args: 'ir.rule', 'model_id'
  • state Selection
    default='manual' readonly=True string='Type' args: [('manual', 'Custom Object'), ('base', 'Base Object')]
  • transient Boolean
    string='Transient Model'
  • view_ids One2many → ir.ui.view
    compute='_view_ids' string='Views' args: 'ir.ui.view'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • name_create(self, name)
    @api.model
    Infer the model from the name. E.g.: 'My New Model' should become 'x_my_new_model'.
  • unlink(self)
  • write(self, vals)

New fields (8)
  • active Boolean
    default=True help='If you uncheck the active field, it will disable the ACL without deleting it (if you delete a native ACL, it will be re-created when you reload the module).'
  • group_id Many2one → res.groups
    index=True ondelete='restrict' string='Group' args: 'res.groups'
  • model_id Many2one → ir.model
    index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • name Char
    index=True required=True
  • perm_create Boolean
    string='Create Access'
  • perm_read Boolean
    string='Read Access'
  • perm_unlink Boolean
    string='Delete Access'
  • perm_write Boolean
    string='Write Access'
Public methods (6)
  • call_cache_clearing_methods(self)
    @api.model
  • check(self, model, mode='read', raise_exception=True)
    @api.model
  • create(self, vals_list)
    @api.model_create_multi
  • group_names_with_access(self, model_name, access_mode)
    @api.model
    Return the names of visible groups which have been granted ``access_mode`` on the model ``model_name``. :rtype: list
  • unlink(self)
  • write(self, vals)

New fields (6)
  • definition Char
    help='PostgreSQL constraint definition' readonly=True
  • message Char
    help='Error message returned when the constraint is violated.' translate=True
  • model Many2one → ir.model
    index=True ondelete='cascade' readonly=True required=True args: 'ir.model'
  • module Many2one → ir.module.module
    index=True ondelete='cascade' readonly=True required=True args: 'ir.module.module'
  • name Char
    help='PostgreSQL constraint or foreign key name.' index=True readonly=True required=True string='Constraint'
  • type Char
    help='Type of the constraint: `f` for a foreign key, `u` for other constraints.' readonly=True required=True size=1 string='Constraint Type'
Public methods (2)
  • copy_data(self, default=None)
  • unlink(self)

New fields (7)
  • complete_name Char
    compute='_compute_complete_name' string='Complete ID'
  • model Char
    required=True string='Model Name'
  • module Char
    default='' required=True
  • name Char
    help='External Key/Identifier that can be used for data integration with third-party systems' required=True string='External Identifier'
  • noupdate Boolean
    default=False string='Non Updatable'
  • reference Char
    compute='_compute_reference' readonly=True store=False string='Reference'
  • res_id Many2oneReference
    help='ID of the target record in the database' model_field='model' string='Record ID'
Public methods (6)
  • check_object_reference(self, module, xml_id, raise_on_access_error=False)
    @api.model
    Returns (model, res_id) corresponding to a given module and xml_id (cached), if and only if the user has the necessary access rights to see that object, otherwise raise a ValueError if raise_on_access_error is True or returns a tuple (model found, False)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • toggle_noupdate(self, model, res_id)
    @api.model
    Toggle the noupdate flag on the external id of the record
  • unlink(self)
    Regular unlink method, but make sure to clear the caches.
  • write(self, vals)

New fields (42)
  • column1 Char
    help='Column referring to the record in the model table' string='Column 1'
  • column2 Char
    help='Column referring to the record in the comodel table' string='Column 2'
  • company_dependent Boolean
    help='Whether values for this field is company dependent' readonly=True string='Company Dependent'
  • compute Text
    help="Code to compute the value of the field.\nIterate on the recordset 'self' and assign the field's value:\n\n for record in self:\n record['size'] = len(record.name)\n\nModules time, datetime, dateutil are available."
  • copied Boolean
    compute='_compute_copied' help='Whether the value is copied when duplicating a record.' readonly=False store=True string='Copied'
  • currency_field Char
    help='Name of the Many2one field holding the res.currency' string='Currency field'
  • depends Char
    help='Dependencies of compute method; a list of comma-separated field names, like\n\n name, partner_id.name' string='Dependencies'
  • domain Char
    default='[]' help="The optional domain to restrict possible values for relationship fields, specified as a Python expression defining a list of triplets. For example: [('color','=','red')]"
  • field_description Char
    default='' required=True string='Field Label' translate=True
  • group_expand Boolean
    help="If checked, all the records of the target model will be included\nin a grouped result (e.g. 'Group By' filters, Kanban columns, etc.).\nNote that it can significantly reduce performance if the target model\nof the field contains a lot of records; usually used on models with\nfew records (e.g. Stages, Job Positions, Event Types, etc.)." string='Expand Groups'
  • groups Many2many → res.groups
    args: 'res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id'
  • help Text
    string='Field Help' translate=True
  • index Boolean
    string='Indexed'
  • model Char
    help='The technical name of the model this field belongs to' index=True required=True string='Model Name'
  • model_id Many2one → ir.model
    help='The model this field belongs to' index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • modules Char
    compute='_in_modules' help='List of modules in which the field is defined' string='In Apps'
  • name Char
    default='x_' index=True required=True string='Field Name'
  • on_delete Selection
    default='set null' help='On delete property for many2one fields' string='On Delete' args: [('cascade', 'Cascade'), ('set null', 'Set NULL'), ('restrict', 'Restrict')]
  • readonly Boolean
  • related Char
    help='The corresponding related field, if any. This must be a dot-separated list of field names.' string='Related Field Definition'
  • related_field_id Many2one → ir.model.fields
    compute='_compute_related_field_id' ondelete='cascade' store=True string='Related Field' args: 'ir.model.fields'
  • relation Char
    help='For relationship fields, the technical name of the target model' string='Related Model'
  • relation_field Char
    help='For one2many fields, the field on the target model that implement the opposite many2one relationship'
  • relation_field_id Many2one → ir.model.fields
    compute='_compute_relation_field_id' ondelete='cascade' store=True string='Relation field' args: 'ir.model.fields'
  • relation_table Char
    help='Used for custom many2many fields to define a custom relation table name'
  • required Boolean
  • sanitize Boolean
    default=True string='Sanitize HTML'
  • sanitize_attributes Boolean
    default=True string='Sanitize HTML Attributes'
  • sanitize_form Boolean
    default=True string='Sanitize HTML Form'
  • sanitize_overridable Boolean
    default=False string='Sanitize HTML overridable'
  • sanitize_style Boolean
    default=False string='Sanitize HTML Style'
  • sanitize_tags Boolean
    default=True string='Sanitize HTML Tags'
  • selectable Boolean
    default=True
  • selection Char
    compute='_compute_selection' inverse='_inverse_selection' string='Selection Options (Deprecated)'
  • selection_ids One2many → ir.model.fields.selection
    copy=True string='Selection Options' args: 'ir.model.fields.selection', 'field_id'
  • size Integer
  • state Selection
    default='manual' index=True readonly=True required=True string='Type' args: [('manual', 'Custom Field'), ('base', 'Base Field')]
  • store Boolean
    default=True help='Whether the value is stored in the database.' string='Stored'
  • strip_classes Boolean
    default=False string='Strip Class Attribute'
  • strip_style Boolean
    default=False string='Strip Style Attribute'
  • translate Selection
    help='Whether values for this field can be translated (enables the translation mechanism for that field)' string='Translatable' args: [('standard', 'Translate as a whole'), ('html_translate', 'Translate HTML terms'), ('xml_translate', 'Translate XML terms')]
  • ttype Selection
    required=True selection=FIELD_TYPES string='Field Type'
Public methods (6)
  • create(self, vals_list)
    @api.model_create_multi
  • get_field_help(self, model_name)
    @api.model
    Return the translation of fields help in the context's language. Note that the result contains the available translations only. :param model_name: the name of a model :return: the model's fields' help as a dictionary `{field_name: field_help}`
  • get_field_selection(self, model_name, field_name)
    @api.model
    Return the translation of a field's selection in the context's language. Note that the result contains the available translations only. :param model_name: the name of the field's model :param field_name: the name of the field :return: the fields' selection as a list
  • get_field_string(self, model_name)
    @api.model
    Return the translation of fields strings in the context's language. Note that the result contains the available translations only. :param model_name: the name of a model :return: the model's fields' strings as a dictionary `{field_name: field_string}`
  • unlink(self)
  • write(self, vals)

New fields (4)
  • field_id Many2one → ir.model.fields
    domain=[('ttype', 'in', ['selection', 'reference'])] index=True ondelete='cascade' required=True args: 'ir.model.fields'
  • name Char
    required=True translate=True
  • sequence Integer
    default=1000
  • value Char
    required=True
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (3)
  • model_id Many2one → ir.model
    ondelete='cascade' required=True args: 'ir.model'
  • parent_field_id Many2one → ir.model.fields
    ondelete='cascade' args: 'ir.model.fields'
  • parent_id Many2one → ir.model
    ondelete='cascade' required=True args: 'ir.model'
Public methods (0)

No public methods.

New fields (5)
  • create_date Datetime
  • model Many2one → ir.model
    index=True ondelete='cascade' required=True args: 'ir.model'
  • module Many2one → ir.module.module
    index=True ondelete='cascade' required=True args: 'ir.module.module'
  • name Char
    help='PostgreSQL table name implementing a many2many relation.' index=True required=True string='Relation Name'
  • write_date Datetime
Public methods (0)

No public methods.

New fields (10)
  • child_ids One2many → ir.module.category
    string='Child Applications' args: 'ir.module.category', 'parent_id'
  • description Text
    string='Description' translate=True
  • exclusive Boolean
    string='Exclusive'
  • module_ids One2many → ir.module.module
    string='Modules' args: 'ir.module.module', 'category_id'
  • name Char
    required=True string='Name' translate=True
  • parent_id Many2one → ir.module.category
    index=True string='Parent Application' args: 'ir.module.category'
  • privilege_ids One2many → res.groups.privilege
    string='Privileges' args: 'res.groups.privilege', 'category_id'
  • sequence Integer
    string='Sequence'
  • visible Boolean
    default=True string='Visible'
  • xml_id Char
    compute='_compute_xml_id' string='External ID'
Public methods (0)

No public methods.

New fields (31)
  • application Boolean
    readonly=True args: 'Application'
  • author Char
    readonly=True args: 'Author'
  • auto_install Boolean
    help='An auto-installable module is automatically installed by the system when all its dependencies are satisfied. If the module has no dependency, it is always installed.' args: 'Automatic Installation'
  • category_id Many2one → ir.module.category
    index=True readonly=True string='Category' args: 'ir.module.category'
  • contributors Text
    readonly=True args: 'Contributors'
  • country_ids Many2many → res.country
    args: 'res.country', 'module_country', 'module_id', 'country_id'
  • demo Boolean
    default=False readonly=True args: 'Demo Data'
  • dependencies_id One2many → ir.module.module.dependency
    readonly=True string='Dependencies' args: 'ir.module.module.dependency', 'module_id'
  • description Text
    readonly=True translate=True args: 'Description'
  • description_html Html
    compute='_get_desc' args: 'Description HTML'
  • exclusion_ids One2many → ir.module.module.exclusion
    readonly=True string='Exclusions' args: 'ir.module.module.exclusion', 'module_id'
  • has_iap Boolean
    compute='_compute_has_iap'
  • icon Char
    args: 'Icon URL'
  • icon_flag Char
    compute='_get_icon_image' string='Flag'
  • icon_image Binary
    compute='_get_icon_image' string='Icon'
  • installed_version Char
    compute='_get_latest_version' args: 'Latest Version'
  • latest_version Char
    readonly=True args: 'Installed Version'
  • license Selection
    default='LGPL-3' readonly=True string='License' args: [('GPL-2', 'GPL Version 2'), ('GPL-2 or any later version', 'GPL-2 or later version'), ('GPL-3', 'GPL Version 3'), ('GPL-3 or any later version', 'GPL-3 or later version'), ('AGPL-3', 'Affero GPL-3'), ('LGPL-3', 'LGPL Version 3'), ('Other OSI approved licence', 'Other OSI Approved License'), ('OEEL-1', 'Odoo Enterprise Edition License v1.0'), ('OPL-1', 'Odoo Proprietary License v1.0'), ('Other proprietary', 'Other Proprietary')]
  • maintainer Char
    readonly=True args: 'Maintainer'
  • menus_by_module Text
    compute='_get_views' store=True string='Menus'
  • name Char
    readonly=True required=True args: 'Technical Name'
  • published_version Char
    readonly=True args: 'Published Version'
  • reports_by_module Text
    compute='_get_views' store=True string='Reports'
  • sequence Integer
    default=100 args: 'Sequence'
  • shortdesc Char
    readonly=True translate=True args: 'Module Name'
  • state Selection
    default='uninstallable' index=True readonly=True string='Status' args: STATES
  • summary Char
    readonly=True translate=True args: 'Summary'
  • to_buy Boolean
    default=False args: 'Odoo Enterprise Module'
  • url Char
    readonly=True args: 'URL'
  • views_by_module Text
    compute='_get_views' store=True string='Views'
  • website Char
    readonly=True args: 'Website'
Public methods (20)
  • button_immediate_install(self)
    @assert_log_admin_access
    Installs the selected module(s) immediately and fully, returns the next res.config action to execute :returns: next res.config item to execute :rtype: dict[str, object]
  • button_immediate_uninstall(self)
    @assert_log_admin_access
    Uninstall the selected module(s) immediately and fully, returns the next res.config action to execute
  • button_immediate_upgrade(self)
    @assert_log_admin_access
    Upgrade the selected module(s) immediately and fully, return the next res.config action to execute
  • button_install(self)
    @assert_log_admin_access
  • button_reset_state(self)
    @assert_log_admin_access@api.model
  • button_uninstall(self)
    @assert_log_admin_access
  • button_uninstall_wizard(self)
    @assert_log_admin_access
    Launch the wizard to uninstall the given module.
  • button_upgrade(self)
    @assert_log_admin_access
  • check_external_dependencies(self, module_name, newstate='to install')
  • check_module_update(self)
    @api.model
  • create(self, vals_list)
    @api.model_create_multi
  • downstream_dependencies(self, known_deps=None, exclude_states=('uninstalled', 'uninstallable', 'to remove'))
    Return the modules that directly or indirectly depend on the modules in `self`, and that satisfy the `exclude_states` filter.
  • get_module_info(cls, name)
    @classmethod
  • get_values_from_terp(terp)
    @staticmethod
  • module_uninstall(self)
    @assert_log_admin_access
    Perform the various steps required to uninstall a module completely including the deletion of all database structures created by the module: tables, columns, constraints, etc.
  • next(self)
    Return the action linked to an ir.actions.todo is there exists one that should be executed. Otherwise, redirect to /web
  • search_panel_select_range(self, field_name, **kwargs)
    @api.model
  • unlink(self)
  • update_list(self)
    @assert_log_admin_access@api.model
  • upstream_dependencies(self, known_deps=None, exclude_states=('installed', 'uninstallable', 'to remove'))
    Return the dependency tree of modules of the modules in `self`, and that satisfy the `exclude_states` filter.

New fields (5)
  • auto_install_required Boolean
    default=True help='Whether this dependency blocks automatic installation of the dependent'
  • depend_id Many2one → ir.module.module
    compute='_compute_depend' search='_search_depend' args: 'ir.module.module', 'Dependency'
  • module_id Many2one → ir.module.module
    ondelete='cascade' args: 'ir.module.module', 'Module'
  • name Char
    index=True
  • state Selection
    compute='_compute_state' string='Status' args: DEP_STATES
Public methods (1)
  • all_dependencies(self, module_names)
    @api.model

New fields (4)
  • exclusion_id Many2one → ir.module.module
    compute='_compute_exclusion' search='_search_exclusion' args: 'ir.module.module', 'Exclusion Module'
  • module_id Many2one → ir.module.module
    ondelete='cascade' args: 'ir.module.module', 'Module'
  • name Char
    index=True
  • state Selection
    compute='_compute_state' string='Status' args: DEP_STATES
Public methods (0)

No public methods.

New fields (16)
  • config_url Text
    compute='_compute_config_url' args: 'Open profiles config'
  • cpu_duration Float
    digits=(9, 3) help='CPU clock (not including other processes or SQL)' args: 'CPU Duration'
  • create_date Datetime
    args: 'Creation Date'
  • duration Float
    digits=(9, 3) help='Real elapsed time' args: 'Duration'
  • entry_count Integer
    args: 'Entry count'
  • init_stack_trace Text
    prefetch=False args: 'Initial stack trace'
  • name Char
    args: 'Description'
  • others Text
    prefetch=False args: 'others'
  • qweb Text
    prefetch=False args: 'Qweb'
  • session Char
    index=True args: 'Session'
  • speedscope Binary
    compute='_compute_speedscope' args: 'Speedscope'
  • speedscope_url Text
    compute='_compute_speedscope_url' args: 'Open'
  • sql Text
    prefetch=False args: 'Sql'
  • sql_count Integer
    args: 'Queries Count'
  • traces_async Text
    prefetch=False args: 'Traces Async'
  • traces_sync Text
    prefetch=False args: 'Traces Sync'
Public methods (2)
  • action_view_speedscope(self)
  • set_profiling(self, profile=None, collectors=None, params=None)
    @api.model
    Enable or disable profiling for the current user. :param profile: ``True`` to enable profiling, ``False`` to disable it. :param list collectors: optional list of collectors to use (string) :param dict params: optional parameters set on the profiler object

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (5)
  • attributes(self, record, field_name, options, values=None)
    @api.model
    attributes(record, field_name, field, options, values) Generates the metadata attributes (prefixed by ``data-oe-``) for the root node of the field conversion. The default attributes are: * ``model``, the name of the record's model * ``id`` the id of the record to which the field belongs * ``type`` the logical field type (widget, may not match the field's ``type``, may not be any Field subclass name) * ``translate``, a boolean flag (``0`` or ``1``) denoting whether the field is translatable * ``readonly``, has this attribute if the field is readonly * ``expression``, the original expression :returns: dict (attribute name, attribute value).
  • get_available_options(self)
    @api.model
    Get the available option informations. :rtype: dict[str, dict[str, Any]] :return: A dictionnary that maps option names' to their settings. The settings are dict themselves and have the following keys: type Guaranteed, one of ``'string'``, ``'integer'``, ``'float'``, ``'model'``, ``'array'``, or ``'selection'``. string Guaranteed description Optional required Optional, is assumed ``False`` when absent, otherwise is either ``True`` or a string. params Optional default_value Optional, the default value, as a json-friendly type. Example:: { <option>: { # guaranteed 'type': ..., 'string': ..., # optional 'default_value': ..., 'description': ..., 'params': ..., 'required': ..., } }
  • record_to_html(self, record, field_name, options)
    @api.model
    record_to_html(record, field_name, options) Converts the specified field of the ``record`` to HTML :rtype: unicode
  • user_lang(self)
    @api.model
    user_lang() Fetches the res.lang record corresponding to the language code stored in the user's context. :returns: Model[res.lang]
  • value_to_html(self, value, options)
    @api.model
    value_to_html(value, field, options=None) Converts a single value to its HTML version/output :rtype: unicode

New fields (0)

No new fields.

Public methods (2)
  • get_available_options(self)
    @api.model
  • value_to_html(self, value, options=None)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_available_options(self)
    @api.model
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_available_options(self)
    @api.model
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_available_options(self)
    @api.model
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_available_options(self)
    @api.model
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (3)
  • get_available_options(self)
    @api.model
  • record_to_html(self, record, field_name, options)
    @api.model
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_available_options(self)
    @api.model
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (3)
  • get_available_options(self)
    @api.model
  • record_to_html(self, record, field_name, options)
    @api.model
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • value_to_html(self, value, options)
    @api.model

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 (3)
  • get_available_options(self)
    @api.model
  • record_to_html(self, record, field_name, options)
    @api.model
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (3)
  • get_available_options(self)
    @api.model
  • record_to_html(self, record, field_name, options)
    @api.model
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • value_to_html(self, value, options)
    @api.model
    Escapes the value and converts newlines to br. This is bullshit.

New fields (0)

No new fields.

Public methods (1)
  • value_to_html(self, value, options)
    @api.model

New fields (9)
  • active Boolean
    default=True help='If you uncheck the active field, it will disable the record rule without deleting it (if you delete a native record rule, it may be re-created when you reload the module).'
  • domain_force Text
    string='Domain'
  • groups Many2many → res.groups
    ondelete='restrict' args: 'res.groups', 'rule_group_rel', 'rule_group_id', 'group_id'
  • model_id Many2one → ir.model
    index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • name Char
  • perm_create Boolean
    default=True string='Create'
  • perm_read Boolean
    default=True string='Read'
  • perm_unlink Boolean
    default=True string='Delete'
  • perm_write Boolean
    default=True string='Write'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (13)
  • active Boolean
    default=True
  • code Char
    string='Sequence Code'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • date_range_ids One2many → ir.sequence.date_range
    string='Subsequences' args: 'ir.sequence.date_range', 'sequence_id'
  • implementation Selection
    default='standard' help="While assigning a sequence number to a record, the 'no gap' sequence implementation ensures that each previous sequence number has been assigned already. While this sequence implementation will not skip any sequence number upon assignment, there can still be gaps in the sequence if records are deleted. The 'no gap' implementation is slower than the standard one." required=True string='Implementation' args: [('standard', 'Standard'), ('no_gap', 'No gap')]
  • name Char
    required=True
  • number_increment Integer
    default=1 help='The next number of the sequence will be incremented by this number' required=True string='Step'
  • number_next Integer
    default=1 help='Next number of this sequence' required=True string='Next Number'
  • number_next_actual Integer
    compute='_get_number_next_actual' help='Next number that will be used. This number can be incremented frequently so the displayed value might already be obsolete' inverse='_set_number_next_actual' string='Actual Next Number'
  • padding Integer
    default=0 help="Odoo will automatically adds some '0' on the left of the 'Next Number' to get the required padding size." required=True string='Sequence Size'
  • prefix Char
    help='Prefix value of the record for the sequence' trim=False
  • suffix Char
    help='Suffix value of the record for the sequence' trim=False
  • use_date_range Boolean
    string='Use subsequences per date_range'
Public methods (6)
  • create(self, vals_list)
    @api.model_create_multi
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get_next_char(self, number_next)
  • next_by_code(self, sequence_code, sequence_date=None)
    @api.model
    Draw an interpolated string using a sequence with the requested code. If several sequences with the correct code are available to the user (multi-company cases), the one from the user's current company will be used.
  • next_by_id(self, sequence_date=None)
    Draw an interpolated string using the specified sequence.
  • unlink(self)
  • write(self, vals)

New fields (5)
  • date_from Date
    required=True string='From'
  • date_to Date
    required=True string='To'
  • number_next Integer
    default=1 help='Next number of this sequence' required=True string='Next Number'
  • number_next_actual Integer
    compute='_get_number_next_actual' help='Next number that will be used. This number can be incremented frequently so the displayed value might already be obsolete' inverse='_set_number_next_actual' string='Actual Next Number'
  • sequence_id Many2one → ir.sequence
    ondelete='cascade' required=True string='Main Sequence' args: 'ir.sequence'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • default_get(self, fields)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (11)
  • action Reference
    selection=[('ir.actions.report', 'ir.actions.report'), ('ir.actions.act_window', 'ir.actions.act_window'), ('ir.actions.act_url', 'ir.actions.act_url'), ('ir.actions.server', 'ir.actions.server'), ('ir.actions.client', 'ir.actions.client')]
  • active Boolean
    default=True
  • child_id One2many → ir.ui.menu
    string='Child IDs' args: 'ir.ui.menu', 'parent_id'
  • complete_name Char
    compute='_compute_complete_name' recursive=True string='Full Path'
  • group_ids Many2many → res.groups
    help="If you have groups, the visibility of this menu will be based on these groups. If this field is empty, Odoo will compute visibility based on the related object's read access." string='Groups' args: 'res.groups', 'ir_ui_menu_group_rel', 'menu_id', 'gid'
  • name Char
    required=True string='Menu' translate=True
  • parent_id Many2one → ir.ui.menu
    index=True ondelete='restrict' string='Parent Menu' args: 'ir.ui.menu'
  • parent_path Char
    index=True
  • sequence Integer
    default=10
  • web_icon Char
    string='Web Icon File'
  • web_icon_data Binary
    attachment=True string='Web Icon Image'
Public methods (7)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_user_roots(self)
    @api.model
    Return all root menu ids visible for the user. :return: the root menu ids :rtype: list(int)
  • load_menus(self, debug)
    @api.model@tools.ormcache('self.env.uid', 'debug', 'self.env.lang')
  • load_menus_root(self)
    @api.model@tools.ormcache('self.env.uid', 'self.env.lang')
  • unlink(self)
  • write(self, vals)

New fields (21)
  • active Boolean
    default=True help='If this view is inherited,\n* if True, the view always extends its parent\n* if False, the view currently does not extend its parent but can be enabled\n '
  • arch Text
    compute='_compute_arch' help='This field should be used when accessing view arch. It will use translation.\n Note that it will read `arch_db` or `arch_fs` if in dev-xml mode.' inverse='_inverse_arch' string='View Architecture'
  • arch_base Text
    compute='_compute_arch_base' help='This field is the same as `arch` field without translations' inverse='_inverse_arch_base' string='Base View Architecture'
  • arch_db Text
    help='This field stores the view arch.' string='Arch Blob' translate=xml_translate
  • arch_fs Char
    help='File from where the view originates.\n Useful to (hard) reset broken views or to read arch from file in dev-xml mode.' string='Arch Filename'
  • arch_prev Text
    help='This field will save the current `arch_db` before writing on it.\n Useful to (soft) reset a broken view.' string='Previous View Architecture'
  • arch_updated Boolean
    string='Modified Architecture'
  • group_ids Many2many → res.groups
    help='If this field is empty, the view applies to all users. Otherwise, the view applies to the users of those groups only.' string='Groups' args: 'res.groups', 'ir_ui_view_group_rel', 'view_id', 'group_id'
  • inherit_children_ids One2many → ir.ui.view
    string='Views which inherit from this one' args: 'ir.ui.view', 'inherit_id'
  • inherit_id Many2one → ir.ui.view
    index=True ondelete='restrict' string='Inherited View' args: 'ir.ui.view'
  • invalid_locators Json
    compute='_compute_invalid_locators'
  • key Char
    index='btree_not_null'
  • mode Selection
    default='primary' help="Only applies if this view inherits from an other one (inherit_id is not False/Null).\n\n* if extension (default), if this view is requested the closest primary view\nis looked up (via inherit_id), then all views inheriting from it with this\nview's model are applied\n* if primary, the closest primary view is fully resolved (even if it uses a\ndifferent model than this one), then this view's inheritance specs\n(<xpath/>) are applied, and the result is used as if it were this view's\nactual arch.\n" required=True string='View inheritance mode' args: [('primary', 'Base view'), ('extension', 'Extension View')]
  • model Char
    index=True
  • model_data_id Many2one → ir.model.data
    compute='_compute_model_data_id' search='_search_model_data_id' string='Model Data' args: 'ir.model.data'
  • model_id Many2one → ir.model
    compute='_compute_model_id' inverse='_inverse_compute_model_id' string='Model of the view' args: 'ir.model'
  • name Char
    required=True string='View Name'
  • priority Integer
    default=16 required=True string='Sequence'
  • type Selection
    string='View Type' args: [('list', 'List'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('kanban', 'Kanban'), ('search', 'Search'), ('qweb', 'QWeb')]
  • warning_info Html
    compute='_compute_warning_info' string='Warning information'
  • xml_id Char
    compute='_compute_xml_id' help='ID of the view defined in xml file' string='External ID'
Public methods (14)
  • apply_inheritance_specs(self, source, specs_tree, pre_locate=None)
    @api.model
    Apply an inheriting view (a descendant of the base view) Apply to a source architecture all the spec nodes (i.e. nodes describing where and what changes to apply to some parent architecture) given by an inheriting view. :param Element source: a parent architecture to modify :param Element specs_tree: a modifying architecture in an inheriting view :param (optional) pre_locate: function that is execute before locating a node. This function receives an arch as argument. :return: a modified source where the specs are applied :rtype: Element
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_view(self, model, view_type)
    @api.model
    Fetches the default view for the provided (model, view_type) pair: primary view with the lowest priority. :param str model: :param int view_type: :return: id of the default view of False if none found :rtype: int
  • distribute_branding(self, e, branding=None, parent_xpath='', index_map=ConstantMapping(1))
  • get_combined_arch(self)
    Return the arch of ``self`` (as a string) combined with its inherited views.
  • inherit_branding(self, specs_tree)
  • is_node_branded(self, node)
    Finds out whether a node is branded or qweb-active (bears a @data-oe-model or a @t-* *which is not t-field* as t-field does not section out views) :param node: an etree-compatible element to test :type node: etree._Element :rtype: boolean
  • locate_node(self, arch, spec)
    Locate a node in a source (parent) architecture. Given a complete source (parent) architecture (i.e. the field `arch` in a view), and a 'spec' node (a node in an inheriting view that specifies the location in the source view of what should be changed), return (if it exists) the node in the source view matching the specification. :param arch: a parent architecture to modify :param spec: a modifying node in an inheriting view :return: a node in the source matching the spec
  • postprocess_and_fields(self, node, model=None, **options)
    Return an architecture and a description of all the fields. The field description combines the result of fields_get() and postprocess(). :param self: the view to postprocess :param node: the architecture as an etree :param model: the view's reference model name :return: a tuple (arch, fields) where arch is the given node as a string and fields is the description of all the fields.
  • render_public_asset(self, template, values=None)
    @api.readonly@api.model
  • reset_arch(self, mode='soft')
    Reset the view arch to its previous arch (soft) or its XML file arch if exists (hard).
  • unlink(self)
  • write(self, vals)

New fields (3)
  • arch Text
    required=True string='View Architecture'
  • ref_id Many2one → ir.ui.view
    index=True ondelete='cascade' required=True string='Original View' args: 'ir.ui.view'
  • user_id Many2one → res.users
    index=True ondelete='cascade' required=True string='User' args: 'res.users'
Public methods (0)

No public methods.

New fields (2)
  • properties_definition PropertiesDefinition
    args: 'Properties Definition'
  • properties_field_id Many2one → ir.model.fields
    ondelete='cascade' required=True args: 'ir.model.fields'
Public methods (1)
  • write(self, vals)

New fields (2)
  • properties Properties
    copy=True definition='properties_base_definition_id.properties_definition' string='Properties'
  • properties_base_definition_id Many2one → properties.base.definition
    compute='_compute_properties_base_definition_id' search='_search_properties_base_definition_id' args: 'properties.base.definition'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • image Char
    string='Preview image src'
  • name Char
  • pdf Char
    string='Preview pdf src'
  • sequence Integer
    default=50
  • view_id Many2one → ir.ui.view
    required=True args: 'ir.ui.view', 'Document Template'
Public methods (0)

No public methods.

New fields (18)
  • css_margins Boolean
    default=False args: 'Use css margins'
  • default Boolean
    args: 'Default paper format?'
  • disable_shrinking Boolean
    args: 'Disable smart shrinking'
  • dpi Integer
    default=90 required=True args: 'Output DPI'
  • format Selection
    default='A4' help='Select Proper Paper size' args: <expr>, 'Paper size'
  • header_line Boolean
    default=False args: 'Display a header line'
  • header_spacing Integer
    default=35 args: 'Header spacing'
  • margin_bottom Float
    default=20 args: 'Bottom Margin (mm)'
  • margin_left Float
    default=7 args: 'Left Margin (mm)'
  • margin_right Float
    default=7 args: 'Right Margin (mm)'
  • margin_top Float
    default=40 args: 'Top Margin (mm)'
  • name Char
    required=True args: 'Name'
  • orientation Selection
    default='Landscape' args: [('Landscape', 'Landscape'), ('Portrait', 'Portrait')], 'Orientation'
  • page_height Integer
    default=False args: 'Page height (mm)'
  • page_width Integer
    default=False args: 'Page width (mm)'
  • print_page_height Float
    compute='_compute_print_page_size' args: 'Print page height (mm)'
  • print_page_width Float
    compute='_compute_print_page_size' args: 'Print page width (mm)'
  • report_ids One2many → ir.actions.report
    help='Explicitly associated reports' args: 'ir.actions.report', 'paperformat_id', 'Associated reports'
Public methods (0)

No public methods.

New fields (12)
  • active Boolean
    default=True
  • bic Char
    help='Sometimes called BIC or Swift.' index=True args: 'Bank Identifier Code'
  • city Char
  • country Many2one → res.country
    args: 'res.country'
  • country_code Char
    related='country.code' string='Country Code'
  • email Char
  • name Char
    required=True
  • phone Char
  • state Many2one → res.country.state
    domain="[('country_id', '=?', country)]" args: 'res.country.state', 'Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (42)
  • active Boolean
    default=True
  • all_child_ids One2many → res.company
    context={'active_test': False} args: 'res.company', 'parent_id'
  • bank_ids One2many
    readonly=False related='partner_id.bank_ids'
  • child_ids One2many → res.company
    string='Branches' args: 'res.company', 'parent_id'
  • city Char
    compute='_compute_address' inverse='_inverse_city'
  • color Integer
    compute='_compute_color' inverse='_inverse_color'
  • company_details Html
    help='Header text displayed at the top of all reports.' string='Company Details' translate=True
  • company_registry Char
    readonly=False related='partner_id.company_registry' string='Company ID'
  • company_registry_placeholder Char
    related='partner_id.company_registry_placeholder'
  • country_code Char
    depends=['country_id'] related='country_id.code'
  • country_id Many2one → res.country
    compute='_compute_address' inverse='_inverse_country' string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • email Char
    readonly=False related='partner_id.email' store=True
  • external_report_layout_id Many2one → ir.ui.view
    args: 'ir.ui.view', 'Document Template'
  • font Selection
    default='Lato' args: [('Lato', 'Lato'), ('Roboto', 'Roboto'), ('Open_Sans', 'Open Sans'), ('Montserrat', 'Montserrat'), ('Oswald', 'Oswald'), ('Raleway', 'Raleway'), ('Tajawal', 'Tajawal'), ('Fira_Mono', 'Fira Mono')]
  • is_company_details_empty Boolean
    compute='_compute_empty_company_details'
  • layout_background Selection
    default='Blank' required=True args: [('Blank', 'Blank'), ('Demo logo', 'Demo logo'), ('Custom', 'Custom')]
  • layout_background_image Binary
    args: 'Background Image'
  • logo Binary
    default=_get_logo readonly=False related='partner_id.image_1920' string='Company Logo'
  • logo_web Binary
    attachment=False compute='_compute_logo_web' store=True
  • name Char
    readonly=False related='partner_id.name' required=True store=True string='Company Name'
  • paperformat_id Many2one → report.paperformat
    default=<expr> args: 'report.paperformat', 'Paper format'
  • parent_id Many2one → res.company
    index=True ondelete='restrict' string='Parent Company' args: 'res.company'
  • parent_ids Many2many → res.company
    compute='_compute_parent_ids' compute_sudo=True args: 'res.company'
  • parent_path Char
    index=True
  • partner_id Many2one → res.partner
    index=True required=True string='Partner' args: 'res.partner'
  • phone Char
    readonly=False related='partner_id.phone' store=True
  • primary_color Char
  • report_footer Html
    help='Footer text displayed at the bottom of all reports.' string='Report Footer' translate=True
  • report_header Html
    help="Company tagline, which is included in a printed document's header or footer (depending on the selected layout)." string='Company Tagline' translate=True
  • root_id Many2one → res.company
    compute='_compute_parent_ids' compute_sudo=True args: 'res.company'
  • secondary_color Char
  • sequence Integer
    default=10 help='Used to order Companies in the company switcher'
  • state_id Many2one → res.country.state
    compute='_compute_address' domain="[('country_id', '=?', country_id)]" inverse='_inverse_state' string='Fed. State' args: 'res.country.state'
  • street Char
    compute='_compute_address' inverse='_inverse_street'
  • street2 Char
    compute='_compute_address' inverse='_inverse_street2'
  • uninstalled_l10n_module_ids Many2many → ir.module.module
    compute='_compute_uninstalled_l10n_module_ids' args: 'ir.module.module'
  • user_ids Many2many → res.users
    string='Accepted Users' args: 'res.users', 'res_company_users_rel', 'cid', 'user_id'
  • uses_default_logo Boolean
    compute='_compute_uses_default_logo' store=True
  • vat Char
    readonly=False related='partner_id.vat' string='Tax ID'
  • website Char
    readonly=False related='partner_id.website'
  • zip Char
    compute='_compute_address' inverse='_inverse_zip'
Public methods (8)
  • action_all_company_branches(self)
  • cache_invalidation_fields(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • init(self)
  • install_l10n_modules(self)
  • unlink(self)
    Unlink the companies and clear the cache to make sure that _get_company_ids of res.users gets only existing company ids.
  • write(self, vals)

New fields (0)

No new fields.

Public methods (7)
  • action_cancel(self)
    Action handler for the ``cancel`` event. That event isn't generated by the res.config.view.base inheritable view, the inherited view has to overload one of the buttons (or add one more). Sets the status of the todo the event was sent from to ``cancel``, calls ``cancel`` and -- unless ``cancel`` returned an action dictionary -- executes the action provided by calling ``next``.
  • action_next(self)
    Action handler for the ``next`` event. Sets the status of the todo the event was sent from to ``done``, calls ``execute`` and -- unless ``execute`` returned an action dictionary -- executes the action provided by calling ``next``.
  • action_skip(self)
    Action handler for the ``skip`` event. Sets the status of the todo the event was sent from to ``skip``, calls ``cancel`` and -- unless ``cancel`` returned an action dictionary -- executes the action provided by calling ``next``.
  • cancel(self)
    Method called when the user click on the ``Skip`` button. ``cancel`` should be overloaded instead of ``action_skip``. As with ``execute``, if it returns an action dictionary that action is executed in stead of the default (going to the next configuration item) The default implementation is a NOOP. ``cancel`` is also called by the default implementation of ``action_cancel``.
  • execute(self)
    Method called when the user clicks on the ``Next`` button. Execute *must* be overloaded unless ``action_next`` is overloaded (which is something you generally don't need to do). If ``execute`` returns an action dictionary, that action is executed rather than just going to the next configuration item.
  • next(self)
    Reload the settings page
  • start(self)

New fields (0)

No new fields.

Public methods (11)
  • action_open_template_user(self)
  • cancel(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • execute(self)
    Called when settings are saved. This method will call `set_values` and will install/uninstall any modules defined by `module_` Boolean fields and then trigger a web client reload. .. warning:: This method **SHOULD NOT** be overridden, in most cases what you want to override is `~set_values()` since `~execute()` does little more than simply call `~set_values()`. The part that installs/uninstalls modules **MUST ALWAYS** be at the end of the transaction, otherwise there's a big risk of registry <-> database desynchronisation.
  • get_config_warning(self, msg)
    @api.model
    Helper: return a Warning exception with the given message where the ``%(field:xxx)s`` and/or ``%(menu:yyy)s`` are replaced by the human readable field's name and/or menuitem's full path. Usage: ------ Just include in your error message ``%(field:model_name.field_name)s`` to obtain the human readable field's name, and/or %(menu:module_name.menuitem_xml_id)s to obtain the menuitem's full path. Example of use: --------------- .. code-block:: python raise env['ir..config.settings'](_( "Error: this action is prohibited. You should check the " "field %(field:sale.config.settings.fetchmail_lead)s in " "%(menu:sales_team.menu_sale_config)s.")) This will return an exception containing the following message: Error: this action is prohibited. You should check the field Create leads from incoming mails in Settings/Configuration/Sales. What if there is another substitution in the message already? ------------------------------------------------------------- You could have a situation where the error message you want to upgrade already contains a substitution. Example: Cannot find any account journal of %s type for this company. You can create one in the menu: Configuration/Journals/Journals. What you want to do here is simply to replace the path by ``%menu:account.menu_account_config)s``, and leave the rest alone. In order to do that, you can use the double percent (``%%``) to escape your new substitution, like so: Cannot find any account journal of %s type for this company. You can create one in the %%(menu:account.menu_account_config)s.
  • get_option_name(self, full_field_name)
    @api.model
    Fetch the human readable name of a specified configuration option. :param string full_field_name: the full name of the field, structured as follows: model_name.field_name (e.g.: "sale.config.settings.fetchmail_lead") :return: human readable name of the field (e.g.: "Create leads from incoming mails") :rtype: str
  • get_option_path(self, menu_xml_id)
    @api.model
    Fetch the path to a specified configuration view and the action id to access it. :param string menu_xml_id: the xml id of the menuitem where the view is located, structured as follows: module_name.menuitem_xml_id (e.g.: "sales_team.menu_sale_config") :return: a 2-value tuple where - t[0]: string: full path to the menuitem (e.g.: "Settings/Configuration/Sales") - t[1]: int or long: id of the menuitem's action
  • get_values(self)
    @api.model
    Return values for the fields other that `default`, `group` and `module`
  • set_values(self)
    Set values for the fields other that `default`, `group` and `module`

New fields (14)
  • address_format Text
    default='%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s' help="Display format to use for addresses belonging to this country.\n\nYou can use python-style string pattern with all the fields of the address (for example, use '%(street)s' to display the field 'street') plus\n%(state_name)s: the name of the state\n%(state_code)s: the code of the state\n%(country_name)s: the name of the country\n%(country_code)s: the code of the country" string='Layout in Reports'
  • address_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('model', '=', 'res.partner'), ('type', '=', 'form')] help='Use this field if you want to replace the usual way to encode a complete address. Note that the address_format field is used to modify the way to display addresses (in reports for example), while this field is used to modify the input form for addresses.' string='Input View'
  • code Char
    help='The ISO country code in two chars. \nYou can use this field for quick search.' required=True size=2 string='Country Code'
  • country_group_codes Json
    compute='_compute_country_group_codes'
  • country_group_ids Many2many → res.country.group
    string='Country Groups' args: 'res.country.group', 'res_country_res_country_group_rel', 'res_country_id', 'res_country_group_id'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • image_url Char
    compute='_compute_image_url' help='Url of static flag image' string='Flag'
  • name Char
    required=True string='Country Name' translate=True
  • name_position Selection
    default='before' help='Determines where the customer/company name should be placed, i.e. after or before the address.' string='Customer Name Position' args: [('before', 'Before Address'), ('after', 'After Address')]
  • phone_code Integer
    string='Country Calling Code'
  • state_ids One2many → res.country.state
    string='States' args: 'res.country.state', 'country_id'
  • state_required Boolean
    default=False
  • vat_label Char
    help='Use this field if you want to change vat label.' prefetch=True string='Vat Label' translate=True
  • zip_required Boolean
    default=True
Public methods (5)
  • create(self, vals_list)
    @api.model_create_multi
  • get_address_fields(self)
  • name_search(self, name='', domain=None, operator='ilike', limit=100)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (3)
  • code Char
    string='Code'
  • country_ids Many2many → res.country
    string='Countries' args: 'res.country', 'res_country_res_country_group_rel', 'res_country_group_id', 'res_country_id'
  • name Char
    required=True translate=True
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (3)
  • code Char
    help='The state code.' required=True string='State Code'
  • country_id Many2one → res.country
    index=True required=True string='Country' args: 'res.country'
  • name Char
    help='Administrative divisions of a country. E.g. Fed. State, Department, Canton' required=True string='State Name'
Public methods (1)
  • name_search(self, name='', domain=None, operator='ilike', limit=100)
    @api.model

New fields (16)
  • active Boolean
    default=True
  • currency_subunit_label Char
    string='Currency Subunit' translate=True
  • currency_unit_label Char
    string='Currency Unit' translate=True
  • date Date
    compute='_compute_date'
  • decimal_places Integer
    compute='_compute_decimal_places' help='Decimal places taken into account for operations on amounts in this currency. It is determined by the rounding factor.' store=True
  • full_name Char
    string='Name'
  • inverse_rate Float
    compute='_compute_current_rate' digits=0 help='The currency of rate 1 to the rate of the currency.' readonly=True
  • is_current_company_currency Boolean
    compute='_compute_is_current_company_currency'
  • iso_numeric Integer
    help='Currency Numeric Code (ISO 4217).' string='Currency numeric code.'
  • name Char
    help='Currency Code (ISO 4217)' required=True size=3 string='Currency'
  • position Selection
    default='after' help='Determines where the currency symbol should be placed after or before the amount.' string='Symbol Position' args: [('after', 'After Amount'), ('before', 'Before Amount')]
  • rate Float
    compute='_compute_current_rate' digits=0 help='The rate of the currency to the currency of rate 1.' string='Current Rate'
  • rate_ids One2many → res.currency.rate
    string='Rates' args: 'res.currency.rate', 'currency_id'
  • rate_string Char
    compute='_compute_current_rate'
  • rounding Float
    default=0.01 digits=(12, 6) help='Amounts in this currency are rounded off to the nearest multiple of the rounding factor.' string='Rounding Factor'
  • symbol Char
    help='Currency sign, to be used when printing amounts.' required=True
Public methods (9)
  • amount_to_text(self, amount)
  • compare_amounts(self, amount1, amount2)
    Compare ``amount1`` and ``amount2`` after rounding them according to the given currency's precision.. An amount is considered lower/greater than another amount if their rounded value is different. This is not the same as having a non-zero difference! For example 1.432 and 1.431 are equal at 2 digits precision, so this method would return 0. However 0.006 and 0.002 are considered different (returns 1) because they respectively round to 0.01 and 0.0, even though 0.006-0.002 = 0.004 which would be considered zero at 2 digits precision. :param float amount1: first amount to compare :param float amount2: second amount to compare :return: (resp.) -1, 0 or 1, if ``amount1`` is (resp.) lower than, equal to, or greater than ``amount2``, according to ``currency``'s rounding. With the new API, call it like: ``currency.compare_amounts(amount1, amount2)``.
  • create(self, vals_list)
    @api.model_create_multi
  • format(self, amount)
    Return ``amount`` formatted according to ``self``'s rounding rules, symbols and positions. Also take care of removing the minus sign when 0.0 is negative :param float amount: the amount to round :return: formatted str
  • get_all_currencies(self)
    @ormcache(cache='stable')@api.model
  • is_zero(self, amount)
    Returns true if ``amount`` is small enough to be treated as zero according to current currency's rounding rules. Warning: ``is_zero(amount1-amount2)`` is not always equivalent to ``compare_amounts(amount1,amount2) == 0``, as the former will round after computing the difference, while the latter will round before, giving different results for e.g. 0.006 and 0.002 at 2 digits precision. :param float amount: amount to compare with currency's zero With the new API, call it like: ``currency.is_zero(amount)``.
  • round(self, amount)
    Return ``amount`` rounded according to ``self``'s rounding rules. :param float amount: the amount to round :return: rounded float
  • unlink(self)
  • write(self, vals)

New fields (6)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • company_rate Float
    aggregator='avg' compute='_compute_company_rate' digits=0 help='The currency of rate 1 to the rate of the currency.' inverse='_inverse_company_rate'
  • currency_id Many2one → res.currency
    index=True ondelete='cascade' readonly=True required=True string='Currency' args: 'res.currency'
  • inverse_company_rate Float
    aggregator='avg' compute='_compute_inverse_company_rate' digits=0 help='The rate of the currency to the currency of rate 1 ' inverse='_inverse_inverse_company_rate'
  • name Date
    default=fields.Date.context_today index=True required=True string='Date'
  • rate Float
    aggregator='avg' digits=0 help='The rate of the currency to the currency of rate 1' string='Technical Rate'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • init(self)
  • revoke(self)
    @check_identity

New fields (13)
  • browser Char
    args: 'Browser'
  • city Char
    args: 'City'
  • country Char
    args: 'Country'
  • device_type Selection
    args: [('computer', 'Computer'), ('mobile', 'Mobile')], 'Device Type'
  • first_activity Datetime
    args: 'First Activity'
  • ip_address Char
    args: 'IP Address'
  • is_current Boolean
    compute='_compute_is_current' args: 'Current Device'
  • last_activity Datetime
    index='btree' args: 'Last Activity'
  • linked_ip_addresses Text
    compute='_compute_linked_ip_addresses' args: 'Linked IP address'
  • platform Char
    args: 'Platform'
  • revoked Boolean
    help='If True, the session file corresponding to this device\n no longer exists on the filesystem.' args: 'Revoked'
  • session_identifier Char
    index='btree' required=True args: 'Session Identifier'
  • user_id Many2one → res.users
    index='btree' args: 'res.users'
Public methods (0)

No public methods.

New fields (20)
  • all_implied_by_ids Many2many → res.groups
    compute='_compute_all_implied_by_ids' compute_sudo=True recursive=True search='_search_all_implied_by_ids' string='Transitively Implying Groups' args: 'res.groups'
  • all_implied_ids Many2many → res.groups
    compute='_compute_all_implied_ids' compute_sudo=True help='The group itself with all its implied groups.' recursive=True search='_search_all_implied_ids' string='Transitively Implied Groups' args: 'res.groups'
  • all_user_ids Many2many → res.users
    compute='_compute_all_user_ids' inverse='_inverse_all_user_ids' search='_search_all_user_ids' string='Users and implied users' args: 'res.users'
  • all_users_count Integer
    compute='_compute_all_users_count' compute_sudo=True help='Number of users having this group (implicitly or explicitly)' args: '# Users'
  • api_key_duration Float
    help='Determines the maximum duration of an api key created by a user belonging to this group.' string='API Keys maximum duration days'
  • comment Text
    translate=True
  • disjoint_ids Many2many → res.groups
    compute='_compute_disjoint_ids' help='A user may not belong to this group and one of those. For instance, users may not be portal users and internal users.' string='Disjoint Groups' args: 'res.groups'
  • full_name Char
    compute='_compute_full_name' search='_search_full_name' string='Group Name'
  • implied_by_ids Many2many → res.groups
    help='Users in those groups are implicitly part of this group.' string='Implying Groups' args: 'res.groups', 'res_groups_implied_rel', 'hid', 'gid'
  • implied_ids Many2many → res.groups
    help='Users of this group are also implicitly part of those groups' string='Implied Groups' args: 'res.groups', 'res_groups_implied_rel', 'gid', 'hid'
  • menu_access Many2many → ir.ui.menu
    string='Access Menu' args: 'ir.ui.menu', 'ir_ui_menu_group_rel', 'gid', 'menu_id'
  • model_access One2many → ir.model.access
    copy=True string='Access Controls' args: 'ir.model.access', 'group_id'
  • name Char
    required=True translate=True
  • privilege_id Many2one → res.groups.privilege
    index=True string='Privilege' args: 'res.groups.privilege'
  • rule_groups Many2many → ir.rule
    domain="[('global', '=', False)]" string='Rules' args: 'ir.rule', 'rule_group_rel', 'group_id', 'rule_group_id'
  • sequence Integer
    string='Sequence'
  • share Boolean
    help='Group created to set access rights for sharing data with some users.' string='Share Group'
  • user_ids Many2many → res.users
    help='Users explicitly in this group' args: 'res.users', 'res_groups_users_rel', 'gid', 'uid'
  • view_access Many2many → ir.ui.view
    string='Views' args: 'ir.ui.view', 'ir_ui_view_group_rel', 'group_id', 'view_id'
  • view_group_hierarchy Json
    compute='_compute_view_group_hierarchy' string='Technical field for default group setting'
Public methods (5)
  • action_show_all_users(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (6)
  • category_id Many2one → ir.module.category
    index=True string='Category' args: 'ir.module.category'
  • description Text
    string='Description'
  • group_ids One2many → res.groups
    string='Groups' args: 'res.groups', 'privilege_id'
  • name Char
    required=True string='Name' translate=True
  • placeholder Char
    default='No' help='Text that is displayed as placeholder in the selection field of the user form.' string='Placeholder'
  • sequence Integer
    default=100 string='Sequence'
Public methods (0)

No public methods.

New fields (14)
  • active Boolean
  • code Char
    help='This field is used to set/get locales for user' required=True string='Locale Code'
  • date_format Selection
    default='%m/%d/%Y' required=True selection=_get_date_format_selection string='Date Format'
  • decimal_point Char
    default='.' required=True string='Decimal Separator' trim=False
  • direction Selection
    default='ltr' required=True args: [('ltr', 'Left-to-Right'), ('rtl', 'Right-to-Left')]
  • flag_image Image
    args: 'Image'
  • flag_image_url Char
    compute=_compute_field_flag_image_url
  • grouping Selection
    default='[3,0]' help='The International Grouping will represent 123456789 to be 123,456,789.00; The Indian Grouping will represent 123456789 to be 12,34,56,789.00' required=True string='Separator Format' args: [('[3,0]', 'International Grouping'), ('[3,2,0]', 'Indian Grouping')]
  • iso_code Char
    help='This ISO code is the name of po files to use for translations' string='ISO code'
  • name Char
    required=True
  • thousands_sep Char
    default=',' string='Thousands Separator' trim=False
  • time_format Selection
    default='%H:%M:%S' required=True string='Time Format' args: [('%H:%M:%S', '13:00:00'), ('%I:%M:%S %p', ' 1:00:00 PM')]
  • url_code Char
    help='The Lang Code displayed in the URL' required=True args: 'URL Code'
  • week_start Selection
    default='7' required=True string='First Day of Week' args: [('1', 'Monday'), ('2', 'Tuesday'), ('3', 'Wednesday'), ('4', 'Thursday'), ('5', 'Friday'), ('6', 'Saturday'), ('7', 'Sunday')]
Public methods (10)
  • CACHED_FIELDS(self) -> OrderedSet
    @property
    Return fields to cache for the active languages Please promise all these fields don't depend on other models and context and are not translated. Warning: Don't add method names of ``dict`` to CACHED_FIELDS for sake of the implementation of LangData
  • action_activate_langs(self)
    Activate the selected languages
  • action_unarchive(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • format(self, percent: str, value, grouping: bool=False) -> str
    Format() will return the language-specific output for float values
  • get_installed(self) -> <expr>
    @api.model@api.readonly
    Return installed languages' (code, name) pairs sorted by name.
  • install_lang(self)
    @api.model
    This method is called from odoo/addons/base/data/res_lang_data.xml to load some language and set it as the default for every partners. The language is set via tools.config by the '_initialize_db' method on the 'db' object. This is a fragile solution and something else should be found.
  • unlink(self)
  • write(self, vals)

New fields (40)
  • active Boolean
    default=True
  • active_lang_count Integer
    compute='_compute_active_lang_count'
  • application_statistics Json
    compute='_compute_application_statistics' string='Stats'
  • barcode Char
    company_dependent=True copy=False help='Use a barcode to identify this contact.'
  • city Char
  • color Integer
    default=0 string='Color Index'
  • comment Html
    string='Notes'
  • commercial_company_name Char
    compute='_compute_commercial_company_name' store=True args: 'Company Name Entity'
  • company_name Char
    args: 'Company Name'
  • company_registry Char
    compute='_compute_company_registry' help='The registry number of the company. Use it if it is different from the Tax ID. It must be unique across all partners of a same country' index='btree_not_null' readonly=False store=True string='Company ID'
  • company_registry_label Char
    compute='_compute_company_registry_label' string='Company ID Label'
  • company_registry_placeholder Char
    compute='_compute_company_registry_placeholder'
  • company_type Selection
    compute='_compute_company_type' inverse='_write_company_type' selection=[('person', 'Person'), ('company', 'Company')] string='Company Type'
  • complete_name Char
    compute='_compute_complete_name' index=True store=True
  • contact_address Char
    compute='_compute_contact_address' string='Complete Address'
  • country_code Char
    related='country_id.code' string='Country Code'
  • email Char
  • email_formatted Char
    compute='_compute_email_formatted' help='Format email address "Name <email@domain>"' args: 'Formatted Email'
  • employee Boolean
    help='Check this box if this contact is an Employee.'
  • function Char
    string='Job Position'
  • is_company Boolean
    default=False help='Check if the contact is a company, otherwise it is a person' string='Is a Company'
  • is_public Boolean
    compute='_compute_is_public' compute_sudo=True
  • lang Selection
    compute='_compute_lang' help='All the emails and documents sent to this contact will be translated in this language.' readonly=False store=True string='Language' args: _lang_get
  • name Char
    default_export_compatible=True index=True
  • parent_name Char
    readonly=True related='parent_id.name' string='Parent name'
  • partner_latitude Float
    digits=(10, 7) string='Geo Latitude'
  • partner_longitude Float
    digits=(10, 7) string='Geo Longitude'
  • partner_share Boolean
    compute='_compute_partner_share' help='Either customer (not a user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data.' store=True args: 'Share Partner'
  • phone Char
  • ref Char
    index=True string='Reference'
  • street Char
  • street2 Char
  • type Selection
    default='contact' string='Address Type' args: [('contact', 'Contact'), ('invoice', 'Invoice'), ('delivery', 'Delivery'), ('other', 'Other')]
  • type_address_label Char
    compute='_compute_type_address_label' args: 'Address Type Description'
  • tz Selection
    default=<expr> help='When printing documents and exporting/importing data, time values are computed according to this timezone.\nIf the timezone is not set, UTC (Coordinated Universal Time) is used.\nAnywhere else, time values are computed according to the time offset of your web client.' string='Timezone' args: _tzs
  • tz_offset Char
    compute='_compute_tz_offset' string='Timezone offset'
  • vat Char
    help="You can use '/' to indicate that the customer has no Tax ID." index=True string='Tax ID'
  • vat_label Char
    compute='_compute_vat_label' string='Tax ID Label'
  • website Char
    args: 'Website Link'
  • zip Char
    change_default=True
Public methods (13)
  • address_get(self, adr_pref=None)
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_company(self)
  • default_get(self, fields)
    @api.model
    Add the company of the parent as default if we are creating a child partner.
  • find_or_create(self, email, assert_valid_email=False)
    @api.model
    Find a partner with the given ``email`` or use :meth:`name_create` to create a new one. :param str email: email-like string, which should contain at least one email, e.g. ``"Raoul Grosbedon <r.g@grosbedon.fr>"`` :param bool assert_valid_email: raise if no valid email is found :return: newly created record
  • get_import_templates(self)
    @api.model
  • name_create(self, name)
    @api.model
    Override of orm's name_create method for partners. The purpose is to handle some basic formats to create partners using the name_create. If only an email address is received and that the regex cannot find a name, the name will have the email value. If 'force_email' key in context: must find the email address.
  • onchange_company_type(self)
    @api.onchange('company_type')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • open_commercial_entity(self)
    Utility method used to add an "Open Company" button in partner views
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)

New fields (17)
  • acc_holder_name Char
    compute='_compute_account_holder_name' help='Account holder name, in case it is different than the name of the Account Holder' readonly=False store=True string='Account Holder Name'
  • acc_number Char
    required=True search='_search_acc_number' args: 'Account Number'
  • acc_type Selection
    compute='_compute_acc_type' help='Bank account type: Normal or IBAN. Inferred from the bank account number.' selection=<expr> string='Type'
  • active Boolean
    default=True
  • allow_out_payment Boolean
    copy=False default=False help='This account can be used for outgoing payments' readonly=False args: 'Send Money'
  • bank_bic Char
    readonly=False related='bank_id.bic'
  • bank_id Many2one → res.bank
    string='Bank' args: 'res.bank'
  • bank_name Char
    readonly=False related='bank_id.name'
  • clearing_number Char
    args: 'Clearing Number'
  • color Integer
    compute='_compute_color'
  • company_id Many2one → res.company
    readonly=True related='partner_id.company_id' store=True args: 'res.company', 'Company'
  • country_code Char
    related='partner_id.country_code' string='Country Code'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • note Text
    args: 'Notes'
  • partner_id Many2one → res.partner
    domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' required=True args: 'res.partner', 'Account Holder'
  • sanitized_acc_number Char
    compute='_compute_sanitized_acc_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
    default=10
Public methods (6)
  • action_archive_bank(self)
    Custom archive function because the basic action_archive don't trigger a re-rendering of the page, so the archived value is still visible in the view.
  • create(self, vals_list)
    @api.model_create_multi
  • get_supported_account_types(self)
    @api.model
  • retrieve_acc_type(self, acc_number)
    @api.model
    To be overridden by subclasses in order to support other account_types.
  • unlink(self)
    Instead of deleting a bank account, we want to archive it since we cannot delete bank account that is linked to any entries
  • write(self, vals)

New fields (4)
  • active Boolean
    default=True help='The active field allows you to hide the category without removing it.'
  • color Integer
    aggregator=False default=_get_default_color string='Color'
  • name Char
    required=True translate=True args: 'Name'
  • parent_path Char
    index=True
Public methods (0)

No public methods.

New fields (3)
  • active Boolean
    default=True args: 'Active'
  • full_name Char
    translate=True args: 'Full Name'
  • name Char
    translate=True args: 'Name'
Public methods (0)

No public methods.

New fields (30)
  • accesses_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of access rights that apply to the current user' args: '# Access Rights'
  • action_id Many2one → ir.actions.actions
    help='If specified, this action will be opened at log on for this user, in addition to the standard menu.' string='Home Action' args: 'ir.actions.actions'
  • active Boolean
    default=True
  • active_partner Boolean
    readonly=True related='partner_id.active' string='Partner is Active'
  • all_group_ids Many2many → res.groups
    compute='_compute_all_group_ids' compute_sudo=True search='_search_all_group_ids' string='Groups and implied groups' args: 'res.groups'
  • api_key_ids One2many → res.users.apikeys
    string='API Keys' args: 'res.users.apikeys', 'user_id'
  • companies_count Integer
    compute='_compute_companies_count' string='Number of Companies'
  • company_id Many2one → res.company
    context={'user_preference': True} default=<expr> help='The default company for this user.' required=True string='Company' args: 'res.company'
  • company_ids Many2many → res.company
    default=<expr> string='Companies' args: 'res.company', 'res_company_users_rel', 'user_id', 'cid'
  • device_ids One2many → res.device
    string='User devices' args: 'res.device', 'user_id'
  • email Char
    inherited=True readonly=False related='partner_id.email'
  • email_domain_placeholder Char
    compute='_compute_email_domain_placeholder'
  • group_ids Many2many → res.groups
    default=<expr> help='Groups explicitly assigned to the user' string='Groups' args: 'res.groups', 'res_groups_users_rel', 'uid', 'gid'
  • groups_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of groups that apply to the current user' args: '# Groups'
  • log_ids One2many → res.users.log
    string='User log entries' args: 'res.users.log', 'create_uid'
  • login Char
    help='Used to log into the system' required=True
  • login_date Datetime
    readonly=False related='log_ids.create_date' string='Latest Login'
  • name Char
    inherited=True readonly=False related='partner_id.name'
  • new_password Char
    compute='_compute_password' help="Specify a value only when creating a user or if you're changing the user's password, otherwise leave empty. After a change of password, the user has to login again." inverse='_set_new_password' string='Set Password'
  • partner_id Many2one → res.partner
    bypass_search_access=True help='Partner-related data of the user' index=True ondelete='restrict' required=True string='Related Partner' args: 'res.partner'
  • password Char
    compute='_compute_password' copy=False help="Keep empty if you don't want the user to be able to connect on the system." inverse='_set_password'
  • phone Char
    inherited=True readonly=False related='partner_id.phone'
  • res_users_settings_id Many2one → res.users.settings
    compute='_compute_res_users_settings_id' search='_search_res_users_settings_id' string='Settings' args: 'res.users.settings'
  • res_users_settings_ids One2many → res.users.settings
    args: 'res.users.settings', 'user_id'
  • role Selection
    compute='_compute_role' readonly=False string='Role' args: [('group_user', 'User'), ('group_system', 'Administrator')]
  • rules_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of record rules that apply to the current user' args: '# Record Rules'
  • share Boolean
    compute='_compute_share' compute_sudo=True help='External user with limited access, created only for the purpose of sharing data.' store=True string='Share User'
  • signature Html
    compute='_compute_signature' readonly=False store=True string='Email Signature'
  • tz_offset Char
    compute='_compute_tz_offset' string='Timezone offset'
  • view_group_hierarchy Json
    copy=False default=_default_view_group_hierarchy store=False string='Technical field for user group setting'
Public methods (27)
  • SELF_READABLE_FIELDS(self)
    @property
    The list of fields a user can read on their own user record. In order to add fields, please override this property on model extensions.
  • SELF_WRITEABLE_FIELDS(self)
    @property
    The list of fields a user can write on their own user record. In order to add fields, please override this property on model extensions.
  • action_change_password_wizard(self)
  • action_get(self)
    @api.model
  • action_revoke_all_devices(self)
    @check_identity
  • action_show_accesses(self)
  • action_show_groups(self)
  • action_show_rules(self)
  • api_key_wizard(self)
    @check_identity
  • authenticate(self, credential, user_agent_env)
    Verifies and returns the user ID corresponding to the given ``credential``, or False if there was no matching user. :param dict credential: a dictionary where the `type` key defines the authentication method and additional keys are passed as required per authentication method. For example: - { 'type': 'password', 'login': 'username', 'password': '123456' } - { 'type': 'webauthn', 'webauthn_response': '{json data}' } :param dict user_agent_env: environment dictionary describing any relevant environment attributes :return: auth_info :rtype: dict
  • change_password(self, old_passwd, new_passwd)
    @api.model
    Change current user password. Old password must be provided explicitly to prevent hijacking an existing user session, or for cases where the cleartext password is not used to authenticate requests. :return: True :raise: odoo.exceptions.AccessDenied when old password is wrong :raise: odoo.exceptions.UserError when new password is not set or empty
  • context_get(self)
    @api.model@tools.ormcache('self.env.uid')
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • get_company_currency_id(self)
    @api.model
  • has_group(self, group_ext_id: str) -> bool
    @api.readonly
    Return whether user ``self`` belongs to the given group (given by its fully-qualified external ID). Note that the group ``"base.group_no_one"`` is only effective in debug mode: the method returns ``True`` if the user belongs to the group and the current request is in debug mode.
  • has_groups(self, group_spec: str) -> bool
    @api.readonly
    Return whether user ``self`` satisfies the given group restrictions ``group_spec``, i.e., whether it is member of at least one of the groups, and is not a member of any of the groups preceded by ``!``. Note that the group ``"base.group_no_one"`` is only effective in debug mode, just like method :meth:`~.has_group` does. :param str group_spec: comma-separated list of fully-qualified group external IDs, optionally preceded by ``!``. Example:``"base.group_user,base.group_portal,!base.group_system"``.
  • init(self)
  • name_search(self, name='', domain=None, operator='ilike', limit=100)
    @api.model
  • on_change_login(self)
    @api.onchange('login')
  • onchange(self, values, field_names, fields_spec)
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • preference_change_password(self)
    @check_identity
  • preference_save(self)
  • read(self, fields=None, load='_classic_read')
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • new(self, values=None, origin=None, ref=None)
    @api.model
  • write(self, vals)

New fields (5)
  • create_date Datetime
    readonly=True args: 'Creation Date'
  • expiration_date Datetime
    readonly=True args: 'Expiration Date'
  • name Char
    readonly=True required=True args: 'Description'
  • scope Char
    readonly=True args: 'Scope'
  • user_id Many2one → res.users
    index=True ondelete='cascade' readonly=True required=True args: 'res.users'
Public methods (4)
  • generate(self, key, scope, name, expiration_date)
    @api.model
    Generate a new API key with an existing API key. The provided `key` must be an existing API key that belongs to the current user. Its scope must be compatible with `scope`. The `expiration_date` must be allowed for the user's group. To renew a key, generate the new one, store it, and then call `revoke` on the previous one. :param str key: an active API key belonging to the current user :param str|None scope: the scope of the key. If None, the key will give access to any rpc. :param str name: the name of the key, mainly intended to be displayed in the UI. :param str|datetime.datetime expiration_date: the expiration date of the key. String values may be either ISO 8601 dates (``"2026-12-30"``) or space-separated datetimes (``"2026-12-30 14:30:00"``). :returns: the key. :rtype: str
  • init(self)
  • remove(self)
    @check_identity
  • revoke(self, key)
    @api.model
    Revoke an existing API key. If it exists, the `key` will be removed from the server. :param str key: the API key that has to be revoked

New fields (3)
  • duration Selection
    default=<expr> required=True selection='_selection_duration' string='Duration'
  • expiration_date Datetime
    compute='_compute_expiration_date' readonly=False store=True args: 'Expiration Date'
  • name Char
    required=True args: 'Description'
Public methods (3)
  • check_access_make_key(self)
  • create(self, vals_list)
    @api.model_create_multi
  • make_key(self)
    @check_identity

New fields (2)
  • id Id
  • key Char
    readonly=True
Public methods (0)

No public methods.

New fields (3)
  • state Selection
    default='todo' required=True string='State' args: [('todo', 'To Do'), ('done', 'Done'), ('fail', 'Failed')]
  • user_id Many2one → res.users
    ondelete='set null' string='User' args: 'res.users'
  • user_id_int Integer
    compute='_compute_user_id_int' store=True args: 'User Id'
Public methods (0)

No public methods.

New fields (3)
  • auth_method Selection
    default=<expr> args: [('password', 'Password')]
  • password Char
    store=False
  • request Char
    groups=fields.NO_ACCESS readonly=True
Public methods (1)
  • run_check(self)

New fields (1)
  • create_uid Many2one → res.users
    index=True readonly=True string='Created by' args: 'res.users'
Public methods (0)

No public methods.

New fields (1)
  • user_id Many2one → res.users
    domain=[('res_users_settings_id', '=', False)] index=False ondelete='cascade' required=True string='User' args: 'res.users'
Public methods (1)
  • set_res_users_settings(self, new_settings)

New fields (7)
  • arch_diff Html
    compute='_compute_arch_diff' readonly=True sanitize_tags=False string='Architecture Diff'
  • arch_to_compare Text
    compute='_compute_arch_diff' args: 'Arch To Compare To'
  • compare_view_id Many2one → ir.ui.view
    string='Compare To View' args: 'ir.ui.view'
  • has_diff Boolean
    compute='_compute_arch_diff'
  • reset_mode Selection
    default='soft' required=True string='Reset Mode' args: [('soft', 'Restore previous version (soft reset).'), ('hard', 'Reset to file version (hard reset).'), ('other_view', 'Reset to another view.')]
  • view_id Many2one → ir.ui.view
    string='View' args: 'ir.ui.view'
  • view_name Char
    related='view_id.name' string='View Name'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • reset_view_button(self)

New fields (4)
  • action_id Many2one → ir.actions.server
    args: 'ir.actions.server'
  • code_diff Html
    compute='_compute_code_diff' sanitize_tags=False
  • current_code Text
    readonly=True related='action_id.code'
  • revision Many2one → ir.actions.server.history
    default=_default_revision domain="[('action_id', '=', action_id), ('code', '!=', current_code)]" required=True args: 'ir.actions.server.history'
Public methods (1)
  • restore_revision(self)

New fields (2)
  • menu_id Many2one → ir.ui.menu
    ondelete='cascade' required=True string='Parent Menu' args: 'ir.ui.menu'
  • name Char
    required=True string='Menu Name'
Public methods (1)
  • menu_create(self)

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…