Membuat modul

Sebelum membuat modul pertama Anda, perlu membuat project Odoo.sh dan mengetahui URL repositori GitHub Anda.

Glosarium

  • ~/src adalah direktori tempat repositori Git yang terkait dengan project Odoo Anda berada.

  • odoo adalah user GitHub.

  • odoo-addons adalah repositori GitHub.

  • feature-1 adalah nama branch pengembangan.

  • main adalah nama branch produksi.

  • my_module adalah nama modul.

Ganti sesuai kebutuhan.

Buat branch development

Dari tampilan Branches:

  • Di panel navigasi branches, klik tombol + (New development branch) di samping Development.

  • Di bawah Fork, pilih branch main.

  • Di bawah To, masukkan feature-1.

Forking branch produksi untuk membuat branch pengembangan di Odoo.sh

Setelah build siap, Anda dapat mengakses editor dan kode branch pengembangan Anda dari folder ~/src/user.

Buat struktur modul

Scaffolding

Meskipun tidak wajib, scaffolding menghindari kerumitan menyiapkan struktur modul Odoo dasar. Anda dapat membuat scaffold modul baru menggunakan executable odoo-bin.

Dari terminal editor, jalankan:

odoo-bin scaffold my_module ~/src/user/

Tip

Jika Anda tidak ingin menginstal Odoo di komputer, Anda juga dapat mengunduh template struktur modul ini. Ganti setiap kemunculan my_module dengan nama pilihan Anda.

Struktur berikut akan dihasilkan:

my_module
├── __init__.py
├── __manifest__.py
├── controllers
│   ├── __init__.py
│   └── controllers.py
├── demo
│   └── demo.xml
├── models
│   ├── __init__.py
│   └── models.py
├── security
│   ├── ir.model.access.csv
│   └── models.py
└── views
    ├── templates.xml
    └── views.xml

Peringatan

Gunakan hanya karakter alfanumerik (a-z, 0-9) atau garis bawah (_) saat memberi nama modul Anda, karena namanya digunakan untuk kelas Python, dan nama kelas yang berisi karakter khusus selain garis bawah tidak valid di Python.

Hapus komentar pada file berikut:

  • models/models.py contoh model dengan field-nya

  • views/views.xml view tree dan form, dengan menu yang membukanya

  • demo/demo.xml record demo untuk model contoh

  • controllers/controllers.py contoh controller yang mengimplementasikan beberapa route

  • views/templates.xml dua contoh tampilan qweb yang digunakan oleh route controller

  • __manifest__.py manifest modul Anda, termasuk judul, deskripsi, dan file data yang akan dimuat. Hapus komentar pada file data daftar kontrol akses:

    # 'security/ir.model.access.csv',
    

Manual

Untuk membuat struktur modul Anda secara manual, ikuti tutorial Server framework 101 untuk memahami struktur modul dan konten setiap file.

Push ke branch pengembangan

  1. Stage perubahan yang akan di-commit dengan menjalankan:

    git add my_module
    
  2. Commit perubahan Anda dengan menjalankan:

    git commit -m "My first module"
    
  3. Push perubahan Anda ke repositori remote dengan menjalankan:

    Dari terminal editor, jalankan:

    git push https HEAD:feature-1
    

Uji modul

Branch seharusnya muncul di bawah bagian Development pada panel navigasi tampilan Branches.

Contoh branch pengembangan

Klik nama branch untuk melihat riwayatnya, termasuk perubahan yang baru saja Anda push. Setelah database siap, klik Connect untuk mengaksesnya.

Tombol connect untuk mengakses database

Jika project Odoo.sh Anda dikonfigurasi untuk secara otomatis menginstal modul, modul akan muncul langsung di dashboard database. Jika tidak, modul akan tersedia untuk instalasi di bawah aplikasi Apps.

Modul baru pada dashboard database

Uji dengan data production

Catatan

Database produksi diperlukan untuk langkah ini. Jika Anda belum memilikinya, buatlah.

Setelah Anda menguji modul dalam build pengembangan dengan data demo dan yakin modul sudah siap, Anda dapat mengujinya dengan data produksi menggunakan branch staging.

Anda dapat:

  • Konversi cabang pengembangan Anda menjadi cabang staging dengan menyeret dan menjatuhkannya ke dalam bagian Staging.

  • Gabungkan ke dalam cabang staging yang ada dengan menyeret dan menjatuhkannya ke cabang tersebut.

  • Gunakan perintah git merge untuk menggabungkan cabang Anda.

Ini membuat build staging baru yang menduplikasi database produksi dan menjalankannya di server yang diperbarui dengan perubahan terbaru cabang Anda.

Setelah database siap, klik Connect untuk mengaksesnya.

Instal modul

Instal modul dari aplikasi Apps. Karena modul mungkin tidak muncul langsung dalam daftar aplikasi, perbarui daftar aplikasi dengan mengaktifkan mode pengembang dan klik Update Apps List ‣ Update.

Catatan

Modul tidak diinstal secara otomatis, karena tujuan build staging adalah untuk menguji perilaku perubahan Anda seperti yang akan terjadi di database produksi, jadi Anda tidak ingin modul diinstal secara otomatis.

Deploy di production

Setelah Anda menguji modul dalam cabang staging dengan data produksi dan yakin modul tersebut siap untuk produksi, Anda dapat menggabungkan cabang Anda ke dalam cabang produksi dengan:

  • Menyeret dan menjatuhkan cabang staging ke cabang produksi.

  • Menggunakan perintah git merge untuk menggabungkan cabang Anda.

Ini menggabungkan perubahan terbaru dari cabang staging ke dalam cabang produksi dan memperbarui server produksi dengan perubahan tersebut.

Setelah database siap, klik Connect untuk mengaksesnya.

Instal modul

Instal modul dari aplikasi Apps. Karena modul mungkin tidak muncul langsung dalam daftar aplikasi, perbarui daftar aplikasi dengan mengaktifkan mode pengembang dan klik Update Apps List ‣ Update.

Tambahkan perubahan

Bagian ini menjelaskan cara menambahkan perubahan dalam modul Anda dengan menambahkan field baru dalam model dan menerapkannya.

  1. Dari editor atau dari komputer Anda, buka folder modul ~/src/odoo-addons/my_module, kemudian buka file models/models.py untuk mengeditnya. Setelah field description:

    description = fields.Text()
    

    tambahkan field datetime:

    start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
    
  2. Buka file views/views.xml dan setelah:

    <field name="value2"/>
    

    tambahkan:

    <field name="start_datetime"/>
    
  3. Perubahan ini mengubah struktur database dengan menambahkan kolom ke tabel dan memodifikasi tampilan. Untuk diterapkan ke database yang sudah ada, seperti database produksi Anda, perubahan ini memerlukan modul diperbarui. Jika Anda ingin pembaruan dilakukan secara otomatis oleh platform Odoo.sh saat Anda mendorong perubahan Anda, tingkatkan versi modul dalam manifestnya dengan membuka __manifest__.py dan mengganti:

    'version': '0.1',
    

    dengan:

    'version': '0.2',
    

    Platform akan mendeteksi perubahan versi dan memicu pembaruan modul saat deployment revisi baru.

  4. Selanjutnya, push perubahan.

  5. Setelah Anda menguji perubahan, Anda dapat menggabungkannya ke branch production, misalnya dengan menarik dan melepas branch ke branch production di antarmuka Odoo.sh. Karena Anda meningkatkan versi modul di manifest, platform akan secara otomatis memperbarui modul, dan field baru Anda akan langsung tersedia. Jika tidak, Anda dapat secara manual memperbarui modul dalam daftar aplikasi.

Gunakan pustaka Python eksternal

Jika Anda ingin menggunakan library Python eksternal yang tidak terpasang secara default, Anda dapat mendefinisikan file requirements.txt yang berisi daftar library eksternal yang dibutuhkan oleh modul Anda. Platform akan menggunakan file ini untuk secara otomatis menginstal library Python yang dibutuhkan oleh project Anda.

Catatan

  • Tidak dimungkinkan untuk menginstal atau mengupgrade paket sistem pada database Odoo.sh (misalnya paket apt). Namun, dalam kondisi tertentu, `paket dapat dipertimbangkan untuk instalasi<https://www.odoo.sh/faq#install_dependencies>`_. Ini juga berlaku untuk modul Python yang memerlukan paket sistem untuk kompilasi dan untuk modul Odoo pihak ketiga.

  • Ekstensi PostgreSQL tidak didukung di Odoo.sh sehingga tidak dimungkinkan untuk menginstal ekstensi (seperti PostGIS, ltree, ...) dalam database Odoo.sh.

Misalnya, untuk menggunakan `library Unidecode<https://pypi.org/project/Unidecode>`_ dalam modul Anda:

  1. Buat file requirements.txt di folder root repositori Anda:

    • Dari editor Odoo.sh, buat dan buka file ~/src/user/requirements.txt.

    • Dari komputer Anda, buat dan buka file ~/src/odoo-addons/requirements.txt.

  2. Tambahkan ke file:

    unidecode
    
  3. Anda sekarang dapat menggunakan library di modul Anda, misalnya untuk menghapus aksen dari karakter di field nama model Anda. Untuk melakukannya, buka file models/models.py dan sebelum:

    from odoo import models, fields, api
    

    tambahkan:

    from unidecode import unidecode
    
  4. Setelah:

    start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
    

    tambahkan:

    @api.model
    def create(self, values):
        if 'name' in values:
            values['name'] = unidecode(values['name'])
        return super(my_module, self).create(values)
    
    def write(self, values):
        if 'name' in values:
            values['name'] = unidecode(values['name'])
        return super(my_module, self).write(values)
    
  5. Tingkatkan versi modul untuk menginstal dependensi Python dengan mengedit manifest modul __manifest__.py.

  6. Kemudian, push perubahan.

    Tip

    Stage file requirements.txt dengan menjalankan git add requirements.txt.