Base

base
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Xavier ALT, Christophe Simonis, Xavier Morel, Joren Van Onder, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, Aaron Bohy, Jeremy Kersten, Lucas Perais (lpe), Yannick Tivisse, qsm-odoo, Pierre Masereel, Laurent Smet, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Denis Vermylen, Lucas Perais, Toufik Ben Jaa, Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, Sébastien Theys, oco-odoo, Alvaro Fuentes, std-odoo, Achraf (abz), Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, fja-odoo, Mathieu Duckerts-Antoine, Pierre Paridans, Hoang Tran, abd-msyukyu-odoo, Arnaud Joset, William Braeckman, Romain Estievenart, odoo, Florent Xicluna, Arnaud Baes, Stanislas Sobieski, Miquel Raïch, william-andre, Florian Damhaut, Florian Vranckx, Florian Charlier, John (jol), Ruben Gomes, Aurelien van Delft (avd), Hubert Van De Walle, Mathieu Walravens, luvi, Florian(flg), Valentin Chevalier, Renaud Thiry, Julien Banken, Vincent Larcin, Ipsita Borisagar, Moises Lopez - https://www.vauxoo.com/, Thomas Lefebvre (thle), alsh-odoo, Gaetan Vanden Bergh (gavb), Louis Wicket (wil), tsm-odoo, Laurent Desausoi, Adrien Widart (awt), Maximilien (malb), Victor Piryns (pivi), Mahamadasif Ansari, Thomas Becquevort (thbe), amdi-odoo, Gauthier Wala (gawa), Ali Alfie (alal), Pieter Claeys (clpi), Yosua Nicolaus, Levi Siuzdak (sile), Antoine Dupuis (andu), Antoine Boonen, Dylan Kiss (dyki), Jinane Maksoud, Paolo Gatti, Bruno Boi, Antoine (ande), Mayurrajsinh Rathod, Chong Wang (cwg), Leloup Loïc (lole), Adrien Schoffeniels, bram1000, tong-odoo, Xavier Bol (xbo), Brieuc-brd, Nguyễn Đại Dương, Arnaud Sibille, Mahdi Cheikh Rouhou (macr), omra-odoo, Andrzej(pian), Nicolas Viseur (vin), Walid (wasa), sesn-odoo, guva-odoo, Paul Stroobant, Hesham, Ethan Vincent, Aurelien MARIE (auma), Maryam Kia, jorv-odoo, Serge Bayet (seba), reka-odoo, Seif (segn), jugj-odoo, vava-odoo, Bruno Boi (boi), Julien Carion (juca), odoostan, adsh-odoo, Tanguy Quéguineur, SaddemAmine, Martin Trigaux (mat), Louis Gobert, nihp-odoo, Shubham Thanki, Emilio Pascual, Chrysanthe (chgo), aath-odoo, sami odoo, Sanjay Sharma, dijo-odoo, Joseph (jcb), aamo-odoo, thle-odoo, Mathieu Coutant, Patricia Daloze (pda), Khumam Alzagim, Xavier Luyckx (xlu), yagp-odoo, Yousef Alnashef (alny), Abdelrahman Mahmoud (amah), Claire (clbr), Rocío Vega, Manushi Shah, Léo Gizard, Sébastien (blse), Hesham Saleh, Julien Schwanen, Victor Miguel Armenta Carrillo, dija-odoo, aizu-odoo, sben-odoo, Ricardo Gomes Rodrigues, Logan Staelens, roto-odoo, Arthur Nanson, David Van Droogenbroeck (DROD), Cuong, Nguyen Minh Tran Manh, elhayyany, Mohammad Abdulmoneim (abdu), khsr-odoo, Pierre Pulinckx, Bastien PIERRE, Anton Romanova (roan), masm-odoo, K Theja (kthe), Shrey Mehta, Renaud Thiry (reth), Thomas Josse (THJO), Krzysztof Magusiak (krma), nape-odoo, Omar (OSAH), Ajit Singh, Armin-FalDiS, KonstantinosPaschopoulos, Akash Pandey, Christophe Matthieu (chm), PaoloYam, Yannis Burkhalter, dvsh-odoo, nees-odoo, krip-odoo, hatr-odoo, Basioni (basm), utma-odoo, sagu-odoo, ijja-odoo, defl, bhna-odoo, mojem, Dirk Douglas, Giorgio Tocco (gito), romc-odoo, kinhosz, Elijah Tay (elct), Lulu Grimalkin (lugr), Jugurtha, Dhwani Patel, hisi-odoo, Davide Bonetto, Augustin (duau), Alice Gaudon, adip-odoo, Quentin Colla (qucol), pssh-odoo, suju-odoo, kmdi-odoo, path-odoo, leclerc-leo, Ayush Modi, Robert Smith (rosm), assh-odoo, Elliot ELCO, cro, Beekoan, Bruno BOI, Waleed Elgamal, Nesma Harraz (neha), matd-odoo, Mohamed Barakat, saurabh, Toma Tomov, Randall Castro - https://www.vauxoo.com, rugot-odoo, Traina Ludo, Romain (roto), Kadam Darji, Jason (jaca), Zachary (zavan), Mauricio Rubio Haro, soza-odoo, jowes-odoo, ELCO, flotchet, panj-odoo, shmn-odoo, Claire Nguyen (clan), Mohamed Ayman, 3amo-magdy, kiga-odoo, Divyesh Vyas (divy), Omar Khair, MED-B, Ewetoye Ibrahim, Abdelrahman Ibrahim, bamu, tharcisse, Sakesun, Cyril Moreau
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 20:50:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

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

No HTTP endpoints found for this module.

Models touched (126)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • avatar_1024 Image
    compute='_compute_avatar_1024' args: 'Avatar 1024'
  • avatar_128 Image
    compute='_compute_avatar_128' args: 'Avatar 128'
  • avatar_1920 Image
    compute='_compute_avatar_1920' args: 'Avatar'
  • avatar_256 Image
    compute='_compute_avatar_256' args: 'Avatar 256'
  • avatar_512 Image
    compute='_compute_avatar_512' args: 'Avatar 512'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

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

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

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

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

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

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

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

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

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

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

No public methods.

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

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

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • image_1024 Image
    max_height=1024 max_width=1024 related='image_1920' store=True args: 'Image 1024'
  • image_128 Image
    max_height=128 max_width=128 related='image_1920' store=True args: 'Image 128'
  • image_1920 Image
    max_height=1920 max_width=1920 args: 'Image'
  • image_256 Image
    max_height=256 max_width=256 related='image_1920' store=True args: 'Image 256'
  • image_512 Image
    max_height=512 max_width=512 related='image_1920' store=True args: 'Image 512'
Public methods (0)

No public methods.

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

No public methods.

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

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

No public methods.

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

No public methods.

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

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

No public methods.

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

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

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

No public methods.

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

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

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

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

No public methods.

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

No public methods.

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

New fields (0)

No new fields.

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

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

No public methods.

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

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

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

No public methods.

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

No public methods.

New fields (0)

No new fields.

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

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

New fields (0)

No new fields.

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

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

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

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

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

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

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

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

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

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

No public methods.

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

No public methods.

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

No public methods.

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

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

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

No public methods.

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

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

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

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

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

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

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

No public methods.

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

No public methods.

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

No public methods.

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

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

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

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

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

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

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

New fields (0)

No new fields.

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

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

No public methods.

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

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

No public methods.

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

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

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

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

No public methods.

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

No public methods.

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

New fields (0)

No new fields.

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

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

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

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

No public methods.

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

No public methods.

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

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

No public methods.

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

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

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

New fields (2)
  • menu_id Many2one → ir.ui.menu
    ondelete='cascade' required=True string='Parent Menu' args: 'ir.ui.menu'
  • name Char
    required=True string='Menu Name'
Public methods (1)
  • menu_create(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Stéphane Bidoul, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Xavier ALT, Christophe Simonis, Xavier Morel, Nicolas Martinelli, Nicolas Lempereur, Géry Debongnie, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Pierre Masereel, Romain Derie, Laurent Smet, Christophe Monniez, Jorge Pinna Puissant, Denis Vermylen, Lucas Perais, Alexandre Kühn, Toufik Ben Jaa, Arnold Moyaux, Moens Alexandre, Julien Castiaux, Aurélien Warnon, Xavier-Do, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, Paul Morelle, Sébastien Theys, oco-odoo, Julien Mougenot, Anh Thao Pham (pta), svs-odoo, Samuel Degueldre, Alvaro Fuentes, std-odoo, Achraf (abz), Brice bib Bartoletti, lejeune quentin, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, fja-odoo, Mathieu Duckerts-Antoine, Pierre Paridans, Hoang Tran, William Braeckman, odoo, Daniel Stenlöv, Benoit Socias, Stanislas Sobieski, sofiagvaladze, william-andre, Julien Van Roy, Florian Damhaut, MerlinGuillaume, JF Aubert, Didier (did), Krzysztof Magusiak, Florian Vranckx, Florian Charlier, John (jol), Yolann Sabaux, Abdelouahab (abla), Hubert Van De Walle, Mathieu Walravens, luvi, nni-odoo, Renaud Thiry, Julien Banken, Vincent Larcin, Moises Lopez - https://www.vauxoo.com/, Iván Todorovich, bve-odoo, Habib (ayh), damr, Thomas Lefebvre (thle), alsh-odoo, Gaetan Vanden Bergh (gavb), Louis Wicket (wil), tsm-odoo, Mylyna Hy, Laurent Desausoi, Adrien Widart (awt), nda, Maximilien (malb), Victor Piryns (pivi), Julien (jula), Mahamadasif Ansari, Thomas Becquevort (thbe), Gauthier Wala (gawa), Ali Alfie (alal), Simon Genin (ges), Pierre-Yves Dufays, Daniel Kosky (dako), Pieter Claeys (clpi), Andrew Gavgavian, Claire Bretton (clbr), Yosua Nicolaus, pash-odoo, Levi Siuzdak (sile), Antoine Dupuis (andu), Antoine Boonen, Dylan Kiss (dyki), Jinane Maksoud, Paolo Gatti, Bruno Boi, Antoine (ande), flvr-odoo, Paolo Gatti (pgi), kir-odoo, FrancoisGe, Michael (mcm), Mayurrajsinh Rathod, Chong Wang (cwg), Leloup Loïc (lole), bram1000, tanghulu0608, Xavier Bol (xbo), Brieuc-brd, Nguyễn Đại Dương, Harsh Modi, Surabhi Varma, Arnaud Sibille, Mahdi Cheikh Rouhou (macr), omra-odoo, Andrzej(pian), Nicolas Viseur (vin), Walid (wasa), sesn-odoo, guva-odoo, Paul Stroobant, Jay Savaliya, dane@odoo.com, Hesham, Youssef Bashandy, Ethan Vincent, Mathieu (mcou), lase@odoo.com, Benjamin Hanquin (beha), bary, Maryam Kia, jorv-odoo, Maxime de Neuville, suth-odoo, mizosoft, Serge Bayet (seba), reka-odoo, Sven Fuehr, AMZIL Ayoub, Seif (segn), kmod-odoo, Eteil Djoumatchoua(etdj) etdj@odoo.com, yosa-odoo, Ruben Gomes (rugo), jugj-odoo, vava-odoo, Bruno Boi (boi), Julien Carion (juca), kcv-odoo, odoostan, Gabriel (gdpf), adsh-odoo, mega, Tanguy Quéguineur, SaddemAmine, Martin Trigaux (mat), Louis Gobert, Lina (liew), Emilio Pascual, Chrysanthe (chgo), aath-odoo, sami odoo, Louis (wil), Mohammed Basioni (basm), asm, asno-odoo, mano-odoo, Sanjay Sharma, aamo-odoo, Shaan Thakkar (THSH), thle-odoo, Mathieu Coutant, Xavier Luyckx (xlu), Ahmad (alah), Yousef Alnashef (alny), Sanchit Gupta, Steven Luna, Claire (clbr), Maximiliano Mezzavilla, Rocío Vega, sabr, Léo Gizard, VAN BOSSUYT Nicolas, Mohammed Basioni, Sébastien (blse), Pierre Pulinckx (PIPU), Hesham Saleh, Julien Schwanen, luve-odoo, Ian, Victor Miguel Armenta Carrillo, aizu-odoo, sben-odoo, Ricardo Gomes Rodrigues, muab-odoo, roto-odoo, Maira Salazar (srma), David Van Droogenbroeck (DROD), elhayyany, Mohammad Abdulmoneim (abdu), khsr-odoo, fdardenne, Bastien PIERRE, Anton Romanova (roan), masm-odoo, stra, joda-odoo, Renaud Thiry (reth), Krzysztof Magusiak (krma), nape-odoo, Omar (OSAH), erl-odoo, Ajit Singh, Armin-FalDiS, KonstantinosPaschopoulos, Akash Pandey, Christophe Matthieu (chm), yavy-odoo, Duy (Đỗ Anh), Yannis Burkhalter, Benoît Fontaine, Daryl Chen, dvsh-odoo, nees-odoo, krip-odoo, Hazem Ibrahim, hatr-odoo, utma-odoo, Dirk Douglas, romc-odoo, Elijah Tay (elct), hisi-odoo, Daniel Duato Catalán, Alice Gaudon, adip-odoo, Ali Hassan (alhy), suju-odoo, kmdi-odoo, yaih, leclerc-leo, Arthur Pierrot (arpi), Robert Smith (rosm), assh-odoo, cro, Waleed Elgamal, Nesma Harraz (neha), Mohamed Barakat, Soumya M, saurabh, zain2323, Toma Tomov, Randall Castro - https://www.vauxoo.com, Ashith Farhan (asfa), rugot-odoo, jowes-odoo, ELCO, colu, stta-odoo, SkiBY, flotchet, Rémy Voet, albert-bn
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-07 18:09:52
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

Views touched (178)
XML IDNameModelTypeStatus
act_report_xml_search_view ir.actions.report.search ir.actions.report search New
act_report_xml_view ir.actions.report ir.actions.report form New
act_report_xml_view_tree ir.actions.report.list ir.actions.report list New
action_view ir.actions.actions ir.actions.actions form New
action_view_search ir.actions.actions.search ir.actions.actions search New
action_view_tree ir.actions.actions.list ir.actions.actions list New
asset_view_form ir.asset form New
asset_view_search ir.asset search New
asset_view_tree ir.asset list New
base.language_install_view_form_lang_switch Switch to language base.language.install form New
base_partner_merge_automatic_wizard_form base.partner.merge.automatic.wizard.form base.partner.merge.automatic.wizard form New
change_password_own_form Change Own Password change.password.own form New
change_password_wizard_user_tree_view Change Password Users change.password.user list New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
contact_name contact_name ir.ui.view qweb New
demo_failures_dialog Demo Failure Dialog ir.demo_failure.wizard form New
demo_force_install_form ir.demo.form ir.demo form New
demo_wizard_form_view Demo Failure Form ir.demo_failure form New
edit_menu ir.ui.menu list New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
embedded_action_form ir.embedded.actions.form ir.embedded.actions form New
embedded_action_tree Embedded Actions ir.embedded.actions list New
enable_profiling_wizard Enable profiling base.enable.profiling.wizard form New
form_res_users_key_description API Key: description input form res.users.apikeys.description form New
form_res_users_key_show API Key: show res.users.apikeys.show form New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access.view.list ir.model.access list New
ir_access_view_tree_edition ir.model.access.view.list.edition ir.model.access list New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo list New
ir_cron_trigger_view_form ir.cron.trigger.view.form ir.cron.trigger form New
ir_cron_trigger_view_search ir.cron.trigger.view.search ir.cron.trigger search New
ir_cron_trigger_view_tree ir.cron.trigger.view.list ir.cron.trigger list New
ir_cron_view_calendar ir.cron calendar New
ir_cron_view_form ir.cron.view.form ir.cron form Inherits base.view_server_action_form
ir_cron_view_search ir.cron search New
ir_cron_view_tree ir.cron list New
ir_default_form_view ir.default form view ir.default form New
ir_default_search_view ir.default search view ir.default search New
ir_default_tree_view ir.default list view ir.default list New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters list New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging list New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server list New
ir_profile_view_form IR Profile Form ir.profile form New
ir_profile_view_list IR Profile List ir.profile list New
ir_profile_view_search IR Profile Search ir.profile search New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.list ir.module.module list New
module_view_kanban Apps Kanban ir.module.module kanban New
no_contact no_contact ir.ui.view qweb New
paperformat_view_form paper_format_view_form report.paperformat form New
paperformat_view_tree paper_format_view_tree report.paperformat list New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_bank_view_search res.bank.view.search res.bank search New
res_config_settings_view_form res.config.settings.view.form res.config.settings form New
res_config_view_base res.config.view.base res.config form New
res_device_view_form res.device.form res.device form New
res_device_view_kanban res.device.kanban res.device kanban New
res_device_view_tree res.device.list res.device list New
res_lang_form res.lang.form res.lang form New
res_lang_search res.lang.search res.lang search New
res_lang_tree res.lang.list res.lang list New
res_partner_category_view_search res.partner.category.view.search res.partner.category search New
res_partner_industry_view_form Industry res.partner.industry form New
res_partner_industry_view_search res.partner.industry.view.search res.partner.industry search New
res_partner_industry_view_tree Industry res.partner.industry list New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_partner_view_form_private res.partner.view.form.private res.partner form 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
user_groups_view res.users.groups res.users form Inherits view_users_form
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_groups_form res.groups.form res.groups form 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_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.list res.partner.title list New
view_partner_tree res.partner.list res.partner list New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.list res.bank list New
view_res_company_kanban res.company.kanban res.company kanban New
view_res_partner_filter res.partner.select res.partner search New
view_res_users_kanban res.users.kanban res.users kanban New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule list New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_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 (3)
Route(s)HandlerAuthTypeMethodsFlags
/jsonrpc RPC.jsonrpc none json ALL
/xmlrpc/<service> RPC.xmlrpc_1 none http POST csrf off
/xmlrpc/2/<service> RPC.xmlrpc_2 none http POST csrf off
Models touched (127)

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)
    @api.model
    Hook method to customize the help message in empty list/kanban views. By default, it returns the help received as parameter. :param str help: 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) :rtype: str
  • get_formview_action(self, access_uid=None)
    Return an action to open the document ``self``. This method is meant to be overridden in addons that want to give specific view ids for example. An optional access_uid holds the user that will access the document that could be different from the current user.
  • get_formview_id(self, access_uid=None)
    Return a view id to open the document ``self`` with. This method is meant to be overridden in addons that want to give specific view ids for example. Optional access_uid holds the user that would access the form view id different from the current environment user.
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    get_view([view_id | view_type='form']) Get the detailed composition of the requested view like model, view architecture. The return of the method can only depend on the requested view types, access rights (views or other records), view access rules, options, context lang and TYPE_view_ref (other context values cannot be used). :param int view_id: id of the view or None :param str view_type: type of the view to return if view_id is None ('form', 'list', ...) :param dict options: boolean options to return additional features: - 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 :raise Invalid ArchitectureError: if there is view type other than form, list, calendar, search etc... defined on the structure
  • 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=None, view_type='form')
    @api.model

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

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

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

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

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

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

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

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

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

No public methods.

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

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

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • image_1024 Image
    max_height=1024 max_width=1024 related='image_1920' store=True args: 'Image 1024'
  • image_128 Image
    max_height=128 max_width=128 related='image_1920' store=True args: 'Image 128'
  • image_1920 Image
    max_height=1920 max_width=1920 args: 'Image'
  • image_256 Image
    max_height=256 max_width=256 related='image_1920' store=True args: 'Image 256'
  • image_512 Image
    max_height=512 max_width=512 related='image_1920' store=True args: 'Image 512'
Public methods (0)

No public methods.

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

No public methods.

New fields (17)
  • 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
  • groups_id 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'), ('inline', 'Inline Edit'), ('fullscreen', 'Full Screen'), ('main', 'Main action of Current Window')]
  • type Char
    default='ir.actions.act_window'
  • usage Char
    help='Used to filter menu and home actions from the user form.' string='Action Usage'
  • view_id Many2one → ir.ui.view
    ondelete='set null' string='View Ref.' args: 'ir.ui.view'
  • view_ids One2many → ir.actions.act_window.view
    string='No of Views' args: 'ir.actions.act_window.view', 'act_window_id'
  • view_mode Char
    default='list,form' help="Comma-separated list of allowed view modes, such as 'form', 'list', 'calendar', etc. (Default: list,form)" required=True
  • views Binary
    compute='_compute_views' help='This function field computes the ordered list of views that should be enabled when displaying the result of an action, federating view mode, views and reference view. The result is returned as an ordered list of pairs (view_id,view_mode).'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • exists(self)
  • read(self, fields=None, load='_classic_read')
    call the method get_empty_list_help of the model and set the window action help message
  • unlink(self)

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

No public methods.

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

No public methods.

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

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

No public methods.

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

New fields (28)
  • available_model_ids Many2many → ir.model
    compute='_compute_available_model_ids' store=False string='Available Models' args: 'ir.model'
  • child_ids Many2many → ir.actions.server
    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', 'rel_server_actions', 'server_id', 'action_id'
  • code Text
    default=DEFAULT_PYTHON_CODE 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.' 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'), ('equation', 'Compute')], 'Value Type'
  • groups_id 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'
  • link_field_id Many2one → ir.model.fields
    compute='_compute_link_field_id' help='Specify a field used to link the newly created record on the record used by the server action.' readonly=False store=True 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
    readonly=True related='model_id.model' store=True string='Model Name'
  • name Char
    required=True
  • 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.'
  • state Selection
    copy=True default='object_write' 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- 'Execute Existing Actions': define an action that triggers several other server actions\n" required=True string='Type' args: [('object_write', 'Update Record'), ('object_create', 'Create Record'), ('code', 'Execute Code'), ('webhook', 'Send Webhook Notification'), ('multi', 'Execute Existing Actions')]
  • type Char
    default='ir.actions.server'
  • update_boolean_value Selection
    default='true' string='Boolean Value' args: [('true', 'Yes (True)'), ('false', 'No (False)')]
  • update_field_id Many2one → ir.model.fields
    compute='_compute_crud_relations' ondelete='cascade' readonly=False store=True string='Field to Update' args: 'ir.model.fields'
  • update_field_type Selection
    readonly=True related='update_field_id.ttype'
  • update_m2m_operation Selection
    default='add' string='Many2many Operations' args: [('add', 'Adding'), ('remove', 'Removing'), ('set', 'Setting it to'), ('clear', 'Clearing it')]
  • update_path Char
    default=_default_update_path help="Path to the field to update, e.g. 'partner_id.name'" string='Field to Update Path'
  • update_related_model_id Many2one → ir.model
    compute='_compute_crud_relations' readonly=False store=True args: 'ir.model'
  • usage Selection
    default='ir_actions_server' required=True string='Usage' args: [('ir_actions_server', 'Server Action'), ('ir_cron', 'Scheduled Action')]
  • value Text
    help="For Python expressions, this field may hold a Python expression that can use the same values as for the code field on the server action,e.g. `env.user.name` to set the current user's name as the value or `record.id` to set the ID of the record on which the action is run.\n\nFor Static values, the value will be used directly without evaluation, e.g.`42` or `My custom name` or the selected record."
  • value_field_to_show Selection
    compute='_compute_value_field_to_show' args: [('value', 'value'), ('resource_ref', 'reference'), ('update_boolean_value', 'update_boolean_value'), ('selection_value', 'selection_value')]
  • 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 (4)
  • copy_data(self, default=None)
  • create_action(self)
    Create a contextual action for each server action.
  • 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.

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

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

New fields (11)
  • active Boolean
    default=True
  • cron_name Char
    compute='_compute_cron_name' store=True args: 'Name'
  • failure_count Integer
    default=0 help='The number of consecutive failures of this job. It is automatically reset on success.'
  • first_failure_date Datetime
    help='The first time the cron failed. It is automatically reset on success.' string='First Failure Date'
  • interval_number Integer
    aggregator=None 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 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)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • method_direct_trigger(self)
  • toggle(self, model, domain)
    @api.model
  • try_write(self, values)
  • unlink(self)
  • 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
  • cron_id Many2one → ir.cron
    index=True args: 'ir.cron'
Public methods (0)

No public methods.

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

New fields (0)

No new fields.

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

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

No public methods.

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

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

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

No public methods.

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

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • db_id_for(self, model, field, subfield, value)
    @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 :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)
    @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.osv.orm.Model.write` expects. :param model: :class:`odoo.osv.orm.Model` for the conversion base :param fromtype: :returns: a converter callable :rtype: (record: dict, logger: (field, error) -> None) -> dict
  • to_field(self, model, field, fromtype=str)
    @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 :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' 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_id Many2one → res.users
    help='The user this filter is private to. When left empty the filter is public and available to all users.' ondelete='cascade' string='User' args: 'res.users'
Public methods (4)
  • copy_data(self, default=None)
  • create_or_replace(self, vals)
    @api.model@api.returns('self', <expr>)
  • 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_id`` (m2o tuple), ``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 (3)
  • get_translations_for_webclient(self, modules, lang)
    @api.model
  • get_web_translations_hash(self, modules, lang)
    @api.model@tools.ormcache('frozenset(modules)', 'lang')
  • routing_map(self, key=None)
    @tools.ormcache('key', cache='routing')

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

New fields (15)
  • active Boolean
    default=True
  • from_filter Char
    help='Comma-separated list of addresses or domains for which this server can be used.\ne.g.: "notification@odoo.com" or "odoo.com"' args: 'FROM Filtering'
  • max_email_size Float
    string='Max Email Size'
  • name Char
    index=True required=True string='Name'
  • sequence Integer
    default=10 help='When no specific mail server is requested for a mail, the highest priority one is used. Default priority is 10 (smaller number = higher priority)' string='Priority'
  • smtp_authentication Selection
    default='login' required=True string='Authenticate with' args: [('login', 'Username'), ('certificate', 'SSL Certificate'), ('cli', 'Command Line Interface')]
  • smtp_authentication_info Text
    compute='_compute_smtp_authentication_info' args: 'Authentication Info'
  • smtp_debug Boolean
    help='If enabled, the full output of SMTP sessions will be written to the server log at DEBUG level (this is very verbose and may include confidential info!)' string='Debugging'
  • smtp_encryption Selection
    default='none' help='Choose the connection encryption scheme:\n- None: SMTP sessions are done in cleartext.\n- TLS (STARTTLS): TLS encryption is requested at start of SMTP session (Recommended)\n- SSL/TLS: SMTP sessions are encrypted with SSL/TLS through a dedicated port (default: 465)' required=True string='Connection Encryption' args: [('none', 'None'), ('starttls', 'TLS (STARTTLS)'), ('ssl', 'SSL/TLS')]
  • 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 (6)
  • action_retrieve_max_email_size(self)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
    Constructs an RFC2822 email.message.Message object based on the keyword arguments passed, and returns it. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) :param string body: email body, of the type ``subtype`` (by default, plaintext). If html subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative, unless an explicit ``body_alternative`` version is passed. :param string body_alternative: optional alternative body, of the type specified in ``subtype_alternative`` :param string reply_to: optional value of Reply-To header :param string object_id: optional tracking identifier, to be included in the message-id for recognizing replies. Suggested format for object-id is "res_id-model", e.g. "12345-crm.lead". :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), must match the format of the ``body`` parameter. Default is 'plain', making the content part of the mail "text/plain". :param string subtype_alternative: optional mime subtype of ``body_alternative`` (usually 'plain' or 'html'). Default is 'plain'. :param list attachments: list of (filename, filecontents) pairs, where filecontents is a string containing the bytes of the attachment :param message_id: :param references: :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) :param dict headers: optional map of headers to set on the outgoing mail (may override the other headers, including Subject, Reply-To, Message-Id, etc.) :rtype: email.message.EmailMessage :return: the new RFC2822 email message
  • connect(self, host=None, port=None, user=None, password=None, encryption=None, smtp_from=None, ssl_certificate=None, ssl_private_key=None, smtp_debug=False, mail_server_id=None, allow_archived=False)
    Returns a new SMTP connection to the given SMTP server. When running in test mode, this method does nothing and returns `None`. :param host: host or IP of SMTP server to connect to, if mail_server_id not passed :param int port: SMTP port to connect to :param user: optional username to authenticate with :param password: optional password to authenticate with :param string encryption: optional, ``'ssl'`` | ``'starttls'`` :param smtp_from: FROM SMTP envelop, used to find the best mail server :param ssl_certificate: filename of the SSL certificate used for authentication Used when no mail server is given and overwrite the odoo-bin argument "smtp_ssl_certificate" :param ssl_private_key: filename of the SSL private key used for authentication Used when no mail server is given and overwrite the odoo-bin argument "smtp_ssl_private_key" :param bool smtp_debug: toggle debugging of SMTP sessions (all i/o will be output in logs) :param mail_server_id: ID of specific mail server to use (overrides other parameters) :param bool allow_archived: by default (False), an exception is raised when calling this method on an archived record (using mail_server_id param). It can be set to True for testing so that the exception is no longer raised.
  • 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' or 'ssl' (see ir.mail_server fields for explanation) :param smtp_port: optional SMTP port, if mail_server_id is not passed :param smtp_user: optional SMTP user, if mail_server_id is not passed :param smtp_password: optional SMTP password to use, if mail_server_id is not passed :param smtp_ssl_certificate: filename of the SSL certificate used for authentication :param smtp_ssl_private_key: filename of the SSL private key used for authentication :param smtp_debug: optional SMTP debug flag, if mail_server_id is not passed :return: the Message-ID of the message that was just sent, if successfully sent, otherwise raises MailDeliveryException and logs root cause.
  • test_smtp_connection(self, autodetect_max_email_size=False)
    Test the connection and if autodetect_max_email_size, set auto-detected max email size. :param bool autodetect_max_email_size: whether to autodetect the max email size :return (dict): client action to notify the user of the result of the operation (connection test or auto-detection successful depending on the autodetect_max_email_size parameter) :raises UserError: if the connection fails and if autodetect_max_email_size and the server doesn't support the auto-detection of email max size
  • write(self, vals)
    Ensure we cannot archive a server in-use

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

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

New fields (8)
  • create_date Datetime
  • definition Char
    help='PostgreSQL constraint definition'
  • message Char
    help='Error message returned when the constraint is violated.' translate=True
  • 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 constraint or foreign key name.' index=True required=True string='Constraint'
  • type Char
    help='Type of the constraint: `f` for a foreign key, `u` for other constraints.' index=True required=True size=1 string='Constraint Type'
  • write_date Datetime
Public methods (2)
  • copy_data(self, default=None)
  • unlink(self)

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

New fields (43)
  • 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'
  • complete_name Char
    index=True
  • compute Text
    help="Code to compute the value of the field.\nIterate on the recordset 'self' and assign the field's value:\n\n for record in self:\n record['size'] = len(record.name)\n\nModules time, datetime, dateutil are available."
  • copied Boolean
    compute='_compute_copied' help='Whether the value is copied when duplicating a record.' readonly=False store=True string='Copied'
  • currency_field Char
    help='Name of the Many2one field holding the res.currency' string='Currency field'
  • depends Char
    help='Dependencies of compute method; a list of comma-separated field names, like\n\n name, partner_id.name' string='Dependencies'
  • domain Char
    default='[]' help="The optional domain to restrict possible values for relationship fields, specified as a Python expression defining a list of triplets. For example: [('color','=','red')]"
  • field_description Char
    default='' required=True string='Field Label' translate=True
  • group_expand Boolean
    help="If checked, all the records of the target model will be included\nin a grouped result (e.g. 'Group By' filters, Kanban columns, etc.).\nNote that it can significantly reduce performance if the target model\nof the field contains a lot of records; usually used on models with\nfew records (e.g. Stages, Job Positions, Event Types, etc.)." string='Expand Groups'
  • groups Many2many → res.groups
    args: 'res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id'
  • help Text
    string='Field Help' translate=True
  • index Boolean
    string='Indexed'
  • model Char
    help='The technical name of the model this field belongs to' index=True required=True string='Model Name'
  • model_id Many2one → ir.model
    help='The model this field belongs to' index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • modules Char
    compute='_in_modules' help='List of modules in which the field is defined' string='In Apps'
  • name Char
    default='x_' index=True required=True string='Field Name'
  • on_delete Selection
    default='set null' help='On delete property for many2one fields' string='On Delete' args: [('cascade', 'Cascade'), ('set null', 'Set NULL'), ('restrict', 'Restrict')]
  • readonly Boolean
  • related Char
    help='The corresponding related field, if any. This must be a dot-separated list of field names.' string='Related Field Definition'
  • related_field_id Many2one → ir.model.fields
    compute='_compute_related_field_id' ondelete='cascade' store=True string='Related Field' args: 'ir.model.fields'
  • relation Char
    help='For relationship fields, the technical name of the target model' string='Related Model'
  • relation_field Char
    help='For one2many fields, the field on the target model that implement the opposite many2one relationship'
  • relation_field_id Many2one → ir.model.fields
    compute='_compute_relation_field_id' ondelete='cascade' store=True string='Relation field' args: 'ir.model.fields'
  • relation_table Char
    help='Used for custom many2many fields to define a custom relation table name'
  • required Boolean
  • sanitize Boolean
    default=True string='Sanitize HTML'
  • sanitize_attributes Boolean
    default=True string='Sanitize HTML Attributes'
  • sanitize_form Boolean
    default=True string='Sanitize HTML Form'
  • sanitize_overridable Boolean
    default=False string='Sanitize HTML overridable'
  • sanitize_style Boolean
    default=False string='Sanitize HTML Style'
  • sanitize_tags Boolean
    default=True string='Sanitize HTML Tags'
  • selectable Boolean
    default=True
  • selection Char
    compute='_compute_selection' inverse='_inverse_selection' string='Selection Options (Deprecated)'
  • selection_ids One2many → ir.model.fields.selection
    copy=True string='Selection Options' args: 'ir.model.fields.selection', 'field_id'
  • size Integer
  • state Selection
    default='manual' index=True readonly=True required=True string='Type' args: [('manual', 'Custom Field'), ('base', 'Base Field')]
  • store Boolean
    default=True help='Whether the value is stored in the database.' string='Stored'
  • strip_classes Boolean
    default=False string='Strip Class Attribute'
  • strip_style Boolean
    default=False string='Strip Style Attribute'
  • translate Boolean
    help='Whether values for this field can be translated (enables the translation mechanism for that field)' string='Translatable'
  • 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@tools.ormcache_context('model_name', keys=('lang'))
    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@tools.ormcache_context('model_name', 'field_name', keys=('lang'))
    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@tools.ormcache_context('model_name', keys=('lang'))
    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 (0)

No new fields.

Public methods (2)
  • unlink(self)
  • write(self, values)

New fields (9)
  • 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
    index=True required=True string='Name' translate=True
  • parent_id Many2one → ir.module.category
    index=True string='Parent Application' args: 'ir.module.category'
  • sequence Integer
    string='Sequence'
  • visible Boolean
    default=True string='Visible'
  • xml_id Char
    compute='_compute_xml_id' string='External ID'
Public methods (0)

No public methods.

New fields (31)
  • application Boolean
    readonly=True args: 'Application'
  • author Char
    readonly=True args: 'Author'
  • auto_install Boolean
    help='An auto-installable module is automatically installed by the system when all its dependencies are satisfied. If the module has no dependency, it is always installed.' args: 'Automatic Installation'
  • category_id Many2one → ir.module.category
    index=True readonly=True string='Category' args: 'ir.module.category'
  • contributors Text
    readonly=True args: 'Contributors'
  • country_ids Many2many → res.country
    args: 'res.country', 'module_country', 'module_id', 'country_id'
  • demo Boolean
    default=False readonly=True args: 'Demo Data'
  • dependencies_id One2many → ir.module.module.dependency
    readonly=True string='Dependencies' args: 'ir.module.module.dependency', 'module_id'
  • description Text
    readonly=True translate=True args: 'Description'
  • description_html Html
    compute='_get_desc' args: 'Description HTML'
  • exclusion_ids One2many → ir.module.module.exclusion
    readonly=True string='Exclusions' args: 'ir.module.module.exclusion', 'module_id'
  • has_iap Boolean
    compute='_compute_has_iap'
  • icon Char
    args: 'Icon URL'
  • icon_flag Char
    compute='_get_icon_image' string='Flag'
  • icon_image Binary
    compute='_get_icon_image' string='Icon'
  • installed_version Char
    compute='_get_latest_version' args: 'Latest Version'
  • latest_version Char
    readonly=True args: 'Installed Version'
  • license Selection
    default='LGPL-3' readonly=True string='License' args: [('GPL-2', 'GPL Version 2'), ('GPL-2 or any later version', 'GPL-2 or later version'), ('GPL-3', 'GPL Version 3'), ('GPL-3 or any later version', 'GPL-3 or later version'), ('AGPL-3', 'Affero GPL-3'), ('LGPL-3', 'LGPL Version 3'), ('Other OSI approved licence', 'Other OSI Approved License'), ('OEEL-1', 'Odoo Enterprise Edition License v1.0'), ('OPL-1', 'Odoo Proprietary License v1.0'), ('Other proprietary', 'Other Proprietary')]
  • maintainer Char
    readonly=True args: 'Maintainer'
  • menus_by_module Text
    compute='_get_views' store=True string='Menus'
  • name Char
    readonly=True required=True args: 'Technical Name'
  • published_version Char
    readonly=True args: 'Published Version'
  • reports_by_module Text
    compute='_get_views' store=True string='Reports'
  • sequence Integer
    default=100 args: 'Sequence'
  • shortdesc Char
    readonly=True translate=True args: 'Module Name'
  • state Selection
    default='uninstallable' index=True readonly=True string='Status' args: STATES
  • summary Char
    readonly=True translate=True args: 'Summary'
  • to_buy Boolean
    default=False args: 'Odoo Enterprise Module'
  • url Char
    readonly=True args: 'URL'
  • views_by_module Text
    compute='_get_views' store=True string='Views'
  • website Char
    readonly=True args: 'Website'
Public methods (21)
  • 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_install_cancel(self)
    @assert_log_admin_access
  • button_uninstall(self)
    @assert_log_admin_access
  • button_uninstall_cancel(self)
  • button_uninstall_wizard(self)
    @assert_log_admin_access
    Launch the wizard to uninstall the given module.
  • button_upgrade(self)
    @assert_log_admin_access
  • button_upgrade_cancel(self)
    @assert_log_admin_access
  • check_external_dependencies(self, module_name, newstate='to install')
  • create(self, vals_list)
    @api.model_create_multi
  • downstream_dependencies(self, known_deps=None, exclude_states=('uninstalled', 'uninstallable', 'to remove'))
    @api.returns('self')
    Return the modules that directly or indirectly depend on the modules in `self`, and that satisfy the `exclude_states` filter.
  • get_module_info(cls, name)
    @classmethod
  • get_values_from_terp(terp)
    @staticmethod
  • module_uninstall(self)
    @assert_log_admin_access
    Perform the various steps required to uninstall a module completely including the deletion of all database structures created by the module: tables, columns, constraints, etc.
  • next(self)
    Return the action linked to an ir.actions.todo is there exists one that should be executed. Otherwise, redirect to /web
  • search_panel_select_range(self, field_name, **kwargs)
    @api.model
  • unlink(self)
  • update_list(self)
    @assert_log_admin_access@api.model
  • upstream_dependencies(self, known_deps=None, exclude_states=('installed', 'uninstallable', 'to remove'))
    @api.returns('self')
    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 (13)
  • create_date Datetime
    args: 'Creation Date'
  • duration Float
    args: 'Duration'
  • entry_count Integer
    args: 'Entry count'
  • init_stack_trace Text
    prefetch=False args: 'Initial stack trace'
  • name Char
    args: 'Description'
  • qweb Text
    prefetch=False args: 'Qweb'
  • session Char
    index=True args: 'Session'
  • speedscope Binary
    compute='_compute_speedscope' args: 'Speedscope'
  • speedscope_url Text
    compute='_compute_speedscope_url' args: 'Open'
  • sql Text
    prefetch=False args: 'Sql'
  • sql_count Integer
    args: 'Queries Count'
  • traces_async Text
    prefetch=False args: 'Traces Async'
  • traces_sync Text
    prefetch=False args: 'Traces Sync'
Public methods (1)
  • set_profiling(self, profile=None, collectors=None, params=None)
    @api.model
    Enable or disable profiling for the current user. :param profile: ``True`` to enable profiling, ``False`` to disable it. :param list collectors: optional list of collectors to use (string) :param dict params: optional parameters set on the profiler object

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (5)
  • attributes(self, record, field_name, options, values=None)
    @api.model
    attributes(record, field_name, field, options, values) Generates the metadata attributes (prefixed by ``data-oe-``) for the root node of the field conversion. The default attributes are: * ``model``, the name of the record's model * ``id`` the id of the record to which the field belongs * ``type`` the logical field type (widget, may not match the field's ``type``, may not be any Field subclass name) * ``translate``, a boolean flag (``0`` or ``1``) denoting whether the field is translatable * ``readonly``, has this attribute if the field is readonly * ``expression``, the original expression :returns: dict (attribute name, attribute value).
  • get_available_options(self)
    @api.model
    Get the available option informations. Returns a dict of dict with: * key equal to the option key. * dict: type, params, name, description, default_value * type: 'string' 'integer' 'float' 'model' (e.g. 'res.partner') 'array' 'selection' (e.g. [key1, key2...])
  • record_to_html(self, record, field_name, options)
    @api.model
    record_to_html(record, field_name, options) Converts the specified field of the ``record`` to HTML :rtype: unicode
  • user_lang(self)
    @api.model
    user_lang() Fetches the res.lang record corresponding to the language code stored in the user's context. :returns: Model[res.lang]
  • value_to_html(self, value, options)
    @api.model
    value_to_html(value, field, options=None) Converts a single value to its HTML version/output :rtype: unicode

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

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

New fields (13)
  • active Boolean
    default=True
  • code Char
    string='Sequence Code'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • date_range_ids One2many → ir.sequence.date_range
    string='Subsequences' args: 'ir.sequence.date_range', 'sequence_id'
  • implementation Selection
    default='standard' help="While assigning a sequence number to a record, the 'no gap' sequence implementation ensures that each previous sequence number has been assigned already. While this sequence implementation will not skip any sequence number upon assignment, there can still be gaps in the sequence if records are deleted. The 'no gap' implementation is slower than the standard one." required=True string='Implementation' args: [('standard', 'Standard'), ('no_gap', 'No gap')]
  • name Char
    required=True
  • number_increment Integer
    default=1 help='The next number of the sequence will be incremented by this number' required=True string='Step'
  • number_next Integer
    default=1 help='Next number of this sequence' required=True string='Next Number'
  • number_next_actual Integer
    compute='_get_number_next_actual' help='Next number that will be used. This number can be incremented frequently so the displayed value might already be obsolete' inverse='_set_number_next_actual' string='Actual Next Number'
  • padding Integer
    default=0 help="Odoo will automatically adds some '0' on the left of the 'Next Number' to get the required padding size." required=True string='Sequence Size'
  • prefix Char
    help='Prefix value of the record for the sequence' trim=False
  • suffix Char
    help='Suffix value of the record for the sequence' trim=False
  • use_date_range Boolean
    string='Use subsequences per date_range'
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get(self, code)
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by its code. This method is deprecated.
  • get_id(self, sequence_code_or_id, code_or_id='id')
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by the ``sequence_code_or_id`` argument, which can be a code or an id (as controlled by the ``code_or_id`` argument. This method is deprecated.
  • 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, values)

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, values)

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'
  • groups_id 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 (9)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_user_roots(self)
    @api.model@api.returns('self')
    Return all root menu ids visible for the user. :return: the root menu ids :rtype: list(int)
  • load_menus(self, debug)
    @api.model@tools.ormcache_context('self._uid', 'debug', keys=('lang'))
    Loads all menu items (all applications and their sub-menus). :return: the menu root :rtype: dict('children': menu_nodes)
  • load_menus_root(self)
    @api.model@tools.ormcache_context('self._uid', keys=('lang'))
  • search_count(self, domain, limit=None)
    @api.model
  • search_fetch(self, domain, field_names, offset=0, limit=None, order=None)
    @api.model
  • unlink(self)
  • write(self, values)

New fields (20)
  • 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'
  • groups_id 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'
  • key Char
    index='btree_not_null'
  • mode Selection
    default='primary' help="Only applies if this view inherits from an other one (inherit_id is not False/Null).\n\n* if extension (default), if this view is requested the closest primary view\nis looked up (via inherit_id), then all views inheriting from it with this\nview's model are applied\n* if primary, the closest primary view is fully resolved (even if it uses a\ndifferent model than this one), then this view's inheritance specs\n(<xpath/>) are applied, and the result is used as if it were this view's\nactual arch.\n" required=True string='View inheritance mode' args: [('primary', 'Base view'), ('extension', 'Extension View')]
  • model Char
    index=True
  • model_data_id Many2one → ir.model.data
    compute='_compute_model_data_id' search='_search_model_data_id' string='Model Data' args: 'ir.model.data'
  • model_id Many2one → ir.model
    compute='_compute_model_id' inverse='_inverse_compute_model_id' string='Model of the view' args: 'ir.model'
  • name Char
    required=True string='View Name'
  • priority Integer
    default=16 required=True string='Sequence'
  • type Selection
    string='View Type' args: [('list', 'List'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('kanban', 'Kanban'), ('search', 'Search'), ('qweb', 'QWeb')]
  • warning_info Html
    compute='_compute_warning_info' string='Warning information'
  • xml_id Char
    compute='_compute_xml_id' help='ID of the view defined in xml file' string='External ID'
Public methods (14)
  • apply_inheritance_specs(self, source, specs_tree, pre_locate=<expr>)
    @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.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 (0)

No new fields.

Public methods (0)

No public methods.

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

No public methods.

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

No public methods.

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

No public methods.

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

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 (12)
  • 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: --------------- from odoo.addons.base.models.res_config import get_warning_config raise get_warning_config(cr, _("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."), context=context) 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 string: human readable name of the field (e.g.: "Create leads from incoming mails")
  • 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 tuple: - 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)
    Return values for the fields other that `default`, `group` and `module`
  • onchange_module(self, field_value, module_name)
  • set_values(self)
    Set values for the fields other that `default`, `group` and `module`

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

New fields (2)
  • 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 (0)

No public methods.

New fields (3)
  • code Char
    help='The state code.' required=True string='State Code'
  • country_id Many2one → res.country
    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='', args=None, operator='ilike', limit=100)
    @api.model

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

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

New fields (0)

No new fields.

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

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

New fields (12)
  • 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'
  • category_id Many2one → ir.module.category
    index=True string='Application' args: 'ir.module.category'
  • color Integer
    string='Color Index'
  • comment Text
    translate=True
  • full_name Char
    compute='_compute_full_name' search='_search_full_name' string='Group Name'
  • menu_access Many2many → ir.ui.menu
    string='Access Menu' args: 'ir.ui.menu', 'ir_ui_menu_group_rel', 'gid', 'menu_id'
  • model_access One2many → ir.model.access
    copy=True string='Access Controls' args: 'ir.model.access', 'group_id'
  • name Char
    required=True translate=True
  • rule_groups Many2many → ir.rule
    domain="[('global', '=', False)]" string='Rules' args: 'ir.rule', 'rule_group_rel', 'group_id', 'rule_group_id'
  • share Boolean
    help='Group created to set access rights for sharing data with some users.' string='Share Group'
  • users Many2many → res.users
    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'
Public methods (2)
  • copy_data(self, default=None)
  • write(self, vals)

New fields (2)
  • implied_ids Many2many → res.groups
    help='Users of this group automatically inherit those groups' string='Inherits' args: 'res.groups', 'res_groups_implied_rel', 'gid', 'hid'
  • trans_implied_ids Many2many → res.groups
    compute='_compute_trans_implied' recursive=True string='Transitively inherits' args: 'res.groups'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, values)

New fields (0)

No new fields.

Public methods (5)
  • create(self, vals_list)
    @api.model_create_multi
  • get_application_groups(self, domain)
    Return the non-share groups that satisfy ``domain``.
  • get_groups_by_application(self)
    @api.model
    Return all groups classified by application (module category), as a list:: [(app, kind, groups), ...], where ``app`` and ``groups`` are recordsets, and ``kind`` is either ``'boolean'`` or ``'selection'``. Applications are given in sequence order. If ``kind`` is ``'selection'``, ``groups`` are given in reverse implication order.
  • unlink(self)
  • write(self, values)

New fields (15)
  • active Boolean
  • code Char
    help='This field is used to set/get locales for user' required=True string='Locale Code'
  • date_format Char
    default=DEFAULT_DATE_FORMAT required=True string='Date Format'
  • decimal_point Char
    default='.' required=True string='Decimal Separator' trim=False
  • direction Selection
    default='ltr' required=True args: [('ltr', 'Left-to-Right'), ('rtl', 'Right-to-Left')]
  • flag_image Image
    args: 'Image'
  • flag_image_url Char
    compute=_compute_field_flag_image_url
  • grouping Char
    default='[]' help="The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case." required=True string='Separator Format'
  • iso_code Char
    help='This ISO code is the name of po files to use for translations' string='ISO code'
  • name Char
    required=True
  • short_time_format Char
    default=DEFAULT_SHORT_TIME_FORMAT help='Time Format without seconds' required=True string='Short Time Format'
  • thousands_sep Char
    default=',' string='Thousands Separator' trim=False
  • time_format Char
    default=DEFAULT_TIME_FORMAT required=True string='Time Format'
  • url_code Char
    help='The Lang Code displayed in the URL' required=True args: 'URL Code'
  • week_start Selection
    default='7' required=True string='First Day of Week' args: [('1', 'Monday'), ('2', 'Tuesday'), ('3', 'Wednesday'), ('4', 'Thursday'), ('5', 'Friday'), ('6', 'Saturday'), ('7', 'Sunday')]
Public methods (10)
  • CACHED_FIELDS(self) -> OrderedSet
    @property
    Return fields to cache for the active languages Please promise all these fields don't depend on other models and context and are not translated. Warning: Don't add method names of ``dict`` to CACHED_FIELDS for sake of the implementation of LangData
  • action_activate_langs(self)
    Activate the selected languages
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • format(self, percent: str, value, grouping: bool=False) -> str
    Format() will return the language-specific output for float values
  • get_installed(self) -> <expr>
    @api.model@api.readonly
    Return installed languages' (code, name) pairs sorted by name.
  • install_lang(self)
    @api.model
    This method is called from odoo/addons/base/data/res_lang_data.xml to load some language and set it as the default for every partners. The language is set via tools.config by the '_initialize_db' method on the 'db' object. This is a fragile solution and something else should be found.
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (38)
  • active Boolean
    default=True
  • active_lang_count Integer
    compute='_compute_active_lang_count'
  • barcode Char
    company_dependent=True copy=False help='Use a barcode to identify this contact.'
  • city Char
  • color Integer
    default=0 string='Color Index'
  • comment Html
    string='Notes'
  • commercial_company_name Char
    compute='_compute_commercial_company_name' store=True args: 'Company Name Entity'
  • company_name Char
    args: 'Company Name'
  • company_registry Char
    compute='_compute_company_registry' help='The registry number of the company. Use it if it is different from the Tax ID. It must be unique across all partners of a same country' index='btree_not_null' readonly=False store=True string='Company ID'
  • company_registry_label Char
    compute='_compute_company_registry_label' string='Company ID Label'
  • company_type Selection
    compute='_compute_company_type' inverse='_write_company_type' selection=[('person', 'Individual'), ('company', 'Company')] string='Company Type'
  • complete_name Char
    compute='_compute_complete_name' index=True store=True
  • contact_address Char
    compute='_compute_contact_address' string='Complete Address'
  • country_code Char
    related='country_id.code' string='Country Code'
  • email Char
  • email_formatted Char
    compute='_compute_email_formatted' help='Format email address "Name <email@domain>"' args: 'Formatted Email'
  • employee Boolean
    help='Check this box if this contact is an Employee.'
  • function Char
    string='Job Position'
  • is_company Boolean
    default=False help='Check if the contact is a company, otherwise it is a person' string='Is a Company'
  • is_public Boolean
    compute='_compute_is_public'
  • lang Selection
    help='All the emails and documents sent to this contact will be translated in this language.' string='Language' args: _lang_get
  • mobile Char
  • name Char
    default_export_compatible=True index=True
  • parent_name Char
    readonly=True related='parent_id.name' string='Parent name'
  • partner_latitude Float
    digits=(10, 7) string='Geo Latitude'
  • partner_longitude Float
    digits=(10, 7) string='Geo Longitude'
  • partner_share Boolean
    compute='_compute_partner_share' help='Either customer (not a user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data.' store=True args: 'Share Partner'
  • phone Char
  • ref Char
    index=True string='Reference'
  • street Char
  • street2 Char
  • type Selection
    default='contact' string='Address Type' args: [('contact', 'Contact'), ('invoice', 'Invoice Address'), ('delivery', 'Delivery Address'), ('other', 'Other Address')]
  • 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="The Tax Identification Number. Values here will be validated based on the country format. You can use '/' to indicate that the partner is not subject to tax." index=True string='Tax ID'
  • vat_label Char
    compute='_compute_vat_label' string='Tax ID Label'
  • website Char
    args: 'Website Link'
  • zip Char
    change_default=True
Public methods (15)
  • address_get(self, adr_pref=None)
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_company(self)
  • default_get(self, default_fields)
    @api.model
    Add the company of the parent as default if we are creating a child partner. Also take the parent lang by default if any, otherwise, fallback to default DB lang.
  • find_or_create(self, email, assert_valid_email=False)
    @api.model@api.returns('self', <expr>)
    Find a partner with the given ``email`` or use :py:method:`~.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 boolean assert_valid_email: raise if no valid email is found :return: newly created record
  • get_import_templates(self)
    @api.model
  • name_create(self, name)
    @api.model
    Override of orm's name_create method for partners. The purpose is to handle some basic formats to create partners using the name_create. If only an email address is received and that the regex cannot find a name, the name will have the email value. If 'force_email' key in context: must find the email address.
  • onchange_company_type(self)
    @api.onchange('company_type')
  • onchange_email(self)
    @api.onchange('email')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • open_commercial_entity(self)
    Utility method used to add an "Open Company" button in partner views
  • update_address(self, vals)
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)

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

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

No public methods.

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

No public methods.

New fields (2)
  • name Char
    required=True string='Title' translate=True
  • shortcut Char
    string='Abbreviation' translate=True
Public methods (0)

No public methods.

New fields (24)
  • 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'
  • companies_count Integer
    compute='_compute_companies_count' string='Number of Companies'
  • company_id Many2one → res.company
    context={'user_preference': True} default=<expr> help='The default company for this user.' required=True string='Company' args: 'res.company'
  • company_ids Many2many → res.company
    default=<expr> string='Companies' args: 'res.company', 'res_company_users_rel', 'user_id', 'cid'
  • device_ids One2many → res.device
    string='User devices' args: 'res.device', 'user_id'
  • email Char
    inherited=True readonly=False related='partner_id.email'
  • groups_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of groups that apply to the current user' args: '# Groups'
  • groups_id Many2many → res.groups
    default=<expr> string='Groups' args: 'res.groups', 'res_groups_users_rel', 'uid', 'gid'
  • 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 authentication'
  • name Char
    inherited=True readonly=False related='partner_id.name'
  • new_password Char
    compute='_compute_password' help="Specify a value only when creating a user or if you're changing the user's password, otherwise leave empty. After a change of password, the user has to login again." inverse='_set_new_password' string='Set Password'
  • partner_id Many2one → res.partner
    auto_join=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'
  • 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'
  • rules_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of record rules that apply to the current user' args: '# Record Rules'
  • share Boolean
    compute='_compute_share' compute_sudo=True help='External user with limited access, created only for the purpose of sharing data.' store=True string='Share User'
  • signature Html
    compute='_compute_signature' readonly=False store=True string='Email Signature'
  • tz_offset Char
    compute='_compute_tz_offset' string='Timezone offset'
Public methods (28)
  • SELF_READABLE_FIELDS(self)
    @property
    The list of fields a user can read on their own user record. In order to add fields, please override this property on model extensions.
  • SELF_WRITEABLE_FIELDS(self)
    @property
    The list of fields a user can write on their own user record. In order to add fields, please override this property on model extensions.
  • USER_PRIVATE_FIELDS(self)
    @property
  • action_get(self)
    @api.model
  • action_revoke_all_devices(self)
    @check_identity
  • action_show_accesses(self)
  • action_show_groups(self)
  • action_show_rules(self)
  • authenticate(cls, db, credential, user_agent_env)
    @classmethod
    Verifies and returns the user ID corresponding to the given ``credential``, or False if there was no matching user. :param str db: the database on which user is trying to authenticate :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
  • check(cls, db, uid, passwd)
    @classmethod@tools.ormcache('uid', 'passwd')
    Verifies that the given (uid, password) is authorized for the database ``db`` and raise an exception if it is not.
  • check_field_access_rights(self, operation, field_names)
    @api.model
  • context_get(self)
    @api.model@tools.ormcache('self._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='', args=None, operator='ilike', limit=100)
    @api.model
  • on_change_login(self)
    @api.onchange('login')
  • onchange(self, values, field_names, fields_spec)
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • preference_change_password(self)
    @check_identity
  • preference_save(self)
  • read(self, fields=None, load='_classic_read')
  • toggle_active(self)
  • write(self, values)

New fields (0)

No new fields.

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

New fields (1)
  • user_group_warning Text
    compute='_compute_user_group_warning' string='User Group Warning'
Public methods (7)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • new(self, values=None, origin=None, ref=None)
    @api.model
  • onchange(self, values, field_names, fields_spec)
  • read(self, fields=None, load='_classic_read')
  • write(self, values)

New fields (1)
  • api_key_ids One2many → res.users.apikeys
    string='API Keys' args: 'res.users.apikeys', 'user_id'
Public methods (3)
  • SELF_READABLE_FIELDS(self)
    @property
  • SELF_WRITEABLE_FIELDS(self)
    @property
  • api_key_wizard(self)
    @check_identity

New fields (5)
  • create_date Datetime
    readonly=True args: 'Creation Date'
  • expiration_date Datetime
    readonly=True args: 'Expiration Date'
  • name Char
    readonly=True required=True args: 'Description'
  • scope Char
    readonly=True args: 'Scope'
  • user_id Many2one → res.users
    index=True ondelete='cascade' readonly=True required=True args: 'res.users'
Public methods (2)
  • init(self)
  • remove(self)
    @check_identity

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

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

No public methods.

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

No public methods.

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • user_id Many2one → res.users
    domain=[('res_users_settings_id', '=', 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 (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)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Alexis de Lattre, Fabien Meghazi, Xavier ALT, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, Géry Debongnie, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Pierre Masereel, Romain Derie, Laurent Smet, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Jairo Llopis, Lucas Perais, Arnold Moyaux, Moens Alexandre, Julien Castiaux, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, Paul Morelle, Sébastien Theys, Joseph Caburnay, oco-odoo, Vincent Schippefilt, Anh Thao Pham (pta), Katherine Zaoral, Lois Rilo, Samuel Degueldre, Alvaro Fuentes, std-odoo, Achraf (abz), Lucas Lefèvre, Ivan Yelizariev, Nasreddin Boulif (bon), Tiffany Chang (tic), Rémy Voet (ryv), Pierre Rousseau, Gorash, fja-odoo, Mathieu Duckerts-Antoine, Pierre Paridans, Arnaud Joset, William Braeckman, Romain Estievenart, Kevin Baptiste, Petar Najman, Guillaume (guva), odoo, Daniel Stenlöv, Stefan-Calin Crainiciuc (stcc), Arnaud Baes, Xavier BOL (xbo), Benoit Socias, Stanislas Sobieski, Miquel Raïch, pedrambiria, Ahmad Khanalizadeh, momegahed, sofiagvaladze, Nicolas (vin), william-andre, Julien Van Roy, Víctor Martínez, Florian Damhaut, MerlinGuillaume, JF Aubert, diagnoza, aliya, Florian Vranckx, bat-odoo, Florian Charlier, Patrick Hoste, Nshimiyimana Séna, John (jol), Walid HANNICHE (waha), Yolann Sabaux, Abdelouahab (abla), John Laterre (jol), Nicolas Bayet, Antoine Vandevenne (anv), gawa-odoo, Demesmaeker, Aurelien van Delft (avd), Hubert Van De Walle, Mathieu Walravens, Achraf, Valentin Chevalier, Roy Le, nni-odoo, Renaud Thiry, Julien Banken, Stanislas Gueniffey, niyasraphy, jbw-odoo, nda-odoo, Sébastien BEAU, Iván Todorovich, bve-odoo, Habib (ayh), Loan (LSE), Thomas Lefebvre (thle), mehjabinfarsana, Archana Vaghasiya, alsh-odoo, Gaetan Vanden Bergh (gavb), Merel Geens (mege), Louis Wicket (wil), Walid, Laurent Desausoi, Adrien Widart (awt), nda, Maximilien (malb), Victor Piryns (pivi), Tommy (tong), Julien (jula), Thomas Becquevort (thbe), amdi-odoo, Gauthier Wala (gawa), maximilien(malb), Ali Alfie (alal), Tom De Caluwé, Pierre-Yves Dufays, Saurabh Mishra, Daniel Kosky (dako), Pieter Claeys (clpi), Andrew Gavgavian, Lefebvre Thomas (thle), Valentin Vallaeys (vava), Om Rabara, duongnguyen, Saurabh Choraria, Levi Siuzdak (sile), Antoine Dupuis (andu), Antoine Boonen, Dylan Kiss (dyki), Jinane Maksoud, Jesús Alan Ramos Rodríguez, Paolo Gatti, Sanket Brahmbhatt, Bruno Boi, Antoine (ande), flvr-odoo, Paolo Gatti (pgi), Pratik Awasthi, Julien Alardot (jual), FrancoisGe, Michael (mcm), Preksha Chouhan, Valeriya(vchu), Mayurrajsinh Rathod, Rahul Prajapati, Chong Wang (cwg), Karnav Sojitra, Leloup Loïc (lole), Adrien Schoffeniels, bram1000, tong-odoo, tanghulu0608, stcc-odoo, Xavier Bol (xbo), Brieuc-brd, Mohit Beniwal, jard@odoo.com, Renilkumar Kajavadra, Nguyễn Đại Dương, AH-Yussef, Leonardo Pavan Rocha, sovi-odoo, Dawn Hwang, Arnaud Sibille, Mahdi Cheikh Rouhou (macr), Nicolas Viseur (vin), Walid (wasa), sesn-odoo, guva-odoo, Paul Stroobant, Jay Savaliya, Hesham, ravb-odoo, Mélanie, Youssef Bashandy, Ethan Vincent, Mathieu (mcou), lase@odoo.com, Benjamin Hanquin (beha), Jordan D. (Joda), jorv-odoo, suth-odoo, mizosoft, Serge Bayet (seba), axtr, reka-odoo, Sven Fuehr, AMZIL Ayoub, Seif (segn), kmod-odoo, Eteil Djoumatchoua(etdj) etdj@odoo.com, yosa-odoo, Ruben Gomes (rugo), jugj-odoo, vava-odoo, Bruno Boi (boi), Bastien Fafchamps (bafa), Julien Carion (juca), kcv-odoo, adsh-odoo, mega, Tanguy Quéguineur, Martin Trigaux (mat), smna-odoo, Du-ma, Louis Gobert, Chrysanthe (chgo), sami odoo, Jordan D.(Joda), Louis (wil), Mohammed Basioni (basm), asm, Sanjay Sharma, aamo-odoo, Mathieu (mano), Joanna, thle-odoo, Robert Coleman, Elisabeth Dickinson, Yousef Alnashef (alny), casp-odoo, Steven Luna, Maximiliano Mezzavilla, Antoine (anso), sabr, VAN BOSSUYT Nicolas, Mohammed Basioni, Sébastien (blse), Hesham Saleh, aizu-odoo, sben-odoo, Ricardo Gomes Rodrigues, muab-odoo, roto-odoo, Maira Salazar (srma), David Van Droogenbroeck (DROD), elhayyany, Mohammad Abdulmoneim (abdu), khsr-odoo, Mohammed Erradi (moer), thsh-odoo, Pierre Pulinckx (pipu), Alexis Lacroix, fdardenne, Bastien PIERRE, Anton Romanova (roan), mle, Renaud Thiry (reth), uso-odoo, Krzysztof Magusiak (krma), nape-odoo, Omar (OSAH), erl-odoo, Ajit Singh, Armin-FalDiS, Dani Baumann, KonstantinosPaschopoulos, Akash Pandey, Christophe Matthieu (chm), Davor Bojkić - Bole, yavy-odoo, Duy (Đỗ Anh), Yannis Burkhalter, Baptiste Pellarin, Daryl Chen, nees-odoo, Pulinckx Pierre (PIPU), Hazem Ibrahim, hatr-odoo, utma-odoo, aksi-odoo, Elijah Tay (elct), hisi-odoo, Daniel Duato Catalán, Alice Gaudon, adip-odoo, lrizzi1, assh-odoo, Waleed Elgamal, matd-odoo, zain2323, Toma Tomov, Randall Castro - https://www.vauxoo.com, nfl, CodeByKyle, Radhika Shyara, Ashith Farhan (asfa), rugot-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-07 17:41:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

Views touched (178)
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.tree ir.actions.report tree 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.tree ir.actions.actions tree New
asset_view_form ir.asset form New
asset_view_search ir.asset search New
asset_view_tree ir.asset tree 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 tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
contact_name contact_name ir.ui.view qweb New
demo_failures_dialog Demo Failure Dialog ir.demo_failure.wizard form New
demo_force_install_form ir.demo.form ir.demo form New
demo_wizard_form_view Demo Failure Form ir.demo_failure form New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
enable_profiling_wizard Enable profiling base.enable.profiling.wizard form New
form_res_users_key_description API Key: description input form res.users.apikeys.description form New
form_res_users_key_show API Key: show res.users.apikeys.show form New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access.view.tree ir.model.access tree New
ir_access_view_tree_edition ir.model.access.view.tree.edition ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree 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.tree ir.cron.trigger tree 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 tree 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 tree view ir.default tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_profile_view_form IR Profile Form ir.profile form New
ir_profile_view_list IR Profile List ir.profile tree New
ir_profile_view_search IR Profile Search ir.profile search New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree 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 tree New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_bank_view_search res.bank.view.search res.bank search New
res_config_installer Inheritable view for installer objects res.config.installer form 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_lang_form res.lang.form res.lang form New
res_lang_search res.lang.search res.lang search New
res_lang_tree res.lang.tree res.lang tree 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 tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_partner_view_form_private res.partner.view.form.private res.partner form New
res_users_identitycheck_view_form res.users.identitycheck form New
res_users_identitycheck_view_form_revokedevices Revoke All Devices 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 tree New
user_groups_view res.users.groups res.users form Inherits view_users_form
view_apikeys API Keys Listing res.users.apikeys tree New
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree 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 tree New
view_company_form res.company.form res.company form New
view_company_tree res.company.tree res.company tree 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.tree res.country.group tree 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.tree res.country.state tree New
view_country_tree res.country.tree res.country tree 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.tree res.currency.rate tree New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_decimal_precision_form Decimal Precision decimal.precision form New
view_decimal_precision_tree Decimal Precision List decimal.precision tree New
view_groups_form res.groups.form res.groups form 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 tree 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 tree 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 tree 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 tree New
view_model_fields_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree 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.tree res.partner.bank tree New
view_partner_category_form Contact Tags res.partner.category form New
view_partner_category_list Contact Tags res.partner.category tree 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_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_company_kanban res.company.kanban res.company kanban New
view_res_partner_filter res.partner.select res.partner search New
view_res_users_kanban res.users.kanban res.users kanban New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
wizard_lang_export Export Translations base.language.export form New
HTTP endpoints (3)
Route(s)HandlerAuthTypeMethodsFlags
/jsonrpc RPC.jsonrpc none json ALL
/xmlrpc/<service> RPC.xmlrpc_1 none http POST csrf off
/xmlrpc/2/<service> RPC.xmlrpc_2 none http POST csrf off
Models touched (130)

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)
    @api.model
    Hook method to customize the help message in empty list/kanban views. By default, it returns the help received as parameter. :param str help: 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) :rtype: str
  • get_formview_action(self, access_uid=None)
    Return an action to open the document ``self``. This method is meant to be overridden in addons that want to give specific view ids for example. An optional access_uid holds the user that will access the document that could be different from the current user.
  • get_formview_id(self, access_uid=None)
    Return a view id to open the document ``self`` with. This method is meant to be overridden in addons that want to give specific view ids for example. Optional access_uid holds the user that would access the form view id different from the current environment user.
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    get_view([view_id | view_type='form']) Get the detailed composition of the requested view like model, view architecture. The return of the method can only depend on the requested view types, access rights (views or other records), view access rules, options, context lang and TYPE_view_ref (other context values cannot be used). :param int view_id: id of the view or None :param str view_type: type of the view to return if view_id is None ('form', 'tree', ...) :param dict options: boolean options to return additional features: - 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 :raise Invalid ArchitectureError: if there is view type other than form, tree, calendar, search etc... defined on the structure
  • get_views(self, views, options=None)
    @api.model
    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=None, view_type='form')
    @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 size=6 args: 'ISO Code'
  • data Binary
    attachment=False required=True args: 'File'
  • filename Char
    required=True args: 'File Name'
  • name Char
    required=True args: 'Language Name'
  • overwrite Boolean
    default=True help='If you enable this option, existing translations (including custom ones) will be overwritten and replaced by those in this file' args: 'Overwrite Existing Terms'
Public methods (1)
  • import_lang(self)

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

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

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

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

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

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

No public methods.

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

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

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • image_1024 Image
    max_height=1024 max_width=1024 related='image_1920' store=True args: 'Image 1024'
  • image_128 Image
    max_height=128 max_width=128 related='image_1920' store=True args: 'Image 128'
  • image_1920 Image
    max_height=1920 max_width=1920 args: 'Image'
  • image_256 Image
    max_height=256 max_width=256 related='image_1920' store=True args: 'Image 256'
  • image_512 Image
    max_height=512 max_width=512 related='image_1920' store=True args: 'Image 512'
Public methods (0)

No public methods.

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

No public methods.

New fields (16)
  • 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'
  • filter Boolean
  • groups_id 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'), ('inline', 'Inline Edit'), ('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='tree,form' help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)" required=True
  • views Binary
    compute='_compute_views' help='This function field computes the ordered list of views that should be enabled when displaying the result of an action, federating view mode, views and reference view. The result is returned as an ordered list of pairs (view_id,view_mode).'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • exists(self)
  • read(self, fields=None, load='_classic_read')
    call the method get_empty_list_help of the model and set the window action help message
  • unlink(self)

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

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

No public methods.

New fields (13)
  • attachment Char
    help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.' string='Save as Attachment Prefix'
  • attachment_use Boolean
    help='If enabled, then the second time the user prints with same attachment name, it returns the previous report.' string='Reload from Attachment'
  • binding_type Selection
    default='report'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_report_rel', 'uid', 'gid'
  • model Char
    required=True string='Model Name'
  • model_id Many2one → ir.model
    compute='_compute_model_id' search='_search_model_id' string='Model' args: 'ir.model'
  • multi Boolean
    help='If set to true, the action will not be displayed on the right toolbar of a form view.' string='On Multiple Doc.'
  • paperformat_id Many2one → report.paperformat
    args: 'report.paperformat', 'Paper Format'
  • print_report_name Char
    help="This is the filename of the report going to download. Keep empty to not change the report filename. You can use a python expression with the 'object' and 'time' variables." translate=True args: 'Printed Report Name'
  • report_file Char
    help='The path to the main report file (depending on Report Type) or empty if the content is in another field' readonly=False required=False store=True string='Report File'
  • report_name Char
    required=True string='Template Name'
  • report_type Selection
    default='qweb-pdf' help='The type of the report that will be rendered, each one having its own rendering method. HTML means the report will be opened directly in your browser PDF means the report will be rendered using Wkhtmltopdf and downloaded by the user.' required=True args: [('qweb-html', 'HTML'), ('qweb-pdf', 'PDF'), ('qweb-text', 'Text')]
  • type Char
    default='ir.actions.report'
Public methods (9)
  • 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_wkhtmltopdf_state(self)
    @api.model
    Get the current state of wkhtmltopdf: install, ok, upgrade, workers or broken. * install: Starting state. * upgrade: The binary is an older version (< 0.12.0). * ok: A binary was found with a recent version (>= 0.12.0). * workers: Not enough workers found to perform the pdf rendering process (< 2 workers). * broken: A binary was found but not responding. :return: wkhtmltopdf_state
  • report_action(self, docids, data=None, config=True)
    Return an action of type ir.actions.report. :param docids: id/ids/browse record of the records to print (if not used, pass an empty list) :param data: :param bool config: :rtype: bytes
  • retrieve_attachment(self, record)
    Retrieve an attachment for a specific record. :param record: The record owning of the attachment. :return: A recordset of length <=1 or None
  • unlink_action(self)
    Remove the contextual actions created for the reports.

New fields (28)
  • available_model_ids Many2many → ir.model
    compute='_compute_available_model_ids' store=False string='Available Models' args: 'ir.model'
  • child_ids Many2many → ir.actions.server
    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', 'rel_server_actions', 'server_id', 'action_id'
  • code Text
    default=DEFAULT_PYTHON_CODE 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.' 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'), ('equation', 'Compute')], 'Value Type'
  • groups_id 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'
  • link_field_id Many2one → ir.model.fields
    compute='_compute_link_field_id' help='Specify a field used to link the newly created record on the record used by the server action.' readonly=False store=True 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
    readonly=True related='model_id.model' store=True string='Model Name'
  • name Char
    required=True
  • 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.'
  • state Selection
    copy=True default='object_write' 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- 'Execute Existing Actions': define an action that triggers several other server actions\n" required=True string='Type' args: [('object_write', 'Update Record'), ('object_create', 'Create Record'), ('code', 'Execute Code'), ('webhook', 'Send Webhook Notification'), ('multi', 'Execute Existing Actions')]
  • type Char
    default='ir.actions.server'
  • update_boolean_value Selection
    default='true' string='Boolean Value' args: [('true', 'Yes (True)'), ('false', 'No (False)')]
  • update_field_id Many2one → ir.model.fields
    compute='_compute_crud_relations' ondelete='cascade' readonly=False store=True string='Field to Update' args: 'ir.model.fields'
  • update_field_type Selection
    readonly=True related='update_field_id.ttype'
  • update_m2m_operation Selection
    default='add' string='Many2many Operations' args: [('add', 'Adding'), ('remove', 'Removing'), ('set', 'Setting it to'), ('clear', 'Clearing it')]
  • update_path Char
    default=_default_update_path help="Path to the field to update, e.g. 'partner_id.name'" string='Field to Update Path'
  • update_related_model_id Many2one → ir.model
    compute='_compute_crud_relations' readonly=False store=True args: 'ir.model'
  • usage Selection
    default='ir_actions_server' required=True string='Usage' args: [('ir_actions_server', 'Server Action'), ('ir_cron', 'Scheduled Action')]
  • value Text
    help="For Python expressions, this field may hold a Python expression that can use the same values as for the code field on the server action,e.g. `env.user.name` to set the current user's name as the value or `record.id` to set the ID of the record on which the action is run.\n\nFor Static values, the value will be used directly without evaluation, e.g.`42` or `My custom name` or the selected record."
  • value_field_to_show Selection
    compute='_compute_value_field_to_show' args: [('value', 'value'), ('resource_ref', 'reference'), ('update_boolean_value', 'update_boolean_value'), ('selection_value', 'selection_value')]
  • 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 (4)
  • copy_data(self, default=None)
  • create_action(self)
    Create a contextual action for each server action.
  • 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.

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

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

New fields (11)
  • active Boolean
    default=True
  • cron_name Char
    compute='_compute_cron_name' store=True args: 'Name'
  • doall Boolean
    help='Specify if missed occurrences should be executed when the server restarts.' string='Repeat Missed'
  • interval_number Integer
    default=1 group_operator=None help='Repeat every x.'
  • interval_type Selection
    default='months' string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • ir_actions_server_id Many2one → ir.actions.server
    delegate=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'
  • numbercall Integer
    default=1 help='How many times the method is called,\na negative number indicates no limit.' string='Number of Calls'
  • priority Integer
    default=5 group_operator=None 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)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • method_direct_trigger(self)
  • toggle(self, model, domain)
    @api.model
  • try_write(self, values)
  • unlink(self)
  • write(self, vals)

New fields (2)
  • call_at Datetime
    index=True
  • cron_id Many2one → ir.cron
    index=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 (3)
  • export_fields One2many → ir.exports.line
    copy=True string='Export ID' args: 'ir.exports.line', 'export_id'
  • name Char
    string='Export Name'
  • resource Char
    index=True
Public methods (0)

No public methods.

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

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • db_id_for(self, model, field, subfield, value)
    @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 :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)
    @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.osv.orm.Model.write` expects. :param model: :class:`odoo.osv.orm.Model` for the conversion base :param fromtype: :returns: a converter callable :rtype: (record: dict, logger: (field, error) -> None) -> dict
  • to_field(self, model, field, fromtype=str)
    @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 :return: a function (fromtype -> field.write_type), if a converter is found :rtype: Callable | None

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (9)
  • 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
  • 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 Text
    default='[]' required=True
  • user_id Many2one → res.users
    help='The user this filter is private to. When left empty the filter is public and available to all users.' ondelete='cascade' string='User' args: 'res.users'
Public methods (4)
  • copy(self, default=None)
  • create_or_replace(self, vals)
    @api.model@api.returns('self', <expr>)
  • get_filters(self, model, action_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_id`` (m2o tuple), ``action_id`` (m2o tuple) and ``context`` of the matching ``ir.filters``.
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • get_translations_for_webclient(self, modules, lang)
    @api.model
  • get_web_translations_hash(self, modules, lang)
    @api.model@tools.ormcache('frozenset(modules)', 'lang')
  • routing_map(self, key=None)
    @tools.ormcache('key', cache='routing')

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

New fields (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)' required=True string='Connection Encryption' args: [('none', 'None'), ('starttls', 'TLS (STARTTLS)'), ('ssl', 'SSL/TLS')]
  • 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 (5)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
    Constructs an RFC2822 email.message.Message object based on the keyword arguments passed, and returns it. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) :param string body: email body, of the type ``subtype`` (by default, plaintext). If html subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative, unless an explicit ``body_alternative`` version is passed. :param string body_alternative: optional alternative body, of the type specified in ``subtype_alternative`` :param string reply_to: optional value of Reply-To header :param string object_id: optional tracking identifier, to be included in the message-id for recognizing replies. Suggested format for object-id is "res_id-model", e.g. "12345-crm.lead". :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), must match the format of the ``body`` parameter. Default is 'plain', making the content part of the mail "text/plain". :param string subtype_alternative: optional mime subtype of ``body_alternative`` (usually 'plain' or 'html'). Default is 'plain'. :param list attachments: list of (filename, filecontents) pairs, where filecontents is a string containing the bytes of the attachment :param message_id: :param references: :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) :param dict headers: optional map of headers to set on the outgoing mail (may override the other headers, including Subject, Reply-To, Message-Id, etc.) :rtype: email.message.EmailMessage :return: the new RFC2822 email message
  • connect(self, host=None, port=None, user=None, password=None, encryption=None, smtp_from=None, ssl_certificate=None, ssl_private_key=None, smtp_debug=False, mail_server_id=None, allow_archived=False)
    Returns a new SMTP connection to the given SMTP server. When running in test mode, this method does nothing and returns `None`. :param host: host or IP of SMTP server to connect to, if mail_server_id not passed :param int port: SMTP port to connect to :param user: optional username to authenticate with :param password: optional password to authenticate with :param string encryption: optional, ``'ssl'`` | ``'starttls'`` :param smtp_from: FROM SMTP envelop, used to find the best mail server :param ssl_certificate: filename of the SSL certificate used for authentication Used when no mail server is given and overwrite the odoo-bin argument "smtp_ssl_certificate" :param ssl_private_key: filename of the SSL private key used for authentication Used when no mail server is given and overwrite the odoo-bin argument "smtp_ssl_private_key" :param bool smtp_debug: toggle debugging of SMTP sessions (all i/o will be output in logs) :param mail_server_id: ID of specific mail server to use (overrides other parameters) :param bool allow_archived: by default (False), an exception is raised when calling this method on an archived record (using mail_server_id param). It can be set to True for testing so that the exception is no longer raised.
  • 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' or 'ssl' (see ir.mail_server fields for explanation) :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)
  • write(self, vals)
    Ensure we cannot archive a server in-use

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

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

New fields (8)
  • create_date Datetime
  • definition Char
    help='PostgreSQL constraint definition'
  • message Char
    help='Error message returned when the constraint is violated.' translate=True
  • 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 constraint or foreign key name.' index=True required=True string='Constraint'
  • type Char
    help='Type of the constraint: `f` for a foreign key, `u` for other constraints.' index=True required=True size=1 string='Constraint Type'
  • write_date Datetime
Public methods (2)
  • copy(self, default=None)
  • unlink(self)

New fields (7)
  • complete_name Char
    compute='_compute_complete_name' string='Complete ID'
  • model Char
    required=True string='Model Name'
  • module Char
    default='' required=True
  • name Char
    help='External Key/Identifier that can be used for data integration with third-party systems' required=True string='External Identifier'
  • noupdate Boolean
    default=False string='Non Updatable'
  • reference Char
    compute='_compute_reference' readonly=True store=False string='Reference'
  • res_id Many2oneReference
    help='ID of the target record in the database' model_field='model' string='Record ID'
Public methods (5)
  • 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(self, default=None)
    @api.returns('self', <expr>)
  • 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, values)

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

No new fields.

Public methods (2)
  • unlink(self)
  • write(self, values)

New fields (9)
  • 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
    index=True required=True string='Name' translate=True
  • parent_id Many2one → ir.module.category
    index=True string='Parent Application' args: 'ir.module.category'
  • 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 (30)
  • 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'
  • demo Boolean
    default=False readonly=True args: 'Demo Data'
  • dependencies_id One2many → ir.module.module.dependency
    readonly=True string='Dependencies' args: 'ir.module.module.dependency', 'module_id'
  • description Text
    readonly=True translate=True args: 'Description'
  • description_html Html
    compute='_get_desc' args: 'Description HTML'
  • exclusion_ids One2many → ir.module.module.exclusion
    readonly=True string='Exclusions' args: 'ir.module.module.exclusion', 'module_id'
  • has_iap Boolean
    compute='_compute_has_iap'
  • icon Char
    args: 'Icon URL'
  • icon_flag Char
    compute='_get_icon_image' string='Flag'
  • icon_image Binary
    compute='_get_icon_image' string='Icon'
  • installed_version Char
    compute='_get_latest_version' args: 'Latest Version'
  • latest_version Char
    readonly=True args: 'Installed Version'
  • license Selection
    default='LGPL-3' readonly=True string='License' args: [('GPL-2', 'GPL Version 2'), ('GPL-2 or any later version', 'GPL-2 or later version'), ('GPL-3', 'GPL Version 3'), ('GPL-3 or any later version', 'GPL-3 or later version'), ('AGPL-3', 'Affero GPL-3'), ('LGPL-3', 'LGPL Version 3'), ('Other OSI approved licence', 'Other OSI Approved License'), ('OEEL-1', 'Odoo Enterprise Edition License v1.0'), ('OPL-1', 'Odoo Proprietary License v1.0'), ('Other proprietary', 'Other Proprietary')]
  • maintainer Char
    readonly=True args: 'Maintainer'
  • menus_by_module Text
    compute='_get_views' store=True string='Menus'
  • name Char
    readonly=True required=True args: 'Technical Name'
  • published_version Char
    readonly=True args: 'Published Version'
  • reports_by_module Text
    compute='_get_views' store=True string='Reports'
  • sequence Integer
    default=100 args: 'Sequence'
  • shortdesc Char
    readonly=True translate=True args: 'Module Name'
  • state Selection
    default='uninstallable' index=True readonly=True string='Status' args: STATES
  • summary Char
    readonly=True translate=True args: 'Summary'
  • to_buy Boolean
    default=False args: 'Odoo Enterprise Module'
  • url Char
    readonly=True args: 'URL'
  • views_by_module Text
    compute='_get_views' store=True string='Views'
  • website Char
    readonly=True args: 'Website'
Public methods (21)
  • 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_install_cancel(self)
    @assert_log_admin_access
  • button_uninstall(self)
    @assert_log_admin_access
  • button_uninstall_cancel(self)
  • button_uninstall_wizard(self)
    @assert_log_admin_access
    Launch the wizard to uninstall the given module.
  • button_upgrade(self)
    @assert_log_admin_access
  • button_upgrade_cancel(self)
    @assert_log_admin_access
  • check_external_dependencies(cls, module_name, newstate='to install')
    @classmethod
  • create(self, vals_list)
    @api.model_create_multi
  • downstream_dependencies(self, known_deps=None, exclude_states=('uninstalled', 'uninstallable', 'to remove'))
    @api.returns('self')
    Return the modules that directly or indirectly depend on the modules in `self`, and that satisfy the `exclude_states` filter.
  • get_module_info(cls, name)
    @classmethod
  • get_values_from_terp(terp)
    @staticmethod
  • module_uninstall(self)
    @assert_log_admin_access
    Perform the various steps required to uninstall a module completely including the deletion of all database structures created by the module: tables, columns, constraints, etc.
  • next(self)
    Return the action linked to an ir.actions.todo is there exists one that should be executed. Otherwise, redirect to /web
  • search_panel_select_range(self, field_name, **kwargs)
    @api.model
  • unlink(self)
  • update_list(self)
    @assert_log_admin_access@api.model
  • upstream_dependencies(self, known_deps=None, exclude_states=('installed', 'uninstallable', 'to remove'))
    @api.returns('self')
    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 (0)

No public methods.

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 (13)
  • create_date Datetime
    args: 'Creation Date'
  • duration Float
    args: 'Duration'
  • entry_count Integer
    args: 'Entry count'
  • init_stack_trace Text
    prefetch=False args: 'Initial stack trace'
  • name Char
    args: 'Description'
  • qweb Text
    prefetch=False args: 'Qweb'
  • session Char
    index=True args: 'Session'
  • speedscope Binary
    compute='_compute_speedscope' args: 'Speedscope'
  • speedscope_url Text
    compute='_compute_speedscope_url' args: 'Open'
  • sql Text
    prefetch=False args: 'Sql'
  • sql_count Integer
    args: 'Queries Count'
  • traces_async Text
    prefetch=False args: 'Traces Async'
  • traces_sync Text
    prefetch=False args: 'Traces Sync'
Public methods (1)
  • 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 (11)
  • company_id Many2one → res.company
    index=True string='Company' args: 'res.company'
  • fields_id Many2one → ir.model.fields
    ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • name Char
    index=True
  • res_id Char
    help='If not set, acts as a default value for new resources' index=True string='Resource'
  • type Selection
    default='many2one' index=True required=True args: [('char', 'Char'), ('float', 'Float'), ('boolean', 'Boolean'), ('integer', 'Integer'), ('text', 'Text'), ('binary', 'Binary'), ('many2one', 'Many2One'), ('date', 'Date'), ('datetime', 'DateTime'), ('selection', 'Selection'), ('html', 'Html')]
  • value_binary Binary
    attachment=False
  • value_datetime Datetime
  • value_float Float
  • value_integer Integer
  • value_reference Char
  • value_text Text
Public methods (6)
  • create(self, vals_list)
    @api.model_create_multi
  • get_by_record(self)
  • init(self)
  • search_multi(self, name, model, operator, value)
    @api.model
    Return a domain for the records that match the given condition.
  • unlink(self)
  • write(self, values)

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. Returns a dict of dict with: * key equal to the option key. * dict: type, params, name, description, default_value * type: 'string' 'integer' 'float' 'model' (e.g. 'res.partner') 'array' 'selection' (e.g. [key1, key2...])
  • record_to_html(self, record, field_name, options)
    @api.model
    record_to_html(record, field_name, options) Converts the specified field of the ``record`` to HTML :rtype: unicode
  • user_lang(self)
    @api.model
    user_lang() Fetches the res.lang record corresponding to the language code stored in the user's context. :returns: Model[res.lang]
  • value_to_html(self, value, options)
    @api.model
    value_to_html(value, field, options=None) Converts a single value to its HTML version/output :rtype: unicode

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

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

New fields (13)
  • active Boolean
    default=True
  • code Char
    string='Sequence Code'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • date_range_ids One2many → ir.sequence.date_range
    string='Subsequences' args: 'ir.sequence.date_range', 'sequence_id'
  • implementation Selection
    default='standard' help="While assigning a sequence number to a record, the 'no gap' sequence implementation ensures that each previous sequence number has been assigned already. While this sequence implementation will not skip any sequence number upon assignment, there can still be gaps in the sequence if records are deleted. The 'no gap' implementation is slower than the standard one." required=True string='Implementation' args: [('standard', 'Standard'), ('no_gap', 'No gap')]
  • name Char
    required=True
  • number_increment Integer
    default=1 help='The next number of the sequence will be incremented by this number' required=True string='Step'
  • number_next Integer
    default=1 help='Next number of this sequence' required=True string='Next Number'
  • number_next_actual Integer
    compute='_get_number_next_actual' help='Next number that will be used. This number can be incremented frequently so the displayed value might already be obsolete' inverse='_set_number_next_actual' string='Actual Next Number'
  • padding Integer
    default=0 help="Odoo will automatically adds some '0' on the left of the 'Next Number' to get the required padding size." required=True string='Sequence Size'
  • prefix Char
    help='Prefix value of the record for the sequence' trim=False
  • suffix Char
    help='Suffix value of the record for the sequence' trim=False
  • use_date_range Boolean
    string='Use subsequences per date_range'
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get(self, code)
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by its code. This method is deprecated.
  • get_id(self, sequence_code_or_id, code_or_id='id')
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by the ``sequence_code_or_id`` argument, which can be a code or an id (as controlled by the ``code_or_id`` argument. This method is deprecated.
  • 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, values)

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, values)

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'
  • groups_id 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 unaccent=False
  • sequence Integer
    default=10
  • web_icon Char
    string='Web Icon File'
  • web_icon_data Binary
    attachment=True string='Web Icon Image'
Public methods (9)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_user_roots(self)
    @api.model@api.returns('self')
    Return all root menu ids visible for the user. :return: the root menu ids :rtype: list(int)
  • load_menus(self, debug)
    @api.model@tools.ormcache_context('self._uid', 'debug', keys=('lang'))
    Loads all menu items (all applications and their sub-menus). :return: the menu root :rtype: dict('children': menu_nodes)
  • load_menus_root(self)
    @api.model@tools.ormcache_context('self._uid', keys=('lang'))
  • search_count(self, domain, limit=None)
    @api.model
  • search_fetch(self, domain, field_names, offset=0, limit=None, order=None)
    @api.model
  • unlink(self)
  • write(self, values)

New fields (19)
  • 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'
  • groups_id 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'
  • key Char
    index='btree_not_null'
  • mode Selection
    default='primary' help="Only applies if this view inherits from an other one (inherit_id is not False/Null).\n\n* if extension (default), if this view is requested the closest primary view\nis looked up (via inherit_id), then all views inheriting from it with this\nview's model are applied\n* if primary, the closest primary view is fully resolved (even if it uses a\ndifferent model than this one), then this view's inheritance specs\n(<xpath/>) are applied, and the result is used as if it were this view's\nactual arch.\n" required=True string='View inheritance mode' args: [('primary', 'Base view'), ('extension', 'Extension View')]
  • model Char
    index=True
  • model_data_id Many2one → ir.model.data
    compute='_compute_model_data_id' search='_search_model_data_id' string='Model Data' args: 'ir.model.data'
  • model_id Many2one → ir.model
    compute='_compute_model_id' inverse='_inverse_compute_model_id' string='Model of the view' args: 'ir.model'
  • name Char
    required=True string='View Name'
  • priority Integer
    default=16 required=True string='Sequence'
  • type Selection
    string='View Type' args: [('tree', 'Tree'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('gantt', 'Gantt'), ('kanban', 'Kanban'), ('search', 'Search'), ('qweb', 'QWeb')]
  • xml_id Char
    compute='_compute_xml_id' help='ID of the view defined in xml file' string='External ID'
Public methods (15)
  • apply_inheritance_specs(self, source, specs_tree, pre_locate=<expr>)
    @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(self, default=None)
    @api.returns('self', <expr>)
  • 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.
  • read_combined(self, fields=None)
    Utility function to get a view combined with its inherited views. * Gets the top of the view tree if a sub-view is requested * Applies all inherited archs on the root view * Returns the view with all requested fields .. note:: ``arch`` is always added to the fields list even if not requested (similar to ``id``)
  • render_public_asset(self, template, values=None)
    @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 (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 (17)
  • 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 (11)
  • active Boolean
    default=True
  • bic Char
    help='Sometimes called BIC or Swift.' index=True args: 'Bank Identifier Code'
  • city Char
  • country Many2one → res.country
    args: 'res.country'
  • email Char
  • name Char
    required=True
  • phone Char
  • state Many2one → res.country.state
    domain="[('country_id', '=?', country)]" args: 'res.country.state', 'Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

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 (5)
  • already_installed(self)
    For each module, check if it's already installed and if it is return its name :returns: a list of the already installed modules in this installer :rtype: [str]
  • default_get(self, fields_list)
    @api.model
    If an addon is already installed, check it by default
  • execute(self)
  • fields_get(self, allfields=None, attributes=None)
    @api.model
    If an addon is already installed, set it to readonly as res.config.installer doesn't handle uninstallations of already installed addons
  • modules_to_install(self)
    selects all modules to install: * checked boolean fields * return values of hook methods. Hook methods are of the form ``_if_%(addon_name)s``, and are called if the corresponding addon is marked for installation. They take the arguments cr, uid, ids and context, and return an iterable of addon names * additionals, additionals are setup through the ``_install_if`` class variable. ``_install_if`` is a dict of {iterable:iterable} where key and value are iterables of addon names. If all the addons in the key are selected for installation (warning: addons added through hooks don't count), then the addons in the value are added to the set of modules to install * not already installed

New fields (0)

No new fields.

Public methods (12)
  • 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: --------------- from odoo.addons.base.models.res_config import get_warning_config raise get_warning_config(cr, _("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."), context=context) 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 string: human readable name of the field (e.g.: "Create leads from incoming mails")
  • 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 tuple: - 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)
    Return values for the fields other that `default`, `group` and `module`
  • onchange_module(self, field_value, module_name)
  • set_values(self)
    Set values for the fields other that `default`, `group` and `module`

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

New fields (2)
  • 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 (0)

No public methods.

New fields (3)
  • code Char
    help='The state code.' required=True string='State Code'
  • country_id Many2one → res.country
    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 (0)

No public methods.

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

New fields (11)
  • category_id Many2one → ir.module.category
    index=True string='Application' args: 'ir.module.category'
  • color Integer
    string='Color Index'
  • comment Text
    translate=True
  • full_name Char
    compute='_compute_full_name' search='_search_full_name' string='Group Name'
  • menu_access Many2many → ir.ui.menu
    string='Access Menu' args: 'ir.ui.menu', 'ir_ui_menu_group_rel', 'gid', 'menu_id'
  • model_access One2many → ir.model.access
    copy=True string='Access Controls' args: 'ir.model.access', 'group_id'
  • name Char
    required=True translate=True
  • rule_groups Many2many → ir.rule
    domain="[('global', '=', False)]" string='Rules' args: 'ir.rule', 'rule_group_rel', 'group_id', 'rule_group_id'
  • share Boolean
    help='Group created to set access rights for sharing data with some users.' string='Share Group'
  • users Many2many → res.users
    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'
Public methods (2)
  • copy(self, default=None)
  • write(self, vals)

New fields (2)
  • implied_ids Many2many → res.groups
    help='Users of this group automatically inherit those groups' string='Inherits' args: 'res.groups', 'res_groups_implied_rel', 'gid', 'hid'
  • trans_implied_ids Many2many → res.groups
    compute='_compute_trans_implied' recursive=True string='Transitively inherits' args: 'res.groups'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)

New fields (0)

No new fields.

Public methods (5)
  • create(self, vals_list)
    @api.model_create_multi
  • get_application_groups(self, domain)
    Return the non-share groups that satisfy ``domain``.
  • get_groups_by_application(self)
    @api.model
    Return all groups classified by application (module category), as a list:: [(app, kind, groups), ...], where ``app`` and ``groups`` are recordsets, and ``kind`` is either ``'boolean'`` or ``'selection'``. Applications are given in sequence order. If ``kind`` is ``'selection'``, ``groups`` are given in reverse implication order.
  • unlink(self)
  • write(self, values)

New fields (14)
  • active Boolean
  • code Char
    help='This field is used to set/get locales for user' required=True string='Locale Code'
  • date_format Char
    default=DEFAULT_DATE_FORMAT required=True string='Date Format'
  • decimal_point Char
    default='.' required=True string='Decimal Separator' trim=False
  • direction Selection
    default='ltr' required=True args: [('ltr', 'Left-to-Right'), ('rtl', 'Right-to-Left')]
  • flag_image Image
    args: 'Image'
  • flag_image_url Char
    compute=_compute_field_flag_image_url
  • grouping Char
    default='[]' help="The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case." required=True string='Separator Format'
  • iso_code Char
    help='This ISO code is the name of po files to use for translations' string='ISO code'
  • name Char
    required=True
  • thousands_sep Char
    default=',' string='Thousands Separator' trim=False
  • time_format Char
    default=DEFAULT_TIME_FORMAT required=True string='Time Format'
  • url_code Char
    help='The Lang Code displayed in the URL' required=True args: 'URL Code'
  • week_start Selection
    default='7' required=True string='First Day of Week' args: [('1', 'Monday'), ('2', 'Tuesday'), ('3', 'Wednesday'), ('4', 'Thursday'), ('5', 'Friday'), ('6', 'Saturday'), ('7', 'Sunday')]
Public methods (11)
  • action_activate_langs(self)
    Activate the selected languages
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • format(self, percent, value, grouping=False, monetary=False)
    Format() will return the language-specific output for float values
  • get_available(self)
    @api.model@tools.ormcache()
    Return the available languages as a list of (code, url_code, name, active) sorted by name.
  • get_installed(self)
    @api.model@tools.ormcache()
    Return the installed languages as a list of (code, name) sorted by name.
  • get_sorted(self)
  • install_lang(self)
    @api.model
    This method is called from odoo/addons/base/data/res_lang_data.xml to load some language and set it as the default for every partners. The language is set via tools.config by the '_initialize_db' method on the 'db' object. This is a fragile solution and something else should be found.
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (52)
  • active Boolean
    default=True
  • active_lang_count Integer
    compute='_compute_active_lang_count'
  • bank_ids One2many → res.partner.bank
    string='Banks' args: 'res.partner.bank', 'partner_id'
  • barcode Char
    company_dependent=True copy=False help='Use a barcode to identify this contact.'
  • category_id Many2many → res.partner.category
    column1='partner_id' column2='category_id' default=_default_category string='Tags' args: 'res.partner.category'
  • child_ids One2many → res.partner
    domain=[('active', '=', True)] string='Contact' args: 'res.partner', 'parent_id'
  • city Char
  • color Integer
    default=0 string='Color Index'
  • comment Html
    string='Notes'
  • commercial_company_name Char
    compute='_compute_commercial_company_name' store=True args: 'Company Name Entity'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner' index=True recursive=True store=True string='Commercial Entity' args: 'res.partner'
  • company_id Many2one → res.company
    index=True args: 'res.company', 'Company'
  • company_name Char
    args: 'Company Name'
  • company_registry Char
    compute='_compute_company_registry' help='The registry number of the company. Use it if it is different from the Tax ID. It must be unique across all partners of a same country' readonly=False store=True string='Company ID'
  • company_type Selection
    compute='_compute_company_type' inverse='_write_company_type' selection=[('person', 'Individual'), ('company', 'Company')] string='Company Type'
  • complete_name Char
    compute='_compute_complete_name' index=True store=True
  • contact_address Char
    compute='_compute_contact_address' string='Complete Address'
  • country_code Char
    related='country_id.code' string='Country Code'
  • country_id Many2one → res.country
    ondelete='restrict' string='Country' args: 'res.country'
  • date Date
    index=True
  • 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'
  • industry_id Many2one → res.partner.industry
    args: 'res.partner.industry', 'Industry'
  • is_company Boolean
    default=False help='Check if the contact is a company, otherwise it is a person' string='Is a Company'
  • is_public Boolean
    compute='_compute_is_public'
  • lang Selection
    help='All the emails and documents sent to this contact will be translated in this language.' string='Language' args: _lang_get
  • mobile Char
    unaccent=False
  • name Char
    default_export_compatible=True index=True
  • parent_id Many2one → res.partner
    index=True string='Related Company' args: 'res.partner'
  • parent_name Char
    readonly=True related='parent_id.name' string='Parent name'
  • partner_latitude Float
    digits=(10, 7) string='Geo Latitude'
  • partner_longitude Float
    digits=(10, 7) string='Geo Longitude'
  • partner_share Boolean
    compute='_compute_partner_share' help='Either customer (not a user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data.' store=True args: 'Share Partner'
  • phone Char
    unaccent=False
  • ref Char
    index=True string='Reference'
  • same_company_registry_partner_id Many2one → res.partner
    compute='_compute_same_vat_partner_id' store=False string='Partner with same Company Registry' args: 'res.partner'
  • same_vat_partner_id Many2one → res.partner
    compute='_compute_same_vat_partner_id' store=False string='Partner with same Tax ID' args: 'res.partner'
  • self Many2one
    comodel_name=_name compute='_compute_get_ids'
  • state_id Many2one → res.country.state
    domain="[('country_id', '=?', country_id)]" ondelete='restrict' string='State' args: 'res.country.state'
  • street Char
  • street2 Char
  • title Many2one → res.partner.title
    args: 'res.partner.title'
  • type Selection
    default='contact' help='- Contact: Use this to organize the contact details of employees of a given company (e.g. CEO, CFO, ...).\n- Invoice Address: Preferred address for all invoices. Selected by default when you invoice an order that belongs to this company.\n- Delivery Address: Preferred address for all deliveries. Selected by default when you deliver an order that belongs to this company.\n- Other: Other address for the company (e.g. subsidiary, ...)' string='Address Type' args: [('contact', 'Contact'), ('invoice', 'Invoice Address'), ('delivery', 'Delivery Address'), ('other', 'Other Address')]
  • 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: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' string='Timezone offset'
  • user_id Many2one → res.users
    compute='_compute_user_id' help='The internal user in charge of this contact.' precompute=True readonly=False store=True string='Salesperson' args: 'res.users'
  • user_ids One2many → res.users
    auto_join=True string='Users' args: 'res.users', 'partner_id'
  • vat Char
    help="The Tax Identification Number. Values here will be validated based on the country format. You can use '/' to indicate that the partner is not subject to tax." index=True string='Tax ID'
  • website Char
    args: 'Website Link'
  • zip Char
    change_default=True
Public methods (17)
  • address_get(self, adr_pref=None)
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_company(self)
  • default_get(self, default_fields)
    @api.model
    Add the company of the parent as default if we are creating a child partner. Also take the parent lang by default if any, otherwise, fallback to default DB lang.
  • find_or_create(self, email, assert_valid_email=False)
    @api.model@api.returns('self', <expr>)
    Find a partner with the given ``email`` or use :py:method:`~.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 boolean assert_valid_email: raise if no valid email is found :return: newly created record
  • get_import_templates(self)
    @api.model
  • main_partner(self)
    @api.model@api.returns('self')
    Return the main partner
  • name_create(self, name)
    @api.model
    Override of orm's name_create method for partners. The purpose is to handle some basic formats to create partners using the name_create. If only an email address is received and that the regex cannot find a name, the name will have the email value. If 'force_email' key in context: must find the email address.
  • onchange_company_type(self)
    @api.onchange('company_type')
  • onchange_email(self)
    @api.onchange('email')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • open_commercial_entity(self)
    Utility method used to add an "Open Company" button in partner views
  • open_parent(self)
    Utility method used to add an "Open Parent" button in partner views
  • update_address(self, vals)
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)

New fields (13)
  • acc_holder_name Char
    compute='_compute_account_holder_name' help='Account holder name, in case it is different than the name of the Account Holder' readonly=False store=True string='Account Holder Name'
  • acc_number Char
    required=True args: 'Account Number'
  • acc_type Selection
    compute='_compute_acc_type' help='Bank account type: Normal or IBAN. Inferred from the bank account number.' selection=<expr> string='Type'
  • active Boolean
    default=True
  • allow_out_payment Boolean
    copy=False default=False help='This account can be used for outgoing payments' readonly=False args: 'Send Money'
  • bank_bic Char
    readonly=False related='bank_id.bic'
  • bank_id Many2one → res.bank
    string='Bank' args: 'res.bank'
  • bank_name Char
    readonly=False related='bank_id.name'
  • company_id Many2one → res.company
    readonly=True related='partner_id.company_id' store=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • partner_id Many2one → res.partner
    domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' required=True args: 'res.partner', 'Account Holder'
  • sanitized_acc_number Char
    compute='_compute_sanitized_acc_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
    default=10
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_supported_account_types(self)
    @api.model
  • retrieve_acc_type(self, acc_number)
    @api.model
    To be overridden by subclasses in order to support other account_types.
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the category without removing it.'
  • child_ids One2many → res.partner.category
    string='Child Tags' args: 'res.partner.category', 'parent_id'
  • color Integer
    default=_get_default_color string='Color'
  • name Char
    required=True string='Tag Name' translate=True
  • parent_id Many2one → res.partner.category
    index=True ondelete='cascade' string='Parent Category' args: 'res.partner.category'
  • parent_path Char
    index=True unaccent=False
  • partner_ids Many2many → res.partner
    column1='category_id' column2='partner_id' copy=False string='Partners' args: 'res.partner'
Public methods (0)

No public methods.

New fields (0)

No new fields.

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 (2)
  • name Char
    required=True string='Title' translate=True
  • shortcut Char
    string='Abbreviation' translate=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (23)
  • 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'
  • companies_count Integer
    compute='_compute_companies_count' string='Number of Companies'
  • company_id Many2one → res.company
    context={'user_preference': True} default=<expr> help='The default company for this user.' required=True string='Company' args: 'res.company'
  • company_ids Many2many → res.company
    default=<expr> string='Companies' args: 'res.company', 'res_company_users_rel', 'user_id', 'cid'
  • email Char
    inherited=True readonly=False related='partner_id.email'
  • groups_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of groups that apply to the current user' args: '# Groups'
  • groups_id Many2many → res.groups
    default=<expr> string='Groups' args: 'res.groups', 'res_groups_users_rel', 'uid', 'gid'
  • 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 authentication'
  • name Char
    inherited=True readonly=False related='partner_id.name'
  • new_password Char
    compute='_compute_password' help="Specify a value only when creating a user or if you're changing the user's password, otherwise leave empty. After a change of password, the user has to login again." inverse='_set_new_password' string='Set Password'
  • partner_id Many2one → res.partner
    auto_join=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'
  • 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'
  • rules_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of record rules that apply to the current user' args: '# Record Rules'
  • share Boolean
    compute='_compute_share' compute_sudo=True help='External user with limited access, created only for the purpose of sharing data.' store=True string='Share User'
  • signature Html
    compute='_compute_signature' readonly=False store=True string='Email Signature'
  • tz_offset Char
    compute='_compute_tz_offset' string='Timezone offset'
Public methods (27)
  • SELF_READABLE_FIELDS(self)
    @property
    The list of fields a user can read on their own user record. In order to add fields, please override this property on model extensions.
  • SELF_WRITEABLE_FIELDS(self)
    @property
    The list of fields a user can write on their own user record. In order to add fields, please override this property on model extensions.
  • USER_PRIVATE_FIELDS(self)
    @property
  • action_get(self)
    @api.model
  • action_revoke_all_devices(self)
  • action_show_accesses(self)
  • action_show_groups(self)
  • action_show_rules(self)
  • authenticate(cls, db, login, password, user_agent_env)
    @classmethod
    Verifies and returns the user ID corresponding to the given ``login`` and ``password`` combination, or False if there was no matching user. :param str db: the database on which user is trying to authenticate :param str login: username :param str password: user password :param dict user_agent_env: environment dictionary describing any relevant environment attributes
  • 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
  • check(cls, db, uid, passwd)
    @classmethod@tools.ormcache('uid', 'passwd')
    Verifies that the given (uid, password) is authorized for the database ``db`` and raise an exception if it is not.
  • check_field_access_rights(self, operation, field_names)
    @api.model
  • check_super(self, passwd)
  • context_get(self)
    @api.model@tools.ormcache('self._uid')
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_company_currency_id(self)
    @api.model
  • has_group(self, group_ext_id)
    @api.model
  • init(self)
  • on_change_login(self)
    @api.onchange('login')
  • onchange(self, values, field_names, fields_spec)
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • preference_change_password(self)
    @check_identity
  • preference_save(self)
  • read(self, fields=None, load='_classic_read')
  • toggle_active(self)
  • write(self, values)

New fields (0)

No new fields.

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

New fields (1)
  • user_group_warning Text
    compute='_compute_user_group_warning' string='User Group Warning'
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • new(self, values=None, origin=None, ref=None)
    @api.model
  • onchange(self, values, field_names, fields_spec)
  • read(self, fields=None, load='_classic_read')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • write(self, values)

New fields (1)
  • api_key_ids One2many → res.users.apikeys
    string='API Keys' args: 'res.users.apikeys', 'user_id'
Public methods (3)
  • SELF_READABLE_FIELDS(self)
    @property
  • SELF_WRITEABLE_FIELDS(self)
    @property
  • api_key_wizard(self)
    @check_identity

New fields (4)
  • create_date Datetime
    readonly=True args: 'Creation Date'
  • name Char
    readonly=True required=True args: 'Description'
  • scope Char
    readonly=True args: 'Scope'
  • user_id Many2one → res.users
    index=True ondelete='cascade' readonly=True required=True args: 'res.users'
Public methods (2)
  • init(self)
  • remove(self)
    @check_identity

New fields (1)
  • name Char
    required=True args: 'Description'
Public methods (2)
  • check_access_make_key(self)
  • make_key(self)
    @check_identity

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

No public methods.

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

No public methods.

New fields (2)
  • password Char
  • request Char
    groups=fields.NO_ACCESS readonly=True
Public methods (2)
  • revoke_all_devices(self)
  • run_check(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • user_id Many2one → res.users
    domain=[('res_users_settings_id', '=', 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 (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)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Fabien Meghazi, Xavier ALT, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, Stefan Rijnhart, qdp-odoo, Géry Debongnie, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Barad Mahendra, Yannick Tivisse, qsm-odoo, Dharmraj Jhala, Pierre Masereel, Romain Derie, Laurent Smet, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Jairo Llopis, Lucas Perais, Arnold Moyaux, Adrian Torres, Moens Alexandre, Julien Castiaux, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, Sébastien Theys, Joseph Caburnay, oco-odoo, Florent de Labarre, Julien Mougenot, Vincent Schippefilt, Anh Thao Pham (pta), svs-odoo, Lois Rilo, Samuel Degueldre, Alvaro Fuentes, std-odoo, Achraf (abz), Adrien Widart, Ivan Yelizariev, Jérémy Hennecart, Nasreddin Boulif (bon), Touati Djamel (otd), Tiffany Chang (tic), Rémy Voet (ryv), Thanh Dodeur, Gorash, fja-odoo, Mathieu Duckerts-Antoine, Pierre Paridans, Aurélien (avd), William Braeckman, Romain Estievenart, Petar Najman, Raf Geens, Daniel Stenlöv, Stefan-Calin Crainiciuc (stcc), Arnaud Baes, Xavier BOL (xbo), Benoit Socias, Stanislas Sobieski, Hubert Van de Walle (huvw), Miquel Raïch, pedrambiria, Ahmad Khanalizadeh, Laurent Desausoi (lade), momegahed, Guillaume (gdi), sofiagvaladze, Nicolas (vin), william-andre, Paolo (pgi), Julien Van Roy, Víctor Martínez, Florian Damhaut, Merlin (megu), MerlinGuillaume, JF Aubert, Audric Onockx (auon), aliya, Florian Vranckx, bat-odoo, Antoine Guenet, Florian Charlier, Patrick Hoste, Nshimiyimana Séna, Louis Baudoux, Walid HANNICHE (waha), Yolann Sabaux, Abdelouahab (abla), Pouya Malekinejad, John Laterre (jol), Nicolas Bayet, Antoine Vandevenne (anv), Laurent Stukkens (LTU), gawa-odoo, Demesmaeker, Aurelien van Delft (avd), Hubert Van De Walle, Mathieu Walravens, Dossogne Bertrand, Achraf, dht-odoo, Roy Le, Fabio Barbero, nni-odoo, Renaud Thiry, Stanislas Gueniffey, niyasraphy, jbw-odoo, nda-odoo, Sébastien BEAU, Iván Todorovich, bve-odoo, Habib (ayh), baa, Thomas Lefebvre (thle), Gaetan Vanden Bergh (gavb), Merel Geens (mege), Louis Wicket (wil), David, Walid, Laurent Desausoi, Adrien Widart (awt), nda, althaf shaik, Maximilien (malb), Victor Piryns (pivi), Tommy (tong), Julien (jula), amdi-odoo, Gauthier Wala (gawa), maximilien(malb), Tom De Caluwé, Pierre-Yves Dufays, Saurabh Mishra, Daniel Kosky (dako), Pieter Claeys (clpi), Lefebvre Thomas (thle), Om Rabara, duongnguyen, Saurabh Choraria, Levi Siuzdak (sile), Antoine Boonen, Michael Tietz, Dylan Kiss (dyki), Jinane Maksoud, Jesús Alan Ramos Rodríguez, Sébastien Geelen (sge), Paolo Gatti, Sanket Brahmbhatt, Antoine (ande), flvr-odoo, Pratik Awasthi, Julien Alardot (jual), FrancoisGe, Michael (mcm), mehjabin, Horacio Tellez, Mayurrajsinh Rathod, Rahul Prajapati, Chong Wang (cwg), Adrien Schoffeniels, bram1000, Ahmed Khalaf, stcc-odoo, micheledic, Mohit Beniwal, jard@odoo.com, Renilkumar Kajavadra, Manuel Fombuena, Maksym Yankin, Nguyễn Đại Dương, AH-Yussef, Leonardo Pavan Rocha, sovi-odoo, Dawn Hwang, Mahdi Cheikh Rouhou (macr), Nicolas Viseur (vin), Walid (wasa), sesn-odoo, guva-odoo, Jay Savaliya, stefanorigano (SRI), MAHAMADASIF ANSARI, Umesh Gupta, Hesham, Youssef Bashandy, Mathieu (mcou), lase@odoo.com, Benjamin Hanquin (beha), Jordan D. (Joda), jorv-odoo, suth-odoo, mizosoft, Serge Bayet (seba), Nguyen Hong Quang, Jérémy Hennecart (jeh), AMZIL Ayoub, Seif (segn), kmod-odoo, Eteil Djoumatchoua(etdj) etdj@odoo.com, vava-odoo, Aktiv Software, Bruno Boi (boi), mega, Tanguy Quéguineur, Martin Trigaux (mat), smna-odoo, Du-ma, Louis Gobert, sami odoo, Raman Salihi, Jordan D.(Joda), Louis (wil), Mohammed Basioni (basm), asm, Randall Castro, thle-odoo, Robert Coleman, Andrea Manenti, Yousef Alnashef (alny), casp-odoo, Mohammed Basioni, David Van Droogenbroeck (DROD), Olivia Fantinel, Mohammad Abdulmoneim (abdu), khsr-odoo, Mohammed Erradi (moer), Alexis Lacroix, fdardenne, Anton Romanova (roan), mle, Renaud Thiry (reth), Dani Baumann, KonstantinosPaschopoulos, Akash Pandey, Christophe Matthieu (chm), Davor Bojkić - Bole, jjbenavaz, yavy-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

Views touched (178)
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.tree ir.actions.report tree 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.tree ir.actions.actions tree New
asset_view_form ir.asset form New
asset_view_search ir.asset search New
asset_view_tree ir.asset tree New
base.language_install_view_form_lang_switch Switch to language base.language.install form New
base_onboarding_company_form base.company.onboarding.form res.company form Inherits base.view_company_form
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 tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
contact_name contact_name ir.ui.view qweb New
demo_failures_dialog Demo Failure Dialog ir.demo_failure.wizard form New
demo_force_install_form ir.demo.form ir.demo form New
demo_wizard_form_view Demo Failure Form ir.demo_failure form New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search 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
identity_check_wizard res.users.identitycheck form New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access.view.tree ir.model.access tree New
ir_access_view_tree_edition ir.model.access.view.tree.edition ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree 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.tree ir.cron.trigger tree 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 tree 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 tree view ir.default tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_profile_view_form IR Profile Form ir.profile form New
ir_profile_view_list IR Profile List ir.profile tree New
ir_profile_view_search IR Profile Search ir.profile search New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Apps Kanban ir.module.module kanban New
onboarding_company_step onboarding_company_step ir.ui.view qweb New
onboarding_container onboarding_container ir.ui.view qweb New
onboarding_step onboarding_step 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 tree New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_bank_view_search res.bank.view.search res.bank search New
res_config_installer Inheritable view for installer objects res.config.installer form 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_lang_form res.lang.form res.lang form New
res_lang_search res.lang.search res.lang search New
res_lang_tree res.lang.tree res.lang tree 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 tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_partner_view_form_private res.partner.view.form.private res.partner 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 tree New
user_groups_view res.users.groups res.users form Inherits view_users_form
view_apikeys API Keys Listing res.users.apikeys tree New
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree 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_company_form res.company.form res.company form New
view_company_tree res.company.tree res.company tree 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.tree res.country.group tree 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.tree res.country.state tree New
view_country_tree res.country.tree res.country tree 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.tree res.currency.rate tree New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_decimal_precision_form Decimal Precision decimal.precision form New
view_decimal_precision_tree Decimal Precision List decimal.precision tree New
view_groups_form res.groups.form res.groups form 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 tree 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 tree 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 tree 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 tree New
view_model_fields_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree 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.tree res.partner.bank tree New
view_partner_category_form Contact Tags res.partner.category form New
view_partner_category_list Contact Tags res.partner.category tree 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_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_company_kanban res.company.kanban res.company kanban New
view_res_partner_filter res.partner.select res.partner search New
view_res_users_kanban res.users.kanban res.users kanban New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
wizard_lang_export Export Translations base.language.export form New
HTTP endpoints (3)
Route(s)HandlerAuthTypeMethodsFlags
/jsonrpc RPC.jsonrpc none json ALL
/xmlrpc/<service> RPC.xmlrpc_1 none http POST csrf off
/xmlrpc/2/<service> RPC.xmlrpc_2 none http POST csrf off
Models touched (129)

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 (8)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    .. deprecated:: saas-15.4 Use :meth:`~odoo.models.Model.get_view()` instead.
  • get_empty_list_help(self, help_message)
    @api.model
    Hook method to customize the help message in empty list/kanban views. By default, it returns the help received as parameter. :param str help: 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) :rtype: str
  • get_formview_action(self, access_uid=None)
    Return an action to open the document ``self``. This method is meant to be overridden in addons that want to give specific view ids for example. An optional access_uid holds the user that will access the document that could be different from the current user.
  • get_formview_id(self, access_uid=None)
    Return a view id to open the document ``self`` with. This method is meant to be overridden in addons that want to give specific view ids for example. Optional access_uid holds the user that would access the form view id different from the current environment user.
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    get_view([view_id | view_type='form']) Get the detailed composition of the requested view like model, view architecture :param int view_id: id of the view or None :param str view_type: type of the view to return if view_id is None ('form', 'tree', ...) :param dict options: boolean options to return additional features: - 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 :raise Invalid ArchitectureError: if there is view type other than form, tree, calendar, search etc... defined on the structure
  • get_views(self, views, options=None)
    @api.model
    Returns the fields_views of given views, along with the fields of the current model, and optionally its filters for the given action. :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
  • load_views(self, views, options=None)
    @api.model
  • view_header_get(self, view_id=None, view_type='form')
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi@api.returns('self', <expr>)

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 (6)
  • data Binary
    attachment=False readonly=True args: 'File'
  • 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
  • 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 size=6 args: 'ISO Code'
  • data Binary
    attachment=False required=True args: 'File'
  • filename Char
    required=True args: 'File Name'
  • name Char
    required=True args: 'Language Name'
  • overwrite Boolean
    default=True help='If you enable this option, existing translations (including custom ones) will be overwritten and replaced by those in this file' args: 'Overwrite Existing Terms'
Public methods (1)
  • import_lang(self)

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

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

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

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

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

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

No public methods.

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

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

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • image_1024 Image
    max_height=1024 max_width=1024 related='image_1920' store=True args: 'Image 1024'
  • image_128 Image
    max_height=128 max_width=128 related='image_1920' store=True args: 'Image 128'
  • image_1920 Image
    max_height=1920 max_width=1920 args: 'Image'
  • image_256 Image
    max_height=256 max_width=256 related='image_1920' store=True args: 'Image 256'
  • image_512 Image
    max_height=512 max_width=512 related='image_1920' store=True args: 'Image 512'
Public methods (0)

No public methods.

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

No public methods.

New fields (16)
  • 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'
  • filter Boolean
  • groups_id 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'
  • 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 Text
    compute='_compute_search_view'
  • 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'), ('inline', 'Inline Edit'), ('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='tree,form' help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)" required=True
  • views Binary
    compute='_compute_views' help='This function field computes the ordered list of views that should be enabled when displaying the result of an action, federating view mode, views and reference view. The result is returned as an ordered list of pairs (view_id,view_mode).'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • exists(self)
  • read(self, fields=None, load='_classic_read')
    call the method get_empty_list_help of the model and set the window action help message
  • unlink(self)

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

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

No public methods.

New fields (13)
  • attachment Char
    help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.' string='Save as Attachment Prefix'
  • attachment_use Boolean
    help='If enabled, then the second time the user prints with same attachment name, it returns the previous report.' string='Reload from Attachment'
  • binding_type Selection
    default='report'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_report_rel', 'uid', 'gid'
  • model Char
    required=True string='Model Name'
  • model_id Many2one → ir.model
    compute='_compute_model_id' search='_search_model_id' string='Model' args: 'ir.model'
  • multi Boolean
    help='If set to true, the action will not be displayed on the right toolbar of a form view.' string='On Multiple Doc.'
  • paperformat_id Many2one → report.paperformat
    args: 'report.paperformat', 'Paper Format'
  • print_report_name Char
    help="This is the filename of the report going to download. Keep empty to not change the report filename. You can use a python expression with the 'object' and 'time' variables." translate=True args: 'Printed Report Name'
  • report_file Char
    help='The path to the main report file (depending on Report Type) or empty if the content is in another field' readonly=False required=False store=True string='Report File'
  • report_name Char
    required=True string='Template Name'
  • report_type Selection
    default='qweb-pdf' help='The type of the report that will be rendered, each one having its own rendering method. HTML means the report will be opened directly in your browser PDF means the report will be rendered using Wkhtmltopdf and downloaded by the user.' required=True args: [('qweb-html', 'HTML'), ('qweb-pdf', 'PDF'), ('qweb-text', 'Text')]
  • type Char
    default='ir.actions.report'
Public methods (10)
  • 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.
  • datamatrix_available(self)
    @api.model
    Returns whether or not datamatrix creation is possible. * True: Reportlab seems to be able to create datamatrix without error. * False: Reportlab cannot seem to create datamatrix, most likely due to missing package dependency :return: Boolean
  • 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_wkhtmltopdf_state(self)
    @api.model
    Get the current state of wkhtmltopdf: install, ok, upgrade, workers or broken. * install: Starting state. * upgrade: The binary is an older version (< 0.12.0). * ok: A binary was found with a recent version (>= 0.12.0). * workers: Not enough workers found to perform the pdf rendering process (< 2 workers). * broken: A binary was found but not responding. :return: wkhtmltopdf_state
  • report_action(self, docids, data=None, config=True)
    Return an action of type ir.actions.report. :param docids: id/ids/browse record of the records to print (if not used, pass an empty list) :param data: :param bool config: :rtype: bytes
  • retrieve_attachment(self, record)
    Retrieve an attachment for a specific record. :param record: The record owning of the attachment. :return: A recordset of length <=1 or None
  • unlink_action(self)
    Remove the contextual actions created for the reports.

New fields (13)
  • child_ids Many2many → ir.actions.server
    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', 'rel_server_actions', 'server_id', 'action_id'
  • code Text
    default=DEFAULT_PYTHON_CODE 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_model_id' help='Model for record creation / update. Set this field only to specify a different model than the base model.' readonly=False store=True string='Target Model' args: 'ir.model'
  • crud_model_name Char
    readonly=True related='crud_model_id.model' string='Target Model Name'
  • fields_lines One2many → ir.server.object.lines
    copy=True string='Value Mapping' args: 'ir.server.object.lines', 'server_id'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'ir_act_server_group_rel', 'act_id', 'gid'
  • link_field_id Many2one → ir.model.fields
    compute='_compute_link_field_id' help='Provide the field used to link the newly created record on the record used by the server action.' readonly=False store=True 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
    readonly=True related='model_id.model' store=True string='Model Name'
  • sequence Integer
    default=5 help='When dealing with multiple actions, the execution order is based on the sequence. Low number means high priority.'
  • state Selection
    copy=True default='object_write' help="Type of server action. The following values are available:\n- 'Execute Python Code': a block of python code that will be executed\n- 'Create a new Record': create a new record with new values\n- 'Update a Record': update the values of a record\n- 'Execute several actions': define an action that triggers several other server actions\n- 'Send Email': post a message, a note or send an email (Discuss)\n- 'Add Followers': add followers to a record (Discuss)\n- 'Create Next Activity': create an activity (Discuss)\n- 'Send SMS Text Message': send SMS, log them on documents (SMS)" required=True string='Action To Do' args: [('code', 'Execute Python Code'), ('object_create', 'Create a new Record'), ('object_write', 'Update the Record'), ('multi', 'Execute several actions')]
  • type Char
    default='ir.actions.server'
  • usage Selection
    default='ir_actions_server' required=True string='Usage' args: [('ir_actions_server', 'Server Action'), ('ir_cron', 'Scheduled Action')]
Public methods (3)
  • create_action(self)
    Create a contextual action for each server action.
  • 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.

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

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

New fields (19)
  • access_token Char
    groups='base.group_user' args: 'Access Token'
  • checksum Char
    index=True readonly=True size=40 args: 'Checksum/SHA1'
  • company_id Many2one → res.company
    change_default=True default=<expr> string='Company' args: 'res.company'
  • datas Binary
    compute='_compute_datas' inverse='_inverse_datas' string='File Content (base64)'
  • db_datas Binary
    attachment=False args: 'Database Data'
  • description Text
    args: 'Description'
  • file_size Integer
    readonly=True args: 'File Size'
  • index_content Text
    prefetch=False readonly=True args: 'Indexed Content'
  • mimetype Char
    readonly=True args: 'Mime Type'
  • name Char
    required=True args: 'Name'
  • public Boolean
    args: 'Is public document'
  • raw Binary
    compute='_compute_raw' inverse='_inverse_raw' string='File Content (raw)'
  • res_field Char
    readonly=True args: 'Resource Field'
  • res_id Many2oneReference
    model_field='res_model' readonly=True args: 'Resource ID'
  • res_model Char
    readonly=True args: 'Resource Model'
  • res_name Char
    compute='_compute_res_name' args: 'Resource Name'
  • store_fname Char
    index=True unaccent=False 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 (12)
  • action_get(self)
    @api.model
  • check(self, mode, values=None)
    @api.model
    Restricts the access to an ir.attachment, according to referred mode
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • 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.
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Override read_group to add res_field=False in domain if not present.
  • regenerate_assets_bundles(self)
    @api.model
  • unlink(self)
  • validate_access(self, access_token)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • power_on(self, *args, **kwargs)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

New fields (11)
  • active Boolean
    default=True
  • cron_name Char
    readonly=False related='ir_actions_server_id.name' store=True args: 'Name'
  • doall Boolean
    help='Specify if missed occurrences should be executed when the server restarts.' string='Repeat Missed'
  • interval_number Integer
    default=1 group_operator=None help='Repeat every x.'
  • interval_type Selection
    default='months' string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • ir_actions_server_id Many2one → ir.actions.server
    delegate=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'
  • numbercall Integer
    default=1 help='How many times the method is called,\na negative number indicates no limit.' string='Number of Calls'
  • priority Integer
    default=5 group_operator=None 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)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • method_direct_trigger(self)
  • toggle(self, model, domain)
    @api.model
  • try_write(self, values)
  • unlink(self)
  • write(self, vals)

New fields (2)
  • call_at Datetime
  • cron_id Many2one → ir.cron
    index=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 (8)
  • 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.
  • get(self, model_name, field_name, user_id=False, company_id=False, condition=False)
    @api.model
    Return the default value for the given field, user and company, or ``None`` if no default is available. :param model_name: :param field_name: :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'``.
  • get_model_defaults(self, model_name, condition=False)
    @api.model@tools.ormcache('self.env.uid', 'self.env.company.id', 'model_name', 'condition')
    Return the available default values for the given model (for the current user), as a dict mapping field names to 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 (3)
  • export_fields One2many → ir.exports.line
    copy=True string='Export ID' args: 'ir.exports.line', 'export_id'
  • name Char
    string='Export Name'
  • resource Char
    index=True
Public methods (0)

No public methods.

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

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • db_id_for(self, model, field, subfield, value)
    @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_get/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 :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)
    @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.osv.orm.Model.write` expects. :param model: :class:`odoo.osv.orm.Model` for the conversion base :param fromtype: :returns: a converter callable :rtype: (record: dict, logger: (field, error) -> None) -> dict
  • to_field(self, model, field, fromtype=str)
    @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 :return: a function (fromtype -> field.write_type), if a converter is found :rtype: Callable | None

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (9)
  • 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
  • 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 Text
    default='[]' required=True
  • user_id Many2one → res.users
    help='The user this filter is private to. When left empty the filter is public and available to all users.' ondelete='cascade' string='User' args: 'res.users'
Public methods (4)
  • copy(self, default=None)
  • create_or_replace(self, vals)
    @api.model@api.returns('self', <expr>)
  • get_filters(self, model, action_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_id`` (m2o tuple), ``action_id`` (m2o tuple) and ``context`` of the matching ``ir.filters``.
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • get_translations_for_webclient(self, modules, lang)
    @api.model
  • get_web_translations_hash(self, modules, lang)
    @api.model@tools.ormcache('frozenset(modules)', 'lang')
  • routing_map(cls, key=None)
    @classmethod

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='Define for which email address or domain 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')]
  • 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)' required=True string='Connection Encryption' args: [('none', 'None'), ('starttls', 'TLS (STARTTLS)'), ('ssl', 'SSL/TLS')]
  • smtp_host Char
    help='Hostname or IP of SMTP server' required=True 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.' required=True 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 (5)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
    Constructs an RFC2822 email.message.Message object based on the keyword arguments passed, and returns it. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) :param string body: email body, of the type ``subtype`` (by default, plaintext). If html subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative, unless an explicit ``body_alternative`` version is passed. :param string body_alternative: optional alternative body, of the type specified in ``subtype_alternative`` :param string reply_to: optional value of Reply-To header :param string object_id: optional tracking identifier, to be included in the message-id for recognizing replies. Suggested format for object-id is "res_id-model", e.g. "12345-crm.lead". :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), must match the format of the ``body`` parameter. Default is 'plain', making the content part of the mail "text/plain". :param string subtype_alternative: optional mime subtype of ``body_alternative`` (usually 'plain' or 'html'). Default is 'plain'. :param list attachments: list of (filename, filecontents) pairs, where filecontents is a string containing the bytes of the attachment :param message_id: :param references: :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) :param dict headers: optional map of headers to set on the outgoing mail (may override the other headers, including Subject, Reply-To, Message-Id, etc.) :rtype: email.message.EmailMessage :return: the new RFC2822 email message
  • connect(self, host=None, port=None, user=None, password=None, encryption=None, smtp_from=None, ssl_certificate=None, ssl_private_key=None, smtp_debug=False, mail_server_id=None, allow_archived=False)
    Returns a new SMTP connection to the given SMTP server. When running in test mode, this method does nothing and returns `None`. :param host: host or IP of SMTP server to connect to, if mail_server_id not passed :param int port: SMTP port to connect to :param user: optional username to authenticate with :param password: optional password to authenticate with :param string encryption: optional, ``'ssl'`` | ``'starttls'`` :param smtp_from: FROM SMTP envelop, used to find the best mail server :param ssl_certificate: filename of the SSL certificate used for authentication Used when no mail server is given and overwrite the odoo-bin argument "smtp_ssl_certificate" :param ssl_private_key: filename of the SSL private key used for authentication Used when no mail server is given and overwrite the odoo-bin argument "smtp_ssl_private_key" :param bool smtp_debug: toggle debugging of SMTP sessions (all i/o will be output in logs) :param mail_server_id: ID of specific mail server to use (overrides other parameters) :param bool allow_archived: by default (False), an exception is raised when calling this method on an archived record (using mail_server_id param). It can be set to True for testing so that the exception is no longer raised.
  • 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' or 'ssl' (see ir.mail_server fields for explanation) :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)
  • write(self, vals)
    Ensure we cannot archive a server in-use

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

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

New fields (8)
  • create_date Datetime
  • definition Char
    help='PostgreSQL constraint definition'
  • message Char
    help='Error message returned when the constraint is violated.' translate=True
  • 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 constraint or foreign key name.' index=True required=True string='Constraint'
  • type Char
    help='Type of the constraint: `f` for a foreign key, `u` for other constraints.' index=True required=True size=1 string='Constraint Type'
  • write_date Datetime
Public methods (2)
  • copy(self, default=None)
  • unlink(self)

New fields (7)
  • complete_name Char
    compute='_compute_complete_name' string='Complete ID'
  • model Char
    required=True string='Model Name'
  • module Char
    default='' required=True
  • name Char
    help='External Key/Identifier that can be used for data integration with third-party systems' required=True string='External Identifier'
  • noupdate Boolean
    default=False string='Non Updatable'
  • reference Char
    compute='_compute_reference' readonly=True store=False string='Reference'
  • res_id Many2oneReference
    help='ID of the target record in the database' model_field='model' string='Record ID'
Public methods (5)
  • 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(self, default=None)
    @api.returns('self', <expr>)
  • name_get(self)
  • 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.

New fields (33)
  • 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'
  • complete_name Char
    index=True
  • 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'
  • depends Char
    help='Dependencies of compute method; a list of comma-separated field names, like\n\n name, partner_id.name' string='Dependencies'
  • domain Char
    default='[]' help="The optional domain to restrict possible values for relationship fields, specified as a Python expression defining a list of triplets. For example: [('color','=','red')]"
  • field_description Char
    default='' required=True string='Field Label' translate=True
  • group_expand Boolean
    help="If checked, all the records of the target model will be included\nin a grouped result (e.g. 'Group By' filters, Kanban columns, etc.).\nNote that it can significantly reduce performance if the target model\nof the field contains a lot of records; usually used on models with\nfew records (e.g. Stages, Job Positions, Event Types, etc.)." string='Expand Groups'
  • groups Many2many → res.groups
    args: 'res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id'
  • help Text
    string='Field Help' translate=True
  • index Boolean
    string='Indexed'
  • model Char
    help='The technical name of the model this field belongs to' index=True required=True string='Model Name'
  • model_id Many2one → ir.model
    help='The model this field belongs to' index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • modules Char
    compute='_in_modules' help='List of modules in which the field is defined' string='In Apps'
  • name Char
    default='x_' index=True required=True string='Field Name'
  • on_delete Selection
    default='set null' help='On delete property for many2one fields' string='On Delete' args: [('cascade', 'Cascade'), ('set null', 'Set NULL'), ('restrict', 'Restrict')]
  • readonly Boolean
  • related Char
    help='The corresponding related field, if any. This must be a dot-separated list of field names.' string='Related Field'
  • related_field_id Many2one → ir.model.fields
    compute='_compute_related_field_id' ondelete='cascade' store=True string='Related field' args: 'ir.model.fields'
  • relation Char
    help='For relationship fields, the technical name of the target model' string='Related Model'
  • relation_field Char
    help='For one2many fields, the field on the target model that implement the opposite many2one relationship'
  • relation_field_id Many2one → ir.model.fields
    compute='_compute_relation_field_id' ondelete='cascade' store=True string='Relation field' args: 'ir.model.fields'
  • relation_table Char
    help='Used for custom many2many fields to define a custom relation table name'
  • required Boolean
  • 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'
  • translate Boolean
    help='Whether values for this field can be translated (enables the translation mechanism for that field)' string='Translatable'
  • ttype Selection
    required=True selection=FIELD_TYPES string='Field Type'
Public methods (7)
  • create(self, vals_list)
    @api.model_create_multi
  • get_field_help(self, model_name)
    @api.model@tools.ormcache_context('model_name', keys=('lang'))
    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@tools.ormcache_context('model_name', 'field_name', keys=('lang'))
    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@tools.ormcache_context('model_name', keys=('lang'))
    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}`
  • name_get(self)
  • 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 (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 (0)

No new fields.

Public methods (2)
  • unlink(self)
  • write(self, values)

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'
  • module_nr Integer
    compute='_compute_module_nr' string='Number of Apps'
  • name Char
    index=True required=True string='Name' translate=True
  • parent_id Many2one → ir.module.category
    index=True string='Parent Application' args: 'ir.module.category'
  • 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 (29)
  • 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'
  • demo Boolean
    default=False readonly=True args: 'Demo Data'
  • dependencies_id One2many → ir.module.module.dependency
    readonly=True string='Dependencies' args: 'ir.module.module.dependency', 'module_id'
  • description Text
    readonly=True translate=True args: 'Description'
  • description_html Html
    compute='_get_desc' args: 'Description HTML'
  • exclusion_ids One2many → ir.module.module.exclusion
    readonly=True string='Exclusions' args: 'ir.module.module.exclusion', 'module_id'
  • has_iap Boolean
    compute='_compute_has_iap'
  • icon Char
    args: 'Icon URL'
  • icon_image Binary
    compute='_get_icon_image' string='Icon'
  • installed_version Char
    compute='_get_latest_version' args: 'Latest Version'
  • latest_version Char
    readonly=True args: 'Installed Version'
  • license Selection
    default='LGPL-3' readonly=True string='License' args: [('GPL-2', 'GPL Version 2'), ('GPL-2 or any later version', 'GPL-2 or later version'), ('GPL-3', 'GPL Version 3'), ('GPL-3 or any later version', 'GPL-3 or later version'), ('AGPL-3', 'Affero GPL-3'), ('LGPL-3', 'LGPL Version 3'), ('Other OSI approved licence', 'Other OSI Approved License'), ('OEEL-1', 'Odoo Enterprise Edition License v1.0'), ('OPL-1', 'Odoo Proprietary License v1.0'), ('Other proprietary', 'Other Proprietary')]
  • maintainer Char
    readonly=True args: 'Maintainer'
  • menus_by_module Text
    compute='_get_views' store=True string='Menus'
  • name Char
    readonly=True required=True args: 'Technical Name'
  • published_version Char
    readonly=True args: 'Published Version'
  • reports_by_module Text
    compute='_get_views' store=True string='Reports'
  • sequence Integer
    default=100 args: 'Sequence'
  • shortdesc Char
    readonly=True translate=True args: 'Module Name'
  • state Selection
    default='uninstallable' index=True readonly=True string='Status' args: STATES
  • summary Char
    readonly=True translate=True args: 'Summary'
  • to_buy Boolean
    default=False args: 'Odoo Enterprise Module'
  • url Char
    readonly=True args: 'URL'
  • views_by_module Text
    compute='_get_views' store=True string='Views'
  • website Char
    readonly=True args: 'Website'
Public methods (25)
  • 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_install_cancel(self)
    @assert_log_admin_access
  • button_uninstall(self)
    @assert_log_admin_access
  • button_uninstall_cancel(self)
  • button_uninstall_wizard(self)
    @assert_log_admin_access
    Launch the wizard to uninstall the given module.
  • button_upgrade(self)
    @assert_log_admin_access
  • button_upgrade_cancel(self)
    @assert_log_admin_access
  • check_external_dependencies(cls, module_name, newstate='to install')
    @classmethod
  • create(self, vals_list)
    @api.model_create_multi
  • download(self, download=True)
    @assert_log_admin_access
  • downstream_dependencies(self, known_deps=None, exclude_states=('uninstalled', 'uninstallable', 'to remove'))
    @api.returns('self')
    Return the modules that directly or indirectly depend on the modules in `self`, and that satisfy the `exclude_states` filter.
  • get_apps_server(self)
    @api.model
  • get_module_info(cls, name)
    @classmethod
  • get_values_from_terp(terp)
    @staticmethod
  • get_views(self, views, options=None)
    @api.model
  • install_from_urls(self, urls)
    @assert_log_admin_access@api.model
  • module_uninstall(self)
    @assert_log_admin_access
    Perform the various steps required to uninstall a module completely including the deletion of all database structures created by the module: tables, columns, constraints, etc.
  • next(self)
    Return the action linked to an ir.actions.todo is there exists one that should be executed. Otherwise, redirect to /web
  • search_panel_select_range(self, field_name, **kwargs)
    @api.model
  • unlink(self)
  • update_list(self)
    @assert_log_admin_access@api.model
  • upstream_dependencies(self, known_deps=None, exclude_states=('installed', 'uninstallable', 'to remove'))
    @api.returns('self')
    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 (0)

No public methods.

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 (13)
  • create_date Datetime
    args: 'Creation Date'
  • duration Float
    args: 'Duration'
  • entry_count Integer
    args: 'Entry count'
  • init_stack_trace Text
    prefetch=False args: 'Initial stack trace'
  • name Char
    args: 'Description'
  • qweb Text
    prefetch=False args: 'Qweb'
  • session Char
    index=True args: 'Session'
  • speedscope Binary
    compute='_compute_speedscope' args: 'Speedscope'
  • speedscope_url Text
    compute='_compute_speedscope_url' args: 'Open'
  • sql Text
    prefetch=False args: 'Sql'
  • sql_count Integer
    args: 'Queries Count'
  • traces_async Text
    prefetch=False args: 'Traces Async'
  • traces_sync Text
    prefetch=False args: 'Traces Sync'
Public methods (1)
  • 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 (11)
  • company_id Many2one → res.company
    index=True string='Company' args: 'res.company'
  • fields_id Many2one → ir.model.fields
    ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • name Char
    index=True
  • res_id Char
    help='If not set, acts as a default value for new resources' index=True string='Resource'
  • type Selection
    default='many2one' index=True required=True args: [('char', 'Char'), ('float', 'Float'), ('boolean', 'Boolean'), ('integer', 'Integer'), ('text', 'Text'), ('binary', 'Binary'), ('many2one', 'Many2One'), ('date', 'Date'), ('datetime', 'DateTime'), ('selection', 'Selection')]
  • value_binary Binary
    attachment=False
  • value_datetime Datetime
  • value_float Float
  • value_integer Integer
  • value_reference Char
  • value_text Text
Public methods (6)
  • create(self, vals_list)
    @api.model_create_multi
  • get_by_record(self)
  • init(self)
  • search_multi(self, name, model, operator, value)
    @api.model
    Return a domain for the records that match the given condition.
  • unlink(self)
  • write(self, values)

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. Returns a dict of dict with: * key equal to the option key. * dict: type, params, name, description, default_value * type: 'string' 'integer' 'float' 'model' (e.g. 'res.partner') 'array' 'selection' (e.g. [key1, key2...])
  • 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)
  • record_to_html(self, record, field_name, options)
    @api.model

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

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

New fields (13)
  • active Boolean
    default=True
  • code Char
    string='Sequence Code'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • date_range_ids One2many → ir.sequence.date_range
    string='Subsequences' args: 'ir.sequence.date_range', 'sequence_id'
  • implementation Selection
    default='standard' help="While assigning a sequence number to a record, the 'no gap' sequence implementation ensures that each previous sequence number has been assigned already. While this sequence implementation will not skip any sequence number upon assignment, there can still be gaps in the sequence if records are deleted. The 'no gap' implementation is slower than the standard one." required=True string='Implementation' args: [('standard', 'Standard'), ('no_gap', 'No gap')]
  • name Char
    required=True
  • number_increment Integer
    default=1 help='The next number of the sequence will be incremented by this number' required=True string='Step'
  • number_next Integer
    default=1 help='Next number of this sequence' required=True string='Next Number'
  • number_next_actual Integer
    compute='_get_number_next_actual' help='Next number that will be used. This number can be incremented frequently so the displayed value might already be obsolete' inverse='_set_number_next_actual' string='Actual Next Number'
  • padding Integer
    default=0 help="Odoo will automatically adds some '0' on the left of the 'Next Number' to get the required padding size." required=True string='Sequence Size'
  • prefix Char
    help='Prefix value of the record for the sequence' trim=False
  • suffix Char
    help='Suffix value of the record for the sequence' trim=False
  • use_date_range Boolean
    string='Use subsequences per date_range'
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get(self, code)
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by its code. This method is deprecated.
  • get_id(self, sequence_code_or_id, code_or_id='id')
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by the ``sequence_code_or_id`` argument, which can be a code or an id (as controlled by the ``code_or_id`` argument. This method is deprecated.
  • 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, values)

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, values)

New fields (5)
  • col1 Many2one → ir.model.fields
    ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • evaluation_type Selection
    change_default=True default='value' required=True args: [('value', 'Value'), ('reference', 'Reference'), ('equation', 'Python expression')], 'Evaluation Type'
  • resource_ref Reference
    compute='_compute_resource_ref' inverse='_set_resource_ref' selection='_selection_target_model' string='Record'
  • server_id Many2one → ir.actions.server
    ondelete='cascade' string='Related Server Action' args: 'ir.actions.server'
  • value Text
    help='Expression containing a value specification. \nWhen Formula type is selected, this field may be a Python expression that can use the same values as for the code field on the server action.\nIf Value type is selected, the value will be used directly without evaluation.' required=True
Public methods (1)
  • eval_value(self, eval_context=None)

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'
  • groups_id 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 unaccent=False
  • sequence Integer
    default=10
  • web_icon Char
    string='Web Icon File'
  • web_icon_data Binary
    attachment=True string='Web Icon Image'
Public methods (9)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_user_roots(self)
    @api.model@api.returns('self')
    Return all root menu ids visible for the user. :return: the root menu ids :rtype: list(int)
  • load_menus(self, debug)
    @api.model@tools.ormcache_context('self._uid', 'debug', keys=('lang'))
    Loads all menu items (all applications and their sub-menus). :return: the menu root :rtype: dict('children': menu_nodes)
  • load_menus_root(self)
    @api.model@tools.ormcache_context('self._uid', keys=('lang'))
  • name_get(self)
  • read_image(self, path)
  • unlink(self)
  • write(self, values)

New fields (19)
  • 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'
  • field_parent Char
    string='Child Field'
  • groups_id 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'
  • 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'
  • name Char
    required=True string='View Name'
  • priority Integer
    default=16 required=True string='Sequence'
  • type Selection
    string='View Type' args: [('tree', 'Tree'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('gantt', 'Gantt'), ('kanban', 'Kanban'), ('search', 'Search'), ('qweb', 'QWeb')]
  • xml_id Char
    compute='_compute_xml_id' help='ID of the view defined in xml file' string='External ID'
Public methods (16)
  • apply_inheritance_specs(self, source, specs_tree, pre_locate=<expr>)
    @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
  • clear_cache(self)
    Deprecated, use `clear_caches` instead.
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • 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.
  • read_combined(self, fields=None)
    Utility function to get a view combined with its inherited views. * Gets the top of the view tree if a sub-view is requested * Applies all inherited archs on the root view * Returns the view with all requested fields .. note:: ``arch`` is always added to the fields list even if not requested (similar to ``id``)
  • render_public_asset(self, template, values=None)
    @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 (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 (17)
  • 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 (11)
  • active Boolean
    default=True
  • bic Char
    help='Sometimes called BIC or Swift.' index=True args: 'Bank Identifier Code'
  • city Char
  • country Many2one → res.country
    args: 'res.country'
  • email Char
  • name Char
    required=True
  • phone Char
  • state Many2one → res.country.state
    domain="[('country_id', '=?', country)]" args: 'res.country.state', 'Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (1)
  • name_get(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (36)
  • active Boolean
    default=True
  • bank_ids One2many
    readonly=False related='partner_id.bank_ids'
  • base_onboarding_company_state Selection
    default='not_done' string='State of the onboarding company step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • child_ids One2many → res.company
    string='Child Companies' args: 'res.company', 'parent_id'
  • city Char
    compute='_compute_address' inverse='_inverse_city'
  • company_details Html
    help='Header text displayed at the top of all reports.' string='Company Details'
  • company_registry Char
    readonly=False related='partner_id.company_registry' string='Company ID'
  • country_id Many2one → res.country
    compute='_compute_address' inverse='_inverse_country' string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • email Char
    readonly=False related='partner_id.email' store=True
  • external_report_layout_id Many2one → ir.ui.view
    args: 'ir.ui.view', 'Document Template'
  • favicon Binary
    default=_get_default_favicon help='This field holds the image used to display a favicon for a given company.' string='Company Favicon'
  • font Selection
    default='Lato' args: [('Lato', 'Lato'), ('Roboto', 'Roboto'), ('Open_Sans', 'Open Sans'), ('Montserrat', 'Montserrat'), ('Oswald', 'Oswald'), ('Raleway', 'Raleway'), ('Tajawal', 'Tajawal')]
  • is_company_details_empty Boolean
    compute='_compute_empty_company_details'
  • layout_background Selection
    default='Blank' required=True args: [('Blank', 'Blank'), ('Geometric', 'Geometric'), ('Custom', 'Custom')]
  • layout_background_image Binary
    args: 'Background Image'
  • logo Binary
    default=_get_logo readonly=False related='partner_id.image_1920' string='Company Logo'
  • logo_web Binary
    attachment=False compute='_compute_logo_web' store=True
  • mobile Char
    readonly=False related='partner_id.mobile' store=True
  • name Char
    readonly=False related='partner_id.name' required=True store=True string='Company Name'
  • paperformat_id Many2one → report.paperformat
    default=<expr> args: 'report.paperformat', 'Paper format'
  • parent_id Many2one → res.company
    index=True string='Parent Company' args: 'res.company'
  • partner_id Many2one → res.partner
    required=True string='Partner' args: 'res.partner'
  • phone Char
    readonly=False related='partner_id.phone' store=True
  • primary_color Char
  • report_footer Html
    help='Footer text displayed at the bottom of all reports.' string='Report Footer' translate=True
  • report_header Html
    help='Appears by default on the top right corner of your printed documents (report header).' string='Company Tagline'
  • secondary_color Char
  • sequence Integer
    default=10 help='Used to order Companies in the company switcher'
  • state_id Many2one → res.country.state
    compute='_compute_address' domain="[('country_id', '=?', country_id)]" inverse='_inverse_state' string='Fed. State' args: 'res.country.state'
  • street Char
    compute='_compute_address' inverse='_inverse_street'
  • street2 Char
    compute='_compute_address' inverse='_inverse_street2'
  • user_ids Many2many → res.users
    string='Accepted Users' args: 'res.users', 'res_company_users_rel', 'cid', 'user_id'
  • vat Char
    readonly=False related='partner_id.vat' string='Tax ID'
  • website Char
    readonly=False related='partner_id.website'
  • zip Char
    compute='_compute_address' inverse='_inverse_zip'
Public methods (10)
  • action_open_base_onboarding_company(self)
    @api.model
    Onboarding step for company basic information.
  • action_save_onboarding_company_step(self)
  • cache_restart(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • init(self)
  • open_company_edit_report(self)
  • set_onboarding_step_done(self, step_name)
  • write(self, values)
  • write_company_and_print_report(self)

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 (5)
  • already_installed(self)
    For each module, check if it's already installed and if it is return its name :returns: a list of the already installed modules in this installer :rtype: [str]
  • default_get(self, fields_list)
    @api.model
    If an addon is already installed, check it by default
  • execute(self)
  • fields_get(self, allfields=None, attributes=None)
    @api.model
    If an addon is already installed, set it to readonly as res.config.installer doesn't handle uninstallations of already installed addons
  • modules_to_install(self)
    selects all modules to install: * checked boolean fields * return values of hook methods. Hook methods are of the form ``_if_%(addon_name)s``, and are called if the corresponding addon is marked for installation. They take the arguments cr, uid, ids and context, and return an iterable of addon names * additionals, additionals are setup through the ``_install_if`` class variable. ``_install_if`` is a dict of {iterable:iterable} where key and value are iterables of addon names. If all the addons in the key are selected for installation (warning: addons added through hooks don't count), then the addons in the value are added to the set of modules to install * not already installed

New fields (0)

No new fields.

Public methods (13)
  • 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: --------------- from odoo.addons.base.models.res_config import get_warning_config raise get_warning_config(cr, _("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."), context=context) 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 string: human readable name of the field (e.g.: "Create leads from incoming mails")
  • 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 tuple: - 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)
    Return values for the fields other that `default`, `group` and `module`
  • name_get(self)
    Override name_get method to return an appropriate configuration wizard name, and not the generated name.
  • onchange_module(self, field_value, module_name)
  • set_values(self)
    Set values for the fields other that `default`, `group` and `module`

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

New fields (2)
  • 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 (0)

No public methods.

New fields (3)
  • code Char
    help='The state code.' required=True string='State Code'
  • country_id Many2one → res.country
    required=True string='Country' args: 'res.country'
  • name Char
    help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton' required=True string='State Name'
Public methods (1)
  • name_get(self)

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

New fields (11)
  • category_id Many2one → ir.module.category
    index=True string='Application' args: 'ir.module.category'
  • color Integer
    string='Color Index'
  • comment Text
    translate=True
  • full_name Char
    compute='_compute_full_name' search='_search_full_name' string='Group Name'
  • menu_access Many2many → ir.ui.menu
    string='Access Menu' args: 'ir.ui.menu', 'ir_ui_menu_group_rel', 'gid', 'menu_id'
  • model_access One2many → ir.model.access
    copy=True string='Access Controls' args: 'ir.model.access', 'group_id'
  • name Char
    required=True translate=True
  • rule_groups Many2many → ir.rule
    domain="[('global', '=', False)]" string='Rules' args: 'ir.rule', 'rule_group_rel', 'group_id', 'rule_group_id'
  • share Boolean
    help='Group created to set access rights for sharing data with some users.' string='Share Group'
  • users Many2many → res.users
    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'
Public methods (2)
  • copy(self, default=None)
  • write(self, vals)

New fields (2)
  • implied_ids Many2many → res.groups
    help='Users of this group automatically inherit those groups' string='Inherits' args: 'res.groups', 'res_groups_implied_rel', 'gid', 'hid'
  • trans_implied_ids Many2many → res.groups
    compute='_compute_trans_implied' recursive=True string='Transitively inherits' args: 'res.groups'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)

New fields (0)

No new fields.

Public methods (5)
  • create(self, vals_list)
    @api.model_create_multi
  • get_application_groups(self, domain)
    Return the non-share groups that satisfy ``domain``.
  • get_groups_by_application(self)
    @api.model
    Return all groups classified by application (module category), as a list:: [(app, kind, groups), ...], where ``app`` and ``groups`` are recordsets, and ``kind`` is either ``'boolean'`` or ``'selection'``. Applications are given in sequence order. If ``kind`` is ``'selection'``, ``groups`` are given in reverse implication order.
  • unlink(self)
  • write(self, values)

New fields (14)
  • active Boolean
  • code Char
    help='This field is used to set/get locales for user' required=True string='Locale Code'
  • date_format Char
    default=DEFAULT_DATE_FORMAT required=True string='Date Format'
  • decimal_point Char
    default='.' required=True string='Decimal Separator' trim=False
  • direction Selection
    default='ltr' required=True args: [('ltr', 'Left-to-Right'), ('rtl', 'Right-to-Left')]
  • flag_image Image
    args: 'Image'
  • flag_image_url Char
    compute=_compute_field_flag_image_url
  • grouping Char
    default='[]' help="The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case." required=True string='Separator Format'
  • iso_code Char
    help='This ISO code is the name of po files to use for translations' string='ISO code'
  • name Char
    required=True
  • thousands_sep Char
    default=',' string='Thousands Separator' trim=False
  • time_format Char
    default=DEFAULT_TIME_FORMAT required=True string='Time Format'
  • url_code Char
    help='The Lang Code displayed in the URL' required=True args: 'URL Code'
  • week_start Selection
    default='7' required=True string='First Day of Week' args: [('1', 'Monday'), ('2', 'Tuesday'), ('3', 'Wednesday'), ('4', 'Thursday'), ('5', 'Friday'), ('6', 'Saturday'), ('7', 'Sunday')]
Public methods (12)
  • action_activate_langs(self)
    Activate the selected languages
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • format(self, percent, value, grouping=False, monetary=False)
    Format() will return the language-specific output for float values
  • get_available(self)
    @api.model@tools.ormcache()
    Return the available languages as a list of (code, url_code, name, active) sorted by name.
  • get_installed(self)
    @api.model@tools.ormcache()
    Return the installed languages as a list of (code, name) sorted by name.
  • get_sorted(self)
  • install_lang(self)
    @api.model
    This method is called from odoo/addons/base/data/res_lang_data.xml to load some language and set it as the default for every partners. The language is set via tools.config by the '_initialize_db' method on the 'db' object. This is a fragile solution and something else should be found.
  • load_lang(self, lang, lang_name=None)
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (53)
  • active Boolean
    default=True
  • active_lang_count Integer
    compute='_compute_active_lang_count'
  • bank_ids One2many → res.partner.bank
    string='Banks' args: 'res.partner.bank', 'partner_id'
  • barcode Char
    company_dependent=True copy=False help='Use a barcode to identify this contact.'
  • category_id Many2many → res.partner.category
    column1='partner_id' column2='category_id' default=_default_category string='Tags' args: 'res.partner.category'
  • child_ids One2many → res.partner
    domain=[('active', '=', True)] string='Contact' args: 'res.partner', 'parent_id'
  • city Char
  • color Integer
    default=0 string='Color Index'
  • comment Html
    string='Notes'
  • commercial_company_name Char
    compute='_compute_commercial_company_name' store=True args: 'Company Name Entity'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner' index=True recursive=True store=True string='Commercial Entity' args: 'res.partner'
  • company_id Many2one → res.company
    index=True args: 'res.company', 'Company'
  • company_name Char
    args: 'Company Name'
  • company_registry Char
    compute='_compute_company_registry' help='The registry number of the company. Use it if it is different from the Tax ID. It must be unique across all partners of a same country' readonly=False store=True string='Company ID'
  • company_type Selection
    compute='_compute_company_type' inverse='_write_company_type' selection=[('person', 'Individual'), ('company', 'Company')] string='Company Type'
  • contact_address Char
    compute='_compute_contact_address' string='Complete Address'
  • country_code Char
    related='country_id.code' string='Country Code'
  • country_id Many2one → res.country
    ondelete='restrict' string='Country' args: 'res.country'
  • date Date
    index=True
  • display_name Char
    compute='_compute_display_name' index=True recursive=True store=True
  • 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'
  • industry_id Many2one → res.partner.industry
    args: 'res.partner.industry', 'Industry'
  • is_company Boolean
    default=False help='Check if the contact is a company, otherwise it is a person' string='Is a Company'
  • is_public Boolean
    compute='_compute_is_public'
  • lang Selection
    help='All the emails and documents sent to this contact will be translated in this language.' string='Language' args: _lang_get
  • mobile Char
    unaccent=False
  • name Char
    default_export_compatible=True index=True
  • parent_id Many2one → res.partner
    index=True string='Related Company' args: 'res.partner'
  • parent_name Char
    readonly=True related='parent_id.name' string='Parent name'
  • partner_latitude Float
    digits=(10, 7) string='Geo Latitude'
  • partner_longitude Float
    digits=(10, 7) string='Geo Longitude'
  • partner_share Boolean
    compute='_compute_partner_share' help='Either customer (not a user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data.' store=True args: 'Share Partner'
  • phone Char
    unaccent=False
  • ref Char
    index=True string='Reference'
  • same_company_registry_partner_id Many2one → res.partner
    compute='_compute_same_vat_partner_id' store=False string='Partner with same Company Registry' args: 'res.partner'
  • same_vat_partner_id Many2one → res.partner
    compute='_compute_same_vat_partner_id' store=False string='Partner with same Tax ID' args: 'res.partner'
  • self Many2one
    comodel_name=_name compute='_compute_get_ids'
  • state_id Many2one → res.country.state
    domain="[('country_id', '=?', country_id)]" ondelete='restrict' string='State' args: 'res.country.state'
  • street Char
  • street2 Char
  • title Many2one → res.partner.title
    args: 'res.partner.title'
  • translated_display_name Char
    compute='_compute_translated_display_name'
  • type Selection
    default='contact' help='- Contact: Use this to organize the contact details of employees of a given company (e.g. CEO, CFO, ...).\n- Invoice Address : Preferred address for all invoices. Selected by default when you invoice an order that belongs to this company.\n- Delivery Address : Preferred address for all deliveries. Selected by default when you deliver an order that belongs to this company.\n- Private: Private addresses are only visible by authorized users and contain sensitive data (employee home addresses, ...).\n- Other: Other address for the company (e.g. subsidiary, ...)' string='Address Type' args: [('contact', 'Contact'), ('invoice', 'Invoice Address'), ('delivery', 'Delivery Address'), ('private', 'Private Address'), ('other', 'Other Address')]
  • 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: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
  • user_id Many2one → res.users
    compute='_compute_user_id' help='The internal user in charge of this contact.' precompute=True readonly=False store=True string='Salesperson' args: 'res.users'
  • user_ids One2many → res.users
    auto_join=True string='Users' args: 'res.users', 'partner_id'
  • vat Char
    help="The Tax Identification Number. Values here will be validated based on the country format. You can use '/' to indicate that the partner is not subject to tax." index=True string='Tax ID'
  • website Char
    args: 'Website Link'
  • zip Char
    change_default=True
Public methods (18)
  • address_get(self, adr_pref=None)
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_company(self)
  • default_get(self, default_fields)
    @api.model
    Add the company of the parent as default if we are creating a child partner. Also take the parent lang by default if any, otherwise, fallback to default DB lang.
  • find_or_create(self, email, assert_valid_email=False)
    @api.model@api.returns('self', <expr>)
    Find a partner with the given ``email`` or use :py:method:`~.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 boolean assert_valid_email: raise if no valid email is found :return: newly created record
  • get_import_templates(self)
    @api.model
  • main_partner(self)
    @api.model@api.returns('self')
    Return the main partner
  • 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.
  • name_get(self)
  • onchange_company_type(self)
    @api.onchange('company_type')
  • onchange_email(self)
    @api.onchange('email')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • open_commercial_entity(self)
    Utility method used to add an "Open Company" button in partner views
  • open_parent(self)
    Utility method used to add an "Open Parent" button in partner views
  • update_address(self, vals)
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)

New fields (13)
  • acc_holder_name Char
    help='Account holder name, in case it is different than the name of the Account Holder' string='Account Holder Name'
  • acc_number Char
    required=True args: 'Account Number'
  • acc_type Selection
    compute='_compute_acc_type' help='Bank account type: Normal or IBAN. Inferred from the bank account number.' selection=<expr> string='Type'
  • active Boolean
    default=True
  • allow_out_payment Boolean
    copy=False default=False help='This account can be used for outgoing payments' readonly=False args: 'Send Money'
  • bank_bic Char
    readonly=False related='bank_id.bic'
  • bank_id Many2one → res.bank
    string='Bank' args: 'res.bank'
  • bank_name Char
    readonly=False related='bank_id.name'
  • company_id Many2one → res.company
    readonly=True related='partner_id.company_id' store=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • partner_id Many2one → res.partner
    domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' required=True args: 'res.partner', 'Account Holder'
  • sanitized_acc_number Char
    compute='_compute_sanitized_acc_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
    default=10
Public methods (3)
  • get_supported_account_types(self)
    @api.model
  • name_get(self)
  • retrieve_acc_type(self, acc_number)
    @api.model
    To be overridden by subclasses in order to support other account_types.

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the category without removing it.'
  • child_ids One2many → res.partner.category
    string='Child Tags' args: 'res.partner.category', 'parent_id'
  • color Integer
    default=_get_default_color string='Color'
  • name Char
    required=True string='Tag Name' translate=True
  • parent_id Many2one → res.partner.category
    index=True ondelete='cascade' string='Parent Category' args: 'res.partner.category'
  • parent_path Char
    index=True unaccent=False
  • partner_ids Many2many → res.partner
    column1='category_id' column2='partner_id' copy=False string='Partners' args: 'res.partner'
Public methods (1)
  • name_get(self)
    Return the categories' display name, including their direct parent by default. If ``context['partner_category_display']`` is ``'short'``, the short version of the category name (without the direct parent) is used. The default is the long version.

New fields (0)

No new fields.

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 (2)
  • name Char
    required=True string='Title' translate=True
  • shortcut Char
    string='Abbreviation' translate=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (21)
  • 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'
  • companies_count Integer
    compute='_compute_companies_count' string='Number of Companies'
  • company_id Many2one → res.company
    context={'user_preference': True} default=<expr> help='The default company for this user.' required=True string='Company' args: 'res.company'
  • company_ids Many2many → res.company
    default=<expr> string='Companies' args: 'res.company', 'res_company_users_rel', 'user_id', 'cid'
  • email Char
    inherited=True readonly=False related='partner_id.email'
  • groups_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of groups that apply to the current user' args: '# Groups'
  • groups_id Many2many → res.groups
    default=<expr> string='Groups' args: 'res.groups', 'res_groups_users_rel', 'uid', 'gid'
  • 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 authentication'
  • name Char
    inherited=True readonly=False related='partner_id.name'
  • new_password Char
    compute='_compute_password' help="Specify a value only when creating a user or if you're changing the user's password, otherwise leave empty. After a change of password, the user has to login again." inverse='_set_new_password' string='Set Password'
  • partner_id Many2one → res.partner
    auto_join=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' invisible=True
  • rules_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of record rules that apply to the current user' args: '# Record Rules'
  • share Boolean
    compute='_compute_share' compute_sudo=True help='External user with limited access, created only for the purpose of sharing data.' store=True string='Share User'
  • signature Html
    compute='_compute_signature' readonly=False store=True string='Email Signature'
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
Public methods (24)
  • SELF_READABLE_FIELDS(self)
    @property
    The list of fields a user can read on their own user record. In order to add fields, please override this property on model extensions.
  • SELF_WRITEABLE_FIELDS(self)
    @property
    The list of fields a user can write on their own user record. In order to add fields, please override this property on model extensions.
  • action_get(self)
    @api.model
  • action_show_accesses(self)
  • action_show_groups(self)
  • action_show_rules(self)
  • authenticate(cls, db, login, password, user_agent_env)
    @classmethod
    Verifies and returns the user ID corresponding to the given ``login`` and ``password`` combination, or False if there was no matching user. :param str db: the database on which user is trying to authenticate :param str login: username :param str password: user password :param dict user_agent_env: environment dictionary describing any relevant environment attributes
  • 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
  • check(cls, db, uid, passwd)
    @classmethod@tools.ormcache('uid', 'passwd')
    Verifies that the given (uid, password) is authorized for the database ``db`` and raise an exception if it is not.
  • check_super(self, passwd)
  • context_get(self)
    @api.model@tools.ormcache('self._uid')
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_company_currency_id(self)
    @api.model
  • has_group(self, group_ext_id)
    @api.model
  • init(self)
  • on_change_login(self)
    @api.onchange('login')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • preference_change_password(self)
    @check_identity
  • preference_save(self)
  • read(self, fields=None, load='_classic_read')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • toggle_active(self)
  • write(self, values)

New fields (0)

No new fields.

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

New fields (1)
  • user_group_warning Text
    compute='_compute_user_group_warning' string='User Group Warning'
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • new(self, values=None, origin=None, ref=None)
    @api.model
  • onchange(self, values, field_name, field_onchange)
  • read(self, fields=None, load='_classic_read')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • write(self, values)

New fields (1)
  • api_key_ids One2many → res.users.apikeys
    string='API Keys' args: 'res.users.apikeys', 'user_id'
Public methods (3)
  • SELF_READABLE_FIELDS(self)
    @property
  • SELF_WRITEABLE_FIELDS(self)
    @property
  • api_key_wizard(self)
    @check_identity

New fields (4)
  • create_date Datetime
    readonly=True args: 'Creation Date'
  • name Char
    readonly=True required=True args: 'Description'
  • scope Char
    readonly=True args: 'Scope'
  • user_id Many2one → res.users
    index=True ondelete='cascade' readonly=True required=True args: 'res.users'
Public methods (2)
  • init(self)
  • remove(self)
    @check_identity

New fields (1)
  • name Char
    required=True args: 'Description'
Public methods (2)
  • check_access_make_key(self)
  • make_key(self)
    @check_identity

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

No public methods.

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

No public methods.

New fields (2)
  • password Char
  • request Char
    groups=fields.NO_ACCESS readonly=True
Public methods (1)
  • run_check(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

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 (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)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Stéphane Bidoul, Martin Trigaux, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Fabien Meghazi, Xavier ALT, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Mohammed Shekha, Cedric Snauwaert, Nicolas Martinelli, Nicolas Lempereur, Thibault Francois, Stefan Rijnhart, Richard Mathot, qdp-odoo, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Barad Mahendra, Wolfgang Taferner, Yannick Tivisse, qsm-odoo, Dharmraj Jhala, Romain Derie, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Jairo Llopis, Lucas Perais, Adrian Torres, wan, Julien Castiaux, Aurélien Warnon, Xavier-Do, Thomas Dieuzeide, Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, Fanny He, William Henrotin, Sébastien Theys, Nasreddin (bon), oco-odoo, Florent de Labarre, Julien Mougenot, Anh Thao Pham (pta), Lois Rilo, Samuel Degueldre, Alvaro Fuentes, std-odoo, Achraf (abz), David Beguin, Adrien Widart, Ivan Yelizariev, Jérémy Hennecart, Nasreddin Boulif (bon), Touati Djamel (otd), Prakash Prajapati, Nicolas Galler, nie, Rémy Voet (ryv), Ivàn Todorovich, Thanh Dodeur, Gorash, Mathieu Duckerts-Antoine, jbw, Djamel (otd), Benjamin Frantzen (bfr), Aurélien (avd), abd-msyukyu-odoo, William Braeckman, nounoubensebia, Kevin Baptiste, Raf Geens, Mathias Markl, Luce Pasquini, Daniel Stenlöv, Stefan-Calin Crainiciuc (stcc), Arnaud Baes, Benoit Socias, Stanislas Sobieski, Hubert Van de Walle (huvw), Miquel Raïch, pedrambiria, Ahmad Khanalizadeh, Laurent Desausoi (lade), sofiagvaladze, Nicolas (vin), william-andre, Paolo (pgi), Florian Damhaut, Merlin (megu), MerlinGuillaume, yhu-odoo, ijas ahammed, Audric Onockx (auon), Florian Vranckx, Antoine Guenet, Nshimiyimana Séna, Louis Baudoux, BVE, Walid HANNICHE (waha), Yolann Sabaux, Abdelouahab (abla), John Laterre (jol), Thomas Beckers, Nicolas Bayet, Antoine Vandevenne (anv), Thibault Libioulle, Laurent Stukkens (LTU), gawa-odoo, Aurelien van Delft (avd), Michael Mattiello (mcm), Mathieu Walravens, Achraf, dht-odoo, Renaud Thiry, Julien Banken, Stanislas Gueniffey, niyasraphy, jbw-odoo, nda-odoo, bve-odoo, Habib (ayh), baa, Francois (fge), Thomas Lefebvre (thle), Gaetan Vanden Bergh (gavb), Louis Wicket (wil), David, Walid, Mylyna Hy, Laurent Desausoi, nda, althaf shaik, Victor Piryns (pivi), Tommy (tong), Julien (jula), Tom De Caluwé, Simon Genin (ges), Saurabh Mishra, Daniel Kosky (dako), Lefebvre Thomas (thle), Om Rabara, Munaf Khan, duongnguyen, Saurabh Choraria, Michael Tietz, Dylan Kiss (dyki), Jinane Maksoud, Sébastien Geelen (sge), Sanket Brahmbhatt, Bruno Boi, Krina Oza, flvr-odoo, Michael (mcm), Rahul Prajapati, Chong Wang (cwg), bram1000, Ahmed Khalaf, micheledic, Carmen Bianca BAKKER, Mohit Beniwal, jard@odoo.com, Renilkumar Kajavadra, Manuel Fombuena, Leonardo Pavan Rocha, sovi-odoo, Dawn Hwang, Zelong Lin, Walid (wasa), guva-odoo, Damien (abd), MAHAMADASIF ANSARI, lase@odoo.com, Benjamin Hanquin (beha), Guenael Labois, jorv-odoo, Thibault Delavalée, mizosoft, Nguyen Hong Quang, minhthuy145, AMZIL Ayoub, Seif (segn), Eteil Djoumatchoua(etdj) etdj@odoo.com, vava-odoo, Aktiv Software, Bruno Boi (boi), mega, Tanguy Quéguineur, Martin Trigaux (mat), smna-odoo, duongnguyen-viindoo, sami odoo, Raman Salihi, Jordan D.(Joda), Louis (wil), John Wilson, Mohammed Basioni (basm), asm
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

Views touched (183)
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.tree ir.actions.report tree 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.tree ir.actions.actions tree New
asset_view_form ir.asset form New
asset_view_search ir.asset search New
asset_view_tree ir.asset tree New
base_onboarding_company_form base.company.onboarding.form res.company form Inherits base.view_company_form
base_partner_merge_automatic_wizard_form base.partner.merge.automatic.wizard.form base.partner.merge.automatic.wizard form New
change_password_wizard_user_tree_view Change Password Users change.password.user tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
contact_name contact_name ir.ui.view qweb New
demo_failures_dialog Demo Failure Dialog ir.demo_failure.wizard form New
demo_force_install_form ir.demo.form ir.demo form New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search 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
identity_check_wizard res.users.identitycheck form New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access.view.tree ir.model.access tree New
ir_access_view_tree_edition ir.model.access.view.tree.edition ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree 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.tree ir.cron.trigger tree 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 tree 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 tree view ir.default tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_profile_view_form IR Profile Form ir.profile form New
ir_profile_view_list IR Profile List ir.profile tree New
ir_profile_view_search IR Profile Search ir.profile search New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Apps Kanban ir.module.module kanban New
onboarding_company_step onboarding_company_step ir.ui.view qweb New
onboarding_confetti onboarding_confetti ir.ui.view qweb New
onboarding_container onboarding_container ir.ui.view qweb New
onboarding_step onboarding_step 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 tree New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_bank_view_search res.bank.view.search res.bank search New
res_config_installer Inheritable view for installer objects res.config.installer form 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_lang_form res.lang.form res.lang form New
res_lang_search res.lang.search res.lang search New
res_lang_tree res.lang.tree res.lang tree 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 tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_partner_view_form_private res.partner.view.form.private res.partner 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 tree New
user_groups_view res.users.groups res.users form Inherits view_users_form
view_apikeys API Keys Listing res.users.apikeys tree New
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree 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_company_form res.company.form res.company form New
view_company_tree res.company.tree res.company tree 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.tree res.country.group tree 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.tree res.country.state tree New
view_country_tree res.country.tree res.country tree 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.tree res.currency.rate tree New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_decimal_precision_form Decimal Precision decimal.precision form New
view_decimal_precision_tree Decimal Precision List decimal.precision tree New
view_groups_form res.groups.form res.groups form 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 tree 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 tree 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 tree 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 tree New
view_model_fields_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree 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.tree res.partner.bank tree New
view_partner_category_form Contact Tags res.partner.category form New
view_partner_category_list Contact Tags res.partner.category tree 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_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_company_kanban res.company.kanban res.company kanban New
view_res_partner_filter res.partner.select res.partner search New
view_res_users_kanban res.users.kanban res.users kanban New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree New
view_translation_dialog_tree ir.translation tree New
view_translation_form ir.translation form New
view_translation_lang_src_value_tree ir.translation tree New
view_translation_lang_value_tree ir.translation tree New
view_translation_search ir.translation search New
view_translation_tree ir.translation tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
wizard_lang_export Export Translations base.language.export form New
wizard_update_translations Generate Missing Terms base.update.translations form New
HTTP endpoints (3)
Route(s)HandlerAuthTypeMethodsFlags
/jsonrpc RPC.jsonrpc none json ALL
/xmlrpc/<service> RPC.xmlrpc_1 none http POST csrf off
/xmlrpc/2/<service> RPC.xmlrpc_2 none http POST csrf off
Models touched (122)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • avatar_1024 Image
    compute='_compute_avatar_1024' max_height=1024 max_width=1024 args: 'Avatar 1024'
  • avatar_128 Image
    compute='_compute_avatar_128' max_height=128 max_width=128 args: 'Avatar 128'
  • avatar_1920 Image
    compute='_compute_avatar_1920' max_height=1920 max_width=1920 args: 'Avatar'
  • avatar_256 Image
    compute='_compute_avatar_256' max_height=256 max_width=256 args: 'Avatar 256'
  • avatar_512 Image
    compute='_compute_avatar_512' max_height=512 max_width=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 (1)
  • create(self, vals_list)
    @api.model_create_multi@api.returns('self', <expr>)

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 (6)
  • data Binary
    attachment=False readonly=True args: 'File'
  • 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
  • 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 size=6 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)
  • lang Selection
    default=_default_language required=True string='Language' args: _get_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'
  • state Selection
    default='init' readonly=True string='Status' args: [('init', 'init'), ('done', 'done')]
Public methods (3)
  • lang_install(self)
  • reload(self)
  • switch_lang(self)

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

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

New fields (1)
  • module_info Text
    default=_default_module_info readonly=True args: 'Apps to Update'
Public methods (5)
  • config(self)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_module_list(self)
    @api.model@api.returns('ir.module.module')
  • 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 (1)
  • lang Selection
    required=True args: _get_languages, 'Language'
Public methods (1)
  • act_update(self)

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

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • image_1024 Image
    max_height=1024 max_width=1024 related='image_1920' store=True args: 'Image 1024'
  • image_128 Image
    max_height=128 max_width=128 related='image_1920' store=True args: 'Image 128'
  • image_1920 Image
    max_height=1920 max_width=1920 args: 'Image'
  • image_256 Image
    max_height=256 max_width=256 related='image_1920' store=True args: 'Image 256'
  • image_512 Image
    max_height=512 max_width=512 related='image_1920' store=True args: 'Image 512'
Public methods (0)

No public methods.

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

No public methods.

New fields (17)
  • 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'
  • filter Boolean
  • groups_id 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'
  • name Char
    string='Action Name' translate=True
  • 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 Text
    compute='_compute_search_view'
  • 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'), ('inline', 'Inline Edit'), ('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='tree,form' help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)" required=True
  • views Binary
    compute='_compute_views' help='This function field computes the ordered list of views that should be enabled when displaying the result of an action, federating view mode, views and reference view. The result is returned as an ordered list of pairs (view_id,view_mode).'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • exists(self)
  • read(self, fields=None, load='_classic_read')
    call the method get_empty_list_help of the model and set the window action help message
  • unlink(self)

New fields (5)
  • act_window_id Many2one → ir.actions.act_window
    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 (7)
  • binding_model_id Many2one → ir.model
    help='Setting a value makes this action available in the sidebar for the given model.' ondelete='cascade' args: 'ir.model'
  • binding_type Selection
    default='action' required=True args: [('action', 'Action'), ('report', 'Report')]
  • binding_view_types Char
    default='list,form'
  • help Html
    help='Optional help text for the users with a description of the target view, such as its usage and purpose.' string='Action Description' translate=True
  • name Char
    required=True
  • type Char
    required=True string='Action Type'
  • xml_id Char
    compute='_compute_xml_id' string='External ID'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_bindings(self, model_name)
    @api.model
  • unlink(self)
    unlink ir.action.todo which are related to actions which will be deleted. NOTE: ondelete cascade will not work on ir.actions.actions so we will need to do it manually.
  • write(self, vals)

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

No public methods.

New fields (14)
  • attachment Char
    help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.' string='Save as Attachment Prefix'
  • attachment_use Boolean
    help='If enabled, then the second time the user prints with same attachment name, it returns the previous report.' string='Reload from Attachment'
  • binding_type Selection
    default='report'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_report_rel', 'uid', 'gid'
  • model Char
    required=True string='Model Name'
  • model_id Many2one → ir.model
    compute='_compute_model_id' search='_search_model_id' string='Model' args: 'ir.model'
  • multi Boolean
    help='If set to true, the action will not be displayed on the right toolbar of a form view.' string='On Multiple Doc.'
  • name Char
    translate=True
  • paperformat_id Many2one → report.paperformat
    args: 'report.paperformat', 'Paper Format'
  • print_report_name Char
    help="This is the filename of the report going to download. Keep empty to not change the report filename. You can use a python expression with the 'object' and 'time' variables." translate=True args: 'Printed Report Name'
  • report_file Char
    help='The path to the main report file (depending on Report Type) or empty if the content is in another field' readonly=False required=False store=True string='Report File'
  • report_name Char
    required=True string='Template Name'
  • report_type Selection
    default='qweb-pdf' help='The type of the report that will be rendered, each one having its own rendering method. HTML means the report will be opened directly in your browser PDF means the report will be rendered using Wkhtmltopdf and downloaded by the user.' required=True args: [('qweb-html', 'HTML'), ('qweb-pdf', 'PDF'), ('qweb-text', 'Text')]
  • type Char
    default='ir.actions.report'
Public methods (11)
  • associated_view(self)
    Used in the ir.actions.report form view in order to search naively after the view(s) used in the rendering.
  • barcode(self, barcode_type, value, **kwargs)
    @api.model
  • check_barcode_encoding(self, barcode, encoding)
    @api.model
    Checks if the given barcode is correctly encoded. :return: True if the barcode string is encoded with the provided encoding. :rtype: bool
  • 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_barcode_check_digit(self, numeric_barcode)
    @api.model
    Computes and returns the barcode check digit. The used algorithm follows the GTIN specifications and can be used by all compatible barcode nomenclature, like as EAN-8, EAN-12 (UPC-A) or EAN-13. https://www.gs1.org/sites/default/files/docs/barcodes/GS1_General_Specifications.pdf https://www.gs1.org/services/how-calculate-check-digit-manually :param numeric_barcode: the barcode to verify/recompute the check digit :type numeric_barcode: str :return: the number corresponding to the right check digit :rtype: int
  • get_paperformat(self)
  • get_wkhtmltopdf_state(self)
    @api.model
    Get the current state of wkhtmltopdf: install, ok, upgrade, workers or broken. * install: Starting state. * upgrade: The binary is an older version (< 0.12.0). * ok: A binary was found with a recent version (>= 0.12.0). * workers: Not enough workers found to perform the pdf rendering process (< 2 workers). * broken: A binary was found but not responding. :return: wkhtmltopdf_state
  • report_action(self, docids, data=None, config=True)
    Return an action of type ir.actions.report. :param docids: id/ids/browse record of the records to print (if not used, pass an empty list) :param data: :param bool config: :rtype: bytes
  • retrieve_attachment(self, record)
    Retrieve an attachment for a specific record. :param record: The record owning of the attachment. :param attachment_name: The optional name of the attachment. :return: A recordset of length <=1 or None
  • unlink_action(self)
    Remove the contextual actions created for the reports.

New fields (14)
  • child_ids Many2many → ir.actions.server
    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', 'rel_server_actions', 'server_id', 'action_id'
  • code Text
    default=DEFAULT_PYTHON_CODE 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
    help='Model for record creation / update. Set this field only to specify a different model than the base model.' string='Target Model' args: 'ir.model'
  • crud_model_name Char
    readonly=True related='crud_model_id.model' string='Target Model Name'
  • fields_lines One2many → ir.server.object.lines
    copy=True string='Value Mapping' args: 'ir.server.object.lines', 'server_id'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'ir_act_server_group_rel', 'act_id', 'gid'
  • link_field_id Many2one → ir.model.fields
    help='Provide the 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
    readonly=True related='model_id.model' store=True string='Model Name'
  • name Char
    string='Action Name' translate=True
  • sequence Integer
    default=5 help='When dealing with multiple actions, the execution order is based on the sequence. Low number means high priority.'
  • state Selection
    copy=True default='object_write' help="Type of server action. The following values are available:\n- 'Execute Python Code': a block of python code that will be executed\n- 'Create': create a new record with new values\n- 'Update a Record': update the values of a record\n- 'Execute several actions': define an action that triggers several other server actions\n- 'Send Email': automatically send an email (Discuss)\n- 'Add Followers': add followers to a record (Discuss)\n- 'Create Next Activity': create an activity (Discuss)" required=True string='Action To Do' args: [('code', 'Execute Python Code'), ('object_create', 'Create a new Record'), ('object_write', 'Update the Record'), ('multi', 'Execute several actions')]
  • type Char
    default='ir.actions.server'
  • usage Selection
    default='ir_actions_server' required=True string='Usage' args: [('ir_actions_server', 'Server Action'), ('ir_cron', 'Scheduled Action')]
Public methods (3)
  • create_action(self)
    Create a contextual action for each server action.
  • 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 :param dict context: context should contain following keys - active_id: id of the current object (single mode) - active_model: current model that should equal the action's model The following keys are optional: - active_ids: 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.

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 (7)
  • 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
  • name_get(self)
  • unlink(self)
  • write(self, vals)

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

New fields (19)
  • access_token Char
    groups='base.group_user' args: 'Access Token'
  • checksum Char
    index=True readonly=True size=40 args: 'Checksum/SHA1'
  • company_id Many2one → res.company
    change_default=True default=<expr> string='Company' args: 'res.company'
  • datas Binary
    compute='_compute_datas' inverse='_inverse_datas' string='File Content (base64)'
  • db_datas Binary
    attachment=False args: 'Database Data'
  • description Text
    args: 'Description'
  • file_size Integer
    readonly=True args: 'File Size'
  • index_content Text
    prefetch=False readonly=True args: 'Indexed Content'
  • mimetype Char
    readonly=True args: 'Mime Type'
  • name Char
    required=True args: 'Name'
  • public Boolean
    args: 'Is public document'
  • raw Binary
    compute='_compute_raw' inverse='_inverse_raw' string='File Content (raw)'
  • res_field Char
    readonly=True args: 'Resource Field'
  • res_id Many2oneReference
    help='The record id this is attached to.' model_field='res_model' readonly=True args: 'Resource ID'
  • res_model Char
    help='The database object this attachment will be attached to.' readonly=True args: 'Resource Model'
  • res_name Char
    compute='_compute_res_name' args: 'Resource Name'
  • store_fname Char
    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=True size=1024 args: 'Url'
Public methods (12)
  • action_get(self)
    @api.model
  • check(self, mode, values=None)
    @api.model
    Restricts the access to an ir.attachment, according to referred mode
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • force_storage(self)
    @api.model
    Force all attachments to be stored in the currently configured storage
  • generate_access_token(self)
  • get_serve_attachment(self, url, extra_domain=None, extra_fields=None, order=None)
    @api.model
  • 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.
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Override read_group to add res_field=False in domain if not present.
  • regenerate_assets_bundles(self)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • power_on(self, *args, **kwargs)
    @api.model

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

New fields (11)
  • active Boolean
    default=True
  • cron_name Char
    readonly=False related='ir_actions_server_id.name' store=True args: 'Name'
  • doall Boolean
    help='Specify if missed occurrences should be executed when the server restarts.' string='Repeat Missed'
  • interval_number Integer
    default=1 help='Repeat every x.'
  • interval_type Selection
    default='months' string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • ir_actions_server_id Many2one → ir.actions.server
    delegate=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'
  • numbercall Integer
    default=1 help='How many times the method is called,\na negative number indicates no limit.' string='Number of Calls'
  • priority Integer
    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)
  • create(self, values)
    @api.model
  • default_get(self, fields_list)
    @api.model
  • method_direct_trigger(self)
  • toggle(self, model, domain)
    @api.model
  • try_write(self, values)
  • unlink(self)
  • write(self, vals)

New fields (2)
  • call_at Datetime
  • cron_id Many2one → ir.cron
    index=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 (8)
  • 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.
  • get(self, model_name, field_name, user_id=False, company_id=False, condition=False)
    @api.model
    Return the default value for the given field, user and company, or ``None`` if no default is available. :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'``.
  • get_model_defaults(self, model_name, condition=False)
    @api.model@tools.ormcache('self.env.uid', 'self.env.company.id', 'model_name', 'condition')
    Return the available default values for the given model (for the current user), as a dict mapping field names to 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 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 (3)
  • export_fields One2many → ir.exports.line
    copy=True string='Export ID' args: 'ir.exports.line', 'export_id'
  • name Char
    string='Export Name'
  • resource Char
    index=True
Public methods (0)

No public methods.

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

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • db_id_for(self, model, field, subfield, value)
    @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_get/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 context: OpenERP request context :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)
    @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.osv.orm.Model.write` expects. :param model: :class:`odoo.osv.orm.Model` for the conversion base :returns: a converter callable :rtype: (record: dict, logger: (field, error) -> None) -> dict
  • to_field(self, model, field, fromtype=str)
    @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 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 context: odoo request context :return: a function (fromtype -> field.write_type), if a converter is found :rtype: Callable | None

New fields (9)
  • 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
  • is_default Boolean
    string='Default Filter'
  • model_id Selection
    required=True selection='_list_all_models' string='Model'
  • name Char
    required=True string='Filter Name' translate=True
  • sort Text
    default='[]' required=True
  • user_id Many2one → res.users
    help='The user this filter is private to. When left empty the filter is public and available to all users.' ondelete='cascade' string='User' args: 'res.users'
Public methods (4)
  • copy(self, default=None)
  • create_or_replace(self, vals)
    @api.model@api.returns('self', <expr>)
  • get_filters(self, model, action_id=None)
    @api.model
    Obtain the list of filters available for the user on the given model. :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_id`` (m2o tuple), ``action_id`` (m2o tuple) and ``context`` of the matching ``ir.filters``.
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • binary_content(self, xmlid=None, model='ir.attachment', id=None, field='datas', unique=False, filename=None, filename_field='name', download=False, mimetype=None, default_mimetype='application/octet-stream', access_token=None)
    Get file, attachment or downloadable content If the ``xmlid`` and ``id`` parameter is omitted, fetches the default value for the binary field (via ``default_get``), otherwise fetches the field for that precise record. :param str xmlid: xmlid of the record :param str model: name of the model to fetch the binary from :param int id: id of the record from which to fetch the binary :param str field: binary field :param bool unique: add a max-age for the cache control :param str filename: choose a filename :param str filename_field: if not create an filename with model-id-field :param bool download: apply headers to download the file :param str mimetype: mintype of the field (for headers) :param str default_mimetype: default mintype if no mintype found :param str access_token: optional token for unauthenticated access only available for ir.attachment :returns: (status, headers, content)
  • routing_map(cls, key=None)
    @classmethod

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 (13)
  • active Boolean
    default=True
  • from_filter Char
    help='Define for which email address or domain this server can be used.\ne.g.: "notification@odoo.com" or "odoo.com"' args: 'From Filter'
  • name Char
    index=True required=True string='Description'
  • 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')]
  • 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)' required=True string='Connection Security' args: [('none', 'None'), ('starttls', 'TLS (STARTTLS)'), ('ssl', 'SSL/TLS')]
  • smtp_host Char
    help='Hostname or IP of SMTP server' required=True 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.' required=True string='SMTP Port'
  • smtp_ssl_certificate Binary
    attachment=False groups='base.group_system' help='SSL certificate used for authentication' args: 'SSL Certificate'
  • smtp_ssl_private_key Binary
    attachment=False groups='base.group_system' help='SSL private key used for authentication' args: 'SSL Private Key'
  • smtp_user Char
    groups='base.group_system' help='Optional username for SMTP authentication' string='Username'
Public methods (4)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
    Constructs an RFC2822 email.message.Message object based on the keyword arguments passed, and returns it. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) :param string body: email body, of the type ``subtype`` (by default, plaintext). If html subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative, unless an explicit ``body_alternative`` version is passed. :param string body_alternative: optional alternative body, of the type specified in ``subtype_alternative`` :param string reply_to: optional value of Reply-To header :param string object_id: optional tracking identifier, to be included in the message-id for recognizing replies. Suggested format for object-id is "res_id-model", e.g. "12345-crm.lead". :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), must match the format of the ``body`` parameter. Default is 'plain', making the content part of the mail "text/plain". :param string subtype_alternative: optional mime subtype of ``body_alternative`` (usually 'plain' or 'html'). Default is 'plain'. :param list attachments: list of (filename, filecontents) pairs, where filecontents is a string containing the bytes of the attachment :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) :param dict headers: optional map of headers to set on the outgoing mail (may override the other headers, including Subject, Reply-To, Message-Id, etc.) :rtype: email.message.EmailMessage :return: the new RFC2822 email message
  • connect(self, host=None, port=None, user=None, password=None, encryption=None, smtp_from=None, ssl_certificate=None, ssl_private_key=None, smtp_debug=False, mail_server_id=None)
    Returns a new SMTP connection to the given SMTP server. When running in test mode, this method does nothing and returns `None`. :param host: host or IP of SMTP server to connect to, if mail_server_id not passed :param int port: SMTP port to connect to :param user: optional username to authenticate with :param password: optional password to authenticate with :param string encryption: optional, ``'ssl'`` | ``'starttls'`` :param smtp_from: FROM SMTP envelop, used to find the best mail server :param ssl_certificate: filename of the SSL certificate used for authentication Used when no mail server is given and overwrite the odoo-bin argument "smtp_ssl_certificate" :param ssl_private_key: filename of the SSL private key used for authentication Used when no mail server is given and overwrite the odoo-bin argument "smtp_ssl_private_key" :param bool smtp_debug: toggle debugging of SMTP sessions (all i/o will be output in logs) :param mail_server_id: ID of specific mail server to use (overrides other parameters)
  • 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' or 'ssl' (see ir.mail_server fields for explanation) :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)

New fields (13)
  • access_ids One2many → ir.model.access
    string='Access' args: 'ir.model.access', 'model_id'
  • count Integer
    compute='_compute_count' help='Total number of records in this model' string='Count (Incl. Archived)'
  • field_id One2many → ir.model.fields
    copy=True default=_default_field_id required=True string='Fields' args: 'ir.model.fields', 'model_id'
  • 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_' index=True required=True
  • modules Char
    compute='_in_modules' help='List of modules in which the object is defined or inherited' string='In Apps'
  • name Char
    required=True string='Model Description' translate=True
  • order Char
    default='id' help='SQL expression for ordering records in the model; e.g. "x_sequence asc, id desc"' required=True string='Order'
  • rule_ids One2many → ir.rule
    string='Record Rules' args: 'ir.rule', 'model_id'
  • state Selection
    default='manual' readonly=True string='Type' args: [('manual', 'Custom Object'), ('base', 'Base Object')]
  • transient Boolean
    string='Transient Model'
  • view_ids One2many → ir.ui.view
    compute='_view_ids' string='Views' args: 'ir.ui.view'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_create(self, name)
    @api.model
    Infer the model from the name. E.g.: 'My New Model' should become 'x_my_new_model'.
  • unlink(self)
  • write(self, vals)

New fields (8)
  • active Boolean
    default=True help='If you uncheck the active field, it will disable the ACL without deleting it (if you delete a native ACL, it will be re-created when you reload the module).'
  • group_id Many2one → res.groups
    index=True ondelete='restrict' string='Group' args: 'res.groups'
  • model_id Many2one → ir.model
    index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • name Char
    index=True required=True
  • perm_create Boolean
    string='Create Access'
  • perm_read Boolean
    string='Read Access'
  • perm_unlink Boolean
    string='Delete Access'
  • perm_write Boolean
    string='Write Access'
Public methods (10)
  • call_cache_clearing_methods(self)
    @api.model
  • check(self, model, mode='read', raise_exception=True)
    @api.model@tools.ormcache_context('self.env.uid', 'self.env.su', 'model', 'mode', 'raise_exception', keys=('lang'))
  • check_group(self, model, mode, group_ids)
    @api.model
    Check if a specific group has the access mode to the specified model
  • check_groups(self, group)
    @api.model
    Check whether the current user has the given group.
  • create(self, vals_list)
    @api.model_create_multi
  • group_names_with_access(self, model_name, access_mode)
    @api.model
    Return the names of visible groups which have been granted ``access_mode`` on the model ``model_name``. :rtype: list
  • register_cache_clearing_method(cls, model, method)
    @classmethod
  • unlink(self)
  • unregister_cache_clearing_method(cls, model, method)
    @classmethod
  • write(self, values)

New fields (8)
  • create_date Datetime
  • definition Char
    help='PostgreSQL constraint definition'
  • message Char
    help='Error message returned when the constraint is violated.' translate=True
  • 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 constraint or foreign key name.' index=True required=True string='Constraint'
  • type Char
    help='Type of the constraint: `f` for a foreign key, `u` for other constraints.' index=True required=True size=1 string='Constraint Type'
  • write_date Datetime
Public methods (2)
  • copy(self, default=None)
  • unlink(self)

New fields (7)
  • complete_name Char
    compute='_compute_complete_name' string='Complete ID'
  • model Char
    required=True string='Model Name'
  • module Char
    default='' required=True
  • name Char
    help='External Key/Identifier that can be used for data integration with third-party systems' required=True string='External Identifier'
  • noupdate Boolean
    default=False string='Non Updatable'
  • reference Char
    compute='_compute_reference' readonly=True store=False string='Reference'
  • res_id Many2oneReference
    help='ID of the target record in the database' model_field='model' string='Record ID'
Public methods (4)
  • 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)
  • name_get(self)
  • 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.

New fields (33)
  • 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'
  • complete_name Char
    index=True
  • 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'
  • depends Char
    help='Dependencies of compute method; a list of comma-separated field names, like\n\n name, partner_id.name' string='Dependencies'
  • domain Char
    default='[]' help="The optional domain to restrict possible values for relationship fields, specified as a Python expression defining a list of triplets. For example: [('color','=','red')]"
  • field_description Char
    default='' required=True string='Field Label' translate=True
  • group_expand Boolean
    help="If checked, all the records of the target model will be included\nin a grouped result (e.g. 'Group By' filters, Kanban columns, etc.).\nNote that it can significantly reduce performance if the target model\nof the field contains a lot of records; usually used on models with\nfew records (e.g. Stages, Job Positions, Event Types, etc.)." string='Expand Groups'
  • groups Many2many → res.groups
    args: 'res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id'
  • help Text
    string='Field Help' translate=True
  • index Boolean
    string='Indexed'
  • model Char
    help='The technical name of the model this field belongs to' index=True required=True string='Model Name'
  • model_id Many2one → ir.model
    help='The model this field belongs to' index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • modules Char
    compute='_in_modules' help='List of modules in which the field is defined' string='In Apps'
  • name Char
    default='x_' index=True required=True string='Field Name'
  • on_delete Selection
    default='set null' help='On delete property for many2one fields' string='On Delete' args: [('cascade', 'Cascade'), ('set null', 'Set NULL'), ('restrict', 'Restrict')]
  • readonly Boolean
  • related Char
    help='The corresponding related field, if any. This must be a dot-separated list of field names.' string='Related Field'
  • related_field_id Many2one → ir.model.fields
    compute='_compute_related_field_id' ondelete='cascade' store=True string='Related field' args: 'ir.model.fields'
  • relation Char
    help='For relationship fields, the technical name of the target model' string='Related Model'
  • relation_field Char
    help='For one2many fields, the field on the target model that implement the opposite many2one relationship'
  • relation_field_id Many2one → ir.model.fields
    compute='_compute_relation_field_id' ondelete='cascade' store=True string='Relation field' args: 'ir.model.fields'
  • relation_table Char
    help='Used for custom many2many fields to define a custom relation table name'
  • required Boolean
  • 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'
  • translate Boolean
    help='Whether values for this field can be translated (enables the translation mechanism for that field)' string='Translatable'
  • ttype Selection
    required=True selection=FIELD_TYPES string='Field Type'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_get(self)
  • 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 (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 (0)

No new fields.

Public methods (2)
  • unlink(self)
  • write(self, values)

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'
  • module_nr Integer
    compute='_compute_module_nr' string='Number of Apps'
  • name Char
    index=True required=True string='Name' translate=True
  • parent_id Many2one → ir.module.category
    index=True string='Parent Application' args: 'ir.module.category'
  • 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 (29)
  • 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'
  • demo Boolean
    default=False readonly=True args: 'Demo Data'
  • dependencies_id One2many → ir.module.module.dependency
    readonly=True string='Dependencies' args: 'ir.module.module.dependency', 'module_id'
  • description Text
    readonly=True translate=True args: 'Description'
  • description_html Html
    compute='_get_desc' args: 'Description HTML'
  • exclusion_ids One2many → ir.module.module.exclusion
    readonly=True string='Exclusions' args: 'ir.module.module.exclusion', 'module_id'
  • has_iap Boolean
    compute='_compute_has_iap'
  • icon Char
    args: 'Icon URL'
  • icon_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
    index=True readonly=True required=True args: 'Technical Name'
  • published_version Char
    readonly=True args: 'Published Version'
  • reports_by_module Text
    compute='_get_views' store=True string='Reports'
  • sequence Integer
    default=100 args: 'Sequence'
  • shortdesc Char
    readonly=True translate=True args: 'Module Name'
  • state Selection
    default='uninstallable' index=True readonly=True string='Status' args: STATES
  • summary Char
    readonly=True translate=True args: 'Summary'
  • to_buy Boolean
    default=False args: 'Odoo Enterprise Module'
  • url Char
    readonly=True args: 'URL'
  • views_by_module Text
    compute='_get_views' store=True string='Views'
  • website Char
    readonly=True args: 'Website'
Public methods (25)
  • 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_install_cancel(self)
    @assert_log_admin_access
  • button_uninstall(self)
    @assert_log_admin_access
  • button_uninstall_cancel(self)
  • button_uninstall_wizard(self)
    @assert_log_admin_access
    Launch the wizard to uninstall the given module.
  • button_upgrade(self)
    @assert_log_admin_access
  • button_upgrade_cancel(self)
    @assert_log_admin_access
  • check_external_dependencies(cls, module_name, newstate='to install')
    @classmethod
  • create(self, vals)
    @api.model
  • download(self, download=True)
    @assert_log_admin_access
  • downstream_dependencies(self, known_deps=None, exclude_states=('uninstalled', 'uninstallable', 'to remove'))
    @api.returns('self')
    Return the modules that directly or indirectly depend on the modules in `self`, and that satisfy the `exclude_states` filter.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_apps_server(self)
    @api.model
  • get_module_info(cls, name)
    @classmethod
  • get_values_from_terp(terp)
    @staticmethod
  • install_from_urls(self, urls)
    @assert_log_admin_access@api.model
  • module_uninstall(self)
    @assert_log_admin_access
    Perform the various steps required to uninstall a module completely including the deletion of all database structures created by the module: tables, columns, constraints, etc.
  • next(self)
    Return the action linked to an ir.actions.todo is there exists one that should be executed. Otherwise, redirect to /web
  • search_panel_select_range(self, field_name, **kwargs)
    @api.model
  • unlink(self)
  • update_list(self)
    @assert_log_admin_access@api.model
  • upstream_dependencies(self, known_deps=None, exclude_states=('installed', 'uninstallable', 'to remove'))
    @api.returns('self')
    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 (0)

No public methods.

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 (12)
  • create_date Datetime
    args: 'Creation Date'
  • duration Float
    args: 'Duration'
  • entry_count Integer
    args: 'Entry count'
  • init_stack_trace Text
    prefetch=False args: 'Initial stack trace'
  • name Char
    args: 'Description'
  • 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'
  • traces_async Text
    prefetch=False args: 'Traces Async'
  • traces_sync Text
    prefetch=False args: 'Traces Sync'
Public methods (1)
  • 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 (11)
  • company_id Many2one → res.company
    index=True string='Company' args: 'res.company'
  • fields_id Many2one → ir.model.fields
    ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • name Char
    index=True
  • res_id Char
    help='If not set, acts as a default value for new resources' index=True string='Resource'
  • type Selection
    default='many2one' index=True required=True args: [('char', 'Char'), ('float', 'Float'), ('boolean', 'Boolean'), ('integer', 'Integer'), ('text', 'Text'), ('binary', 'Binary'), ('many2one', 'Many2One'), ('date', 'Date'), ('datetime', 'DateTime'), ('selection', 'Selection')]
  • value_binary Binary
    attachment=False
  • value_datetime Datetime
  • value_float Float
  • value_integer Integer
  • value_reference Char
  • value_text Text
Public methods (6)
  • create(self, vals_list)
    @api.model_create_multi
  • get_by_record(self)
  • init(self)
  • search_multi(self, name, model, operator, value)
    @api.model
    Return a domain for the records that match the given condition.
  • unlink(self)
  • write(self, values)

New fields (0)

No new fields.

Public methods (1)
  • get_asset_bundle(self, bundle_name, files, env=None, css=True, js=True)

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. Returns a dict of dict with: * key equal to the option key. * dict: type, params, name, description, default_value * type: 'string' 'integer' 'float' 'model' (e.g. 'res.partner') 'array' 'selection' (e.g. [key1, key2...])
  • 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 (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 (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)
  • record_to_html(self, record, field_name, options)
    @api.model

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

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

New fields (13)
  • active Boolean
    default=True
  • code Char
    string='Sequence Code'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • date_range_ids One2many → ir.sequence.date_range
    string='Subsequences' args: 'ir.sequence.date_range', 'sequence_id'
  • implementation Selection
    default='standard' help="While assigning a sequence number to a record, the 'no gap' sequence implementation ensures that each previous sequence number has been assigned already. While this sequence implementation will not skip any sequence number upon assignment, there can still be gaps in the sequence if records are deleted. The 'no gap' implementation is slower than the standard one." required=True string='Implementation' args: [('standard', 'Standard'), ('no_gap', 'No gap')]
  • name Char
    required=True
  • number_increment Integer
    default=1 help='The next number of the sequence will be incremented by this number' required=True string='Step'
  • number_next Integer
    default=1 help='Next number of this sequence' required=True string='Next Number'
  • number_next_actual Integer
    compute='_get_number_next_actual' help='Next number that will be used. This number can be incremented frequently so the displayed value might already be obsolete' inverse='_set_number_next_actual' string='Actual Next Number'
  • padding Integer
    default=0 help="Odoo will automatically adds some '0' on the left of the 'Next Number' to get the required padding size." required=True string='Sequence Size'
  • prefix Char
    help='Prefix value of the record for the sequence' trim=False
  • suffix Char
    help='Suffix value of the record for the sequence' trim=False
  • use_date_range Boolean
    string='Use subsequences per date_range'
Public methods (8)
  • create(self, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get(self, code)
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by its code. This method is deprecated.
  • get_id(self, sequence_code_or_id, code_or_id='id')
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by the ``sequence_code_or_id`` argument, which can be a code or an id (as controlled by the ``code_or_id`` argument. This method is deprecated.
  • 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, values)

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, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • default_get(self, fields)
    @api.model
  • unlink(self)
  • write(self, values)

New fields (5)
  • col1 Many2one → ir.model.fields
    ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • evaluation_type Selection
    change_default=True default='value' required=True args: [('value', 'Value'), ('reference', 'Reference'), ('equation', 'Python expression')], 'Evaluation Type'
  • resource_ref Reference
    compute='_compute_resource_ref' inverse='_set_resource_ref' selection='_selection_target_model' string='Record'
  • server_id Many2one → ir.actions.server
    ondelete='cascade' string='Related Server Action' args: 'ir.actions.server'
  • value Text
    help='Expression containing a value specification. \nWhen Formula type is selected, this field may be a Python expression that can use the same values as for the code field on the server action.\nIf Value type is selected, the value will be used directly without evaluation.' required=True
Public methods (1)
  • eval_value(self, eval_context=None)

New fields (9)
  • comments Text
    index=True string='Translation comments'
  • lang Selection
    selection='_get_languages' string='Language' validate=False
  • module Char
    help='Module this term belongs to' index=True
  • name Char
    required=True string='Translated field'
  • res_id Integer
    index=True string='Record ID'
  • src Text
    string='Internal Source'
  • state Selection
    default='to_translate' help='Automatically set to let administators find new terms that might need to be translated' string='Status' args: [('to_translate', 'To Translate'), ('inprogress', 'Translation in Progress'), ('translated', 'Translated')]
  • type Selection
    index=True string='Type' args: TRANSLATION_TYPE
  • value Text
    string='Translation Value'
Public methods (12)
  • check(self, mode)
    Check access rights of operation ``mode`` on ``self`` for the current user. Raise an AccessError in case conditions are not met.
  • create(self, vals_list)
    @api.model_create_multi
  • get_field_help(self, model_name)
    @api.model@tools.ormcache_context('model_name', keys=('lang'))
    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@tools.ormcache_context('model_name', 'field_name', keys=('lang'))
    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@tools.ormcache_context('model_name', keys=('lang'))
    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}`
  • get_technical_translations(self, model_name)
    @api.model
    Find the translations for the fields of `model_name` Find the technical translations for the fields of the model, including string, tooltip and available selections. :return: action definition to open the list of available translations
  • get_translations_for_webclient(self, mods, lang)
    @api.model
  • get_web_translations_hash(self, mods, lang)
    @api.model@tools.ormcache('frozenset(mods)', 'lang')
  • insert_missing(self, field, records)
    @api.model
    Insert missing translations for `field` on `records`.
  • translate_fields(self, model, id, field=None)
    @api.model
    Open a view for translating the field(s) of the record (model, id).
  • 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'
  • groups_id 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 (9)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_user_roots(self)
    @api.model@api.returns('self')
    Return all root menu ids visible for the user. :return: the root menu ids :rtype: list(int)
  • load_menus(self, debug)
    @api.model@tools.ormcache_context('self._uid', 'debug', keys=('lang'))
    Loads all menu items (all applications and their sub-menus). :return: the menu root :rtype: dict('children': menu_nodes)
  • load_menus_root(self)
    @api.model@tools.ormcache_context('self._uid', keys=('lang'))
  • name_get(self)
  • read_image(self, path)
  • unlink(self)
  • write(self, values)

New fields (19)
  • 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'
  • field_parent Char
    string='Child Field'
  • groups_id 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'
  • key Char
  • 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'
  • name Char
    required=True string='View Name'
  • priority Integer
    default=16 required=True string='Sequence'
  • type Selection
    string='View Type' args: [('tree', 'Tree'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('gantt', 'Gantt'), ('kanban', 'Kanban'), ('search', 'Search'), ('qweb', 'QWeb')]
  • xml_id Char
    compute='_compute_xml_id' help='ID of the view defined in xml file' string='External ID'
Public methods (19)
  • apply_inheritance_specs(self, source, specs_tree, pre_locate=<expr>)
    @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
  • clear_cache(self)
    Deprecated, use `clear_caches` instead.
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • 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.
  • get_view_id(self, template)
    @api.model
    Return the view ID corresponding to ``template``, which may be a view ID or an XML ID. Note that this method may be overridden for other kinds of template values. This method could return the ID of something that is not a view (when using fallback to `_xmlid_to_res_id`).
  • get_view_xmlid(self)
    @tools.ormcache('self.id')
  • 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
  • open_translations(self)
    Open a view for editing the translations of field 'arch_db'.
  • postprocess_and_fields(self, node, model=None)
    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.
  • read_combined(self, fields=None)
    Utility function to get a view combined with its inherited views. * Gets the top of the view tree if a sub-view is requested * Applies all inherited archs on the root view * Returns the view with all requested fields .. note:: ``arch`` is always added to the fields list even if not requested (similar to ``id``)
  • render_public_asset(self, template, values=None)
    @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 (1)
  • name_get(self)

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 (17)
  • 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 (11)
  • active Boolean
    default=True
  • bic Char
    help='Sometimes called BIC or Swift.' index=True args: 'Bank Identifier Code'
  • city Char
  • country Many2one → res.country
    args: 'res.country'
  • email Char
  • name Char
    required=True
  • phone Char
  • state Many2one → res.country.state
    domain="[('country_id', '=?', country)]" args: 'res.country.state', 'Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (1)
  • name_get(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (34)
  • bank_ids One2many
    readonly=False related='partner_id.bank_ids'
  • base_onboarding_company_state Selection
    default='not_done' string='State of the onboarding company step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • child_ids One2many → res.company
    string='Child Companies' args: 'res.company', 'parent_id'
  • city Char
    compute='_compute_address' inverse='_inverse_city'
  • company_details Html
    help='Header text displayed at the top of all reports.' string='Company Details'
  • company_registry Char
    compute='_compute_company_registry' readonly=False store=True
  • country_id Many2one → res.country
    compute='_compute_address' inverse='_inverse_country' string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • email Char
    readonly=False related='partner_id.email' store=True
  • external_report_layout_id Many2one → ir.ui.view
    args: 'ir.ui.view', 'Document Template'
  • favicon Binary
    default=_get_default_favicon help='This field holds the image used to display a favicon for a given company.' string='Company Favicon'
  • font Selection
    default='Lato' args: [('Lato', 'Lato'), ('Roboto', 'Roboto'), ('Open_Sans', 'Open Sans'), ('Montserrat', 'Montserrat'), ('Oswald', 'Oswald'), ('Raleway', 'Raleway')]
  • layout_background Selection
    default='Blank' required=True args: [('Blank', 'Blank'), ('Geometric', 'Geometric'), ('Custom', 'Custom')]
  • layout_background_image Binary
    args: 'Background Image'
  • logo Binary
    default=_get_logo readonly=False related='partner_id.image_1920' string='Company Logo'
  • logo_web Binary
    attachment=False compute='_compute_logo_web' store=True
  • mobile Char
    readonly=False related='partner_id.mobile' store=True
  • name Char
    readonly=False related='partner_id.name' required=True store=True string='Company Name'
  • paperformat_id Many2one → report.paperformat
    default=<expr> args: 'report.paperformat', 'Paper format'
  • parent_id Many2one → res.company
    index=True string='Parent Company' args: 'res.company'
  • partner_id Many2one → res.partner
    required=True string='Partner' args: 'res.partner'
  • phone Char
    readonly=False related='partner_id.phone' store=True
  • primary_color Char
  • report_footer Html
    help='Footer text displayed at the bottom of all reports.' string='Report Footer' translate=True
  • report_header Html
    help='Appears by default on the top right corner of your printed documents (report header).' string='Company Tagline'
  • secondary_color Char
  • sequence Integer
    default=10 help='Used to order Companies in the company switcher'
  • state_id Many2one → res.country.state
    compute='_compute_address' domain="[('country_id', '=?', country_id)]" inverse='_inverse_state' string='Fed. State' args: 'res.country.state'
  • street Char
    compute='_compute_address' inverse='_inverse_street'
  • street2 Char
    compute='_compute_address' inverse='_inverse_street2'
  • user_ids Many2many → res.users
    string='Accepted Users' args: 'res.users', 'res_company_users_rel', 'cid', 'user_id'
  • vat Char
    readonly=False related='partner_id.vat' string='Tax ID'
  • website Char
    readonly=False related='partner_id.website'
  • zip Char
    compute='_compute_address' inverse='_inverse_zip'
Public methods (11)
  • action_open_base_onboarding_company(self)
    @api.model
    Onboarding step for company basic information.
  • action_save_onboarding_company_step(self)
  • cache_restart(self)
  • copy(self, default=None)
  • create(self, vals)
    @api.model
  • get_and_update_onbarding_state(self, onboarding_state, steps_states)
    Needed to display onboarding animations only one time.
  • init(self)
  • open_company_edit_report(self)
  • set_onboarding_step_done(self, step_name)
  • write(self, values)
  • write_company_and_print_report(self)

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 (5)
  • already_installed(self)
    For each module, check if it's already installed and if it is return its name :returns: a list of the already installed modules in this installer :rtype: [str]
  • default_get(self, fields_list)
    @api.model
    If an addon is already installed, check it by default
  • execute(self)
  • fields_get(self, fields=None, attributes=None)
    @api.model
    If an addon is already installed, set it to readonly as res.config.installer doesn't handle uninstallations of already installed addons
  • modules_to_install(self)
    selects all modules to install: * checked boolean fields * return values of hook methods. Hook methods are of the form ``_if_%(addon_name)s``, and are called if the corresponding addon is marked for installation. They take the arguments cr, uid, ids and context, and return an iterable of addon names * additionals, additionals are setup through the ``_install_if`` class variable. ``_install_if`` is a dict of {iterable:iterable} where key and value are iterables of addon names. If all the addons in the key are selected for installation (warning: addons added through hooks don't count), then the addons in the value are added to the set of modules to install * not already installed

New fields (0)

No new fields.

Public methods (13)
  • cancel(self)
  • copy(self, values)
  • create(self, values)
    @api.model
  • 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.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • 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: --------------- from odoo.addons.base.models.res_config import get_warning_config raise get_warning_config(cr, _("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."), context=context) 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 string: human readable name of the field (e.g.: "Create leads from incoming mails")
  • 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 tuple: - 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)
    Return values for the fields other that `default`, `group` and `module`
  • name_get(self)
    Override name_get method to return an appropriate configuration wizard name, and not the generated name.
  • onchange_module(self, field_value, module_name)
  • set_values(self)
    Set values for the fields other that `default`, `group` and `module`

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

New fields (2)
  • 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 (0)

No public methods.

New fields (3)
  • code Char
    help='The state code.' required=True string='State Code'
  • country_id Many2one → res.country
    required=True string='Country' args: 'res.country'
  • name Char
    help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton' required=True string='State Name'
Public methods (1)
  • name_get(self)

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

New fields (11)
  • category_id Many2one → ir.module.category
    index=True string='Application' args: 'ir.module.category'
  • color Integer
    string='Color Index'
  • comment Text
    translate=True
  • full_name Char
    compute='_compute_full_name' search='_search_full_name' string='Group Name'
  • menu_access Many2many → ir.ui.menu
    string='Access Menu' args: 'ir.ui.menu', 'ir_ui_menu_group_rel', 'gid', 'menu_id'
  • model_access One2many → ir.model.access
    copy=True string='Access Controls' args: 'ir.model.access', 'group_id'
  • name Char
    required=True translate=True
  • rule_groups Many2many → ir.rule
    domain=[('global', '=', False)] string='Rules' args: 'ir.rule', 'rule_group_rel', 'group_id', 'rule_group_id'
  • share Boolean
    help='Group created to set access rights for sharing data with some users.' string='Share Group'
  • users Many2many → res.users
    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'
Public methods (2)
  • copy(self, default=None)
  • write(self, vals)

New fields (2)
  • implied_ids Many2many → res.groups
    help='Users of this group automatically inherit those groups' string='Inherits' args: 'res.groups', 'res_groups_implied_rel', 'gid', 'hid'
  • trans_implied_ids Many2many → res.groups
    compute='_compute_trans_implied' recursive=True string='Transitively inherits' args: 'res.groups'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)

New fields (0)

No new fields.

Public methods (5)
  • create(self, values)
    @api.model
  • get_application_groups(self, domain)
    Return the non-share groups that satisfy ``domain``.
  • get_groups_by_application(self)
    @api.model
    Return all groups classified by application (module category), as a list:: [(app, kind, groups), ...], where ``app`` and ``groups`` are recordsets, and ``kind`` is either ``'boolean'`` or ``'selection'``. Applications are given in sequence order. If ``kind`` is ``'selection'``, ``groups`` are given in reverse implication order.
  • unlink(self)
  • write(self, values)

New fields (14)
  • active Boolean
  • code Char
    help='This field is used to set/get locales for user' required=True string='Locale Code'
  • date_format Char
    default=DEFAULT_DATE_FORMAT required=True string='Date Format'
  • decimal_point Char
    default='.' required=True string='Decimal Separator' trim=False
  • direction Selection
    default='ltr' required=True args: [('ltr', 'Left-to-Right'), ('rtl', 'Right-to-Left')]
  • flag_image Image
    args: 'Image'
  • flag_image_url Char
    compute=_compute_field_flag_image_url
  • grouping Char
    default='[]' help="The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case." required=True string='Separator Format'
  • iso_code Char
    help='This ISO code is the name of po files to use for translations' string='ISO code'
  • name Char
    required=True
  • thousands_sep Char
    default=',' string='Thousands Separator' trim=False
  • time_format Char
    default=DEFAULT_TIME_FORMAT required=True string='Time Format'
  • url_code Char
    help='The Lang Code displayed in the URL' required=True args: 'URL Code'
  • week_start Selection
    default='7' required=True string='First Day of Week' args: [('1', 'Monday'), ('2', 'Tuesday'), ('3', 'Wednesday'), ('4', 'Thursday'), ('5', 'Friday'), ('6', 'Saturday'), ('7', 'Sunday')]
Public methods (11)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • format(self, percent, value, grouping=False, monetary=False)
    Format() will return the language-specific output for float values
  • get_available(self)
    @api.model@tools.ormcache()
    Return the available languages as a list of (code, url_code, name, active) sorted by name.
  • get_installed(self)
    @api.model@tools.ormcache()
    Return the installed languages as a list of (code, name) sorted by name.
  • get_sorted(self)
  • install_lang(self)
    @api.model
    This method is called from odoo/addons/base/data/res_lang_data.xml to load some language and set it as the default for every partners. The language is set via tools.config by the '_initialize_db' method on the 'db' object. This is a fragile solution and something else should be found.
  • load_lang(self, lang, lang_name=None)
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (50)
  • active Boolean
    default=True
  • active_lang_count Integer
    compute='_compute_active_lang_count'
  • bank_ids One2many → res.partner.bank
    string='Banks' args: 'res.partner.bank', 'partner_id'
  • barcode Char
    company_dependent=True copy=False help='Use a barcode to identify this contact.'
  • category_id Many2many → res.partner.category
    column1='partner_id' column2='category_id' default=_default_category string='Tags' args: 'res.partner.category'
  • child_ids One2many → res.partner
    domain=[('active', '=', True)] string='Contact' args: 'res.partner', 'parent_id'
  • city Char
  • color Integer
    default=0 string='Color Index'
  • comment Html
    string='Notes'
  • commercial_company_name Char
    compute='_compute_commercial_company_name' store=True args: 'Company Name Entity'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner' index=True recursive=True store=True string='Commercial Entity' args: 'res.partner'
  • company_id Many2one → res.company
    index=True args: 'res.company', 'Company'
  • company_name Char
    args: 'Company Name'
  • company_type Selection
    compute='_compute_company_type' inverse='_write_company_type' selection=[('person', 'Individual'), ('company', 'Company')] string='Company Type'
  • contact_address Char
    compute='_compute_contact_address' string='Complete Address'
  • country_code Char
    related='country_id.code' string='Country Code'
  • country_id Many2one → res.country
    ondelete='restrict' string='Country' args: 'res.country'
  • credit_limit Float
    string='Credit Limit'
  • date Date
    index=True
  • display_name Char
    compute='_compute_display_name' index=True recursive=True store=True
  • 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'
  • industry_id Many2one → res.partner.industry
    args: 'res.partner.industry', 'Industry'
  • is_company Boolean
    default=False help='Check if the contact is a company, otherwise it is a person' string='Is a Company'
  • lang Selection
    help='All the emails and documents sent to this contact will be translated in this language.' string='Language' args: _lang_get
  • mobile Char
  • name Char
    index=True
  • parent_id Many2one → res.partner
    index=True string='Related Company' args: 'res.partner'
  • parent_name Char
    readonly=True related='parent_id.name' string='Parent name'
  • partner_latitude Float
    digits=(10, 7) string='Geo Latitude'
  • partner_longitude Float
    digits=(10, 7) string='Geo Longitude'
  • partner_share Boolean
    compute='_compute_partner_share' help='Either customer (not a user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data.' store=True args: 'Share Partner'
  • phone Char
  • ref Char
    index=True string='Reference'
  • same_vat_partner_id Many2one → res.partner
    compute='_compute_same_vat_partner_id' store=False string='Partner with same Tax ID' args: 'res.partner'
  • self Many2one
    comodel_name=_name compute='_compute_get_ids'
  • state_id Many2one → res.country.state
    domain="[('country_id', '=?', country_id)]" ondelete='restrict' string='State' args: 'res.country.state'
  • street Char
  • street2 Char
  • title Many2one → res.partner.title
    args: 'res.partner.title'
  • type Selection
    default='contact' help='Invoice & Delivery addresses are used in sales orders. Private addresses are only visible by authorized users.' string='Address Type' args: [('contact', 'Contact'), ('invoice', 'Invoice Address'), ('delivery', 'Delivery Address'), ('other', 'Other Address'), ('private', 'Private Address')]
  • 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: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
  • user_id Many2one → res.users
    help='The internal user in charge of this contact.' string='Salesperson' args: 'res.users'
  • user_ids One2many → res.users
    auto_join=True string='Users' args: 'res.users', 'partner_id'
  • vat Char
    help='The Tax Identification Number. Complete it if the contact is subjected to government taxes. Used in some legal statements.' index=True string='Tax ID'
  • website Char
    args: 'Website Link'
  • zip Char
    change_default=True
Public methods (18)
  • address_get(self, adr_pref=None)
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_company(self)
  • default_get(self, default_fields)
    @api.model
    Add the company of the parent as default if we are creating a child partner. Also take the parent lang by default if any, otherwise, fallback to default DB lang.
  • find_or_create(self, email, assert_valid_email=False)
    @api.model@api.returns('self', <expr>)
    Find a partner with the given ``email`` or use :py:method:`~.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 boolean assert_valid_email: raise if no valid email is found :return: newly created record
  • get_import_templates(self)
    @api.model
  • main_partner(self)
    @api.model@api.returns('self')
    Return the main partner
  • 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.
  • name_get(self)
  • onchange_company_type(self)
    @api.onchange('company_type')
  • onchange_email(self)
    @api.onchange('email')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • open_commercial_entity(self)
    Utility method used to add an "Open Company" button in partner views
  • open_parent(self)
    Utility method used to add an "Open Parent" button in partner views
  • update_address(self, vals)
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)

New fields (12)
  • acc_holder_name Char
    help='Account holder name, in case it is different than the name of the Account Holder' string='Account Holder Name'
  • acc_number Char
    required=True args: 'Account Number'
  • acc_type Selection
    compute='_compute_acc_type' help='Bank account type: Normal or IBAN. Inferred from the bank account number.' selection=<expr> string='Type'
  • active Boolean
    default=True
  • bank_bic Char
    readonly=False related='bank_id.bic'
  • bank_id Many2one → res.bank
    string='Bank' args: 'res.bank'
  • bank_name Char
    readonly=False related='bank_id.name'
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' readonly=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • partner_id Many2one → res.partner
    domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' required=True args: 'res.partner', 'Account Holder'
  • sanitized_acc_number Char
    compute='_compute_sanitized_acc_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
    default=10
Public methods (3)
  • get_supported_account_types(self)
    @api.model
  • name_get(self)
  • retrieve_acc_type(self, acc_number)
    @api.model
    To be overridden by subclasses in order to support other account_types.

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the category without removing it.'
  • child_ids One2many → res.partner.category
    string='Child Tags' args: 'res.partner.category', 'parent_id'
  • color Integer
    default=_get_default_color string='Color'
  • name Char
    required=True string='Tag Name' translate=True
  • parent_id Many2one → res.partner.category
    index=True ondelete='cascade' string='Parent Category' args: 'res.partner.category'
  • parent_path Char
    index=True
  • partner_ids Many2many → res.partner
    column1='category_id' column2='partner_id' copy=False string='Partners' args: 'res.partner'
Public methods (1)
  • name_get(self)
    Return the categories' display name, including their direct parent by default. If ``context['partner_category_display']`` is ``'short'``, the short version of the category name (without the direct parent) is used. The default is the long version.

New fields (0)

No new fields.

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 (2)
  • name Char
    required=True string='Title' translate=True
  • shortcut Char
    string='Abbreviation' translate=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (21)
  • 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'
  • companies_count Integer
    compute='_compute_companies_count' string='Number of Companies'
  • company_id Many2one → res.company
    context={'user_preference': True} default=<expr> help='The default company for this user.' required=True string='Company' args: 'res.company'
  • company_ids Many2many → res.company
    default=<expr> string='Companies' args: 'res.company', 'res_company_users_rel', 'user_id', 'cid'
  • email Char
    inherited=True readonly=False related='partner_id.email'
  • groups_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of groups that apply to the current user' args: '# Groups'
  • groups_id Many2many → res.groups
    default=_default_groups string='Groups' args: 'res.groups', 'res_groups_users_rel', 'uid', 'gid'
  • 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 authentication'
  • name Char
    inherited=True readonly=False related='partner_id.name'
  • new_password Char
    compute='_compute_password' help="Specify a value only when creating a user or if you're changing the user's password, otherwise leave empty. After a change of password, the user has to login again." inverse='_set_new_password' string='Set Password'
  • partner_id Many2one → res.partner
    auto_join=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' invisible=True
  • rules_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of record rules that apply to the current user' args: '# Record Rules'
  • share Boolean
    compute='_compute_share' compute_sudo=True help='External user with limited access, created only for the purpose of sharing data.' store=True string='Share User'
  • signature Html
    default='' string='Email Signature'
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
Public methods (24)
  • SELF_READABLE_FIELDS(self)
    @property
    The list of fields a user can read on their own user record. In order to add fields, please override this property on model extensions.
  • SELF_WRITEABLE_FIELDS(self)
    @property
    The list of fields a user can write on their own user record. In order to add fields, please override this property on model extensions.
  • action_get(self)
    @api.model
  • action_show_accesses(self)
  • action_show_groups(self)
  • action_show_rules(self)
  • authenticate(cls, db, login, password, user_agent_env)
    @classmethod
    Verifies and returns the user ID corresponding to the given ``login`` and ``password`` combination, or False if there was no matching user. :param str db: the database on which user is trying to authenticate :param str login: username :param str password: user password :param dict user_agent_env: environment dictionary describing any relevant environment attributes
  • 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
  • check(cls, db, uid, passwd)
    @classmethod@tools.ormcache('uid', 'passwd')
    Verifies that the given (uid, password) is authorized for the database ``db`` and raise an exception if it is not.
  • check_super(self, passwd)
  • context_get(self)
    @api.model@tools.ormcache('self._uid')
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_company_currency_id(self)
    @api.model
  • has_group(self, group_ext_id)
    @api.model
  • init(self)
  • on_change_login(self)
    @api.onchange('login')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • preference_change_password(self)
  • preference_save(self)
  • read(self, fields=None, load='_classic_read')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • toggle_active(self)
  • write(self, values)

New fields (0)

No new fields.

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

New fields (0)

No new fields.

Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • new(self, values={}, origin=None, ref=None)
    @api.model
  • onchange(self, values, field_name, field_onchange)
  • read(self, fields=None, load='_classic_read')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • write(self, values)

New fields (1)
  • api_key_ids One2many → res.users.apikeys
    string='API Keys' args: 'res.users.apikeys', 'user_id'
Public methods (3)
  • SELF_READABLE_FIELDS(self)
    @property
  • SELF_WRITEABLE_FIELDS(self)
    @property
  • api_key_wizard(self)
    @check_identity

New fields (2)
  • password Char
  • request Char
    groups=fields.NO_ACCESS readonly=True
Public methods (1)
  • run_check(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

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 (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)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Stéphane Bidoul, Martin Trigaux, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Mohammed Shekha, Cedric Snauwaert, Simon Lejeune, Ravi Gohil, Nicolas Martinelli, Alexandre Fayolle, Nicolas Lempereur, Thibault Francois, Stefan Rijnhart, Richard Mathot, qdp-odoo, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Barad Mahendra, Wolfgang Taferner, Yannick Tivisse, qsm-odoo, Dharmraj Jhala, Pierre Masereel, Romain Derie, Laurent Smet, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Jairo Llopis, Nans Lefebvre, Johan Demaret Rivarola, Alexandre Kühn, Toufik Ben Jaa, Nicolas Vannieuwerburgh, Adrian Torres, wan, mreficent, Julien Castiaux, Xavier-Do, Denis Roussel, jvm-odoo, Thomas Dieuzeide, Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, Fanny He, William Henrotin, Sébastien Theys, Nasreddin (bon), alt-odoo, oco-odoo, Florent de Labarre, Julien Mougenot, Jason Van Malder, fw-bot, Anh Thao Pham (pta), Debauche Stéphane, Lois Rilo, Luis González, Alvaro Fuentes, std-odoo, Achraf (abz), David Beguin, Lucas Lefèvre, Adrien Widart, Ivan Yelizariev, Jérémy Hennecart, Nasreddin Boulif (bon), Touati Djamel (otd), Nicolas Galler, nie, Tiffany Chang (tic), Ivàn Todorovich, Andrius Laukavičius, fja-odoo, arg-odoo, Mathieu Duckerts-Antoine, Pierre Paridans, Kamen Zhekov, jbw, Djamel (otd), Yenthe666, Benjamin Frantzen (bfr), jbm-odoo, Aurélien (avd), shreya thakrar, Arnaud Joset, Jinal Patel, William Braeckman, Kevin Baptiste, Raf Geens, Mathias Markl, Luce Pasquini, Arnaud Baes, Benoit Socias, Stanislas Sobieski, Hubert Van de Walle (huvw), Hardik Prajapati, Miquel Raïch, pedrambiria, Ahmad Khanalizadeh, Laurent Desausoi (lade), jdoutreloux, Jigar Vaghela, laa, ryv-odoo, Nicolas (vin), Paolo (pgi), Florian Damhaut, Merlin (megu), yhu-odoo, Krzysztof Magusiak, Audric Onockx (auon), william, Florian Vranckx, Daniel Blanco, BVE, Walid HANNICHE (waha), Yolann Sabaux, Abdelouahab (abla), Florian Gilbert, Antoine Vandevenne (anv), Aurelien van Delft (avd), Michael Mattiello (mcm), Mathieu Walravens, Renaud Thiry, Florent Lejoly, niyasraphy, jbw-odoo, Jose Lopez, nda-odoo, bve-odoo, Thomas Lefebvre (thle), Walid, Laurent Desausoi, Adrien Widart (awt), nda, Julien (jula), Lefebvre Thomas (thle), Om Rabara, duongnguyen, Saurabh Choraria, Nisha patel, Michael Tietz, Dylan Kiss (dyki), Jinane Maksoud, Sébastien Geelen (sge), Sanket Brahmbhatt, flvr-odoo, Rahul Prajapati, Karnav Sojitra, Ahmed Khalaf, micheledic, Carmen Bianca BAKKER, Mohit Beniwal, Raphael Collet (rco), jard@odoo.com, Renilkumar Kajavadra, Manuel Fombuena
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:31
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

Views touched (173)
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.tree ir.actions.report tree 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.tree ir.actions.actions tree New
base_onboarding_company_form base.company.onboarding.form res.company form Inherits base.view_company_form
base_partner_merge_automatic_wizard_form base.partner.merge.automatic.wizard.form base.partner.merge.automatic.wizard form New
change_password_wizard_user_tree_view Change Password Users change.password.user tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
contact_name contact_name ir.ui.view qweb New
demo_failures_dialog Demo Failure Dialog ir.demo_failure.wizard form New
demo_force_install_form ir.demo.form ir.demo form New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search 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
identity_check_wizard res.users.identitycheck form New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access.view.tree ir.model.access tree New
ir_access_view_tree_edition ir.model.access.view.tree.edition ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree 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 tree 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 tree view ir.default tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Apps Kanban ir.module.module kanban New
onboarding_company_step onboarding_company_step ir.ui.view qweb New
onboarding_confetti onboarding_confetti ir.ui.view qweb New
onboarding_container onboarding_container ir.ui.view qweb New
onboarding_step onboarding_step 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 tree New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_bank_view_search res.bank.view.search res.bank search New
res_config_installer Inheritable view for installer objects res.config.installer form 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_lang_form res.lang.form res.lang form New
res_lang_search res.lang.search res.lang search New
res_lang_tree res.lang.tree res.lang tree 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 tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_partner_view_form_private res.partner.view.form.private res.partner 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 tree New
user_groups_view res.users.groups res.users form Inherits view_users_form
view_apikeys API Keys Listing res.users.apikeys tree New
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree 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_company_form res.company.form res.company form New
view_company_tree res.company.tree res.company tree 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.tree res.country.group tree 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.tree res.country.state tree New
view_country_tree res.country.tree res.country tree 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.tree res.currency.rate tree New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_decimal_precision_form Decimal Precision decimal.precision form New
view_decimal_precision_tree Decimal Precision List decimal.precision tree New
view_groups_form res.groups.form res.groups form 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 tree 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 tree 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 tree 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 tree New
view_model_fields_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree 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.tree res.partner.bank tree New
view_partner_category_form Contact Tags res.partner.category form New
view_partner_category_list Contact Tags res.partner.category tree 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_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_company_kanban res.company.kanban res.company kanban New
view_res_partner_filter res.partner.select res.partner search New
view_res_users_kanban res.users.kanban res.users kanban New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree New
view_translation_dialog_tree ir.translation tree New
view_translation_form ir.translation form New
view_translation_lang_src_value_tree ir.translation tree New
view_translation_lang_value_tree ir.translation tree New
view_translation_search ir.translation search New
view_translation_tree ir.translation tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
wizard_lang_export Export Translations base.language.export form New
wizard_update_translations Generate Missing Terms base.update.translations form New
HTTP endpoints (3)
Route(s)HandlerAuthTypeMethodsFlags
/jsonrpc RPC.jsonrpc none json ALL
/xmlrpc/<service> RPC.xmlrpc_1 none http POST csrf off
/xmlrpc/2/<service> RPC.xmlrpc_2 none http POST csrf off
Models touched (116)

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 (0)

No new fields.

Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi@api.returns('self', <expr>)

New fields (6)
  • data Binary
    attachment=False readonly=True args: 'File'
  • format Selection
    default='csv' 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
  • 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 size=6 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)
  • lang Selection
    default=_default_language required=True string='Language' args: _get_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'
  • state Selection
    default='init' readonly=True string='Status' args: [('init', 'init'), ('done', 'done')]
Public methods (3)
  • lang_install(self)
  • reload(self)
  • switch_lang(self)

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

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

New fields (1)
  • module_info Text
    default=_default_module_info readonly=True args: 'Apps to Update'
Public methods (5)
  • config(self)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_module_list(self)
    @api.model@api.returns('ir.module.module')
  • 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 (1)
  • lang Selection
    required=True args: _get_languages, 'Language'
Public methods (1)
  • act_update(self)

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

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • image_1024 Image
    max_height=1024 max_width=1024 related='image_1920' store=True args: 'Image 1024'
  • image_128 Image
    max_height=128 max_width=128 related='image_1920' store=True args: 'Image 128'
  • image_1920 Image
    max_height=1920 max_width=1920 args: 'Image'
  • image_256 Image
    max_height=256 max_width=256 related='image_1920' store=True args: 'Image 256'
  • image_512 Image
    max_height=512 max_width=512 related='image_1920' store=True args: 'Image 512'
Public methods (0)

No public methods.

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

No public methods.

New fields (17)
  • 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'
  • filter Boolean
  • groups_id 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'
  • name Char
    string='Action Name' translate=True
  • 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 Text
    compute='_compute_search_view'
  • 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'), ('inline', 'Inline Edit'), ('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='tree,form' help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)" required=True
  • views Binary
    compute='_compute_views' help='This function field computes the ordered list of views that should be enabled when displaying the result of an action, federating view mode, views and reference view. The result is returned as an ordered list of pairs (view_id,view_mode).'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • exists(self)
  • read(self, fields=None, load='_classic_read')
    call the method get_empty_list_help of the model and set the window action help message
  • unlink(self)

New fields (5)
  • act_window_id Many2one → ir.actions.act_window
    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 (7)
  • binding_model_id Many2one → ir.model
    help='Setting a value makes this action available in the sidebar for the given model.' ondelete='cascade' args: 'ir.model'
  • binding_type Selection
    default='action' required=True args: [('action', 'Action'), ('report', 'Report')]
  • binding_view_types Char
    default='list,form'
  • help Html
    help='Optional help text for the users with a description of the target view, such as its usage and purpose.' string='Action Description' translate=True
  • name Char
    required=True
  • type Char
    required=True string='Action Type'
  • xml_id Char
    compute='_compute_xml_id' string='External ID'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_bindings(self, model_name)
    @api.model@tools.ormcache('frozenset(self.env.user.groups_id.ids)', 'model_name')
    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 which are related to actions which will be deleted. NOTE: ondelete cascade will not work on ir.actions.actions so we will need to do it manually.
  • write(self, vals)

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

No public methods.

New fields (14)
  • attachment Char
    help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.' string='Save as Attachment Prefix'
  • attachment_use Boolean
    help='If enabled, then the second time the user prints with same attachment name, it returns the previous report.' string='Reload from Attachment'
  • binding_type Selection
    default='report'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_report_rel', 'uid', 'gid'
  • model Char
    required=True string='Model Name'
  • model_id Many2one → ir.model
    compute='_compute_model_id' search='_search_model_id' string='Model' args: 'ir.model'
  • multi Boolean
    help='If set to true, the action will not be displayed on the right toolbar of a form view.' string='On Multiple Doc.'
  • name Char
    translate=True
  • paperformat_id Many2one → report.paperformat
    args: 'report.paperformat', 'Paper Format'
  • print_report_name Char
    help="This is the filename of the report going to download. Keep empty to not change the report filename. You can use a python expression with the 'object' and 'time' variables." translate=True args: 'Printed Report Name'
  • report_file Char
    help='The path to the main report file (depending on Report Type) or empty if the content is in another field' readonly=False required=False store=True string='Report File'
  • report_name Char
    required=True string='Template Name'
  • report_type Selection
    default='qweb-pdf' help='The type of the report that will be rendered, each one having its own rendering method. HTML means the report will be opened directly in your browser PDF means the report will be rendered using Wkhtmltopdf and downloaded by the user.' required=True args: [('qweb-html', 'HTML'), ('qweb-pdf', 'PDF'), ('qweb-text', 'Text')]
  • type Char
    default='ir.actions.report'
Public methods (11)
  • associated_view(self)
    Used in the ir.actions.report form view in order to search naively after the view(s) used in the rendering.
  • barcode(self, barcode_type, value, **kwargs)
    @api.model
  • check_barcode_encoding(self, barcode, encoding)
    @api.model
    Checks if the given barcode is correctly encoded. :return: True if the barcode string is encoded with the provided encoding. :rtype: bool
  • 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_barcode_check_digit(self, numeric_barcode)
    @api.model
    Computes and returns the barcode check digit. The used algorithm follows the GTIN specifications and can be used by all compatible barcode nomenclature, like as EAN-8, EAN-12 (UPC-A) or EAN-13. https://www.gs1.org/sites/default/files/docs/barcodes/GS1_General_Specifications.pdf https://www.gs1.org/services/how-calculate-check-digit-manually :param numeric_barcode: the barcode to verify/recompute the check digit :type numeric_barcode: str :return: the number corresponding to the right check digit :rtype: int
  • get_paperformat(self)
  • get_wkhtmltopdf_state(self)
    @api.model
    Get the current state of wkhtmltopdf: install, ok, upgrade, workers or broken. * install: Starting state. * upgrade: The binary is an older version (< 0.12.0). * ok: A binary was found with a recent version (>= 0.12.0). * workers: Not enough workers found to perform the pdf rendering process (< 2 workers). * broken: A binary was found but not responding. :return: wkhtmltopdf_state
  • report_action(self, docids, data=None, config=True)
    Return an action of type ir.actions.report. :param docids: id/ids/browse record of the records to print (if not used, pass an empty list) :param report_name: Name of the template to generate an action for
  • retrieve_attachment(self, record)
    Retrieve an attachment for a specific record. :param record: The record owning of the attachment. :param attachment_name: The optional name of the attachment. :return: A recordset of length <=1 or None
  • unlink_action(self)
    Remove the contextual actions created for the reports.

New fields (14)
  • child_ids Many2many → ir.actions.server
    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', 'rel_server_actions', 'server_id', 'action_id'
  • code Text
    default=DEFAULT_PYTHON_CODE 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
    help='Model for record creation / update. Set this field only to specify a different model than the base model.' string='Target Model' args: 'ir.model'
  • crud_model_name Char
    readonly=True related='crud_model_id.model' string='Target Model Name'
  • fields_lines One2many → ir.server.object.lines
    copy=True string='Value Mapping' args: 'ir.server.object.lines', 'server_id'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'ir_act_server_group_rel', 'act_id', 'gid'
  • link_field_id Many2one → ir.model.fields
    help='Provide the 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
    readonly=True related='model_id.model' store=True string='Model Name'
  • name Char
    string='Action Name' translate=True
  • sequence Integer
    default=5 help='When dealing with multiple actions, the execution order is based on the sequence. Low number means high priority.'
  • state Selection
    copy=True default='object_write' help="Type of server action. The following values are available:\n- 'Execute Python Code': a block of python code that will be executed\n- 'Create': create a new record with new values\n- 'Update a Record': update the values of a record\n- 'Execute several actions': define an action that triggers several other server actions\n- 'Send Email': automatically send an email (Discuss)\n- 'Add Followers': add followers to a record (Discuss)\n- 'Create Next Activity': create an activity (Discuss)" required=True string='Action To Do' args: [('code', 'Execute Python Code'), ('object_create', 'Create a new Record'), ('object_write', 'Update the Record'), ('multi', 'Execute several actions')]
  • type Char
    default='ir.actions.server'
  • usage Selection
    default='ir_actions_server' required=True string='Usage' args: [('ir_actions_server', 'Server Action'), ('ir_cron', 'Scheduled Action')]
Public methods (3)
  • create_action(self)
    Create a contextual action for each server action.
  • 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 :param dict context: context should contain following keys - active_id: id of the current object (single mode) - active_model: current model that should equal the action's model The following keys are optional: - active_ids: 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.

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 (7)
  • 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
  • name_get(self)
  • unlink(self)
  • write(self, vals)

New fields (19)
  • access_token Char
    groups='base.group_user' args: 'Access Token'
  • checksum Char
    index=True readonly=True size=40 args: 'Checksum/SHA1'
  • company_id Many2one → res.company
    change_default=True default=<expr> string='Company' args: 'res.company'
  • datas Binary
    compute='_compute_datas' inverse='_inverse_datas' string='File Content (base64)'
  • db_datas Binary
    attachment=False args: 'Database Data'
  • description Text
    args: 'Description'
  • file_size Integer
    readonly=True args: 'File Size'
  • index_content Text
    prefetch=False readonly=True args: 'Indexed Content'
  • mimetype Char
    readonly=True args: 'Mime Type'
  • name Char
    required=True args: 'Name'
  • public Boolean
    args: 'Is public document'
  • raw Binary
    compute='_compute_raw' inverse='_inverse_raw' string='File Content (raw)'
  • res_field Char
    readonly=True args: 'Resource Field'
  • res_id Many2oneReference
    help='The record id this is attached to.' model_field='res_model' readonly=True args: 'Resource ID'
  • res_model Char
    help='The database object this attachment will be attached to.' readonly=True args: 'Resource Model'
  • res_name Char
    compute='_compute_res_name' args: 'Resource Name'
  • store_fname Char
    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=True 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(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • force_storage(self)
    @api.model
    Force all attachments to be stored in the currently configured storage
  • generate_access_token(self)
  • get_serve_attachment(self, url, extra_domain=None, extra_fields=None, order=None)
    @api.model
  • 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.
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Override read_group to add res_field=False in domain if not present.
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • power_on(self, *args, **kwargs)
    @api.model

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

New fields (11)
  • active Boolean
    default=True
  • cron_name Char
    readonly=False related='ir_actions_server_id.name' store=True args: 'Name'
  • doall Boolean
    help='Specify if missed occurrences should be executed when the server restarts.' string='Repeat Missed'
  • interval_number Integer
    default=1 help='Repeat every x.'
  • interval_type Selection
    default='months' string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • ir_actions_server_id Many2one → ir.actions.server
    delegate=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'
  • numbercall Integer
    default=1 help='How many times the method is called,\na negative number indicates no limit.' string='Number of Calls'
  • priority Integer
    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)
  • create(self, values)
    @api.model
  • default_get(self, fields_list)
    @api.model
  • method_direct_trigger(self)
  • toggle(self, model, domain)
    @api.model
  • try_write(self, values)
  • unlink(self)
  • write(self, vals)

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 (8)
  • 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.
  • get(self, model_name, field_name, user_id=False, company_id=False, condition=False)
    @api.model
    Return the default value for the given field, user and company, or ``None`` if no default is available. :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'``.
  • get_model_defaults(self, model_name, condition=False)
    @api.model@tools.ormcache('self.env.uid', 'self.env.company.id', 'model_name', 'condition')
    Return the available default values for the given model (for the current user), as a dict mapping field names to 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 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 (3)
  • export_fields One2many → ir.exports.line
    copy=True string='Export ID' args: 'ir.exports.line', 'export_id'
  • name Char
    string='Export Name'
  • resource Char
    index=True
Public methods (0)

No public methods.

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

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • db_id_for(self, model, field, subfield, value)
    @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_get/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 context: OpenERP request context :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)
    @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.osv.orm.Model.write` expects. :param model: :class:`odoo.osv.orm.Model` for the conversion base :returns: a converter callable :rtype: (record: dict, logger: (field, error) -> None) -> dict
  • to_field(self, model, field, fromtype=str)
    @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 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 context: odoo request context :return: a function (fromtype -> field.write_type), if a converter is found :rtype: Callable | None

New fields (9)
  • 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
  • is_default Boolean
    string='Default Filter'
  • model_id Selection
    required=True selection='_list_all_models' string='Model'
  • name Char
    required=True string='Filter Name' translate=True
  • sort Text
    default='[]' required=True
  • user_id Many2one → res.users
    help='The user this filter is private to. When left empty the filter is public and available to all users.' ondelete='cascade' string='User' args: 'res.users'
Public methods (3)
  • copy(self, default=None)
  • create_or_replace(self, vals)
    @api.model@api.returns('self', <expr>)
  • get_filters(self, model, action_id=None)
    @api.model
    Obtain the list of filters available for the user on the given model. :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_id`` (m2o tuple), ``action_id`` (m2o tuple) and ``context`` of the matching ``ir.filters``.

New fields (0)

No new fields.

Public methods (2)
  • binary_content(self, xmlid=None, model='ir.attachment', id=None, field='datas', unique=False, filename=None, filename_field='name', download=False, mimetype=None, default_mimetype='application/octet-stream', access_token=None)
    Get file, attachment or downloadable content If the ``xmlid`` and ``id`` parameter is omitted, fetches the default value for the binary field (via ``default_get``), otherwise fetches the field for that precise record. :param str xmlid: xmlid of the record :param str model: name of the model to fetch the binary from :param int id: id of the record from which to fetch the binary :param str field: binary field :param bool unique: add a max-age for the cache control :param str filename: choose a filename :param str filename_field: if not create an filename with model-id-field :param bool download: apply headers to download the file :param str mimetype: mintype of the field (for headers) :param str default_mimetype: default mintype if no mintype found :param str access_token: optional token for unauthenticated access only available for ir.attachment :returns: (status, headers, content)
  • routing_map(cls, key=None)
    @classmethod

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 (9)
  • active Boolean
    default=True
  • name Char
    index=True required=True string='Description'
  • 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_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)' required=True string='Connection Security' args: [('none', 'None'), ('starttls', 'TLS (STARTTLS)'), ('ssl', 'SSL/TLS')]
  • smtp_host Char
    help='Hostname or IP of SMTP server' required=True 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.' required=True string='SMTP Port'
  • smtp_user Char
    groups='base.group_system' help='Optional username for SMTP authentication' string='Username'
Public methods (4)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
    Constructs an RFC2822 email.message.Message object based on the keyword arguments passed, and returns it. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) :param string body: email body, of the type ``subtype`` (by default, plaintext). If html subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative, unless an explicit ``body_alternative`` version is passed. :param string body_alternative: optional alternative body, of the type specified in ``subtype_alternative`` :param string reply_to: optional value of Reply-To header :param string object_id: optional tracking identifier, to be included in the message-id for recognizing replies. Suggested format for object-id is "res_id-model", e.g. "12345-crm.lead". :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), must match the format of the ``body`` parameter. Default is 'plain', making the content part of the mail "text/plain". :param string subtype_alternative: optional mime subtype of ``body_alternative`` (usually 'plain' or 'html'). Default is 'plain'. :param list attachments: list of (filename, filecontents) pairs, where filecontents is a string containing the bytes of the attachment :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) :param dict headers: optional map of headers to set on the outgoing mail (may override the other headers, including Subject, Reply-To, Message-Id, etc.) :rtype: email.message.EmailMessage :return: the new RFC2822 email message
  • connect(self, host=None, port=None, user=None, password=None, encryption=None, smtp_debug=False, mail_server_id=None)
    Returns a new SMTP connection to the given SMTP server. When running in test mode, this method does nothing and returns `None`. :param host: host or IP of SMTP server to connect to, if mail_server_id not passed :param int port: SMTP port to connect to :param user: optional username to authenticate with :param password: optional password to authenticate with :param string encryption: optional, ``'ssl'`` | ``'starttls'`` :param bool smtp_debug: toggle debugging of SMTP sessions (all i/o will be output in logs) :param mail_server_id: ID of specific mail server to use (overrides other parameters)
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=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' or 'ssl' (see ir.mail_server fields for explanation) :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_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)

New fields (13)
  • access_ids One2many → ir.model.access
    string='Access' args: 'ir.model.access', 'model_id'
  • count Integer
    compute='_compute_count' help='Total number of records in this model' string='Count (Incl. Archived)'
  • field_id One2many → ir.model.fields
    copy=True default=_default_field_id required=True string='Fields' args: 'ir.model.fields', 'model_id'
  • 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_' index=True required=True
  • modules Char
    compute='_in_modules' help='List of modules in which the object is defined or inherited' string='In Apps'
  • name Char
    required=True string='Model Description' translate=True
  • order Char
    default='id' help='SQL expression for ordering records in the model; e.g. "x_sequence asc, id desc"' required=True string='Order'
  • rule_ids One2many → ir.rule
    string='Record Rules' args: 'ir.rule', 'model_id'
  • state Selection
    default='manual' readonly=True string='Type' args: [('manual', 'Custom Object'), ('base', 'Base Object')]
  • transient Boolean
    string='Transient Model'
  • view_ids One2many → ir.ui.view
    compute='_view_ids' string='Views' args: 'ir.ui.view'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_create(self, name)
    @api.model
    Infer the model from the name. E.g.: 'My New Model' should become 'x_my_new_model'.
  • unlink(self)
  • write(self, vals)

New fields (8)
  • active Boolean
    default=True help='If you uncheck the active field, it will disable the ACL without deleting it (if you delete a native ACL, it will be re-created when you reload the module).'
  • group_id Many2one → res.groups
    index=True ondelete='restrict' string='Group' args: 'res.groups'
  • model_id Many2one → ir.model
    index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • name Char
    index=True required=True
  • perm_create Boolean
    string='Create Access'
  • perm_read Boolean
    string='Read Access'
  • perm_unlink Boolean
    string='Delete Access'
  • perm_write Boolean
    string='Write Access'
Public methods (10)
  • call_cache_clearing_methods(self)
    @api.model
  • check(self, model, mode='read', raise_exception=True)
    @api.model@tools.ormcache_context('self.env.uid', 'self.env.su', 'model', 'mode', 'raise_exception', keys=('lang'))
  • check_group(self, model, mode, group_ids)
    @api.model
    Check if a specific group has the access mode to the specified model
  • check_groups(self, group)
    @api.model
    Check whether the current user has the given group.
  • create(self, vals_list)
    @api.model_create_multi
  • group_names_with_access(self, model_name, access_mode)
    @api.model
    Return the names of visible groups which have been granted ``access_mode`` on the model ``model_name``. :rtype: list
  • register_cache_clearing_method(cls, model, method)
    @classmethod
  • unlink(self)
  • unregister_cache_clearing_method(cls, model, method)
    @classmethod
  • write(self, values)

New fields (8)
  • create_date Datetime
  • definition Char
    help='PostgreSQL constraint definition'
  • message Char
    help='Error message returned when the constraint is violated.' translate=True
  • 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 constraint or foreign key name.' index=True required=True string='Constraint'
  • type Char
    help='Type of the constraint: `f` for a foreign key, `u` for other constraints.' index=True required=True size=1 string='Constraint Type'
  • write_date Datetime
Public methods (1)
  • copy(self, default=None)

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 (10)
  • 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)
  • get_object(self, module, xml_id)
    @api.model
    Returns a browsable record for the given module name and xml_id. If not found, raise a ValueError or return None, depending on the value of `raise_exception`.
  • get_object_reference(self, module, xml_id)
    @api.model
    Returns (model, res_id) corresponding to a given module and xml_id (cached) or raise ValueError if not found
  • name_get(self)
  • 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.
  • xmlid_lookup(self, xmlid)
    @api.model@tools.ormcache('xmlid')
    Low level xmlid lookup Return (id, res_model, res_id) or raise ValueError if not found
  • xmlid_to_object(self, xmlid, raise_if_not_found=False)
    @api.model
    Return a Model object, or ``None`` if ``raise_if_not_found`` is set
  • xmlid_to_res_id(self, xmlid, raise_if_not_found=False)
    @api.model
    Returns res_id
  • xmlid_to_res_model_res_id(self, xmlid, raise_if_not_found=False)
    @api.model
    Return (res_model, res_id)

New fields (33)
  • 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'
  • complete_name Char
    index=True
  • 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'
  • depends Char
    help='Dependencies of compute method; a list of comma-separated field names, like\n\n name, partner_id.name' string='Dependencies'
  • domain Char
    default='[]' help="The optional domain to restrict possible values for relationship fields, specified as a Python expression defining a list of triplets. For example: [('color','=','red')]"
  • field_description Char
    default='' required=True string='Field Label' translate=True
  • group_expand Boolean
    help="If checked, all the records of the target model will be included\nin a grouped result (e.g. 'Group By' filters, Kanban columns, etc.).\nNote that it can significantly reduce performance if the target model\nof the field contains a lot of records; usually used on models with\nfew records (e.g. Stages, Job Positions, Event Types, etc.)." string='Expand Groups'
  • groups Many2many → res.groups
    args: 'res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id'
  • help Text
    string='Field Help' translate=True
  • index Boolean
    string='Indexed'
  • model Char
    help='The technical name of the model this field belongs to' index=True required=True string='Model Name'
  • model_id Many2one → ir.model
    help='The model this field belongs to' index=True ondelete='cascade' required=True string='Model' args: 'ir.model'
  • modules Char
    compute='_in_modules' help='List of modules in which the field is defined' string='In Apps'
  • name Char
    default='x_' index=True required=True string='Field Name'
  • on_delete Selection
    default='set null' help='On delete property for many2one fields' string='On Delete' args: [('cascade', 'Cascade'), ('set null', 'Set NULL'), ('restrict', 'Restrict')]
  • readonly Boolean
  • related Char
    help='The corresponding related field, if any. This must be a dot-separated list of field names.' string='Related Field'
  • related_field_id Many2one → ir.model.fields
    compute='_compute_related_field_id' ondelete='cascade' store=True string='Related field' args: 'ir.model.fields'
  • relation Char
    help='For relationship fields, the technical name of the target model' string='Related Model'
  • relation_field Char
    help='For one2many fields, the field on the target model that implement the opposite many2one relationship'
  • relation_field_id Many2one → ir.model.fields
    compute='_compute_relation_field_id' ondelete='cascade' store=True string='Relation field' args: 'ir.model.fields'
  • relation_table Char
    help='Used for custom many2many fields to define a custom relation table name'
  • required Boolean
  • 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'
  • translate Boolean
    help='Whether values for this field can be translated (enables the translation mechanism for that field)' string='Translatable'
  • ttype Selection
    required=True selection=FIELD_TYPES string='Field Type'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_get(self)
  • 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 (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 (0)

No new fields.

Public methods (2)
  • unlink(self)
  • write(self, values)

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'
  • module_nr Integer
    compute='_compute_module_nr' string='Number of Apps'
  • name Char
    index=True required=True string='Name' translate=True
  • parent_id Many2one → ir.module.category
    index=True string='Parent Application' args: 'ir.module.category'
  • 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 (29)
  • 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'
  • demo Boolean
    default=False readonly=True args: 'Demo Data'
  • dependencies_id One2many → ir.module.module.dependency
    readonly=True string='Dependencies' args: 'ir.module.module.dependency', 'module_id'
  • description Text
    readonly=True translate=True args: 'Description'
  • description_html Html
    compute='_get_desc' args: 'Description HTML'
  • exclusion_ids One2many → ir.module.module.exclusion
    readonly=True string='Exclusions' args: 'ir.module.module.exclusion', 'module_id'
  • has_iap Boolean
    compute='_compute_has_iap'
  • icon Char
    args: 'Icon URL'
  • icon_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
    index=True readonly=True required=True args: 'Technical Name'
  • published_version Char
    readonly=True args: 'Published Version'
  • reports_by_module Text
    compute='_get_views' store=True string='Reports'
  • sequence Integer
    default=100 args: 'Sequence'
  • shortdesc Char
    readonly=True translate=True args: 'Module Name'
  • state Selection
    default='uninstallable' index=True readonly=True string='Status' args: STATES
  • summary Char
    readonly=True translate=True args: 'Summary'
  • to_buy Boolean
    default=False args: 'Odoo Enterprise Module'
  • url Char
    readonly=True args: 'URL'
  • views_by_module Text
    compute='_get_views' store=True string='Views'
  • website Char
    readonly=True args: 'Website'
Public methods (25)
  • 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_install_cancel(self)
    @assert_log_admin_access
  • button_uninstall(self)
    @assert_log_admin_access
  • button_uninstall_cancel(self)
  • button_uninstall_wizard(self)
    @assert_log_admin_access
    Launch the wizard to uninstall the given module.
  • button_upgrade(self)
    @assert_log_admin_access
  • button_upgrade_cancel(self)
    @assert_log_admin_access
  • check_external_dependencies(cls, module_name, newstate='to install')
    @classmethod
  • create(self, vals)
    @api.model
  • download(self, download=True)
    @assert_log_admin_access
  • downstream_dependencies(self, known_deps=None, exclude_states=('uninstalled', 'uninstallable', 'to remove'))
    @api.returns('self')
    Return the modules that directly or indirectly depend on the modules in `self`, and that satisfy the `exclude_states` filter.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_apps_server(self)
    @api.model
  • get_module_info(cls, name)
    @classmethod
  • get_values_from_terp(terp)
    @staticmethod
  • install_from_urls(self, urls)
    @assert_log_admin_access@api.model
  • module_uninstall(self)
    @assert_log_admin_access
    Perform the various steps required to uninstall a module completely including the deletion of all database structures created by the module: tables, columns, constraints, etc.
  • next(self)
    Return the action linked to an ir.actions.todo is there exists one that should be executed. Otherwise, redirect to /web
  • search_panel_select_range(self, field_name, **kwargs)
    @api.model
  • unlink(self)
  • update_list(self)
    @assert_log_admin_access@api.model
  • upstream_dependencies(self, known_deps=None, exclude_states=('installed', 'uninstallable', 'to remove'))
    @api.returns('self')
    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 (0)

No public methods.

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 (11)
  • company_id Many2one → res.company
    index=True string='Company' args: 'res.company'
  • fields_id Many2one → ir.model.fields
    ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • name Char
    index=True
  • res_id Char
    help='If not set, acts as a default value for new resources' index=True string='Resource'
  • type Selection
    default='many2one' index=True required=True args: [('char', 'Char'), ('float', 'Float'), ('boolean', 'Boolean'), ('integer', 'Integer'), ('text', 'Text'), ('binary', 'Binary'), ('many2one', 'Many2One'), ('date', 'Date'), ('datetime', 'DateTime'), ('selection', 'Selection')]
  • value_binary Binary
    attachment=False
  • value_datetime Datetime
  • value_float Float
  • value_integer Integer
  • value_reference Char
  • value_text Text
Public methods (6)
  • create(self, vals_list)
    @api.model_create_multi
  • get_by_record(self)
  • init(self)
  • search_multi(self, name, model, operator, value)
    @api.model
    Return a domain for the records that match the given condition.
  • unlink(self)
  • write(self, values)

New fields (0)

No new fields.

Public methods (3)
  • compile(self, id_or_xml_id, options)
    @tools.conditional(<expr>, tools.ormcache('id_or_xml_id', 'tuple(options.get(k) for k in self._get_template_cache_keys())'))
  • default_values(self)
    attributes add to the values for each computed template
  • get_asset_bundle(self, xmlid, files, env=None)

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: OrderedDict (attribute name, attribute value).
  • get_available_options(self)
    @api.model
    Get the available option informations. Returns a dict of dict with: * key equal to the option key. * dict: type, params, name, description, default_value * type: 'string' 'integer' 'float' 'model' (e.g. 'res.partner') 'array' 'selection' (e.g. [key1, key2...])
  • 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 (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 (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)
  • record_to_html(self, record, field_name, options)
    @api.model

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

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

New fields (13)
  • active Boolean
    default=True
  • code Char
    string='Sequence Code'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • date_range_ids One2many → ir.sequence.date_range
    string='Subsequences' args: 'ir.sequence.date_range', 'sequence_id'
  • implementation Selection
    default='standard' help="While assigning a sequence number to a record, the 'no gap' sequence implementation ensures that each previous sequence number has been assigned already. While this sequence implementation will not skip any sequence number upon assignment, there can still be gaps in the sequence if records are deleted. The 'no gap' implementation is slower than the standard one." required=True string='Implementation' args: [('standard', 'Standard'), ('no_gap', 'No gap')]
  • name Char
    required=True
  • number_increment Integer
    default=1 help='The next number of the sequence will be incremented by this number' required=True string='Step'
  • number_next Integer
    default=1 help='Next number of this sequence' required=True string='Next Number'
  • number_next_actual Integer
    compute='_get_number_next_actual' help='Next number that will be used. This number can be incremented frequently so the displayed value might already be obsolete' inverse='_set_number_next_actual' string='Actual Next Number'
  • padding Integer
    default=0 help="Odoo will automatically adds some '0' on the left of the 'Next Number' to get the required padding size." required=True string='Sequence Size'
  • prefix Char
    help='Prefix value of the record for the sequence' trim=False
  • suffix Char
    help='Suffix value of the record for the sequence' trim=False
  • use_date_range Boolean
    string='Use subsequences per date_range'
Public methods (8)
  • create(self, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get(self, code)
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by its code. This method is deprecated.
  • get_id(self, sequence_code_or_id, code_or_id='id')
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by the ``sequence_code_or_id`` argument, which can be a code or an id (as controlled by the ``code_or_id`` argument. This method is deprecated.
  • 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, values)

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, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • default_get(self, fields)
    @api.model
  • unlink(self)
  • write(self, values)

New fields (5)
  • col1 Many2one → ir.model.fields
    ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • evaluation_type Selection
    change_default=True default='value' required=True args: [('value', 'Value'), ('reference', 'Reference'), ('equation', 'Python expression')], 'Evaluation Type'
  • resource_ref Reference
    compute='_compute_resource_ref' inverse='_set_resource_ref' selection='_selection_target_model' string='Record'
  • server_id Many2one → ir.actions.server
    ondelete='cascade' string='Related Server Action' args: 'ir.actions.server'
  • value Text
    help='Expression containing a value specification. \nWhen Formula type is selected, this field may be a Python expression that can use the same values as for the code field on the server action.\nIf Value type is selected, the value will be used directly without evaluation.' required=True
Public methods (1)
  • eval_value(self, eval_context=None)

New fields (9)
  • comments Text
    index=True string='Translation comments'
  • lang Selection
    selection='_get_languages' string='Language' validate=False
  • module Char
    help='Module this term belongs to' index=True
  • name Char
    required=True string='Translated field'
  • res_id Integer
    index=True string='Record ID'
  • src Text
    string='Internal Source'
  • state Selection
    default='to_translate' help='Automatically set to let administators find new terms that might need to be translated' string='Status' args: [('to_translate', 'To Translate'), ('inprogress', 'Translation in Progress'), ('translated', 'Translated')]
  • type Selection
    index=True string='Type' args: TRANSLATION_TYPE
  • value Text
    string='Translation Value'
Public methods (12)
  • check(self, mode)
    Check access rights of operation ``mode`` on ``self`` for the current user. Raise an AccessError in case conditions are not met.
  • create(self, vals_list)
    @api.model_create_multi
  • get_field_help(self, model_name)
    @api.model@tools.ormcache_context('model_name', keys=('lang'))
    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@tools.ormcache_context('model_name', 'field_name', keys=('lang'))
    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@tools.ormcache_context('model_name', keys=('lang'))
    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}`
  • get_technical_translations(self, model_name)
    @api.model
    Find the translations for the fields of `model_name` Find the technical translations for the fields of the model, including string, tooltip and available selections. :return: action definition to open the list of available translations
  • get_translations_for_webclient(self, mods, lang)
    @api.model
  • get_web_translations_hash(self, mods, lang)
    @api.model@tools.ormcache('frozenset(mods)', 'lang')
  • insert_missing(self, field, records)
    @api.model
    Insert missing translations for `field` on `records`.
  • translate_fields(self, model, id, field=None)
    @api.model
    Open a view for translating the field(s) of the record (model, id).
  • 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' string='Full Path'
  • groups_id 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 (9)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_user_roots(self)
    @api.model@api.returns('self')
    Return all root menu ids visible for the user. :return: the root menu ids :rtype: list(int)
  • load_menus(self, debug)
    @api.model@tools.ormcache_context('self._uid', 'debug', keys=('lang'))
    Loads all menu items (all applications and their sub-menus). :return: the menu root :rtype: dict('children': menu_nodes)
  • load_menus_root(self)
    @api.model@tools.ormcache_context('self._uid', keys=('lang'))
  • name_get(self)
  • read_image(self, path)
  • unlink(self)
  • write(self, values)

New fields (19)
  • 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'
  • field_parent Char
    string='Child Field'
  • groups_id 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'
  • key Char
  • 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'
  • name Char
    required=True string='View Name'
  • priority Integer
    default=16 required=True string='Sequence'
  • type Selection
    string='View Type' args: [('tree', 'Tree'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('gantt', 'Gantt'), ('kanban', 'Kanban'), ('search', 'Search'), ('qweb', 'QWeb')]
  • xml_id Char
    compute='_compute_xml_id' help='ID of the view defined in xml file' string='External ID'
Public methods (23)
  • apply_inheritance_specs(self, source, specs_tree, pre_locate=<expr>)
    @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 Elepect 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
  • apply_view_inheritance(self, source, model)
    Apply all the (directly and indirectly) inheriting views. :param source: a parent architecture to modify (with parent modifications already applied) :param model: the original model for which we create a view (not necessarily the same as the source's model); only the inheriting views with that specific model will be applied. :return: a modified source where all the modifying architecture are applied
  • clear_cache(self)
    Deprecated, use `clear_caches` instead.
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • 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_inheriting_views_arch(self, model)
    Retrieves the sets of views that should currently be used in the system in the right order. During the module upgrade phase it may happen that a view is present in the database but the fields it relies on are not fully loaded yet. This method only considers views that belong to modules whose code is already loaded. Custom views defined directly in the database are loaded only after the module initialization phase is completely finished. :param str model: model identifier of the inheriting views. :return: list of ir.ui.view
  • get_view_id(self, template)
    @api.model
    Return the view ID corresponding to ``template``, which may be a view ID or an XML ID. Note that this method may be overridden for other kinds of template values. This method could return the ID of something that is not a view (when using fallback to `xmlid_to_res_id`).
  • get_view_xmlid(self)
    @tools.ormcache('self.id')
  • handle_view_error(self, message, *, raise_exception=True, from_exception=None, from_traceback=None)
    Handle a view error by raising an exception or logging a warning, depending on the value of `raise_exception`. :param str message: message to raise or log, augmented with contextual view information :param bool raise_exception: whether to raise an exception (the default) or just log a warning :param BaseException from_exception: when raising an exception, chain it to the provided one (default: disable chaining) :param types.TracebackType from_traceback: when raising an exception, start with this traceback (default: start at exception creation)
  • 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
  • open_translations(self)
    Open a view for editing the translations of field 'arch_db'.
  • postprocess(self, node, current_node_path, editable, name_manager)
    Process the given arch node, which may be the complete arch or some subnode, and fill in the name manager with field information.
  • postprocess_and_fields(self, node, model=None, validate=False)
    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 :param validate: whether the view must be validated :return: a tuple (arch, fields) where arch is the given node as a string and fields is the description of all the fields.
  • read_combined(self, fields=None)
    Utility function to get a view combined with its inherited views. * Gets the top of the view tree if a sub-view is requested * Applies all inherited archs on the root view * Returns the view with all requested fields .. note:: ``arch`` is always added to the fields list even if not requested (similar to ``id``)
  • read_template(self, xml_id)
    @api.model
    This method is deprecated Return a template content based on external id Read access on ir.ui.view required
  • render_public_asset(self, template, values=None)
    @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 (1)
  • name_get(self)

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 (16)
  • default Boolean
    args: 'Default paper format ?'
  • 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 (11)
  • active Boolean
    default=True
  • bic Char
    help='Sometimes called BIC or Swift.' index=True args: 'Bank Identifier Code'
  • city Char
  • country Many2one → res.country
    args: 'res.country'
  • email Char
  • name Char
    required=True
  • phone Char
  • state Many2one → res.country.state
    domain="[('country_id', '=?', country)]" args: 'res.country.state', 'Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (1)
  • name_get(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (30)
  • bank_ids One2many → res.partner.bank
    help='Bank accounts related to this company' string='Bank Accounts' args: 'res.partner.bank', 'company_id'
  • base_onboarding_company_state Selection
    default='not_done' string='State of the onboarding company step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • child_ids One2many → res.company
    string='Child Companies' args: 'res.company', 'parent_id'
  • city Char
    compute='_compute_address' inverse='_inverse_city'
  • company_registry Char
  • country_id Many2one → res.country
    compute='_compute_address' inverse='_inverse_country' string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • email Char
    readonly=False related='partner_id.email' store=True
  • external_report_layout_id Many2one → ir.ui.view
    args: 'ir.ui.view', 'Document Template'
  • favicon Binary
    default=_get_default_favicon help='This field holds the image used to display a favicon for a given company.' string='Company Favicon'
  • font Selection
    default='Lato' args: [('Lato', 'Lato'), ('Roboto', 'Roboto'), ('Open_Sans', 'Open Sans'), ('Montserrat', 'Montserrat'), ('Oswald', 'Oswald'), ('Raleway', 'Raleway')]
  • logo Binary
    default=_get_logo readonly=False related='partner_id.image_1920' string='Company Logo'
  • logo_web Binary
    attachment=False compute='_compute_logo_web' store=True
  • name Char
    readonly=False related='partner_id.name' required=True store=True string='Company Name'
  • paperformat_id Many2one → report.paperformat
    default=<expr> args: 'report.paperformat', 'Paper format'
  • parent_id Many2one → res.company
    index=True string='Parent Company' args: 'res.company'
  • partner_id Many2one → res.partner
    required=True string='Partner' args: 'res.partner'
  • phone Char
    readonly=False related='partner_id.phone' store=True
  • primary_color Char
  • report_footer Text
    help='Footer text displayed at the bottom of all reports.' string='Report Footer' translate=True
  • report_header Text
    help='Appears by default on the top right corner of your printed documents (report header).' string='Company Tagline'
  • secondary_color Char
  • sequence Integer
    default=10 help='Used to order Companies in the company switcher'
  • state_id Many2one → res.country.state
    compute='_compute_address' domain="[('country_id', '=?', country_id)]" inverse='_inverse_state' string='Fed. State' args: 'res.country.state'
  • street Char
    compute='_compute_address' inverse='_inverse_street'
  • street2 Char
    compute='_compute_address' inverse='_inverse_street2'
  • user_ids Many2many → res.users
    string='Accepted Users' args: 'res.users', 'res_company_users_rel', 'cid', 'user_id'
  • vat Char
    readonly=False related='partner_id.vat' string='Tax ID'
  • website Char
    readonly=False related='partner_id.website'
  • zip Char
    compute='_compute_address' inverse='_inverse_zip'
Public methods (11)
  • action_open_base_onboarding_company(self)
    @api.model
    Onboarding step for company basic information.
  • action_save_onboarding_company_step(self)
  • cache_restart(self)
  • copy(self, default=None)
  • create(self, vals)
    @api.model
  • get_and_update_onbarding_state(self, onboarding_state, steps_states)
    Needed to display onboarding animations only one time.
  • init(self)
  • open_company_edit_report(self)
  • set_onboarding_step_done(self, step_name)
  • write(self, values)
  • write_company_and_print_report(self)

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 (5)
  • already_installed(self)
    For each module, check if it's already installed and if it is return its name :returns: a list of the already installed modules in this installer :rtype: [str]
  • default_get(self, fields_list)
    @api.model
    If an addon is already installed, check it by default
  • execute(self)
  • fields_get(self, fields=None, attributes=None)
    @api.model
    If an addon is already installed, set it to readonly as res.config.installer doesn't handle uninstallations of already installed addons
  • modules_to_install(self)
    selects all modules to install: * checked boolean fields * return values of hook methods. Hook methods are of the form ``_if_%(addon_name)s``, and are called if the corresponding addon is marked for installation. They take the arguments cr, uid, ids and context, and return an iterable of addon names * additionals, additionals are setup through the ``_install_if`` class variable. ``_install_if`` is a dict of {iterable:iterable} where key and value are iterables of addon names. If all the addons in the key are selected for installation (warning: addons added through hooks don't count), then the addons in the value are added to the set of modules to install * not already installed

New fields (0)

No new fields.

Public methods (13)
  • cancel(self)
  • copy(self, values)
  • create(self, values)
    @api.model
  • 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.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • 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: --------------- from odoo.addons.base.models.res_config import get_warning_config raise get_warning_config(cr, _("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."), context=context) 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 string: human readable name of the field (e.g.: "Create leads from incoming mails")
  • 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 tuple: - 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)
    Return values for the fields other that `default`, `group` and `module`
  • name_get(self)
    Override name_get method to return an appropriate configuration wizard name, and not the generated name.
  • onchange_module(self, field_value, module_name)
  • set_values(self)
    Set values for the fields other that `default`, `group` and `module`

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

New fields (2)
  • 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 (0)

No public methods.

New fields (3)
  • code Char
    help='The state code.' required=True string='State Code'
  • country_id Many2one → res.country
    required=True string='Country' args: 'res.country'
  • name Char
    help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton' required=True string='State Name'
Public methods (1)
  • name_get(self)

New fields (11)
  • active Boolean
    default=True
  • currency_subunit_label Char
    help='Currency Subunit Name' string='Currency Subunit'
  • currency_unit_label Char
    help='Currency Unit Name' string='Currency Unit'
  • date Date
    compute='_compute_date'
  • decimal_places Integer
    compute='_compute_decimal_places' store=True
  • name Char
    help='Currency Code (ISO 4217)' required=True size=3 string='Currency'
  • position Selection
    default='after' help='Determines where the currency symbol should be placed after or before the amount.' string='Symbol Position' args: [('after', 'After Amount'), ('before', 'Before Amount')]
  • rate Float
    compute='_compute_current_rate' digits=0 help='The rate of the currency to the currency of rate 1.' string='Current Rate'
  • rate_ids One2many → res.currency.rate
    string='Rates' args: 'res.currency.rate', 'currency_id'
  • rounding Float
    default=0.01 digits=(12, 6) string='Rounding Factor'
  • symbol Char
    help='Currency sign, to be used when printing amounts.' required=True
Public methods (6)
  • amount_to_text(self, amount)
  • compare_amounts(self, amount1, amount2)
    Compare ``amount1`` and ``amount2`` after rounding them according to the given currency's precision.. An amount is considered lower/greater than another amount if their rounded value is different. This is not the same as having a non-zero difference! For example 1.432 and 1.431 are equal at 2 digits precision, so this method would return 0. However 0.006 and 0.002 are considered different (returns 1) because they respectively round to 0.01 and 0.0, even though 0.006-0.002 = 0.004 which would be considered zero at 2 digits precision. :param float amount1: first amount to compare :param float amount2: second amount to compare :return: (resp.) -1, 0 or 1, if ``amount1`` is (resp.) lower than, equal to, or greater than ``amount2``, according to ``currency``'s rounding. With the new API, call it like: ``currency.compare_amounts(amount1, amount2)``.
  • compute(self, from_amount, to_currency, round=True)
  • is_zero(self, amount)
    Returns true if ``amount`` is small enough to be treated as zero according to current currency's rounding rules. Warning: ``is_zero(amount1-amount2)`` is not always equivalent to ``compare_amounts(amount1,amount2) == 0``, as the former will round after computing the difference, while the latter will round before, giving different results for e.g. 0.006 and 0.002 at 2 digits precision. :param float amount: amount to compare with currency's zero With the new API, call it like: ``currency.is_zero(amount)``.
  • name_get(self)
  • round(self, amount)
    Return ``amount`` rounded according to ``self``'s rounding rules. :param float amount: the amount to round :return: rounded float

New fields (4)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    ondelete='cascade' readonly=True required=True string='Currency' args: 'res.currency'
  • name Date
    default=fields.Date.context_today index=True required=True string='Date'
  • rate Float
    default=1.0 digits=0 help='The rate of the currency to the currency of rate 1'
Public methods (0)

No public methods.

New fields (11)
  • category_id Many2one → ir.module.category
    index=True string='Application' args: 'ir.module.category'
  • color Integer
    string='Color Index'
  • comment Text
    translate=True
  • full_name Char
    compute='_compute_full_name' search='_search_full_name' string='Group Name'
  • menu_access Many2many → ir.ui.menu
    string='Access Menu' args: 'ir.ui.menu', 'ir_ui_menu_group_rel', 'gid', 'menu_id'
  • model_access One2many → ir.model.access
    copy=True string='Access Controls' args: 'ir.model.access', 'group_id'
  • name Char
    required=True translate=True
  • rule_groups Many2many → ir.rule
    domain=[('global', '=', False)] string='Rules' args: 'ir.rule', 'rule_group_rel', 'group_id', 'rule_group_id'
  • share Boolean
    help='Group created to set access rights for sharing data with some users.' string='Share Group'
  • users Many2many → res.users
    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'
Public methods (2)
  • copy(self, default=None)
  • write(self, vals)

New fields (2)
  • implied_ids Many2many → res.groups
    help='Users of this group automatically inherit those groups' string='Inherits' args: 'res.groups', 'res_groups_implied_rel', 'gid', 'hid'
  • trans_implied_ids Many2many → res.groups
    compute='_compute_trans_implied' string='Transitively inherits' args: 'res.groups'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)

New fields (0)

No new fields.

Public methods (5)
  • create(self, values)
    @api.model
  • get_application_groups(self, domain)
    Return the non-share groups that satisfy ``domain``.
  • get_groups_by_application(self)
    @api.model
    Return all groups classified by application (module category), as a list:: [(app, kind, groups), ...], where ``app`` and ``groups`` are recordsets, and ``kind`` is either ``'boolean'`` or ``'selection'``. Applications are given in sequence order. If ``kind`` is ``'selection'``, ``groups`` are given in reverse implication order.
  • unlink(self)
  • write(self, values)

New fields (14)
  • active Boolean
  • code Char
    help='This field is used to set/get locales for user' required=True string='Locale Code'
  • date_format Char
    default=DEFAULT_DATE_FORMAT required=True string='Date Format'
  • decimal_point Char
    default='.' required=True string='Decimal Separator' trim=False
  • direction Selection
    default='ltr' required=True args: [('ltr', 'Left-to-Right'), ('rtl', 'Right-to-Left')]
  • flag_image Image
    args: 'Image'
  • flag_image_url Char
    compute=_compute_field_flag_image_url
  • grouping Char
    default='[]' help="The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case." required=True string='Separator Format'
  • iso_code Char
    help='This ISO code is the name of po files to use for translations' string='ISO code'
  • name Char
    required=True
  • thousands_sep Char
    default=',' string='Thousands Separator' trim=False
  • time_format Char
    default=DEFAULT_TIME_FORMAT required=True string='Time Format'
  • url_code Char
    help='The Lang Code displayed in the URL' required=True args: 'URL Code'
  • week_start Selection
    default='7' required=True string='First Day of Week' args: [('1', 'Monday'), ('2', 'Tuesday'), ('3', 'Wednesday'), ('4', 'Thursday'), ('5', 'Friday'), ('6', 'Saturday'), ('7', 'Sunday')]
Public methods (10)
  • create(self, vals_list)
    @api.model_create_multi
  • format(self, percent, value, grouping=False, monetary=False)
    Format() will return the language-specific output for float values
  • get_available(self)
    @api.model@tools.ormcache()
    Return the available languages as a list of (code, url_code, name, active) sorted by name.
  • get_installed(self)
    @api.model@tools.ormcache()
    Return the installed languages as a list of (code, name) sorted by name.
  • get_sorted(self)
  • install_lang(self)
    @api.model
    This method is called from odoo/addons/base/data/res_lang_data.xml to load some language and set it as the default for every partners. The language is set via tools.config by the '_initialize_db' method on the 'db' object. This is a fragile solution and something else should be found.
  • load_lang(self, lang, lang_name=None)
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (49)
  • active Boolean
    default=True
  • active_lang_count Integer
    compute='_compute_active_lang_count'
  • bank_ids One2many → res.partner.bank
    string='Banks' args: 'res.partner.bank', 'partner_id'
  • barcode Char
    company_dependent=True copy=False help='Use a barcode to identify this contact.'
  • category_id Many2many → res.partner.category
    column1='partner_id' column2='category_id' default=_default_category string='Tags' args: 'res.partner.category'
  • child_ids One2many → res.partner
    domain=[('active', '=', True)] string='Contact' args: 'res.partner', 'parent_id'
  • city Char
  • color Integer
    default=0 string='Color Index'
  • comment Text
    string='Notes'
  • commercial_company_name Char
    compute='_compute_commercial_company_name' store=True args: 'Company Name Entity'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner' index=True store=True string='Commercial Entity' args: 'res.partner'
  • company_id Many2one → res.company
    index=True args: 'res.company', 'Company'
  • company_name Char
    args: 'Company Name'
  • company_type Selection
    compute='_compute_company_type' inverse='_write_company_type' selection=[('person', 'Individual'), ('company', 'Company')] string='Company Type'
  • contact_address Char
    compute='_compute_contact_address' string='Complete Address'
  • country_id Many2one → res.country
    ondelete='restrict' string='Country' args: 'res.country'
  • credit_limit Float
    string='Credit Limit'
  • date Date
    index=True
  • display_name Char
    compute='_compute_display_name' index=True store=True
  • 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'
  • industry_id Many2one → res.partner.industry
    args: 'res.partner.industry', 'Industry'
  • is_company Boolean
    default=False help='Check if the contact is a company, otherwise it is a person' string='Is a Company'
  • lang Selection
    help='All the emails and documents sent to this contact will be translated in this language.' string='Language' args: _lang_get
  • mobile Char
  • name Char
    index=True
  • parent_id Many2one → res.partner
    index=True string='Related Company' args: 'res.partner'
  • parent_name Char
    readonly=True related='parent_id.name' string='Parent name'
  • partner_latitude Float
    digits=(16, 5) string='Geo Latitude'
  • partner_longitude Float
    digits=(16, 5) string='Geo Longitude'
  • partner_share Boolean
    compute='_compute_partner_share' help='Either customer (not a user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data.' store=True args: 'Share Partner'
  • phone Char
  • ref Char
    index=True string='Reference'
  • same_vat_partner_id Many2one → res.partner
    compute='_compute_same_vat_partner_id' store=False string='Partner with same Tax ID' args: 'res.partner'
  • self Many2one
    comodel_name=_name compute='_compute_get_ids'
  • state_id Many2one → res.country.state
    domain="[('country_id', '=?', country_id)]" ondelete='restrict' string='State' args: 'res.country.state'
  • street Char
  • street2 Char
  • title Many2one → res.partner.title
    args: 'res.partner.title'
  • type Selection
    default='contact' help='Invoice & Delivery addresses are used in sales orders. Private addresses are only visible by authorized users.' string='Address Type' args: [('contact', 'Contact'), ('invoice', 'Invoice Address'), ('delivery', 'Delivery Address'), ('other', 'Other Address'), ('private', 'Private Address')]
  • 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: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
  • user_id Many2one → res.users
    help='The internal user in charge of this contact.' string='Salesperson' args: 'res.users'
  • user_ids One2many → res.users
    auto_join=True string='Users' args: 'res.users', 'partner_id'
  • vat Char
    help='The Tax Identification Number. Complete it if the contact is subjected to government taxes. Used in some legal statements.' index=True string='Tax ID'
  • website Char
    args: 'Website Link'
  • zip Char
    change_default=True
Public methods (18)
  • address_get(self, adr_pref=None)
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_company(self)
  • default_get(self, default_fields)
    @api.model
    Add the company of the parent as default if we are creating a child partner. Also take the parent lang by default if any, otherwise, fallback to default DB lang.
  • find_or_create(self, email, assert_valid_email=False)
    @api.model@api.returns('self', <expr>)
    Find a partner with the given ``email`` or use :py:method:`~.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 boolean assert_valid_email: raise if no valid email is found :return: newly created record
  • get_import_templates(self)
    @api.model
  • main_partner(self)
    @api.model@api.returns('self')
    Return the main partner
  • 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.
  • name_get(self)
  • onchange_company_type(self)
    @api.onchange('company_type')
  • onchange_email(self)
    @api.onchange('email')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • open_commercial_entity(self)
    Utility method used to add an "Open Company" button in partner views
  • open_parent(self)
    Utility method used to add an "Open Parent" button in partner views
  • update_address(self, vals)
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)

New fields (12)
  • acc_holder_name Char
    help='Account holder name, in case it is different than the name of the Account Holder' string='Account Holder Name'
  • acc_number Char
    required=True args: 'Account Number'
  • acc_type Selection
    compute='_compute_acc_type' help='Bank account type: Normal or IBAN. Inferred from the bank account number.' selection=<expr> string='Type'
  • active Boolean
    default=True
  • bank_bic Char
    readonly=False related='bank_id.bic'
  • bank_id Many2one → res.bank
    string='Bank' args: 'res.bank'
  • bank_name Char
    readonly=False related='bank_id.name'
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' readonly=True args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • partner_id Many2one → res.partner
    domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' required=True args: 'res.partner', 'Account Holder'
  • sanitized_acc_number Char
    compute='_compute_sanitized_acc_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
    default=10
Public methods (2)
  • get_supported_account_types(self)
    @api.model
  • retrieve_acc_type(self, acc_number)
    @api.model
    To be overridden by subclasses in order to support other account_types.

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the category without removing it.'
  • child_ids One2many → res.partner.category
    string='Child Tags' args: 'res.partner.category', 'parent_id'
  • color Integer
    default=_get_default_color string='Color Index'
  • name Char
    required=True string='Tag Name' translate=True
  • parent_id Many2one → res.partner.category
    index=True ondelete='cascade' string='Parent Category' args: 'res.partner.category'
  • parent_path Char
    index=True
  • partner_ids Many2many → res.partner
    column1='category_id' column2='partner_id' copy=False string='Partners' args: 'res.partner'
Public methods (1)
  • name_get(self)
    Return the categories' display name, including their direct parent by default. If ``context['partner_category_display']`` is ``'short'``, the short version of the category name (without the direct parent) is used. The default is the long version.

New fields (0)

No new fields.

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 (2)
  • name Char
    required=True string='Title' translate=True
  • shortcut Char
    string='Abbreviation' translate=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (22)
  • 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'
  • companies_count Integer
    compute='_compute_companies_count' string='Number of Companies'
  • company_id Many2one → res.company
    context={'user_preference': True} default=<expr> help='The default company for this user.' required=True string='Company' args: 'res.company'
  • company_ids Many2many → res.company
    default=<expr> string='Companies' args: 'res.company', 'res_company_users_rel', 'user_id', 'cid'
  • email Char
    inherited=True readonly=False related='partner_id.email'
  • groups_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of groups that apply to the current user' args: '# Groups'
  • groups_id Many2many → res.groups
    default=_default_groups string='Groups' args: 'res.groups', 'res_groups_users_rel', 'uid', 'gid'
  • image_1920 Image
    default=_get_default_image inherited=True readonly=False related='partner_id.image_1920'
  • 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 authentication'
  • name Char
    inherited=True readonly=False related='partner_id.name'
  • new_password Char
    compute='_compute_password' help="Specify a value only when creating a user or if you're changing the user's password, otherwise leave empty. After a change of password, the user has to login again." inverse='_set_new_password' string='Set Password'
  • partner_id Many2one → res.partner
    auto_join=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' invisible=True
  • rules_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of record rules that apply to the current user' args: '# Record Rules'
  • share Boolean
    compute='_compute_share' compute_sudo=True help='External user with limited access, created only for the purpose of sharing data.' store=True string='Share User'
  • signature Html
    default='' string='Email Signature'
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
Public methods (23)
  • action_get(self)
    @api.model
  • action_show_accesses(self)
  • action_show_groups(self)
  • action_show_rules(self)
  • authenticate(cls, db, login, password, user_agent_env)
    @classmethod
    Verifies and returns the user ID corresponding to the given ``login`` and ``password`` combination, or False if there was no matching user. :param str db: the database on which user is trying to authenticate :param str login: username :param str password: user password :param dict user_agent_env: environment dictionary describing any relevant environment attributes
  • 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
  • check(cls, db, uid, passwd)
    @classmethod@tools.ormcache('uid', 'passwd')
    Verifies that the given (uid, password) is authorized for the database ``db`` and raise an exception if it is not.
  • check_super(self, passwd)
  • context_get(self)
    @api.model@tools.ormcache('self._uid')
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_company_currency_id(self)
    @api.model
  • has_group(self, group_ext_id)
    @api.model
  • init(self)
  • on_change_login(self)
    @api.onchange('login')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • preference_change_password(self)
  • preference_save(self)
  • read(self, fields=None, load='_classic_read')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • toggle_active(self)
  • unlink(self)
  • write(self, values)

New fields (0)

No new fields.

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

New fields (0)

No new fields.

Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • new(self, values={}, origin=None, ref=None)
    @api.model
  • onchange(self, values, field_name, field_onchange)
  • read(self, fields=None, load='_classic_read')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • write(self, values)

New fields (1)
  • api_key_ids One2many → res.users.apikeys
    string='API Keys' args: 'res.users.apikeys', 'user_id'
Public methods (1)
  • api_key_wizard(self)
    @check_identity

New fields (2)
  • password Char
  • request Char
    groups=fields.NO_ACCESS readonly=True
Public methods (1)
  • run_check(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

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 (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)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Stéphane Bidoul, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Xavier ALT, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Ravi Gohil, Nicolas Martinelli, Yannick Vaucher, Nicolas Lempereur, Thibault Francois, Stefan Rijnhart, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Barad Mahendra, Wolfgang Taferner, Yannick Tivisse, qsm-odoo, Martin Geubelle, Odoo Online, Nicolas Seinlet, Pierre Masereel, Romain Derie, Laurent Smet, Jigar Patel, jem-odoo, Adrien Dieudonne, RomainLibert, Christophe Monniez, Jorge Pinna Puissant, Nans Lefebvre, Johan Demaret Rivarola, Alexandre Kühn, Toufik Ben Jaa, Nicolas Vannieuwerburgh, Arnold Moyaux, Laurent Mignon (ACSONE), Adrian Torres, wan, mreficent, XavierDo, Julien Castiaux, Priyanka Kakadiya, Xavier-Do, Romeo Fragomeli, jvm-odoo, Thomas Dieuzeide, Luis Torres, Victor Feyens, Andrea Grazioso (agr-odoo), Paul Morelle, Loan (lse), William Henrotin, Sébastien Theys, Shreya Modi, Joseph Caburnay, Nasreddin (bon), alt-odoo, oco-odoo, Julien Mougenot, Jason Van Malder, Vincent Schippefilt, fw-bot, Anh Thao Pham (pta), Stéphane Bidoul (ACSONE), Katherine Zaoral, Debauche Stéphane, Alvaro Fuentes, std-odoo, Achraf (abz), Lucas Lefèvre, Adrien Widart, Ivan Yelizariev, Naglis Jonaitis, Nasreddin Boulif (bon), Touati Djamel (otd), Prakash Prajapati, Nicolas Galler, nie, Andrius Laukavičius, Thanh Dodeur, fja-odoo, ThanhDodeurOdoo, Pierre Paridans, Kamen Zhekov, Djamel (otd), Parth Choksi, Yenthe666, jbm-odoo, shreya thakrar, William Braeckman, Kevin Baptiste, Pratima Gupta, Pierre Verkest, Raf Geens, Mathias Markl, Luce Pasquini, Hubert Van de Walle (huvw), Hardik Prajapati, qmo-odoo, Ahmad Khanalizadeh, Geoffroy Larue, Laurent Desausoi (lade), mcm-odoo, Mitali Patel, Jigar Vaghela, Paolo (pgi), Florian Damhaut, Hetal Dhanak, Merlin (megu), william, Florian Vranckx, Sapan Zaveri, Daniel Blanco, Abdelouahab (abla), MaxLarue, Aurelien van Delft (avd), Mathieu Walravens, Julien Banken, niyasraphy, jbw-odoo, Jose Lopez, nda-odoo, Kirti Choudhary
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

Views touched (172)
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.tree ir.actions.report tree 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.tree ir.actions.actions tree New
base_onboarding_company_form base.company.onboarding.form res.company form Inherits base.view_company_form
base_partner_merge_automatic_wizard_form base.partner.merge.automatic.wizard.form base.partner.merge.automatic.wizard form New
change_password_wizard_user_tree_view Change Password Users change.password.user tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
contact_name contact_name ir.ui.view qweb New
demo_failures_dialog Demo Failure Dialog ir.demo_failure.wizard form New
demo_force_install_form ir.demo.form ir.demo form New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access.view.tree ir.model.access tree New
ir_access_view_tree_edition ir.model.access.view.tree.edition ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree 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 tree 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 tree view ir.default tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
layout_preview layout preview ir.ui.view qweb New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Apps Kanban ir.module.module kanban New
onboarding_company_step onboarding_company_step ir.ui.view qweb New
onboarding_confetti onboarding_confetti ir.ui.view qweb New
onboarding_container onboarding_container ir.ui.view qweb New
onboarding_step onboarding_step 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 tree New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_bank_view_search res.bank.view.search res.bank search New
res_config_installer Inheritable view for installer objects res.config.installer form 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_lang_form res.lang.form res.lang form New
res_lang_search res.lang.search res.lang search New
res_lang_tree res.lang.tree res.lang tree 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 tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_partner_view_form_private res.partner.view.form.private res.partner 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 tree New
user_groups_view res.users.groups res.users form Inherits view_users_form
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree New
view_base_document_layout Document Layout base.document.layout form 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_company_form res.company.form res.company form New
view_company_tree res.company.tree res.company tree 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.tree res.country.group tree 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.tree res.country.state tree New
view_country_tree res.country.tree res.country tree 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.tree res.currency.rate tree New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_decimal_precision_form Decimal Precision decimal.precision form New
view_decimal_precision_tree Decimal Precision List decimal.precision tree New
view_groups_form res.groups.form res.groups form 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 tree New
view_ir_config_search ir.config_parameter search New
view_ir_mail_server_search ir.mail_server search New
view_menu ir.ui.menu.tree ir.ui.menu tree New
view_model_constraint_form ir.model.constraint form New
view_model_constraint_list ir.model.constraint tree New
view_model_data_form ir.model.data form New
view_model_data_list ir.model.data tree 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 tree New
view_model_fields_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree 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.tree res.partner.bank tree New
view_partner_category_form Contact Tags res.partner.category form New
view_partner_category_list Contact Tags res.partner.category tree New
view_partner_form res.partner.form res.partner form New
view_partner_short_form res.partner.form res.partner form New
view_partner_simple_form res.partner.simplified.form res.partner form New
view_partner_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_company_kanban res.company.kanban res.company kanban New
view_res_partner_filter res.partner.select res.partner search New
view_res_users_kanban res.users.kanban res.users kanban New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree New
view_translation_dialog_tree ir.translation tree New
view_translation_form ir.translation form New
view_translation_lang_src_value_tree ir.translation tree New
view_translation_lang_value_tree ir.translation tree New
view_translation_search ir.translation search New
view_translation_tree ir.translation tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
wizard_lang_export Export Translations base.language.export form New
wizard_update_translations Generate Missing Terms base.update.translations form New
HTTP endpoints (3)
Route(s)HandlerAuthTypeMethodsFlags
/jsonrpc RPC.jsonrpc none json ALL
/xmlrpc/<service> RPC.xmlrpc_1 none http POST csrf off
/xmlrpc/2/<service> RPC.xmlrpc_2 none http POST csrf off
Models touched (110)

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 (15)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • custom_colors Boolean
    compute='_compute_custom_colors' readonly=False
  • external_report_layout_id Many2one
    readonly=False related='company_id.external_report_layout_id'
  • font Selection
    readonly=False related='company_id.font'
  • logo Binary
    readonly=False related='company_id.logo'
  • logo_primary_color Char
    compute='_compute_logo_colors'
  • logo_secondary_color Char
    compute='_compute_logo_colors'
  • paperformat_id Many2one
    readonly=False related='company_id.paperformat_id'
  • preview Html
    compute='_compute_preview'
  • preview_logo Binary
    related='logo' string='Preview logo'
  • primary_color Char
    readonly=False related='company_id.primary_color'
  • report_footer Text
    readonly=False related='company_id.report_footer'
  • report_header Text
    readonly=False related='company_id.report_header'
  • report_layout_id Many2one → report.layout
    args: 'report.layout'
  • secondary_color Char
    readonly=False related='company_id.secondary_color'
Public methods (2)
  • action_open_base_document_layout(self, action_ref=None)
    @api.model
  • document_layout_save(self)

New fields (6)
  • data Binary
    attachment=False readonly=True args: 'File'
  • format Selection
    default='csv' 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
  • 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 size=6 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)
  • lang Selection
    default=_default_language required=True string='Language' args: _get_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'
  • state Selection
    default='init' readonly=True string='Status' args: [('init', 'init'), ('done', 'done')]
Public methods (2)
  • lang_install(self)
  • reload(self)

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

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

New fields (1)
  • module_info Text
    default=_default_module_info readonly=True args: 'Apps to Update'
Public methods (5)
  • config(self)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_module_list(self)
    @api.model@api.returns('ir.module.module')
  • 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
    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 (1)
  • lang Selection
    required=True args: _get_languages, 'Language'
Public methods (1)
  • act_update(self)

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

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

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

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • image_1024 Image
    max_height=1024 max_width=1024 related='image_1920' store=True args: 'Image 1024'
  • image_128 Image
    max_height=128 max_width=128 related='image_1920' store=True args: 'Image 128'
  • image_1920 Image
    max_height=1920 max_width=1920 args: 'Image'
  • image_256 Image
    max_height=256 max_width=256 related='image_1920' store=True args: 'Image 256'
  • image_512 Image
    max_height=512 max_width=512 related='image_1920' store=True args: 'Image 512'
Public methods (0)

No public methods.

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

No public methods.

New fields (17)
  • 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'
  • filter Boolean
  • groups_id 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'
  • name Char
    string='Action Name' translate=True
  • 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 Text
    compute='_compute_search_view'
  • 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'), ('inline', 'Inline Edit'), ('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='tree,form' help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)" required=True
  • views Binary
    compute='_compute_views' help='This function field computes the ordered list of views that should be enabled when displaying the result of an action, federating view mode, views and reference view. The result is returned as an ordered list of pairs (view_id,view_mode).'
Public methods (5)
  • create(self, vals_list)
    @api.model_create_multi
  • exists(self)
  • for_xml_id(self, module, xml_id)
    @api.model
    Returns the act_window object created for the provided xml_id :param module: the module the act_window originates in :param xml_id: the namespace-less id of the action (the @id attribute from the XML file) :return: A read() view of the ir.actions.act_window
  • read(self, fields=None, load='_classic_read')
    call the method get_empty_list_help of the model and set the window action help message
  • unlink(self)

New fields (5)
  • act_window_id Many2one → ir.actions.act_window
    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 (7)
  • binding_model_id Many2one → ir.model
    help='Setting a value makes this action available in the sidebar for the given model.' ondelete='cascade' args: 'ir.model'
  • binding_type Selection
    default='action' required=True args: [('action', 'Action'), ('report', 'Report')]
  • binding_view_types Char
    default='list,form'
  • help Html
    help='Optional help text for the users with a description of the target view, such as its usage and purpose.' string='Action Description' translate=True
  • name Char
    required=True
  • type Char
    required=True string='Action Type'
  • xml_id Char
    compute='_compute_xml_id' string='External ID'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_bindings(self, model_name)
    @api.model@tools.ormcache('frozenset(self.env.user.groups_id.ids)', 'model_name')
    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 which are related to actions which will be deleted. NOTE: ondelete cascade will not work on ir.actions.actions so we will need to do it manually.
  • write(self, vals)

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

No public methods.

New fields (14)
  • attachment Char
    help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.' string='Save as Attachment Prefix'
  • attachment_use Boolean
    help='If you check this, then the second time the user prints with same attachment name, it returns the previous report.' string='Reload from Attachment'
  • binding_type Selection
    default='report'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_report_rel', 'uid', 'gid'
  • model Char
    required=True string='Model Name'
  • model_id Many2one → ir.model
    compute='_compute_model_id' search='_search_model_id' string='Model' args: 'ir.model'
  • multi Boolean
    help='If set to true, the action will not be displayed on the right toolbar of a form view.' string='On Multiple Doc.'
  • name Char
    translate=True
  • paperformat_id Many2one → report.paperformat
    args: 'report.paperformat', 'Paper Format'
  • print_report_name Char
    help="This is the filename of the report going to download. Keep empty to not change the report filename. You can use a python expression with the 'object' and 'time' variables." translate=True args: 'Printed Report Name'
  • report_file Char
    help='The path to the main report file (depending on Report Type) or empty if the content is in another field' readonly=False required=False store=True string='Report File'
  • report_name Char
    help="For QWeb reports, name of the template used in the rendering. The method 'render_html' of the model 'report.template_name' will be called (if any) to give the html. For RML reports, this is the LocalService name." required=True string='Template Name'
  • report_type Selection
    default='qweb-pdf' help='The type of the report that will be rendered, each one having its own rendering method. HTML means the report will be opened directly in your browser PDF means the report will be rendered using Wkhtmltopdf and downloaded by the user.' required=True args: [('qweb-html', 'HTML'), ('qweb-pdf', 'PDF'), ('qweb-text', 'Text')]
  • type Char
    default='ir.actions.report'
Public methods (14)
  • 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_paperformat(self)
    @api.model
  • get_wkhtmltopdf_state(self)
    @api.model
    Get the current state of wkhtmltopdf: install, ok, upgrade, workers or broken. * install: Starting state. * upgrade: The binary is an older version (< 0.12.0). * ok: A binary was found with a recent version (>= 0.12.0). * workers: Not enough workers found to perform the pdf rendering process (< 2 workers). * broken: A binary was found but not responding. :return: wkhtmltopdf_state
  • postprocess_pdf_report(self, record, buffer)
    Hook to handle post processing during the pdf report generation. The basic behavior consists to create a new attachment containing the pdf base64 encoded. :param record_id: The record that will own the attachment. :param pdf_content: The optional name content of the file to avoid reading both times. :return: A modified buffer if the previous one has been modified, None otherwise.
  • render(self, res_ids, data=None)
  • render_qweb_html(self, docids, data=None)
    @api.model
    This method generates and returns html version of a report.
  • render_qweb_pdf(self, res_ids=None, data=None)
  • render_qweb_text(self, docids, data=None)
    @api.model
  • render_template(self, template, values=None)
    Allow to render a QWeb template python-side. This function returns the 'ir.ui.view' render but embellish it with some variables/methods used in reports. :param values: additionnal methods/variables used in the rendering :returns: html representation of the template
  • report_action(self, docids, data=None, config=True)
    Return an action of type ir.actions.report. :param docids: id/ids/browserecord of the records to print (if not used, pass an empty list) :param report_name: Name of the template to generate an action for
  • retrieve_attachment(self, record)
    Retrieve an attachment for a specific record. :param record: The record owning of the attachment. :param attachment_name: The optional name of the attachment. :return: A recordset of length <=1 or None
  • unlink_action(self)
    Remove the contextual actions created for the reports.

New fields (14)
  • child_ids Many2many → ir.actions.server
    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', 'rel_server_actions', 'server_id', 'action_id'
  • code Text
    default=DEFAULT_PYTHON_CODE 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
    help='Model for record creation / update. Set this field only to specify a different model than the base model.' string='Create/Write Target Model' args: 'ir.model'
  • crud_model_name Char
    readonly=True related='crud_model_id.model' string='Target Model'
  • fields_lines One2many → ir.server.object.lines
    copy=True string='Value Mapping' args: 'ir.server.object.lines', 'server_id'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'ir_act_server_group_rel', 'act_id', 'gid'
  • link_field_id Many2one → ir.model.fields
    help='Provide the field used to link the newly created record on the record on used by the server action.' string='Link using field' args: 'ir.model.fields'
  • model_id Many2one → ir.model
    help='Model on which the server action runs.' ondelete='cascade' required=True string='Model' args: 'ir.model'
  • model_name Char
    readonly=True related='model_id.model' store=True string='Model Name'
  • name Char
    string='Action Name' translate=True
  • sequence Integer
    default=5 help='When dealing with multiple actions, the execution order is based on the sequence. Low number means high priority.'
  • state Selection
    default='object_write' help="Type of server action. The following values are available:\n- 'Execute Python Code': a block of python code that will be executed\n- 'Create': create a new record with new values\n- 'Update a Record': update the values of a record\n- 'Execute several actions': define an action that triggers several other server actions\n- 'Send Email': automatically send an email (Discuss)\n- 'Add Followers': add followers to a record (Discuss)\n- 'Create Next Activity': create an activity (Discuss)" required=True string='Action To Do' args: [('code', 'Execute Python Code'), ('object_create', 'Create a new Record'), ('object_write', 'Update the Record'), ('multi', 'Execute several actions')]
  • type Char
    default='ir.actions.server'
  • usage Selection
    default='ir_actions_server' required=True string='Usage' args: [('ir_actions_server', 'Server Action'), ('ir_cron', 'Scheduled Action')]
Public methods (7)
  • create_action(self)
    Create a contextual action for each server action.
  • run(self)
    Runs the server action. For each server action, the run_action_<STATE> method is called. This allows easy overriding of the server actions. :param dict context: context should contain following keys - active_id: id of the current object (single mode) - active_model: current model that should equal the action's model The following keys are optional: - active_ids: 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
  • run_action_code_multi(self, action, eval_context=None)
    @api.model
  • run_action_multi(self, action, eval_context=None)
    @api.model
  • run_action_object_create(self, action, eval_context=None)
    @api.model
    Create specified model object with specified values. If applicable, link active_id.<self.link_field_id> to the new record.
  • run_action_object_write(self, action, eval_context=None)
    @api.model
    Apply specified write changes to active_id.
  • unlink_action(self)
    Remove the contextual actions created for the server actions.

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 (7)
  • 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
  • name_get(self)
  • unlink(self)
  • write(self, vals)

New fields (18)
  • access_token Char
    groups='base.group_user' args: 'Access Token'
  • checksum Char
    index=True readonly=True size=40 args: 'Checksum/SHA1'
  • company_id Many2one → res.company
    change_default=True default=<expr> string='Company' args: 'res.company'
  • datas Binary
    compute='_compute_datas' inverse='_inverse_datas' string='File Content'
  • db_datas Binary
    attachment=False args: 'Database Data'
  • description Text
    args: 'Description'
  • file_size Integer
    readonly=True args: 'File Size'
  • index_content Text
    prefetch=False readonly=True args: 'Indexed Content'
  • mimetype Char
    readonly=True args: 'Mime Type'
  • name Char
    required=True args: 'Name'
  • public Boolean
    args: 'Is public document'
  • res_field Char
    readonly=True args: 'Resource Field'
  • res_id Many2oneReference
    help='The record id this is attached to.' model_field='res_model' readonly=True args: 'Resource ID'
  • res_model Char
    help='The database object this attachment will be attached to.' readonly=True args: 'Resource Model'
  • res_name Char
    compute='_compute_res_name' args: 'Resource Name'
  • store_fname Char
    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=True size=1024 args: 'Url'
Public methods (12)
  • action_get(self)
    @api.model
  • check(self, mode, values=None)
    @api.model
    Restricts the access to an ir.attachment, according to referred model In the 'document' module, it is overridden to relax this hard rule, since more complex ones apply there.
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • force_storage(self)
    @api.model
    Force all attachments to be stored in the currently configured storage
  • generate_access_token(self)
  • get_attachment_by_key(self, key, extra_domain=None, order=None)
    @api.model
  • get_serve_attachment(self, url, extra_domain=None, extra_fields=None, order=None)
    @api.model
  • 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.
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Override read_group to add res_field=False in domain if not present.
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • power_on(self, *args, **kwargs)
    @api.model

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

New fields (11)
  • active Boolean
    default=True
  • cron_name Char
    readonly=False related='ir_actions_server_id.name' store=True args: 'Name'
  • doall Boolean
    help='Specify if missed occurrences should be executed when the server restarts.' string='Repeat Missed'
  • interval_number Integer
    default=1 help='Repeat every x.'
  • interval_type Selection
    default='months' string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • ir_actions_server_id Many2one → ir.actions.server
    delegate=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'
  • numbercall Integer
    default=1 help='How many times the method is called,\na negative number indicates no limit.' string='Number of Calls'
  • priority Integer
    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)
  • create(self, values)
    @api.model
  • default_get(self, fields_list)
    @api.model
  • method_direct_trigger(self)
  • toggle(self, model, domain)
    @api.model
  • try_write(self, values)
  • unlink(self)
  • write(self, vals)

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 (8)
  • 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.
  • get(self, model_name, field_name, user_id=False, company_id=False, condition=False)
    @api.model
    Return the default value for the given field, user and company, or ``None`` if no default is available. :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'``.
  • get_model_defaults(self, model_name, condition=False)
    @api.model@tools.ormcache('self.env.uid', 'self.env.company.id', 'model_name', 'condition')
    Return the available default values for the given model (for the current user), as a dict mapping field names to 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 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 (3)
  • export_fields One2many → ir.exports.line
    copy=True string='Export ID' args: 'ir.exports.line', 'export_id'
  • name Char
    string='Export Name'
  • resource Char
    index=True
Public methods (0)

No public methods.

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

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • db_id_for(self, model, field, subfield, value)
    @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_get/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 context: OpenERP request context :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)
    @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.osv.orm.Model.write` expects. :param model: :class:`odoo.osv.orm.Model` for the conversion base :returns: a converter callable :rtype: (record: dict, logger: (field, error) -> None) -> dict
  • to_field(self, model, field, fromtype=str)
    @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 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 context: odoo request context :return: a function (fromtype -> field.write_type), if a converter is found :rtype: Callable | None

New fields (9)
  • 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
  • is_default Boolean
    string='Default Filter'
  • model_id Selection
    required=True selection='_list_all_models' string='Model'
  • name Char
    required=True string='Filter Name' translate=True
  • sort Text
    default='[]' required=True
  • user_id Many2one → res.users
    help='The user this filter is private to. When left empty the filter is public and available to all users.' ondelete='cascade' string='User' args: 'res.users'
Public methods (3)
  • copy(self, default=None)
  • create_or_replace(self, vals)
    @api.model@api.returns('self', <expr>)
  • get_filters(self, model, action_id=None)
    @api.model
    Obtain the list of filters available for the user on the given model. :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_id`` (m2o tuple), ``action_id`` (m2o tuple) and ``context`` of the matching ``ir.filters``.

New fields (0)

No new fields.

Public methods (2)
  • binary_content(self, xmlid=None, model='ir.attachment', id=None, field='datas', unique=False, filename=None, filename_field='name', download=False, mimetype=None, default_mimetype='application/octet-stream', access_token=None)
    Get file, attachment or downloadable content If the ``xmlid`` and ``id`` parameter is omitted, fetches the default value for the binary field (via ``default_get``), otherwise fetches the field for that precise record. :param str xmlid: xmlid of the record :param str model: name of the model to fetch the binary from :param int id: id of the record from which to fetch the binary :param str field: binary field :param bool unique: add a max-age for the cache control :param str filename: choose a filename :param str filename_field: if not create an filename with model-id-field :param bool download: apply headers to download the file :param str mimetype: mintype of the field (for headers) :param str default_mimetype: default mintype if no mintype found :param str access_token: optional token for unauthenticated access only available for ir.attachment :returns: (status, headers, content)
  • routing_map(cls, key=None)
    @classmethod

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 (9)
  • active Boolean
    default=True
  • name Char
    index=True required=True string='Description'
  • 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_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)' required=True string='Connection Security' args: [('none', 'None'), ('starttls', 'TLS (STARTTLS)'), ('ssl', 'SSL/TLS')]
  • smtp_host Char
    help='Hostname or IP of SMTP server' required=True 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.' required=True string='SMTP Port'
  • smtp_user Char
    groups='base.group_system' help='Optional username for SMTP authentication' string='Username'
Public methods (4)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
    Constructs an RFC2822 email.message.Message object based on the keyword arguments passed, and returns it. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) :param string body: email body, of the type ``subtype`` (by default, plaintext). If html subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative, unless an explicit ``body_alternative`` version is passed. :param string body_alternative: optional alternative body, of the type specified in ``subtype_alternative`` :param string reply_to: optional value of Reply-To header :param string object_id: optional tracking identifier, to be included in the message-id for recognizing replies. Suggested format for object-id is "res_id-model", e.g. "12345-crm.lead". :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), must match the format of the ``body`` parameter. Default is 'plain', making the content part of the mail "text/plain". :param string subtype_alternative: optional mime subtype of ``body_alternative`` (usually 'plain' or 'html'). Default is 'plain'. :param list attachments: list of (filename, filecontents) pairs, where filecontents is a string containing the bytes of the attachment :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) :param dict headers: optional map of headers to set on the outgoing mail (may override the other headers, including Subject, Reply-To, Message-Id, etc.) :rtype: email.message.Message (usually MIMEMultipart) :return: the new RFC2822 email message
  • connect(self, host=None, port=None, user=None, password=None, encryption=None, smtp_debug=False, mail_server_id=None)
    Returns a new SMTP connection to the given SMTP server. When running in test mode, this method does nothing and returns `None`. :param host: host or IP of SMTP server to connect to, if mail_server_id not passed :param int port: SMTP port to connect to :param user: optional username to authenticate with :param password: optional password to authenticate with :param string encryption: optional, ``'ssl'`` | ``'starttls'`` :param bool smtp_debug: toggle debugging of SMTP sessions (all i/o will be output in logs) :param mail_server_id: ID of specific mail server to use (overrides other parameters)
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=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' or 'ssl' (see ir.mail_server fields for explanation) :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_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)

New fields (12)
  • access_ids One2many → ir.model.access
    string='Access' args: 'ir.model.access', 'model_id'
  • count Integer
    compute='_compute_count' help='Total number of records in this model' string='Count (Incl. Archived)'
  • field_id One2many → ir.model.fields
    copy=True default=_default_field_id required=True string='Fields' args: 'ir.model.fields', 'model_id'
  • 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_' index=True 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
  • rule_ids One2many → ir.rule
    string='Record Rules' args: 'ir.rule', 'model_id'
  • state Selection
    default='manual' readonly=True string='Type' args: [('manual', 'Custom Object'), ('base', 'Base Object')]
  • transient Boolean
    string='Transient Model'
  • view_ids One2many → ir.ui.view
    compute='_view_ids' string='Views' args: 'ir.ui.view'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_create(self, name)
    @api.model
    Infer the model from the name. E.g.: 'My New Model' should become 'x_my_new_model'.
  • unlink(self)
  • write(self, vals)

New fields (8)
  • active Boolean
    default=True help='If you uncheck the active field, it will disable the ACL without deleting it (if you delete a native ACL, it will be re-created when you reload the module).'
  • group_id Many2one → res.groups
    index=True ondelete='cascade' string='Group' args: 'res.groups'
  • model_id Many2one → ir.model
    domain=[('transient', '=', False)] index=True ondelete='cascade' required=True string='Object' args: 'ir.model'
  • name Char
    index=True required=True
  • perm_create Boolean
    string='Create Access'
  • perm_read Boolean
    string='Read Access'
  • perm_unlink Boolean
    string='Delete Access'
  • perm_write Boolean
    string='Write Access'
Public methods (10)
  • call_cache_clearing_methods(self)
    @api.model
  • check(self, model, mode='read', raise_exception=True)
    @api.model@tools.ormcache_context('self.env.uid', 'self.env.su', 'model', 'mode', 'raise_exception', keys=('lang'))
  • check_group(self, model, mode, group_ids)
    @api.model
    Check if a specific group has the access mode to the specified model
  • check_groups(self, group)
    @api.model
    Check whether the current user has the given group.
  • create(self, vals_list)
    @api.model_create_multi
  • group_names_with_access(self, model_name, access_mode)
    @api.model
    Return the names of visible groups which have been granted ``access_mode`` on the model ``model_name``. :rtype: list
  • register_cache_clearing_method(cls, model, method)
    @classmethod
  • unlink(self)
  • unregister_cache_clearing_method(cls, model, method)
    @classmethod
  • write(self, values)

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

New fields (9)
  • complete_name Char
    compute='_compute_complete_name' string='Complete ID'
  • date_init Datetime
    default=fields.Datetime.now string='Init Date'
  • date_update Datetime
    default=fields.Datetime.now string='Update Date'
  • 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 Integer
    help='ID of the target record in the database' string='Record ID'
Public methods (10)
  • 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)
  • get_object(self, module, xml_id)
    @api.model
    Returns a browsable record for the given module name and xml_id. If not found, raise a ValueError or return None, depending on the value of `raise_exception`.
  • get_object_reference(self, module, xml_id)
    @api.model
    Returns (model, res_id) corresponding to a given module and xml_id (cached) or raise ValueError if not found
  • name_get(self)
  • 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.
  • xmlid_lookup(self, xmlid)
    @api.model@tools.ormcache('xmlid')
    Low level xmlid lookup Return (id, res_model, res_id) or raise ValueError if not found
  • xmlid_to_object(self, xmlid, raise_if_not_found=False)
    @api.model
    Return a Model object, or ``None`` if ``raise_if_not_found`` is set
  • xmlid_to_res_id(self, xmlid, raise_if_not_found=False)
    @api.model
    Returns res_id
  • xmlid_to_res_model_res_id(self, xmlid, raise_if_not_found=False)
    @api.model
    Return (res_model, res_id)

New fields (32)
  • 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'
  • complete_name Char
    index=True
  • 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
    help='Whether the value is copied when duplicating a record.' string='Copied'
  • 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
  • groups Many2many → res.groups
    args: 'res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id'
  • help Text
    string='Field Help' translate=True
  • index Boolean
    string='Indexed'
  • model Char
    help='The technical name of the model this field belongs to' index=True required=True string='Object 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'
  • 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='Object Relation'
  • relation_field Char
    help='For one2many fields, the field on the target model that implement the opposite many2one relationship'
  • relation_field_id Many2one → ir.model.fields
    compute='_compute_relation_field_id' ondelete='cascade' store=True string='Relation field' args: 'ir.model.fields'
  • relation_table Char
    help='Used for custom many2many fields to define a custom relation table name'
  • required Boolean
  • 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'
  • translate Boolean
    help='Whether values for this field can be translated (enables the translation mechanism for that field)' string='Translatable'
  • ttype Selection
    required=True selection=FIELD_TYPES string='Field Type'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_get(self)
  • 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 (5)
  • create_date Datetime
  • model Many2one → ir.model
    index=True required=True args: 'ir.model'
  • module Many2one → ir.module.module
    index=True 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 (0)

No new fields.

Public methods (2)
  • unlink(self)
  • write(self, values)

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'
  • module_nr Integer
    compute='_compute_module_nr' string='Number of Apps'
  • name Char
    index=True required=True string='Name' translate=True
  • parent_id Many2one → ir.module.category
    index=True string='Parent Application' args: 'ir.module.category'
  • 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 (28)
  • 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'
  • 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'
  • icon Char
    args: 'Icon URL'
  • 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
    index=True readonly=True required=True args: 'Technical Name'
  • published_version Char
    readonly=True args: 'Published Version'
  • reports_by_module Text
    compute='_get_views' store=True string='Reports'
  • sequence Integer
    default=100 args: 'Sequence'
  • shortdesc Char
    readonly=True translate=True args: 'Module Name'
  • state Selection
    default='uninstallable' index=True readonly=True string='Status' args: STATES
  • summary Char
    readonly=True translate=True args: 'Summary'
  • to_buy Boolean
    default=False args: 'Odoo Enterprise Module'
  • url Char
    readonly=True args: 'URL'
  • views_by_module Text
    compute='_get_views' store=True string='Views'
  • website Char
    readonly=True args: 'Website'
Public methods (24)
  • 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_install_cancel(self)
    @assert_log_admin_access
  • button_uninstall(self)
    @assert_log_admin_access
  • button_uninstall_cancel(self)
  • button_uninstall_wizard(self)
    @assert_log_admin_access
    Launch the wizard to uninstall the given module.
  • button_upgrade(self)
    @assert_log_admin_access
  • button_upgrade_cancel(self)
    @assert_log_admin_access
  • check_external_dependencies(cls, module_name, newstate='to install')
    @classmethod
  • create(self, vals)
    @api.model
  • download(self, download=True)
    @assert_log_admin_access
  • downstream_dependencies(self, known_deps=None, exclude_states=('uninstalled', 'uninstallable', 'to remove'))
    @api.returns('self')
    Return the modules that directly or indirectly depend on the modules in `self`, and that satisfy the `exclude_states` filter.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_apps_server(self)
    @api.model
  • get_module_info(cls, name)
    @classmethod
  • get_values_from_terp(terp)
    @staticmethod
  • install_from_urls(self, urls)
    @assert_log_admin_access@api.model
  • 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
  • unlink(self)
  • update_list(self)
    @assert_log_admin_access@api.model
  • upstream_dependencies(self, known_deps=None, exclude_states=('installed', 'uninstallable', 'to remove'))
    @api.returns('self')
    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 (0)

No public methods.

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 (11)
  • company_id Many2one → res.company
    index=True string='Company' args: 'res.company'
  • fields_id Many2one → ir.model.fields
    index=True ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • name Char
    index=True
  • res_id Char
    help='If not set, acts as a default value for new resources' index=True string='Resource'
  • type Selection
    default='many2one' index=True required=True args: [('char', 'Char'), ('float', 'Float'), ('boolean', 'Boolean'), ('integer', 'Integer'), ('text', 'Text'), ('binary', 'Binary'), ('many2one', 'Many2One'), ('date', 'Date'), ('datetime', 'DateTime'), ('selection', 'Selection')]
  • value_binary Binary
    attachment=False
  • value_datetime Datetime
  • value_float Float
  • value_integer Integer
  • value_reference Char
  • value_text Text
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
  • get(self, name, model, res_id=False)
    @api.model
  • get_by_record(self)
  • get_multi(self, name, model, ids)
    @api.model
    Read the property field `name` for the records of model `model` with the given `ids`, and return a dictionary mapping `ids` to their corresponding value.
  • search_multi(self, name, model, operator, value)
    @api.model
    Return a domain for the records that match the given condition.
  • set_multi(self, name, model, values, default_value=None)
    @api.model
    Assign the property field `name` for the records of model `model` with `values` (dictionary mapping record ids to their value). If the value for a given record is the same as the default value, the property entry will not be stored, to avoid bloating the database. If `default_value` is provided, that value will be used instead of the computed default value, to determine whether the value for a record should be stored or not.
  • unlink(self)
  • write(self, values)

New fields (0)

No new fields.

Public methods (5)
  • compile(self, id_or_xml_id, options)
    @tools.conditional(<expr>, tools.ormcache('id_or_xml_id', 'tuple(options.get(k) for k in self._get_template_cache_keys())'))
  • default_values(self)
    attributes add to the values for each computed template
  • get_asset_bundle(self, xmlid, files, env=None)
  • load(self, name, options)
  • render(self, id_or_xml_id, values=None, **options)
    @api.model
    render(id_or_xml_id, values, **options) Render the template specified by the given name. :param id_or_xml_id: name or etree (see get_template) :param dict values: template values to be used for rendering :param options: used to compile the template (the dict available for the rendering is frozen) * ``load`` (function) overrides the load method * ``profile`` (float) profile the rendering (use astor lib) (filter profile line with time ms >= profile)

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: OrderedDict (attribute name, attribute value).
  • get_available_options(self)
    @api.model
    Get the available option informations. Returns a dict of dict with: * key equal to the option key. * dict: type, params, name, description, default_value * type: 'string' 'integer' 'float' 'model' (e.g. 'res.partner') 'array' 'selection' (e.g. [key1, key2...])
  • 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 (1)
  • precision(self, field, options=None)
    @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 (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)
  • record_to_html(self, record, field_name, options)
    @api.model

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

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

New fields (13)
  • active Boolean
    default=True
  • code Char
    string='Sequence Code'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • date_range_ids One2many → ir.sequence.date_range
    string='Subsequences' args: 'ir.sequence.date_range', 'sequence_id'
  • implementation Selection
    default='standard' help="While assigning a sequence number to a record, the 'no gap' sequence implementation ensures that each previous sequence number has been assigned already. While this sequence implementation will not skip any sequence number upon assignation, 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 (8)
  • create(self, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get(self, code)
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by its code. This method is deprecated.
  • get_id(self, sequence_code_or_id, code_or_id='id')
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by the ``sequence_code_or_id`` argument, which can be a code or an id (as controlled by the ``code_or_id`` argument. This method is deprecated.
  • 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. :param dict context: context dictionary may contain a ``force_company`` key with the ID of the company to use instead of the user's current company for the sequence selection. A matching sequence for that specific company will get higher priority.
  • next_by_id(self, sequence_date=None)
    Draw an interpolated string using the specified sequence.
  • unlink(self)
  • write(self, values)

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, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • default_get(self, fields)
    @api.model
  • unlink(self)
  • write(self, values)

New fields (5)
  • col1 Many2one → ir.model.fields
    required=True string='Field' args: 'ir.model.fields'
  • evaluation_type Selection
    change_default=True default='value' required=True args: [('value', 'Value'), ('reference', 'Reference'), ('equation', 'Python expression')], 'Evaluation Type'
  • resource_ref Reference
    compute='_compute_resource_ref' inverse='_set_resource_ref' selection='_selection_target_model' string='Record'
  • server_id Many2one → ir.actions.server
    ondelete='cascade' string='Related Server Action' args: 'ir.actions.server'
  • value Text
    help='Expression containing a value specification. \nWhen Formula type is selected, this field may be a Python expression that can use the same values as for the code field on the server action.\nIf Value type is selected, the value will be used directly without evaluation.' required=True
Public methods (1)
  • eval_value(self, eval_context=None)

New fields (9)
  • comments Text
    index=True string='Translation comments'
  • lang Selection
    selection='_get_languages' string='Language' validate=False
  • module Char
    help='Module this term belongs to' index=True
  • name Char
    required=True string='Translated field'
  • res_id Integer
    index=True string='Record ID'
  • src Text
    string='Internal Source'
  • state Selection
    default='to_translate' help='Automatically set to let administators find new terms that might need to be translated' string='Status' args: [('to_translate', 'To Translate'), ('inprogress', 'Translation in Progress'), ('translated', 'Translated')]
  • type Selection
    index=True string='Type' args: TRANSLATION_TYPE
  • value Text
    string='Translation Value'
Public methods (12)
  • check(self, mode)
    Check access rights of operation ``mode`` on ``self`` for the current user. Raise an AccessError in case conditions are not met.
  • create(self, vals_list)
    @api.model_create_multi
  • get_field_help(self, model_name)
    @api.model@tools.ormcache_context('model_name', keys=('lang'))
    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@tools.ormcache_context('model_name', 'field_name', keys=('lang'))
    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@tools.ormcache_context('model_name', keys=('lang'))
    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}`
  • get_technical_translations(self, model_name)
    @api.model
    Find the translations for the fields of `model_name` Find the technical translations for the fields of the model, including string, tooltip and available selections. :return: action definition to open the list of available translations
  • get_translations_for_webclient(self, mods, lang)
    @api.model
  • get_web_translations_hash(self, mods, lang)
    @api.model@tools.ormcache('frozenset(mods)', 'lang')
  • insert_missing(self, field, records)
    @api.model
    Insert missing translations for `field` on `records`.
  • translate_fields(self, model, id, field=None)
    @api.model
    Open a view for translating the field(s) of the record (model, id).
  • 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' string='Full Path'
  • groups_id 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 (9)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_user_roots(self)
    @api.model@api.returns('self')
    Return all root menu ids visible for the user. :return: the root menu ids :rtype: list(int)
  • load_menus(self, debug)
    @api.model@tools.ormcache_context('self._uid', 'debug', keys=('lang'))
    Loads all menu items (all applications and their sub-menus). :return: the menu root :rtype: dict('children': menu_nodes)
  • load_menus_root(self)
    @api.model@tools.ormcache_context('self._uid', keys=('lang'))
  • name_get(self)
  • read_image(self, path)
  • unlink(self)
  • write(self, values)

New fields (20)
  • 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'
  • field_parent Char
    string='Child Field'
  • groups_id 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'
  • key Char
  • 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_ids One2many → ir.model.data
    auto_join=True domain=[('model', '=', 'ir.ui.view')] string='Models' args: 'ir.model.data', 'res_id'
  • name Char
    required=True string='View Name'
  • priority Integer
    default=16 required=True string='Sequence'
  • type Selection
    string='View Type' args: [('tree', 'Tree'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('diagram', 'Diagram'), ('gantt', 'Gantt'), ('kanban', 'Kanban'), ('search', 'Search'), ('qweb', 'QWeb')]
  • xml_id Char
    compute='_compute_xml_id' help='ID of the view defined in xml file' string='External ID'
Public methods (28)
  • add_on_change(self, model_name, arch)
    Add attribute on_change="1" on fields that are dependencies of computed fields on the same view.
  • apply_inheritance_specs(self, source, specs_tree, inherit_id, pre_locate=<expr>)
    @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 Elepect specs_tree: a modifying architecture in an inheriting view :param inherit_id: the database id of specs_arch :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
  • apply_view_inheritance(self, source, source_id, model, root_id=None)
    @api.model
    Apply all the (directly and indirectly) inheriting views. :param source: a parent architecture to modify (with parent modifications already applied) :param source_id: the database view_id of the parent view :param model: the original model for which we create a view (not necessarily the same as the source's model); only the inheriting views with that specific model will be applied. :return: a modified source where all the modifying architecture are applied
  • clear_cache(self)
    Deprecated, use `clear_caches` instead.
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • 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_inheriting_views_arch(self, view_id, model)
    @api.model
    Retrieves the architecture of views that inherit from the given view, from the sets of views that should currently be used in the system. During the module upgrade phase it may happen that a view is present in the database but the fields it relies on are not fully loaded yet. This method only considers views that belong to modules whose code is already loaded. Custom views defined directly in the database are loaded only after the module initialization phase is completely finished. :param int view_id: id of the view whose inheriting views should be retrieved :param str model: model identifier of the inheriting views. :rtype: list of tuples :return: [(view_arch,view_id), ...]
  • get_view_id(self, template)
    @api.model
    Return the view ID corresponding to ``template``, which may be a view ID or an XML ID. Note that this method may be overridden for other kinds of template values. This method could return the ID of something that is not a view (when using fallback to `xmlid_to_res_id`).
  • get_view_xmlid(self)
    @tools.ormcache('self.id')
  • graph_get(self, id, model, node_obj, conn_obj, src_node, des_node, label, scale)
    @api.model
  • inherit_branding(self, specs_tree, view_id, root_id)
  • 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
  • open_translations(self)
    Open a view for editing the translations of field 'arch_db'.
  • postprocess(self, model, node, view_id, in_tree_view, model_fields)
    @api.model
    Return the description of the fields in the node. In a normal call to this method, node is a complete view architecture but it is actually possible to give some sub-node (this is used so that the method can call itself recursively). Originally, the field descriptions are drawn from the node itself. But there is now some code calling fields_get() in order to merge some of those information in the architecture.
  • postprocess_and_fields(self, model, node, view_id)
    @api.model
    Return an architecture and a description of all the fields. The field description combines the result of fields_get() and postprocess(). :param node: the architecture as as an etree :return: a tuple (arch, fields) where arch is the given node as a string and fields is the description of all the fields.
  • raise_view_error(self, message, view_id)
    @api.model
  • read_combined(self, fields=None)
    Utility function to get a view combined with its inherited views. * Gets the top of the view tree if a sub-view is requested * Applies all inherited archs on the root view * Returns the view with all requested fields .. note:: ``arch`` is always added to the fields list even if not requested (similar to ``id``)
  • read_template(self, xml_id)
    @api.model
  • render(self, values=None, engine='ir.qweb', minimal_qcontext=False)
  • render_template(self, template, values=None, engine='ir.qweb')
    @api.model
  • reset_arch(self, mode='soft')
  • toggle(self)
    Switches between enabled and disabled statuses
  • translate_qweb(self, arch, lang)
  • 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 (1)
  • name_get(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

No public methods.

New fields (16)
  • default Boolean
    args: 'Default paper format ?'
  • 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 (11)
  • active Boolean
    default=True
  • bic Char
    help='Sometimes called BIC or Swift.' index=True args: 'Bank Identifier Code'
  • city Char
  • country Many2one → res.country
    args: 'res.country'
  • email Char
  • name Char
    required=True
  • phone Char
  • state Many2one → res.country.state
    domain="[('country_id', '=?', country)]" args: 'res.country.state', 'Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (1)
  • name_get(self)

New fields (31)
  • account_no Char
    string='Account No.'
  • bank_ids One2many → res.partner.bank
    help='Bank accounts related to this company' string='Bank Accounts' args: 'res.partner.bank', 'company_id'
  • base_onboarding_company_state Selection
    default='not_done' string='State of the onboarding company step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • child_ids One2many → res.company
    string='Child Companies' args: 'res.company', 'parent_id'
  • city Char
    compute='_compute_address' inverse='_inverse_city'
  • company_registry Char
  • country_id Many2one → res.country
    compute='_compute_address' inverse='_inverse_country' string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • email Char
    readonly=False related='partner_id.email' store=True
  • external_report_layout_id Many2one → ir.ui.view
    args: 'ir.ui.view', 'Document Template'
  • favicon Binary
    default=_get_default_favicon help='This field holds the image used to display a favicon for a given company.' string='Company Favicon'
  • font Selection
    default='Lato' args: [('Lato', 'Lato'), ('Roboto', 'Roboto'), ('Open_Sans', 'Open Sans'), ('Montserrat', 'Montserrat'), ('Oswald', 'Oswald'), ('Raleway', 'Raleway')]
  • logo Binary
    default=_get_logo readonly=False related='partner_id.image_1920' string='Company Logo'
  • logo_web Binary
    attachment=False compute='_compute_logo_web' store=True
  • name Char
    readonly=False related='partner_id.name' required=True store=True string='Company Name'
  • paperformat_id Many2one → report.paperformat
    default=<expr> args: 'report.paperformat', 'Paper format'
  • parent_id Many2one → res.company
    index=True string='Parent Company' args: 'res.company'
  • partner_id Many2one → res.partner
    required=True string='Partner' args: 'res.partner'
  • phone Char
    readonly=False related='partner_id.phone' store=True
  • primary_color Char
  • report_footer Text
    help='Footer text displayed at the bottom of all reports.' string='Report Footer' translate=True
  • report_header Text
    help='Appears by default on the top right corner of your printed documents (report header).' string='Company Tagline'
  • secondary_color Char
  • sequence Integer
    default=10 help='Used to order Companies in the company switcher'
  • state_id Many2one → res.country.state
    compute='_compute_address' inverse='_inverse_state' string='Fed. State' args: 'res.country.state'
  • street Char
    compute='_compute_address' inverse='_inverse_street'
  • street2 Char
    compute='_compute_address' inverse='_inverse_street2'
  • user_ids Many2many → res.users
    string='Accepted Users' args: 'res.users', 'res_company_users_rel', 'cid', 'user_id'
  • vat Char
    readonly=False related='partner_id.vat' string='Tax ID'
  • website Char
    readonly=False related='partner_id.website'
  • zip Char
    compute='_compute_address' inverse='_inverse_zip'
Public methods (13)
  • action_open_base_onboarding_company(self)
    @api.model
    Onboarding step for company basic information.
  • action_save_onboarding_company_step(self)
  • cache_restart(self)
  • copy(self, default=None)
  • create(self, vals)
    @api.model
  • get_and_update_onbarding_state(self, onboarding_state, steps_states)
    Needed to display onboarding animations only one time.
  • init(self)
  • on_change_country(self, country_id)
  • open_company_edit_report(self)
  • set_onboarding_step_done(self, step_name)
  • update_scss(self)
  • write(self, values)
  • write_company_and_print_report(self)

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 (5)
  • already_installed(self)
    For each module, check if it's already installed and if it is return its name :returns: a list of the already installed modules in this installer :rtype: [str]
  • default_get(self, fields_list)
    @api.model
    If an addon is already installed, check it by default
  • execute(self)
  • fields_get(self, fields=None, attributes=None)
    @api.model
    If an addon is already installed, set it to readonly as res.config.installer doesn't handle uninstallations of already installed addons
  • modules_to_install(self)
    selects all modules to install: * checked boolean fields * return values of hook methods. Hook methods are of the form ``_if_%(addon_name)s``, and are called if the corresponding addon is marked for installation. They take the arguments cr, uid, ids and context, and return an iterable of addon names * additionals, additionals are setup through the ``_install_if`` class variable. ``_install_if`` is a dict of {iterable:iterable} where key and value are iterables of addon names. If all the addons in the key are selected for installation (warning: addons added through hooks don't count), then the addons in the value are added to the set of modules to install * not already installed

New fields (0)

No new fields.

Public methods (12)
  • cancel(self)
  • copy(self, values)
  • default_get(self, fields)
    @api.model
  • execute(self)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • 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: --------------- from odoo.addons.base.models.res_config import get_warning_config raise get_warning_config(cr, _("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."), context=context) 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 string: human readable name of the field (e.g.: "Create leads from incoming mails")
  • 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 tuple: - 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)
    Return values for the fields other that `default`, `group` and `module`
  • name_get(self)
    Override name_get method to return an appropriate configuration wizard name, and not the generated name.
  • onchange_module(self, field_value, module_name)
  • set_values(self)
    Set values for the fields other that `default`, `group` and `module`

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

New fields (2)
  • 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 (0)

No public methods.

New fields (3)
  • code Char
    help='The state code.' required=True string='State Code'
  • country_id Many2one → res.country
    required=True string='Country' args: 'res.country'
  • name Char
    help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton' required=True string='State Name'
Public methods (1)
  • name_get(self)

New fields (11)
  • active Boolean
    default=True
  • currency_subunit_label Char
    help='Currency Subunit Name' string='Currency Subunit'
  • currency_unit_label Char
    help='Currency Unit Name' string='Currency Unit'
  • date Date
    compute='_compute_date'
  • decimal_places Integer
    compute='_compute_decimal_places' store=True
  • name Char
    help='Currency Code (ISO 4217)' required=True size=3 string='Currency'
  • position Selection
    default='after' help='Determines where the currency symbol should be placed after or before the amount.' string='Symbol Position' args: [('after', 'After Amount'), ('before', 'Before Amount')]
  • rate Float
    compute='_compute_current_rate' digits=0 help='The rate of the currency to the currency of rate 1.' string='Current Rate'
  • rate_ids One2many → res.currency.rate
    string='Rates' args: 'res.currency.rate', 'currency_id'
  • rounding Float
    default=0.01 digits=(12, 6) string='Rounding Factor'
  • symbol Char
    help='Currency sign, to be used when printing amounts.' required=True
Public methods (6)
  • amount_to_text(self, amount)
  • compare_amounts(self, amount1, amount2)
    Compare ``amount1`` and ``amount2`` after rounding them according to the given currency's precision.. An amount is considered lower/greater than another amount if their rounded value is different. This is not the same as having a non-zero difference! For example 1.432 and 1.431 are equal at 2 digits precision, so this method would return 0. However 0.006 and 0.002 are considered different (returns 1) because they respectively round to 0.01 and 0.0, even though 0.006-0.002 = 0.004 which would be considered zero at 2 digits precision. :param float amount1: first amount to compare :param float amount2: second amount to compare :return: (resp.) -1, 0 or 1, if ``amount1`` is (resp.) lower than, equal to, or greater than ``amount2``, according to ``currency``'s rounding. With the new API, call it like: ``currency.compare_amounts(amount1, amount2)``.
  • compute(self, from_amount, to_currency, round=True)
  • is_zero(self, amount)
    Returns true if ``amount`` is small enough to be treated as zero according to current currency's rounding rules. Warning: ``is_zero(amount1-amount2)`` is not always equivalent to ``compare_amounts(amount1,amount2) == 0``, as the former will round after computing the difference, while the latter will round before, giving different results for e.g. 0.006 and 0.002 at 2 digits precision. :param float amount: amount to compare with currency's zero With the new API, call it like: ``currency.is_zero(amount)``.
  • name_get(self)
  • round(self, amount)
    Return ``amount`` rounded according to ``self``'s rounding rules. :param float amount: the amount to round :return: rounded float

New fields (4)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • name Date
    default=fields.Date.context_today index=True required=True string='Date'
  • rate Float
    default=1.0 digits=0 help='The rate of the currency to the currency of rate 1'
Public methods (0)

No public methods.

New fields (11)
  • category_id Many2one → ir.module.category
    index=True string='Application' args: 'ir.module.category'
  • color Integer
    string='Color Index'
  • comment Text
    translate=True
  • full_name Char
    compute='_compute_full_name' search='_search_full_name' string='Group Name'
  • menu_access Many2many → ir.ui.menu
    string='Access Menu' args: 'ir.ui.menu', 'ir_ui_menu_group_rel', 'gid', 'menu_id'
  • model_access One2many → ir.model.access
    copy=True string='Access Controls' args: 'ir.model.access', 'group_id'
  • name Char
    required=True translate=True
  • rule_groups Many2many → ir.rule
    domain=[('global', '=', False)] string='Rules' args: 'ir.rule', 'rule_group_rel', 'group_id', 'rule_group_id'
  • share Boolean
    help='Group created to set access rights for sharing data with some users.' string='Share Group'
  • users Many2many → res.users
    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'
Public methods (2)
  • copy(self, default=None)
  • write(self, vals)

New fields (2)
  • implied_ids Many2many → res.groups
    help='Users of this group automatically inherit those groups' string='Inherits' args: 'res.groups', 'res_groups_implied_rel', 'gid', 'hid'
  • trans_implied_ids Many2many → res.groups
    compute='_compute_trans_implied' string='Transitively inherits' args: 'res.groups'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)

New fields (0)

No new fields.

Public methods (5)
  • create(self, values)
    @api.model
  • get_application_groups(self, domain)
    Return the non-share groups that satisfy ``domain``.
  • get_groups_by_application(self)
    @api.model
    Return all groups classified by application (module category), as a list:: [(app, kind, groups), ...], where ``app`` and ``groups`` are recordsets, and ``kind`` is either ``'boolean'`` or ``'selection'``. Applications are given in sequence order. If ``kind`` is ``'selection'``, ``groups`` are given in reverse implication order.
  • unlink(self)
  • write(self, values)

New fields (12)
  • active Boolean
  • code Char
    help='This field is used to set/get locales for user' required=True string='Locale Code'
  • date_format Char
    default=DEFAULT_DATE_FORMAT required=True string='Date Format'
  • decimal_point Char
    default='.' required=True string='Decimal Separator' trim=False
  • direction Selection
    default='ltr' required=True args: [('ltr', 'Left-to-Right'), ('rtl', 'Right-to-Left')]
  • grouping Char
    default='[]' help="The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case." required=True string='Separator Format'
  • iso_code Char
    help='This ISO code is the name of po files to use for translations' string='ISO code'
  • name Char
    required=True
  • thousands_sep Char
    default=',' string='Thousands Separator' trim=False
  • time_format Char
    default=DEFAULT_TIME_FORMAT required=True string='Time Format'
  • url_code Char
    help='The Lang Code displayed in the URL' required=True args: 'URL Code'
  • week_start Selection
    default='7' required=True string='First Day of Week' args: [('1', 'Monday'), ('2', 'Tuesday'), ('3', 'Wednesday'), ('4', 'Thursday'), ('5', 'Friday'), ('6', 'Saturday'), ('7', 'Sunday')]
Public methods (9)
  • create(self, vals_list)
    @api.model_create_multi
  • format(self, percent, value, grouping=False, monetary=False)
    Format() will return the language-specific output for float values
  • get_available(self)
    @api.model@tools.ormcache()
    Return the available languages as a list of (code, name) sorted by name.
  • get_installed(self)
    @api.model@tools.ormcache()
    Return the installed languages as a list of (code, name) sorted by name.
  • install_lang(self)
    @api.model
    This method is called from odoo/addons/base/base_data.xml to load some language and set it as the default for every partners. The language is set via tools.config by the RPC 'create' method on the 'db' object. This is a fragile solution and something else should be found.
  • load_lang(self, lang, lang_name=None)
    @api.model
    Create the given language if necessary, and make it active.
  • toggle_active(self)
  • unlink(self)
  • write(self, vals)

New fields (48)
  • active Boolean
    default=True
  • active_lang_count Integer
    compute='_compute_active_lang_count'
  • bank_ids One2many → res.partner.bank
    string='Banks' args: 'res.partner.bank', 'partner_id'
  • category_id Many2many → res.partner.category
    column1='partner_id' column2='category_id' default=_default_category string='Tags' args: 'res.partner.category'
  • child_ids One2many → res.partner
    domain=[('active', '=', True)] string='Contact' args: 'res.partner', 'parent_id'
  • city Char
  • color Integer
    default=0 string='Color Index'
  • comment Text
    string='Notes'
  • commercial_company_name Char
    compute='_compute_commercial_company_name' store=True args: 'Company Name Entity'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner' index=True store=True string='Commercial Entity' args: 'res.partner'
  • company_id Many2one → res.company
    index=True args: 'res.company', 'Company'
  • company_name Char
    args: 'Company Name'
  • company_type Selection
    compute='_compute_company_type' inverse='_write_company_type' selection=[('person', 'Individual'), ('company', 'Company')] string='Company Type'
  • contact_address Char
    compute='_compute_contact_address' string='Complete Address'
  • country_id Many2one → res.country
    ondelete='restrict' string='Country' args: 'res.country'
  • credit_limit Float
    string='Credit Limit'
  • date Date
    index=True
  • display_name Char
    compute='_compute_display_name' index=True store=True
  • 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'
  • industry_id Many2one → res.partner.industry
    args: 'res.partner.industry', 'Industry'
  • is_company Boolean
    default=False help='Check if the contact is a company, otherwise it is a person' string='Is a Company'
  • lang Selection
    default=<expr> help='All the emails and documents sent to this contact will be translated in this language.' string='Language' args: _lang_get
  • mobile Char
  • name Char
    index=True
  • parent_id Many2one → res.partner
    index=True string='Related Company' args: 'res.partner'
  • parent_name Char
    readonly=True related='parent_id.name' string='Parent name'
  • partner_latitude Float
    digits=(16, 5) string='Geo Latitude'
  • partner_longitude Float
    digits=(16, 5) string='Geo Longitude'
  • partner_share Boolean
    compute='_compute_partner_share' help='Either customer (not a user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data.' store=True args: 'Share Partner'
  • phone Char
  • ref Char
    index=True string='Reference'
  • same_vat_partner_id Many2one → res.partner
    compute='_compute_same_vat_partner_id' store=False string='Partner with same Tax ID' args: 'res.partner'
  • self Many2one
    comodel_name=_name compute='_compute_get_ids'
  • state_id Many2one → res.country.state
    domain="[('country_id', '=?', country_id)]" ondelete='restrict' string='State' args: 'res.country.state'
  • street Char
  • street2 Char
  • title Many2one → res.partner.title
    args: 'res.partner.title'
  • type Selection
    default='contact' help='Invoice & Delivery addresses are used in sales orders. Private addresses are only visible by authorized users.' string='Address Type' args: [('contact', 'Contact'), ('invoice', 'Invoice Address'), ('delivery', 'Delivery Address'), ('other', 'Other Address'), ('private', 'Private Address')]
  • 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: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
  • user_id Many2one → res.users
    help='The internal user in charge of this contact.' string='Salesperson' args: 'res.users'
  • user_ids One2many → res.users
    auto_join=True string='Users' args: 'res.users', 'partner_id'
  • vat Char
    help='The Tax Identification Number. Complete it if the contact is subjected to government taxes. Used in some legal statements.' index=True string='Tax ID'
  • website Char
    args: 'Website Link'
  • zip Char
    change_default=True
Public methods (18)
  • address_get(self, adr_pref=None)
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_company(self)
  • default_get(self, default_fields)
    @api.model
    Add the company of the parent as default if we are creating a child partner.
  • find_or_create(self, email)
    @api.model
    Find a partner with the given ``email`` or use :py:method:`~.name_create` to create one :param str email: email-like string, which should contain at least one email, e.g. ``"Raoul Grosbedon <r.g@grosbedon.fr>"``
  • get_import_templates(self)
    @api.model
  • main_partner(self)
    @api.model@api.returns('self')
    Return the main partner
  • 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.
  • name_get(self)
  • onchange_company_type(self)
    @api.onchange('company_type')
  • onchange_email(self)
    @api.onchange('email')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • open_commercial_entity(self)
    Utility method used to add an "Open Company" button in partner views
  • open_parent(self)
    Utility method used to add an "Open Parent" button in partner views
  • update_address(self, vals)
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)

New fields (12)
  • acc_holder_name Char
    help='Account holder name, in case it is different than the name of the Account Holder' string='Account Holder Name'
  • acc_number Char
    required=True args: 'Account Number'
  • acc_type Selection
    compute='_compute_acc_type' help='Bank account type: Normal or IBAN. Inferred from the bank account number.' selection=<expr> string='Type'
  • bank_bic Char
    readonly=False related='bank_id.bic'
  • bank_id Many2one → res.bank
    string='Bank' args: 'res.bank'
  • bank_name Char
    readonly=False related='bank_id.name'
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • partner_id Many2one → res.partner
    domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' required=True args: 'res.partner', 'Account Holder'
  • qr_code_valid Boolean
    compute='_validate_qr_code_arguments' string='Has all required arguments'
  • sanitized_acc_number Char
    compute='_compute_sanitized_acc_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
    default=10
Public methods (5)
  • build_qr_code_base64(self, amount, comment)
    @api.model
  • build_qr_code_url(self, amount, comment)
    @api.model
  • build_qr_code_vals(self, amount, comment)
  • get_supported_account_types(self)
    @api.model
  • retrieve_acc_type(self, acc_number)
    @api.model
    To be overridden by subclasses in order to support other account_types.

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the category without removing it.'
  • child_ids One2many → res.partner.category
    string='Child Tags' args: 'res.partner.category', 'parent_id'
  • color Integer
    string='Color Index'
  • name Char
    required=True string='Tag Name' translate=True
  • parent_id Many2one → res.partner.category
    index=True ondelete='cascade' string='Parent Category' args: 'res.partner.category'
  • parent_path Char
    index=True
  • partner_ids Many2many → res.partner
    column1='category_id' column2='partner_id' string='Partners' args: 'res.partner'
Public methods (1)
  • name_get(self)
    Return the categories' display name, including their direct parent by default. If ``context['partner_category_display']`` is ``'short'``, the short version of the category name (without the direct parent) is used. The default is the long version.

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 (2)
  • name Char
    required=True string='Title' translate=True
  • shortcut Char
    string='Abbreviation' translate=True
Public methods (0)

No public methods.

New fields (21)
  • 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'
  • companies_count Integer
    compute='_compute_companies_count' default=_companies_count string='Number of Companies'
  • company_id Many2one → res.company
    context={'user_preference': True} default=<expr> help='The default company for this user.' required=True string='Company' args: 'res.company'
  • company_ids Many2many → res.company
    default=<expr> string='Companies' args: 'res.company', 'res_company_users_rel', 'user_id', 'cid'
  • email Char
    inherited=True readonly=False related='partner_id.email'
  • groups_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of groups that apply to the current user' args: '# Groups'
  • groups_id Many2many → res.groups
    default=_default_groups string='Groups' args: 'res.groups', 'res_groups_users_rel', 'uid', 'gid'
  • 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 authentication'
  • name Char
    inherited=True readonly=False related='partner_id.name'
  • new_password Char
    compute='_compute_password' help="Specify a value only when creating a user or if you're changing the user's password, otherwise leave empty. After a change of password, the user has to login again." inverse='_set_new_password' string='Set Password'
  • partner_id Many2one → res.partner
    auto_join=True help='Partner-related data of the user' 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' invisible=True
  • rules_count Integer
    compute='_compute_accesses_count' compute_sudo=True help='Number of record rules that apply to the current user' args: '# Record Rules'
  • share Boolean
    compute='_compute_share' compute_sudo=True help='External user with limited access, created only for the purpose of sharing data.' store=True string='Share User'
  • signature Html
    default='' string='Email Signature'
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
Public methods (23)
  • action_get(self)
    @api.model
  • action_show_accesses(self)
  • action_show_groups(self)
  • action_show_rules(self)
  • authenticate(cls, db, login, password, user_agent_env)
    @classmethod
    Verifies and returns the user ID corresponding to the given ``login`` and ``password`` combination, or False if there was no matching user. :param str db: the database on which user is trying to authenticate :param str login: username :param str password: user password :param dict user_agent_env: environment dictionary describing any relevant environment attributes
  • 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
  • check(cls, db, uid, passwd)
    @classmethod
    Verifies that the given (uid, password) is authorized for the database ``db`` and raise an exception if it is not.
  • check_super(self, passwd)
  • context_get(self)
    @api.model@tools.ormcache('self._uid')
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • get_company_currency_id(self)
    @api.model
  • has_group(self, group_ext_id)
    @api.model
  • init(self)
  • on_change_login(self)
    @api.onchange('login')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • preference_change_password(self)
  • preference_save(self)
  • read(self, fields=None, load='_classic_read')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • toggle_active(self)
  • unlink(self)
  • write(self, values)

New fields (0)

No new fields.

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

New fields (0)

No new fields.

Public methods (7)
  • create(self, values)
    @api.model
  • default_get(self, fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • new(self, values={}, origin=None, ref=None)
    @api.model
  • read(self, fields=None, load='_classic_read')
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • write(self, values)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • arch_diff Html
    compute='_compute_arch_diff' readonly=True sanitize_tags=False string='Architecture Diff'
  • reset_mode Selection
    default='soft' help='You might want to try a soft reset first.' required=True string='Reset Mode' args: [('soft', 'Restore previous version (soft reset).'), ('hard', 'Reset to file version (hard reset).')]
  • view_id Many2one → ir.ui.view
    default=_default_view_id string='View' args: 'ir.ui.view'
  • view_name Char
    related='view_id.name' string='View Name'
Public methods (1)
  • reset_view_button(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)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Fabien Meghazi, Xavier ALT, Christophe Simonis, Xavier Morel, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, xmo-odoo, Thibault Francois, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Olivier Colson, Wolfgang Taferner, Yannick Tivisse, Alexandre Kühn, qsm-odoo, Martin Geubelle, Pierre Masereel, Romain Derie, Laurent Smet, Toufik Benjaa, jem-odoo, Adrien Dieudonne, RomainLibert, Christophe Monniez, len-odoo, Julien (juc) Castiaux, Jorge Pinna Puissant, Jairo Llopis, Nans Lefebvre, Nicolas Vannieuwerburgh, Adrian Torres, wan, mreficent, XavierDo, Julien Castiaux, Rémi Rahir, Priyanka Kakadiya, Xavier-Do, jvm-odoo, Thomas Dieuzeide, Luis Torres, Victor Feyens, Florimond Husquinet (fhu), Andrea Grazioso (agr-odoo), Paul Morelle, Loan (lse), William Henrotin, Sébastien Theys, Nasreddin (bon), alt-odoo, oco-odoo, Jason Van Malder, fw-bot, Anh Thao Pham (pta), Debauche Stéphane, Alvaro Fuentes, sbbaro, std-odoo, Kinjal Mehta, Achraf (abz), Adrien Widart, Ivan Yelizariev, Naglis Jonaitis, Nasreddin Boulif (bon), Touati Djamel (otd), nie, Manuel Vázquez Acosta, fja-odoo, ThanhDodeurOdoo, TWA, Kamen Zhekov, sed-odoo, Djamel (otd), Francois Volral, Mathias Markl, odoo, Luce Pasquini
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

Views touched (160)
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.tree ir.actions.report tree 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.tree ir.actions.actions tree New
base_onboarding_company_form base.company.onboarding.form res.company form Inherits base.view_company_form
base_partner_merge_automatic_wizard_form base.partner.merge.automatic.wizard.form base.partner.merge.automatic.wizard form New
change_password_wizard_user_tree_view Change Password Users change.password.user tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
contact_name contact_name ir.ui.view qweb New
demo_failures_dialog Demo Failure Dialog ir.demo_failure.wizard form New
demo_force_install_form ir.demo.form ir.demo form New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree New
ir_cron_view_calendar ir.cron calendar New
ir_cron_view_form ir.cron.view.form ir.cron div Inherits base.view_server_action_form
ir_cron_view_search ir.cron search New
ir_cron_view_tree ir.cron tree 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 tree view ir.default tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Apps Kanban ir.module.module kanban New
onboarding_company_step onboarding_company_step ir.ui.view qweb New
onboarding_confetti onboarding_confetti ir.ui.view qweb New
onboarding_container onboarding_container ir.ui.view qweb New
onboarding_step onboarding_step 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 tree New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_config_installer Inheritable view for installer objects res.config.installer form 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_lang_form res.lang.form res.lang form New
res_lang_search res.lang.search res.lang search New
res_lang_tree res.lang.tree res.lang tree New
res_partner_industry_view_form Industry res.partner.industry form New
res_partner_industry_view_tree Industry res.partner.industry tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_partner_view_form_private res.partner.view.form.private res.partner form New
sequence_view ir.sequence form New
sequence_view_tree ir.sequence tree New
user_groups_view res.users.groups res.users form Inherits view_users_form
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree 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_company_document_template_form res.company.document.template.form res.company form New
view_company_form res.company.form res.company form New
view_company_report_form res.company.report.form res.company form Inherits base.view_company_form
view_company_report_form_with_print res.company.report.form.with.print res.company form Inherits base.view_company_report_form
view_company_tree res.company.tree res.company tree 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.tree res.country.group tree New
view_country_state_form res.country.state.form res.country.state form New
view_country_state_tree res.country.state.tree res.country.state tree New
view_country_tree res.country.tree res.country tree 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.tree res.currency.rate tree New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_groups_form res.groups.form res.groups form 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 tree New
view_ir_config_search ir.config_parameter search New
view_ir_mail_server_search ir.mail_server search New
view_menu ir.ui.menu.tree ir.ui.menu tree New
view_model_constraint_form ir.model.constraint form New
view_model_constraint_list ir.model.constraint tree New
view_model_data_form ir.model.data form New
view_model_data_list ir.model.data tree 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_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree 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.tree res.partner.bank tree New
view_partner_category_form Contact Tags res.partner.category form New
view_partner_category_list Contact Tags res.partner.category tree New
view_partner_form res.partner.form res.partner form New
view_partner_short_form res.partner.form res.partner form New
view_partner_simple_form res.partner.simplified.form res.partner form New
view_partner_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_company_kanban res.company.kanban res.company kanban New
view_res_partner_filter res.partner.select res.partner search New
view_res_users_kanban res.users.kanban res.users kanban New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree New
view_translation_dialog_tree ir.translation tree New
view_translation_form ir.translation form New
view_translation_search ir.translation search New
view_translation_tree ir.translation tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
wizard_lang_export Export Translations base.language.export form New
wizard_update_translations Generate Missing Terms base.update.translations form New
HTTP endpoints (3)
Route(s)HandlerAuthTypeMethodsFlags
/jsonrpc RPC.jsonrpc none json ALL
/xmlrpc/<service> RPC.xmlrpc_1 none http POST csrf off
/xmlrpc/2/<service> RPC.xmlrpc_2 none http POST csrf off
Models touched (103)

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 (6)
  • data Binary
    readonly=True args: 'File'
  • format Selection
    default='csv' 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
  • 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)
    @api.multi

New fields (5)
  • code Char
    help='ISO Language and Country code, e.g. en_US' required=True size=6 args: 'ISO Code'
  • data Binary
    required=True args: 'File'
  • filename Char
    required=True args: 'File Name'
  • name Char
    required=True args: 'Language Name'
  • overwrite Boolean
    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)
    @api.multi

New fields (3)
  • lang Selection
    default=_default_language required=True string='Language' args: _get_languages
  • overwrite Boolean
    help='If you check this box, your customized translations will be overwritten and replaced by the official ones.' args: 'Overwrite Existing Terms'
  • state Selection
    default='init' readonly=True string='Status' args: [('init', 'init'), ('done', 'done')]
Public methods (2)
  • lang_install(self)
    @api.multi
  • reload(self)

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

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)
    @api.multi
  • update_module(self)
    @api.multi

New fields (1)
  • module_info Text
    default=_default_module_info readonly=True args: 'Apps to Update'
Public methods (5)
  • config(self)
    @api.multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_module_list(self)
    @api.model@api.returns('ir.module.module')
  • upgrade_module(self)
    @api.multi
  • upgrade_module_cancel(self)
    @api.multi

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
    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)
    @api.multi
    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)
    @api.multi
    Skip this wizard line. Don't compute any thing, and simply redirect to the new step.
  • action_start_automatic_process(self)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
  • default_get(self, fields)
    @api.model
  • parent_migration_process_cb(self)
    @api.multi

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 (1)
  • lang Selection
    required=True args: _get_languages, 'Language'
Public methods (1)
  • act_update(self)
    @api.multi

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)
    @api.multi

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)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

No public methods.

New fields (21)
  • auto_search Boolean
    default=True
  • 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'
  • filter Boolean
  • groups_id 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'
  • multi Boolean
    help='If checked and the action is bound to a model, it will only appear in the More menu on list views' string='Restrict to lists'
  • name Char
    string='Action Name' translate=True
  • 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 Text
    compute='_compute_search_view'
  • search_view_id Many2one → ir.ui.view
    string='Search View Ref.' args: 'ir.ui.view'
  • src_model Char
    help='Optional model name of the objects on which this action should be visible' string='Source Model'
  • target Selection
    default='current' string='Target Window' args: [('current', 'Current Window'), ('new', 'New Window'), ('inline', 'Inline Edit'), ('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='tree,form' help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)" required=True
  • view_type Selection
    default='form' help="View type: Tree type to use for the tree view, set to 'tree' for a hierarchical tree view, or 'form' for a regular list view" required=True string='View Type' args: [('tree', 'Tree'), ('form', 'Form')]
  • views Binary
    compute='_compute_views' help='This function field computes the ordered list of views that should be enabled when displaying the result of an action, federating view mode, views and reference view. The result is returned as an ordered list of pairs (view_id,view_mode).'
Public methods (5)
  • create(self, vals_list)
    @api.model_create_multi
  • exists(self)
    @api.multi
  • for_xml_id(self, module, xml_id)
    @api.model
    Returns the act_window object created for the provided xml_id :param module: the module the act_window originates in :param xml_id: the namespace-less id of the action (the @id attribute from the XML file) :return: A read() view of the ir.actions.act_window
  • read(self, fields=None, load='_classic_read')
    @api.multi
    call the method get_empty_list_help of the model and set the window action help message
  • unlink(self)
    @api.multi

New fields (5)
  • act_window_id Many2one → ir.actions.act_window
    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 (6)
  • 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'), ('action_form_only', 'Form-only'), ('report', 'Report')]
  • 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
  • type Char
    required=True string='Action Type'
  • xml_id Char
    compute='_compute_xml_id' string='External ID'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_bindings(self, model_name)
    @api.model@tools.ormcache('frozenset(self.env.user.groups_id.ids)', 'model_name')
    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)
    @api.multi
    unlink ir.action.todo which are related to actions which will be deleted. NOTE: ondelete cascade will not work on ir.actions.actions so we will need to do it manually.
  • write(self, vals)
    @api.multi

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

No public methods.

New fields (14)
  • attachment Char
    help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.' string='Save as Attachment Prefix'
  • attachment_use Boolean
    help='If you check this, then the second time the user prints with same attachment name, it returns the previous report.' string='Reload from Attachment'
  • binding_type Selection
    default='report'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_report_rel', 'uid', 'gid'
  • model Char
    required=True string='Model Name'
  • model_id Many2one → ir.model
    compute='_compute_model_id' search='_search_model_id' string='Model' args: 'ir.model'
  • multi Boolean
    help='If set to true, the action will not be displayed on the right toolbar of a form view.' string='On Multiple Doc.'
  • name Char
    translate=True
  • paperformat_id Many2one → report.paperformat
    args: 'report.paperformat', 'Paper Format'
  • print_report_name Char
    help="This is the filename of the report going to download. Keep empty to not change the report filename. You can use a python expression with the 'object' and 'time' variables." args: 'Printed Report Name'
  • report_file Char
    help='The path to the main report file (depending on Report Type) or empty if the content is in another field' readonly=False required=False store=True string='Report File'
  • report_name Char
    help="For QWeb reports, name of the template used in the rendering. The method 'render_html' of the model 'report.template_name' will be called (if any) to give the html. For RML reports, this is the LocalService name." required=True string='Template Name'
  • report_type Selection
    default='qweb-pdf' help='The type of the report that will be rendered, each one having its own rendering method. HTML means the report will be opened directly in your browser PDF means the report will be rendered using Wkhtmltopdf and downloaded by the user.' required=True args: [('qweb-html', 'HTML'), ('qweb-pdf', 'PDF'), ('qweb-text', 'Text')]
  • type Char
    default='ir.actions.report'
Public methods (14)
  • associated_view(self)
    @api.multi
    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, width=600, height=100, humanreadable=0)
    @api.model
  • create_action(self)
    @api.multi
    Create a contextual action for each report.
  • get_paperformat(self)
    @api.model
  • get_wkhtmltopdf_state(self)
    @api.model
    Get the current state of wkhtmltopdf: install, ok, upgrade, workers or broken. * install: Starting state. * upgrade: The binary is an older version (< 0.12.0). * ok: A binary was found with a recent version (>= 0.12.0). * workers: Not enough workers found to perform the pdf rendering process (< 2 workers). * broken: A binary was found but not responding. :return: wkhtmltopdf_state
  • postprocess_pdf_report(self, record, buffer)
    @api.multi
    Hook to handle post processing during the pdf report generation. The basic behavior consists to create a new attachment containing the pdf base64 encoded. :param record_id: The record that will own the attachment. :param pdf_content: The optional name content of the file to avoid reading both times. :return: A modified buffer if the previous one has been modified, None otherwise.
  • render(self, res_ids, data=None)
    @api.multi
  • render_qweb_html(self, docids, data=None)
    @api.model
    This method generates and returns html version of a report.
  • render_qweb_pdf(self, res_ids=None, data=None)
    @api.multi
  • render_qweb_text(self, docids, data=None)
    @api.model
  • render_template(self, template, values=None)
    @api.multi
    Allow to render a QWeb template python-side. This function returns the 'ir.ui.view' render but embellish it with some variables/methods used in reports. :param values: additionnal methods/variables used in the rendering :returns: html representation of the template
  • report_action(self, docids, data=None, config=True)
    @api.noguess
    Return an action of type ir.actions.report. :param docids: id/ids/browserecord of the records to print (if not used, pass an empty list) :param report_name: Name of the template to generate an action for
  • retrieve_attachment(self, record)
    @api.multi
    Retrieve an attachment for a specific record. :param record: The record owning of the attachment. :param attachment_name: The optional name of the attachment. :return: A recordset of length <=1 or None
  • unlink_action(self)
    @api.multi
    Remove the contextual actions created for the reports.

New fields (13)
  • child_ids Many2many → ir.actions.server
    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', 'rel_server_actions', 'server_id', 'action_id'
  • code Text
    default=DEFAULT_PYTHON_CODE 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
    help='Model for record creation / update. Set this field only to specify a different model than the base model.' oldname='srcmodel_id' string='Create/Write Target Model' args: 'ir.model'
  • crud_model_name Char
    readonly=True related='crud_model_id.model' string='Target Model'
  • fields_lines One2many → ir.server.object.lines
    copy=True string='Value Mapping' args: 'ir.server.object.lines', 'server_id'
  • link_field_id Many2one → ir.model.fields
    help='Provide the field used to link the newly created record on the record on used by the server action.' string='Link using field' args: 'ir.model.fields'
  • model_id Many2one → ir.model
    help='Model on which the server action runs.' ondelete='cascade' required=True string='Model' args: 'ir.model'
  • model_name Char
    readonly=True related='model_id.model' store=True string='Model Name'
  • name Char
    string='Action Name' translate=True
  • sequence Integer
    default=5 help='When dealing with multiple actions, the execution order is based on the sequence. Low number means high priority.'
  • state Selection
    default='object_write' help="Type of server action. The following values are available:\n- 'Execute Python Code': a block of python code that will be executed\n- 'Create': create a new record with new values\n- 'Update a Record': update the values of a record\n- 'Execute several actions': define an action that triggers several other server actions\n- 'Send Email': automatically send an email (Discuss)\n- 'Add Followers': add followers to a record (Discuss)\n- 'Create Next Activity': create an activity (Discuss)" required=True string='Action To Do' args: [('code', 'Execute Python Code'), ('object_create', 'Create a new Record'), ('object_write', 'Update the Record'), ('multi', 'Execute several actions')]
  • type Char
    default='ir.actions.server'
  • usage Selection
    default='ir_actions_server' required=True string='Usage' args: [('ir_actions_server', 'Server Action'), ('ir_cron', 'Scheduled Action')]
Public methods (7)
  • create_action(self)
    @api.multi
    Create a contextual action for each server action.
  • run(self)
    @api.multi
    Runs the server action. For each server action, the run_action_<STATE> method is called. This allows easy overriding of the server actions. :param dict context: context should contain following keys - active_id: id of the current object (single mode) - active_model: current model that should equal the action's model The following keys are optional: - active_ids: 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
  • run_action_code_multi(self, action, eval_context=None)
    @api.model
  • run_action_multi(self, action, eval_context=None)
    @api.model
  • run_action_object_create(self, action, eval_context=None)
    @api.model
    Create specified model object with specified values. If applicable, link active_id.<self.link_field_id> to the new record.
  • run_action_object_write(self, action, eval_context=None)
    @api.model
    Apply specified write changes to active_id.
  • unlink_action(self)
    @api.multi
    Remove the contextual actions created for the server actions.

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 (7)
  • action_launch(self)
    @api.multi
    Launch Action of Wizard
  • action_open(self)
    @api.multi
    Sets configuration wizard in TODO state
  • create(self, vals_list)
    @api.model_create_multi
  • ensure_one_open_todo(self)
    @api.model
  • name_get(self)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (22)
  • access_token Char
    groups='base.group_user' args: 'Access Token'
  • active Boolean
    default=True oldname='archived' string='Active'
  • checksum Char
    index=True readonly=True size=40 args: 'Checksum/SHA1'
  • company_id Many2one → res.company
    change_default=True default=<expr> string='Company' args: 'res.company'
  • datas Binary
    compute='_compute_datas' inverse='_inverse_datas' string='File Content'
  • datas_fname Char
    args: 'Filename'
  • db_datas Binary
    args: 'Database Data'
  • description Text
    args: 'Description'
  • file_size Integer
    readonly=True args: 'File Size'
  • index_content Text
    prefetch=False readonly=True args: 'Indexed Content'
  • mimetype Char
    readonly=True args: 'Mime Type'
  • name Char
    required=True args: 'Name'
  • public Boolean
    args: 'Is public document'
  • res_field Char
    readonly=True args: 'Resource Field'
  • res_id Integer
    help='The record id this is attached to.' readonly=True args: 'Resource ID'
  • res_model Char
    help='The database object this attachment will be attached to.' readonly=True args: 'Resource Model'
  • res_model_name Char
    compute='_compute_res_model_name' index=True store=True
  • res_name Char
    compute='_compute_res_name' store=True args: 'Resource Name'
  • store_fname Char
    args: 'Stored Filename'
  • thumbnail Binary
    attachment=True readonly=1
  • 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=True size=1024 args: 'Url'
Public methods (14)
  • action_get(self)
    @api.model
  • check(self, mode, values=None)
    @api.model
    Restricts the access to an ir.attachment, according to referred model In the 'document' module, it is overriden to relax this hard rule, since more complex ones apply there.
  • copy(self, default=None)
    @api.multi
  • create(self, vals_list)
    @api.model_create_multi
  • force_storage(self)
    @api.model
    Force all attachments to be stored in the currently configured storage
  • generate_access_token(self)
    @api.one
  • get_attachment_by_key(self, key, extra_domain=None, order=None)
    @api.model
  • get_serve_attachment(self, url, extra_domain=None, extra_fields=None, order=None)
    @api.model
  • 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.
  • read(self, fields=None, load='_classic_read')
    @api.multi
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Override read_group to add res_field=False in domain if not present.
  • split_pdf(self, indices=None, remainder=False)
    called by the Document Viewer's Split PDF button. evaluates the input string and turns it into a list of lists to be processed by _split_pdf_groups :param indices: the formatted string of pdf split (e.g. 1,5-10, 8-22, 29-34) o_page_number_input :param remainder: bool, if true splits the non specified pages, one by one. form checkbox o_remainder_input :returns the list of the ID's of the newly created pdf attachments.
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • power_on(self, *args, **kwargs)
    @api.model

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

New fields (10)
  • active Boolean
    default=True
  • cron_name Char
    readonly=False related='ir_actions_server_id.name' store=True args: 'Name'
  • doall Boolean
    help='Specify if missed occurrences should be executed when the server restarts.' string='Repeat Missed'
  • interval_number Integer
    default=1 help='Repeat every x.'
  • interval_type Selection
    default='months' string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • ir_actions_server_id Many2one → ir.actions.server
    delegate=True ondelete='restrict' required=True args: 'ir.actions.server', 'Server action'
  • nextcall Datetime
    default=fields.Datetime.now help='Next planned execution date for this job.' required=True string='Next Execution Date'
  • numbercall Integer
    default=1 help='How many times the method is called,\na negative number indicates no limit.' string='Number of Calls'
  • priority Integer
    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)
  • create(self, values)
    @api.model
  • default_get(self, fields_list)
    @api.model
  • method_direct_trigger(self)
    @api.multi
  • toggle(self, model, domain)
    @api.model
  • try_write(self, values)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

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 (8)
  • 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.
  • get(self, model_name, field_name, user_id=False, company_id=False, condition=False)
    @api.model
    Return the default value for the given field, user and company, or ``None`` if no default is available. :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'``.
  • get_model_defaults(self, model_name, condition=False)
    @api.model@tools.ormcache('self.env.uid', 'model_name', 'condition')
    Return the available default values for the given model (for the current user), as a dict mapping field names to 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 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)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • install_demo(self)

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 (3)
  • export_fields One2many → ir.exports.line
    copy=True string='Export ID' args: 'ir.exports.line', 'export_id'
  • name Char
    string='Export Name'
  • resource Char
    index=True
Public methods (0)

No public methods.

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

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • db_id_for(self, model, field, subfield, value)
    @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_get/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 context: OpenERP request context :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)
    @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.osv.orm.Model.write` expects. :param model: :class:`odoo.osv.orm.Model` for the conversion base :returns: a converter callable :rtype: (record: dict, logger: (field, error) -> None) -> dict
  • to_field(self, model, field, fromtype=str)
    @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 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 context: odoo request context :return: a function (fromtype -> field.write_type), if a converter is found :rtype: Callable | None

New fields (9)
  • 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
  • is_default Boolean
    string='Default Filter'
  • model_id Selection
    required=True selection='_list_all_models' string='Model'
  • name Char
    required=True string='Filter Name' translate=True
  • sort Text
    default='[]' required=True
  • user_id Many2one → res.users
    help='The user this filter is private to. When left empty the filter is public and available to all users.' ondelete='cascade' string='User' args: 'res.users'
Public methods (3)
  • copy(self, default=None)
    @api.multi
  • create_or_replace(self, vals)
    @api.model@api.returns('self', <expr>)
  • get_filters(self, model, action_id=None)
    @api.model
    Obtain the list of filters available for the user on the given model. :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_id`` (m2o tuple), ``action_id`` (m2o tuple) and ``context`` of the matching ``ir.filters``.

New fields (0)

No new fields.

Public methods (3)
  • binary_content(cls, xmlid=None, model='ir.attachment', id=None, field='datas', unique=False, filename=None, filename_field='datas_fname', download=False, mimetype=None, default_mimetype='application/octet-stream', access_token=None, related_id=None, access_mode=None, env=None)
    @classmethod
    Get file, attachment or downloadable content If the ``xmlid`` and ``id`` parameter is omitted, fetches the default value for the binary field (via ``default_get``), otherwise fetches the field for that precise record. :param str xmlid: xmlid of the record :param str model: name of the model to fetch the binary from :param int id: id of the record from which to fetch the binary :param str field: binary field :param bool unique: add a max-age for the cache control :param str filename: choose a filename :param str filename_field: if not create an filename with model-id-field :param bool download: apply headers to download the file :param str mimetype: mintype of the field (for headers) :param related_id: the id of another record used for custom_check :param access_mode: if truthy, will call custom_check to fetch the object that contains the binary. :param str default_mimetype: default mintype if no mintype found :param str access_token: optional token for unauthenticated access only available for ir.attachment :param Environment env: by default use request.env :returns: (status, headers, content)
  • content_disposition(cls, filename)
    @classmethod
  • routing_map(cls)
    @classmethod

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)
    @api.model_cr

New fields (9)
  • active Boolean
    default=True
  • name Char
    index=True required=True string='Description'
  • 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_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)' required=True string='Connection Security' args: [('none', 'None'), ('starttls', 'TLS (STARTTLS)'), ('ssl', 'SSL/TLS')]
  • smtp_host Char
    help='Hostname or IP of SMTP server' required=True 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.' required=True size=5 string='SMTP Port'
  • smtp_user Char
    groups='base.group_system' help='Optional username for SMTP authentication' string='Username'
Public methods (4)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
    Constructs an RFC2822 email.message.Message object based on the keyword arguments passed, and returns it. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) :param string body: email body, of the type ``subtype`` (by default, plaintext). If html subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative, unless an explicit ``body_alternative`` version is passed. :param string body_alternative: optional alternative body, of the type specified in ``subtype_alternative`` :param string reply_to: optional value of Reply-To header :param string object_id: optional tracking identifier, to be included in the message-id for recognizing replies. Suggested format for object-id is "res_id-model", e.g. "12345-crm.lead". :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), must match the format of the ``body`` parameter. Default is 'plain', making the content part of the mail "text/plain". :param string subtype_alternative: optional mime subtype of ``body_alternative`` (usually 'plain' or 'html'). Default is 'plain'. :param list attachments: list of (filename, filecontents) pairs, where filecontents is a string containing the bytes of the attachment :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) :param dict headers: optional map of headers to set on the outgoing mail (may override the other headers, including Subject, Reply-To, Message-Id, etc.) :rtype: email.message.Message (usually MIMEMultipart) :return: the new RFC2822 email message
  • connect(self, host=None, port=None, user=None, password=None, encryption=None, smtp_debug=False, mail_server_id=None)
    Returns a new SMTP connection to the given SMTP server. When running in test mode, this method does nothing and returns `None`. :param host: host or IP of SMTP server to connect to, if mail_server_id not passed :param int port: SMTP port to connect to :param user: optional username to authenticate with :param password: optional password to authenticate with :param string encryption: optional, ``'ssl'`` | ``'starttls'`` :param bool smtp_debug: toggle debugging of SMTP sessions (all i/o will be output in logs) :param mail_server_id: ID of specific mail server to use (overrides other parameters)
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=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' or 'ssl' (see ir.mail_server fields for explanation) :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_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)
    @api.multi

New fields (12)
  • access_ids One2many → ir.model.access
    string='Access' args: 'ir.model.access', 'model_id'
  • count Integer
    compute='_compute_count' help='Total number of records in this model' string='Count (incl. archived)'
  • field_id One2many → ir.model.fields
    copy=True default=_default_field_id required=True string='Fields' args: 'ir.model.fields', 'model_id'
  • 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_' index=True 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
  • rule_ids One2many → ir.rule
    string='Record Rules' args: 'ir.rule', 'model_id'
  • state Selection
    default='manual' readonly=True string='Type' args: [('manual', 'Custom Object'), ('base', 'Base Object')]
  • transient Boolean
    string='Transient Model'
  • view_ids One2many → ir.ui.view
    compute='_view_ids' string='Views' args: 'ir.ui.view'
Public methods (4)
  • create(self, vals)
    @api.model
  • 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)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (8)
  • active Boolean
    default=True help='If you uncheck the active field, it will disable the ACL without deleting it (if you delete a native ACL, it will be re-created when you reload the module).'
  • group_id Many2one → res.groups
    index=True ondelete='cascade' string='Group' args: 'res.groups'
  • model_id Many2one → ir.model
    domain=[('transient', '=', False)] index=True ondelete='cascade' required=True string='Object' args: 'ir.model'
  • name Char
    index=True required=True
  • perm_create Boolean
    string='Create Access'
  • perm_read Boolean
    string='Read Access'
  • perm_unlink Boolean
    string='Delete Access'
  • perm_write Boolean
    string='Write Access'
Public methods (10)
  • call_cache_clearing_methods(self)
    @api.model_cr
  • check(self, model, mode='read', raise_exception=True)
    @api.model@tools.ormcache_context('self._uid', 'model', 'mode', 'raise_exception', keys=('lang'))
  • check_group(self, model, mode, group_ids)
    @api.model
    Check if a specific group has the access mode to the specified model
  • check_groups(self, group)
    @api.model
    Check whether the current user has the given group.
  • create(self, vals_list)
    @api.model_create_multi
  • group_names_with_access(self, model_name, access_mode)
    @api.model_cr
    Return the names of visible groups which have been granted ``access_mode`` on the model ``model_name``. :rtype: list
  • register_cache_clearing_method(cls, model, method)
    @classmethod
  • unlink(self)
    @api.multi
  • unregister_cache_clearing_method(cls, model, method)
    @classmethod
  • write(self, values)
    @api.multi

New fields (7)
  • date_init Datetime
    string='Initialization Date'
  • date_update Datetime
    string='Update Date'
  • definition Char
    help='PostgreSQL constraint definition'
  • model Many2one → ir.model
    index=True ondelete='cascade' required=True args: 'ir.model'
  • module Many2one → ir.module.module
    index=True required=True args: 'ir.module.module'
  • name Char
    help='PostgreSQL constraint or foreign key name.' index=True required=True string='Constraint'
  • type Char
    help='Type of the constraint: `f` for a foreign key, `u` for other constraints.' index=True required=True size=1 string='Constraint Type'
Public methods (1)
  • copy(self, default=None)
    @api.multi

New fields (9)
  • complete_name Char
    compute='_compute_complete_name' string='Complete ID'
  • date_init Datetime
    default=fields.Datetime.now string='Init Date'
  • date_update Datetime
    default=fields.Datetime.now string='Update Date'
  • 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 Integer
    help='ID of the target record in the database' string='Record ID'
Public methods (10)
  • 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)
  • get_object(self, module, xml_id)
    @api.model
    Returns a browsable record for the given module name and xml_id. If not found, raise a ValueError or return None, depending on the value of `raise_exception`.
  • get_object_reference(self, module, xml_id)
    @api.model
    Returns (model, res_id) corresponding to a given module and xml_id (cached) or raise ValueError if not found
  • name_get(self)
    @api.multi
  • toggle_noupdate(self, model, res_id)
    @api.model
    Toggle the noupdate flag on the external id of the record
  • unlink(self)
    @api.multi
    Regular unlink method, but make sure to clear the caches.
  • xmlid_lookup(self, xmlid)
    @api.model@tools.ormcache('xmlid')
    Low level xmlid lookup Return (id, res_model, res_id) or raise ValueError if not found
  • xmlid_to_object(self, xmlid, raise_if_not_found=False)
    @api.model
    Return a Model object, or ``None`` if ``raise_if_not_found`` is set
  • xmlid_to_res_id(self, xmlid, raise_if_not_found=False)
    @api.model
    Returns res_id
  • xmlid_to_res_model_res_id(self, xmlid, raise_if_not_found=False)
    @api.model
    Return (res_model, res_id)

New fields (31)
  • 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'
  • complete_name Char
    index=True
  • 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
    help='Whether the value is copied when duplicating a record.' oldname='copy' string='Copied'
  • 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
  • groups Many2many → res.groups
    args: 'res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id'
  • help Text
    string='Field Help' translate=True
  • index Boolean
    string='Indexed'
  • model Char
    help='The technical name of the model this field belongs to' index=True required=True string='Object 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'
  • 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='Object Relation'
  • relation_field Char
    help='For one2many fields, the field on the target model that implement the opposite many2one relationship'
  • relation_field_id Many2one → ir.model.fields
    compute='_compute_relation_field_id' ondelete='cascade' store=True string='Relation field' args: 'ir.model.fields'
  • relation_table Char
    help='Used for custom many2many fields to define a custom relation table name'
  • required Boolean
  • selectable Boolean
    default=True
  • selection Char
    default='' help="List of options for a selection field, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'),('yellow','Yellow')]" string='Selection Options'
  • 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'
  • translate Boolean
    help='Whether values for this field can be translated (enables the translation mechanism for that field)' string='Translatable'
  • ttype Selection
    required=True selection=FIELD_TYPES string='Field Type'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (5)
  • date_init Datetime
    string='Initialization Date'
  • date_update Datetime
    string='Update Date'
  • model Many2one → ir.model
    index=True required=True args: 'ir.model'
  • module Many2one → ir.module.module
    index=True required=True args: 'ir.module.module'
  • name Char
    help='PostgreSQL table name implementing a many2many relation.' index=True required=True string='Relation Name'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

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'
  • module_nr Integer
    compute='_compute_module_nr' string='Number of Apps'
  • name Char
    index=True required=True string='Name' translate=True
  • parent_id Many2one → ir.module.category
    index=True string='Parent Application' args: 'ir.module.category'
  • 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 (28)
  • 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'
  • 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'
  • icon Char
    args: 'Icon URL'
  • 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 Licence'), ('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
    index=True readonly=True required=True args: 'Technical Name'
  • published_version Char
    readonly=True args: 'Published Version'
  • reports_by_module Text
    compute='_get_views' store=True string='Reports'
  • sequence Integer
    default=100 args: 'Sequence'
  • shortdesc Char
    readonly=True translate=True args: 'Module Name'
  • state Selection
    default='uninstallable' index=True readonly=True string='Status' args: STATES
  • summary Char
    readonly=True translate=True args: 'Summary'
  • to_buy Boolean
    default=False args: 'Odoo Enterprise Module'
  • url Char
    readonly=True args: 'URL'
  • views_by_module Text
    compute='_get_views' store=True string='Views'
  • website Char
    readonly=True args: 'Website'
Public methods (24)
  • button_immediate_install(self)
    @assert_log_admin_access@api.multi
    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@api.multi
    Uninstall the selected module(s) immediately and fully, returns the next res.config action to execute
  • button_immediate_upgrade(self)
    @assert_log_admin_access@api.multi
    Upgrade the selected module(s) immediately and fully, return the next res.config action to execute
  • button_install(self)
    @assert_log_admin_access@api.multi
  • button_install_cancel(self)
    @assert_log_admin_access@api.multi
  • button_uninstall(self)
    @assert_log_admin_access@api.multi
  • button_uninstall_cancel(self)
    @api.multi
  • button_uninstall_wizard(self)
    @assert_log_admin_access@api.multi
    Launch the wizard to uninstall the given module.
  • button_upgrade(self)
    @assert_log_admin_access@api.multi
  • button_upgrade_cancel(self)
    @assert_log_admin_access@api.multi
  • check_external_dependencies(cls, module_name, newstate='to install')
    @classmethod
  • create(self, vals)
    @api.model
  • download(self, download=True)
    @assert_log_admin_access@api.multi
  • downstream_dependencies(self, known_deps=None, exclude_states=('uninstalled', 'uninstallable', 'to remove'))
    @api.multi@api.returns('self')
    Return the modules that directly or indirectly depend on the modules in `self`, and that satisfy the `exclude_states` filter.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_apps_server(self)
    @api.model
  • get_module_info(cls, name)
    @classmethod
  • get_values_from_terp(terp)
    @staticmethod
  • install_from_urls(self, urls)
    @assert_log_admin_access@api.model
  • module_uninstall(self)
    @assert_log_admin_access@api.multi
    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
  • unlink(self)
    @api.multi
  • update_list(self)
    @assert_log_admin_access@api.model
  • upstream_dependencies(self, known_deps=None, exclude_states=('installed', 'uninstallable', 'to remove'))
    @api.multi@api.returns('self')
    Return the dependency tree of modules of the modules in `self`, and that satisfy the `exclude_states` filter.

New fields (4)
  • depend_id Many2one → ir.module.module
    compute='_compute_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 (0)

No public methods.

New fields (4)
  • exclusion_id Many2one → ir.module.module
    compute='_compute_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 (11)
  • company_id Many2one → res.company
    index=True string='Company' args: 'res.company'
  • fields_id Many2one → ir.model.fields
    index=True ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • name Char
    index=True
  • res_id Char
    help='If not set, acts as a default value for new resources' index=True string='Resource'
  • type Selection
    default='many2one' index=True required=True args: [('char', 'Char'), ('float', 'Float'), ('boolean', 'Boolean'), ('integer', 'Integer'), ('text', 'Text'), ('binary', 'Binary'), ('many2one', 'Many2One'), ('date', 'Date'), ('datetime', 'DateTime'), ('selection', 'Selection')]
  • value_binary Binary
  • value_datetime Datetime
  • value_float Float
  • value_integer Integer
  • value_reference Char
  • value_text Text
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
  • get(self, name, model, res_id=False)
    @api.model
  • get_by_record(self)
    @api.multi
  • get_multi(self, name, model, ids)
    @api.model
    Read the property field `name` for the records of model `model` with the given `ids`, and return a dictionary mapping `ids` to their corresponding value.
  • search_multi(self, name, model, operator, value)
    @api.model
    Return a domain for the records that match the given condition.
  • set_multi(self, name, model, values, default_value=None)
    @api.model
    Assign the property field `name` for the records of model `model` with `values` (dictionary mapping record ids to their value). If the value for a given record is the same as the default value, the property entry will not be stored, to avoid bloating the database. If `default_value` is provided, that value will be used instead of the computed default value, to determine whether the value for a record should be stored or not.
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (5)
  • compile(self, id_or_xml_id, options)
    @tools.conditional(<expr>, tools.ormcache('id_or_xml_id', 'tuple(options.get(k) for k in self._get_template_cache_keys())'))
  • default_values(self)
    attributes add to the values for each computed template
  • get_asset_bundle(self, xmlid, files, remains=None, env=None)
  • load(self, name, options)
  • render(self, id_or_xml_id, values=None, **options)
    @api.model
    render(id_or_xml_id, values, **options) Render the template specified by the given name. :param id_or_xml_id: name or etree (see get_template) :param dict values: template values to be used for rendering :param options: used to compile the template (the dict available for the rendering is frozen) * ``load`` (function) overrides the load method * ``profile`` (float) profile the rendering (use astor lib) (filter profile line with time ms >= profile)

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: OrderedDict (attribute name, attribute value).
  • get_available_options(self)
    @api.model
    Get the available option informations. Returns a dict of dict with: * key equal to the option key. * dict: type, params, name, description, default_value * type: 'string' 'integer' 'float' 'model' (e.g. 'res.partner') 'array' 'selection' (e.g. [key1, key2...])
  • 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. Fallbacks to en_US if no lang is present in the context *or the language code is not valid*. :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 (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)
  • record_to_html(self, record, field_name, options)
    @api.model

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

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

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="Two sequence object implementations are offered: Standard and 'No gap'. The later is slower than the former but forbids any gap in the sequence (while they are possible in the former)." 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 (8)
  • create(self, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get(self, code)
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by its code. This method is deprecated.
  • get_id(self, sequence_code_or_id, code_or_id='id')
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by the ``sequence_code_or_id`` argument, which can be a code or an id (as controlled by the ``code_or_id`` argument. This method is deprecated.
  • get_next_char(self, number_next)
  • next_by_code(self, sequence_code)
    @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. :param dict context: context dictionary may contain a ``force_company`` key with the ID of the company to use instead of the user's current company for the sequence selection. A matching sequence for that specific company will get higher priority.
  • next_by_id(self)
    @api.multi
    Draw an interpolated string using the specified sequence.
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

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, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • default_get(self, fields)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (5)
  • col1 Many2one → ir.model.fields
    required=True string='Field' args: 'ir.model.fields'
  • resource_ref Reference
    compute='_compute_resource_ref' inverse='_set_resource_ref' selection='_selection_target_model' string='Record'
  • server_id Many2one → ir.actions.server
    ondelete='cascade' string='Related Server Action' args: 'ir.actions.server'
  • type Selection
    change_default=True default='value' required=True args: [('value', 'Value'), ('reference', 'Reference'), ('equation', 'Python expression')], 'Evaluation Type'
  • value Text
    help='Expression containing a value specification. \nWhen Formula type is selected, this field may be a Python expression that can use the same values as for the code field on the server action.\nIf Value type is selected, the value will be used directly without evaluation.' required=True
Public methods (1)
  • eval_value(self, eval_context=None)
    @api.multi

New fields (10)
  • comments Text
    index=True string='Translation comments'
  • lang Selection
    selection='_get_languages' string='Language' validate=False
  • module Char
    help='Module this term belongs to' index=True
  • name Char
    required=True string='Translated field'
  • res_id Integer
    index=True string='Record ID'
  • source Text
    compute='_compute_source' inverse='_inverse_source' search='_search_source' string='Source term'
  • src Text
    string='Internal Source'
  • state Selection
    default='to_translate' help='Automatically set to let administators find new terms that might need to be translated' string='Status' args: [('to_translate', 'To Translate'), ('inprogress', 'Translation in Progress'), ('translated', 'Translated')]
  • type Selection
    index=True string='Type' args: TRANSLATION_TYPE
  • value Text
    string='Translation Value'
Public methods (10)
  • check(self, mode)
    @api.multi
    Check access rights of operation ``mode`` on ``self`` for the current user. Raise an AccessError in case conditions are not met.
  • create(self, vals_list)
    @api.model_create_multi
  • get_field_help(self, model_name)
    @api.model@tools.ormcache_context('model_name', keys=('lang'))
    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_string(self, model_name)
    @api.model@tools.ormcache_context('model_name', keys=('lang'))
    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}`
  • get_technical_translations(self, model_name)
    @api.model
    Find the translations for the fields of `model_name` Find the technical translations for the fields of the model, including string, tooltip and available selections. :return: action definition to open the list of available translations
  • insert_missing(self, field, records)
    @api.model
    Insert missing translations for `field` on `records`.
  • load_module_terms(self, modules, langs)
    @api.model_cr_context
    Load PO files of the given modules for the given languages.
  • translate_fields(self, model, id, field=None)
    @api.model
    Open a view for translating the field(s) of the record (model, id).
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

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' string='Full Path'
  • groups_id 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 (9)
  • copy(self, default=None)
    @api.multi
  • create(self, vals_list)
    @api.model_create_multi
  • get_user_roots(self)
    @api.model@api.returns('self')
    Return all root menu ids visible for the user. :return: the root menu ids :rtype: list(int)
  • load_menus(self, debug)
    @api.model@tools.ormcache_context('self._uid', 'debug', keys=('lang'))
    Loads all menu items (all applications and their sub-menus). :return: the menu root :rtype: dict('children': menu_nodes)
  • load_menus_root(self)
    @api.model@tools.ormcache_context('self._uid', keys=('lang'))
  • name_get(self)
    @api.multi
  • read_image(self, path)
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (18)
  • 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' inverse='_inverse_arch' nodrop=True string='View Architecture'
  • arch_base Text
    compute='_compute_arch_base' inverse='_inverse_arch_base' string='Base View Architecture'
  • arch_db Text
    oldname='arch' string='Arch Blob' translate=xml_translate
  • arch_fs Char
    string='Arch Filename'
  • field_parent Char
    string='Child Field'
  • groups_id 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'
  • key Char
  • 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_ids One2many → ir.model.data
    auto_join=True domain=[('model', '=', 'ir.ui.view')] string='Models' args: 'ir.model.data', 'res_id'
  • name Char
    required=True string='View Name'
  • priority Integer
    default=16 required=True string='Sequence'
  • type Selection
    string='View Type' args: [('tree', 'Tree'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('diagram', 'Diagram'), ('gantt', 'Gantt'), ('kanban', 'Kanban'), ('search', 'Search'), ('qweb', 'QWeb')]
  • xml_id Char
    compute='_compute_xml_id' help='ID of the view defined in xml file' string='External ID'
Public methods (29)
  • add_on_change(self, model_name, arch)
    Add attribute on_change="1" on fields that are dependencies of computed fields on the same view.
  • apply_inheritance_specs(self, source, specs_tree, inherit_id)
    @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 Elepect specs_tree: a modifying architecture in an inheriting view :param inherit_id: the database id of specs_arch :return: a modified source where the specs are applied :rtype: Element
  • apply_view_inheritance(self, source, source_id, model, root_id=None)
    @api.model
    Apply all the (directly and indirectly) inheriting views. :param source: a parent architecture to modify (with parent modifications already applied) :param source_id: the database view_id of the parent view :param model: the original model for which we create a view (not necessarily the same as the source's model); only the inheriting views with that specific model will be applied. :return: a modified source where all the modifying architecture are applied
  • clear_cache(self)
    Deprecated, use `clear_caches` instead.
  • copy(self, default=None)
    @api.multi@api.returns('self', <expr>)
  • 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_attrs_field_names(self, arch, model, editable)
    Retrieve the field names appearing in context, domain and attrs, and return a list of triples ``(field_name, attr_name, attr_value)``.
  • get_attrs_symbols(self)
    Return a set of predefined symbols for evaluating attrs.
  • get_inheriting_views_arch(self, view_id, model)
    @api.model
    Retrieves the architecture of views that inherit from the given view, from the sets of views that should currently be used in the system. During the module upgrade phase it may happen that a view is present in the database but the fields it relies on are not fully loaded yet. This method only considers views that belong to modules whose code is already loaded. Custom views defined directly in the database are loaded only after the module initialization phase is completely finished. :param int view_id: id of the view whose inheriting views should be retrieved :param str model: model identifier of the inheriting views. :rtype: list of tuples :return: [(view_arch,view_id), ...]
  • get_view_id(self, template)
    @api.model
    Return the view ID corresponding to ``template``, which may be a view ID or an XML ID. Note that this method may be overridden for other kinds of template values. This method could return the ID of something that is not a view (when using fallback to `xmlid_to_res_id`).
  • get_view_xmlid(self)
    @api.multi@tools.ormcache('self.id')
  • graph_get(self, id, model, node_obj, conn_obj, src_node, des_node, label, scale)
    @api.model
  • inherit_branding(self, specs_tree, view_id, root_id)
  • 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
  • open_translations(self)
    @api.multi
    Open a view for editing the translations of field 'arch_db'.
  • postprocess(self, model, node, view_id, in_tree_view, model_fields)
    @api.model
    Return the description of the fields in the node. In a normal call to this method, node is a complete view architecture but it is actually possible to give some sub-node (this is used so that the method can call itself recursively). Originally, the field descriptions are drawn from the node itself. But there is now some code calling fields_get() in order to merge some of those information in the architecture.
  • postprocess_and_fields(self, model, node, view_id)
    @api.model
    Return an architecture and a description of all the fields. The field description combines the result of fields_get() and postprocess(). :param node: the architecture as as an etree :return: a tuple (arch, fields) where arch is the given node as a string and fields is the description of all the fields.
  • raise_view_error(self, message, view_id)
    @api.model
  • read_combined(self, fields=None)
    @api.multi
    Utility function to get a view combined with its inherited views. * Gets the top of the view tree if a sub-view is requested * Applies all inherited archs on the root view * Returns the view with all requested fields .. note:: ``arch`` is always added to the fields list even if not requested (similar to ``id``)
  • read_template(self, xml_id)
    @api.model
  • render(self, values=None, engine='ir.qweb', minimal_qcontext=False)
    @api.multi
  • render_template(self, template, values=None, engine='ir.qweb')
    @api.model
  • toggle(self)
    @api.multi
    Switches between enabled and disabled statuses
  • translate_qweb(self, arch, lang)
    @api.multi
  • unlink(self)
  • write(self, vals)
    @api.multi

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 (1)
  • name_get(self)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (16)
  • default Boolean
    args: 'Default paper format ?'
  • 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 (11)
  • active Boolean
    default=True
  • bic Char
    help='Sometimes called BIC or Swift.' index=True args: 'Bank Identifier Code'
  • city Char
  • country Many2one → res.country
    args: 'res.country'
  • email Char
  • name Char
    required=True
  • phone Char
  • state Many2one → res.country.state
    domain="[('country_id', '=?', country)]" args: 'res.country.state', 'Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (1)
  • name_get(self)
    @api.multi

New fields (27)
  • account_no Char
    string='Account No.'
  • bank_ids One2many → res.partner.bank
    help='Bank accounts related to this company' string='Bank Accounts' args: 'res.partner.bank', 'company_id'
  • base_onboarding_company_state Selection
    default='not_done' string='State of the onboarding company step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
  • child_ids One2many → res.company
    string='Child Companies' args: 'res.company', 'parent_id'
  • city Char
    compute='_compute_address' inverse='_inverse_city'
  • company_registry Char
  • country_id Many2one → res.country
    compute='_compute_address' inverse='_inverse_country' string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • email Char
    readonly=False related='partner_id.email' store=True
  • external_report_layout_id Many2one → ir.ui.view
    args: 'ir.ui.view', 'Document Template'
  • logo Binary
    default=_get_logo readonly=False related='partner_id.image' string='Company Logo'
  • logo_web Binary
    compute='_compute_logo_web' store=True
  • name Char
    readonly=False related='partner_id.name' required=True store=True string='Company Name'
  • paperformat_id Many2one → report.paperformat
    default=<expr> args: 'report.paperformat', 'Paper format'
  • parent_id Many2one → res.company
    index=True string='Parent Company' args: 'res.company'
  • partner_id Many2one → res.partner
    required=True string='Partner' args: 'res.partner'
  • phone Char
    readonly=False related='partner_id.phone' store=True
  • report_footer Text
    help='Footer text displayed at the bottom of all reports.' string='Report Footer' translate=True
  • report_header Text
    help='Appears by default on the top right corner of your printed documents (report header).' string='Company Tagline'
  • sequence Integer
    default=10 help='Used to order Companies in the company switcher'
  • state_id Many2one → res.country.state
    compute='_compute_address' inverse='_inverse_state' string='Fed. State' args: 'res.country.state'
  • street Char
    compute='_compute_address' inverse='_inverse_street'
  • street2 Char
    compute='_compute_address' inverse='_inverse_street2'
  • user_ids Many2many → res.users
    string='Accepted Users' args: 'res.users', 'res_company_users_rel', 'cid', 'user_id'
  • vat Char
    readonly=False related='partner_id.vat' string='Tax ID'
  • website Char
    readonly=False related='partner_id.website'
  • zip Char
    compute='_compute_address' inverse='_inverse_zip'
Public methods (12)
  • action_open_base_onboarding_company(self)
    @api.model
    Onboarding step for company basic information.
  • action_save_onboarding_company_step(self)
    @api.multi
  • cache_restart(self)
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • get_and_update_onbarding_state(self, onboarding_state, steps_states)
    Needed to display onboarding animations only one time.
  • init(self)
    @api.model_cr
  • on_change_country(self, country_id)
    @api.multi
  • open_company_edit_report(self)
    @api.multi
  • set_onboarding_step_done(self, step_name)
  • write(self, values)
    @api.multi
  • write_company_and_print_report(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (7)
  • action_cancel(self)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    Reload the settings page
  • start(self)
    @api.multi

New fields (0)

No new fields.

Public methods (5)
  • already_installed(self)
    For each module, check if it's already installed and if it is return its name :returns: a list of the already installed modules in this installer :rtype: [str]
  • default_get(self, fields_list)
    @api.model
    If an addon is already installed, check it by default
  • execute(self)
    @api.multi
  • fields_get(self, fields=None, attributes=None)
    @api.model
    If an addon is already installed, set it to readonly as res.config.installer doesn't handle uninstallations of already installed addons
  • modules_to_install(self)
    selects all modules to install: * checked boolean fields * return values of hook methods. Hook methods are of the form ``_if_%(addon_name)s``, and are called if the corresponding addon is marked for installation. They take the arguments cr, uid, ids and context, and return an iterable of addon names * additionals, additionals are setup through the ``_install_if`` class variable. ``_install_if`` is a dict of {iterable:iterable} where key and value are iterables of addon names. If all the addons in the key are selected for installation (warning: addons added through hooks don't count), then the addons in the value are added to the set of modules to install * not already installed

New fields (0)

No new fields.

Public methods (12)
  • cancel(self)
    @api.multi
  • copy(self, values)
    @api.multi
  • default_get(self, fields)
    @api.model
  • execute(self)
    @api.multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_config_warning(self, msg)
    @api.model_cr_context
    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: --------------- from odoo.addons.base.models.res_config import get_warning_config raise get_warning_config(cr, _("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."), context=context) 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 string: human readable name of the field (e.g.: "Create leads from incoming mails")
  • 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 tuple: - 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)
    Return values for the fields other that `default`, `group` and `module`
  • name_get(self)
    @api.multi
    Override name_get method to return an appropriate configuration wizard name, and not the generated name.
  • onchange_module(self, field_value, module_name)
    @api.multi
  • set_values(self)
    Set values for the fields other that `default`, `group` and `module`

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

New fields (2)
  • 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 (0)

No public methods.

New fields (3)
  • code Char
    help='The state code.' required=True string='State Code'
  • country_id Many2one → res.country
    required=True string='Country' args: 'res.country'
  • name Char
    help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton' required=True string='State Name'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (11)
  • active Boolean
    default=True
  • currency_subunit_label Char
    help='Currency Subunit Name' string='Currency Subunit'
  • currency_unit_label Char
    help='Currency Unit Name' string='Currency Unit'
  • date Date
    compute='_compute_date'
  • decimal_places Integer
    compute='_compute_decimal_places' store=True
  • name Char
    help='Currency Code (ISO 4217)' required=True size=3 string='Currency'
  • position Selection
    default='after' help='Determines where the currency symbol should be placed after or before the amount.' string='Symbol Position' args: [('after', 'After Amount'), ('before', 'Before Amount')]
  • rate Float
    compute='_compute_current_rate' digits=(12, 6) help='The rate of the currency to the currency of rate 1.' string='Current Rate'
  • rate_ids One2many → res.currency.rate
    string='Rates' args: 'res.currency.rate', 'currency_id'
  • rounding Float
    default=0.01 digits=(12, 6) string='Rounding Factor'
  • symbol Char
    help='Currency sign, to be used when printing amounts.' required=True
Public methods (6)
  • amount_to_text(self, amount)
    @api.multi
  • compare_amounts(self, amount1, amount2)
    @api.multi
    Compare ``amount1`` and ``amount2`` after rounding them according to the given currency's precision.. An amount is considered lower/greater than another amount if their rounded value is different. This is not the same as having a non-zero difference! For example 1.432 and 1.431 are equal at 2 digits precision, so this method would return 0. However 0.006 and 0.002 are considered different (returns 1) because they respectively round to 0.01 and 0.0, even though 0.006-0.002 = 0.004 which would be considered zero at 2 digits precision. :param float amount1: first amount to compare :param float amount2: second amount to compare :return: (resp.) -1, 0 or 1, if ``amount1`` is (resp.) lower than, equal to, or greater than ``amount2``, according to ``currency``'s rounding. With the new API, call it like: ``currency.compare_amounts(amount1, amount2)``.
  • compute(self, from_amount, to_currency, round=True)
    @api.multi
  • is_zero(self, amount)
    @api.multi
    Returns true if ``amount`` is small enough to be treated as zero according to current currency's rounding rules. Warning: ``is_zero(amount1-amount2)`` is not always equivalent to ``compare_amounts(amount1,amount2) == 0``, as the former will round after computing the difference, while the latter will round before, giving different results for e.g. 0.006 and 0.002 at 2 digits precision. :param float amount: amount to compare with currency's zero With the new API, call it like: ``currency.is_zero(amount)``.
  • name_get(self)
    @api.multi
  • round(self, amount)
    @api.multi
    Return ``amount`` rounded according to ``self``'s rounding rules. :param float amount: the amount to round :return: rounded float

New fields (4)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • name Date
    default=fields.Date.context_today index=True required=True string='Date'
  • rate Float
    default=1.0 digits=(12, 6) help='The rate of the currency to the currency of rate 1'
Public methods (0)

No public methods.

New fields (11)
  • category_id Many2one → ir.module.category
    index=True string='Application' args: 'ir.module.category'
  • color Integer
    string='Color Index'
  • comment Text
    translate=True
  • full_name Char
    compute='_compute_full_name' search='_search_full_name' string='Group Name'
  • menu_access Many2many → ir.ui.menu
    string='Access Menu' args: 'ir.ui.menu', 'ir_ui_menu_group_rel', 'gid', 'menu_id'
  • model_access One2many → ir.model.access
    copy=True string='Access Controls' args: 'ir.model.access', 'group_id'
  • name Char
    required=True translate=True
  • rule_groups Many2many → ir.rule
    domain=[('global', '=', False)] string='Rules' args: 'ir.rule', 'rule_group_rel', 'group_id', 'rule_group_id'
  • share Boolean
    help='Group created to set access rights for sharing data with some users.' string='Share Group'
  • users Many2many → res.users
    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'
Public methods (2)
  • copy(self, default=None)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • implied_ids Many2many → res.groups
    help='Users of this group automatically inherit those groups' string='Inherits' args: 'res.groups', 'res_groups_implied_rel', 'gid', 'hid'
  • trans_implied_ids Many2many → res.groups
    compute='_compute_trans_implied' string='Transitively inherits' args: 'res.groups'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (5)
  • create(self, values)
    @api.model
  • get_application_groups(self, domain)
    Return the non-share groups that satisfy ``domain``.
  • get_groups_by_application(self)
    @api.model
    Return all groups classified by application (module category), as a list:: [(app, kind, groups), ...], where ``app`` and ``groups`` are recordsets, and ``kind`` is either ``'boolean'`` or ``'selection'``. Applications are given in sequence order. If ``kind`` is ``'selection'``, ``groups`` are given in reverse implication order.
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (12)
  • active Boolean
  • code Char
    help='This field is used to set/get locales for user' required=True string='Locale Code'
  • date_format Char
    default=DEFAULT_DATE_FORMAT required=True string='Date Format'
  • decimal_point Char
    default='.' required=True string='Decimal Separator' trim=False
  • direction Selection
    default='ltr' required=True args: [('ltr', 'Left-to-Right'), ('rtl', 'Right-to-Left')]
  • grouping Char
    default='[]' help="The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case." required=True string='Separator Format'
  • iso_code Char
    help='This ISO code is the name of po files to use for translations' string='ISO code'
  • name Char
    required=True
  • thousands_sep Char
    default=',' string='Thousands Separator' trim=False
  • time_format Char
    default=DEFAULT_TIME_FORMAT required=True string='Time Format'
  • translatable Boolean
  • week_start Selection
    default=7 required=True string='First Day of Week' args: [(1, 'Monday'), (2, 'Tuesday'), (3, 'Wednesday'), (4, 'Thursday'), (5, 'Friday'), (6, 'Saturday'), (7, 'Sunday')]
Public methods (8)
  • create(self, vals_list)
    @api.model_create_multi
  • format(self, percent, value, grouping=False, monetary=False)
    @api.multi
    Format() will return the language-specific output for float values
  • get_available(self)
    @api.model@tools.ormcache()
    Return the available languages as a list of (code, name) sorted by name.
  • get_installed(self)
    @api.model@tools.ormcache()
    Return the installed languages as a list of (code, name) sorted by name.
  • install_lang(self)
    @api.model
    This method is called from odoo/addons/base/base_data.xml to load some language and set it as the default for every partners. The language is set via tools.config by the RPC 'create' method on the 'db' object. This is a fragile solution and something else should be found.
  • load_lang(self, lang, lang_name=None)
    @api.model
    Create the given language if necessary, and make it active.
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (50)
  • active Boolean
    default=True
  • bank_ids One2many → res.partner.bank
    string='Banks' args: 'res.partner.bank', 'partner_id'
  • barcode Char
    help='Use a barcode to identify this contact from the Point of Sale.' oldname='ean13'
  • category_id Many2many → res.partner.category
    column1='partner_id' column2='category_id' default=_default_category string='Tags' args: 'res.partner.category'
  • child_ids One2many → res.partner
    domain=[('active', '=', True)] string='Contacts' args: 'res.partner', 'parent_id'
  • city Char
  • color Integer
    default=0 string='Color Index'
  • comment Text
    string='Notes'
  • commercial_company_name Char
    compute='_compute_commercial_company_name' store=True args: 'Company Name Entity'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner' index=True store=True string='Commercial Entity' args: 'res.partner'
  • company_id Many2one → res.company
    default=_default_company index=True args: 'res.company', 'Company'
  • company_name Char
    args: 'Company Name'
  • company_type Selection
    compute='_compute_company_type' inverse='_write_company_type' selection=[('person', 'Individual'), ('company', 'Company')] string='Company Type'
  • contact_address Char
    compute='_compute_contact_address' string='Complete Address'
  • country_id Many2one → res.country
    ondelete='restrict' string='Country' args: 'res.country'
  • credit_limit Float
    string='Credit Limit'
  • customer Boolean
    default=True help='Check this box if this contact is a customer. It can be selected in sales orders.' string='Is a Customer'
  • date Date
    index=True
  • display_name Char
    compute='_compute_display_name' index=True store=True
  • 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'
  • image Binary
    attachment=True help='This field holds the image used as avatar for this contact, limited to 1024x1024px' args: 'Image'
  • image_medium Binary
    attachment=True help='Medium-sized image of this contact. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' args: 'Medium-sized image'
  • image_small Binary
    attachment=True help='Small-sized image of this contact. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' args: 'Small-sized image'
  • industry_id Many2one → res.partner.industry
    args: 'res.partner.industry', 'Industry'
  • is_company Boolean
    default=False help='Check if the contact is a company, otherwise it is a person' string='Is a Company'
  • lang Selection
    default=<expr> help='All the emails and documents sent to this contact will be translated in this language.' string='Language' args: _lang_get
  • mobile Char
  • name Char
    index=True
  • parent_id Many2one → res.partner
    index=True string='Related Company' args: 'res.partner'
  • parent_name Char
    readonly=True related='parent_id.name' string='Parent name'
  • 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='Internal Reference'
  • self Many2one
    comodel_name=_name compute='_compute_get_ids'
  • state_id Many2one → res.country.state
    domain="[('country_id', '=?', country_id)]" ondelete='restrict' string='State' args: 'res.country.state'
  • street Char
  • street2 Char
  • supplier Boolean
    help='Check this box if this contact is a vendor. It can be selected in purchase orders.' string='Is a Vendor'
  • title Many2one → res.partner.title
    args: 'res.partner.title'
  • type Selection
    default='contact' help='Used by Sales and Purchase Apps to select the relevant address depending on the context.' string='Address Type' args: [('contact', 'Contact'), ('invoice', 'Invoice address'), ('delivery', 'Shipping address'), ('other', 'Other address'), ('private', 'Private Address')]
  • tz Selection
    default=<expr> help="The partner's timezone, used to output proper date and time values inside printed reports. It is important to set a value for this field. You should use the same timezone that is otherwise used to pick and render date and time values: your computer's timezone." string='Timezone' args: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
  • user_id Many2one → res.users
    help='The internal user in charge of this contact.' string='Salesperson' args: 'res.users'
  • user_ids One2many → res.users
    auto_join=True string='Users' args: 'res.users', 'partner_id'
  • vat Char
    help='The Tax Identification Number. Complete it if the contact is subjected to government taxes. Used in some legal statements.' index=True string='Tax ID'
  • website Char
  • zip Char
    change_default=True
Public methods (18)
  • address_get(self, adr_pref=None)
    @api.multi
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy(self, default=None)
    @api.multi
  • create(self, vals_list)
    @api.model_create_multi
  • create_company(self)
    @api.multi
  • find_or_create(self, email)
    @api.model
    Find a partner with the given ``email`` or use :py:method:`~.name_create` to create one :param str email: email-like string, which should contain at least one email, e.g. ``"Raoul Grosbedon <r.g@grosbedon.fr>"``
  • get_base_url(self)
    @api.multi
    Get the base URL for the current partner.
  • get_import_templates(self)
    @api.model
  • main_partner(self)
    @api.model@api.returns('self')
    Return the main partner
  • 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.
  • name_get(self)
    @api.multi
  • onchange_company_type(self)
    @api.onchange('company_type')
  • onchange_email(self)
    @api.onchange('email')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • open_commercial_entity(self)
    @api.multi
    Utility method used to add an "Open Company" button in partner views
  • open_parent(self)
    @api.multi
    Utility method used to add an "Open Parent" button in partner views
  • update_address(self, vals)
    @api.multi
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)
    @api.multi

New fields (12)
  • acc_holder_name Char
    help='Account holder name, in case it is different than the name of the Account Holder' string='Account Holder Name'
  • acc_number Char
    required=True args: 'Account Number'
  • acc_type Selection
    compute='_compute_acc_type' help='Bank account type: Normal or IBAN. Inferred from the bank account number.' selection=<expr> string='Type'
  • bank_bic Char
    readonly=False related='bank_id.bic'
  • bank_id Many2one → res.bank
    string='Bank' args: 'res.bank'
  • bank_name Char
    readonly=False related='bank_id.name'
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • partner_id Many2one → res.partner
    domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' required=True args: 'res.partner', 'Account Holder'
  • qr_code_valid Boolean
    compute='_validate_qr_code_arguments' string='Has all required arguments'
  • sanitized_acc_number Char
    compute='_compute_sanitized_acc_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
    default=10
Public methods (5)
  • build_qr_code_base64(self, amount, comment)
    @api.model
  • build_qr_code_url(self, amount, comment)
    @api.model
  • build_qr_code_vals(self, amount, comment)
  • get_supported_account_types(self)
    @api.model
  • retrieve_acc_type(self, acc_number)
    @api.model
    To be overridden by subclasses in order to support other account_types.

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the category without removing it.'
  • child_ids One2many → res.partner.category
    string='Child Tags' args: 'res.partner.category', 'parent_id'
  • color Integer
    string='Color Index'
  • name Char
    required=True string='Tag Name' translate=True
  • parent_id Many2one → res.partner.category
    index=True ondelete='cascade' string='Parent Category' args: 'res.partner.category'
  • parent_path Char
    index=True
  • partner_ids Many2many → res.partner
    column1='category_id' column2='partner_id' string='Partners' args: 'res.partner'
Public methods (1)
  • name_get(self)
    @api.multi
    Return the categories' display name, including their direct parent by default. If ``context['partner_category_display']`` is ``'short'``, the short version of the category name (without the direct parent) is used. The default is the long version.

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 (2)
  • name Char
    required=True string='Title' translate=True
  • shortcut Char
    string='Abbreviation' translate=True
Public methods (0)

No public methods.

New fields (18)
  • 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'
  • companies_count Integer
    compute='_compute_companies_count' default=_companies_count string='Number of Companies'
  • company_id Many2one → res.company
    context={'user_preference': True} default=_get_company help='The company this user is currently working for.' required=True string='Company' args: 'res.company'
  • company_ids Many2many → res.company
    default=_get_company string='Companies' args: 'res.company', 'res_company_users_rel', 'user_id', 'cid'
  • email Char
    inherited=True readonly=False related='partner_id.email'
  • groups_id Many2many → res.groups
    default=_default_groups string='Groups' args: 'res.groups', 'res_groups_users_rel', 'uid', 'gid'
  • 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 connection'
  • name Char
    inherited=True readonly=False related='partner_id.name'
  • new_password Char
    compute='_compute_password' help="Specify a value only when creating a user or if you're changing the user's password, otherwise leave empty. After a change of password, the user has to login again." inverse='_set_new_password' string='Set Password'
  • partner_id Many2one → res.partner
    auto_join=True help='Partner-related data of the user' 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' invisible=True
  • 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
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
Public methods (20)
  • action_get(self)
    @api.model@api.returns('ir.actions.act_window', <expr>)
  • authenticate(cls, db, login, password, user_agent_env)
    @classmethod
    Verifies and returns the user ID corresponding to the given ``login`` and ``password`` combination, or False if there was no matching user. :param str db: the database on which user is trying to authenticate :param str login: username :param str password: user password :param dict user_agent_env: environment dictionary describing any relevant environment attributes
  • 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
  • check(cls, db, uid, passwd)
    @classmethod
    Verifies that the given (uid, password) is authorized for the database ``db`` and raise an exception if it is not.
  • check_super(self, passwd)
  • context_get(self)
    @api.model@tools.ormcache('self._uid')
  • copy(self, default=None)
    @api.multi
  • create(self, vals_list)
    @api.model_create_multi
  • get_company_currency_id(self)
    @api.model
  • has_group(self, group_ext_id)
    @api.model
  • init(self)
  • on_change_login(self)
    @api.onchange('login')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • preference_change_password(self)
    @api.multi
  • preference_save(self)
    @api.multi
  • read(self, fields=None, load='_classic_read')
    @api.multi
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • toggle_active(self)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

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

New fields (0)

No new fields.

Public methods (5)
  • create(self, values)
    @api.model
  • default_get(self, fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • read(self, fields=None, load='_classic_read')
    @api.multi
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

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)
    @api.multi
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Xavier ALT, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, xmo-odoo, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Olivier Colson, Wolfgang Taferner, Yannick Tivisse, qsm-odoo, Martin Geubelle, Odoo Online, Laurent Smet, De Paoli Quentin, mge-odoo, fwi-odoo, tbe-odoo, Adrien Dieudonne, RomainLibert, rde, Christophe Monniez, len-odoo, Jorge Pinna Puissant, Jairo Llopis, Nans Lefebvre, Denis Vermylen, Nicolas Vannieuwerburgh, Adrian Torres, mreficent, Julien Castiaux, Luis Torres, Victor Feyens, Florimond Husquinet (fhu), William Henrotin, Nasreddin (bon), fw-bot, Anh Thao Pham (pta), Katherine Zaoral, Debauche Stéphane, Luis González, Alvaro Fuentes, sbbaro, kujiu (@havelock.kujiu.org)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

Views touched (156)
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.tree ir.actions.report tree New
action_view ir.actions.actions ir.actions.actions form New
action_view_company_form_link_2_currencies res.company.form res.company form Inherits base.view_company_form
action_view_search ir.actions.actions.search ir.actions.actions search New
action_view_tree ir.actions.actions.tree ir.actions.actions tree New
change_password_wizard_user_tree_view Change Password Users change.password.user tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
contact_name contact_name ir.ui.view qweb New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree New
ir_cron_view_calendar ir.cron calendar New
ir_cron_view_form ir.cron.view.form ir.cron div Inherits base.view_server_action_form
ir_cron_view_search ir.cron search New
ir_cron_view_tree ir.cron tree 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 tree view ir.default tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Apps Kanban ir.module.module kanban New
paperformat_view_form paper_format_view_form report.paperformat form New
paperformat_view_tree paper_format_view_tree report.paperformat tree New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_config_installer Inheritable view for installer objects res.config.installer form 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_lang_form res.lang.form res.lang form New
res_lang_search res.lang.search res.lang search New
res_lang_tree res.lang.tree res.lang tree New
res_partner_industry_view_form Industry res.partner.industry form New
res_partner_industry_view_tree Industry res.partner.industry tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_partner_view_form_private res.partner.view.form.private res.partner form New
res_request_link-view res.request.link.form res.request.link form New
res_request_link_search_view res.request.link.search res.request.link search New
res_request_link_tree-view res.request.link.form res.request.link tree New
sequence_view ir.sequence form New
sequence_view_tree ir.sequence tree New
user_groups_view res.users.groups res.users form Inherits view_users_form
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree 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_company_form res.company.form res.company form New
view_company_report_form res.company.report.form res.company form Inherits base.view_company_form
view_company_report_form_with_print res.company.report.form.with.print res.company form Inherits base.view_company_report_form
view_company_tree res.company.tree res.company tree 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.tree res.country.group tree New
view_country_state_form res.country.state.form res.country.state form New
view_country_state_tree res.country.state.tree res.country.state tree New
view_country_tree res.country.tree res.country tree 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_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.tree res.currency.rate tree New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_groups_form res.groups.form res.groups form 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 tree New
view_ir_config_search ir.config_parameter search New
view_ir_mail_server_search ir.mail_server search New
view_menu ir.ui.menu.tree ir.ui.menu tree New
view_model_constraint_form ir.model.constraint form New
view_model_constraint_list ir.model.constraint tree New
view_model_data_form ir.model.data form New
view_model_data_list ir.model.data tree 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_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree 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.tree res.partner.bank tree New
view_partner_category_form Contact Tags res.partner.category form New
view_partner_category_list Contact Tags res.partner.category tree New
view_partner_form res.partner.form res.partner form New
view_partner_short_form res.partner.form res.partner form New
view_partner_simple_form res.partner.simplified.form res.partner form New
view_partner_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_company_kanban res.company.kanban res.company kanban New
view_res_partner_filter res.partner.select res.partner search New
view_res_users_kanban res.users.kanban res.users kanban New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree New
view_translation_dialog_tree ir.translation tree New
view_translation_form ir.translation form New
view_translation_search ir.translation search New
view_translation_tree ir.translation tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
wizard_lang_export Export Translations base.language.export form New
wizard_update_translations Generate Missing Terms base.update.translations form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (97)

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 (6)
  • data Binary
    readonly=True args: 'File'
  • format Selection
    default='csv' 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
  • 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)
    @api.multi

New fields (5)
  • code Char
    help='ISO Language and Country code, e.g. en_US' required=True size=5 args: 'ISO Code'
  • data Binary
    required=True args: 'File'
  • filename Char
    required=True args: 'File Name'
  • name Char
    required=True args: 'Language Name'
  • overwrite Boolean
    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)
    @api.multi

New fields (3)
  • lang Selection
    default=_default_language required=True string='Language' args: _get_languages
  • overwrite Boolean
    help='If you check this box, your customized translations will be overwritten and replaced by the official ones.' args: 'Overwrite Existing Terms'
  • state Selection
    default='init' readonly=True string='Status' args: [('init', 'init'), ('done', 'done')]
Public methods (2)
  • lang_install(self)
    @api.multi
  • reload(self)

New fields (4)
  • model_ids Many2many → ir.model
    compute='_compute_model_ids' string='Impacted data models' args: 'ir.model'
  • module_id Many2one → ir.module.module
    domain=[('state', 'in', ['installed', 'to upgrade', 'to install'])] required=True string='Module' args: 'ir.module.module'
  • module_ids Many2many → ir.module.module
    compute='_compute_module_ids' string='Impacted modules' args: 'ir.module.module'
  • show_all Boolean
Public methods (1)
  • action_uninstall(self)
    @api.multi

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)
    @api.multi
  • update_module(self)
    @api.multi

New fields (1)
  • module_info Text
    default=_default_module_info readonly=True args: 'Apps to Update'
Public methods (5)
  • config(self)
    @api.multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_module_list(self)
    @api.model@api.returns('ir.module.module')
  • upgrade_module(self)
    @api.multi
  • upgrade_module_cancel(self)
    @api.multi

New fields (1)
  • lang Selection
    required=True args: _get_languages, 'Language'
Public methods (1)
  • act_update(self)
    @api.multi

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
    required=True string='Wizard' args: 'change.password.wizard'
Public methods (1)
  • change_password_button(self)
    @api.multi

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)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

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

No public methods.

New fields (21)
  • auto_search Boolean
    default=True
  • 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'
  • filter Boolean
  • groups_id 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'
  • multi Boolean
    help='If checked and the action is bound to a model, it will only appear in the More menu on list views' string='Restrict to lists'
  • name Char
    string='Action Name' translate=True
  • 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 Text
    compute='_compute_search_view'
  • search_view_id Many2one → ir.ui.view
    string='Search View Ref.' args: 'ir.ui.view'
  • src_model Char
    help='Optional model name of the objects on which this action should be visible' string='Source Model'
  • target Selection
    default='current' string='Target Window' args: [('current', 'Current Window'), ('new', 'New Window'), ('inline', 'Inline Edit'), ('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='Views' args: 'ir.actions.act_window.view', 'act_window_id'
  • view_mode Char
    default='tree,form' help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)" required=True
  • view_type Selection
    default='form' help="View type: Tree type to use for the tree view, set to 'tree' for a hierarchical tree view, or 'form' for a regular list view" required=True string='View Type' args: [('tree', 'Tree'), ('form', 'Form')]
  • views Binary
    compute='_compute_views' help='This function field computes the ordered list of views that should be enabled when displaying the result of an action, federating view mode, views and reference view. The result is returned as an ordered list of pairs (view_id,view_mode).'
Public methods (5)
  • create(self, vals)
    @api.model
  • exists(self)
    @api.multi
  • for_xml_id(self, module, xml_id)
    @api.model
    Returns the act_window object created for the provided xml_id :param module: the module the act_window originates in :param xml_id: the namespace-less id of the action (the @id attribute from the XML file) :return: A read() view of the ir.actions.act_window
  • read(self, fields=None, load='_classic_read')
    @api.multi
    call the method get_empty_list_help of the model and set the window action help message
  • unlink(self)
    @api.multi

New fields (5)
  • act_window_id Many2one → ir.actions.act_window
    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 (6)
  • 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'), ('action_form_only', 'Form-only'), ('report', 'Report')]
  • 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
  • type Char
    required=True string='Action Type'
  • xml_id Char
    compute='_compute_xml_id' string='External ID'
Public methods (4)
  • create(self, vals)
    @api.model
  • get_bindings(self, model_name)
    @api.model@tools.ormcache('frozenset(self.env.user.groups_id.ids)', 'model_name')
    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)
    @api.multi
    unlink ir.action.todo which are related to actions which will be deleted. NOTE: ondelete cascade will not work on ir.actions.actions so we will need to do it manually.
  • write(self, vals)
    @api.multi

New fields (8)
  • context Char
    default='{}' help='Context dictionary as Python expression, empty by default (Default: {})' required=True string='Context Value'
  • name Char
    string='Action Name' translate=True
  • params Binary
    compute='_compute_params' help='Arguments sent to the client along with the view tag' inverse='_inverse_params' string='Supplementary arguments'
  • params_store Binary
    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 (13)
  • attachment Char
    help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.' string='Save as Attachment Prefix'
  • attachment_use Boolean
    help='If you check this, then the second time the user prints with same attachment name, it returns the previous report.' string='Reload from Attachment'
  • binding_type Selection
    default='report'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_report_rel', 'uid', 'gid'
  • model Char
    required=True
  • 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.'
  • name Char
    translate=True
  • paperformat_id Many2one → report.paperformat
    args: 'report.paperformat', 'Paper format'
  • print_report_name Char
    help='This is the filename of the report going to download. Keep empty to not change the report filename. You can use a python expression with the object and time variables.' args: 'Printed Report Name'
  • report_file Char
    help='The path to the main report file (depending on Report Type) or empty if the content is in another field' readonly=False required=False store=True string='Report File'
  • report_name Char
    help="For QWeb reports, name of the template used in the rendering. The method 'render_html' of the model 'report.template_name' will be called (if any) to give the html. For RML reports, this is the LocalService name." required=True string='Template Name'
  • report_type Selection
    default='qweb-pdf' help='The type of the report that will be rendered, each one having its own rendering method.HTML means the report will be opened directly in your browserPDF means the report will be rendered using Wkhtmltopdf and downloaded by the user.' required=True args: [('qweb-html', 'HTML'), ('qweb-pdf', 'PDF')]
  • type Char
    default='ir.actions.report'
Public methods (12)
  • associated_view(self)
    @api.multi
    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, width=600, height=100, humanreadable=0)
    @api.model
  • create_action(self)
    @api.multi
    Create a contextual action for each report.
  • get_wkhtmltopdf_state(self)
    @api.model
    Get the current state of wkhtmltopdf: install, ok, upgrade, workers or broken. * install: Starting state. * upgrade: The binary is an older version (< 0.12.0). * ok: A binary was found with a recent version (>= 0.12.0). * workers: Not enough workers found to perform the pdf rendering process (< 2 workers). * broken: A binary was found but not responding. :return: wkhtmltopdf_state
  • postprocess_pdf_report(self, record, buffer)
    @api.multi
    Hook to handle post processing during the pdf report generation. The basic behavior consists to create a new attachment containing the pdf base64 encoded. :param record_id: The record that will own the attachment. :param pdf_content: The optional name content of the file to avoid reading both times. :return: The newly generated attachment if no AccessError, else None.
  • render(self, res_ids, data=None)
    @api.multi
  • render_qweb_html(self, docids, data=None)
    @api.model
    This method generates and returns html version of a report.
  • render_qweb_pdf(self, res_ids=None, data=None)
    @api.multi
  • render_template(self, template, values=None)
    @api.multi
    Allow to render a QWeb template python-side. This function returns the 'ir.ui.view' render but embellish it with some variables/methods used in reports. :param values: additionnal methods/variables used in the rendering :returns: html representation of the template
  • report_action(self, docids, data=None, config=True)
    @api.noguess
    Return an action of type ir.actions.report. :param docids: id/ids/browserecord of the records to print (if not used, pass an empty list) :param report_name: Name of the template to generate an action for
  • retrieve_attachment(self, record)
    @api.multi
    Retrieve an attachment for a specific record. :param record: The record owning of the attachment. :param attachment_name: The optional name of the attachment. :return: A recordset of length <=1 or None
  • unlink_action(self)
    @api.multi
    Remove the contextual actions created for the reports.

New fields (13)
  • child_ids Many2many → ir.actions.server
    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', 'rel_server_actions', 'server_id', 'action_id'
  • code Text
    default=DEFAULT_PYTHON_CODE groups='base.group_system' help='Write Python code that the action will execute. Some variables are available for use; help about pyhon expression is given in the help tab.' string='Python Code'
  • crud_model_id Many2one → ir.model
    help='Model for record creation / update. Set this field only to specify a different model than the base model.' oldname='srcmodel_id' string='Create/Write Target Model' args: 'ir.model'
  • crud_model_name Char
    readonly=True related='crud_model_id.model'
  • fields_lines One2many → ir.server.object.lines
    copy=True string='Value Mapping' args: 'ir.server.object.lines', 'server_id'
  • link_field_id Many2one → ir.model.fields
    help='Provide the field used to link the newly created record on the record on used by the server action.' string='Link using field' args: 'ir.model.fields'
  • model_id Many2one → ir.model
    help='Model on which the server action runs.' ondelete='cascade' required=True string='Model' args: 'ir.model'
  • model_name Char
    readonly=True related='model_id.model' store=True
  • name Char
    string='Action Name' translate=True
  • sequence Integer
    default=5 help='When dealing with multiple actions, the execution order is based on the sequence. Low number means high priority.'
  • state Selection
    default='object_write' help="Type of server action. The following values are available:\n- 'Execute Python Code': a block of python code that will be executed\n- 'Create or Copy a new Record': create a new record with new values, or copy an existing record in your database\n- 'Write on a Record': update the values of a record\n- 'Execute several actions': define an action that triggers several other server actions\n- 'Add Followers': add followers to a record (available in Discuss)\n- 'Send Email': automatically send an email (available in email_template)" required=True string='Action To Do' args: [('code', 'Execute Python Code'), ('object_create', 'Create a new Record'), ('object_write', 'Update the Record'), ('multi', 'Execute several actions')]
  • type Char
    default='ir.actions.server'
  • usage Selection
    default='ir_actions_server' required=True string='Usage' args: [('ir_actions_server', 'Server Action'), ('ir_cron', 'Scheduled Action')]
Public methods (7)
  • create_action(self)
    @api.multi
    Create a contextual action for each server action.
  • run(self)
    @api.multi
    Runs the server action. For each server action, the run_action_<STATE> method is called. This allows easy overriding of the server actions. :param dict context: context should contain following keys - active_id: id of the current object (single mode) - active_model: current model that should equal the action's model The following keys are optional: - active_ids: 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
  • run_action_code_multi(self, action, eval_context=None)
    @api.model
  • run_action_multi(self, action, eval_context=None)
    @api.model
  • run_action_object_create(self, action, eval_context=None)
    @api.model
    Create and Copy server action. - 1. evaluate the value mapping - 2. depending on the write configuration: - `new`: new record in the base model - `copy_current`: copy the current record (id = active_id) + gives custom values - `new_other`: new record in target model - `copy_other`: copy the current record (id from reference object) + gives custom values
  • run_action_object_write(self, action, eval_context=None)
    @api.model
    Write server action. - 1. evaluate the value mapping - 2. depending on the write configuration: - `current`: id = active_id - `other`: id = from reference object - `expression`: id = from expression evaluation
  • unlink_action(self)
    @api.multi
    Remove the contextual actions created for the server actions.

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 (8)
  • action_launch(self, context=None)
    @api.multi
    Launch Action of Wizard
  • action_open(self)
    @api.multi
    Sets configuration wizard in TODO state
  • create(self, vals)
    @api.model
  • ensure_one_open_todo(self)
    @api.model
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (21)
  • access_token Char
    groups='base.group_user' args: 'Access Token'
  • checksum Char
    index=True readonly=True size=40 args: 'Checksum/SHA1'
  • company_id Many2one → res.company
    change_default=True default=<expr> string='Company' args: 'res.company'
  • create_date Datetime
    readonly=True args: 'Date Created'
  • create_uid Many2one → res.users
    readonly=True string='Owner' args: 'res.users'
  • datas Binary
    compute='_compute_datas' inverse='_inverse_datas' string='File Content'
  • datas_fname Char
    args: 'File Name'
  • db_datas Binary
    args: 'Database Data'
  • description Text
    args: 'Description'
  • file_size Integer
    readonly=True args: 'File Size'
  • index_content Text
    prefetch=False readonly=True args: 'Indexed Content'
  • mimetype Char
    readonly=True args: 'Mime Type'
  • name Char
    required=True args: 'Attachment Name'
  • public Boolean
    args: 'Is public document'
  • res_field Char
    readonly=True args: 'Resource Field'
  • res_id Integer
    help='The record id this is attached to.' readonly=True args: 'Resource ID'
  • res_model Char
    help='The database object this attachment will be attached to.' readonly=True args: 'Resource Model'
  • res_name Char
    compute='_compute_res_name' store=True args: 'Resource Name'
  • store_fname Char
    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=True size=1024 args: 'Url'
Public methods (10)
  • action_get(self)
    @api.model
  • check(self, mode, values=None)
    @api.model
    Restricts the access to an ir.attachment, according to referred model In the 'document' module, it is overriden to relax this hard rule, since more complex ones apply there.
  • copy(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
  • force_storage(self)
    @api.model
    Force all attachments to be stored in the currently configured storage
  • generate_access_token(self)
    @api.one
  • 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.
  • read(self, fields=None, load='_classic_read')
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • power_on(self, *args, **kwargs)
    @api.model

New fields (2)
  • key Char
    index=True required=True
  • value Text
    required=True
Public methods (6)
  • create(self, vals)
    @api.model
  • get_param(self, key, default=False)
    @api.model
    Retrieve the value for a given key. :param string key: The key of the parameter value to retrieve. :param string default: default value if parameter is missing. :return: The value of the parameter, or ``default`` if it does not exist. :rtype: string
  • init(self, force=False)
    @api.model_cr@mute_logger('odoo.addons.base.ir.ir_config_parameter')
    Initializes the parameters listed in _default_parameters. It overrides existing parameters if force is ``True``.
  • set_param(self, key, value)
    @api.model
    Sets the value of a parameter. :param string key: The key of the parameter value to set. :param string value: The value to set. :return: the previous value of the parameter or False if it did not exist. :rtype: string
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (10)
  • active Boolean
    default=True
  • cron_name Char
    related='ir_actions_server_id.name' store=True args: 'Name'
  • doall Boolean
    help='Specify if missed occurrences should be executed when the server restarts.' string='Repeat Missed'
  • interval_number Integer
    default=1 help='Repeat every x.'
  • interval_type Selection
    default='months' string='Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • ir_actions_server_id Many2one → ir.actions.server
    delegate=True ondelete='restrict' required=True args: 'ir.actions.server', 'Server action'
  • nextcall Datetime
    default=fields.Datetime.now help='Next planned execution date for this job.' required=True string='Next Execution Date'
  • numbercall Integer
    default=1 help='How many times the method is called,\na negative number indicates no limit.' string='Number of Calls'
  • priority Integer
    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)
  • create(self, values)
    @api.model
  • default_get(self, fields_list)
    @api.model
  • method_direct_trigger(self)
    @api.multi
  • toggle(self, model, domain)
    @api.model
  • try_write(self, values)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

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 (8)
  • create(self, vals)
    @api.model
  • 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.
  • get(self, model_name, field_name, user_id=False, company_id=False, condition=False)
    @api.model
    Return the default value for the given field, user and company, or ``None`` if no default is available. :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'``.
  • get_model_defaults(self, model_name, condition=False)
    @api.model@tools.ormcache('self.env.uid', 'model_name', 'condition')
    Return the available default values for the given model (for the current user), as a dict mapping field names to 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 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)
    @api.multi
  • write(self, vals)
    @api.multi

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

No public methods.

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

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • db_id_for(self, model, field, subfield, value)
    @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_get/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 context: OpenERP request context :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)
    @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.osv.orm.Model.write` expects. :param model: :class:`odoo.osv.orm.Model` for the conversion base :returns: a converter callable :rtype: (record: dict, logger: (field, error) -> None) -> dict
  • to_field(self, model, field, fromtype=str)
    @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 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 context: odoo request context :return: a function (fromtype -> field.write_type), if a converter is found :rtype: Callable | None

New fields (9)
  • 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
  • is_default Boolean
    string='Default Filter'
  • model_id Selection
    required=True selection='_list_all_models' string='Model'
  • name Char
    required=True string='Filter Name' translate=True
  • sort Text
    default='[]' required=True
  • user_id Many2one → res.users
    default=<expr> help='The user this filter is private to. When left empty the filter is public and available to all users.' ondelete='cascade' string='User' args: 'res.users'
Public methods (3)
  • copy(self, default=None)
    @api.multi
  • create_or_replace(self, vals)
    @api.model@api.returns('self', <expr>)
  • get_filters(self, model, action_id=None)
    @api.model
    Obtain the list of filters available for the user on the given model. :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_id`` (m2o tuple), ``action_id`` (m2o tuple) and ``context`` of the matching ``ir.filters``.

New fields (0)

No new fields.

Public methods (3)
  • binary_content(cls, xmlid=None, model='ir.attachment', id=None, field='datas', unique=False, filename=None, filename_field='datas_fname', download=False, mimetype=None, default_mimetype='application/octet-stream', access_token=None, env=None)
    @classmethod
    Get file, attachment or downloadable content If the ``xmlid`` and ``id`` parameter is omitted, fetches the default value for the binary field (via ``default_get``), otherwise fetches the field for that precise record. :param str xmlid: xmlid of the record :param str model: name of the model to fetch the binary from :param int id: id of the record from which to fetch the binary :param str field: binary field :param bool unique: add a max-age for the cache control :param str filename: choose a filename :param str filename_field: if not create an filename with model-id-field :param bool download: apply headers to download the file :param str mimetype: mintype of the field (for headers) :param str default_mimetype: default mintype if no mintype found :param str access_token: optional token for unauthenticated access only available for ir.attachment :param Environment env: by default use request.env :returns: (status, headers, content)
  • content_disposition(cls, filename)
    @classmethod
  • routing_map(cls)
    @classmethod

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)
    @api.model_cr

New fields (9)
  • active Boolean
    default=True
  • name Char
    index=True required=True string='Description'
  • 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_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)' required=True string='Connection Security' args: [('none', 'None'), ('starttls', 'TLS (STARTTLS)'), ('ssl', 'SSL/TLS')]
  • smtp_host Char
    help='Hostname or IP of SMTP server' required=True string='SMTP Server'
  • smtp_pass Char
    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.' required=True size=5 string='SMTP Port'
  • smtp_user Char
    help='Optional username for SMTP authentication' string='Username'
Public methods (5)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
    Constructs an RFC2822 email.message.Message object based on the keyword arguments passed, and returns it. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) :param string body: email body, of the type ``subtype`` (by default, plaintext). If html subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative, unless an explicit ``body_alternative`` version is passed. :param string body_alternative: optional alternative body, of the type specified in ``subtype_alternative`` :param string reply_to: optional value of Reply-To header :param string object_id: optional tracking identifier, to be included in the message-id for recognizing replies. Suggested format for object-id is "res_id-model", e.g. "12345-crm.lead". :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), must match the format of the ``body`` parameter. Default is 'plain', making the content part of the mail "text/plain". :param string subtype_alternative: optional mime subtype of ``body_alternative`` (usually 'plain' or 'html'). Default is 'plain'. :param list attachments: list of (filename, filecontents) pairs, where filecontents is a string containing the bytes of the attachment :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) :param dict headers: optional map of headers to set on the outgoing mail (may override the other headers, including Subject, Reply-To, Message-Id, etc.) :rtype: email.message.Message (usually MIMEMultipart) :return: the new RFC2822 email message
  • connect(self, host=None, port=None, user=None, password=None, encryption=None, smtp_debug=False, mail_server_id=None)
    Returns a new SMTP connection to the given SMTP server. When running in test mode, this method does nothing and returns `None`. :param host: host or IP of SMTP server to connect to, if mail_server_id not passed :param int port: SMTP port to connect to :param user: optional username to authenticate with :param password: optional password to authenticate with :param string encryption: optional, ``'ssl'`` | ``'starttls'`` :param bool smtp_debug: toggle debugging of SMTP sessions (all i/o will be output in logs) :param mail_server_id: ID of specific mail server to use (overrides other parameters)
  • name_get(self)
    @api.multi
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=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' or 'ssl' (see ir.mail_server fields for explanation) :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_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)
    @api.multi

New fields (11)
  • access_ids One2many → ir.model.access
    string='Access' args: 'ir.model.access', 'model_id'
  • count Integer
    compute='_compute_count' help='Total number of records in this model' string='Count (incl. archived)'
  • field_id One2many → ir.model.fields
    copy=True default=_default_field_id required=True string='Fields' args: 'ir.model.fields', 'model_id'
  • 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_' index=True 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
  • state Selection
    default='manual' readonly=True string='Type' args: [('manual', 'Custom Object'), ('base', 'Base Object')]
  • transient Boolean
    string='Transient Model'
  • view_ids One2many → ir.ui.view
    compute='_view_ids' string='Views' args: 'ir.ui.view'
Public methods (4)
  • create(self, vals)
    @api.model
  • 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)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (8)
  • active Boolean
    default=True help='If you uncheck the active field, it will disable the ACL without deleting it (if you delete a native ACL, it will be re-created when you reload the module).'
  • group_id Many2one → res.groups
    index=True ondelete='cascade' string='Group' args: 'res.groups'
  • model_id Many2one → ir.model
    domain=[('transient', '=', False)] index=True ondelete='cascade' required=True string='Object' args: 'ir.model'
  • name Char
    index=True required=True
  • perm_create Boolean
    string='Create Access'
  • perm_read Boolean
    string='Read Access'
  • perm_unlink Boolean
    string='Delete Access'
  • perm_write Boolean
    string='Write Access'
Public methods (10)
  • call_cache_clearing_methods(self)
    @api.model_cr
  • check(self, model, mode='read', raise_exception=True)
    @api.model@tools.ormcache_context('self._uid', 'model', 'mode', 'raise_exception', keys=('lang'))
  • check_group(self, model, mode, group_ids)
    @api.model
    Check if a specific group has the access mode to the specified model
  • check_groups(self, group)
    @api.model
    Check whether the current user has the given group.
  • create(self, values)
    @api.model
  • group_names_with_access(self, model_name, access_mode)
    @api.model_cr
    Return the names of visible groups which have been granted ``access_mode`` on the model ``model_name``. :rtype: list
  • register_cache_clearing_method(cls, model, method)
    @classmethod
  • unlink(self)
    @api.multi
  • unregister_cache_clearing_method(cls, model, method)
    @classmethod
  • write(self, values)
    @api.multi

New fields (7)
  • date_init Datetime
    string='Initialization Date'
  • date_update Datetime
    string='Update Date'
  • definition Char
    help='PostgreSQL constraint definition'
  • model Many2one → ir.model
    index=True ondelete='cascade' required=True args: 'ir.model'
  • module Many2one → ir.module.module
    index=True required=True args: 'ir.module.module'
  • name Char
    help='PostgreSQL constraint or foreign key name.' index=True required=True string='Constraint'
  • type Char
    help='Type of the constraint: `f` for a foreign key, `u` for other constraints.' index=True required=True size=1 string='Constraint Type'
Public methods (1)
  • copy(self, default=None)
    @api.multi

New fields (9)
  • complete_name Char
    compute='_compute_complete_name' string='Complete ID'
  • date_init Datetime
    default=fields.Datetime.now string='Init Date'
  • date_update Datetime
    default=fields.Datetime.now string='Update Date'
  • 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 Integer
    help='ID of the target record in the database' string='Record ID'
Public methods (9)
  • 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)
  • get_object(self, module, xml_id)
    @api.model
    Returns a browsable record for the given module name and xml_id. If not found, raise a ValueError or return None, depending on the value of `raise_exception`.
  • get_object_reference(self, module, xml_id)
    @api.model
    Returns (model, res_id) corresponding to a given module and xml_id (cached) or raise ValueError if not found
  • name_get(self)
    @api.multi
  • unlink(self)
    @api.multi
    Regular unlink method, but make sure to clear the caches.
  • xmlid_lookup(self, xmlid)
    @api.model@tools.ormcache('xmlid')
    Low level xmlid lookup Return (id, res_model, res_id) or raise ValueError if not found
  • xmlid_to_object(self, xmlid, raise_if_not_found=False)
    @api.model
    Return a Model object, or ``None`` if ``raise_if_not_found`` is set
  • xmlid_to_res_id(self, xmlid, raise_if_not_found=False)
    @api.model
    Returns res_id
  • xmlid_to_res_model_res_id(self, xmlid, raise_if_not_found=False)
    @api.model
    Return (res_model, res_id)

New fields (29)
  • 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'
  • complete_name Char
    index=True
  • 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."
  • copy Boolean
    help='Whether the value is copied when duplicating a record.' string='Copied'
  • 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
  • groups Many2many → res.groups
    args: 'res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id'
  • help Text
    string='Field Help' translate=True
  • index Boolean
    string='Indexed'
  • model Char
    help='The technical name of the model this field belongs to' index=True required=True string='Object 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'
  • relation Char
    help='For relationship fields, the technical name of the target model' string='Object Relation'
  • relation_field Char
    help='For one2many fields, the field on the target model that implement the opposite many2one relationship'
  • relation_table Char
    help='Used for custom many2many fields to define a custom relation table name'
  • required Boolean
  • selectable Boolean
    default=True
  • selection Char
    default='' help="List of options for a selection field, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'),('yellow','Yellow')]" string='Selection Options'
  • 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'
  • translate Boolean
    help='Whether values for this field can be translated (enables the translation mechanism for that field)' string='Translatable'
  • ttype Selection
    required=True selection=FIELD_TYPES string='Field Type'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (5)
  • date_init Datetime
    string='Initialization Date'
  • date_update Datetime
    string='Update Date'
  • model Many2one → ir.model
    index=True required=True args: 'ir.model'
  • module Many2one → ir.module.module
    index=True required=True args: 'ir.module.module'
  • name Char
    help='PostgreSQL table name implementing a many2many relation.' index=True required=True string='Relation Name'
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'
  • module_nr Integer
    compute='_compute_module_nr' string='Number of Apps'
  • name Char
    index=True required=True string='Name' translate=True
  • parent_id Many2one → ir.module.category
    index=True string='Parent Application' args: 'ir.module.category'
  • 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 (27)
  • 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'
  • 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'
  • icon Char
    args: 'Icon URL'
  • 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 Licence'), ('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
    index=True 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='uninstalled' index=True readonly=True string='Status' args: STATES
  • summary Char
    readonly=True translate=True args: 'Summary'
  • 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 (24)
  • button_immediate_install(self)
    @assert_log_admin_access@api.multi
    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@api.multi
    Uninstall the selected module(s) immediately and fully, returns the next res.config action to execute
  • button_immediate_upgrade(self)
    @assert_log_admin_access@api.multi
    Upgrade the selected module(s) immediately and fully, return the next res.config action to execute
  • button_install(self)
    @assert_log_admin_access@api.multi
  • button_install_cancel(self)
    @assert_log_admin_access@api.multi
  • button_uninstall(self)
    @assert_log_admin_access@api.multi
  • button_uninstall_cancel(self)
    @api.multi
  • button_uninstall_wizard(self)
    @assert_log_admin_access@api.multi
    Launch the wizard to uninstall the given module.
  • button_upgrade(self)
    @assert_log_admin_access@api.multi
  • button_upgrade_cancel(self)
    @assert_log_admin_access@api.multi
  • check_external_dependencies(cls, module_name, newstate='to install')
    @classmethod
  • create(self, vals)
    @api.model
  • download(self, download=True)
    @assert_log_admin_access@api.multi
  • downstream_dependencies(self, known_deps=None, exclude_states=('uninstalled', 'uninstallable', 'to remove'))
    @api.multi@api.returns('self')
    Return the modules that directly or indirectly depend on the modules in `self`, and that satisfy the `exclude_states` filter.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_apps_server(self)
    @api.model
  • get_module_info(cls, name)
    @classmethod
  • get_values_from_terp(terp)
    @staticmethod
  • install_from_urls(self, urls)
    @assert_log_admin_access@api.model
  • module_uninstall(self)
    @assert_log_admin_access@api.multi
    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
  • unlink(self)
    @api.multi
  • update_list(self)
    @assert_log_admin_access@api.model
  • upstream_dependencies(self, known_deps=None, exclude_states=('installed', 'uninstallable', 'to remove'))
    @api.multi@api.returns('self')
    Return the dependency tree of modules of the modules in `self`, and that satisfy the `exclude_states` filter.

New fields (4)
  • depend_id Many2one → ir.module.module
    compute='_compute_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 (0)

No public methods.

New fields (4)
  • exclusion_id Many2one → ir.module.module
    compute='_compute_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 (11)
  • company_id Many2one → res.company
    index=True string='Company' args: 'res.company'
  • fields_id Many2one → ir.model.fields
    index=True ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • name Char
    index=True
  • res_id Char
    help='If not set, acts as a default value for new resources' index=True string='Resource'
  • type Selection
    default='many2one' index=True required=True args: [('char', 'Char'), ('float', 'Float'), ('boolean', 'Boolean'), ('integer', 'Integer'), ('text', 'Text'), ('binary', 'Binary'), ('many2one', 'Many2One'), ('date', 'Date'), ('datetime', 'DateTime'), ('selection', 'Selection')]
  • value_binary Binary
  • value_datetime Datetime
  • value_float Float
  • value_integer Integer
  • value_reference Char
  • value_text Text
Public methods (7)
  • create(self, values)
    @api.model
  • get(self, name, model, res_id=False)
    @api.model
  • get_by_record(self)
    @api.multi
  • get_multi(self, name, model, ids)
    @api.model
    Read the property field `name` for the records of model `model` with the given `ids`, and return a dictionary mapping `ids` to their corresponding value.
  • search_multi(self, name, model, operator, value)
    @api.model
    Return a domain for the records that match the given condition.
  • set_multi(self, name, model, values, default_value=None)
    @api.model
    Assign the property field `name` for the records of model `model` with `values` (dictionary mapping record ids to their value). If the value for a given record is the same as the default value, the property entry will not be stored, to avoid bloating the database. If `default_value` is provided, that value will be used instead of the computed default value, to determine whether the value for a record should be stored or not.
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (5)
  • compile(self, id_or_xml_id, options)
    @tools.conditional(<expr>, tools.ormcache('id_or_xml_id', 'tuple(options.get(k) for k in self._get_template_cache_keys())'))
  • default_values(self)
    attributes add to the values for each computed template
  • get_asset_bundle(self, xmlid, files, remains=None, env=None)
  • load(self, name, options)
  • render(self, id_or_xml_id, values=None, **options)
    @api.model
    render(id_or_xml_id, values, **options) Render the template specified by the given name. :param id_or_xml_id: name or etree (see get_template) :param dict values: template values to be used for rendering :param options: used to compile the template (the dict available for the rendering is frozen) * ``load`` (function) overrides the load method * ``profile`` (float) profile the rendering (use astor lib) (filter profile line with time ms >= profile)

New fields (0)

No new fields.

Public methods (4)
  • 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: OrderedDict (attribute name, attribute value).
  • 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. Fallbacks to en_US if no lang is present in the context *or the language code is not valid*. :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)
  • from_html(self, model, field, element)
    @api.model
  • value_to_html(self, value, options=None)
    @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)
  • 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 (1)
  • value_to_html(self, value, options)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • 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)
  • record_to_html(self, record, field_name, options)
    @api.model

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (9)
  • active Boolean
    default=True help='If you uncheck the active field, it will disable the record rule without deleting it (if you delete a native record rule, it may be re-created when you reload the module).'
  • domain_force Text
    string='Domain'
  • groups Many2many → res.groups
    args: 'res.groups', 'rule_group_rel', 'rule_group_id', 'group_id'
  • model_id Many2one → ir.model
    index=True ondelete='cascade' required=True string='Object' args: 'ir.model'
  • name Char
    index=True
  • perm_create Boolean
    default=True string='Apply for Create'
  • perm_read Boolean
    default=True string='Apply for Read'
  • perm_unlink Boolean
    default=True string='Apply for Delete'
  • perm_write Boolean
    default=True string='Apply for Write'
Public methods (5)
  • clear_cache(self)
    @api.model
    Deprecated, use `clear_caches` instead.
  • create(self, vals)
    @api.model
  • domain_get(self, model_name, mode='read')
    @api.model
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

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="Two sequence object implementations are offered: Standard and 'No gap'. The later is slower than the former but forbids any gap in the sequence (while they are possible in the former)." 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='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'
  • suffix Char
    help='Suffix value of the record for the sequence'
  • use_date_range Boolean
    string='Use subsequences per date_range'
Public methods (8)
  • create(self, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get(self, code)
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by its code. This method is deprecated.
  • get_id(self, sequence_code_or_id, code_or_id='id')
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by the ``sequence_code_or_id`` argument, which can be a code or an id (as controlled by the ``code_or_id`` argument. This method is deprecated.
  • get_next_char(self, number_next)
  • next_by_code(self, sequence_code)
    @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. :param dict context: context dictionary may contain a ``force_company`` key with the ID of the company to use instead of the user's current company for the sequence selection. A matching sequence for that specific company will get higher priority.
  • next_by_id(self)
    @api.multi
    Draw an interpolated string using the specified sequence.
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

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='Next Number'
  • sequence_id Many2one → ir.sequence
    ondelete='cascade' required=True string='Main Sequence' args: 'ir.sequence'
Public methods (4)
  • create(self, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • default_get(self, fields)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (4)
  • col1 Many2one → ir.model.fields
    required=True string='Field' args: 'ir.model.fields'
  • server_id Many2one → ir.actions.server
    ondelete='cascade' string='Related Server Action' args: 'ir.actions.server'
  • type Selection
    change_default=True default='value' required=True args: [('value', 'Value'), ('equation', 'Python expression')], 'Evaluation Type'
  • value Text
    help='Expression containing a value specification. \nWhen Formula type is selected, this field may be a Python expression that can use the same values as for the code field on the server action.\nIf Value type is selected, the value will be used directly without evaluation.' required=True
Public methods (1)
  • eval_value(self, eval_context=None)
    @api.multi

New fields (10)
  • comments Text
    index=True string='Translation comments'
  • lang Selection
    selection='_get_languages' string='Language'
  • module Char
    help='Module this term belongs to' index=True
  • name Char
    required=True string='Translated field'
  • res_id Integer
    index=True string='Record ID'
  • source Text
    compute='_compute_source' inverse='_inverse_source' search='_search_source' string='Source term'
  • src Text
    string='Internal Source'
  • state Selection
    default='to_translate' help='Automatically set to let administators find new terms that might need to be translated' string='Status' args: [('to_translate', 'To Translate'), ('inprogress', 'Translation in Progress'), ('translated', 'Translated')]
  • type Selection
    index=True string='Type' args: TRANSLATION_TYPE
  • value Text
    string='Translation Value'
Public methods (10)
  • check(self, mode)
    @api.multi
    Check access rights of operation ``mode`` on ``self`` for the current user. Raise an AccessError in case conditions are not met.
  • create(self, vals)
    @api.model
  • get_field_help(self, model_name)
    @api.model@tools.ormcache_context('model_name', keys=('lang'))
    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_string(self, model_name)
    @api.model@tools.ormcache_context('model_name', keys=('lang'))
    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}`
  • get_technical_translations(self, model_name)
    @api.model
    Find the translations for the fields of `model_name` Find the technical translations for the fields of the model, including string, tooltip and available selections. :return: action definition to open the list of available translations
  • insert_missing(self, field, records)
    @api.model
    Insert missing translations for `field` on `records`.
  • load_module_terms(self, modules, langs)
    @api.model_cr_context
    Load PO files of the given modules for the given languages.
  • translate_fields(self, model, id, field=None)
    @api.model
    Open a view for translating the field(s) of the record (model, id).
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (12)
  • 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' string='Full Path'
  • groups_id 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_left Integer
    index=True
  • parent_right Integer
    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 (10)
  • copy(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
  • get_user_roots(self)
    @api.model@api.returns('self')
    Return all root menu ids visible for the user. :return: the root menu ids :rtype: list(int)
  • load_menus(self, debug)
    @api.model@tools.ormcache_context('self._uid', 'debug', keys=('lang'))
    Loads all menu items (all applications and their sub-menus). :return: the menu root :rtype: dict('children': menu_nodes)
  • load_menus_root(self)
    @api.model@tools.ormcache_context('self._uid', keys=('lang'))
  • name_get(self)
    @api.multi
  • read_image(self, path)
  • search(self, args, offset=0, limit=None, order=None, count=False)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (20)
  • 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' inverse='_inverse_arch' nodrop=True string='View Architecture'
  • arch_base Text
    compute='_compute_arch_base' inverse='_inverse_arch_base' string='View Architecture'
  • arch_db Text
    oldname='arch' string='Arch Blob' translate=xml_translate
  • arch_fs Char
    string='Arch Filename'
  • create_date Datetime
    readonly=True
  • field_parent Char
    string='Child Field'
  • groups_id 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'
  • key Char
  • 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_ids One2many → ir.model.data
    auto_join=True domain=[('model', '=', 'ir.ui.view')] args: 'ir.model.data', 'res_id'
  • name Char
    required=True string='View Name'
  • priority Integer
    default=16 required=True string='Sequence'
  • type Selection
    string='View Type' args: [('tree', 'Tree'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('diagram', 'Diagram'), ('gantt', 'Gantt'), ('kanban', 'Kanban'), ('search', 'Search'), ('qweb', 'QWeb')]
  • write_date Datetime
    readonly=True string='Last Modification Date'
  • xml_id Char
    compute='_compute_xml_id' help='ID of the view defined in xml file' string='External ID'
Public methods (28)
  • add_on_change(self, model_name, arch)
    Add attribute on_change="1" on fields that are dependencies of computed fields on the same view.
  • apply_inheritance_specs(self, source, specs_tree, inherit_id)
    @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 Elepect specs_tree: a modifying architecture in an inheriting view :param inherit_id: the database id of specs_arch :return: a modified source where the specs are applied :rtype: Element
  • apply_view_inheritance(self, source, source_id, model, root_id=None)
    @api.model
    Apply all the (directly and indirectly) inheriting views. :param source: a parent architecture to modify (with parent modifications already applied) :param source_id: the database view_id of the parent view :param model: the original model for which we create a view (not necessarily the same as the source's model); only the inheriting views with that specific model will be applied. :return: a modified source where all the modifying architecture are applied
  • clear_cache(self)
    Deprecated, use `clear_caches` instead.
  • create(self, values)
    @api.model
  • 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_attrs_field_names(self, arch, model, editable)
    Retrieve the field names appearing in context, domain and attrs, and return a list of triples ``(field_name, attr_name, attr_value)``.
  • get_attrs_symbols(self)
    Return a set of predefined symbols for evaluating attrs.
  • get_inheriting_views_arch(self, view_id, model)
    @api.model
    Retrieves the architecture of views that inherit from the given view, from the sets of views that should currently be used in the system. During the module upgrade phase it may happen that a view is present in the database but the fields it relies on are not fully loaded yet. This method only considers views that belong to modules whose code is already loaded. Custom views defined directly in the database are loaded only after the module initialization phase is completely finished. :param int view_id: id of the view whose inheriting views should be retrieved :param str model: model identifier of the inheriting views. :rtype: list of tuples :return: [(view_arch,view_id), ...]
  • get_view_id(self, template)
    @api.model
    Return the view ID corresponding to ``template``, which may be a view ID or an XML ID. Note that this method may be overridden for other kinds of template values.
  • get_view_xmlid(self)
    @api.multi@tools.ormcache('self.id')
  • graph_get(self, id, model, node_obj, conn_obj, src_node, des_node, label, scale)
    @api.model
  • inherit_branding(self, specs_tree, view_id, root_id)
  • 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
  • open_translations(self)
    @api.multi
    Open a view for editing the translations of field 'arch_db'.
  • postprocess(self, model, node, view_id, in_tree_view, model_fields)
    @api.model
    Return the description of the fields in the node. In a normal call to this method, node is a complete view architecture but it is actually possible to give some sub-node (this is used so that the method can call itself recursively). Originally, the field descriptions are drawn from the node itself. But there is now some code calling fields_get() in order to merge some of those information in the architecture.
  • postprocess_and_fields(self, model, node, view_id)
    @api.model
    Return an architecture and a description of all the fields. The field description combines the result of fields_get() and postprocess(). :param node: the architecture as as an etree :return: a tuple (arch, fields) where arch is the given node as a string and fields is the description of all the fields.
  • raise_view_error(self, message, view_id)
    @api.model
  • read_combined(self, fields=None)
    @api.multi
    Utility function to get a view combined with its inherited views. * Gets the top of the view tree if a sub-view is requested * Applies all inherited archs on the root view * Returns the view with all requested fields .. note:: ``arch`` is always added to the fields list even if not requested (similar to ``id``)
  • read_template(self, xml_id)
    @api.model
  • render(self, values=None, engine='ir.qweb')
    @api.multi
  • render_template(self, template, values=None, engine='ir.qweb')
    @api.model
  • toggle(self)
    @api.multi
    Switches between enabled and disabled statuses
  • translate_qweb(self, arch, lang)
    @api.multi
  • unlink(self)
  • write(self, vals)
    @api.multi

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 (2)
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • get_report_values(self, docids, data=None)
    @api.model

New fields (14)
  • default Boolean
    args: 'Default paper format ?'
  • dpi Integer
    default=90 required=True args: 'Output DPI'
  • format Selection
    default='A4' help='Select Proper Paper size' args: [('A0', 'A0 5 841 x 1189 mm'), ('A1', 'A1 6 594 x 841 mm'), ('A2', 'A2 7 420 x 594 mm'), ('A3', 'A3 8 297 x 420 mm'), ('A4', 'A4 0 210 x 297 mm, 8.26 x 11.69 inches'), ('A5', 'A5 9 148 x 210 mm'), ('A6', 'A6 10 105 x 148 mm'), ('A7', 'A7 11 74 x 105 mm'), ('A8', 'A8 12 52 x 74 mm'), ('A9', 'A9 13 37 x 52 mm'), ('B0', 'B0 14 1000 x 1414 mm'), ('B1', 'B1 15 707 x 1000 mm'), ('B2', 'B2 17 500 x 707 mm'), ('B3', 'B3 18 353 x 500 mm'), ('B4', 'B4 19 250 x 353 mm'), ('B5', 'B5 1 176 x 250 mm, 6.93 x 9.84 inches'), ('B6', 'B6 20 125 x 176 mm'), ('B7', 'B7 21 88 x 125 mm'), ('B8', 'B8 22 62 x 88 mm'), ('B9', 'B9 23 33 x 62 mm'), ('B10', ':B10 16 31 x 44 mm'), ('C5E', 'C5E 24 163 x 229 mm'), ('Comm10E', 'Comm10E 25 105 x 241 mm, U.S. Common 10 Envelope'), ('DLE', 'DLE 26 110 x 220 mm'), ('Executive', 'Executive 4 7.5 x 10 inches, 190.5 x 254 mm'), ('Folio', 'Folio 27 210 x 330 mm'), ('Ledger', 'Ledger 28 431.8 x 279.4 mm'), ('Legal', 'Legal 3 8.5 x 14 inches, 215.9 x 355.6 mm'), ('Letter', 'Letter 2 8.5 x 11 inches, 215.9 x 279.4 mm'), ('Tabloid', 'Tabloid 29 279.4 x 431.8 mm'), ('custom', 'Custom')], '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)'
  • 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 (11)
  • active Boolean
    default=True
  • bic Char
    help='Sometimes called BIC or Swift.' index=True args: 'Bank Identifier Code'
  • city Char
  • country Many2one → res.country
    args: 'res.country'
  • email Char
  • name Char
    required=True
  • phone Char
  • state Many2one → res.country.state
    domain="[('country_id', '=', country)]" args: 'res.country.state', 'Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (2)
  • name_get(self)
    @api.multi@api.depends('name', 'bic')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model

New fields (26)
  • account_no Char
    string='Account No.'
  • bank_ids One2many → res.partner.bank
    help='Bank accounts related to this company' string='Bank Accounts' args: 'res.partner.bank', 'company_id'
  • child_ids One2many → res.company
    string='Child Companies' args: 'res.company', 'parent_id'
  • city Char
    compute='_compute_address' inverse='_inverse_city'
  • company_registry Char
  • country_id Many2one → res.country
    compute='_compute_address' inverse='_inverse_country' string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • email Char
    related='partner_id.email' store=True
  • external_report_layout Selection
    string='Document Template' args: [('background', 'Background'), ('boxed', 'Boxed'), ('clean', 'Clean'), ('standard', 'Standard')]
  • logo Binary
    default=_get_logo related='partner_id.image' string='Company Logo'
  • logo_web Binary
    compute='_compute_logo_web' store=True
  • name Char
    related='partner_id.name' required=True store=True string='Company Name'
  • paperformat_id Many2one → report.paperformat
    default=<expr> args: 'report.paperformat', 'Paper format'
  • parent_id Many2one → res.company
    index=True string='Parent Company' args: 'res.company'
  • partner_id Many2one → res.partner
    required=True string='Partner' args: 'res.partner'
  • phone Char
    related='partner_id.phone' store=True
  • report_footer Text
    help='Footer text displayed at the bottom of all reports.' string='Report Footer' translate=True
  • report_header Text
    help='Appears by default on the top right corner of your printed documents (report header).' string='Company Tagline'
  • sequence Integer
    default=10 help='Used to order Companies in the company switcher'
  • state_id Many2one → res.country.state
    compute='_compute_address' inverse='_inverse_state' string='Fed. State' args: 'res.country.state'
  • street Char
    compute='_compute_address' inverse='_inverse_street'
  • street2 Char
    compute='_compute_address' inverse='_inverse_street2'
  • user_ids Many2many → res.users
    string='Accepted Users' args: 'res.users', 'res_company_users_rel', 'cid', 'user_id'
  • vat Char
    related='partner_id.vat' string='TIN'
  • website Char
    related='partner_id.website'
  • zip Char
    compute='_compute_address' inverse='_inverse_zip'
Public methods (9)
  • cache_restart(self)
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • init(self)
    @api.model_cr
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • on_change_country(self, country_id)
    @api.multi
  • open_company_edit_report(self)
    @api.multi
  • write(self, values)
    @api.multi
  • write_company_and_print_report(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (7)
  • action_cancel(self)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    Reload the settings page
  • start(self)
    @api.multi

New fields (0)

No new fields.

Public methods (5)
  • already_installed(self)
    For each module, check if it's already installed and if it is return its name :returns: a list of the already installed modules in this installer :rtype: [str]
  • default_get(self, fields_list)
    @api.model
    If an addon is already installed, check it by default
  • execute(self)
    @api.multi
  • fields_get(self, fields=None, attributes=None)
    @api.model
    If an addon is already installed, set it to readonly as res.config.installer doesn't handle uninstallations of already installed addons
  • modules_to_install(self)
    selects all modules to install: * checked boolean fields * return values of hook methods. Hook methods are of the form ``_if_%(addon_name)s``, and are called if the corresponding addon is marked for installation. They take the arguments cr, uid, ids and context, and return an iterable of addon names * additionals, additionals are setup through the ``_install_if`` class variable. ``_install_if`` is a dict of {iterable:iterable} where key and value are iterables of addon names. If all the addons in the key are selected for installation (warning: addons added through hooks don't count), then the addons in the value are added to the set of modules to install * not already installed

New fields (0)

No new fields.

Public methods (12)
  • cancel(self)
    @api.multi
  • copy(self, values)
    @api.multi
  • default_get(self, fields)
    @api.model
  • execute(self)
    @api.multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_config_warning(self, msg)
    @api.model_cr_context
    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: --------------- from odoo.addons.base.res.res_config import get_warning_config raise get_warning_config(cr, _("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."), context=context) 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 string: human readable name of the field (e.g.: "Create leads from incoming mails")
  • 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 tuple: - 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)
    Return values for the fields other that `default`, `group` and `module`
  • name_get(self)
    @api.multi
    Override name_get method to return an appropriate configuration wizard name, and not the generated name.
  • onchange_module(self, field_value, module_name)
    @api.multi
  • set_values(self)
    Set values for the fields other that `default`, `group` and `module`

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

New fields (2)
  • 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 (0)

No public methods.

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

New fields (11)
  • active Boolean
    default=True
  • currency_subunit_label Char
    help='Currency Subunit Name' string='Currency Subunit'
  • currency_unit_label Char
    help='Currency Unit Name' string='Currency Unit'
  • date Date
    compute='_compute_date'
  • decimal_places Integer
    compute='_compute_decimal_places'
  • name Char
    help='Currency Code (ISO 4217)' required=True size=3 string='Currency'
  • position Selection
    default='after' help='Determines where the currency symbol should be placed after or before the amount.' string='Symbol Position' args: [('after', 'After Amount'), ('before', 'Before Amount')]
  • rate Float
    compute='_compute_current_rate' digits=(12, 6) help='The rate of the currency to the currency of rate 1.' string='Current Rate'
  • rate_ids One2many → res.currency.rate
    string='Rates' args: 'res.currency.rate', 'currency_id'
  • rounding Float
    default=0.01 digits=(12, 6) string='Rounding Factor'
  • symbol Char
    help='Currency sign, to be used when printing amounts.' required=True
Public methods (7)
  • amount_to_text(self, amount)
    @api.multi
  • compare_amounts(self, amount1, amount2)
    @api.multi
    Compare ``amount1`` and ``amount2`` after rounding them according to the given currency's precision.. An amount is considered lower/greater than another amount if their rounded value is different. This is not the same as having a non-zero difference! For example 1.432 and 1.431 are equal at 2 digits precision, so this method would return 0. However 0.006 and 0.002 are considered different (returns 1) because they respectively round to 0.01 and 0.0, even though 0.006-0.002 = 0.004 which would be considered zero at 2 digits precision. :param float amount1: first amount to compare :param float amount2: second amount to compare :return: (resp.) -1, 0 or 1, if ``amount1`` is (resp.) lower than, equal to, or greater than ``amount2``, according to ``currency``'s rounding. With the new API, call it like: ``currency.compare_amounts(amount1, amount2)``.
  • compute(self, from_amount, to_currency, round=True)
    @api.multi
    Convert `from_amount` from currency `self` to `to_currency`.
  • is_zero(self, amount)
    @api.multi
    Returns true if ``amount`` is small enough to be treated as zero according to current currency's rounding rules. Warning: ``is_zero(amount1-amount2)`` is not always equivalent to ``compare_amounts(amount1,amount2) == 0``, as the former will round after computing the difference, while the latter will round before, giving different results for e.g. 0.006 and 0.002 at 2 digits precision. :param float amount: amount to compare with currency's zero With the new API, call it like: ``currency.is_zero(amount)``.
  • name_get(self)
    @api.multi
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • round(self, amount)
    @api.multi
    Return ``amount`` rounded according to ``self``'s rounding rules. :param float amount: the amount to round :return: rounded float

New fields (4)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • name Date
    default=<expr> index=True required=True string='Date'
  • rate Float
    default=1.0 digits=(12, 6) help='The rate of the currency to the currency of rate 1'
Public methods (1)
  • name_search(self, name, args=None, operator='ilike', limit=80)
    @api.model

New fields (12)
  • category_id Many2one → ir.module.category
    index=True string='Application' args: 'ir.module.category'
  • color Integer
    string='Color Index'
  • comment Text
    translate=True
  • full_name Char
    compute='_compute_full_name' search='_search_full_name' string='Group Name'
  • is_portal Boolean
    help='If checked, this group is usable as a portal.' args: 'Portal'
  • menu_access Many2many → ir.ui.menu
    string='Access Menu' args: 'ir.ui.menu', 'ir_ui_menu_group_rel', 'gid', 'menu_id'
  • model_access One2many → ir.model.access
    copy=True string='Access Controls' args: 'ir.model.access', 'group_id'
  • name Char
    required=True translate=True
  • rule_groups Many2many → ir.rule
    domain=[('global', '=', False)] string='Rules' args: 'ir.rule', 'rule_group_rel', 'group_id', 'rule_group_id'
  • share Boolean
    help='Group created to set access rights for sharing data with some users.' string='Share Group'
  • users Many2many → res.users
    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'
Public methods (3)
  • copy(self, default=None)
    @api.multi
  • search(self, args, offset=0, limit=None, order=None, count=False)
    @api.model
  • write(self, vals)
    @api.multi

New fields (2)
  • implied_ids Many2many → res.groups
    help='Users of this group automatically inherit those groups' string='Inherits' args: 'res.groups', 'res_groups_implied_rel', 'gid', 'hid'
  • trans_implied_ids Many2many → res.groups
    compute='_compute_trans_implied' string='Transitively inherits' args: 'res.groups'
Public methods (2)
  • create(self, values)
    @api.model
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (5)
  • create(self, values)
    @api.model
  • get_application_groups(self, domain)
    Return the non-share groups that satisfy ``domain``.
  • get_groups_by_application(self)
    @api.model
    Return all groups classified by application (module category), as a list:: [(app, kind, groups), ...], where ``app`` and ``groups`` are recordsets, and ``kind`` is either ``'boolean'`` or ``'selection'``. Applications are given in sequence order. If ``kind`` is ``'selection'``, ``groups`` are given in reverse implication order.
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (11)
  • active Boolean
  • code Char
    help='This field is used to set/get locales for user' required=True string='Locale Code'
  • date_format Char
    default=DEFAULT_DATE_FORMAT required=True string='Date Format'
  • decimal_point Char
    default='.' required=True string='Decimal Separator'
  • direction Selection
    default='ltr' required=True args: [('ltr', 'Left-to-Right'), ('rtl', 'Right-to-Left')]
  • grouping Char
    default='[]' help="The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case." required=True string='Separator Format'
  • iso_code Char
    help='This ISO code is the name of po files to use for translations' string='ISO code'
  • name Char
    required=True
  • thousands_sep Char
    default=',' string='Thousands Separator'
  • time_format Char
    default=DEFAULT_TIME_FORMAT required=True string='Time Format'
  • translatable Boolean
Public methods (8)
  • create(self, vals)
    @api.model
  • format(self, percent, value, grouping=False, monetary=False)
    @api.multi
    Format() will return the language-specific output for float values
  • get_available(self)
    @api.model@tools.ormcache()
    Return the available languages as a list of (code, name) sorted by name.
  • get_installed(self)
    @api.model@tools.ormcache()
    Return the installed languages as a list of (code, name) sorted by name.
  • install_lang(self)
    @api.model
    This method is called from odoo/addons/base/base_data.xml to load some language and set it as the default for every partners. The language is set via tools.config by the RPC 'create' method on the 'db' object. This is a fragile solution and something else should be found.
  • load_lang(self, lang, lang_name=None)
    @api.model
    Create the given language if necessary, and make it active.
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (51)
  • active Boolean
    default=True
  • bank_ids One2many → res.partner.bank
    string='Banks' args: 'res.partner.bank', 'partner_id'
  • barcode Char
    oldname='ean13'
  • category_id Many2many → res.partner.category
    column1='partner_id' column2='category_id' default=_default_category string='Tags' args: 'res.partner.category'
  • child_ids One2many → res.partner
    domain=[('active', '=', True)] string='Contacts' args: 'res.partner', 'parent_id'
  • city Char
  • color Integer
    default=0 string='Color Index'
  • comment Text
    string='Notes'
  • commercial_company_name Char
    compute='_compute_commercial_company_name' store=True args: 'Company Name Entity'
  • commercial_partner_country_id Many2one → res.country
    related='commercial_partner_id.country_id' store=True string="Commercial Entity's Country" args: 'res.country'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner' index=True store=True string='Commercial Entity' args: 'res.partner'
  • company_id Many2one → res.company
    default=_default_company index=True args: 'res.company', 'Company'
  • company_name Char
    args: 'Company Name'
  • company_type Selection
    compute='_compute_company_type' inverse='_write_company_type' selection=[('person', 'Individual'), ('company', 'Company')] string='Company Type'
  • contact_address Char
    compute='_compute_contact_address' string='Complete Address'
  • country_id Many2one → res.country
    ondelete='restrict' string='Country' args: 'res.country'
  • credit_limit Float
    string='Credit Limit'
  • customer Boolean
    default=True help='Check this box if this contact is a customer.' string='Is a Customer'
  • date Date
    index=True
  • display_name Char
    compute='_compute_display_name' index=True store=True
  • 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'
  • image Binary
    attachment=True help='This field holds the image used as avatar for this contact, limited to 1024x1024px' args: 'Image'
  • image_medium Binary
    attachment=True help='Medium-sized image of this contact. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' args: 'Medium-sized image'
  • image_small Binary
    attachment=True help='Small-sized image of this contact. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' args: 'Small-sized image'
  • industry_id Many2one → res.partner.industry
    args: 'res.partner.industry', 'Industry'
  • is_company Boolean
    default=False help='Check if the contact is a company, otherwise it is a person' string='Is a Company'
  • lang Selection
    default=<expr> help='If the selected language is loaded in the system, all documents related to this contact will be printed in this language. If not, it will be English.' string='Language' args: _lang_get
  • mobile Char
  • name Char
    index=True
  • parent_id Many2one → res.partner
    index=True string='Related Company' args: 'res.partner'
  • parent_name Char
    readonly=True related='parent_id.name' string='Parent name'
  • partner_share Boolean
    compute='_compute_partner_share' help='Either customer (no 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='Internal Reference'
  • self Many2one
    comodel_name=_name compute='_compute_get_ids'
  • state_id Many2one → res.country.state
    ondelete='restrict' string='State' args: 'res.country.state'
  • street Char
  • street2 Char
  • supplier Boolean
    help="Check this box if this contact is a vendor. If it's not checked, purchase people will not see it when encoding a purchase order." string='Is a Vendor'
  • title Many2one → res.partner.title
    args: 'res.partner.title'
  • type Selection
    default='contact' help='Used to select automatically the right address according to the context in sales and purchases documents.' string='Address Type' args: [('contact', 'Contact'), ('invoice', 'Invoice address'), ('delivery', 'Shipping address'), ('other', 'Other address'), ('private', 'Private Address')]
  • tz Selection
    default=<expr> help="The partner's timezone, used to output proper date and time values inside printed reports. It is important to set a value for this field. You should use the same timezone that is otherwise used to pick and render date and time values: your computer's timezone." string='Timezone' args: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
  • user_id Many2one → res.users
    help='The internal user that is in charge of communicating with this contact if any.' string='Salesperson' args: 'res.users'
  • user_ids One2many → res.users
    auto_join=True string='Users' args: 'res.users', 'partner_id'
  • vat Char
    help='Tax Identification Number. Fill it if the company is subjected to taxes. Used by the some of the legal statements.' string='TIN'
  • website Char
    help='Website of Partner or Company'
  • zip Char
    change_default=True
Public methods (17)
  • address_get(self, adr_pref=None)
    @api.multi
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • create_company(self)
    @api.multi
  • find_or_create(self, email)
    @api.model
    Find a partner with the given ``email`` or use :py:method:`~.name_create` to create one :param str email: email-like string, which should contain at least one email, e.g. ``"Raoul Grosbedon <r.g@grosbedon.fr>"``
  • main_partner(self)
    @api.model@api.returns('self')
    Return the main partner
  • 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.
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • onchange_company_type(self)
    @api.onchange('company_type')
  • onchange_email(self)
    @api.onchange('email')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • open_commercial_entity(self)
    @api.multi
    Utility method used to add an "Open Company" button in partner views
  • open_parent(self)
    @api.multi
    Utility method used to add an "Open Parent" button in partner views
  • update_address(self, vals)
    @api.multi
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)
    @api.multi

New fields (10)
  • acc_number Char
    required=True args: 'Account Number'
  • acc_type Char
    compute='_compute_acc_type' help='Bank account type, inferred from account number'
  • bank_bic Char
    related='bank_id.bic'
  • bank_id Many2one → res.bank
    string='Bank' args: 'res.bank'
  • bank_name Char
    related='bank_id.name'
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • partner_id Many2one → res.partner
    default=<expr> domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' args: 'res.partner', 'Account Holder'
  • sanitized_acc_number Char
    compute='_compute_sanitized_acc_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
    default=10
Public methods (1)
  • search(self, args, offset=0, limit=None, order=None, count=False)
    @api.model

New fields (8)
  • active Boolean
    default=True help='The active field allows you to hide the category without removing it.'
  • child_ids One2many → res.partner.category
    string='Child Tags' args: 'res.partner.category', 'parent_id'
  • color Integer
    string='Color Index'
  • name Char
    required=True string='Tag Name' translate=True
  • parent_id Many2one → res.partner.category
    index=True ondelete='cascade' string='Parent Category' args: 'res.partner.category'
  • parent_left Integer
    index=True string='Left parent'
  • parent_right Integer
    index=True string='Right parent'
  • partner_ids Many2many → res.partner
    column1='category_id' column2='partner_id' string='Partners' args: 'res.partner'
Public methods (2)
  • name_get(self)
    @api.multi
    Return the categories' display name, including their direct parent by default. If ``context['partner_category_display']`` is ``'short'``, the short version of the category name (without the direct parent) is used. The default is the long version.
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model

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 (2)
  • name Char
    required=True string='Title' translate=True
  • shortcut Char
    string='Abbreviation' translate=True
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True translate=True
  • object Char
    required=True
  • priority Integer
    default=5
Public methods (0)

No public methods.

New fields (17)
  • 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
  • companies_count Integer
    compute='_compute_companies_count' default=_companies_count string='Number of Companies'
  • company_id Many2one → res.company
    context={'user_preference': True} default=_get_company help='The company this user is currently working for.' required=True string='Company' args: 'res.company'
  • company_ids Many2many → res.company
    default=_get_company string='Companies' args: 'res.company', 'res_company_users_rel', 'user_id', 'cid'
  • email Char
    inherited=True related='partner_id.email'
  • groups_id Many2many → res.groups
    default=_default_groups string='Groups' args: 'res.groups', 'res_groups_users_rel', 'uid', 'gid'
  • 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
    related='log_ids.create_date' string='Latest connection'
  • name Char
    inherited=True related='partner_id.name'
  • new_password Char
    compute='_compute_password' help="Specify a value only when creating a user or if you're changing the user's password, otherwise leave empty. After a change of password, the user has to login again." inverse='_inverse_password' string='Set Password'
  • partner_id Many2one → res.partner
    auto_join=True help='Partner-related data of the user' ondelete='restrict' required=True string='Related Partner' args: 'res.partner'
  • password Char
    copy=False default='' help="Keep empty if you don't want the user to be able to connect on the system." invisible=True
  • 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
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
Public methods (20)
  • action_get(self)
    @api.model@api.returns('ir.actions.act_window', <expr>)
  • authenticate(cls, db, login, password, user_agent_env)
    @classmethod
    Verifies and returns the user ID corresponding to the given ``login`` and ``password`` combination, or False if there was no matching user. :param str db: the database on which user is trying to authenticate :param str login: username :param str password: user password :param dict user_agent_env: environment dictionary describing any relevant environment attributes
  • 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
  • check(cls, db, uid, passwd)
    @classmethod
    Verifies that the given (uid, password) is authorized for the database ``db`` and raise an exception if it is not.
  • check_credentials(self, password)
    @api.model
    Override this method to plug additional authentication methods
  • check_super(self, passwd)
  • context_get(self)
    @api.model@tools.ormcache('self._uid')
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • get_company_currency_id(self)
    @api.model
  • has_group(self, group_ext_id)
    @api.model
  • name_search(self, name='', args=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)
    @api.multi
  • preference_save(self)
    @api.multi
  • read(self, fields=None, load='_classic_read')
    @api.multi
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (2)
  • create(self, values)
    @api.model
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (5)
  • create(self, values)
    @api.model
  • default_get(self, fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • read(self, fields=None, load='_classic_read')
    @api.multi
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

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)
    @api.multi
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Cedric Snauwaert, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Julien Legros, xmo-odoo, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Olivier Colson, Yannick Tivisse, Nicolas Seinlet, Pierre Masereel, Toufik Benjaa, tbe-odoo, Christophe Monniez, Denis Vermylen, Adrian Torres, Moens Alexandre, David Tran, Rishabh Jadia, Denis Roussel
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of Odoo, needed for all installation.
===================================================

Code Analysis

Views touched (161)
XML IDNameModelTypeStatus
act_report_xml_search_view ir.actions.report.xml.search ir.actions.report.xml search New
act_report_xml_view ir.actions.report.xml ir.actions.report.xml form New
act_report_xml_view_tree ir.actions.report.xml.tree ir.actions.report.xml tree New
action_view ir.actions.actions ir.actions.actions form New
action_view_company_form_link_2_currencies res.company.form res.company form Inherits base.view_company_form
action_view_search ir.actions.actions.search ir.actions.actions search New
action_view_tree ir.actions.actions.tree ir.actions.actions tree New
change_password_wizard_user_tree_view Change Password Users change.password.user tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree New
ir_cron_view ir.cron form New
ir_cron_view_calendar ir.cron calendar New
ir_cron_view_search ir.cron search New
ir_cron_view_tree ir.cron tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Apps Kanban ir.module.module kanban New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_config_installer Inheritable view for installer objects res.config.installer form New
res_config_view_base res.config.view.base res.config form 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.tree res.lang tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_partner_view_form_private res.partner.view.form.private res.partner form New
res_request_link-view res.request.link.form res.request.link form New
res_request_link_search_view res.request.link.search res.request.link search New
res_request_link_tree-view res.request.link.form res.request.link tree New
sequence_view ir.sequence form New
sequence_view_tree ir.sequence tree New
user_groups_view res.users.groups res.users form Inherits view_users_form
values_view_form_action ir.values.form.action ir.values form New
values_view_form_defaults ir.values.form.defaults ir.values form New
values_view_search_action ir.values.search.action ir.values search New
values_view_tree_action ir.values.tree.action ir.values tree New
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree 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_configuration_form Module Configuration base.module.configuration 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_company_form res.company.form res.company form New
view_company_tree res.company.tree res.company tree 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.tree res.country.group tree New
view_country_state_form res.country.state.form res.country.state form New
view_country_state_tree res.country.state.tree res.country.state tree New
view_country_tree res.country.tree res.country tree New
view_currency_form res.currency.form res.currency form New
view_currency_rate_form res.currency.rate.form res.currency.rate form 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.tree res.currency.rate tree New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_groups_form res.groups.form res.groups form 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 tree New
view_ir_config_search ir.config_parameter search New
view_ir_mail_server_search ir.mail_server search New
view_menu ir.ui.menu.tree ir.ui.menu tree New
view_model_constraint_form ir.model.constraint form New
view_model_constraint_list ir.model.constraint tree New
view_model_data_form ir.model.data form New
view_model_data_list ir.model.data tree 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_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree 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.tree res.partner.bank tree New
view_partner_category_form Contact Tags res.partner.category form New
view_partner_category_list Contact Tags res.partner.category tree 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_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_partner_filter res.partner.select res.partner search New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree New
view_translation_dialog_tree ir.translation tree New
view_translation_form ir.translation form New
view_translation_search ir.translation search New
view_translation_tree ir.translation tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
view_workflow_activity_form workflow.activity.form workflow.activity form New
view_workflow_activity_search workflow.activity.search workflow.activity search New
view_workflow_activity_tree workflow.activity.tree workflow.activity tree New
view_workflow_diagram workflow.diagram workflow diagram New
view_workflow_form workflow.form workflow form New
view_workflow_instance_form workflow.instance.form workflow.instance form New
view_workflow_instance_search workflow.instance.search workflow.instance search New
view_workflow_instance_tree workflow.instance.tree workflow.instance tree New
view_workflow_search workflow.search workflow search New
view_workflow_transition_form workflow.transition.form workflow.transition form New
view_workflow_transition_search workflow.transition.search workflow.transition search New
view_workflow_transition_tree workflow.transition.tree workflow.transition tree New
view_workflow_tree workflow.tree workflow tree New
view_workflow_workitem_form workflow.workitem.form workflow.workitem form New
view_workflow_workitem_search workflow.workitem.search workflow.workitem search New
view_workflow_workitem_tree workflow.workitem.tree workflow.workitem tree New
wizard_lang_export Export Translations base.language.export form New
wizard_update_translations Synchronize Terms base.update.translations form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (82)

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 (6)
  • data Binary
    readonly=True args: 'File'
  • format Selection
    default='csv' 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
  • 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)
    @api.multi

New fields (5)
  • code Char
    help='ISO Language and Country code, e.g. en_US' required=True size=5 args: 'ISO Code'
  • data Binary
    required=True args: 'File'
  • filename Char
    required=True args: 'File Name'
  • name Char
    required=True args: 'Language Name'
  • overwrite Boolean
    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)
    @api.multi

New fields (3)
  • lang Selection
    required=True string='Language' args: _get_languages
  • overwrite Boolean
    help='If you check this box, your customized translations will be overwritten and replaced by the official ones.' args: 'Overwrite Existing Terms'
  • state Selection
    default='init' readonly=True string='Status' args: [('init', 'init'), ('done', 'done')]
Public methods (1)
  • lang_install(self)
    @api.multi

New fields (0)

No new fields.

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

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)
    @api.multi
  • update_module(self)
    @api.multi

New fields (1)
  • module_info Text
    default=_default_module_info readonly=True args: 'Apps to Update'
Public methods (5)
  • config(self)
    @api.multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_module_list(self)
    @api.model@api.returns('ir.module.module')
  • upgrade_module(self)
    @api.multi
  • upgrade_module_cancel(self)
    @api.multi

New fields (1)
  • lang Selection
    default=_default_language required=True args: _get_languages, 'Language'
Public methods (1)
  • act_update(self)
    @api.multi

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

No public methods.

New fields (21)
  • auto_search Boolean
    default=True
  • 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'
  • filter Boolean
  • groups_id 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'
  • multi Boolean
    help='If checked and the action is bound to a model, it will only appear in the More menu on list views' string='Restrict to lists'
  • name Char
    string='Action Name' translate=True
  • 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 Text
    compute='_compute_search_view'
  • search_view_id Many2one → ir.ui.view
    string='Search View Ref.' args: 'ir.ui.view'
  • src_model Char
    help='Optional model name of the objects on which this action should be visible' string='Source Model'
  • target Selection
    default='current' string='Target Window' args: [('current', 'Current Window'), ('new', 'New Window'), ('inline', 'Inline Edit'), ('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='Views' args: 'ir.actions.act_window.view', 'act_window_id'
  • view_mode Char
    default='tree,form' help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)" required=True
  • view_type Selection
    default='form' help="View type: Tree type to use for the tree view, set to 'tree' for a hierarchical tree view, or 'form' for a regular list view" required=True string='View Type' args: [('tree', 'Tree'), ('form', 'Form')]
  • views Binary
    compute='_compute_views' help='This function field computes the ordered list of views that should be enabled when displaying the result of an action, federating view mode, views and reference view. The result is returned as an ordered list of pairs (view_id,view_mode).'
Public methods (5)
  • create(self, vals)
    @api.model
  • exists(self)
    @api.multi
  • for_xml_id(self, module, xml_id)
    @api.model
    Returns the act_window object created for the provided xml_id :param module: the module the act_window originates in :param xml_id: the namespace-less id of the action (the @id attribute from the XML file) :return: A read() view of the ir.actions.act_window
  • read(self, fields=None, load='_classic_read')
    @api.multi
    call the method get_empty_list_help of the model and set the window action help message
  • unlink(self)
    @api.multi

New fields (5)
  • act_window_id Many2one → ir.actions.act_window
    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 (5)
  • 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
  • type Char
    required=True string='Action Type'
  • usage Char
    string='Action Usage'
  • xml_id Char
    compute='_compute_xml_id' string='External ID'
Public methods (3)
  • create(self, vals)
    @api.model
  • unlink(self)
    @api.multi
    unlink ir.action.todo which are related to actions which will be deleted. NOTE: ondelete cascade will not work on ir.actions.actions so we will need to do it manually.
  • write(self, vals)
    @api.multi

New fields (8)
  • context Char
    default='{}' help='Context dictionary as Python expression, empty by default (Default: {})' required=True string='Context Value'
  • name Char
    string='Action Name' translate=True
  • params Binary
    compute='_compute_params' help='Arguments sent to the client along withthe view tag' inverse='_inverse_params' string='Supplementary arguments'
  • params_store Binary
    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 (22)
  • attachment Char
    help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.' string='Save as Attachment Prefix'
  • attachment_use Boolean
    help='If you check this, then the second time the user prints with same attachment name, it returns the previous report.' string='Reload from Attachment'
  • auto Boolean
    default=True string='Custom Python Parser'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_report_rel', 'uid', 'gid'
  • header Boolean
    default=True help='Add or not the corporate RML header' string='Add RML Header'
  • ir_values_id Many2one → ir.values
    copy=False help='More menu entry.' readonly=True string='More Menu entry' args: 'ir.values'
  • model Char
    required=True
  • 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.'
  • name Char
    translate=True
  • parser Char
    string='Parser Class'
  • report_file Char
    help='The path to the main report file (depending on Report Type) or empty if the content is in another field' readonly=False related='report_rml' required=False store=True string='Report File'
  • report_name Char
    help="For QWeb reports, name of the template used in the rendering. The method 'render_html' of the model 'report.template_name' will be called (if any) to give the html. For RML reports, this is the LocalService name." required=True string='Template Name'
  • report_rml Char
    help='The path to the main report file/controller (depending on Report Type) or empty if the content is in another data field' string='Main Report File Path/controller'
  • report_rml_content Binary
    compute='_compute_report_rml_content' inverse='_inverse_report_rml_content' string='RML Content'
  • report_rml_content_data Binary
    string='RML Content'
  • report_sxw Char
    compute='_compute_report_sxw' string='SXW Path'
  • report_sxw_content Binary
    compute='_compute_report_sxw_content' inverse='_inverse_report_sxw_content' string='SXW Content'
  • report_sxw_content_data Binary
    string='SXW Content'
  • report_type Selection
    default='pdf' help='HTML will open the report directly in your browser, PDF will use wkhtmltopdf to render the HTML into a PDF file and let you download it, Controller allows you to define the url of a custom controller outputting any kind of report.' required=True args: [('qweb-pdf', 'PDF'), ('qweb-html', 'HTML'), ('controller', 'Controller'), ('pdf', 'RML pdf (deprecated)'), ('sxw', 'RML sxw (deprecated)'), ('webkit', 'Webkit (deprecated)')]
  • report_xml Char
    string='XML Path'
  • report_xsl Char
    string='XSL Path'
  • type Char
    default='ir.actions.report.xml'
Public methods (3)
  • create_action(self)
    @api.multi
    Create a contextual action for each report.
  • render_report(self, res_ids, name, data)
    @api.model
    Look up a report definition and render the report for the provided IDs.
  • unlink_action(self)
    @api.multi
    Remove the contextual actions created for the reports.

New fields (31)
  • action_id Many2one → ir.actions.actions
    help='Select the client action that has to be executed.' string='Client Action' args: 'ir.actions.actions'
  • child_ids Many2many → ir.actions.server
    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', 'rel_server_actions', 'server_id', 'action_id'
  • code Text
    default=DEFAULT_PYTHON_CODE help='Write Python code that the action will execute. Some variables are available for use; help about pyhon expression is given in the help tab.' string='Python Code'
  • condition Char
    default='True' help="Condition verified before executing the server action. If it is not verified, the action will not be executed. The condition is a Python expression, like 'record.list_price > 5000'. A void condition is considered as always True. Help about python expression is given in the help tab."
  • copyvalue Char
    help='Final placeholder expression, to be copy-pasted in the desired template field.' string='Placeholder Expression'
  • crud_model_id Many2one → ir.model
    help='Model for record creation / update. Set this field only to specify a different model than the base model.' oldname='srcmodel_id' string='Create/Write Target Model' args: 'ir.model'
  • crud_model_name Char
    readonly=True related='crud_model_id.model' store=True string='Create/Write Target Model Name'
  • fields_lines One2many → ir.server.object.lines
    copy=True string='Value Mapping' args: 'ir.server.object.lines', 'server_id'
  • id_object Reference
    selection='_select_objects' string='Record'
  • id_value Char
    string='Record ID'
  • link_field_id Many2one → ir.model.fields
    help='Provide the field where the record id is stored after the operations.' oldname='record_id' string='Link using field' args: 'ir.model.fields'
  • link_new_record Boolean
    help='Check this if you want to link the newly-created record to the current record on which the server action runs.' string='Attach the new record'
  • menu_ir_values_id Many2one → ir.values
    copy=False help='More menu entry.' readonly=True string='More Menu entry' args: 'ir.values'
  • model_id Many2one → ir.model
    help='Base model on which the server action runs.' ondelete='cascade' required=True string='Base Model' args: 'ir.model'
  • model_name Char
    readonly=True related='model_id.model'
  • model_object_field Many2one → ir.model.fields
    help='Select target field from the related document model.\nIf it is a relationship field you will be able to select a target field at the destination of the relationship.' string='Field' args: 'ir.model.fields'
  • name Char
    string='Action Name' translate=True
  • ref_object Reference
    oldname='copy_object' selection='_select_objects' string='Reference record'
  • sequence Integer
    default=5 help='When dealing with multiple actions, the execution order is based on the sequence. Low number means high priority.'
  • state Selection
    default='code' help="Type of server action. The following values are available:\n- 'Execute Python Code': a block of python code that will be executed\n- 'Trigger a Workflow Signal': send a signal to a workflow\n- 'Run a Client Action': choose a client action to launch\n- 'Create or Copy a new Record': create a new record with new values, or copy an existing record in your database\n- 'Write on a Record': update the values of a record\n- 'Execute several actions': define an action that triggers several other server actions\n- 'Send Email': automatically send an email (available in email_template)" required=True selection=<expr> string='Action To Do'
  • sub_model_object_field Many2one → ir.model.fields
    help='When a relationship field is selected as first field, this field lets you select the target field within the destination document model (sub-model).' string='Sub-field' args: 'ir.model.fields'
  • sub_object Many2one → ir.model
    help='When a relationship field is selected as first field, this field shows the document model the relationship goes to.' readonly=True string='Sub-model' args: 'ir.model'
  • type Char
    default='ir.actions.server'
  • use_create Selection
    default='new' required=True string='Creation Policy' args: [('new', 'Create a new record in the Base Model'), ('new_other', 'Create a new record in another model'), ('copy_current', 'Copy the current record'), ('copy_other', 'Choose and copy a record in the database')]
  • use_relational_model Selection
    default='base' required=True string='Relational Target Model' args: [('base', 'Use the base model of the action'), ('relational', 'Use a relation field on the base model')]
  • use_write Selection
    default='current' required=True string='Update Policy' args: [('current', 'Update the current record'), ('expression', 'Update a record linked to the current record using python'), ('other', 'Choose and Update a record in the database')]
  • wkf_field_id Many2one → ir.model.fields
    help='The field on the current object that links to the target object record (must be a many2one, or an integer field with the record ID)' oldname='trigger_obj_id' string='Relation Field' args: 'ir.model.fields'
  • wkf_model_id Many2one → ir.model
    help='The model that will receive the workflow signal. Note that it should have a workflow associated with it.' string='Target Model' args: 'ir.model'
  • wkf_model_name Char
    readonly=True related='wkf_model_id.model' store=True string='Target Model Name'
  • wkf_transition_id Many2one → workflow.transition
    help='Select the workflow signal to trigger.' string='Signal to Trigger' args: 'workflow.transition'
  • write_expression Char
    help='Provide an expression that, applied on the current record, gives the field to update.' oldname='write_id' string='Expression'
Public methods (9)
  • create_action(self)
    @api.multi
    Create a contextual action for each server action.
  • run(self)
    @api.multi
    Runs the server action. For each server action, the condition is checked. Note that a void (``False``) condition is considered as always valid. If it is verified, the run_action_<STATE> method is called. This allows easy overriding of the server actions. :param dict context: context should contain following keys - active_id: id of the current object (single mode) - active_model: current model that should equal the action's model The following keys are optional: - active_ids: 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
  • run_action_client_action(self, action, eval_context=None)
    @api.model
  • run_action_code_multi(self, action, eval_context=None)
    @api.model
  • run_action_multi(self, action, eval_context=None)
    @api.model
  • run_action_object_create(self, action, eval_context=None)
    @api.model
    Create and Copy server action. - 1. evaluate the value mapping - 2. depending on the write configuration: - `new`: new record in the base model - `copy_current`: copy the current record (id = active_id) + gives custom values - `new_other`: new record in target model - `copy_other`: copy the current record (id from reference object) + gives custom values
  • run_action_object_write(self, action, eval_context=None)
    @api.model
    Write server action. - 1. evaluate the value mapping - 2. depending on the write configuration: - `current`: id = active_id - `other`: id = from reference object - `expression`: id = from expression evaluation
  • run_action_trigger(self, action, eval_context=None)
    @api.model
    Trigger a workflow signal, depending on the use_relational_model: - `base`: base_model_pool.signal_workflow(cr, uid, context.get('active_id'), <TRIGGER_NAME>) - `relational`: find the related model and object, using the relational field, then target_model_pool.signal_workflow(cr, uid, target_id, <TRIGGER_NAME>)
  • unlink_action(self)
    @api.multi
    Remove the contextual actions created for the server actions.

New fields (7)
  • action_id Many2one → ir.actions.actions
    index=True required=True string='Action' args: 'ir.actions.actions'
  • groups_id Many2many → res.groups
    string='Groups' args: 'res.groups', 'res_groups_action_rel', 'uid', 'gid'
  • name Char
  • note Text
    string='Text' translate=True
  • sequence Integer
    default=10
  • state Selection
    default='open' required=True string='Status' args: [('open', 'To Do'), ('done', 'Done')]
  • type Selection
    default='manual' help='Manual: Launched manually.\n Automatic: Runs whenever the system is reconfigured.\n Launch Manually Once: after having been launched manually, it sets automatically to Done.' required=True args: [('manual', 'Launch Manually'), ('once', 'Launch Manually Once'), ('automatic', 'Launch Automatically')]
Public methods (6)
  • action_launch(self, context=None)
    @api.multi
    Launch Action of Wizard
  • action_open(self)
    @api.multi
    Sets configuration wizard in TODO state
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • progress(self)
    @api.multi
    Returns a dict with 3 keys {todo, done, total}. These keys all map to integers and provide the number of todos marked as open, the total number of todos and the number of todos not open (which is basically a shortcut to total-todo) :rtype: dict
  • unlink(self)
    @api.multi

New fields (20)
  • checksum Char
    index=True readonly=True size=40 args: 'Checksum/SHA1'
  • company_id Many2one → res.company
    change_default=True default=<expr> string='Company' args: 'res.company'
  • create_date Datetime
    readonly=True args: 'Date Created'
  • create_uid Many2one → res.users
    readonly=True string='Owner' args: 'res.users'
  • datas Binary
    compute='_compute_datas' inverse='_inverse_datas' string='File Content'
  • datas_fname Char
    args: 'File Name'
  • db_datas Binary
    args: 'Database Data'
  • description Text
    args: 'Description'
  • file_size Integer
    readonly=True args: 'File Size'
  • index_content Text
    prefetch=False readonly=True args: 'Indexed Content'
  • mimetype Char
    readonly=True args: 'Mime Type'
  • name Char
    required=True args: 'Attachment Name'
  • public Boolean
    args: 'Is public document'
  • res_field Char
    readonly=True args: 'Resource Field'
  • res_id Integer
    help='The record id this is attached to.' readonly=True args: 'Resource ID'
  • res_model Char
    help='The database object this attachment will be attached to.' readonly=True args: 'Resource Model'
  • res_name Char
    compute='_compute_res_name' store=True args: 'Resource Name'
  • store_fname Char
    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=True size=1024 args: 'Url'
Public methods (9)
  • action_get(self)
    @api.model
  • check(self, mode, values=None)
    @api.model
    Restricts the access to an ir.attachment, according to referred model In the 'document' module, it is overriden to relax this hard rule, since more complex ones apply there.
  • copy(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
  • force_storage(self)
    @api.model
    Force all attachments to be stored in the currently configured storage
  • 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.
  • read(self, fields=None, load='_classic_read')
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

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

New fields (3)
  • group_ids Many2many → res.groups
    string='Groups' args: 'res.groups', 'ir_config_parameter_groups_rel', 'icp_id', 'group_id'
  • key Char
    index=True required=True
  • value Text
    required=True
Public methods (5)
  • get_param(self, key, default=False)
    @api.model
    Retrieve the value for a given key. :param string key: The key of the parameter value to retrieve. :param string default: default value if parameter is missing. :return: The value of the parameter, or ``default`` if it does not exist. :rtype: string
  • init(self, force=False)
    @api.model_cr@mute_logger('odoo.addons.base.ir.ir_config_parameter')
    Initializes the parameters listed in _default_parameters. It overrides existing parameters if force is ``True``.
  • set_param(self, key, value, groups=())
    @api.model
    Sets the value of a parameter. :param string key: The key of the parameter value to set. :param string value: The value to set. :param list of string groups: List of group (xml_id allowed) to read this key. :return: the previous value of the parameter or False if it did not exist. :rtype: string
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

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

No public methods.

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

No public methods.

New fields (9)
  • 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
  • is_default Boolean
    string='Default filter'
  • model_id Selection
    required=True selection='_list_all_models' string='Model'
  • name Char
    required=True string='Filter Name' translate=True
  • sort Text
    default='[]' required=True
  • user_id Many2one → res.users
    default=<expr> help='The user this filter is private to. When left empty the filter is public and available to all users.' ondelete='cascade' string='User' args: 'res.users'
Public methods (3)
  • copy(self, default=None)
    @api.multi
  • create_or_replace(self, vals)
    @api.model@api.returns('self', <expr>)
  • get_filters(self, model, action_id=None)
    @api.model
    Obtain the list of filters available for the user on the given model. :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_id`` (m2o tuple), ``action_id`` (m2o tuple) and ``context`` of the matching ``ir.filters``.

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)
    @api.model_cr

New fields (9)
  • active Boolean
    default=True
  • name Char
    index=True required=True string='Description'
  • 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_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)' required=True string='Connection Security' args: [('none', 'None'), ('starttls', 'TLS (STARTTLS)'), ('ssl', 'SSL/TLS')]
  • smtp_host Char
    help='Hostname or IP of SMTP server' required=True string='SMTP Server'
  • smtp_pass Char
    help='Optional password for SMTP authentication' size=64 string='Password'
  • smtp_port Integer
    default=25 help='SMTP Port. Usually 465 for SSL, and 25 or 587 for other cases.' required=True size=5 string='SMTP Port'
  • smtp_user Char
    help='Optional username for SMTP authentication' size=64 string='Username'
Public methods (5)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
    Constructs an RFC2822 email.message.Message object based on the keyword arguments passed, and returns it. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) :param string body: email body, of the type ``subtype`` (by default, plaintext). If html subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative, unless an explicit ``body_alternative`` version is passed. :param string body_alternative: optional alternative body, of the type specified in ``subtype_alternative`` :param string reply_to: optional value of Reply-To header :param string object_id: optional tracking identifier, to be included in the message-id for recognizing replies. Suggested format for object-id is "res_id-model", e.g. "12345-crm.lead". :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), must match the format of the ``body`` parameter. Default is 'plain', making the content part of the mail "text/plain". :param string subtype_alternative: optional mime subtype of ``body_alternative`` (usually 'plain' or 'html'). Default is 'plain'. :param list attachments: list of (filename, filecontents) pairs, where filecontents is a string containing the bytes of the attachment :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) :param dict headers: optional map of headers to set on the outgoing mail (may override the other headers, including Subject, Reply-To, Message-Id, etc.) :rtype: email.message.Message (usually MIMEMultipart) :return: the new RFC2822 email message
  • connect(self, host, port, user=None, password=None, encryption=False, smtp_debug=False)
    Returns a new SMTP connection to the give SMTP server, authenticated with ``user`` and ``password`` if provided, and encrypted as requested by the ``encryption`` parameter. :param host: host or IP of SMTP server to connect to :param int port: SMTP port to connect to :param user: optional username to authenticate with :param password: optional password to authenticate with :param string encryption: optional, ``'ssl'`` | ``'starttls'`` :param bool smtp_debug: toggle debugging of SMTP sessions (all i/o will be output in logs)
  • name_get(self)
    @api.multi
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_debug=False)
    @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 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' or 'ssl' (see ir.mail_server fields for explanation) :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_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)
    @api.multi

New fields (10)
  • access_ids One2many → ir.model.access
    string='Access' args: 'ir.model.access', 'model_id'
  • field_id One2many → ir.model.fields
    copy=True default=_default_field_id required=True string='Fields' args: 'ir.model.fields', 'model_id'
  • 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_' index=True 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
  • state Selection
    default='manual' readonly=True string='Type' args: [('manual', 'Custom Object'), ('base', 'Base Object')]
  • transient Boolean
    string='Transient Model'
  • view_ids One2many → ir.ui.view
    compute='_view_ids' string='Views' args: 'ir.ui.view'
Public methods (4)
  • create(self, vals)
    @api.model
  • 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)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (8)
  • active Boolean
    default=True help='If you uncheck the active field, it will disable the ACL without deleting it (if you delete a native ACL, it will be re-created when you reload the module).'
  • group_id Many2one → res.groups
    index=True ondelete='cascade' string='Group' args: 'res.groups'
  • model_id Many2one → ir.model
    domain=[('transient', '=', False)] index=True ondelete='cascade' required=True string='Object' args: 'ir.model'
  • name Char
    index=True required=True
  • perm_create Boolean
    string='Create Access'
  • perm_read Boolean
    string='Read Access'
  • perm_unlink Boolean
    string='Delete Access'
  • perm_write Boolean
    string='Write Access'
Public methods (10)
  • call_cache_clearing_methods(self)
    @api.model_cr
  • check(self, model, mode='read', raise_exception=True)
    @api.model@tools.ormcache_context('self._uid', 'model', 'mode', 'raise_exception', keys=('lang'))
  • check_group(self, model, mode, group_ids)
    @api.model
    Check if a specific group has the access mode to the specified model
  • check_groups(self, group)
    @api.model
    Check whether the current user has the given group.
  • create(self, values)
    @api.model
  • group_names_with_access(self, model_name, access_mode)
    @api.model_cr
    Return the names of visible groups which have been granted ``access_mode`` on the model ``model_name``. :rtype: list
  • register_cache_clearing_method(cls, model, method)
    @classmethod
  • unlink(self)
    @api.multi
  • unregister_cache_clearing_method(cls, model, method)
    @classmethod
  • write(self, values)
    @api.multi

New fields (7)
  • date_init Datetime
    string='Initialization Date'
  • date_update Datetime
    string='Update Date'
  • definition Char
    help='PostgreSQL constraint definition'
  • model Many2one → ir.model
    index=True required=True args: 'ir.model'
  • module Many2one → ir.module.module
    index=True required=True args: 'ir.module.module'
  • name Char
    help='PostgreSQL constraint or foreign key name.' index=True required=True string='Constraint'
  • type Char
    help='Type of the constraint: `f` for a foreign key, `u` for other constraints.' index=True required=True size=1 string='Constraint Type'
Public methods (1)
  • copy(self, default=None)
    @api.multi

New fields (9)
  • complete_name Char
    compute='_compute_complete_name' string='Complete ID'
  • date_init Datetime
    default=fields.Datetime.now string='Init Date'
  • date_update Datetime
    default=fields.Datetime.now string='Update Date'
  • 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 Integer
    help='ID of the target record in the database' string='Record ID'
Public methods (9)
  • 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)
  • get_object(self, module, xml_id)
    @api.model
    Returns a browsable record for the given module name and xml_id. If not found, raise a ValueError or return None, depending on the value of `raise_exception`.
  • get_object_reference(self, module, xml_id)
    @api.model
    Returns (model, res_id) corresponding to a given module and xml_id (cached) or raise ValueError if not found
  • name_get(self)
    @api.multi
  • unlink(self)
    @api.multi
    Regular unlink method, but make sure to clear the caches.
  • xmlid_lookup(self, xmlid)
    @api.model@tools.ormcache('xmlid')
    Low level xmlid lookup Return (id, res_model, res_id) or raise ValueError if not found
  • xmlid_to_object(self, xmlid, raise_if_not_found=False)
    @api.model
    Return a browse_record if not found and raise_if_not_found is False return None
  • xmlid_to_res_id(self, xmlid, raise_if_not_found=False)
    @api.model
    Returns res_id
  • xmlid_to_res_model_res_id(self, xmlid, raise_if_not_found=False)
    @api.model
    Return (res_model, res_id)

New fields (30)
  • 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'
  • complete_name Char
    index=True
  • 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."
  • copy Boolean
    help='Whether the value is copied when duplicating a record.' string='Copied'
  • 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
  • groups Many2many → res.groups
    args: 'res.groups', 'ir_model_fields_group_rel', 'field_id', 'group_id'
  • help Text
    string='Field Help' translate=True
  • index Boolean
    string='Indexed'
  • model Char
    help='The technical name of the model this field belongs to' index=True required=True string='Object 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'
  • relation Char
    help='For relationship fields, the technical name of the target model' string='Object Relation'
  • relation_field Char
    help='For one2many fields, the field on the target model that implement the opposite many2one relationship'
  • relation_table Char
    help='Used for custom many2many fields to define a custom relation table name'
  • required Boolean
  • selectable Boolean
    default=True
  • selection Char
    default='' help="List of options for a selection field, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'),('yellow','Yellow')]" string='Selection Options'
  • serialization_field_id Many2one → ir.model.fields
    domain="[('ttype','=','serialized')]" help='If set, this field will be stored in the sparse structure of the serialization field, instead of having its own database column. This cannot be changed after creation.' ondelete='cascade' args: 'ir.model.fields', 'Serialization Field'
  • 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'
  • translate Boolean
    help='Whether values for this field can be translated (enables the translation mechanism for that field)' string='Translatable'
  • ttype Selection
    required=True selection='_get_field_types' string='Field Type'
Public methods (4)
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (5)
  • date_init Datetime
    string='Initialization Date'
  • date_update Datetime
    string='Update Date'
  • model Many2one → ir.model
    index=True required=True args: 'ir.model'
  • module Many2one → ir.module.module
    index=True required=True args: 'ir.module.module'
  • name Char
    help='PostgreSQL table name implementing a many2many relation.' index=True required=True string='Relation Name'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (11)
  • company_id Many2one → res.company
    index=True string='Company' args: 'res.company'
  • fields_id Many2one → ir.model.fields
    index=True ondelete='cascade' required=True string='Field' args: 'ir.model.fields'
  • name Char
    index=True
  • res_id Char
    help='If not set, acts as a default value for new resources' index=True string='Resource'
  • type Selection
    default='many2one' index=True required=True args: [('char', 'Char'), ('float', 'Float'), ('boolean', 'Boolean'), ('integer', 'Integer'), ('text', 'Text'), ('binary', 'Binary'), ('many2one', 'Many2One'), ('date', 'Date'), ('datetime', 'DateTime'), ('selection', 'Selection')]
  • value_binary Binary
  • value_datetime Datetime
  • value_float Float
  • value_integer Integer
  • value_reference Char
  • value_text Text
Public methods (7)
  • create(self, values)
    @api.model
  • get(self, name, model, res_id=False)
    @api.model
  • get_by_record(self)
    @api.multi
  • get_multi(self, name, model, ids)
    @api.model
    Read the property field `name` for the records of model `model` with the given `ids`, and return a dictionary mapping `ids` to their corresponding value.
  • search_multi(self, name, model, operator, value)
    @api.model
    Return a domain for the records that match the given condition.
  • set_multi(self, name, model, values, default_value=None)
    @api.model
    Assign the property field `name` for the records of model `model` with `values` (dictionary mapping record ids to their value). If the value for a given record is the same as the default value, the property entry will not be stored, to avoid bloating the database. If `default_value` is provided, that value will be used instead of the computed default value, to determine whether the value for a record should be stored or not.
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (4)
  • 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: OrderedDict (attribute name, attribute value).
  • record_to_html(self, record, field_name, options)
    @api.model
    record_to_html(record, field_name, options) Converts the specified field of the browse_record ``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. Fallbacks to en_US if no lang is present in the context *or the language code is not valid*. :returns: res.lang browse_record
  • 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 (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)
  • 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)
  • 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)
  • record_to_html(self, record, field_name, options)
    @api.model

New fields (0)

No new fields.

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

New fields (0)

No new fields.

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

New fields (10)
  • active Boolean
    default=True help='If you uncheck the active field, it will disable the record rule without deleting it (if you delete a native record rule, it may be re-created when you reload the module).'
  • domain Binary
    compute='_force_domain' string='Domain'
  • domain_force Text
    string='Domain'
  • groups Many2many → res.groups
    args: 'res.groups', 'rule_group_rel', 'rule_group_id', 'group_id'
  • model_id Many2one → ir.model
    index=True ondelete='cascade' required=True string='Object' args: 'ir.model'
  • name Char
    index=True
  • perm_create Boolean
    default=True string='Apply for Create'
  • perm_read Boolean
    default=True string='Apply for Read'
  • perm_unlink Boolean
    default=True string='Apply for Delete'
  • perm_write Boolean
    default=True string='Apply for Write'
Public methods (5)
  • clear_cache(self)
    @api.model
    Deprecated, use `clear_caches` instead.
  • create(self, vals)
    @api.model
  • domain_get(self, model_name, mode='read')
    @api.model
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

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="Two sequence object implementations are offered: Standard and 'No gap'. The later is slower than the former but forbids anygap in the sequence (while they are possible in the former)." 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='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'
  • suffix Char
    help='Suffix value of the record for the sequence'
  • use_date_range Boolean
    string='Use subsequences per date_range'
Public methods (8)
  • create(self, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get(self, code)
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by its code. This method is deprecated.
  • get_id(self, sequence_code_or_id, code_or_id='id')
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by the ``sequence_code_or_id`` argument, which can be a code or an id (as controlled by the ``code_or_id`` argument. This method is deprecated.
  • get_next_char(self, number_next)
  • next_by_code(self, sequence_code)
    @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. :param dict context: context dictionary may contain a ``force_company`` key with the ID of the company to use instead of the user's current company for the sequence selection. A matching sequence for that specific company will get higher priority.
  • next_by_id(self)
    @api.multi
    Draw an interpolated string using the specified sequence.
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

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='Next Number'
  • sequence_id Many2one → ir.sequence
    ondelete='cascade' required=True string='Main Sequence' args: 'ir.sequence'
Public methods (3)
  • create(self, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (4)
  • col1 Many2one → ir.model.fields
    required=True string='Field' args: 'ir.model.fields'
  • server_id Many2one → ir.actions.server
    ondelete='cascade' string='Related Server Action' args: 'ir.actions.server'
  • type Selection
    change_default=True default='value' required=True args: [('value', 'Value'), ('equation', 'Python expression')], 'Evaluation Type'
  • value Text
    help='Expression containing a value specification. \nWhen Formula type is selected, this field may be a Python expression that can use the same values as for the condition field on the server action.\nIf Value type is selected, the value will be used directly without evaluation.' required=True
Public methods (1)
  • eval_value(self, eval_context=None)
    @api.multi

New fields (10)
  • comments Text
    index=True string='Translation comments'
  • lang Selection
    selection='_get_languages' string='Language'
  • module Char
    help='Module this term belongs to' index=True
  • name Char
    required=True string='Translated field'
  • res_id Integer
    index=True string='Record ID'
  • source Text
    compute='_compute_source' inverse='_inverse_source' search='_search_source' string='Source term'
  • src Text
    string='Internal Source'
  • state Selection
    default='to_translate' help='Automatically set to let administators find new terms that might need to be translated' string='Status' args: [('to_translate', 'To Translate'), ('inprogress', 'Translation in Progress'), ('translated', 'Translated')]
  • type Selection
    index=True string='Type' args: TRANSLATION_TYPE
  • value Text
    string='Translation Value'
Public methods (10)
  • check(self, mode)
    @api.multi
    Check access rights of operation ``mode`` on ``self`` for the current user. Raise an AccessError in case conditions are not met.
  • create(self, vals)
    @api.model
  • get_field_help(self, model_name)
    @api.model@tools.ormcache_context('model_name', keys=('lang'))
    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_string(self, model_name)
    @api.model@tools.ormcache_context('model_name', keys=('lang'))
    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}`
  • get_technical_translations(self, model_name)
    @api.model
    Find the translations for the fields of `model_name` Find the technical translations for the fields of the model, including string, tooltip and available selections. :return: action definition to open the list of available translations
  • insert_missing(self, field, records)
    @api.model
    Insert missing translations for `field` on `records`.
  • load_module_terms(self, modules, langs)
    @api.model_cr_context
    Load PO files of the given modules for the given languages.
  • translate_fields(self, model, id, field=None)
    @api.model
    Open a view for translating the field(s) of the record (model, id).
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (12)
  • action Reference
    selection=[('ir.actions.report.xml', 'ir.actions.report.xml'), ('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' string='Full Path'
  • groups_id 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_left Integer
    index=True
  • parent_right Integer
    index=True
  • sequence Integer
    default=10
  • web_icon Char
    string='Web Icon File'
  • web_icon_data Binary
    attachment=True compute='_compute_web_icon' store=True string='Web Icon Image'
Public methods (11)
  • copy(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
  • get_needaction_data(self)
    @api.multi
    Return for each menu entry in ``self``: - whether it uses the needaction mechanism (needaction_enabled) - the needaction counter of the related action, taking into account the action domain
  • get_user_roots(self)
    @api.model@api.returns('self')
    Return all root menu ids visible for the user. :return: the root menu ids :rtype: list(int)
  • load_menus(self, debug)
    @api.model@tools.ormcache_context('self._uid', 'debug', keys=('lang'))
    Loads all menu items (all applications and their sub-menus). :return: the menu root :rtype: dict('children': menu_nodes)
  • load_menus_root(self)
    @api.model@tools.ormcache_context('self._uid', keys=('lang'))
  • name_get(self)
    @api.multi
  • read_image(self, path)
  • search(self, args, offset=0, limit=None, order=None, count=False)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (20)
  • 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' inverse='_inverse_arch' nodrop=True string='View Architecture'
  • arch_base Text
    compute='_compute_arch_base' inverse='_inverse_arch_base' string='View Architecture'
  • arch_db Text
    oldname='arch' string='Arch Blob' translate=xml_translate
  • arch_fs Char
    string='Arch Filename'
  • create_date Datetime
    readonly=True
  • field_parent Char
    string='Child Field'
  • groups_id 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'
  • key Char
  • 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' store=True string='Model Data' args: 'ir.model.data'
  • model_ids One2many → ir.model.data
    auto_join=True domain=[('model', '=', 'ir.ui.view')] args: 'ir.model.data', 'res_id'
  • name Char
    required=True string='View Name'
  • priority Integer
    default=16 required=True string='Sequence'
  • type Selection
    string='View Type' args: [('tree', 'Tree'), ('form', 'Form'), ('graph', 'Graph'), ('pivot', 'Pivot'), ('calendar', 'Calendar'), ('diagram', 'Diagram'), ('gantt', 'Gantt'), ('kanban', 'Kanban'), ('search', 'Search'), ('qweb', 'QWeb')]
  • write_date Datetime
    readonly=True string='Last Modification Date'
  • xml_id Char
    compute='_compute_xml_id' help='ID of the view defined in xml file' string='External ID'
Public methods (26)
  • add_on_change(self, model_name, arch)
    Add attribute on_change="1" on fields that are dependencies of computed fields on the same view.
  • apply_inheritance_specs(self, source, specs_tree, inherit_id)
    @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 Elepect specs_tree: a modifying architecture in an inheriting view :param inherit_id: the database id of specs_arch :return: a modified source where the specs are applied :rtype: Element
  • apply_view_inheritance(self, source, source_id, model, root_id=None)
    @api.model
    Apply all the (directly and indirectly) inheriting views. :param source: a parent architecture to modify (with parent modifications already applied) :param source_id: the database view_id of the parent view :param model: the original model for which we create a view (not necessarily the same as the source's model); only the inheriting views with that specific model will be applied. :return: a modified source where all the modifying architecture are applied
  • clear_cache(self)
    Deprecated, use `clear_caches` instead.
  • create(self, values)
    @api.model
  • 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_inheriting_views_arch(self, view_id, model)
    @api.model
    Retrieves the architecture of views that inherit from the given view, from the sets of views that should currently be used in the system. During the module upgrade phase it may happen that a view is present in the database but the fields it relies on are not fully loaded yet. This method only considers views that belong to modules whose code is already loaded. Custom views defined directly in the database are loaded only after the module initialization phase is completely finished. :param int view_id: id of the view whose inheriting views should be retrieved :param str model: model identifier of the inheriting views. :rtype: list of tuples :return: [(view_arch,view_id), ...]
  • get_view_id(self, template)
    @api.model
    Return the view ID corresponding to ``template``, which may be a view ID or an XML ID. Note that this method may be overridden for other kinds of template values.
  • get_view_xmlid(self)
    @api.multi@tools.ormcache('self.id')
  • graph_get(self, id, model, node_obj, conn_obj, src_node, des_node, label, scale)
    @api.model
  • inherit_branding(self, specs_tree, view_id, root_id)
  • 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
  • open_translations(self)
    @api.multi
    Open a view for editing the translations of field 'arch_db'.
  • postprocess(self, model, node, view_id, in_tree_view, model_fields)
    @api.model
    Return the description of the fields in the node. In a normal call to this method, node is a complete view architecture but it is actually possible to give some sub-node (this is used so that the method can call itself recursively). Originally, the field descriptions are drawn from the node itself. But there is now some code calling fields_get() in order to merge some of those information in the architecture.
  • postprocess_and_fields(self, model, node, view_id)
    @api.model
    Return an architecture and a description of all the fields. The field description combines the result of fields_get() and postprocess(). :param node: the architecture as as an etree :return: a tuple (arch, fields) where arch is the given node as a string and fields is the description of all the fields.
  • raise_view_error(self, message, view_id)
    @api.model
  • read_combined(self, fields=None)
    @api.multi
    Utility function to get a view combined with its inherited views. * Gets the top of the view tree if a sub-view is requested * Applies all inherited archs on the root view * Returns the view with all requested fields .. note:: ``arch`` is always added to the fields list even if not requested (similar to ``id``)
  • read_template(self, xml_id)
    @api.model
  • render(self, values=None, engine='ir.qweb')
    @api.multi
  • render_template(self, template, values=None, engine='ir.qweb')
    @api.model
  • toggle(self)
    @api.multi
    Switches between enabled and disabled statuses
  • translate_qweb(self, arch, lang)
    @api.multi
  • unlink(self)
  • write(self, vals)
    @api.multi

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 (2)
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model

New fields (11)
  • action_id Many2one → ir.actions.actions
    help='Action bound to this entry - helper field for binding an action, will automatically set the correct reference' string='Action (change only)' args: 'ir.actions.actions'
  • company_id Many2one → res.company
    help='If set, action binding only applies for this company' index=True ondelete='cascade' string='Company' args: 'res.company'
  • key Selection
    default='action' help='- Action: an action attached to one slot of the given model\n- Default: a default value for a model field' index=True required=True string='Type' args: [('action', 'Action'), ('default', 'Default')]
  • key2 Char
    default='tree_but_open' help='For actions, one of the possible action slots: \n - client_action_multi\n - client_print_multi\n - client_action_relate\n - tree_but_open\nFor defaults, an optional condition' index=True string='Qualifier'
  • model Char
    help='Model to which this entry applies' index=True required=True string='Model Name'
  • model_id Many2one → ir.model
    help='Model to which this entry applies - helper field for setting a model, will automatically set the correct model name' string='Model (change only)' args: 'ir.model'
  • name Char
    required=True
  • res_id Integer
    help='Database identifier of the record to which this applies. 0 = for all records' index=True string='Record ID'
  • user_id Many2one → res.users
    help='If set, action binding only applies for this user.' index=True ondelete='cascade' string='User' args: 'res.users'
  • value Text
    help='Default value (pickled) or reference to an action'
  • value_unpickle Text
    compute='_value_unpickle' inverse='_value_pickle' string='Default value or action reference'
Public methods (11)
  • create(self, vals)
    @api.model
  • get_actions(self, action_slot, model, res_id=False)
    @api.model@tools.ormcache_context('self._uid', 'action_slot', 'model', 'res_id', keys=('lang'))
    Retrieves the list of actions bound to the given model's action slot. See the class description for more details about the various action slots: :class:`~.ir_values`. :param string action_slot: the action slot to which the actions should be bound to - one of ``client_action_multi``, ``client_print_multi``, ``client_action_relate``, ``tree_but_open``. :param string model: model name :param int res_id: optional record id - will bind the action only to a specific record of the model, not all records. :return: list of action tuples of the form ``(id, name, action_def)``, where ``id`` is the ID of the default entry, ``name`` is the action label, and ``action_def`` is a dict containing the action definition as obtained by calling :meth:`~odoo.models.Model.read` on the action record.
  • get_default(self, model, field_name, for_all_users=True, company_id=False, condition=False)
    @api.model
    Return the default value defined for model, field_name, users, company and condition. Return ``None`` if no such default exists.
  • get_defaults(self, model, condition=False)
    @api.model
    Returns any default values that are defined for the current model and user, (and match ``condition``, if specified), previously registered via :meth:`~.set_default`. Defaults are global to a model, not field-specific, but an optional ``condition`` can be provided to restrict matching default values to those that were defined for the same condition (usually based on another field's value). Default values also have priorities depending on whom they apply to: only the highest priority value will be returned for any field. See :meth:`~.set_default` for more details. :param string model: model name :param string condition: optional condition specification that can be used to restrict the applicability of the default values (e.g. based on another field's value). This is an opaque string as far as the API is concerned, but client stacks typically use single-field conditions in the form ``'key=stringified_value'``. (Currently, the condition is trimmed to 200 characters, so values that share the same first 200 characters always match) :return: list of default values tuples of the form ``(id, field_name, value)`` (``id`` is the ID of the default entry, usually irrelevant)
  • get_defaults_dict(self, model, condition=False)
    @api.model@tools.ormcache('self._uid', 'model', 'condition')
    Returns a dictionary mapping field names with their corresponding default value. This method simply improves the returned value of :meth:`~.get_defaults`.
  • onchange_action_id(self)
    @api.onchange('action_id')
  • onchange_object_id(self)
    @api.onchange('model_id')
  • set_action(self, name, action_slot, model, action, res_id=False)
    @api.model@api.returns('self', <expr>)
    Binds an the given action to the given model's action slot - for later retrieval via :meth:`~.get_actions`. Any existing binding of the same action to the same slot is first removed, allowing an update of the action's name. See the class description for more details about the various action slots: :class:`~ir_values`. :param string name: action label, usually displayed by UI client :param string action_slot: the action slot to which the action should be bound to - one of ``client_action_multi``, ``client_print_multi``, ``client_action_relate``, ``tree_but_open``. :param string model: model name :param string action: action reference, in the form ``'model,id'`` :param int res_id: optional record id - will bind the action only to a specific record of the model, not all records. :return: the newly created ir.values entry
  • set_default(self, model, field_name, value, for_all_users=True, company_id=False, condition=False)
    @api.model@api.returns('self', <expr>)
    Defines a default value for the given model and field_name. Any previous default for the same scope (model, field_name, value, for_all_users, company_id, condition) will be replaced and lost in the process. Defaults can be later retrieved via :meth:`~.get_defaults`, which will return the highest priority default for any given field. Defaults that are more specific have a higher priority, in the following order (highest to lowest): * specific to user and company * specific to user only * specific to company only * global to everyone :param string model: model name :param string field_name: field name to which the default applies :param value: the default field value to set :type value: any serializable Python value :param bool for_all_users: whether the default should apply to everybody or only the user calling the method :param int company_id: optional ID of the company to which the default should apply. If omitted, the default will be global. If True is passed, the current user's company will be used. :param string condition: optional condition specification that can be used to restrict the applicability of the default values (e.g. based on another field's value). This is an opaque string as far as the API is concerned, but client stacks typically use single-field conditions in the form ``'key=stringified_value'``. (Currently, the condition is trimmed to 200 characters, so values that share the same first 200 characters always match) :return: the newly created ir.values entry
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, docids, data=None)
    @api.model

New fields (12)
  • active Boolean
    default=True
  • bic Char
    help='Sometimes called BIC or Swift.' index=True args: 'Bank Identifier Code'
  • city Char
  • country Many2one → res.country
    args: 'res.country'
  • email Char
  • fax Char
  • name Char
    required=True
  • phone Char
  • state Many2one → res.country.state
    domain="[('country_id', '=', country)]" args: 'res.country.state', 'Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (2)
  • name_get(self)
    @api.multi@api.depends('name', 'bic')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model

New fields (32)
  • account_no Char
    string='Account No.'
  • bank_ids One2many → res.partner.bank
    help='Bank accounts related to this company' string='Bank Accounts' args: 'res.partner.bank', 'company_id'
  • child_ids One2many → res.company
    string='Child Companies' args: 'res.company', 'parent_id'
  • city Char
    compute='_compute_address' inverse='_inverse_city'
  • company_registry Char
  • country_id Many2one → res.country
    compute='_compute_address' inverse='_inverse_country' string='Country' args: 'res.country'
  • currency_id Many2one → res.currency
    default=<expr> required=True string='Currency' args: 'res.currency'
  • custom_footer Boolean
    help='Check this to define the report footer manually. Otherwise it will be filled in automatically.'
  • email Char
    related='partner_id.email' store=True
  • fax Char
    compute='_compute_address' inverse='_inverse_fax'
  • font Many2one → res.font
    default=<expr> domain=[('mode', 'in', ('Normal', 'Regular', 'all', 'Book'))] help='Set the font into the report header, it will be used as default font in the RML reports of the user company' string='Font' args: 'res.font'
  • logo Binary
    default=_get_logo related='partner_id.image'
  • logo_web Binary
    compute='_compute_logo_web' store=True
  • name Char
    related='partner_id.name' required=True store=True string='Company Name'
  • parent_id Many2one → res.company
    index=True string='Parent Company' args: 'res.company'
  • partner_id Many2one → res.partner
    required=True string='Partner' args: 'res.partner'
  • phone Char
    related='partner_id.phone' store=True
  • rml_footer Text
    help='Footer text displayed at the bottom of all reports.' string='Custom Report Footer' translate=True
  • rml_footer_readonly Text
    readonly=True related='rml_footer' string='Report Footer'
  • rml_header Text
    default=_get_header required=True
  • rml_header1 Char
    help='Appears by default on the top right corner of your printed documents (report header).' string='Company Tagline'
  • rml_header2 Text
    default=_header2 required=True string='RML Internal Header'
  • rml_header3 Text
    default=_header3 required=True string='RML Internal Header for Landscape Reports'
  • rml_paper_format Selection
    default='a4' oldname='paper_format' required=True string='Paper Format' args: [('a4', 'A4'), ('us_letter', 'US Letter')]
  • sequence Integer
    default=10 help='Used to order Companies in the company switcher'
  • state_id Many2one → res.country.state
    compute='_compute_address' inverse='_inverse_state' string='Fed. State' args: 'res.country.state'
  • street Char
    compute='_compute_address' inverse='_inverse_street'
  • street2 Char
    compute='_compute_address' inverse='_inverse_street2'
  • user_ids Many2many → res.users
    string='Accepted Users' args: 'res.users', 'res_company_users_rel', 'cid', 'user_id'
  • vat Char
    related='partner_id.vat' string='Tax ID'
  • website Char
    related='partner_id.website'
  • zip Char
    compute='_compute_address' inverse='_inverse_zip'
Public methods (8)
  • act_discover_fonts(self)
    @api.multi
  • cache_restart(self)
  • copy(self, default=None)
    @api.multi
    Duplicating a company without specifying a partner duplicate the partner
  • create(self, vals)
    @api.model
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • on_change_country(self, country_id)
    @api.multi
  • onchange_footer(self)
    @api.onchange('custom_footer', 'phone', 'fax', 'email', 'website', 'vat', 'company_registry')
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (7)
  • action_cancel(self)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    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)
    @api.multi
    Returns the next todo action to execute (using the default sort order)
  • start(self)
    @api.multi

New fields (0)

No new fields.

Public methods (5)
  • already_installed(self)
    For each module, check if it's already installed and if it is return its name :returns: a list of the already installed modules in this installer :rtype: [str]
  • default_get(self, fields_list)
    @api.model
    If an addon is already installed, check it by default
  • execute(self)
    @api.multi
  • fields_get(self, fields=None, attributes=None)
    @api.model
    If an addon is already installed, set it to readonly as res.config.installer doesn't handle uninstallations of already installed addons
  • modules_to_install(self)
    selects all modules to install: * checked boolean fields * return values of hook methods. Hook methods are of the form ``_if_%(addon_name)s``, and are called if the corresponding addon is marked for installation. They take the arguments cr, uid, ids and context, and return an iterable of addon names * additionals, additionals are setup through the ``_install_if`` class variable. ``_install_if`` is a dict of {iterable:iterable} where key and value are iterables of addon names. If all the addons in the key are selected for installation (warning: addons added through hooks don't count), then the addons in the value are added to the set of modules to install * not already installed

New fields (0)

No new fields.

Public methods (10)
  • cancel(self)
    @api.multi
  • copy(self, values)
    @api.multi
  • default_get(self, fields)
    @api.model
  • execute(self)
    @api.multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • get_config_warning(self, msg)
    @api.model_cr_context
    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: --------------- from odoo.addons.base.res.res_config import get_warning_config raise get_warning_config(cr, _("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."), context=context) 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 string: human readable name of the field (e.g.: "Create leads from incoming mails")
  • 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 tuple: - t[0]: string: full path to the menuitem (e.g.: "Settings/Configuration/Sales") - t[1]: int or long: id of the menuitem's action
  • name_get(self)
    @api.multi
    Override name_get method to return an appropriate configuration wizard name, and not the generated name.
  • onchange_module(self, field_value, module_name)
    @api.multi

New fields (8)
  • address_format Text
    default='%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s' help="You can state here the usual format to use for the addresses belonging to this country.\n\nYou can use the python-style string patern with all the field of the address (for example, use '%(street)s' to display the field 'street') plus\n \n%(state_name)s: the name of the state\n \n%(state_code)s: the code of the state\n \n%(country_name)s: the name of the country\n \n%(country_code)s: the code of the country"
  • code Char
    help='The ISO country code in two chars. \nYou can use this field for quick search.' size=2 string='Country Code'
  • country_group_ids Many2many → res.country.group
    string='Country Groups' args: 'res.country.group', 'res_country_res_country_group_rel', 'res_country_id', 'res_country_group_id'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • image Binary
    attachment=True
  • name Char
    help='The full name of the country.' required=True string='Country Name' translate=True
  • phone_code Integer
    string='Country Calling Code'
  • state_ids One2many → res.country.state
    string='States' args: 'res.country.state', 'country_id'
Public methods (3)
  • create(self, vals)
    @api.model
  • get_address_fields(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • 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
Public methods (0)

No public methods.

New fields (3)
  • code Char
    help='The state code.' required=True string='State Code'
  • country_id Many2one → res.country
    required=True string='Country' args: 'res.country'
  • name Char
    help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton' required=True string='State Name'
Public methods (0)

No public methods.

New fields (9)
  • active Boolean
    default=True
  • date Date
    compute='_compute_date'
  • decimal_places Integer
    compute='_compute_decimal_places'
  • name Char
    help='Currency Code (ISO 4217)' required=True size=3 string='Currency'
  • position Selection
    default='after' help='Determines where the currency symbol should be placed after or before the amount.' string='Symbol Position' args: [('after', 'After Amount'), ('before', 'Before Amount')]
  • rate Float
    compute='_compute_current_rate' digits=(12, 6) help='The rate of the currency to the currency of rate 1.' string='Current Rate'
  • rate_ids One2many → res.currency.rate
    string='Rates' args: 'res.currency.rate', 'currency_id'
  • rounding Float
    default=0.01 digits=(12, 6) string='Rounding Factor'
  • symbol Char
    help='Currency sign, to be used when printing amounts.' required=True
Public methods (7)
  • compare_amounts(self, amount1, amount2)
    @api.multi
    Compare ``amount1`` and ``amount2`` after rounding them according to the given currency's precision.. An amount is considered lower/greater than another amount if their rounded value is different. This is not the same as having a non-zero difference! For example 1.432 and 1.431 are equal at 2 digits precision, so this method would return 0. However 0.006 and 0.002 are considered different (returns 1) because they respectively round to 0.01 and 0.0, even though 0.006-0.002 = 0.004 which would be considered zero at 2 digits precision. :param float amount1: first amount to compare :param float amount2: second amount to compare :return: (resp.) -1, 0 or 1, if ``amount1`` is (resp.) lower than, equal to, or greater than ``amount2``, according to ``currency``'s rounding. With the new API, call it like: ``currency.compare_amounts(amount1, amount2)``.
  • compute(self, from_amount, to_currency, round=True)
    @api.multi
    Convert `from_amount` from currency `self` to `to_currency`.
  • get_format_currencies_js_function(self)
    @api.model
    Returns a string that can be used to instanciate a javascript function that formats numbers as currencies. That function expects the number as first parameter and the currency id as second parameter. If the currency id parameter is false or undefined, the company currency is used.
  • is_zero(self, amount)
    @api.multi
    Returns true if ``amount`` is small enough to be treated as zero according to current currency's rounding rules. Warning: ``is_zero(amount1-amount2)`` is not always equivalent to ``compare_amounts(amount1,amount2) == 0``, as the former will round after computing the difference, while the latter will round before, giving different results for e.g. 0.006 and 0.002 at 2 digits precision. :param float amount: amount to compare with currency's zero With the new API, call it like: ``currency.is_zero(amount)``.
  • name_get(self)
    @api.multi
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • round(self, amount)
    @api.multi
    Return ``amount`` rounded according to ``self``'s rounding rules. :param float amount: the amount to round :return: rounded float

New fields (4)
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    readonly=True string='Currency' args: 'res.currency'
  • name Datetime
    default=<expr> index=True required=True string='Date'
  • rate Float
    default=1.0 digits=(12, 6) help='The rate of the currency to the currency of rate 1'
Public methods (1)
  • name_search(self, name, args=None, operator='ilike', limit=80)
    @api.model

New fields (11)
  • active Boolean
  • code Char
    help='This field is used to set/get locales for user' required=True string='Locale Code'
  • date_format Char
    default=DEFAULT_DATE_FORMAT required=True string='Date Format'
  • decimal_point Char
    default='.' required=True string='Decimal Separator'
  • direction Selection
    default='ltr' required=True args: [('ltr', 'Left-to-Right'), ('rtl', 'Right-to-Left')]
  • grouping Char
    default='[]' help="The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case." required=True string='Separator Format'
  • iso_code Char
    help='This ISO code is the name of po files to use for translations' string='ISO code'
  • name Char
    required=True
  • thousands_sep Char
    default=',' string='Thousands Separator'
  • time_format Char
    default=DEFAULT_TIME_FORMAT required=True string='Time Format'
  • translatable Boolean
Public methods (8)
  • create(self, vals)
    @api.model
  • format(self, percent, value, grouping=False, monetary=False)
    @api.multi
    Format() will return the language-specific output for float values
  • get_available(self)
    @api.model@tools.ormcache()
    Return the available languages as a list of (code, name) sorted by name.
  • get_installed(self)
    @api.model@tools.ormcache()
    Return the installed languages as a list of (code, name) sorted by name.
  • install_lang(self)
    @api.model
    This method is called from odoo/addons/base/base_data.xml to load some language and set it as the default for every partners. The language is set via tools.config by the RPC 'create' method on the 'db' object. This is a fragile solution and something else should be found.
  • load_lang(self, lang, lang_name=None)
    @api.model
    Create the given language if necessary, and make it active.
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (50)
  • active Boolean
    default=True
  • bank_ids One2many → res.partner.bank
    string='Banks' args: 'res.partner.bank', 'partner_id'
  • barcode Char
    oldname='ean13'
  • category_id Many2many → res.partner.category
    column1='partner_id' column2='category_id' default=_default_category string='Tags' args: 'res.partner.category'
  • child_ids One2many → res.partner
    domain=[('active', '=', True)] string='Contacts' args: 'res.partner', 'parent_id'
  • city Char
  • color Integer
    default=0 string='Color Index'
  • comment Text
    string='Notes'
  • commercial_company_name Char
    compute='_compute_commercial_company_name' store=True args: 'Company Name Entity'
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner' index=True store=True string='Commercial Entity' args: 'res.partner'
  • company_id Many2one → res.company
    default=_default_company index=True args: 'res.company', 'Company'
  • company_name Char
    args: 'Company Name'
  • company_type Selection
    compute='_compute_company_type' inverse='_write_company_type' selection=[('person', 'Individual'), ('company', 'Company')] string='Company Type'
  • contact_address Char
    compute='_compute_contact_address' string='Complete Address'
  • country_id Many2one → res.country
    ondelete='restrict' string='Country' args: 'res.country'
  • credit_limit Float
    string='Credit Limit'
  • customer Boolean
    default=True help='Check this box if this contact is a customer.' string='Is a Customer'
  • date Date
    index=True
  • display_name Char
    compute='_compute_display_name' index=True store=True
  • 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.'
  • fax Char
  • function Char
    string='Job Position'
  • image Binary
    attachment=True help='This field holds the image used as avatar for this contact, limited to 1024x1024px' args: 'Image'
  • image_medium Binary
    attachment=True help='Medium-sized image of this contact. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' args: 'Medium-sized image'
  • image_small Binary
    attachment=True help='Small-sized image of this contact. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' args: 'Small-sized image'
  • is_company Boolean
    default=False help='Check if the contact is a company, otherwise it is a person' string='Is a Company'
  • lang Selection
    default=<expr> help='If the selected language is loaded in the system, all documents related to this contact will be printed in this language. If not, it will be English.' string='Language' args: _lang_get
  • mobile Char
  • name Char
    index=True
  • parent_id Many2one → res.partner
    index=True string='Related Company' args: 'res.partner'
  • parent_name Char
    readonly=True related='parent_id.name' string='Parent name'
  • partner_share Boolean
    compute='_compute_partner_share' help='Either customer (no 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='Internal Reference'
  • self Many2one
    comodel_name=_name compute='_compute_get_ids'
  • state_id Many2one → res.country.state
    ondelete='restrict' string='State' args: 'res.country.state'
  • street Char
  • street2 Char
  • supplier Boolean
    help="Check this box if this contact is a vendor. If it's not checked, purchase people will not see it when encoding a purchase order." string='Is a Vendor'
  • title Many2one → res.partner.title
    args: 'res.partner.title'
  • type Selection
    default='contact' help='Used to select automatically the right address according to the context in sales and purchases documents.' string='Address Type' args: [('contact', 'Contact'), ('invoice', 'Invoice address'), ('delivery', 'Shipping address'), ('other', 'Other address'), ('private', 'Private Address')]
  • tz Selection
    default=<expr> help="The partner's timezone, used to output proper date and time values inside printed reports. It is important to set a value for this field. You should use the same timezone that is otherwise used to pick and render date and time values: your computer's timezone." string='Timezone' args: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
  • user_id Many2one → res.users
    help='The internal user that is in charge of communicating with this contact if any.' string='Salesperson' args: 'res.users'
  • user_ids One2many → res.users
    auto_join=True string='Users' args: 'res.users', 'partner_id'
  • vat Char
    help='Tax Identification Number. Fill it if the company is subjected to taxes. Used by the some of the legal statements.' string='TIN'
  • website Char
    help='Website of Partner or Company'
  • zip Char
    change_default=True
Public methods (18)
  • address_get(self, adr_pref=None)
    @api.multi
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • create_company(self)
    @api.multi
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
  • find_or_create(self, email)
    @api.model
    Find a partner with the given ``email`` or use :py:method:`~.name_create` to create one :param str email: email-like string, which should contain at least one email, e.g. ``"Raoul Grosbedon <r.g@grosbedon.fr>"``
  • main_partner(self)
    @api.model@api.returns('self')
    Return the main partner
  • 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.
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
  • onchange_company_type(self)
    @api.onchange('company_type')
  • onchange_email(self)
    @api.onchange('email')
  • onchange_parent_id(self)
    @api.onchange('parent_id')
  • open_commercial_entity(self)
    @api.multi
    Utility method used to add an "Open Company" button in partner views
  • open_parent(self)
    @api.multi
    Utility method used to add an "Open Parent" button in partner views
  • update_address(self, vals)
    @api.multi
  • view_header_get(self, view_id, view_type)
    @api.model
  • write(self, vals)
    @api.multi

New fields (10)
  • acc_number Char
    required=True args: 'Account Number'
  • acc_type Char
    compute='_compute_acc_type' help='Bank account type, inferred from account number'
  • bank_bic Char
    related='bank_id.bic'
  • bank_id Many2one → res.bank
    string='Bank' args: 'res.bank'
  • bank_name Char
    related='bank_id.name'
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • partner_id Many2one → res.partner
    domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' args: 'res.partner', 'Account Holder'
  • sanitized_acc_number Char
    compute='_compute_sanitized_acc_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
Public methods (1)
  • search(self, args, offset=0, limit=None, order=None, count=False)
    @api.model

New fields (8)
  • active Boolean
    default=True help='The active field allows you to hide the category without removing it.'
  • child_ids One2many → res.partner.category
    string='Child Tags' args: 'res.partner.category', 'parent_id'
  • color Integer
    string='Color Index'
  • name Char
    required=True string='Tag Name' translate=True
  • parent_id Many2one → res.partner.category
    index=True ondelete='cascade' string='Parent Category' args: 'res.partner.category'
  • parent_left Integer
    index=True string='Left parent'
  • parent_right Integer
    index=True string='Right parent'
  • partner_ids Many2many → res.partner
    column1='category_id' column2='partner_id' string='Partners' args: 'res.partner'
Public methods (2)
  • name_get(self)
    @api.multi
    Return the categories' display name, including their direct parent by default. If ``context['partner_category_display']`` is ``'short'``, the short version of the category name (without the direct parent) is used. The default is the long version.
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model

New fields (2)
  • name Char
    required=True string='Title' translate=True
  • shortcut Char
    string='Abbreviation' translate=True
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True translate=True
  • object Char
    required=True
  • priority Integer
    default=5
Public methods (0)

No public methods.

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)
    @api.multi

New fields (4)
  • activities One2many → workflow.activity
    string='Activities' args: 'workflow.activity', 'wkf_id'
  • name Char
    required=True args: 'Name'
  • on_create Boolean
    default=True index=True args: 'On Create'
  • osv Char
    index=True required=True args: 'Resource Object'
Public methods (4)
  • copy(self, values)
    @api.multi
  • create(self, vals)
    @api.model
  • get_active_workitems(self, res_model, res_id)
    @api.model
  • write(self, vals)
    @api.multi

New fields (13)
  • action Text
    args: 'Python Action'
  • action_id Many2one → ir.actions.server
    ondelete='set null' string='Server Action' args: 'ir.actions.server'
  • flow_start Boolean
    args: 'Flow Start'
  • flow_stop Boolean
    args: 'Flow Stop'
  • in_transitions One2many → workflow.transition
    string='Incoming Transitions' args: 'workflow.transition', 'act_to'
  • join_mode Selection
    default='XOR' required=True size=3 string='Join Mode' args: [('XOR', 'Xor'), ('AND', 'And')]
  • kind Selection
    default='dummy' required=True string='Kind' args: [('dummy', 'Dummy'), ('function', 'Function'), ('subflow', 'Subflow'), ('stopall', 'Stop All')]
  • name Char
    required=True args: 'Name'
  • out_transitions One2many → workflow.transition
    string='Outgoing Transitions' args: 'workflow.transition', 'act_from'
  • signal_send Char
    args: 'Signal (subflow.*)'
  • split_mode Selection
    default='XOR' required=True size=3 string='Split Mode' args: [('XOR', 'Xor'), ('OR', 'Or'), ('AND', 'And')]
  • subflow_id Many2one → workflow
    string='Subflow' args: 'workflow'
  • wkf_id Many2one → workflow
    index=True ondelete='cascade' required=True string='Workflow' args: 'workflow'
Public methods (1)
  • unlink(self)
    @api.multi

New fields (6)
  • res_id Integer
    args: 'Resource ID'
  • res_type Char
    args: 'Resource Object'
  • state Char
    args: 'Status'
  • transition_ids Many2many → workflow.transition
    args: 'workflow.transition', 'wkf_witm_trans', 'inst_id', 'trans_id'
  • uid Integer
    args: 'User'
  • wkf_id Many2one → workflow
    index=True ondelete='cascade' string='Workflow' args: 'workflow'
Public methods (0)

No public methods.

New fields (9)
  • act_from Many2one → workflow.activity
    help='Source activity. When this activity is over, the condition is tested to determine if we can start the ACT_TO activity.' index=True ondelete='cascade' required=True string='Source Activity' args: 'workflow.activity'
  • act_to Many2one → workflow.activity
    help='The destination activity.' index=True ondelete='cascade' required=True string='Destination Activity' args: 'workflow.activity'
  • condition Char
    default='True' help='Expression to be satisfied if we want the transition done.' required=True args: 'Condition'
  • group_id Many2one → res.groups
    help='The group that a user must have to be authorized to validate this transition.' string='Group Required' args: 'res.groups'
  • sequence Integer
    default=10 args: 'Sequence'
  • signal Char
    help='When the operation of transition comes from a button pressed in the client form, signal tests the name of the pressed button. If signal is NULL, no button is necessary to validate this transition.' args: 'Signal (Button Name)'
  • trigger_expr_id Char
    args: 'Trigger Expression'
  • trigger_model Char
    args: 'Trigger Object'
  • wkf_id Many2one → workflow
    related='act_from.wkf_id' string='Workflow' args: 'workflow'
Public methods (2)
  • name_get(self)
    @api.multi
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model

New fields (4)
  • instance_id Many2one → workflow.instance
    ondelete='cascade' string='Destination Instance' args: 'workflow.instance'
  • model Char
    args: 'Object'
  • res_id Integer
    size=128 args: 'Resource ID'
  • workitem_id Many2one → workflow.workitem
    ondelete='cascade' required=True string='Workitem' args: 'workflow.workitem'
Public methods (0)

No public methods.

New fields (5)
  • act_id Many2one → workflow.activity
    index=True ondelete='cascade' required=True string='Activity' args: 'workflow.activity'
  • inst_id Many2one → workflow.instance
    index=True ondelete='cascade' required=True string='Instance' args: 'workflow.instance'
  • state Char
    index=True args: 'Status'
  • subflow_id Many2one → workflow.instance
    index=True ondelete='set null' string='Subflow' args: 'workflow.instance'
  • wkf_id Many2one → workflow
    related='act_id.wkf_id' string='Workflow' args: 'workflow'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Fabien Meghazi, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Cedric Snauwaert, Simon Lejeune, Frédéric van der Essen, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, xmo-odoo, Samus CTO, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Damien Bouvy, pvy, Arthur Maniet, Yannick Tivisse, qsm-odoo, Martin Geubelle, Nicolas Seinlet, Pierre Masereel, odoo-tac, Toufik Benjaa, Quentin De Paoli, Olivier Laurent, Tanguy Charlier, DVE, fwi-odoo, app
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:31
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of OpenERP, needed for all installation.
===================================================

Code Analysis

Views touched (158)
XML IDNameModelTypeStatus
act_report_xml_search_view ir.actions.report.xml.search ir.actions.report.xml search New
act_report_xml_view ir.actions.report.xml ir.actions.report.xml form New
act_report_xml_view_tree ir.actions.report.xml.tree ir.actions.report.xml tree 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.tree ir.actions.actions tree New
change_password_wizard_user_tree_view Change Password Users change.password.user tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree New
ir_cron_view ir.cron form New
ir_cron_view_calendar ir.cron calendar New
ir_cron_view_search ir.cron search New
ir_cron_view_tree ir.cron tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Apps Kanban ir.module.module kanban New
report_irmodeloverview report_irmodeloverview ir.ui.view qweb New
report_irmodulereference report_irmodulereference ir.ui.view qweb New
res_config_installer Inheritable view for installer objects res.config.installer form New
res_config_view_base res.config.view.base res.config form 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.tree res.lang tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_partner_view_form_private res.partner.view.form.private res.partner form New
res_request_link-view res.request.link.form res.request.link form New
res_request_link_search_view res.request.link.search res.request.link search New
res_request_link_tree-view res.request.link.form res.request.link tree New
sequence_view ir.sequence form New
sequence_view_tree ir.sequence tree New
user_groups_view res.users.groups res.users field Inherits view_users_form
values_view_form_action ir.values.form.action ir.values form New
values_view_form_defaults ir.values.form.defaults ir.values form New
values_view_search_action ir.values.search.action ir.values search New
values_view_tree_action ir.values.tree.action ir.values tree New
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree 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_configuration_form Module Configuration base.module.configuration 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_company_form res.company.form res.company form New
view_company_tree res.company.tree res.company tree 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.tree res.country.group tree New
view_country_state_form res.country.state.form res.country.state form New
view_country_state_tree res.country.state.tree res.country.state tree New
view_country_tree res.country.tree res.country tree New
view_currency_form res.currency.form res.currency form 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.tree res.currency.rate tree New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_groups_form res.groups.form res.groups form 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 tree New
view_ir_config_search ir.config_parameter search New
view_ir_mail_server_search ir.mail_server search New
view_menu ir.ui.menu.tree ir.ui.menu tree New
view_model_constraint_form ir.model.constraint form New
view_model_constraint_list ir.model.constraint tree New
view_model_data_form ir.model.data form New
view_model_data_list ir.model.data tree 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_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree 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.tree res.partner.bank tree New
view_partner_category_form Contact Tags res.partner.category form New
view_partner_category_list Contact Tags res.partner.category tree 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_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_partner_filter res.partner.select res.partner search New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree New
view_translation_form ir.translation form New
view_translation_search ir.translation search New
view_translation_tree ir.translation tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
view_workflow_activity_form workflow.activity.form workflow.activity form New
view_workflow_activity_search workflow.activity.search workflow.activity search New
view_workflow_activity_tree workflow.activity.tree workflow.activity tree New
view_workflow_diagram workflow.diagram workflow diagram New
view_workflow_form workflow.form workflow form New
view_workflow_instance_form workflow.instance.form workflow.instance form New
view_workflow_instance_search workflow.instance.search workflow.instance search New
view_workflow_instance_tree workflow.instance.tree workflow.instance tree New
view_workflow_search workflow.search workflow search New
view_workflow_transition_form workflow.transition.form workflow.transition form New
view_workflow_transition_search workflow.transition.search workflow.transition search New
view_workflow_transition_tree workflow.transition.tree workflow.transition tree New
view_workflow_tree workflow.tree workflow tree New
view_workflow_workitem_form workflow.workitem.form workflow.workitem form New
view_workflow_workitem_search workflow.workitem.search workflow.workitem search New
view_workflow_workitem_tree workflow.workitem.tree workflow.workitem tree New
wizard_lang_export Export Translations base.language.export form New
wizard_update_translations Synchronize Terms base.update.translations form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (17)

New fields (0)

No new fields.

Public methods (0)

No public methods.

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)
    @api.multi
  • update_module(self)
    @api.one

New fields (0)

No new fields.

Public methods (1)
  • change_password_button(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • change_password_button(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • power_on(self, cr, uid, *args, **kwargs)

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 (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (13)
  • active Boolean
    default=True
  • code Char
    args: 'Sequence Code'
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • date_range_ids One2many → ir.sequence.date_range
    args: 'ir.sequence.date_range', 'sequence_id', 'Subsequences'
  • implementation Selection
    default='standard' help="Two sequence object implementations are offered: Standard and 'No gap'. The later is slower than the former but forbids any gap in the sequence (while they are possible in the former)." required=True args: [('standard', 'Standard'), ('no_gap', 'No gap')], 'Implementation'
  • name Char
    required=True
  • number_increment Integer
    default=1 help='The next number of the sequence will be incremented by this number' required=True args: 'Step'
  • number_next Integer
    default=1 help='Next number of this sequence' required=True args: 'Next Number'
  • number_next_actual Integer
    compute='_get_number_next_actual' default=1 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' required=True string='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 args: 'Sequence Size'
  • prefix Char
    help='Prefix value of the record for the sequence'
  • suffix Char
    help='Suffix value of the record for the sequence'
  • use_date_range Boolean
    args: 'Use subsequences per date_range'
Public methods (9)
  • create(self, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • get(self, code)
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by its code. This method is deprecated.
  • get_id(self, sequence_code_or_id, code_or_id='id')
    @api.model
    Draw an interpolated string using the specified sequence. The sequence to use is specified by the ``sequence_code_or_id`` argument, which can be a code or an id (as controlled by the ``code_or_id`` argument. This method is deprecated.
  • get_next_char(self, number_next)
  • init(self, cr)
  • next_by_code(self, sequence_code)
    @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. :param dict context: context dictionary may contain a ``force_company`` key with the ID of the company to use instead of the user's current company for the sequence selection. A matching sequence for that specific company will get higher priority.
  • next_by_id(self)
    @api.multi
    Draw an interpolated string using the specified sequence.
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (5)
  • date_from Date
    required=True args: 'From'
  • date_to Date
    required=True args: 'To'
  • number_next Integer
    default=1 help='Next number of this sequence' required=True args: 'Next Number'
  • number_next_actual Integer
    compute='_get_number_next_actual' default=1 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' required=True string='Next Number'
  • sequence_id Many2one → ir.sequence
    ondelete='cascade' required=True args: 'ir.sequence', 'Main Sequence'
Public methods (3)
  • create(self, values)
    @api.model
    Create a sequence, in implementation == standard a fast gaps-allowed PostgreSQL sequence is used.
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • render_html(self, data=None)
    @api.multi

New fields (12)
  • active Boolean
    default=True
  • bic Char
    help='Sometimes called BIC or Swift.' index=True args: 'Bank Identifier Code'
  • city Char
  • country Many2one → res.country
    args: 'res.country'
  • email Char
  • fax Char
  • name Char
    required=True
  • phone Char
  • state Many2one → res.country.state
    domain="[('country_id', '=', country)]" args: 'res.country.state', 'Fed. State'
  • street Char
  • street2 Char
  • zip Char
Public methods (2)
  • name_get(self)
    @api.multi@api.depends('name', 'bic')
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model

New fields (0)

No new fields.

Public methods (18)
  • address_get(self, cr, uid, ids, adr_pref=None, context=None)
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy(self, default=None)
    @api.one
  • create(self, vals)
    @api.model
  • email_send(self, cr, uid, ids, email_from, subject, body, on_error='')
  • fields_view_get(self, cr, user, view_id=None, view_type='form', context=None, toolbar=False, submenu=False)
  • find_or_create(self, cr, uid, email, context=None)
    Find a partner with the given ``email`` or use :py:method:`~.name_create` to create one :param str email: email-like string, which should contain at least one email, e.g. ``"Raoul Grosbedon <r.g@grosbedon.fr>"``
  • main_partner(self)
    @api.model@api.returns('self')
    Return the main partner
  • name_create(self, cr, uid, name, context=None)
    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.
  • name_get(self, cr, uid, ids, context=None)
  • name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100)
  • on_change_company_type(self, company_type)
    @api.multi
  • onchange_parent_id(self, cr, uid, ids, parent_id, context=None)
  • onchange_state(self, state_id)
    @api.multi
  • open_commercial_entity(self, cr, uid, ids, context=None)
    Utility method used to add an "Open Company" button in partner views
  • open_parent(self, cr, uid, ids, context=None)
    Utility method used to add an "Open Parent" button in partner views
  • update_address(self, cr, uid, ids, vals, context=None)
  • view_header_get(self, cr, uid, view_id, view_type, context)
  • write(self, vals)
    @api.multi

New fields (10)
  • acc_number Char
    required=True args: 'Account Number'
  • acc_type Char
    compute='_compute_acc_type' help='Bank account type, inferred from account number'
  • bank_bic Char
    related='bank_id.bic'
  • bank_id Many2one → res.bank
    string='Bank' args: 'res.bank'
  • bank_name Char
    related='bank_id.name'
  • company_id Many2one → res.company
    default=<expr> ondelete='cascade' args: 'res.company', 'Company'
  • currency_id Many2one → res.currency
    string='Currency' args: 'res.currency'
  • partner_id Many2one → res.partner
    domain=['|', ('is_company', '=', True), ('parent_id', '=', False)] index=True ondelete='cascade' args: 'res.partner', 'Account Holder'
  • sanitized_acc_number Char
    compute='_compute_sanitized_acc_number' readonly=True store=True string='Sanitized Account Number'
  • sequence Integer
Public methods (1)
  • search(self, args, offset=0, limit=None, order=None, count=False)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • name_get(self, cr, uid, ids, context=None)
    Return the categories' display name, including their direct parent by default. If ``context['partner_category_display']`` is ``'short'``, the short version of the category name (without the direct parent) is used. The default is the long version.
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Atul Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Christophe Matthieu, Antonin Bourguignon, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Tejas Tank, Thibault Delavallée, Vo Minh Thu, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Denis Ledoux, Fabien Meghazi, niv-openerp, ggh-openerp, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Anael Closson, Cedric Snauwaert, Simon Lejeune, Frédéric van der Essen, Vishmita, Vijaykumar Baladaniya, Nicolas Martinelli, Yannick Vaucher, Nhomar Hernandez, Chirag Dodiya (OpenERP Trainee), Vidhin Mehta (OpenERP), Kersten Jeremy, Dharti Ratani (Open ERP), Alexandre Fayolle, Amit Bhavsar (Open ERP), Paramjit Singh Sahota, Nicolas Lempereur, Jérome Maes, Hiral Patel (OpenERP), Vidhin Mehta, Jagdish Panchal, Julien Legros, xmo-odoo, Nimesh Contractor (OpenERP), Richard Mathot, qdp-odoo, Géry Debongnie, Darshan Kalola (OpenERP Trainee), jke-openerp, Aaron Bohy, bth-openerp, Vishmita Jadeja (openerp), Bharat R. Devnani (OpenERP), Pedro M. Baeza, Richard Mathot (OpenERP), ged-odoo, chm@openerp.com, openerp-sle, Jeremy Kersten, Gery Debongnie, Randhir Mayatra rma-openerp, sgo@tinyerp.com, Darshan Kalola (OpenERP), Darshan Kalola, Jitendra Prajapati (OpenERP), Damien Bouvy, Yogesh Parekh (OpenERP), Chirag Dodiya (OpenERP), Rakesh Sindhav (OpenERP), Pooja Zankhariya (OpenERP), Mantavya Gajjar, Parth Gajjar (Open ERP), Jignesh Rathod (OpenERP), Dharmraj Jhala (OpenERP), Jojo le bricolo, tpa-odoo, Commandant Custo, Arthur Maniet, sle-odoo, qsm-odoo, sve-odoo, Dharmraj Zala (OpenERP Trainee), Rohan Nayani (Open ERP), Laurent Mignon (Acsone), Nicolas Seinlet, kevin wang, Christophe Combelles, andreparames
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of OpenERP, needed for all installation.
===================================================

Code Analysis

Views touched (160)
XML IDNameModelTypeStatus
act_report_xml_search_view ir.actions.report.xml.search ir.actions.report.xml search New
act_report_xml_view ir.actions.report.xml ir.actions.report.xml form New
act_report_xml_view_tree ir.actions.report.xml.tree ir.actions.report.xml tree 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.tree ir.actions.actions tree New
change_password_wizard_user_tree_view Change Password Users change.password.user tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
contact contact ir.ui.view qweb New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree New
ir_cron_view ir.cron form New
ir_cron_view_calendar ir.cron calendar New
ir_cron_view_search ir.cron search New
ir_cron_view_tree ir.cron tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_logging_form_view ir.logging form New
ir_logging_search_view ir.logging search New
ir_logging_tree_view ir.logging tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Modules Kanban ir.module.module kanban New
res_config_installer Inheritable view for installer objects res.config.installer form New
res_config_view_base res.config.view.base res.config form 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.tree res.lang tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_request_link-view res.request.link.form res.request.link form New
res_request_link_search_view res.request.link.search res.request.link search New
res_request_link_tree-view res.request.link.form res.request.link tree New
sequence_type_form_view ir.sequence.type form New
sequence_type_tree_view ir.sequence.type tree New
sequence_view ir.sequence form New
sequence_view_tree ir.sequence tree New
user_groups_view res.users.groups res.users field Inherits view_users_form
values_view_form_action ir.values.form.action ir.values form New
values_view_form_defaults ir.values.form.defaults ir.values form New
values_view_search_action ir.values.search.action ir.values search New
values_view_tree_action ir.values.tree.action ir.values tree New
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree 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_configuration_form Module Configuration base.module.configuration 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_company_form res.company.form res.company form New
view_company_tree res.company.tree res.company tree 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.tree res.country.group tree New
view_country_state_form res.country.state.form res.country.state form New
view_country_state_tree res.country.state.tree res.country.state tree New
view_country_tree res.country.tree res.country tree New
view_currency_form res.currency.form res.currency form New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_groups_form res.groups.form res.groups form New
view_groups_search res.groups.search res.groups search New
view_inventory_form multi_company.default.form multi_company.default form New
view_inventory_search multi_company.default.search multi_company.default search New
view_inventory_tree multi_company.default.tree multi_company.default tree New
view_ir_config_form ir.config_parameter form New
view_ir_config_list ir.config_parameter tree New
view_ir_config_search ir.config_parameter search New
view_ir_mail_server_search ir.mail_server search New
view_menu ir.ui.menu.tree ir.ui.menu tree New
view_model_constraint_form ir.model.constraint form New
view_model_constraint_list ir.model.constraint tree New
view_model_data_form ir.model.data form New
view_model_data_list ir.model.data tree 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_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree New
view_module_filter ir.module.module.list.select ir.module.module search 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.tree res.partner.bank tree New
view_partner_bank_type_form res.partner.bank.type.form res.partner.bank.type form New
view_partner_bank_type_tree res.partner.bank.type.tree res.partner.bank.type tree New
view_partner_category_form Partner Tags res.partner.category form New
view_partner_category_list Partner Tags res.partner.category tree New
view_partner_category_tree res.partner.category.tree res.partner.category tree 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_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_partner_filter res.partner.select res.partner search New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_sequence_type_search ir.sequence.type search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree New
view_translation_form ir.translation form New
view_translation_search ir.translation search New
view_translation_tree ir.translation tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
view_workflow_activity_form workflow.activity.form workflow.activity form New
view_workflow_activity_search workflow.activity.search workflow.activity search New
view_workflow_activity_tree workflow.activity.tree workflow.activity tree New
view_workflow_diagram workflow.diagram workflow diagram New
view_workflow_form workflow.form workflow form New
view_workflow_instance_form workflow.instance.form workflow.instance form New
view_workflow_instance_search workflow.instance.search workflow.instance search New
view_workflow_instance_tree workflow.instance.tree workflow.instance tree New
view_workflow_search workflow.search workflow search New
view_workflow_transition_form workflow.transition.form workflow.transition form New
view_workflow_transition_search workflow.transition.search workflow.transition search New
view_workflow_transition_tree workflow.transition.tree workflow.transition tree New
view_workflow_tree workflow.tree workflow tree New
view_workflow_workitem_form workflow.workitem.form workflow.workitem form New
view_workflow_workitem_search workflow.workitem.search workflow.workitem search New
view_workflow_workitem_tree workflow.workitem.tree workflow.workitem tree New
wizard_lang_export Export Translations base.language.export form New
wizard_update_translations Synchronize Terms base.update.translations form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (10)

New fields (0)

No new fields.

Public methods (0)

No public methods.

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)
    @api.multi
  • update_module(self)
    @api.one

New fields (0)

No new fields.

Public methods (1)
  • change_password_button(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • change_password_button(self, cr, uid, ids, context=None)

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 (0)

No new fields.

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 (19)
  • address_get(self, cr, uid, ids, adr_pref=None, context=None)
    Find contacts/addresses of the right type(s) by doing a depth-first-search through descendants within company boundaries (stop at entities flagged ``is_company``) then continuing the search at the ancestors that are within the same company boundaries. Defaults to partners of type ``'default'`` when the exact type is not found, or to the provided partner itself if no type ``'default'`` is found either.
  • copy(self, default=None)
    @api.one
  • create(self, vals)
    @api.model
  • email_send(self, cr, uid, ids, email_from, subject, body, on_error='')
  • fields_view_get(self, cr, user, view_id=None, view_type='form', context=None, toolbar=False, submenu=False)
  • find_or_create(self, cr, uid, email, context=None)
    Find a partner with the given ``email`` or use :py:method:`~.name_create` to create one :param str email: email-like string, which should contain at least one email, e.g. ``"Raoul Grosbedon <r.g@grosbedon.fr>"``
  • main_partner(self)
    @api.model@api.returns('self')
    Return the main partner
  • name_create(self, cr, uid, name, context=None)
    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.
  • name_get(self, cr, uid, ids, context=None)
  • name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100)
  • onchange_address(self, cr, uid, ids, use_parent_address, parent_id, context=None)
  • onchange_state(self, state_id)
    @api.multi
  • onchange_type(self, is_company)
    @api.multi
  • open_commercial_entity(self, cr, uid, ids, context=None)
    Utility method used to add an "Open Company" button in partner views
  • open_parent(self, cr, uid, ids, context=None)
    Utility method used to add an "Open Parent" button in partner views
  • unlink(self, cr, uid, ids, context=None)
  • update_address(self, cr, uid, ids, vals, context=None)
  • view_header_get(self, cr, uid, view_id, view_type, context)
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (2)
  • name_get(self, cr, uid, ids, context=None)
    Return the categories' display name, including their direct parent by default. If ``context['partner_category_display']`` is ``'short'``, the short version of the category name (without the direct parent) is used. The default is the long version.
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/7.0/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Atul Patel (OpenERP), Jalpesh Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Christophe Matthieu, Pinakin Nayi (OpenERP), DBR (OpenERP), Harry (OpenERP), Antonin Bourguignon, ajay javiya (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Bhumika (OpenERP), Purnendu Singh (OpenERP), Fabien Pinckaers, Antony Lesuisse, Bharat Devnani (OpenERP), Meera Trambadia (OpenERP), Saurang Suthar, Olivier Dony, Rajesh Prajapati (OpenERP), Twinkle (OpenERP), Divyesh Makwana (Open ERP), Tejas Tank, Thibault Delavallée, Vo Minh Thu, Hardik, Josse Colpaert, Arnaud Pineux, pso (OpenERP), Sbh (Openerp), Amit Patel (OpenERP), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Kuldeep Joshi (OpenERP), Nimesh (Open ERP), Denis Ledoux, Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, Sanjay Gohel (Open ERP), Alexis de Lattre, help, Fabien Meghazi, niv-openerp, Xavier ALT, Christophe Simonis, David Monjoie, Ravi Gohil (OpenERP), Xavier Morel, Dharti Ratani (OpenERP), Goffin Simon, Anael Closson, Khushboo Bhatt (Open ERP), dle@openerp.com, Cedric Snauwaert, Amit Patel, Frédéric van der Essen, Chris Biersbach, Vijaykumar Baladaniya, Nicolas Martinelli, Jigar Amin, Ravish (Open ERP), csn-openerp, Amit (OpenERP), Minh Tran, Amit Rasmiya, RGA(OpenERP), Kersten Jeremy, Alexandre Fayolle, Dhruti Shastri, Rifakat, Nicolas Lempereur, Hiral Patel (OpenERP), Anand Patel (OpenERP), Julien Legros, Samus CTO, Jignesh Rathod (Open ERP), Stefan Rijnhart, Niels Huylebroeck, Holger Brunn, Mohammed Shekha (OpenERP), Jigar Amin (OpenERP), Olivier, Richard Mathot (OpenERP), Bogdan Stanciu, Kuldeep Joshi, Nhomar - Vauxoo, Yogesh (Serpent Consulting Services)
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:43:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of OpenERP, needed for all installation.
===================================================

Code Analysis

Views touched (163)
XML IDNameModelTypeStatus
act_report_xml_search_view ir.actions.report.xml.search ir.actions.report.xml search New
act_report_xml_view ir.actions.report.xml ir.actions.report.xml form New
act_report_xml_view_tree ir.actions.report.xml.tree ir.actions.report.xml tree New
act_wizard_search_view ir.actions.wizard.search ir.actions.wizard search New
act_wizard_view ir.actions.wizard ir.actions.wizard form New
act_wizard_view_tree ir.actions.wizard.tree ir.actions.wizard tree 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.tree ir.actions.actions tree New
change_password_wizard_user_tree_view Change Password Users change.password.user tree New
change_password_wizard_view Change Password change.password.wizard form New
config_wizard_step_view_form Config Wizard Steps ir.actions.todo form New
config_wizard_step_view_search ir.actions.todo.select ir.actions.todo search New
edit_menu ir.ui.menu tree New
edit_menu_access ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
ir_access_view_form ir.model.access form New
ir_access_view_search ir.model.access search New
ir_access_view_tree ir.model.access tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree New
ir_cron_view ir.cron form New
ir_cron_view_calendar ir.cron calendar New
ir_cron_view_search ir.cron search New
ir_cron_view_tree ir.cron tree New
ir_filters_view_form ir.filters form New
ir_filters_view_search ir.filters search New
ir_filters_view_tree ir.filters tree New
ir_mail_server_form ir.mail_server form New
ir_mail_server_list ir.mail_server tree New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Modules Kanban ir.module.module kanban New
res_config_installer Inheritable view for installer objects res.config.installer form New
res_config_view_base res.config.view.base res.config form 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.tree res.lang tree New
res_partner_kanban_view res.partner.kanban res.partner kanban New
res_request_link-view res.request.link.form res.request.link form New
res_request_link_search_view res.request.link.search res.request.link search New
res_request_link_tree-view res.request.link.form res.request.link tree New
sequence_type_form_view ir.sequence.type form New
sequence_type_tree_view ir.sequence.type tree New
sequence_view ir.sequence form New
sequence_view_tree ir.sequence tree New
shortcut_form ir.ui.view_sc form New
shortcut_tree ir.ui.view_sc tree New
user_groups_view res.users.groups res.users field Inherits view_users_form
values_view_form_action ir.values.form.action ir.values form New
values_view_form_defaults ir.values.form.defaults ir.values form New
values_view_search_action ir.values.search.action ir.values search New
values_view_tree_action ir.values.tree.action ir.values tree New
view_attachment_form ir.attachment form New
view_attachment_search ir.attachment search New
view_attachment_tree ir.attachment tree 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_configuration_form Module Configuration base.module.configuration form New
view_base_module_import Module Import base.module.import 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_company_form res.company.form res.company form New
view_company_tree res.company.tree res.company tree New
view_config_wizard_form Compabitiliby configuration wizard ir.actions.configuration.wizard form New
view_country_form res.country.form res.country form New
view_country_state_form res.country.state.form res.country.state form New
view_country_state_tree res.country.state.tree res.country.state tree New
view_country_tree res.country.tree res.country tree New
view_currency_form res.currency.form res.currency form New
view_currency_rate_type_form res.currency.rate.type.form res.currency.rate.type form New
view_currency_rate_type_search res.currency.rate.type.search res.currency.rate.type search New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_groups_form res.groups.form res.groups form New
view_groups_search res.groups.search res.groups search New
view_inventory_form multi_company.default.form multi_company.default form New
view_inventory_search multi_company.default.search multi_company.default search New
view_inventory_tree multi_company.default.tree multi_company.default tree New
view_ir_config_form ir.config_parameter form New
view_ir_config_list ir.config_parameter tree New
view_ir_config_search ir.config_parameter search New
view_ir_mail_server_search ir.mail_server search New
view_menu ir.ui.menu.tree ir.ui.menu tree New
view_model_constraint_form ir.model.constraint form New
view_model_constraint_list ir.model.constraint tree New
view_model_data_form ir.model.data form New
view_model_data_list ir.model.data tree 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_tree ir.model.fields tree 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 tree New
view_model_search ir.model search New
view_model_tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree New
view_module_filter ir.module.module.list.select ir.module.module search 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.tree res.partner.bank tree New
view_partner_bank_type_form res.partner.bank.type.form res.partner.bank.type form New
view_partner_bank_type_tree res.partner.bank.type.tree res.partner.bank.type tree New
view_partner_category_form Partner Categories res.partner.category form New
view_partner_category_list Partner Categories res.partner.category tree New
view_partner_category_tree res.partner.category.tree res.partner.category tree 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_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_partner_filter res.partner.select res.partner search New
view_rule_form ir.rule form New
view_rule_search ir.rule search New
view_rule_tree ir.rule tree New
view_sequence_search ir.sequence search New
view_sequence_type_search ir.sequence.type search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree New
view_translation_form ir.translation form New
view_translation_search ir.translation search New
view_translation_tree ir.translation tree 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.tree res.users tree 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 tree New
view_view_form ir.ui.view form New
view_view_search ir.ui.view search New
view_view_tree ir.ui.view tree 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.tree ir.actions.act_window tree New
view_workflow_activity_form workflow.activity.form workflow.activity form New
view_workflow_activity_search workflow.activity.search workflow.activity search New
view_workflow_activity_tree workflow.activity.tree workflow.activity tree New
view_workflow_diagram workflow.diagram workflow diagram New
view_workflow_form workflow.form workflow form New
view_workflow_instance_form workflow.instance.form workflow.instance form New
view_workflow_instance_search workflow.instance.search workflow.instance search New
view_workflow_instance_tree workflow.instance.tree workflow.instance tree New
view_workflow_search workflow.search workflow search New
view_workflow_transition_form workflow.transition.form workflow.transition form New
view_workflow_transition_search workflow.transition.search workflow.transition search New
view_workflow_transition_tree workflow.transition.tree workflow.transition tree New
view_workflow_tree workflow.tree workflow tree New
view_workflow_workitem_form workflow.workitem.form workflow.workitem form New
view_workflow_workitem_search workflow.workitem.search workflow.workitem search New
view_workflow_workitem_tree workflow.workitem.tree workflow.workitem tree New
wizard_lang_export Export Translations base.language.export form New
wizard_update_translations Synchronize Terms base.update.translations form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (5)

New fields (0)

No new fields.

Public methods (1)
  • change_password_button(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (2)
  • change_password_button(self, cr, uid, id, context=None)
  • default_get(self, cr, uid, fields, context=None)

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 (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/6.1/base
VERSION
VERSION 1.3
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Rucha (Open ERP), Stephane Wirtel, Numerigraphe - Lionel Sausin, Harry (OpenERP), Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Divyesh Makwana (Open ERP), Vo Minh Thu, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Nimesh (Open ERP), Mayur Maheshwari (OpenERP), olt@tinyerp.com, Fabien Meghazi, niv-openerp, Xavier ALT, Christophe Simonis, Ujjvala Collins (OpenERP), Xavier Morel, Roberto López López (OpenERP), Chris Biersbach, Hardik Ansodariya, Serpent Consulting Services, Amit (OpenERP), Minh Tran, Amit Bhavsar (Open ERP), Rifakat, Najlaâ, Mustufa Rangwala (OpenERP), Thibault Francois, Samus CTO, Stefan Rijnhart, sebastien beau, Carlos Vásquez, Mantavya Gajjar, Jacques-Etienne Baudoux, ksa (Open ERP), Husen Daudi, gpa, Florent Xicluna, Valentin Lab, Rifakat Haradwala (Open ERP), mayur maheshwari (Open ERP), Hardik Ansodariy (OpenERP), ARA (OpenERP), aag (OpenERP), Yogesh (OpenERP), tfr@openerp.com, fp, AMP (OpenERP), ado, Mustufa Rangwala, Naresh (OpenERP), Tejas (OpenERP), Amit Parmar (OpenERP), RavishchanraMurari (Open ERP), Anup (OpenERP), P. Christeas, Dhara (OpenERP), Ravi Gohil (Open ERP), Somesh Khare, Aline Preillon, sus, Tidiane Sy (Baamtu), Boris Timokhin, dl-taktik, Anup (SerpentCS), RGA (OpenERP)
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:41:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The kernel of OpenERP, needed for all installation.

Code Analysis

Views touched (190)
XML IDNameModelTypeStatus
act_report_xml_search_view ir.actions.report.xml.search ir.actions.report.xml search New
act_report_xml_view ir.actions.report.xml ir.actions.report.xml form New
act_report_xml_view_tree ir.actions.report.xml.tree ir.actions.report.xml tree New
act_wizard_search_view ir.actions.wizard.search ir.actions.wizard search New
act_wizard_view ir.actions.wizard ir.actions.wizard form New
act_wizard_view_tree ir.actions.wizard.tree ir.actions.wizard tree 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.tree ir.actions.actions tree 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
contacts_kanban_view res.partner.address.kanban res.partner.address kanban New
edit_menu ir.ui.menu.tree ir.ui.menu tree New
edit_menu_access ir.ui.menu.form2 ir.ui.menu form New
edit_menu_access_search ir.ui.menu.search ir.ui.menu search New
ir_access_view_form ir.model.access.form ir.model.access form New
ir_access_view_search ir.model.access.search ir.model.access search New
ir_access_view_tree ir.model.access.tree ir.model.access tree New
ir_actions_todo_category_form ir.actions.todo.category.form ir.actions.todo.category form New
ir_actions_todo_category_tree ir.actions.todo.category.tree ir.actions.todo.category tree New
ir_actions_todo_tree Config Wizard Steps ir.actions.todo tree New
ir_cron_view ir.cron.form ir.cron form New
ir_cron_view_calendar ir.cron.calendar ir.cron calendar New
ir_cron_view_search ir.cron.search ir.cron search New
ir_cron_view_tree ir.cron.tree ir.cron tree New
ir_filters_view_form ir.filters.form ir.filters form New
ir_filters_view_search ir.filters.search ir.filters search New
ir_filters_view_tree ir.filters.tree ir.filters tree New
ir_mail_server_form ir.mail.server.form ir.mail_server form New
ir_mail_server_list ir.mail.server.list ir.mail_server tree New
ir_property_view ir.property.form ir.property form New
ir_property_view_search ir.property.search ir.property search New
ir_property_view_tree ir.property.tree ir.property tree New
module_form ir.module.module.form ir.module.module form New
module_tree ir.module.module.tree ir.module.module tree New
module_view_kanban Modules Kanban ir.module.module kanban New
publisher_warranty_contract_add_wizard publisher_warranty.contract.add.wizard publisher_warranty.contract.wizard form New
publisher_warranty_contract_form_view publisher_warranty.contract.form publisher_warranty.contract form New
publisher_warranty_contract_search_view publisher_warranty.contract.search publisher_warranty.contract search New
publisher_warranty_contract_tree_view publisher_warranty.contract.tree publisher_warranty.contract tree New
publisher_warranty_contract_view_calendar publisher_warranty.contract.calendar publisher_warranty.contract calendar New
res_config_installer Inheritable view for installer objects res.config.installer form New
res_config_view_base res.config.view.base res.config form 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.tree res.lang tree New
res_log_form res.log.form res.log form New
res_log_search res.log.search res.log search New
res_log_tree res.log.tree res.log tree New
res_partner_event-wopartner-view_form res.partner.event.form res.partner.event form New
res_partner_event-wopartner-view_tree res.partner.event.tree res.partner.event tree New
res_partner_kanban_view RES - PARTNER KANBAN res.partner kanban New
res_request-view res.request.form res.request form New
res_request_calendar_view Request - Calendar res.request calendar New
res_request_calendar_view res.request.calendar res.request calendar New
res_request_history_form-view res.request.history.form res.request.history form New
res_request_history_tree-view res.request.history.tree res.request.history tree New
res_request_link-view res.request.link.form res.request.link form New
res_request_link_search_view res.request.link.search res.request.link search New
res_request_link_tree-view res.request.link.form res.request.link tree New
res_request_search_view res.request.search res.request search New
res_request_tree-view res.request.tree res.request tree New
res_widget_form res.widget.form res.widget form New
res_widget_tree res.widget.tree res.widget tree New
res_widget_user_form res.widget.user.form res.widget.user form New
res_widget_user_tree res.widget.user.tree res.widget.user tree New
sequence_type_form_view ir.sequence.type.form ir.sequence.type form New
sequence_type_tree_view ir.sequence.type.tree ir.sequence.type tree New
sequence_view ir.sequence.form ir.sequence form New
sequence_view_tree ir.sequence.tree ir.sequence tree New
shortcut_form ir.ui.view_sc ir.ui.view_sc form New
shortcut_tree ir.ui.view_sc ir.ui.view_sc tree New
user_groups_view res.users.groups res.users field Inherits view_users_form
values_view_form_action ir.values.form.action ir.values form New
values_view_form_defaults ir.values.form.defaults ir.values form New
values_view_search_action ir.values.search.action ir.values search New
values_view_tree_action ir.values.tree.action ir.values tree New
view_attachment_form ir.attachment.view ir.attachment form New
view_attachment_search ir.attachment.search ir.attachment search New
view_attachment_tree ir.attachment.view.tree ir.attachment tree New
view_base_import_language Import Translation base.language.import form New
view_base_language_install Load Official Translation base.language.install form New
view_base_module_configuration_form Module Configuration base.module.configuration form New
view_base_module_import Module Import base.module.import form New
view_base_module_scan Module Scan base.module.scan 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_company_form res.company.form res.company form New
view_company_tree res.company.tree res.company tree New
view_config_wizard_form Compabitiliby configuration wizard ir.actions.configuration.wizard form New
view_country_form res.country.form res.country form New
view_country_state_form res.country.state.form res.country.state form New
view_country_state_tree res.country.state.tree res.country.state tree New
view_country_tree res.country.tree res.country tree New
view_currency_form res.currency.form res.currency form New
view_currency_rate_type_form res.currency.rate.type.form res.currency.rate.type form New
view_currency_rate_type_search res.currency.rate.type.search res.currency.rate.type search New
view_currency_search res.currency.search res.currency search New
view_currency_tree res.currency.tree res.currency tree New
view_groups_form res.groups.form res.groups form New
view_inventory_form multi_company.default.form multi_company.default form New
view_inventory_search multi_company.default.search multi_company.default search New
view_inventory_tree multi_company.default.tree multi_company.default tree New
view_ir_config_form ir.config_parameter.form ir.config_parameter form New
view_ir_config_list ir.config_parameter.list ir.config_parameter tree New
view_ir_config_search ir.config_parameter.search ir.config_parameter search New
view_ir_mail_server_search ir.mail.server.search ir.mail_server search New
view_menu ir.ui.menu.tree ir.ui.menu tree New
view_model_data_form ir.model.data.form ir.model.data form New
view_model_data_list ir.model.data.list ir.model.data tree New
view_model_data_search ir.model.data.search ir.model.data search New
view_model_fields_form ir.model.fields.form ir.model.fields form New
view_model_fields_search ir.model.fields.search ir.model.fields search New
view_model_fields_tree ir.model.fields.tree ir.model.fields tree New
view_model_form ir.model.form ir.model form New
view_model_menu_create Create Menu wizard.ir.model.menu.create form New
view_model_search ir.model.search ir.model search New
view_model_tree ir.model.tree ir.model tree New
view_module_category_form ir.module.category.form ir.module.category form New
view_module_category_tree ir.module.category.tree ir.module.category tree New
view_module_filter ir.module.module.list.select ir.module.module search New
view_partner_address_form1 res.partner.address.form1 res.partner.address form New
view_partner_address_form2 res.partner.address.form2 res.partner.address form New
view_partner_address_tree res.partner.address.tree res.partner.address tree 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.tree res.partner.bank tree New
view_partner_bank_type_form res.partner.bank.type.form res.partner.bank.type form New
view_partner_bank_type_tree res.partner.bank.type.tree res.partner.bank.type tree New
view_partner_category_form Partner Categories res.partner.category form New
view_partner_category_list Partner Categories res.partner.category tree New
view_partner_category_tree res.partner.category.tree res.partner.category tree New
view_partner_clear_ids Clear IDs partner.clear.ids form New
view_partner_form res.partner.form res.partner form New
view_partner_mass_mail Mass Mailing partner.massmail.wizard form New
view_partner_sms_send Send SMS partner.sms.send form New
view_partner_title_form res.partner.title.form res.partner.title form New
view_partner_title_tree res.partner.title.tree res.partner.title tree New
view_partner_tree res.partner.tree res.partner tree New
view_partner_wizard_ean_check Ean check partner.wizard.ean.check form New
view_payterm_form res.payterm res.payterm form New
view_res_bank_form res.bank.form res.bank form New
view_res_bank_tree res.bank.tree res.bank tree New
view_res_partner_address_filter res.partner.address.select res.partner.address search New
view_res_partner_filter res.partner.select res.partner search New
view_res_widget_search res.widget.search res.widget search New
view_res_widget_wizard Homepage Widgets Management res.widget.wizard form New
view_rule_form Record rules ir.rule form New
view_rule_search Record rules ir.rule search New
view_rule_tree Record rules ir.rule tree New
view_sequence_search ir.sequence.search ir.sequence search New
view_sequence_type_search ir.sequence.type.search ir.sequence.type search New
view_server_action_form Server Action ir.actions.server form New
view_server_action_search ir.actions.server.search ir.actions.server search New
view_server_action_tree Server Actions ir.actions.server tree New
view_translation_form Translations ir.translation form New
view_translation_search Translations ir.translation search New
view_translation_tree Translations ir.translation tree 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_tree res.users.tree res.users tree New
view_view_custom_form ir.ui.view.custom.form ir.ui.view.custom form New
view_view_custom_search ir.ui.view.custom.search ir.ui.view.custom search New
view_view_custom_tree ir.ui.view.custom.tree ir.ui.view.custom tree New
view_view_form ir.ui.view ir.ui.view form New
view_view_search ir.ui.view.search ir.ui.view search New
view_view_tree ir.ui.view.tree ir.ui.view tree 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.tree ir.actions.act_window tree New
view_workflow_activity_form workflow.activity.form workflow.activity form New
view_workflow_activity_search workflow.activity.search workflow.activity search New
view_workflow_activity_tree workflow.activity.tree workflow.activity tree New
view_workflow_diagram workflow.diagram workflow diagram New
view_workflow_form workflow.form workflow form New
view_workflow_instance_form workflow.instance.form workflow.instance form New
view_workflow_instance_search workflow.instance.search workflow.instance search New
view_workflow_instance_tree workflow.instance.tree workflow.instance tree New
view_workflow_search workflow.search workflow search New
view_workflow_transition_form workflow.transition.form workflow.transition form New
view_workflow_transition_search workflow.transition.search workflow.transition search New
view_workflow_transition_tree workflow.transition.tree workflow.transition tree New
view_workflow_tree workflow.tree workflow tree New
view_workflow_workitem_form workflow.workitem.form workflow.workitem form New
view_workflow_workitem_search workflow.workitem.search workflow.workitem search New
view_workflow_workitem_tree workflow.workitem.tree workflow.workitem tree New
wizard_lang_export Export Translations base.language.export form New
wizard_update_translations Synchronize Terms base.update.translations form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (0)

No models found for this module.