"prefix": "odoo-manifest",
" 'name': 'PROJECT_NAME',",
" 'summary': 'PROJECT_DESCRIPTION',",
" 'category': 'Uncategorized',",
" 'author': 'GROUP_NAME',",
" # 'security/ir.model.access.csv',",
" 'auto_install': False,",
"description": "Odoo Manifest"
"prefix": "odoo-controller",
"from odoo.http import request",
"class ControllerName(http.Controller):",
" @http.route('/example1', auth='public', type='http', csrf=False, website=True)",
" return 'Example1 Route'"
"description": "Odoo Controller"
"from odoo import models, fields, api",
"class ModuleName(models.Model):",
" # _inherit = 'module.inheritname'",
" _name = 'module.name'",
" _description = 'New Description'",
" name = fields.Char(string='Name')"
"description": "Odoo Model"
"prefix": "odoo-model-abstract",
"from odoo import models, fields, api",
"class ModuleName(models.AbstractModel):",
" _name = 'module.name'",
" _description = 'New Description'",
"description": "Odoo Model Abstract"
"Odoo Model Transient": {
"prefix": "odoo-model-transient",
"from odoo import models, fields",
"class ModuleName(models.TransientModel):",
" _name = 'module.name'",
" _description = 'New Description'",
" name = fields.Char(string='Name')"
"description": "Odoo Model Transient"
"prefix": "odoo-field-binary",
"new_field = fields.Binary(string='')"
"description": "Odoo Field Binary"
"prefix": "odoo-field-boolean",
"new_field = fields.Boolean(string='')"
"description": "Odoo Field Boolean"
"prefix": "odoo-field-char",
"new_field = fields.Char(string='')"
"description": "Odoo Field Char"
"prefix": "odoo-field-date",
"new_field = fields.Date(string='')"
"description": "Odoo Field Date"
"prefix": "odoo-field-datetime",
"new_field = fields.Datetime(string='')"
"description": "Odoo Field Datetime"
"prefix": "odoo-field-float",
"new_field = fields.Float(string='')"
"description": "Odoo Field Float"
"prefix": "odoo-field-html",
"new_field = fields.Html(string='')"
"description": "Odoo Field HTML"
"prefix": "odoo-field-image",
"new_field = fields.Image(string='')"
"description": "Odoo Field Image"
"prefix": "odoo-field-integer",
"new_field = fields.Integer(string='')"
"description": "Odoo Field Integer"
"Odoo Field Many2many": {
"prefix": "odoo-field-many2many",
"new_field = fields.Many2many(comodel_name='', string='')"
"description": "Odoo Field Many2many"
"prefix": "odoo-field-many2one",
"new_field = fields.Many2one(comodel_name='', string='')"
"description": "Odoo Field Many2one"
"Odoo Field Many2one Related": {
"prefix": "odoo-field-many2one-related",
"new_field = fields.Many2one(related='')"
"description": "Odoo Field Many2one Related"
"prefix": "odoo-field-one2many",
"new_field = fields.One2many(comodel_name='', inverse_name='', string='')"
"description": "Odoo Field One2many"
"Odoo Field Selection": {
"prefix": "odoo-field-selection",
"new_field = fields.Selection(string='', selection=[('', ''), ('', ''),])"
"description": "Odoo Field Selection"
"prefix": "odoo-field-text",
"new_field = fields.Text(string='')"
"description": "Odoo Field Text"
"def _method_name(self):",
"description": "Odoo Method"
"prefix": "odoo-method-action",
"def _method_name(self):",
" 'name':'Action Name',",
" 'type':'ir.actions.act_window',",
" 'res_model':'model.name',",
" 'view_mode':'list,form',",
"description": "Odoo Method Action"
"prefix": "odoo-method-compute",
"@api.depends('field_name')",
"def _compute_field_name(self):",
"description": "Odoo Method Compute"
"Odoo Method Constrains": {
"prefix": "odoo-method-constrains",
"@api.constrains('field_name')",
"def _check_field_name(self):",
" raise ValidationError()"
"description": "Odoo Method Constrains"
"prefix": "odoo-method-init",
"description": "Odoo Method Init"
"prefix": "odoo-method-create",
"@api.model_create_multi",
"def create(self, vals_list):",
" for vals in vals_list:",
" # Add pre create code here",
" record = super().create(vals)",
" # Add post create code here",
"description": "Odoo Method Create"
"prefix": "odoo-method-cron",
"def cron_model_name(self):",
" field_name_ids = self.env['model.name'].search([])",
" for record in field_name_ids:",
"description": "Odoo Method Cron"
"Odoo Method Onchange": {
"prefix": "odoo-method-onchange",
"@api.onchange('field_name')",
"def _onchange_field_name(self):",
"description": "Odoo Method Onchange"
"prefix": "odoo-method-unlink",
" return super(ClassName, self).unlink()"
"description": "Odoo Method Unlink"
"prefix": "odoo-method-write",
"def write(self, vals):",
" # Add pre write code here",
" record = super().write(vals)",
" # Add post write code here",
"description": "Odoo Method Write"
"prefix": "odoo-sql-insert",
"query = ''' INSERT INTO table_name (field_1, field_2) VALUES (%s, %s) '''",
"self.env.cr.execute(query, (field_1, field_2))",
"description": "Odoo SQL Insert"
"prefix": "odoo-sql-delete",
"query = ''' DELETE FROM table_name WHERE field_1 = %s AND field_2 = %s '''",
"self.env.cr.execute(query, (value_1, value_2))",
"description": "Odoo SQL Delete"
"prefix": "odoo-sql-select",
"query = ''' SELECT field_1, field_2 FROM table_name WHERE field_1 = %s AND field_2 = %s LIMIT 1 '''",
"self.env.cr.execute(query, (value_1, value_2))",
"description": "Odoo SQL Select"
"prefix": "odoo-sql-update",
"query = ''' UPDATE table_name SET field_1 = %s WHERE field_1 > %s '''",
"self.env.cr.execute(query, (value_1, value_2))",
"description": "Odoo SQL Update"
"Odoo SQL Constraints": {
"prefix": "odoo-sql-constraints",
" ('unique_tag_name', 'unique(name)', 'The name must be unique !')",
"description": "Odoo SQL Constraints"
"Odoo Method Open Wizard": {
"prefix": "odoo-method-open-wizard",
"def method_name(self):",
" 'res_model': 'model.name',",
" 'type': 'ir.actions.act_window',",
" 'view_id': self.env.ref('module_name.name_view_form').id",
"description": "Odoo Method Open Wizard"
"<?xml version='1.0' encoding='utf-8'?>",
" <!-- Add your views here -->",
"description": "Odoo View"
" <record id=\"ir_cron_model_name\" model=\"ir.cron\">",
" <field name=\"name\">Model Name Cron Record</field>",
" <field name=\"model_id\" ref=\"model_model_name\"/>",
" <field name=\"state\">code</field>",
" <field name=\"code\">model.method_name()</field>",
" <field name=\"user_id\" ref=\"base.user_root\"/>",
" <field name=\"interval_number\">1</field>",
" <field name=\"interval_type\">days</field>",
" <field name=\"numbercall\">-1</field>",
" <field name=\"active\" eval=\"False\"/>",
"description": "Odoo Cron Record"
"prefix": "odoo-data-record",
" <!-- Data model name -->",
" <record id=\"name_1\" model=\"model.name\">",
" <field name=\"name\">Name</field>",
" <!-- Other field Here -->",
"description": "Odoo Data Record"
"Odoo Data User Group": {
"prefix": "odoo-data-user-group",
" <!-- Users groups -->",
" <record id=\"name_group\" model=\"res.groups\">",
" <field name=\"name\">Name Group / Name App</field>",
"description": "Odoo Data User Group"
"prefix": "odoo-email-template",
" <record id=\"name_mail_template\" model=\"mail.template\">",
" <field name=\"name\">Name Mail Template</field>",
" <field name=\"model_id\" ref=\"module.model_MODEL_NAME\"/>",
" <field name=\"subject\">Subject Name</field>",
" <field name=\"email_from\">name@example.com</field>",
" <field name=\"email_to\">name@example.com</field>",
" <field name=\"email_cc\">name@example.com</field>",
" <field name=\"body_html\" type=\"html\">",
" <h3><!-- Add the Header Text Here --></h3>",
" <p><!-- Add the Body Text Here --></p>",
"description": "Odoo Mail Template"
"description": "Odoo Field"
"prefix": "odoo-action-server",
"<record id=\"model_name_action\" model=\"ir.actions.server\">",
" <field name=\"name\">model.name.action</field>",
" <field name=\"model_id\" ref=\"module_name.model_name_name\"/>",
" <!-- <field name=\"binding_model_id\" ref=\"model_model_name\"/> -->",
" <field name=\"state\">code</field>",
" <field name=\"code\">action = model.method()</field>",
"description": "Odoo Action Server"
"prefix": "odoo-action-window",
"<record id=\"NAME_action\" model=\"ir.actions.act_window\">",
" <field name=\"name\">NAME.action</field>",
" <field name=\"res_model\">MODELNAME</field>",
" <field name=\"view_mode\">list,form</field>",
" <!-- <field name=\"target\">new</field> -->",
"description": "Odoo Action Window"
"Odoo Action Window Extended": {
"prefix": "odoo-action-window-extended",
"<record id=\"NAME_action\" model=\"ir.actions.act_window\">",
" <field name=\"name\">NAME.action</field>",
" <field name=\"type\">ir.actions.act_window</field>",
" <field name=\"res_model\">MODELNAME</field>",
" <field name=\"view_mode\">list,form</field>",
" <field name=\"help\" type=\"html\">",
" <p class=\"oe_view_nocontent_create\">",
" <!-- Add Text Here -->",
" <!-- More details about what a user can do with this object will be OK --> ",
"description": "Odoo Action Window Extended"
"prefix": "odoo-button-object",
"<button name=\"action_button_method_name\" type=\"object\" string=\"ObjectButton\"/>"
"description": "Odoo Button Object"
"prefix": "odoo-button-action",
"<button name=\"%(action_button_method_name)d\" type=\"action\" string=\"ActionButton\"/>"
"description": "Odoo Button Action"
"prefix": "odoo-button-box",
"<div class=\"oe_button_box\" name=\"model_name_button_box\">",
" <button name=\"action_toggle_active\"",
" confirm=\"(Un)archiving a project automatically (un)archives its tasks and issues. Do you want to proceed?\"",
" class=\"oe_stat_button\"",
" <field name=\"active\" widget=\"boolean_button\" options='{\"terminology\": \"archive\"}'/>",
"description": "Odoo Button Box"
"<record id=\"NAME_list\" model=\"ir.ui.view\">",
" <field name=\"name\">NAME.list</field>",
" <field name=\"model\">MODELNAME</field>",
" <!-- <field name=\"inherit_id\" ref=\"base_module.view_id\"/> -->",
" <field name=\"arch\" type=\"xml\">",
" <!-- Add your fields here -->",
" <field name=\"name\"/>",
"description": "Odoo list"
"<record id=\"NAME_form\" model=\"ir.ui.view\">",
" <field name=\"name\">NAME.form</field>",
" <field name=\"model\">MODELNAME</field>",
" <!-- <field name=\"inherit_id\" ref=\"base_module.view_id\"/> -->",
" <field name=\"arch\" type=\"xml\">",
" <!-- Add your fields here -->",
" <field name=\"name\"/>",
"description": "Odoo Form"
"prefix": "odoo-calendar",
"<record id=\"NAME_calendar\" model=\"ir.ui.view\">",
" <field name=\"name\">NAME.calendar</field>",
" <field name=\"model\">MODELNAME</field>",
" <!-- <field name=\"inherit_id\" ref=\"base_module.view_id\"/> -->",
" <field name=\"arch\" type=\"xml\">",
" <calendar string=\"Calendar Description\" date_start=\"DATEFIELD\">",
" <!-- Add your fields here -->",
"description": "Odoo Calendar"
"<record id=\"NAME_graph\" model=\"ir.ui.view\">",
" <field name=\"name\">NAME.graph</field>",
" <field name=\"model\">MODELNAME</field>",
" <!-- <field name=\"inherit_id\" ref=\"base_module.view_id\"/> -->",
" <field name=\"arch\" type=\"xml\">",
" <graph string=\"Graph Description\">",
" <!-- Add your fields here -->",
"description": "Odoo Graph Inherit "
"<group name=\"group_name\" string=\"group_string\">",
"description": "Odoo Group "
"<record id=\"NAME_kanban\" model=\"ir.ui.view\">",
" <field name=\"name\">NAME.kanban</field>",
" <field name=\"model\">MODELNAME</field>",
" <!-- <field name=\"inherit_id\" ref=\"base_module.view_id\"/> -->",
" <field name=\"arch\" type=\"xml\">",
" <kanban string=\"Kanban Description\">",
" <!-- Add your fields here -->",
"description": "Odoo Kanban"
"prefix": "odoo-menu-root",
"<menuitem id=\"MODELNAME_menu\" name=\"\">",
"description": "Odoo Menu Root"
"prefix": "odoo-menu-category",
"<menuitem id=\"CATEGORYNAME_menu\" name=\"\">",
"description": "Odoo Menu Category"
"prefix": "odoo-menu-action",
"<menuitem id=\"MODELNAME_menu\" name=\"\" action=\"\"/>",
"description": "Odoo Menu Action"
"<menuitem id=\"MODULENAME_menu\" name=\"\">",
" <menuitem id=\"CATEGORYNAME_menu\" name=\"\" >",
" <menuitem id=\"MODELNAME_action\" name=\"\" action=\"\"/>",
"description": "Odoo Menu"
"prefix": "odoo-notebook",
" <page name=\"\" string=\"\">",
"description": "Odoo Notebook"
"prefix": "odoo-notebook-page",
"<page string=\"\" name=\"\">",
"description": "Odoo Notebook Page"
"<record id=\"NAME_pivot\" model=\"ir.ui.view\">",
" <field name=\"name\">NAME.pivot</field>",
" <field name=\"model\">MODELNAME</field>",
" <!-- <field name=\"inherit_id\" ref=\"base_module.view_id\"/> -->",
" <field name=\"arch\" type=\"xml\">",
" <pivot string=\"Pivot Description\">",
" <!-- Add your fields here -->",
"description": "Odoo Pivot"
"<record id=\"NAME_search\" model=\"ir.ui.view\">",
" <field name=\"name\">NAME.search</field>",
" <field name=\"model\">MODELNAME</field>",
" <!-- <field name=\"inherit_id\" ref=\"base_module.view_id\"/> -->",
" <field name=\"arch\" type=\"xml\">",
" <!-- Add your fields here -->",
" <!-- <field name=\"field_name\">",
" <filter name=\"field_name\" string=\"Filter Name\" domain=\"[('field_name', '=', True)]\"/>",
" <filter name=\"field_name\" string=\"Filter Name\" context=\"{'group_by':'field_name'}\"/>",
"description": "Odoo search"
"prefix": "odoo-statusbar",
" <field name=\"\" widget=\"statusbar\"/>",
"description": "Odoo Statusbar"
" <table class=\"table table-sm om_main_table\">",
" <t t-foreach=\"docs\" t-as=\"item\">",
" <span t-field=\"item.field_name\"/>",
" <span t-field=\"item.field_name\"/>",
" <span t-field=\"item.field_name\"/>",
"description": "Odoo Table"
"<record id=\"NAME_access\" model=\"ir.model.access\">",
" <field name=\"name\">NAME.access</field>",
" <field name=\"model_id\" ref=\"MODULENAME.model_MODEL_NAME\"/>",
" <field name=\"group_id\" ref=\"MODULENAME.GROUPNAME\"/>",
" <field name=\"perm_read\" eval=\"1\"/>",
" <field name=\"perm_write\" eval=\"1\"/>",
" <field name=\"perm_create\" eval=\"1\"/>",
" <field name=\"perm_unlink\" eval=\"1\"/>",
"description": "Odoo Access Rights"
"<record id=\"MODELNAME_NAME_rule\" model=\"ir.rule\">",
" <field name=\"name\">MODELNAME.NAME.rule</field>",
" <field name=\"model_id\" ref=\"MODULENAME.model_MODEL_NAME\"/>",
" <field name=\"groups\" eval=\"[(4, ref('MODULENAME.GROUPNAME'))]\"/>",
" <field name=\"domain_force\">[('FIELDNAME', '=', )]</field>",
" <field name=\"perm_read\" eval=\"1\"/>",
" <field name=\"perm_write\" eval=\"1\"/>",
" <field name=\"perm_create\" eval=\"1\"/>",
" <field name=\"perm_unlink\" eval=\"1\"/>",
"description": "Odoo Record Rule"
"prefix": "odoo-action-report",
"<record id=\"REPORTNAME_action\" model=\"ir.actions.report\">",
" <field name=\"name\">REPORTNAME Action</field>",
" <field name=\"model\">MODELNAME</field>",
" <field name=\"report_type\">qweb-html</field>",
" <field name=\"report_name\">MODULENAME.TEMPLATE_ID</field>",
" <field name=\"binding_model_id\" ref=\"model_MODEL_NAME\"/>",
"description": "Odoo Action Report"
"Odoo Template Report": {
"prefix": "odoo-template-report",
"<template id=\"TEMPLATE_ID\" name=\"TEMPLATE_NAME\">",
" <t t-call=\"web.html_container\">",
" <t t-foreach=\"docs\" t-as=\"o\">",
" <t t-call=\"web.external_layout\">",
" <h2>Report title</h2>",
" <p>This object's name is <span t-field=\"o.name\"/></p>",
"description": "Odoo Template Report"
"Odoo Template Inherit": {
"prefix": "odoo-template-inherit",
"<template id=\"TEMPLATE_ID\" inherit_id=\"MODULE.TEMPLATE_ID\" name=\"TEMPLATE_NAME\">",
"description": "Odoo Template Inherit"
"Odoo Template Website": {
"prefix": "odoo-template-website",
"<template id=\"TEMPLATE_ID\" name=\"TEMPLATE_NAME\">",
" <t t-call=\"web.website.layout\">",
" <div class=\"container my-4\">",
" <div class=\"col-12\">",
" <p>This is a page </p>",
"description": "Odoo Template Website"
"prefix": "odoo-template-call",
"<t t-call=\"MODULE.TEMPLATENAME\">",
"description": "Odoo Template"
"prefix": "odoo-template-esc",
"<t t-esc=\"FIELDNAME\"/>"
"description": "Odoo Template Esc"
"prefix": "odoo-template-field",
"<span t-field=\"FIELDNAME\"/>"
"description": "Odoo Template Field"
"Odoo Template Foreach": {
"prefix": "odoo-template-foreach",
"<t t-foreach=\"ARRAY\" t-as=\"ITEM\">",
"description": "Odoo Template Foreach"
"prefix": "odoo-template-if",
"<t t-if=\"CONDITION\">",
"description": "Odoo Template If"
"prefix": "odoo-template-image",
"<img t-att-src=\"'data:image/png;base64,%s' % to_text(field_name)\"/>"
"description": "Odoo Template Image"
"prefix": "odoo-template-raw",
"description": "Odoo Template Raw"
"prefix": "odoo-template-set",
"<t t-set=\"var_name\" t-value=\"value\"/>"
"description": "Odoo Template Set"
"prefix": "odoo-website-page",
"<?xml version='1.0' encoding='utf-8'?>",
" <record id='NAME_form' model='website.page'>",
" <field name='name'>NAME Form</field>",
" <field name='is_published' eval='True' />",
" <field name='key'>MODULENAME.NAME_form</field>",
" <field name='url'>/NAME/form</field>",
" <field name='website_id' eval='1' />",
" <field name='type'>qweb</field>",
" <field name='arch' type='xml'>",
" <t t-name='MODULENAME.NAME_form'>",
" <t t-call='website.layout'>",
" <div id='wrap' class='oe_structure'>",
" <div class='container my-4'>",
" <button class='btn btn-primary' onclick='test()'>Button</button>",
" console.log('Ok test...');",
" <record id='menu_NAME_form' model='website.menu'>",
" <field name='name'>NAME Form</field>",
" <field name='url'>/test/form</field>",
" <field name='sequence'>50</field>",
"description": "Odoo WebSite Page"