Skip to content

Repository files navigation

Create a custom Odoo Module

Odoo (previously known as OpenERP) is business management software including ERP, CRM, e-commerce, billing, accounting, manufacturing, warehouse, project management, and inventory management. It has an open source “community” version under the LGPLv3 license and an enterprise version under commercial license.

Prerequisites

PyCharm Configuration

After downloading and installing Odoo and PyCharm we need to create our new virtual environment. With this virtual environment we can see reflected the changes on the code instantly, otherwise we will need to restart the service off Odoo on every change we perform.

We start creating a new project on PyCharm. By default, PyCharm will create a new Virtual environment to the project.

PyCharm New Project

After creating the project, we need to setup the Run/Debug configurations with the following information:

Script Path: [PATH to odoo-bin]

Parameters: --conf [PATH to odoo.conf]

PyCharm New Project

PyCharm New Project

Now we need to install all the modules that Odoo needs to run, these modules are:

PackageVersion
Babel2.8.0
certifi2020.6.20
chardet3.0.4
decorator4.4.2
docutils0.16
html2text2020.1.16
idna2.10
Jinja22.11.2
lxml4.5.2
MarkupSafe1.1.1
passlib1.7.2
Pillow7.2.0
polib1.1.0
psutil5.7.2
psycopg22.8.5
PyPDF21.26.0
pypiwin32223
python-dateutil2.8.1
pytz2020.1
pywin32228
reportlab3.5.49
requests2.24.0
six1.15.0
urllib31.25.10
Werkzeug0.11.15

You can install these modules via Pip, whl files, requirements.txt or by using the pipfile

Install from requirements.txt

pip install -r [PATH to requirements.txt]

Install from Pipfile

pipenv install

Custom Module

A Odoo module is a set of business logic which helps to enhance the existing functionality or add some new functionality in Odoo.

Odoo.conf

To add our custom module to Odoo first we need to make a few changes to the odoo.conf file.

  1. Firs we need to specify where our custom module will be stored.
addons_path: [Default PATH], [Custom PATH]
  1. Next, we need to set a new port for the http port
http_port = 8070

Module Structure

An Odoo module can contain a number of elements:

Manifest:_ The manifest file serves to declare a python package as an Odoo module and to specify the module metadata. This file is called __manifest__.py and contains a single python dictionary. Learn more about the manifest file here.

Business objects: Declared as Python classes, these resources are automatically persisted by Odoo based on their configuration.

Data files: XML or CSV files declaring metadata (views or workflows), configuration data, demonstration data and more.

Web controllers: Handle requests from web browser.

Static web data: Images, CSS or JavaScript files used b the web interface or website.

Basic Example

Manifest

# -*- coding: utf-8 -*-
{
'name': 'Res Partner Services',
'version': '1.0',
'description': 'Custom module for Odoo ERP',
'summary': 'Custom module for Odoo ERP',
'author': 'Jhon Doe',
'category': 'Generic Modules/Inventory Control',
'website': 'http://example.net/',
'license': 'GPL-2',
'depends': ['base'],
'init_xml': [],
'demo_xml': [],
'data': ['respartner.xml'],
'installable': True,
'active': True
}

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">partner.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<group>
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</group>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

fromodooimportfields, models, apiclassPartner(models.Model):
_inherit='res.partner'service=fields.Char(required=False, string="Service")
url=fields.Char(required=False, string="URL")
user=fields.Char(required=True, string="User")
password=fields.Char(required=True, string="Password")

This code should output 4 custom inputs on the contacts view.

Custom Module Odoo

Tree Input Example

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">res.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<fieldname="partners">
<tree>
<fieldname="partner_id"invisible="1" />
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</tree>
</field>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

# -*- coding: utf-8 -*-
from odoo import fields, models, api
class Partner(models.Model):
_inherit = 'res.partner'
partners = fields.One2many('res.partner.services.list', 'partner_id', string='Partners')
class PartnerList(models.Model):
_name = 'res.partner.services.list'
_description = 'Service List'
partner_id = fields.Many2one('res.partner.services', strin='Partner')
service = fields.Char(required=False, string="Service")
url = fields.Char(required=False, string="URL")
user = fields.Char(required=True, string="User")
password = fields.Char(required=True, string="Password")

Now you should be able to add multiple Services to the contacts view.

Services Table

Services Input

About

Custom Module for Odoo ERP

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - JosueDLA/odoo-module: Custom Module for Odoo ERP · GitHub
Skip to content

Repository files navigation

Create a custom Odoo Module

Odoo (previously known as OpenERP) is business management software including ERP, CRM, e-commerce, billing, accounting, manufacturing, warehouse, project management, and inventory management. It has an open source “community” version under the LGPLv3 license and an enterprise version under commercial license.

Prerequisites

PyCharm Configuration

After downloading and installing Odoo and PyCharm we need to create our new virtual environment. With this virtual environment we can see reflected the changes on the code instantly, otherwise we will need to restart the service off Odoo on every change we perform.

We start creating a new project on PyCharm. By default, PyCharm will create a new Virtual environment to the project.

PyCharm New Project

After creating the project, we need to setup the Run/Debug configurations with the following information:

Script Path: [PATH to odoo-bin]

Parameters: --conf [PATH to odoo.conf]

PyCharm New Project

PyCharm New Project

Now we need to install all the modules that Odoo needs to run, these modules are:

PackageVersion
Babel2.8.0
certifi2020.6.20
chardet3.0.4
decorator4.4.2
docutils0.16
html2text2020.1.16
idna2.10
Jinja22.11.2
lxml4.5.2
MarkupSafe1.1.1
passlib1.7.2
Pillow7.2.0
polib1.1.0
psutil5.7.2
psycopg22.8.5
PyPDF21.26.0
pypiwin32223
python-dateutil2.8.1
pytz2020.1
pywin32228
reportlab3.5.49
requests2.24.0
six1.15.0
urllib31.25.10
Werkzeug0.11.15

You can install these modules via Pip, whl files, requirements.txt or by using the pipfile

Install from requirements.txt

pip install -r [PATH to requirements.txt]

Install from Pipfile

pipenv install

Custom Module

A Odoo module is a set of business logic which helps to enhance the existing functionality or add some new functionality in Odoo.

Odoo.conf

To add our custom module to Odoo first we need to make a few changes to the odoo.conf file.

  1. Firs we need to specify where our custom module will be stored.
addons_path: [Default PATH], [Custom PATH]
  1. Next, we need to set a new port for the http port
http_port = 8070

Module Structure

An Odoo module can contain a number of elements:

Manifest:_ The manifest file serves to declare a python package as an Odoo module and to specify the module metadata. This file is called __manifest__.py and contains a single python dictionary. Learn more about the manifest file here.

Business objects: Declared as Python classes, these resources are automatically persisted by Odoo based on their configuration.

Data files: XML or CSV files declaring metadata (views or workflows), configuration data, demonstration data and more.

Web controllers: Handle requests from web browser.

Static web data: Images, CSS or JavaScript files used b the web interface or website.

Basic Example

Manifest

# -*- coding: utf-8 -*-
{
'name': 'Res Partner Services',
'version': '1.0',
'description': 'Custom module for Odoo ERP',
'summary': 'Custom module for Odoo ERP',
'author': 'Jhon Doe',
'category': 'Generic Modules/Inventory Control',
'website': 'http://example.net/',
'license': 'GPL-2',
'depends': ['base'],
'init_xml': [],
'demo_xml': [],
'data': ['respartner.xml'],
'installable': True,
'active': True
}

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">partner.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<group>
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</group>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

fromodooimportfields, models, apiclassPartner(models.Model):
_inherit='res.partner'service=fields.Char(required=False, string="Service")
url=fields.Char(required=False, string="URL")
user=fields.Char(required=True, string="User")
password=fields.Char(required=True, string="Password")

This code should output 4 custom inputs on the contacts view.

Custom Module Odoo

Tree Input Example

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">res.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<fieldname="partners">
<tree>
<fieldname="partner_id"invisible="1" />
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</tree>
</field>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

# -*- coding: utf-8 -*-
from odoo import fields, models, api
class Partner(models.Model):
_inherit = 'res.partner'
partners = fields.One2many('res.partner.services.list', 'partner_id', string='Partners')
class PartnerList(models.Model):
_name = 'res.partner.services.list'
_description = 'Service List'
partner_id = fields.Many2one('res.partner.services', strin='Partner')
service = fields.Char(required=False, string="Service")
url = fields.Char(required=False, string="URL")
user = fields.Char(required=True, string="User")
password = fields.Char(required=True, string="Password")

Now you should be able to add multiple Services to the contacts view.

Services Table

Services Input

About

Custom Module for Odoo ERP

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - JosueDLA/odoo-module: Custom Module for Odoo ERP · GitHub
Skip to content

Repository files navigation

Create a custom Odoo Module

Odoo (previously known as OpenERP) is business management software including ERP, CRM, e-commerce, billing, accounting, manufacturing, warehouse, project management, and inventory management. It has an open source “community” version under the LGPLv3 license and an enterprise version under commercial license.

Prerequisites

PyCharm Configuration

After downloading and installing Odoo and PyCharm we need to create our new virtual environment. With this virtual environment we can see reflected the changes on the code instantly, otherwise we will need to restart the service off Odoo on every change we perform.

We start creating a new project on PyCharm. By default, PyCharm will create a new Virtual environment to the project.

PyCharm New Project

After creating the project, we need to setup the Run/Debug configurations with the following information:

Script Path: [PATH to odoo-bin]

Parameters: --conf [PATH to odoo.conf]

PyCharm New Project

PyCharm New Project

Now we need to install all the modules that Odoo needs to run, these modules are:

PackageVersion
Babel2.8.0
certifi2020.6.20
chardet3.0.4
decorator4.4.2
docutils0.16
html2text2020.1.16
idna2.10
Jinja22.11.2
lxml4.5.2
MarkupSafe1.1.1
passlib1.7.2
Pillow7.2.0
polib1.1.0
psutil5.7.2
psycopg22.8.5
PyPDF21.26.0
pypiwin32223
python-dateutil2.8.1
pytz2020.1
pywin32228
reportlab3.5.49
requests2.24.0
six1.15.0
urllib31.25.10
Werkzeug0.11.15

You can install these modules via Pip, whl files, requirements.txt or by using the pipfile

Install from requirements.txt

pip install -r [PATH to requirements.txt]

Install from Pipfile

pipenv install

Custom Module

A Odoo module is a set of business logic which helps to enhance the existing functionality or add some new functionality in Odoo.

Odoo.conf

To add our custom module to Odoo first we need to make a few changes to the odoo.conf file.

  1. Firs we need to specify where our custom module will be stored.
addons_path: [Default PATH], [Custom PATH]
  1. Next, we need to set a new port for the http port
http_port = 8070

Module Structure

An Odoo module can contain a number of elements:

Manifest:_ The manifest file serves to declare a python package as an Odoo module and to specify the module metadata. This file is called __manifest__.py and contains a single python dictionary. Learn more about the manifest file here.

Business objects: Declared as Python classes, these resources are automatically persisted by Odoo based on their configuration.

Data files: XML or CSV files declaring metadata (views or workflows), configuration data, demonstration data and more.

Web controllers: Handle requests from web browser.

Static web data: Images, CSS or JavaScript files used b the web interface or website.

Basic Example

Manifest

# -*- coding: utf-8 -*-
{
'name': 'Res Partner Services',
'version': '1.0',
'description': 'Custom module for Odoo ERP',
'summary': 'Custom module for Odoo ERP',
'author': 'Jhon Doe',
'category': 'Generic Modules/Inventory Control',
'website': 'http://example.net/',
'license': 'GPL-2',
'depends': ['base'],
'init_xml': [],
'demo_xml': [],
'data': ['respartner.xml'],
'installable': True,
'active': True
}

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">partner.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<group>
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</group>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

fromodooimportfields, models, apiclassPartner(models.Model):
_inherit='res.partner'service=fields.Char(required=False, string="Service")
url=fields.Char(required=False, string="URL")
user=fields.Char(required=True, string="User")
password=fields.Char(required=True, string="Password")

This code should output 4 custom inputs on the contacts view.

Custom Module Odoo

Tree Input Example

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">res.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<fieldname="partners">
<tree>
<fieldname="partner_id"invisible="1" />
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</tree>
</field>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

# -*- coding: utf-8 -*-
from odoo import fields, models, api
class Partner(models.Model):
_inherit = 'res.partner'
partners = fields.One2many('res.partner.services.list', 'partner_id', string='Partners')
class PartnerList(models.Model):
_name = 'res.partner.services.list'
_description = 'Service List'
partner_id = fields.Many2one('res.partner.services', strin='Partner')
service = fields.Char(required=False, string="Service")
url = fields.Char(required=False, string="URL")
user = fields.Char(required=True, string="User")
password = fields.Char(required=True, string="Password")

Now you should be able to add multiple Services to the contacts view.

Services Table

Services Input

About

Custom Module for Odoo ERP

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - JosueDLA/odoo-module: Custom Module for Odoo ERP · GitHub
Skip to content

Repository files navigation

Create a custom Odoo Module

Odoo (previously known as OpenERP) is business management software including ERP, CRM, e-commerce, billing, accounting, manufacturing, warehouse, project management, and inventory management. It has an open source “community” version under the LGPLv3 license and an enterprise version under commercial license.

Prerequisites

PyCharm Configuration

After downloading and installing Odoo and PyCharm we need to create our new virtual environment. With this virtual environment we can see reflected the changes on the code instantly, otherwise we will need to restart the service off Odoo on every change we perform.

We start creating a new project on PyCharm. By default, PyCharm will create a new Virtual environment to the project.

PyCharm New Project

After creating the project, we need to setup the Run/Debug configurations with the following information:

Script Path: [PATH to odoo-bin]

Parameters: --conf [PATH to odoo.conf]

PyCharm New Project

PyCharm New Project

Now we need to install all the modules that Odoo needs to run, these modules are:

PackageVersion
Babel2.8.0
certifi2020.6.20
chardet3.0.4
decorator4.4.2
docutils0.16
html2text2020.1.16
idna2.10
Jinja22.11.2
lxml4.5.2
MarkupSafe1.1.1
passlib1.7.2
Pillow7.2.0
polib1.1.0
psutil5.7.2
psycopg22.8.5
PyPDF21.26.0
pypiwin32223
python-dateutil2.8.1
pytz2020.1
pywin32228
reportlab3.5.49
requests2.24.0
six1.15.0
urllib31.25.10
Werkzeug0.11.15

You can install these modules via Pip, whl files, requirements.txt or by using the pipfile

Install from requirements.txt

pip install -r [PATH to requirements.txt]

Install from Pipfile

pipenv install

Custom Module

A Odoo module is a set of business logic which helps to enhance the existing functionality or add some new functionality in Odoo.

Odoo.conf

To add our custom module to Odoo first we need to make a few changes to the odoo.conf file.

  1. Firs we need to specify where our custom module will be stored.
addons_path: [Default PATH], [Custom PATH]
  1. Next, we need to set a new port for the http port
http_port = 8070

Module Structure

An Odoo module can contain a number of elements:

Manifest:_ The manifest file serves to declare a python package as an Odoo module and to specify the module metadata. This file is called __manifest__.py and contains a single python dictionary. Learn more about the manifest file here.

Business objects: Declared as Python classes, these resources are automatically persisted by Odoo based on their configuration.

Data files: XML or CSV files declaring metadata (views or workflows), configuration data, demonstration data and more.

Web controllers: Handle requests from web browser.

Static web data: Images, CSS or JavaScript files used b the web interface or website.

Basic Example

Manifest

# -*- coding: utf-8 -*-
{
'name': 'Res Partner Services',
'version': '1.0',
'description': 'Custom module for Odoo ERP',
'summary': 'Custom module for Odoo ERP',
'author': 'Jhon Doe',
'category': 'Generic Modules/Inventory Control',
'website': 'http://example.net/',
'license': 'GPL-2',
'depends': ['base'],
'init_xml': [],
'demo_xml': [],
'data': ['respartner.xml'],
'installable': True,
'active': True
}

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">partner.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<group>
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</group>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

fromodooimportfields, models, apiclassPartner(models.Model):
_inherit='res.partner'service=fields.Char(required=False, string="Service")
url=fields.Char(required=False, string="URL")
user=fields.Char(required=True, string="User")
password=fields.Char(required=True, string="Password")

This code should output 4 custom inputs on the contacts view.

Custom Module Odoo

Tree Input Example

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">res.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<fieldname="partners">
<tree>
<fieldname="partner_id"invisible="1" />
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</tree>
</field>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

# -*- coding: utf-8 -*-
from odoo import fields, models, api
class Partner(models.Model):
_inherit = 'res.partner'
partners = fields.One2many('res.partner.services.list', 'partner_id', string='Partners')
class PartnerList(models.Model):
_name = 'res.partner.services.list'
_description = 'Service List'
partner_id = fields.Many2one('res.partner.services', strin='Partner')
service = fields.Char(required=False, string="Service")
url = fields.Char(required=False, string="URL")
user = fields.Char(required=True, string="User")
password = fields.Char(required=True, string="Password")

Now you should be able to add multiple Services to the contacts view.

Services Table

Services Input

About

Custom Module for Odoo ERP

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - JosueDLA/odoo-module: Custom Module for Odoo ERP · GitHub
Skip to content

Repository files navigation

Create a custom Odoo Module

Odoo (previously known as OpenERP) is business management software including ERP, CRM, e-commerce, billing, accounting, manufacturing, warehouse, project management, and inventory management. It has an open source “community” version under the LGPLv3 license and an enterprise version under commercial license.

Prerequisites

PyCharm Configuration

After downloading and installing Odoo and PyCharm we need to create our new virtual environment. With this virtual environment we can see reflected the changes on the code instantly, otherwise we will need to restart the service off Odoo on every change we perform.

We start creating a new project on PyCharm. By default, PyCharm will create a new Virtual environment to the project.

PyCharm New Project

After creating the project, we need to setup the Run/Debug configurations with the following information:

Script Path: [PATH to odoo-bin]

Parameters: --conf [PATH to odoo.conf]

PyCharm New Project

PyCharm New Project

Now we need to install all the modules that Odoo needs to run, these modules are:

PackageVersion
Babel2.8.0
certifi2020.6.20
chardet3.0.4
decorator4.4.2
docutils0.16
html2text2020.1.16
idna2.10
Jinja22.11.2
lxml4.5.2
MarkupSafe1.1.1
passlib1.7.2
Pillow7.2.0
polib1.1.0
psutil5.7.2
psycopg22.8.5
PyPDF21.26.0
pypiwin32223
python-dateutil2.8.1
pytz2020.1
pywin32228
reportlab3.5.49
requests2.24.0
six1.15.0
urllib31.25.10
Werkzeug0.11.15

You can install these modules via Pip, whl files, requirements.txt or by using the pipfile

Install from requirements.txt

pip install -r [PATH to requirements.txt]

Install from Pipfile

pipenv install

Custom Module

A Odoo module is a set of business logic which helps to enhance the existing functionality or add some new functionality in Odoo.

Odoo.conf

To add our custom module to Odoo first we need to make a few changes to the odoo.conf file.

  1. Firs we need to specify where our custom module will be stored.
addons_path: [Default PATH], [Custom PATH]
  1. Next, we need to set a new port for the http port
http_port = 8070

Module Structure

An Odoo module can contain a number of elements:

Manifest:_ The manifest file serves to declare a python package as an Odoo module and to specify the module metadata. This file is called __manifest__.py and contains a single python dictionary. Learn more about the manifest file here.

Business objects: Declared as Python classes, these resources are automatically persisted by Odoo based on their configuration.

Data files: XML or CSV files declaring metadata (views or workflows), configuration data, demonstration data and more.

Web controllers: Handle requests from web browser.

Static web data: Images, CSS or JavaScript files used b the web interface or website.

Basic Example

Manifest

# -*- coding: utf-8 -*-
{
'name': 'Res Partner Services',
'version': '1.0',
'description': 'Custom module for Odoo ERP',
'summary': 'Custom module for Odoo ERP',
'author': 'Jhon Doe',
'category': 'Generic Modules/Inventory Control',
'website': 'http://example.net/',
'license': 'GPL-2',
'depends': ['base'],
'init_xml': [],
'demo_xml': [],
'data': ['respartner.xml'],
'installable': True,
'active': True
}

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">partner.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<group>
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</group>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

fromodooimportfields, models, apiclassPartner(models.Model):
_inherit='res.partner'service=fields.Char(required=False, string="Service")
url=fields.Char(required=False, string="URL")
user=fields.Char(required=True, string="User")
password=fields.Char(required=True, string="Password")

This code should output 4 custom inputs on the contacts view.

Custom Module Odoo

Tree Input Example

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">res.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<fieldname="partners">
<tree>
<fieldname="partner_id"invisible="1" />
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</tree>
</field>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

# -*- coding: utf-8 -*-
from odoo import fields, models, api
class Partner(models.Model):
_inherit = 'res.partner'
partners = fields.One2many('res.partner.services.list', 'partner_id', string='Partners')
class PartnerList(models.Model):
_name = 'res.partner.services.list'
_description = 'Service List'
partner_id = fields.Many2one('res.partner.services', strin='Partner')
service = fields.Char(required=False, string="Service")
url = fields.Char(required=False, string="URL")
user = fields.Char(required=True, string="User")
password = fields.Char(required=True, string="Password")

Now you should be able to add multiple Services to the contacts view.

Services Table

Services Input

About

Custom Module for Odoo ERP

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - JosueDLA/odoo-module: Custom Module for Odoo ERP · GitHub
Skip to content

Repository files navigation

Create a custom Odoo Module

Odoo (previously known as OpenERP) is business management software including ERP, CRM, e-commerce, billing, accounting, manufacturing, warehouse, project management, and inventory management. It has an open source “community” version under the LGPLv3 license and an enterprise version under commercial license.

Prerequisites

PyCharm Configuration

After downloading and installing Odoo and PyCharm we need to create our new virtual environment. With this virtual environment we can see reflected the changes on the code instantly, otherwise we will need to restart the service off Odoo on every change we perform.

We start creating a new project on PyCharm. By default, PyCharm will create a new Virtual environment to the project.

PyCharm New Project

After creating the project, we need to setup the Run/Debug configurations with the following information:

Script Path: [PATH to odoo-bin]

Parameters: --conf [PATH to odoo.conf]

PyCharm New Project

PyCharm New Project

Now we need to install all the modules that Odoo needs to run, these modules are:

PackageVersion
Babel2.8.0
certifi2020.6.20
chardet3.0.4
decorator4.4.2
docutils0.16
html2text2020.1.16
idna2.10
Jinja22.11.2
lxml4.5.2
MarkupSafe1.1.1
passlib1.7.2
Pillow7.2.0
polib1.1.0
psutil5.7.2
psycopg22.8.5
PyPDF21.26.0
pypiwin32223
python-dateutil2.8.1
pytz2020.1
pywin32228
reportlab3.5.49
requests2.24.0
six1.15.0
urllib31.25.10
Werkzeug0.11.15

You can install these modules via Pip, whl files, requirements.txt or by using the pipfile

Install from requirements.txt

pip install -r [PATH to requirements.txt]

Install from Pipfile

pipenv install

Custom Module

A Odoo module is a set of business logic which helps to enhance the existing functionality or add some new functionality in Odoo.

Odoo.conf

To add our custom module to Odoo first we need to make a few changes to the odoo.conf file.

  1. Firs we need to specify where our custom module will be stored.
addons_path: [Default PATH], [Custom PATH]
  1. Next, we need to set a new port for the http port
http_port = 8070

Module Structure

An Odoo module can contain a number of elements:

Manifest:_ The manifest file serves to declare a python package as an Odoo module and to specify the module metadata. This file is called __manifest__.py and contains a single python dictionary. Learn more about the manifest file here.

Business objects: Declared as Python classes, these resources are automatically persisted by Odoo based on their configuration.

Data files: XML or CSV files declaring metadata (views or workflows), configuration data, demonstration data and more.

Web controllers: Handle requests from web browser.

Static web data: Images, CSS or JavaScript files used b the web interface or website.

Basic Example

Manifest

# -*- coding: utf-8 -*-
{
'name': 'Res Partner Services',
'version': '1.0',
'description': 'Custom module for Odoo ERP',
'summary': 'Custom module for Odoo ERP',
'author': 'Jhon Doe',
'category': 'Generic Modules/Inventory Control',
'website': 'http://example.net/',
'license': 'GPL-2',
'depends': ['base'],
'init_xml': [],
'demo_xml': [],
'data': ['respartner.xml'],
'installable': True,
'active': True
}

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">partner.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<group>
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</group>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

fromodooimportfields, models, apiclassPartner(models.Model):
_inherit='res.partner'service=fields.Char(required=False, string="Service")
url=fields.Char(required=False, string="URL")
user=fields.Char(required=True, string="User")
password=fields.Char(required=True, string="Password")

This code should output 4 custom inputs on the contacts view.

Custom Module Odoo

Tree Input Example

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">res.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<fieldname="partners">
<tree>
<fieldname="partner_id"invisible="1" />
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</tree>
</field>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

# -*- coding: utf-8 -*-
from odoo import fields, models, api
class Partner(models.Model):
_inherit = 'res.partner'
partners = fields.One2many('res.partner.services.list', 'partner_id', string='Partners')
class PartnerList(models.Model):
_name = 'res.partner.services.list'
_description = 'Service List'
partner_id = fields.Many2one('res.partner.services', strin='Partner')
service = fields.Char(required=False, string="Service")
url = fields.Char(required=False, string="URL")
user = fields.Char(required=True, string="User")
password = fields.Char(required=True, string="Password")

Now you should be able to add multiple Services to the contacts view.

Services Table

Services Input

About

Custom Module for Odoo ERP

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - JosueDLA/odoo-module: Custom Module for Odoo ERP · GitHub
Skip to content

Repository files navigation

Create a custom Odoo Module

Odoo (previously known as OpenERP) is business management software including ERP, CRM, e-commerce, billing, accounting, manufacturing, warehouse, project management, and inventory management. It has an open source “community” version under the LGPLv3 license and an enterprise version under commercial license.

Prerequisites

PyCharm Configuration

After downloading and installing Odoo and PyCharm we need to create our new virtual environment. With this virtual environment we can see reflected the changes on the code instantly, otherwise we will need to restart the service off Odoo on every change we perform.

We start creating a new project on PyCharm. By default, PyCharm will create a new Virtual environment to the project.

PyCharm New Project

After creating the project, we need to setup the Run/Debug configurations with the following information:

Script Path: [PATH to odoo-bin]

Parameters: --conf [PATH to odoo.conf]

PyCharm New Project

PyCharm New Project

Now we need to install all the modules that Odoo needs to run, these modules are:

PackageVersion
Babel2.8.0
certifi2020.6.20
chardet3.0.4
decorator4.4.2
docutils0.16
html2text2020.1.16
idna2.10
Jinja22.11.2
lxml4.5.2
MarkupSafe1.1.1
passlib1.7.2
Pillow7.2.0
polib1.1.0
psutil5.7.2
psycopg22.8.5
PyPDF21.26.0
pypiwin32223
python-dateutil2.8.1
pytz2020.1
pywin32228
reportlab3.5.49
requests2.24.0
six1.15.0
urllib31.25.10
Werkzeug0.11.15

You can install these modules via Pip, whl files, requirements.txt or by using the pipfile

Install from requirements.txt

pip install -r [PATH to requirements.txt]

Install from Pipfile

pipenv install

Custom Module

A Odoo module is a set of business logic which helps to enhance the existing functionality or add some new functionality in Odoo.

Odoo.conf

To add our custom module to Odoo first we need to make a few changes to the odoo.conf file.

  1. Firs we need to specify where our custom module will be stored.
addons_path: [Default PATH], [Custom PATH]
  1. Next, we need to set a new port for the http port
http_port = 8070

Module Structure

An Odoo module can contain a number of elements:

Manifest:_ The manifest file serves to declare a python package as an Odoo module and to specify the module metadata. This file is called __manifest__.py and contains a single python dictionary. Learn more about the manifest file here.

Business objects: Declared as Python classes, these resources are automatically persisted by Odoo based on their configuration.

Data files: XML or CSV files declaring metadata (views or workflows), configuration data, demonstration data and more.

Web controllers: Handle requests from web browser.

Static web data: Images, CSS or JavaScript files used b the web interface or website.

Basic Example

Manifest

# -*- coding: utf-8 -*-
{
'name': 'Res Partner Services',
'version': '1.0',
'description': 'Custom module for Odoo ERP',
'summary': 'Custom module for Odoo ERP',
'author': 'Jhon Doe',
'category': 'Generic Modules/Inventory Control',
'website': 'http://example.net/',
'license': 'GPL-2',
'depends': ['base'],
'init_xml': [],
'demo_xml': [],
'data': ['respartner.xml'],
'installable': True,
'active': True
}

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">partner.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<group>
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</group>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

fromodooimportfields, models, apiclassPartner(models.Model):
_inherit='res.partner'service=fields.Char(required=False, string="Service")
url=fields.Char(required=False, string="URL")
user=fields.Char(required=True, string="User")
password=fields.Char(required=True, string="Password")

This code should output 4 custom inputs on the contacts view.

Custom Module Odoo

Tree Input Example

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">res.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<fieldname="partners">
<tree>
<fieldname="partner_id"invisible="1" />
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</tree>
</field>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

# -*- coding: utf-8 -*-
from odoo import fields, models, api
class Partner(models.Model):
_inherit = 'res.partner'
partners = fields.One2many('res.partner.services.list', 'partner_id', string='Partners')
class PartnerList(models.Model):
_name = 'res.partner.services.list'
_description = 'Service List'
partner_id = fields.Many2one('res.partner.services', strin='Partner')
service = fields.Char(required=False, string="Service")
url = fields.Char(required=False, string="URL")
user = fields.Char(required=True, string="User")
password = fields.Char(required=True, string="Password")

Now you should be able to add multiple Services to the contacts view.

Services Table

Services Input

About

Custom Module for Odoo ERP

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - JosueDLA/odoo-module: Custom Module for Odoo ERP · GitHub
Skip to content

Repository files navigation

Create a custom Odoo Module

Odoo (previously known as OpenERP) is business management software including ERP, CRM, e-commerce, billing, accounting, manufacturing, warehouse, project management, and inventory management. It has an open source “community” version under the LGPLv3 license and an enterprise version under commercial license.

Prerequisites

PyCharm Configuration

After downloading and installing Odoo and PyCharm we need to create our new virtual environment. With this virtual environment we can see reflected the changes on the code instantly, otherwise we will need to restart the service off Odoo on every change we perform.

We start creating a new project on PyCharm. By default, PyCharm will create a new Virtual environment to the project.

PyCharm New Project

After creating the project, we need to setup the Run/Debug configurations with the following information:

Script Path: [PATH to odoo-bin]

Parameters: --conf [PATH to odoo.conf]

PyCharm New Project

PyCharm New Project

Now we need to install all the modules that Odoo needs to run, these modules are:

PackageVersion
Babel2.8.0
certifi2020.6.20
chardet3.0.4
decorator4.4.2
docutils0.16
html2text2020.1.16
idna2.10
Jinja22.11.2
lxml4.5.2
MarkupSafe1.1.1
passlib1.7.2
Pillow7.2.0
polib1.1.0
psutil5.7.2
psycopg22.8.5
PyPDF21.26.0
pypiwin32223
python-dateutil2.8.1
pytz2020.1
pywin32228
reportlab3.5.49
requests2.24.0
six1.15.0
urllib31.25.10
Werkzeug0.11.15

You can install these modules via Pip, whl files, requirements.txt or by using the pipfile

Install from requirements.txt

pip install -r [PATH to requirements.txt]

Install from Pipfile

pipenv install

Custom Module

A Odoo module is a set of business logic which helps to enhance the existing functionality or add some new functionality in Odoo.

Odoo.conf

To add our custom module to Odoo first we need to make a few changes to the odoo.conf file.

  1. Firs we need to specify where our custom module will be stored.
addons_path: [Default PATH], [Custom PATH]
  1. Next, we need to set a new port for the http port
http_port = 8070

Module Structure

An Odoo module can contain a number of elements:

Manifest:_ The manifest file serves to declare a python package as an Odoo module and to specify the module metadata. This file is called __manifest__.py and contains a single python dictionary. Learn more about the manifest file here.

Business objects: Declared as Python classes, these resources are automatically persisted by Odoo based on their configuration.

Data files: XML or CSV files declaring metadata (views or workflows), configuration data, demonstration data and more.

Web controllers: Handle requests from web browser.

Static web data: Images, CSS or JavaScript files used b the web interface or website.

Basic Example

Manifest

# -*- coding: utf-8 -*-
{
'name': 'Res Partner Services',
'version': '1.0',
'description': 'Custom module for Odoo ERP',
'summary': 'Custom module for Odoo ERP',
'author': 'Jhon Doe',
'category': 'Generic Modules/Inventory Control',
'website': 'http://example.net/',
'license': 'GPL-2',
'depends': ['base'],
'init_xml': [],
'demo_xml': [],
'data': ['respartner.xml'],
'installable': True,
'active': True
}

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">partner.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<group>
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</group>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

fromodooimportfields, models, apiclassPartner(models.Model):
_inherit='res.partner'service=fields.Char(required=False, string="Service")
url=fields.Char(required=False, string="URL")
user=fields.Char(required=True, string="User")
password=fields.Char(required=True, string="Password")

This code should output 4 custom inputs on the contacts view.

Custom Module Odoo

Tree Input Example

respartner.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<recordid="resPartnerId"model="ir.ui.view">
<fieldname="name">res.partner.inherit</field>
<fieldname="model">res.partner</field>
<fieldname="inherit_id"ref="base.view_partner_form" />
<fieldname="arch"type="xml">
<notebookposition="inside">
<pagestring="Sessions">
<fieldname="partners">
<tree>
<fieldname="partner_id"invisible="1" />
<fieldname="service"/>
<fieldname="url"/>
<fieldname="user"/>
<fieldname="password"password="True"/>
</tree>
</field>
</page>
</notebook>
</field>
</record>
</odoo> 

respartner.py

# -*- coding: utf-8 -*-
from odoo import fields, models, api
class Partner(models.Model):
_inherit = 'res.partner'
partners = fields.One2many('res.partner.services.list', 'partner_id', string='Partners')
class PartnerList(models.Model):
_name = 'res.partner.services.list'
_description = 'Service List'
partner_id = fields.Many2one('res.partner.services', strin='Partner')
service = fields.Char(required=False, string="Service")
url = fields.Char(required=False, string="URL")
user = fields.Char(required=True, string="User")
password = fields.Char(required=True, string="Password")

Now you should be able to add multiple Services to the contacts view.

Services Table

Services Input

About

Custom Module for Odoo ERP

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages