Buat modul

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

Glosarium

  • ~/src adalah direktori tempat repositori Git terkait proyek 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 branch, klik tombol + (New development branch) di samping Development.

  • Di bawah Fork, pilih branch main.

  • Di bawah To, masukkan feature-1.

Melakukan fork 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 dalam mengatur struktur modul Odoo dasar. Anda dapat melakukan 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, Anda juga dapat mengunduh templat struktur modul ini. Ganti setiap kemunculan my_module dengan nama pilihan Anda.

Struktur di bawah ini 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 menamai modul Anda, karena namanya digunakan untuk kelas Python, dan nama kelas yang mengandung 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 tampilan tree dan form, dengan menu yang membukanya

  • demo/demo.xml record demo untuk contoh model

  • 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 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 akan muncul di bagian Development pada panel navigasi tampilan Branches.

Contoh cabang pengembangan

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

Tombol connect untuk mengakses database

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

Modul baru di 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 cabang staging.

You can:

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

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

  • Menggunakan 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, sehingga Anda tidak ingin modul diinstal secara otomatis.

Deploy di production

Setelah Anda menguji modul dalam cabang staging dengan data produksi dan yakin modul sudah 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, lalu 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 view. Untuk diterapkan pada database yang sudah ada, seperti database produksi Anda, perubahan ini memerlukan pembaruan modul. Jika Anda ingin pembaruan dilakukan secara otomatis oleh platform Odoo.sh saat Anda push 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, Anda dapat menggabungkannya ke dalam branch produksi, misalnya, dengan menarik dan menjatuhkan branch ke branch produksi di antarmuka Odoo.sh. Karena Anda meningkatkan versi modul dalam manifest, platform akan secara otomatis memperbarui modul, dan field baru Anda akan tersedia segera. Jika tidak, Anda dapat secara manual memperbarui modul dalam daftar aplikasi.

Gunakan pustaka Python eksternal

Jika Anda ingin menggunakan library Python eksternal yang tidak terinstal secara default, Anda dapat mendefinisikan file requirements.txt yang mencantumkan library eksternal yang menjadi dependensi modul Anda. Platform akan menggunakan file ini untuk secara otomatis menginstal library Python yang dibutuhkan proyek Anda.

Catatan

  • Tidak mungkin untuk menginstal atau mengupgrade paket sistem pada database Odoo.sh (misalnya, paket apt). Namun, dalam kondisi tertentu, paket dapat dipertimbangkan untuk diinstal. Ini juga berlaku untuk modul Python yang memerlukan paket sistem untuk kompilasi dan modul Odoo pihak ketiga.

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

Misalnya, untuk menggunakan library 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 dalam modul Anda, misalnya, untuk menghapus aksen dari karakter dalam field name 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 manifes modul __manifest__.py.

  6. Kemudian, push perubahan.

    Tip

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