TIP: You can type at any time to perform a new search.

Security findings

Repository
odoo/odoo · module folder
Module version
1.3
Category
Hidden
Folder size
47.0 MB
License
LGPL-3
Application
No
Auto-installable
Yes
Website
None
Last tracking update
2026-10-05 00:19:53
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Xavier ALT, Raphael Collet, Christophe Simonis, Thibault Delavallée, odoo, Florent Xicluna, Josse Colpaert, Odoo Translation Bot, Christophe Matthieu, Denis Ledoux, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, Lucas Perais (lpe), Yannick Tivisse, qsm-odoo, Odoo Online, Jorge Pinna Puissant, Denis Vermylen, Moens Alexandre, Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, Paul Morelle, Anh Thao Pham (pta), svs-odoo, Alvaro Fuentes, std-odoo, Achraf (abz), David Beguin, Rémy Voet (ryv), Tiffany Chang (tic), Gorash, Pierre Paridans, abd-msyukyu-odoo, Romain Estievenart, Arnaud Baes, Miquel Raïch, william-andre, John Laterre (jol), Ruben Gomes, Mathieu Walravens, luvi, Hubert Van De Walle, adr, Florian(flg), Renaud Thiry, Julien Banken, Louis Wicket (wil), David, Mylyna Hy, Merel Geens (mege), Gaetan Vanden Bergh (gavb), Victor Piryns (pivi), Mahamadasif Ansari, amdi-odoo, Pierre-Yves Dufays, Andrew Gavgavian, Yosua Nicolaus, Robin Lejeune (role), Levi Siuzdak (sile), Dylan Kiss (dyki), Paolo Gatti, Antoine Boonen, Chong Wang (cwg), Vivek Pathak, bram1000, Xavier Bol (xbo), Brieuc-brd, khfa, Harsh Modi, Louis Travaux, Arnaud Sibille, Moises Lopez - https://www.vauxoo.com/, Zelong Lin, Andrzej(pian), sesn-odoo, guva-odoo, Aurelien MARIE (auma), jorv-odoo, reka-odoo, Sven Fuehr, yosa-odoo, Ruben Gomes (rugo), vava-odoo, Julien Carion (juca), kcv-odoo, Tanguy Quéguineur, Alex Kühn, Martin Trigaux (mat), Louis Gobert, nihp-odoo, Emilio Pascual, Chrysanthe (chgo), Sanjay Sharma, mano-odoo, dijo-odoo, Harsh Shah, hatr-odoo, thle-odoo, Mathieu Coutant, Khumam Alzagim, Xavier Luyckx (xlu), Yousef Alnashef (alny), Claire (clbr), Rocío Vega, Abdo Mongy, Mohammed Basioni, Sébastien (blse), Hesham Saleh, Saif (segn), Victor Miguel Armenta Carrillo, dija-odoo, Ricardo Gomes Rodrigues, Cuong, Nguyen Minh Tran Manh, Mohammad Abdulmoneim (abdu), khsr-odoo, Lucas Lefèvre (lul), Pierre Pulinckx, Anton Romanova (roan), Bastien PIERRE, Michaël Mattiello, pish-odoo, Hoste Patrick, Thomas Josse (THJO), Krzysztof Magusiak (krma), devp-odoo, nape-odoo, Akash Pandey, PaoloYam, dvsh-odoo, nees-odoo, sagu-odoo, Radu Macocian (admac), Guillaume V, utma-odoo, Ester Andreetto, Elier Ayala Bernal, bhra-odoo, mojem, bhna-odoo, defl, Dirk Douglas, akha, kinhosz, Yash Pathak, Jugurtha, hisi-odoo, Laurent Smet (LAS), Julien Launois (jula), adip-odoo, Augustin (duau), Serhii Rubanskyi, ksar-odoo, Quentin Colla (qucol), macs-odoo, pssh-odoo, Yagnik ✗ (yagp), Waleed Elgamal, h4818, leclerc-leo, Ayush Modi, Saurabh, Adnan Sabbir, Bruno BOI, assh-odoo, Beekoan, Louis, Benoit Socias (bso), Omar Khalid, matd-odoo, YoussefM890, Woojang Pyeon, jand-odoo, Mohamed Barakat, rugot-odoo, Toma Tomov, Omar Khalil (omkha), Traina Ludo, Eve Lin (evlin), Séna Nshimiyimana, Zachary (zavan), Federico Falcone, alan-odoo, Jason (jaca), Mauricio Rubio Haro, Maximilien, jowes-odoo, soza-odoo, Michele Di Croce, Julien Carion, ELCO, Ricard Calvo, karygauss03, Do Anh Duy, stta-odoo, Oussema Heni, stefanorigano (sri), shmn-odoo, 3amo-magdy, Mohamed Ayman, Kirra Hyde, Kishan (kiga), Frantisek Binovsky, Divyesh Vyas (divy), FedericoBraidi, Léo Leclerc, Abdelrahman Ibrahim, MED-B, tharcisse, Sakesun, Himilsinh Sindha, Mark Orban (maorb), Jean Schoenlaub, Corentin Deruyck, pusu-odoo, Elisabeth Dickinson (edi), Lou !, Ahmed Hamila, SebVrc, dvpa-odoo, jucop-odoo
Odoo dependencies
None
Python dependencies
None
System dependencies
None
Required by
analytic, auth_ldap, auth_oauth, base_automation, base_setup, base_sparse_field, bus, calendar, fleet, fs_storage, html_editor, l10n_cn, l10n_ec, l10n_fr, l10n_hn, l10n_ma, l10n_mz, l10n_pt, l10n_us, mail, mysubscription, phone_validation, populate, printer, product, resource, rpc, sales_team, sms, social_media, storage_backend, test_assetsbundle, test_base, test_inherit, test_l10n, test_lint, test_tests, test_translation, test_uninstall, uom, utm, web
Description
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis info_outline

Views touched (185)
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
clearing_label_list clearing.label.list clearing.label list 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_form_view ir.access form New
ir_access_kanban_view ir.access kanban New
ir_access_list_view ir.access.view.list ir.access list New
ir_access_search_view ir.access search 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_query_view_form IR Profile Query Form ir.profile.query form New
ir_profile_query_view_list IR Profile Query List ir.profile.query list New
ir_profile_query_view_search IR Profile Query Search ir.profile.query search 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_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_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_session_view_form res.session.form res.session form New
res_session_view_kanban res.session.kanban res.session kanban New
res_session_view_tree res.session.list res.session list 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_kanban res.groups.kanban res.groups kanban 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_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_kanban res.groups.privilege.kanban res.groups.privilege kanban New
view_res_groups_privilege_list res.groups.privilege.list res.groups.privilege list New
view_res_groups_privilege_search res.groups.privilege.search res.groups.privilege search New
view_res_partner_filter res.partner.select res.partner search New
view_res_users_kanban res.users.kanban res.users kanban 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 (123)

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_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_record_default_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_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 (7)
  • impacted_application_count Integer
    compute='_compute_impacted_module_ids'
  • impacted_application_ids Many2many → ir.module.module
    compute='_compute_impacted_module_ids' string='Impacted applications' args: 'ir.module.module'
  • impacted_module_count Integer
    compute='_compute_impacted_module_ids'
  • impacted_module_ids Many2many → ir.module.module
    compute='_compute_impacted_module_ids' string='Impacted modules' args: 'ir.module.module'
  • model_count Integer
    compute='_compute_model_ids'
  • model_ids Many2many → ir.model
    compute='_compute_model_ids' string='Models to be deleted' 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'
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)
    @check_identity

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 (3)
  • country_code Char
    related='country_id.code'
  • country_id Many2one → res.country
    args: 'res.country'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (2)
  • digits Integer
    default=2 required=True args: 'Digits'
  • name Char
    required=True args: 'Usage'
Public methods (1)
  • precision_get(self, application)
    @api.model@api.ormcache('application', cache='stable')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • fields_get(self, allfields=None, attributes=None)
    @api.model

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 (13)
  • active Boolean
    default=True help='Only active accesses are taken into account when checking access rights.'
  • domain Char
    help='The operations will only be allowed for records in this domain'
  • for_create Boolean
    compute=<expr> compute_sql=<expr> compute_sudo=False depends=['operation'] help="Whether this access record applies for operation 'create'" inverse='_inverse_for_operations' string='Create'
  • for_read Boolean
    compute=<expr> compute_sql=<expr> compute_sudo=False depends=['operation'] help="Whether this access record applies for operation 'read'" inverse='_inverse_for_operations' string='Read'
  • for_unlink Boolean
    compute=<expr> compute_sql=<expr> compute_sudo=False depends=['operation'] help="Whether this access record applies for operation 'unlink'" inverse='_inverse_for_operations' string='Delete'
  • for_write Boolean
    compute=<expr> compute_sql=<expr> compute_sudo=False depends=['operation'] help="Whether this access record applies for operation 'write'" inverse='_inverse_for_operations' string='Update'
  • group_id Many2one → res.groups
    index=True ondelete='cascade' string='Group' args: 'res.groups'
  • is_standard Boolean
    compute='_compute_is_standard' compute_sql='_compute_sql_is_standard' compute_sudo=True help='Whether the access is defined by a module'
  • kind Selection
    compute='_compute_kind' compute_sql='_compute_sql_kind' compute_sudo=True help='Whether this record adds (permission) or restricts (restriction) access to the given model' args: [('permission', 'Permission'), ('restriction', 'Restriction')]
  • model_id Many2one → ir.model
    index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • name Char
    required=True
  • note Html
    string='Note'
  • operation Selection
    help="Which operation(s) this access applies to, a subset of 'crud'." required=True args: list(CRUD_SELECTION.items())
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • customize(self)
    Customize some access. If the access comes from a module, deactivate it and edit a copy.
  • unlink(self)
  • write(self, vals)

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 Json
    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 (3)
  • 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

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 (9)
  • 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'
  • explanation Text
    help='Verbose description of what this action actually does' string='Explanation'
  • 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 (2)
  • 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.

New fields (7)
  • context Char
    default='{}' help='Context dictionary as Python expression, empty by default (Default: {})' required=True string='Context Value'
  • params Json
    compute='_compute_params' help='Arguments sent to the client along with the view tag' inverse='_inverse_params' string='Supplementary arguments'
  • params_store Text
    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 (16)
  • 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='Attachment Name'
  • attachment_use Boolean
    help='If enabled, then the second time the user prints with same attachment name, it returns the previous report.' string='Generate new file each time the report is printed'
  • binding_type Selection
    default='report'
  • domain Char
    help='If set, the action will only appear on records that matches the domain.' string='Domain'
  • group_ids Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_report_rel', 'uid', 'gid'
  • linked_view_count Integer
    compute='_compute_linked_view_ids'
  • linked_view_ids Many2many → ir.ui.view
    compute='_compute_linked_view_ids' args: 'ir.ui.view'
  • 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 Size'
  • 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_name Char
    required=True string='Technical 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 generated and downloaded by the user.' required=True string='Format' args: [('qweb-html', 'HTML'), ('qweb-pdf', 'PDF'), ('qweb-text', 'Text')]
  • save_as_attachment Boolean
    help='Whether the report is saved as attachment when it is printed'
  • 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_pdf_engine_state(self, engine_name) -> <expr>
    @api.model
    Returns the requested engine status. The state of the pdf engine: install, ok, upgrade, workers or broken. - ok: A binary was found with a recent version. - upgrade: The binary is an older version. - workers: Not enough workers found to perform the pdf rendering process (< 2 workers). - broken: A binary was found but not responding. - install: Starting state. :param engine_name: The engine to test
  • 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
  • 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 (39)
  • 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'
  • property_selection Char
  • 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_name Char
    related='update_field_id.name'
  • 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_property Char
    compute='_compute_crud_relations' readonly=False store=True string='Property to Update'
  • 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'), ('property_selection', 'property_selection'), ('x2many', 'x2many')]
  • 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 (8)
  • action_open_parent_action(self)
  • action_open_scheduled_action(self)
  • 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 (0)

No public methods.

New fields (20)
  • 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'
  • 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
    copy=True required=True args: 'Name'
  • public Boolean
    args: 'Is public document'
  • raw Binary
    compute='_compute_raw' inverse='_inverse_raw' string='File Content (raw)'
  • res_access_read Boolean
    compute=<expr> compute_sudo=True depends_context=('uid') groups=fields.NO_ACCESS search=<expr>
  • res_access_write Boolean
    compute=<expr> compute_sudo=True depends_context=('uid') groups=fields.NO_ACCESS search=<expr>
  • 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, vals_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
    help='Stringified Python variable value. Supported types: str, bool, int, float. Blank means undefined.'
Public methods (11)
  • get_bool(self, key: str, default: T=False) -> <expr>
    @api.model
  • get_float(self, key: str, default: T=0.0) -> <expr>
    @api.model
  • get_int(self, key: str, default: T=0) -> <expr>
    @api.model
  • get_str(self, key: str, default: T='') -> <expr>
    @api.model
  • 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_bool(self, key: str, value)
    @api.model
  • set_float(self, key: str, value)
    @api.model
  • set_int(self, key: str, value)
    @api.model
  • set_str(self, key: str, value)
    @api.model
  • 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 (4)
  • export_fields One2many → ir.exports.line
    copy=True string='Export ID' args: 'ir.exports.line', 'export_id'
  • export_language_ids Many2many → res.lang
    help='Each translatable field of the template is exported with one extra column per selected language, using the import convention (field@lang).' string='Languages' args: 'res.lang'
  • name Char
    string='Export Name'
  • resource Char
    index=True
Public methods (0)

No public methods.

New fields (3)
  • export_id Many2one → ir.exports
    index=True ondelete='cascade' string='Export' args: 'ir.exports'
  • name Char
    string='Field Name'
  • sequence Integer
    default=10
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 (5)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • 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)
    @api.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 (14)
  • 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'
  • 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 (3)
  • 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)
    Test the connection. :return: client action to notify the user of the result of the operation :rtype: dict :raises UserError: if the connection fails
  • write(self, vals)
    Ensure we cannot archive a server in-use

New fields (15)
  • abstract Boolean
    string='Abstract Model'
  • access_ids One2many → ir.access
    string='Access' args: 'ir.access', 'model_id'
  • count Integer
    compute='_compute_count' help='Total number of records in this model' string='Count (Incl. Archived)'
  • explanation Text
    help='Verbose description of what is this model for' string='Explanation'
  • 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'
  • state Selection
    default='manual' readonly=True string='Type' args: [('manual', 'Custom'), ('base', 'Base')]
  • 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 (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
    copy=<expr> 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 (1)
  • 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 (44)
  • allowed_index_types Json
    compute='_compute_allowed_index_types'
  • 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 Selection
    help='The kind of database index requested for this field. B-tree indexes support equality and range searches; excluding nulls makes the index smaller when most values are empty; trigram indexes speed up text pattern searches. Leaving this empty does not remove an index that already exists.' string='Index' args: FIELD_INDEX_TYPES
  • 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 implements 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_model_field Char
    help='For many2one_reference fields, the field that stores the technical name of the target model'
  • 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 (32)
  • 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'
  • iap_paid_service Boolean
    args: 'Contains In-App Purchases'
  • 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'
  • test_data Boolean
    default=False readonly=True args: 'Test Data'
  • 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 (19)
  • 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
  • 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'
  • profile_query_ids One2many → ir.profile.query
    args: 'ir.profile.query', 'profile_id'
  • 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'
Public methods (3)
  • action_open_sql_queries(self)
  • 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 (7)
  • formatted_query Text
    compute='_compute_formatted_query'
  • full_query Text
    help='Query with its parameters injected, ready to execute' prefetch=False required=True
  • plan Text
    prefetch=False args: 'Query Plan'
  • profile_id Many2one → ir.profile
    index=True ondelete='cascade' required=True args: 'ir.profile'
  • query Text
    help='Query with placeholders, before injecting the parameters' readonly=True
  • query_preview Text
    compute='_compute_query_preview'
  • time Float
    help='Time spent executing the query (seconds)' min_display_digits=6 string='Time'
Public methods (1)
  • action_explain_analyse(self)

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 (2)
  • attributes(self, record, field_name, options, values=None)
    @api.model
  • 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 (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@api.ormcache('self.env.uid', 'debug', 'self.env.lang')
  • load_menus_root(self)
    @api.model@api.ormcache('self.env.uid', 'self.env.lang')
  • unlink(self)
  • write(self, vals)

New fields (23)
  • 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' write_sequence=-10 args: 'ir.model'
  • name Char
    copy=True required=True string='View Name'
  • notes Html
    string='Notes'
  • priority Integer
    default=16 required=True string='Sequence'
  • technical_usage Selection
    selection=[] string='Technical Usage'
  • type Selection
    string='View Type' args: [('list', 'List'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('kanban', 'Kanban'), ('search', 'Search'), ('card', 'Card'), ('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' compute_sql='_compute_sql_properties_base_definition_id' compute_sudo=True 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 (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 (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 (7)
  • company_currency_id Many2one → res.currency
    compute='_compute_company_currency_id' string='Company Currency' args: 'res.currency'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • company_rate Float
    aggregator='avg' compute='_compute_company_rate' digits=0 help='Value of 1 unit of this currency in the company 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='Exchange rate from the company currency to this currency' 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='Exchange rate expressed as reference-currency units per 1 unit of this currency' string='Technical Rate'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (15)
  • browser Char
    compute='_compute_device_info' readonly=True args: 'Browser'
  • browser_language Char
    compute='_compute_device_info' readonly=True args: 'Browser Language'
  • browser_version Char
    compute='_compute_device_info' readonly=True args: 'Browser Version'
  • city Char
    readonly=True args: 'City'
  • country Char
    readonly=True args: 'Country'
  • device_type Char
    compute='_compute_device_info' readonly=True args: 'Type'
  • first_activity Datetime
    readonly=True args: 'First Activity'
  • ip_address Char
    readonly=True args: 'IP Address'
  • is_current Boolean
    compute='_compute_is_current' readonly=True args: 'Current'
  • last_activity Datetime
    readonly=True args: 'Last Activity'
  • platform Char
    compute='_compute_device_info' readonly=True args: 'Platform'
  • revoked Boolean
    readonly=True args: 'Revoked'
  • session_identifier Char
    readonly=True args: 'Session identifier'
  • user_agent Char
    readonly=True args: 'User Agent'
  • user_id Many2one → res.users
    readonly=True string='User' args: 'res.users'
Public methods (1)
  • init(self)

New fields (9)
  • city Char
    args: 'City'
  • country Char
    args: 'Country'
  • first_activity Datetime
    required=True args: 'First Activity'
  • ip_address Char
    required=True args: 'IP Address'
  • last_activity Datetime
    index='btree' required=True args: 'Last Activity'
  • 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_agent Char
    required=True args: 'User Agent'
  • user_id Integer
    index='btree' required=True string='User'
Public methods (0)

No public methods.

New fields (22)
  • access_count Integer
    compute='_compute_access_count'
  • access_ids One2many → ir.access
    copy=True string='Access Rules' args: 'ir.access', 'group_id'
  • 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
    string='Notes' translate=True
  • disjoint_ids Many2many → res.groups
    compute='_compute_disjoint_ids' help='Users in the current group cannot be added in disjoint groups. For example, a user cannot be in the "Internal" and "Portal" groups at the same time.' string='Disjoint Groups' args: 'res.groups'
  • full_name Char
    compute='_compute_full_name' search='_search_full_name' string='Group Name'
  • implied_by_count Integer
    compute='_compute_implied_by_count'
  • implied_by_ids Many2many → res.groups
    help='Users in implying groups are implicitly part of the current group' string='Implying Groups' args: 'res.groups', 'res_groups_implied_rel', 'hid', 'gid'
  • implied_count Integer
    compute='_compute_implied_count'
  • implied_ids Many2many → res.groups
    help='Users in the current group are implicitly part of the implied 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'
  • name Char
    required=True translate=True
  • privilege_id Many2one → res.groups.privilege
    index=True string='Scope' args: 'res.groups.privilege'
  • sequence Integer
    string='Sequence'
  • share Boolean
    help='Indicates that the group is used external data sharing prupose (e.g., portal access to specific records)' 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 (7)
  • action_show_all_users(self)
  • action_view_access_ids(self)
  • action_view_implied_by_ids(self)
  • action_view_implied_ids(self)
  • 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' translate=True
  • group_ids One2many → res.groups
    string='Groups' args: 'res.groups', 'privilege_id'
  • name Char
    required=True string='Name' translate=True
  • placeholder Char
    default=<expr> help='Label displayed when the user does not belong of any group of that scope.' string='No group label' translate=True
  • sequence Integer
    default=100 string='Sequence'
Public methods (0)

No public methods.

New fields (41)
  • active Boolean
    default=True
  • active_lang_count Integer
    compute='_compute_active_lang_count'
  • additional_identifiers Json
    copy=False string='Additional Identifiers'
  • address Char
    compute='_compute_address' string='Address (without name)'
  • address_inline Char
    compute='_compute_address' string='Address inline (without name)'
  • application_statistics Json
    compute='_compute_application_statistics' string='Stats'
  • available_additional_identifiers_metadata Json
    compute='_compute_available_additional_identifiers_metadata'
  • 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
    related='commercial_partner_id.name' store=True args: 'Company Name Entity'
  • complete_name Char
    compute='_compute_complete_name' index=True store=True
  • contact_address Char
    compute='_compute_address' string='Complete Address'
  • contact_address_inline Char
    compute='_compute_address' string='Complete Address inline'
  • 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'
  • has_vat Boolean
    compute='_compute_has_vat' compute_sql='_compute_sql_has_vat' compute_sudo=True help="Technical field indicating whether the Tax ID is not a placeholder.Returns False for placeholder values such as '/', 'NA', 'na', or an empty string." string='Has Tax ID'
  • is_company Boolean
    compute='_compute_is_company' default=False help='Check if the contact is a company, otherwise it is a person' store=True 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' store=False string='Parent name'
  • partner_latitude Float
    digits=(10, 7) string='Latitude'
  • partner_longitude Float
    digits=(10, 7) string='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='btree_not_null' inverse='_inverse_vat' 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 (55)
  • 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.
  • check_vat_al(self, vat)
    Check Albania VAT number
  • check_vat_br(self, vat)
  • check_vat_ch(self, vat)
    Check Switzerland VAT number.
  • check_vat_cr(self, vat)
  • check_vat_de(self, vat)
  • check_vat_do(self, vat)
  • check_vat_ec(self, vat)
  • check_vat_gr(self, vat)
    Allows some custom test VAT number to be valid to allow testing Greece EDI.
  • check_vat_gt(self, vat)
    Allow some custom Guatemala NIT numbers to pass the test to be used for testing the Guatemalan EDI.
  • check_vat_hu(self, vat)
    Check Hungary VAT number that can be for example 'HU12345676 or 'xxxxxxxx-y-zz' or '8xxxxxxxxy' - For xxxxxxxx-y-zz, 'x' can be any number, 'y' is a number between 1 and 5 depending on the person and the 'zz' is used for region code. - 8xxxxxxxxy, Tin number for individual, it has to start with an 8 and finish with the check digit - In case of EU format it will be the first 8 digits of the full VAT
  • check_vat_id(self, vat)
    Temporary Indonesian VAT validation to support the new format introduced in January 2024.
  • check_vat_ie(self, vat)
  • check_vat_il(self, vat)
  • check_vat_in(self, vat)
  • check_vat_jp(self, vat)
  • check_vat_ma(self, vat)
  • check_vat_mx(self, vat)
    Mexican VAT verification Verificar RFC México
  • check_vat_no(self, vat)
    Check Norway VAT number.See http://www.brreg.no/english/coordination/number.html
  • check_vat_pe(self, vat)
  • check_vat_ph(self, vat)
  • check_vat_pk(self, vat)
  • check_vat_ro(self, vat)
    Check Romanian VAT number that can be for example 'RO1234567897 or 'xyyzzaabbxxxx' or '9000xxxxxxxx'. - For xyyzzaabbxxxx, 'x' can be any number, 'y' is the two last digit of a year (in the range 00…99), 'a' is a month, b is a day of the month, the number 8 and 9 are Country or district code (For those twos digits, we decided to let some flexibility to avoid complexifying the regex and also for maintainability) - 9000xxxxxxxx, start with 9000 and then is filled by number In the range 0...9 Also stdum also checks the CUI or CIF (Romanian company identifier). So a number like '123456897' will pass.
  • check_vat_rs(self, vat)
  • check_vat_sa(self, vat)
    Check company VAT TIN according to ZATCA specifications: The VAT number should start and begin with a '3' and be 15 digits long
  • check_vat_th(self, vat)
  • check_vat_tr(self, vat)
  • check_vat_tw(self, vat)
    Since Feb. 2025, due to the imminent exhaustion of the UBN numbers, the validation logic was changed from using a division by 10 for the final check to using a division by 5, making numbers that were previously invalid now valid. The stdnum implementation of the VAT validation is not up to date with this latest update, so we implement our own validation to support these new valid UBNs.
  • check_vat_ua(self, vat)
  • check_vat_uy(self, vat)
    Taken from python-stdnum's master branch, as the release doesn't handle RUT numbers starting with 22. origin https://github.com/arthurdejong/python-stdnum/blob/master/stdnum/uy/rut.py FIXME Can be removed when python-stdnum does a new release.
  • check_vat_uz(self, vat)
  • check_vat_ve(self, vat)
  • check_vat_vn(self, vat)
    VAT format validator for Vietnam. Supported formats: - 10-digit format (Enterprise tax ID): e.g., 0101243150 - 13-digit format with branch suffix: e.g., 0101243150-001 - 12-digit format (Personal ID / Citizen ID - CCCD): e.g., 079123456789 (used as tax ID for individuals from July 1st, 2025) Note: - stdnum.vn.mst.validate() currently only supports 10- and 13-digit VAT numbers - and does not accept the 12-digit personal tax ID (CCCD) format introduced from 01/07/2025. - This helper provides a lightweight format-level validator for use in the meantime. - Can be removed once stdnum.vn.mst adds CCCD support.
  • country_name(self)
    @property
  • create(self, vals_list)
    @api.model_create_multi
  • 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
  • format_vat_al(self, vat)
  • format_vat_ca(self, vat)
    Normalize the case of a Canadian Business Number (BN). Two forms are accepted: 9 digits, the business number itself, for example 123456782 9 digits followed by a 2 letter program identifier and a 4 digit reference number, for example 123456782RT0001 The program identifier tells which account the number refers to. RT is goods and services tax, RP is payroll, RC is corporate income tax and RM is import and export. It is always written in upper case, but stdnum keeps the case as it was typed and then rejects a lower case identifier, so upper case the number before compacting it.
  • format_vat_ch(self, vat)
  • format_vat_cl(self, vat)
    It is better to always have the -
  • format_vat_co(self, vat)
    It is better to always have the -
  • format_vat_eu(self, vat)
  • format_vat_hu(self, vat)
    We put the - back as we require it for the EDI and the different parts will make it clear to the user
  • format_vat_is(self, vat)
  • format_vat_pk(self, vat)
  • format_vat_sm(self, vat)
  • format_vat_vn(self, vat)
    It is better to always have the -
  • get_import_templates(self)
    @api.model
  • is_valid_ruc_ec(self, vat)
  • 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_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 (23)
  • account_number Char
    required=True search='_search_account_number' args: 'Account Number'
  • account_type Selection
    compute='_compute_account_type' help='Bank account type: Normal, IBAN, CLABE, or other from localization. Inferred from the bank account number.' selection=[('bank', 'Normal')] 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 string='Send Money'
  • bank_bic Char
    help='Bank Identifier Code for international wires in the format Bank Code (4 letters) + Country Code (2 letters) + Location Code (2 letters/numbers) + Optional Branch Code (3 letters/numbers).' index=True string='BIC/SWIFT'
  • bank_name Char
  • city Char
  • clearing_label_id Many2one → clearing.label
    comodel_name='clearing.label' compute='_compute_clearing_label_id' precompute=True readonly=False required=True store=True
  • clearing_number Char
    help='A clearing number (or routing number) refers to a bank, branch, or location and is used by domestic money transfer protocols (from/to bank accounts in the same country).' string='Clearing Number'
  • color Integer
    compute='_compute_color'
  • company_id Many2one → res.company
    index=True args: 'res.company', 'Company'
  • country_code Char
    related='country_id.code'
  • country_id Many2one → res.country
    comodel_name='res.country' compute='_compute_country_id' index='btree_not_null' precompute=True readonly=False store=True
  • holder_name Char
    compute='_compute_account_holder_name' help='Account holder name in case it is different than the name of the partner.' readonly=False store=True string='Holder Name'
  • note Text
    args: 'Notes'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' required=True string='Partner'
  • sanitized_account_number Char
    compute='_compute_sanitized_account_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
    default=10
  • show_clearing_number Boolean
    compute='_compute_show_clearing_number'
  • state_id Many2one → res.country.state
    comodel_name='res.country.state' domain="[('country_id', '=?', country_id)]" string='Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • open_linked_partner_id(self)
  • retrieve_account_type(self, account_number)
    @api.model
    To be overridden by subclasses in order to support other account_types.
  • 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 (7)
  • city Char
    compute='_compute_session_info' readonly=True args: 'City'
  • country Char
    compute='_compute_session_info' readonly=True args: 'Country'
  • device_ids One2many → res.device
    compute='_compute_session_info' readonly=True args: 'res.device'
  • first_activity Datetime
    compute='_compute_session_info' readonly=True args: 'First Activity'
  • ip_address Char
    compute='_compute_session_info' readonly=True args: 'IP Address'
  • is_current Boolean
    compute='_compute_is_current' readonly=True args: 'Current'
  • user_agent Char
    compute='_compute_session_info' readonly=True args: 'User Agent'
Public methods (1)
  • revoke(self)
    @check_identity

New fields (33)
  • 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' user_writeable=True 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' user_writeable=True 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' user_writeable=True
  • 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'
  • image_1920 Binary
    inherited=True readonly=False related='partner_id.image_1920' user_writeable=True
  • lang Selection
    inherited=True readonly=False related='partner_id.lang' user_writeable=True
  • 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
    copy=True inherited=True readonly=False related='partner_id.name' user_writeable=True
  • 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' user_writeable=True
  • 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 search='_search_role' string='Role' args: [('light_user', 'Light'), ('regular_user', 'User'), ('group_system', 'Administrator')]
  • session_ids One2many → res.session
    string='User sessions' args: 'res.session', 'user_id'
  • 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' user_writeable=True
  • tz Selection
    inherited=True readonly=False related='partner_id.tz' user_writeable=True
  • 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 (21)
  • action_change_password_wizard(self)
    @check_identity
  • action_get(self)
    @api.model
  • action_revoke_all_devices(self)
    @check_identity
  • action_show_accesses(self)
  • action_show_groups(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@api.ormcache('self.env.uid')
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • 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_parent_id(self)
    @api.onchange('parent_id')
  • preference_change_password(self)
    @check_identity
  • preference_save(self)
  • 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 required=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 scope: the scope of the key. :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 (5)
  • available_scopes_count Integer
    compute='_compute_available_scopes_count'
  • duration Selection
    default=_default_duration 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'
  • scope Selection
    default='rpc' help="\n A token with scope 'A' can only be used for endpoints requiring a bearer token of scope 'A' and\n can't be used for endpoints requiring any other scope than 'A'.\n " required=True string='Scope' args: [('rpc', 'RPC')]
Public methods (3)
  • check_access_make_key(self)
  • create(self, vals_list)
    @api.model_create_multi
  • make_key(self)
    @check_identity

New fields (4)
  • base_url Char
    readonly=True
  • id Id
  • key Char
    readonly=True
  • scope 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…

Loading…