Odoo

 

Bài viết này sẽ giúp các bạn làm quen và bắt đầu lập trình với Odoo.

1. Giới thiệu

Odoo là một mini-ERP rất phổ biến hiện nay. Sở dĩ Odoo được ưa chuộng là vì nó open source và free (bản Community), với thiết kế module để có thể được mở rộng dễ dàng.

2. Cài đặt Odoo

Có nhiều cách để cài đặt Odoo, tuy nhiên là một Odoo developer bạn cần cài từ source code.

Để cài đặt, các bạn làm theo hướng dẫn (rất chi tiết và dễ hiểu) ở đây.

3. Chạy Odoo

Tôi khuyến nghị các bạn dùng Pycharm để phát triển các ứng dụng python nói chung và Odoo nói riêng, Pycharm có bản Community hoàn toàn free và bản Enterprise (nhưng mà thuốc được, hehe).

Trước hết bạn cần edit file config trong thư mục debian có tên odoo.conf với nội dung đại loại như sau:

[options]
; This is the password that allows database operations:
; admin_passwd = admin
db_host = False
db_port = False
db_user = odoo
db_password = False
addons_path = addons

Để chạy Odoo ta vào Pycharm > Edit run configuration > Add Python

  • script file: chọn đường dẫn đến file odoo-bin
  • run parameters:
--config=debian\odoo.conf

Sau khi run code thì ta truy nhập vào địa chỉ localhost:8069 sẽ có vào màn hình login

Screen Shot 2018-07-22 at 22.21.26

4. Các thành phần của Odoo

Odoo được thiết kế theo dạng module, một module sẽ bao gồm các folder sau

  • data/ : chứa xml data
  • models/ : định nghĩa các model
  • controllers/ : chứa controllers (HTTP routes).
  • views/ : views và templates
  • static/ : gồm web assets, được tách thành css/, js/, img/, lib/, …

Ngoài ra các folder sau là tuỳ chọn

  • wizard/ : liên quan đến các transient models, kiểu như chuyển đổi giữa các views
  • report/ : chứa phần reports
  • tests/ :  Python/YML tests, tất nhiên là cho việc unit testing
addons/<my_module_name>/
|-- __init__.py
|-- __manifest__.py
|-- controllers/
|   |-- __init__.py
|   |-- <inherited_module_name>.py
|   `-- main.py
|-- data/
|   |-- <main_model>_data.xml
|   `-- <inherited_main_model>_demo.xml
|-- models/
|   |-- __init__.py
|   |-- <main_model>.py
|   `-- <inherited_main_model>.py
|-- report/
|   |-- __init__.py
|   |-- <main_stat_report_model>.py
|   |-- <main_stat_report_model>_views.xml
|   |-- <main_print_report>_reports.xml
|   `-- <main_print_report>_templates.xml
|-- security/
|   |-- ir.model.access.csv
|   `-- <main_model>_security.xml
|-- static/
|   |-- img/
|   |   |-- my_little_kitten.png
|   |   `-- troll.jpg
|   |-- lib/
|   |   `-- external_lib/
|   `-- src/
|       |-- js/
|       |   `-- <my_module_name>.js
|       |-- css/
|       |   `-- <my_module_name>.css
|       |-- less/
|       |   `-- <my_module_name>.less
|       `-- xml/
|           `-- <my_module_name>.xml
|-- views/
|   |-- <main_model>_templates.xml
|   |-- <main_model>_views.xml
|   |-- <inherited_main_model>_templates.xml
|   `-- <inherited_main_model>_views.xml
`-- wizard/
    |-- <main_transient_A>.py
    |-- <main_transient_A>_views.xml
    |-- <main_transient_B>.py
    `-- <main_transient_B>_views.xml

5. Cách extend một module

Để extend một module có sẵn, ta cần extend model và view tương ứng. Một điểm đặc biệt và làm đau đầu không ít web developer khi chuyển sang code Odoo đó là các view của nó không phải là các file html (hay html template) mà là các file xml, mỗi file xml có thể tương ứng với nhiều màn hình và gọi tới nhiều model.

Hãy tập trung vào thư mục addons, nơi chứa tất cả các module của Odoo, với mỗi module sẽ có cấu trúc tương tự như đã đề cập ở cây thư mục phía trên.

addons/
|-- account/
|-- purchase/
|-- stock/
...

Bạn có nhận ra là có quá nhiều module trong thư mục addons? Đúng vậy, ngay cả khi bạn chưa cài app nào, thì các module tương ứng với các app khác nhau như kho bãi (stock), kế toán (account), bán hàng (purchase), vân vân… vẫn nằm ở trong code để bạn tuỳ ý cài vào lúc cần thiết. Bạn có thể bổ sung app riêng cho mình vào trong danh sách này, hoặc customize lại một app có sẵn (extend module) cho phù hợp với nhu cầu.

Trường hợp extend module có sẵn, tôi khuyên là bạn nên tạo một thư mục gọi là custom_addons nằm ngang hàng với thư mục addons của chúng ta.

addons/
|-- account/
|-- purchase/
|-- stock/
...
custom_addons/
|-- my_stock/

Như bạn đã thấy, tôi vừa tạo một module my_stock trong thư mục custom_addons để customize module stock của odoo. Hãy ngó qua gần hơn một chút

custom_addons/
|-- my_stock/
|   |-- models
|   |   |-- init.py
|   |   |-- my_stock_picking.py
|   |-- views
|   |   |-- my_stock_picking_views.xml

Đây là trường hợp điển hình khi tôi muốn customize lại giao diện hoặc flow của phần stock_picking.

# init.py
import my_stock_picking
# my_stock_picking.py
from odoo import fields, models

class MyPicking(models.Model):
    _description = "This model extends Picking model"
    _inherit = ['stock.picking']
<-- my_stock_picking_views.xml -->
<record id="view_pickingtype_filter" model="ir.ui.view">
    <field name="name">stock.picking.type.filter</field>
    <field name="model">stock.picking.type</field>
    <field name="arch" type="xml">
        <search string="Picking Type">
            <field name="name"/>
            <field name="sequence_id"/>
            <field name="warehouse_id"/>
            <filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
        </search>
    </field>
</record>

Để chạy module vừa customize, tôi sẽ chỉnh sửa file odoo.conf một chút

[options] 
... 
addons_path = addons,custom_addons

6. Cài theme mới

Odoo_screenshot1

Nếu bạn thấy giao diện mặc định của odoo có phần cổ lỗ sĩ và hơi nhạt nhẽo, bạn hoàn toàn có thể khoác cho nó lên một giao diện hoàn toàn mới như sau:

Vào Settings > Theme store.

Trong danh sách theme trên màn hình, bấm lọc chọn Free và chọn theme có tên là Material/United Backend Theme, download về máy và giải nén vào thư mục addons.

Sửa chút file odoo.conf

[options] 
... 
addons_path = addons,custom_addons
scafford = web_responsive addons

Tiếp theo reload server và vào Settings > Activate Developer Mode

Vào Apps, search module: theme

Click button Install Material/United Backend Theme

Done!

 

 

 

Leave a comment