ADD Odoo development environment

This sample provides a basic setup to start developing applications
for Odoo, it also includes a simple demo module.

Closes #331

Signed-off-by: Alexander Olivares <alxolivares84@gmail.com>
pull/332/head
Alexander Olivares 1 year ago
parent e6b1d2755f
commit 6b077f2375
No known key found for this signature in database
GPG Key ID: 45FCBAFF01BC302A
  1. 1
      README.md
  2. 117
      odoo-postgres/README.md
  3. 33
      odoo-postgres/compose.yaml
  4. 37
      odoo-postgres/conf/odoo.conf
  5. 30
      odoo-postgres/extra-addons/contact_birthday/README.rst
  6. 3
      odoo-postgres/extra-addons/contact_birthday/__init__.py
  7. 19
      odoo-postgres/extra-addons/contact_birthday/__manifest__.py
  8. 6
      odoo-postgres/extra-addons/contact_birthday/demo/res_partner.xml
  9. 3
      odoo-postgres/extra-addons/contact_birthday/models/__init__.py
  10. 9
      odoo-postgres/extra-addons/contact_birthday/models/res_partner.py
  11. BIN
      odoo-postgres/extra-addons/contact_birthday/static/description/icon.png
  12. BIN
      odoo-postgres/extra-addons/contact_birthday/static/description/image_01.png
  13. 13
      odoo-postgres/extra-addons/contact_birthday/views/res_partner.xml
  14. BIN
      odoo-postgres/output_01.png
  15. BIN
      odoo-postgres/output_02.png

@ -53,6 +53,7 @@ application with a Rust backend and a Postgres database.&nbsp;<a href="react-rus
with Spring framework and a Postgres database.&nbsp;<a href="spring-postgres"><img src="icon_devenvs.svg" alt="Use with Docker Dev Environments" height="30" align="top"/></a>
- [`WasmEdge / MySQL / Nginx`](wasmedge-mysql-nginx) - Sample Wasm-based web application with a static HTML frontend, using a MySQL (MariaDB) database. The frontend connects to a Wasm microservice written in Rust, that runs using the WasmEdge runtime.&nbsp;<a href="wasmedge-mysql-nginx"><img src="icon_wasm.svg" alt="Compatible with Docker+wasm" height="30" align="top"/></a>
- [`WasmEdge / Kafka / MySQL`](wasmedge-kafka-mysql) - Sample Wasm-based microservice that subscribes to a Kafka (Redpanda) queue topic, and transforms and saves any incoming message into a MySQL (MariaDB) database.&nbsp;<a href="wasmedge-kafka-mysql"><img src="icon_wasm.svg" alt="Compatible with Docker+wasm" height="30" align="top"/></a>
- [`Odoo / PostgreSQL`](odoo-postgres) - This sample provides a basic setup to start developing applications for Odoo, it also includes a simple demo module.
## Single service samples

@ -0,0 +1,117 @@
## Compose sample
Odoo is a suite of open source business apps including, for example, CRM,
eCommerce, accounting, etc. This example provides a basic setup to start
developing applications.
For more information about how to use Odoo with Docker or how to deploy Odoo
for production environment check the official Odoo [docker image](https://hub.docker.com/_/odoo/) page
or the official Odoo [documentation](https://www.odoo.com/documentation/16.0/administration/install/deploy.html)
page respectively.
Project structure:
```shell
odoo
├── compose.yaml
├── conf
│ └── odoo.conf
├── extra-addons
│ └── contact_birthdate
│ ├── __init__.py
│ ├── __manifest__.py
│ ├── models
│ │ ├── __init__.py
│ │ └── res_partner.py
│ ├── README.md
│ ├── static
│ │ └── description
│ │ └── icon.png
│ └── views
│ └── res_partner.xml
├── output.png
└── README.md
```
> The *contact_birthdate* folder is a simple demo module that enables the
> birthday date for individual type contacts.
[_compose.yaml_](compose.yaml)
```yml
services:
odoo:
image: odoo:16.0
platform: linux/amd64
container_name: odoo
...
```
The compose file defines two services called odoo and postgres. When
deploying, Docker Compose maps ports 8069 and 5432 of the odoo and
postgres service containers to host ports 8069 and 5432, so make sure
that both ports are not already being in use.
> The `tty: true` and `stdin_open: true` flags enable interactive mode,
> this is especially useful if you want to use a Python debugger such
> as `pdb`.
## Deploying with docker compose
```shell
$ docker compose up -d
[+] Running 5/5
⠿ Network odoo_default Created
⠿ Volume "odoo_odoo-data" Created
⠿ Volume "odoo_psql-data" Created
⠿ Container postgres Started
⠿ Container odoo Started
```
## Expected result
Listing containers must show two containers running and the port mapping as below:
```shell
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
374a18da3b63 odoo:16.0 "/entrypoint.sh odoo" 2 minutes ago Up 2 minutes 0.0.0.0:8069->8069/tcp, 8071-8072/tcp odoo
c3bbddf884d4 postgres:14.5 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:5432->5432/tcp postgres
```
After the containers start, go to `http://localhost:8069` in your favorite web browser.
![page](output_01.png)
Once a new database is created, you will find the demo module along with all other
available applications in the Apps menu.
![page](output_02.png)
To stop and remove the containers execute:
```shell
$ docker compose down
```
To remove the volumes execute:
```shell
$ docker compose down -v
```
## Troubleshooting
If you are running docker on a Mac with an Apple chip you may get the
following error message when trying to pull the odoo image:
```shell
Using default tag: latest
latest: Pulling from library/odoo
no matching manifest for linux/arm64/v8 in the manifest list entries
```
This is because there is no *linux/arm64* image available yet, so to avoid
this problem you must explicitly specify in the compose file the platform
to use as follow: `platform: linux/amd64`.
There is an open [issue](https://github.com/odoo/docker/issues/349) related
to this subject on GitHub.

@ -0,0 +1,33 @@
services:
odoo:
image: odoo:16.0
platform: linux/amd64
container_name: odoo
depends_on:
- postgres
tty: true
stdin_open: true
ports:
- "8069:8069"
environment:
- HOST=postgres
volumes:
- odoo-data:/var/lib/odoo
- ./conf:/etc/odoo
- ./extra-addons:/mnt/extra-addons
postgres:
image: postgres:14.5
platform: linux/amd64
container_name: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=odoo
- POSTGRES_USER=odoo
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- psql-data:/var/lib/postgresql/data/pgdata
volumes:
odoo-data:
psql-data:

@ -0,0 +1,37 @@
[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
; admin_passwd = secretpass
; csv_internal_sep = ,
; db_maxconn = 64
; db_name = False
; db_template = template1
; dbfilter = .*
; debug_mode = False
; email_from = False
; limit_memory_hard = 2684354560
; limit_memory_soft = 2147483648
; limit_request = 8192
; limit_time_cpu = 60
; limit_time_real = 120
; list_db = True
; log_db = False
; log_handler = [':INFO']
; log_level = info
; logfile = None
; longpolling_port = 8072
; max_cron_threads = 2
; osv_memory_age_limit = 1.0
; osv_memory_count_limit = False
; smtp_password = False
; smtp_port = 25
; smtp_server = localhost
; smtp_ssl = False
; smtp_user = False
; workers = 0
; xmlrpc = True
; xmlrpc_interface =
; xmlrpc_port = 8069
; xmlrpcs = True
; xmlrpcs_interface =
; xmlrpcs_port = 8071

@ -0,0 +1,30 @@
===================
Contact's birthday
===================
This module enables the birthday date for individual type contacts.
**Table of contents**
.. contents::
:local:
Configuration
=============
There is no need for any additional configuration to enable this feature.
Usage
=====
Go to Contacts, then select a contact and set the birthday date.
.. image:: static/description/image_01.png
Credits
=======
Authors
~~~~~~~
* Alexander Olivares <alexanderolivares@gmail.com>

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import models

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
{
"name": "Contact's birthday",
"author": "Alexander Olivares",
"website": "https://github.com/alxolivares",
"category": "Hidden",
"version": "0.1",
"depends": ["contacts"],
"data": ["views/res_partner.xml"],
"demo": ["demo/res_partner.xml"],
"installable": True,
"license": "AGPL-3",
}

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="base.res_partner_address_28" model="res.partner">
<field name="birthday_date" eval="DateTime.now()"/>
</record>
</odoo>

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import res_partner

@ -0,0 +1,9 @@
# -*- coding: utf-8 -*-
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
birthday_date = fields.Date(
string="Birthday", help="Contact's birthday date")

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">view.partner.form.inherit</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='vat']" position="after">
<field name="birthday_date" attrs="{'invisible': [('is_company','=',True)]}"/>
</xpath>
</field>
</record>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Loading…
Cancel
Save