Skip to content

Odoo Snippet

{
"Odoo Manifest": {
"scope": "python",
"prefix": "odoo-manifest",
"body": [
"{",
" 'name': 'PROJECT_NAME',",
" 'version': '1.1',",
" 'summary': 'PROJECT_DESCRIPTION',",
" 'category': 'Uncategorized',",
" 'author': 'GROUP_NAME',",
" 'website': '',",
" 'license': 'LGPL-3',",
" 'depends': [",
" 'base',",
" ],",
" 'data': [",
" # 'security/ir.model.access.csv',",
" ],",
" 'installable': True,",
" 'auto_install': False,",
" 'application': True,",
"}"
],
"description": "Odoo Manifest"
},
"Odoo Controller": {
"scope": "python",
"prefix": "odoo-controller",
"body": [
"from odoo import http",
"from odoo.http import request",
"",
"",
"class ControllerName(http.Controller):",
" @http.route('/example1', auth='public', type='http', csrf=False, website=True)",
" def example1(self):",
"",
" return 'Example1 Route'"
],
"description": "Odoo Controller"
},
"Odoo Model": {
"scope": "python",
"prefix": "odoo-model",
"body": [
"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"
},
"Odoo Model Abstract": {
"scope": "python",
"prefix": "odoo-model-abstract",
"body": [
"from odoo import models, fields, api",
"",
"",
"class ModuleName(models.AbstractModel):",
" _name = 'module.name'",
" _description = 'New Description'",
],
"description": "Odoo Model Abstract"
},
"Odoo Model Transient": {
"scope": "python",
"prefix": "odoo-model-transient",
"body": [
"from odoo import models, fields",
"",
"",
"class ModuleName(models.TransientModel):",
" _name = 'module.name'",
" _description = 'New Description'",
"",
" name = fields.Char(string='Name')"
],
"description": "Odoo Model Transient"
},
"Odoo Field Binary": {
"scope": "python",
"prefix": "odoo-field-binary",
"body": [
"new_field = fields.Binary(string='')"
],
"description": "Odoo Field Binary"
},
"Odoo Field Boolean": {
"scope": "python",
"prefix": "odoo-field-boolean",
"body": [
"new_field = fields.Boolean(string='')"
],
"description": "Odoo Field Boolean"
},
"Odoo Field Char": {
"scope": "python",
"prefix": "odoo-field-char",
"body": [
"new_field = fields.Char(string='')"
],
"description": "Odoo Field Char"
},
"Odoo Field Date": {
"scope": "python",
"prefix": "odoo-field-date",
"body": [
"new_field = fields.Date(string='')"
],
"description": "Odoo Field Date"
},
"Odoo Field Datetime": {
"scope": "python",
"prefix": "odoo-field-datetime",
"body": [
"new_field = fields.Datetime(string='')"
],
"description": "Odoo Field Datetime"
},
"Odoo Field Float": {
"scope": "python",
"prefix": "odoo-field-float",
"body": [
"new_field = fields.Float(string='')"
],
"description": "Odoo Field Float"
},
"Odoo Field HTML": {
"scope": "python",
"prefix": "odoo-field-html",
"body": [
"new_field = fields.Html(string='')"
],
"description": "Odoo Field HTML"
},
"Odoo Field Image": {
"scope": "python",
"prefix": "odoo-field-image",
"body": [
"new_field = fields.Image(string='')"
],
"description": "Odoo Field Image"
},
"Odoo Field Integer": {
"scope": "python",
"prefix": "odoo-field-integer",
"body": [
"new_field = fields.Integer(string='')"
],
"description": "Odoo Field Integer"
},
"Odoo Field Many2many": {
"scope": "python",
"prefix": "odoo-field-many2many",
"body": [
"new_field = fields.Many2many(comodel_name='', string='')"
],
"description": "Odoo Field Many2many"
},
"Odoo Field Many2one": {
"scope": "python",
"prefix": "odoo-field-many2one",
"body": [
"new_field = fields.Many2one(comodel_name='', string='')"
],
"description": "Odoo Field Many2one"
},
"Odoo Field Many2one Related": {
"scope": "python",
"prefix": "odoo-field-many2one-related",
"body": [
"new_field = fields.Many2one(related='')"
],
"description": "Odoo Field Many2one Related"
},
"Odoo Field One2many": {
"scope": "python",
"prefix": "odoo-field-one2many",
"body": [
"new_field = fields.One2many(comodel_name='', inverse_name='', string='')"
],
"description": "Odoo Field One2many"
},
"Odoo Field Selection": {
"scope": "python",
"prefix": "odoo-field-selection",
"body": [
"new_field = fields.Selection(string='', selection=[('', ''), ('', ''),])"
],
"description": "Odoo Field Selection"
},
"Odoo Field Text": {
"scope": "python",
"prefix": "odoo-field-text",
"body": [
"new_field = fields.Text(string='')"
],
"description": "Odoo Field Text"
},
"Odoo Method": {
"scope": "python",
"prefix": "odoo-method",
"body": [
"def _method_name(self):",
" self.field_name = ''"
],
"description": "Odoo Method"
},
"Odoo Method Action": {
"scope": "python",
"prefix": "odoo-method-action",
"body": [
"def _method_name(self):",
" return {",
" 'name':'Action Name',",
" 'type':'ir.actions.act_window',",
" 'res_model':'model.name',",
" 'view_mode':'list,form',",
" 'target':'current',",
" }"
],
"description": "Odoo Method Action"
},
"Odoo Method Compute": {
"scope": "python",
"prefix": "odoo-method-compute",
"body": [
"@api.depends('field_name')",
"def _compute_field_name(self):",
" self.field_name = ''"
],
"description": "Odoo Method Compute"
},
"Odoo Method Constrains": {
"scope": "python",
"prefix": "odoo-method-constrains",
"body": [
"@api.constrains('field_name')",
"def _check_field_name(self):",
" if 1==1:",
" raise ValidationError()"
],
"description": "Odoo Method Constrains"
},
"Odoo Method Init": {
"scope": "python",
"prefix": "odoo-method-init",
"body": [
"def init(self):",
" pass",
],
"description": "Odoo Method Init"
},
"Odoo Method Create": {
"scope": "python",
"prefix": "odoo-method-create",
"body": [
"@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",
" return record"
],
"description": "Odoo Method Create"
},
"Odoo Method Cron": {
"scope": "python",
"prefix": "odoo-method-cron",
"body": [
"def cron_model_name(self):",
" field_name_ids = self.env['model.name'].search([])",
" for record in field_name_ids:",
" print(record.id)"
],
"description": "Odoo Method Cron"
},
"Odoo Method Onchange": {
"scope": "python",
"prefix": "odoo-method-onchange",
"body": [
"@api.onchange('field_name')",
"def _onchange_field_name(self):",
" self.field_name = ''"
],
"description": "Odoo Method Onchange"
},
"Odoo Method Unlink": {
"scope": "python",
"prefix": "odoo-method-unlink",
"body": [
"def unlink(self):",
" # Add code here",
" return super(ClassName, self).unlink()"
],
"description": "Odoo Method Unlink"
},
"Odoo Method Write": {
"scope": "python",
"prefix": "odoo-method-write",
"body": [
"def write(self, vals):",
" # Add pre write code here",
" record = super().write(vals)",
" # Add post write code here",
" return record"
],
"description": "Odoo Method Write"
},
"Odoo SQL Insert": {
"scope": "python",
"prefix": "odoo-sql-insert",
"body": [
"query = ''' INSERT INTO table_name (field_1, field_2) VALUES (%s, %s) '''",
"self.env.cr.execute(query, (field_1, field_2))",
" # Add code here",
],
"description": "Odoo SQL Insert"
},
"Odoo SQL Delete": {
"scope": "python",
"prefix": "odoo-sql-delete",
"body": [
"query = ''' DELETE FROM table_name WHERE field_1 = %s AND field_2 = %s '''",
"self.env.cr.execute(query, (value_1, value_2))",
" # Add code here",
],
"description": "Odoo SQL Delete"
},
"Odoo SQL Select": {
"scope": "python",
"prefix": "odoo-sql-select",
"body": [
"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))",
" # Add code here",
],
"description": "Odoo SQL Select"
},
"Odoo SQL Update": {
"scope": "python",
"prefix": "odoo-sql-update",
"body": [
"query = ''' UPDATE table_name SET field_1 = %s WHERE field_1 > %s '''",
"self.env.cr.execute(query, (value_1, value_2))",
" # Add code here",
],
"description": "Odoo SQL Update"
},
"Odoo SQL Constraints": {
"scope": "python",
"prefix": "odoo-sql-constraints",
"body": [
"_sql_constraints = [",
" ('unique_tag_name', 'unique(name)', 'The name must be unique !')",
"]"
],
"description": "Odoo SQL Constraints"
},
"Odoo Method Open Wizard": {
"scope": "python",
"prefix": "odoo-method-open-wizard",
"body": [
"def method_name(self):",
" return {",
" 'res_model': 'model.name',",
" 'type': 'ir.actions.act_window',",
" 'view_mode': 'form',",
" 'target': 'new',",
" 'view_id': self.env.ref('module_name.name_view_form').id",
" }"
],
"description": "Odoo Method Open Wizard"
},
"Odoo View": {
"scope": "xml",
"prefix": "odoo-view",
"body": [
"<?xml version='1.0' encoding='utf-8'?>",
"<odoo>",
" <!-- Add your views here -->",
"</odoo>"
],
"description": "Odoo View"
},
"Odoo Cron Record": {
"scope": "xml",
"prefix": "odoo-cron",
"body": [
" <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\"/>",
" </record>"
],
"description": "Odoo Cron Record"
},
"Odoo Data Record": {
"scope": "xml",
"prefix": "odoo-data-record",
"body": [
" <!-- Data model name -->",
" <record id=\"name_1\" model=\"model.name\">",
" <field name=\"name\">Name</field>",
" <!-- Other field Here -->",
" </record>"
],
"description": "Odoo Data Record"
},
"Odoo Data User Group": {
"scope": "xml",
"prefix": "odoo-data-user-group",
"body": [
" <!-- Users groups -->",
" <record id=\"name_group\" model=\"res.groups\">",
" <field name=\"name\">Name Group / Name App</field>",
" </record>"
],
"description": "Odoo Data User Group"
},
"Odoo Mail Template": {
"scope": "xml",
"prefix": "odoo-email-template",
"body": [
" <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\">",
" <div>",
" <h3><!-- Add the Header Text Here --></h3>",
" <p><!-- Add the Body Text Here --></p>",
" </div>",
" </field>",
" </record>"
],
"description": "Odoo Mail Template"
},
"Odoo Field": {
"scope": "xml",
"prefix": "odoo-field",
"body": [
"<field name=\"name\"/>"
],
"description": "Odoo Field"
},
"Odoo Action Server": {
"scope": "xml",
"prefix": "odoo-action-server",
"body": [
"<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>",
"</record>"
],
"description": "Odoo Action Server"
},
"Odoo Action Window": {
"scope": "xml",
"prefix": "odoo-action-window",
"body": [
"<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> -->",
"</record>"
],
"description": "Odoo Action Window"
},
"Odoo Action Window Extended": {
"scope": "xml",
"prefix": "odoo-action-window-extended",
"body": [
"<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 -->",
" </p><p>",
" <!-- More details about what a user can do with this object will be OK --> ",
" </p>",
" </field>",
"</record>"
],
"description": "Odoo Action Window Extended"
},
"Odoo Button Object": {
"scope": "xml",
"prefix": "odoo-button-object",
"body": [
"<button name=\"action_button_method_name\" type=\"object\" string=\"ObjectButton\"/>"
],
"description": "Odoo Button Object"
},
"Odoo Button Action": {
"scope": "xml",
"prefix": "odoo-button-action",
"body": [
"<button name=\"%(action_button_method_name)d\" type=\"action\" string=\"ActionButton\"/>"
],
"description": "Odoo Button Action"
},
"Odoo Button Box": {
"scope": "xml",
"prefix": "odoo-button-box",
"body": [
"<div class=\"oe_button_box\" name=\"model_name_button_box\">",
" <button name=\"action_toggle_active\"",
" type=\"object\"",
" confirm=\"(Un)archiving a project automatically (un)archives its tasks and issues. Do you want to proceed?\"",
" class=\"oe_stat_button\"",
" icon=\"fa-archive\">",
" <field name=\"active\" widget=\"boolean_button\" options='{\"terminology\": \"archive\"}'/>",
" </button>",
"</div>"
],
"description": "Odoo Button Box"
},
"Odoo list": {
"scope": "xml",
"prefix": "odoo-list",
"body": [
"<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\">",
" <list>",
" <!-- Add your fields here -->",
" <field name=\"name\"/>",
" </list>",
" </field>",
"</record>"
],
"description": "Odoo list"
},
"Odoo Form": {
"scope": "xml",
"prefix": "odoo-form",
"body": [
"<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\">",
" <form>",
" <sheet>",
" <group>",
" <!-- Add your fields here -->",
" <field name=\"name\"/>",
" </group>",
" </sheet>",
" </form>",
" </field>",
"</record>"
],
"description": "Odoo Form"
},
"Odoo Calendar": {
"scope": "xml",
"prefix": "odoo-calendar",
"body": [
"<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 -->",
" </calendar>",
" </field>",
"</record>"
],
"description": "Odoo Calendar"
},
"Odoo Graph ": {
"scope": "xml",
"prefix": "odoo-graph",
"body": [
"<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 -->",
" </graph>",
" </field>",
"</record>"
],
"description": "Odoo Graph Inherit "
},
"Odoo Group ": {
"scope": "xml",
"prefix": "odoo-group",
"body": [
"<group name=\"group_name\" string=\"group_string\">",
"</group>"
],
"description": "Odoo Group "
},
"Odoo Kanban": {
"scope": "xml",
"prefix": "odoo-kanban",
"body": [
"<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 -->",
" </kanban>",
" </field>",
"</record>"
],
"description": "Odoo Kanban"
},
"Odoo Menu Root": {
"scope": "xml",
"prefix": "odoo-menu-root",
"body": [
"<menuitem id=\"MODELNAME_menu\" name=\"\">",
" ",
"</menuitem>"
],
"description": "Odoo Menu Root"
},
"Odoo Menu Category": {
"scope": "xml",
"prefix": "odoo-menu-category",
"body": [
"<menuitem id=\"CATEGORYNAME_menu\" name=\"\">",
" ",
"</menuitem>"
],
"description": "Odoo Menu Category"
},
"Odoo Menu Action": {
"scope": "xml",
"prefix": "odoo-menu-action",
"body": [
"<menuitem id=\"MODELNAME_menu\" name=\"\" action=\"\"/>",
],
"description": "Odoo Menu Action"
},
"Odoo Menu ": {
"scope": "xml",
"prefix": "odoo-menu",
"body": [
"<menuitem id=\"MODULENAME_menu\" name=\"\">",
" <menuitem id=\"CATEGORYNAME_menu\" name=\"\" >",
" <menuitem id=\"MODELNAME_action\" name=\"\" action=\"\"/>",
" </menuitem>",
"</menuitem>",
],
"description": "Odoo Menu"
},
"Odoo Notebook": {
"scope": "xml",
"prefix": "odoo-notebook",
"body": [
"<notebook>",
" <page name=\"\" string=\"\">",
" <group>",
" <field name=\"\"/>",
" </group>",
" </page>",
"</notebook>"
],
"description": "Odoo Notebook"
},
"Odoo Notebook Page": {
"scope": "xml",
"prefix": "odoo-notebook-page",
"body": [
"<page string=\"\" name=\"\">",
" <group>",
" <field name=\"\"/>",
" </group>",
"</page>"
],
"description": "Odoo Notebook Page"
},
"Odoo Pivot": {
"scope": "xml",
"prefix": "odoo-pivot",
"body": [
"<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 -->",
" </pivot>",
" </field>",
"</record>"
],
"description": "Odoo Pivot"
},
"Odoo Search": {
"scope": "xml",
"prefix": "odoo-search",
"body": [
"<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\">",
" <search>",
" <!-- 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'}\"/>",
" -->",
" </search>",
" </field>",
"</record>"
],
"description": "Odoo search"
},
"Odoo Statusbar": {
"scope": "xml",
"prefix": "odoo-statusbar",
"body": [
"<header>",
" <field name=\"\" widget=\"statusbar\"/>",
"</header>"
],
"description": "Odoo Statusbar"
},
"Odoo Table": {
"scope": "xml",
"prefix": "odoo-table",
"body": [
" <table class=\"table table-sm om_main_table\">",
" <thead>",
" <tr>",
" <th>Col 1</th>",
" <th>Col 2</th>",
" <th>Col 3</th>",
" </tr>",
" </thead>",
" <tbody>",
" <t t-foreach=\"docs\" t-as=\"item\">",
" <tr>",
" <td>",
" <span t-field=\"item.field_name\"/>",
" </td>",
" <td>",
" <span t-field=\"item.field_name\"/>",
" </td>",
" <td>",
" <span t-field=\"item.field_name\"/>",
" </td>",
" </tr>",
" </t>",
" </tbody>",
" </table>"
],
"description": "Odoo Table"
},
"Odoo Access Rights": {
"scope": "xml",
"prefix": "odoo-access",
"body": [
"<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\"/>",
"</record>"
],
"description": "Odoo Access Rights"
},
"Odoo Record Rule": {
"scope": "xml",
"prefix": "odoo-rule",
"body": [
"<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\"/>",
"</record>"
],
"description": "Odoo Record Rule"
},
"Odoo Report": {
"scope": "xml",
"prefix": "odoo-action-report",
"body": [
"<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\"/>",
"</record>"
],
"description": "Odoo Action Report"
},
"Odoo Template Report": {
"scope": "xml",
"prefix": "odoo-template-report",
"body": [
"<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\">",
" <div class=\"page\">",
" <h2>Report title</h2>",
" <p>This object's name is <span t-field=\"o.name\"/></p>",
" </div>",
" </t>",
" </t>",
" </t>",
"</template>"
],
"description": "Odoo Template Report"
},
"Odoo Template Inherit": {
"scope": "xml",
"prefix": "odoo-template-inherit",
"body": [
"<template id=\"TEMPLATE_ID\" inherit_id=\"MODULE.TEMPLATE_ID\" name=\"TEMPLATE_NAME\">",
" ",
"</template>"
],
"description": "Odoo Template Inherit"
},
"Odoo Template Website": {
"scope": "xml",
"prefix": "odoo-template-website",
"body": [
"<template id=\"TEMPLATE_ID\" name=\"TEMPLATE_NAME\">",
" <t t-call=\"web.website.layout\">",
" <div class=\"container my-4\">",
" <div class=\"row\">",
" <div class=\"col-12\">",
" <h2>NAME PAGE</h2>",
" <p>This is a page </p>",
" </div>",
" </div>",
" </div>",
" </t>",
"</template>"
],
"description": "Odoo Template Website"
},
"Odoo Template Call": {
"scope": "xml",
"prefix": "odoo-template-call",
"body": [
"<t t-call=\"MODULE.TEMPLATENAME\">",
" ",
"</t>"
],
"description": "Odoo Template"
},
"Odoo Template Esc": {
"scope": "xml",
"prefix": "odoo-template-esc",
"body": [
"<t t-esc=\"FIELDNAME\"/>"
],
"description": "Odoo Template Esc"
},
"Odoo Template Field": {
"scope": "xml",
"prefix": "odoo-template-field",
"body": [
"<span t-field=\"FIELDNAME\"/>"
],
"description": "Odoo Template Field"
},
"Odoo Template Foreach": {
"scope": "xml",
"prefix": "odoo-template-foreach",
"body": [
"<t t-foreach=\"ARRAY\" t-as=\"ITEM\">",
" ",
"</t>"
],
"description": "Odoo Template Foreach"
},
"Odoo Template If": {
"scope": "xml",
"prefix": "odoo-template-if",
"body": [
"<t t-if=\"CONDITION\">",
" ",
"</t>"
],
"description": "Odoo Template If"
},
"Odoo Template Image": {
"scope": "xml",
"prefix": "odoo-template-image",
"body": [
"<img t-att-src=\"'data:image/png;base64,%s' % to_text(field_name)\"/>"
],
"description": "Odoo Template Image"
},
"Odoo Template Raw": {
"scope": "xml",
"prefix": "odoo-template-raw",
"body": [
"<t t-raw=\"RAWNAME\"/>"
],
"description": "Odoo Template Raw"
},
"Odoo Template Set": {
"scope": "xml",
"prefix": "odoo-template-set",
"body": [
"<t t-set=\"var_name\" t-value=\"value\"/>"
],
"description": "Odoo Template Set"
},
"Odoo WebSite Page": {
"scope": "xml",
"prefix": "odoo-website-page",
"body": [
"<?xml version='1.0' encoding='utf-8'?>",
"<odoo>",
" <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'>",
" <!-- Content -->",
" </div>",
" <div class='container my-4'>",
" <div class='row'>",
" <h2>NAME Form</h2>",
" <div class='col-2'>",
" <button class='btn btn-primary' onclick='test()'>Button</button>",
" </div>",
" </div>",
" </div>",
" <script>",
" <![CDATA[",
" function test() {",
" console.log('Ok test...');",
" }",
" ]]>",
" </script>",
" </t>",
" </t>",
" </field>",
" </record>",
" <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>",
" </record>",
"</odoo>"
],
"description": "Odoo WebSite Page"
},
}