Presentation - The Odoo Ecosystem
A short introduction into the ecosystem of Odoo, its communities and how it is developed.
What is Odoo
- Open Source ERP and CRM
- Business Management Software
- Framwork for Business Application
History
Fabien Pinckaers - Odoo Founder & CEO^1.
- 2005: TinyERP
- 2008: Rename to OpenERP
- 2010: 100+ employees
- 2014: Funding and rename to Odoo (product and company)
- 2015: Transition to open core model (v9.0)
- 2020: Release Odoo v14.0
Odoo S.A.
- Based in Belgium
- Coordinates Odoo development
- Offers SaaS (Odoo Cloud) and PaaS (Odoo.sh)
- Publishes certificates, learning material and more
- Maintains the partner network
OCA
Odoo Community Association[^4]
- Nonprofit orgnisation
- Promotes the widespread use of Odoo
- Coordinates Odoo Open Source community
- Maintains OSS Apps
Odoo Overview
Odoo Community Edition
The core of Odoo.
Managed on GitHub: https://github.com/odoo/odoo
Odoo Enterprise Edition
Licensed version of Odoo.
- Supported by Odoo S.A.
- Enterprise upgrade eligible
- Enterprise apps and themes
Private repo on GitHub: https://github.com/odoo/enterprise
Odoo licensing
Odoo coats
Coats for the Odoo core.
Everything is a module
The Odoo business layer consists of various modules. Example: Product Model
__manifest__.py
: Module manifestmodels/product.py
: Model definitionviews/product_views.xml
: View definitioni18n/de.po
: German translationsecurity/ir.mode.access.csv
: Access groups and permissions
Odoo Architecture
- Powered by Python and PostgreSQL
- Model-View-Controller
- API: XML-RPC
Logical Architecture
Odoo's ORM
Object Relation Mapping^2.
- Manages models and business logic
- Internal registry loads module definitions
- Methods to interact with data
Everything is XML
Every view is defined as XML.
Forms, lists, pages, filters, fields, menus, records, ...
Extending Odoo
Odoo can be extended easily
- Inherit a model and change business logic
- Change XML-structure and update views
Inherit a Model
from odoo import models
class ProductProduct(models.Model):
_inherit = "product.product"
_sql_constraints = [
(
"default_code_uniq",
"unique(default_code)",
"Internal Reference must be unique across the database!",
)
]
Source: OCA Product Attribute - product.py
XPath Edits
<template id="website_product_description.product" inherit_id="website_sale.product">
<xpath expr="//div[@id='product_details']/div/p" position="replace">
<p t-field="product.web_description" class="text-muted mt-3" />
</xpath>
</template>
Source: Mint System Odoo App: Website Product Description - website_sale_product.xml
Odoo Framework
Odoo is a framework for developing business applications [^3].
- Access to all Odoo entities
- User and access management
- Defined views: lists, chart, kanban, gantt, pivot
- Security and performance
Example
Certificate Planner
Repo: https://github.com/Mint-System/Certificate-Planner
Manual: https://www.odoo-wiki.org/certificate-planner.html
Demo
Benutzername: admin
Passwort: admin
Script: Tutorial - Extend the Odoo product model
Links
Helpful resources:
Documentation: https://www.odoo.com/documentation/14.0/
Odoo CI/CD: https://runbot.odoo.com/
GitHub OCA: https://github.com/OCA/
Odoo Connector: https://odoo-connector.com/
References
[^3]: Applikation mit Odoo entwickeln [^4]: https://odoo-community.org/