Modul pertama Anda

Gambaran Umum

Bab ini membantu Anda untuk membuat modul Odoo pertama Anda dan untuk deploy modul tersebut di project Odoo.sh Anda.

Tutorial ini mengharuskan Anda sudah membuat project di Odoo.sh, dan Anda mengetahui URL repositori Github Anda.

Penggunaan dasar Git dan Github dijelaskan.

Asumsi di bawah akan dibuat:

  • ~/src adalah direktori repositori Git yang terkait project Odoo Anda,

  • odoo adalah user Github,

  • odoo-addons adalah repositori Github,

  • feature-1 adalah nama branch development,

  • master adalah nama branch production,

  • my_module adalah nama modul.

Ganti nama-nama di atas sesuai pilihan Anda.

Buat branch development

Dari Odoo.sh

Di tampilan branch:

  • pencet tombol + di sebelah stage development,

  • pilih branch master di pilihan Fork,

  • letol feature-1 di input To.

    pic1 pic2

Setelah build dibuat, Anda dapat mengakses editor dan browse ke folder ~/src/user untuk mengakses ke code branch development Anda.

../../../_images/firstmodule-development-editor.png ../../../_images/firstmodule-development-editor-interface.png

Dari komputer Anda

Klon repositori Github Anda pada komputer Anda:

$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/odoo/odoo-addons.git
$ cd ~/src/odoo-addons

Buat branch baru:

$ git checkout -b feature-1 master

Buat struktur modul

Scaffolding modul

Walau tidak harus, scaffolding menghindari kejemuan dari menyiapkan struktur dasar modul Odoo. Anda dapat scaffolding modul baru menggunakan exe odoo-bin.

Dari editor Odoo.sh, di terminal:

$ odoo-bin scaffold my_module ~/src/user/

Atau, dari komputer Anda, bila Anda sudah menginstla Odoo:

$ ./odoo-bin scaffold my_module ~/src/odoo-addons/

Bila Anda tidak ingin menginstal Odoo pada komputer Anda, Anda juga dapat mengunduh templat struktur modul ini di mana Anda mengganti setiap occurrence my_module menjadi nama pilihan Anda.

Struktur di bawah akan dibuat:

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

Peringatan

Jangan gunakan karakter spesial kecuali garis bawah ( _ ) untuk nama modul Anda, bahkan jangan gunakan garis biasa ( - ). Nama ini digunakan untuk Python class modul Anda, dan nama class dengan karakter spesial kecuali garis bawah tidak valid di Python.

Uncomment konten file-file:

  • models/models.py, contoh model dengan fieldnya,

  • views/views.xml, tampilan tree dan form, dengan menu yang membuka mereka,

  • demo/demo.xml, record-record demo untuk contoh model di atas,

  • controllers/controllers.py, contoh controller yang mengimplementasi beberapa rute-rute,

  • views/templates.xml, dua contoh tampilan qweb yang digunakan oleh rute-rute kontroller di atas,

  • __manifest__.py, manifest modul Anda, termasuk contohnya judul, keterangan dan file data untuk dimuat. Anda hanya harus uncomment file data access control list:

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

Manual

Bila Anda ingin membuat struktur modul secara manual, Anda dapat mengikuti tutorial Server framework 101 untuk memahami struktur modul dan konten setiap file.

Push branch development

Stage perubahan yang harus dicommit

$ git add my_module

Commit perubahan Anda

$ git commit -m "My first module"

Push perubahan Anda ke repositori remot Anda

Dari terminal editor Odoo.sh:

$ git push https HEAD:feature-1

Command di atas dijelaskan di bagian Commit & Push perubahan Anda dari bab Editor Online. Ini termasuk penjelasan mengenai fakta bahwa Anda akan di-prompt untuk mengetik username dan password Anda, dan apa yang harus dilakukan bila Anda menggunakan autentikasi dua-faktor.

Atau, dari terminal komputer Anda:

$ git push -u origin feature-1

Anda harus menuliskan -u origin feature-1 untuk push pertama saja. Setelah itu, untuk push perubahan di masa depan dari komputer Anda, Anda cukup menggunakan

$ git push

Tes modul Anda

Branch Anda seharusnya sekarang muncul di branch development Anda di project Anda.

../../../_images/firstmodule-test-branch.png

Di tampilan branch project Anda, Anda dapat mengeklik pada nama branch Anda di panel navigasi kiri untuk mengakses riwayatnya.

../../../_images/firstmodule-test-branch-history.png

Anda dapat melihat di sini perubahan yang Anda baru saja push, termasuk komentar yang Anda tetapkan. Setelah database siap, Anda dapat mengaksesnya dengan mengeklik tombol Connect.

../../../_images/firstmodule-test-database.png

Bila project Odoo.sh Anda dikonfigurasi untuk menginstal modul Anda secara otomatis, Anda akan langsung melihatnya di antara app-app database. Bila tidak, akan tersedia di app untuk diinstal.

Anda lalu dapat mengutak-atik modul Anda, membuat record baru dan mengetes fitur-fitur serta tombol-tombol Anda.

Uji dengan data production

Anda harus memiliki database production untuk langkah ini. Anda dapat membuatnya bila Anda belum memilikinya.

Setelah Anda menguji modul Anda di build development dengan data demo dan yakin modul sudah siap, Anda dapat mengetesnya dengan data production menggunakan branch staging.

Anda dapat:

  • Membuat branch development Anda branch staging, dengan menarik dan melepasnya pada bagian judul staging.

    ../../../_images/firstmodule-test-devtostaging.png
  • Merge ke branch staging yang tersedia, dengan menarik dan melepasnya ke branch staging yang diinginkan.

    ../../../_images/firstmodule-test-devinstaging.png

Anda juga dapat menggunakan command git merge untuk merging branch Anda.

Ini akan membuat build staging baru, yang akan menduplikasikan database production dan menjalankannya menggunakan server yang diupdate dengan perubahan terkini branch Anda.

../../../_images/firstmodule-test-mergedinstaging.png

Setelah database siap, Anda dapat mengaksesnya menggunakan tombol Connect.

Instal modul Anda

Modul Anda tidak akan diinstal secara otomatis, Anda harus menginstalnya dari menu app. Karena, tujuan dari build staging adalah untuk menguji perilaku perubahan Anda seolah-olah seperti di production Anda, dan pada production itu sendiri Anda tidak ingin modul Anda untuk diinstal secara otomatis, tapi sesuai kebutuhan Anda.

Modul Anda juga mungkin tidak langsung muncul di app Anda untuk diinstal, Anda harus mengupdate daftar app Anda terlebih dahulu:

  • Aktifkan mode developer

  • di menu app, klik tombol Update Daftar App,

  • di dialog yang muncul, klik tombol Update.

    ../../../_images/firstmodule-test-updateappslist.png

Modul Anda lalu akan muncul di daftar app yang tersedia.

../../../_images/firstmodule-test-mymoduleinapps.png

Deploy di production

Setelah Anda mengetes modul Anda di branch staging dengan data production, dan yakin modul sudah siap untuk production, Anda dapat merge branch Anda dengan branch production.

Tarik dan lepas branch staging Anda ke branch production.

../../../_images/firstmodule-test-mergeinproduction.png

Anda juga dapat menggunakan command git merge untuk merging branch Anda.

Ini akan merge perubahan terakhir dari branch staging Anda dengan branch production, dan mengupdate server production Anda dengan perubahan terkini.

../../../_images/firstmodule-test-mergedinproduction.png

Setelah database siap, Anda dapat mengaksesnya menggunakan tombol Connect.

Instal modul Anda

Modul Anda tidak akan diinstal secara otomatis, Anda harus menginstalnya secara manual seperti yang dijelaskan di bagian di atas mengenai menginstal modul di database staging.

Tambahkan perubahan

Bagian ini menjelaskan bagaimana cara menambahkan perubahan ke modul Anda dengan menambahkan field baru di model dan men-deploy-nya.

Dari editor Odoo.sh,
  • browse ke folder modul Anda ~/src/user/my_module,

  • lalu, buka file models/models.py.

Atau, dari komputer Anda,
  • gunakan browser file pilihan Anda untuk browse ke folder modul Anda ~/src/odoo-addons/my_module,

  • lalu, buka file models/models.py menggunakan editor pilihan Anda, seperti Atom, Sublime Text, PyCharm, vim, ...

Lalu, setelah field keterangan

description = fields.Text()

Tambahkan field tanggalwaktu

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

Lalu, buka file views/views.xml.

Lalu

<field name="value2"/>

Tambahkan

<field name="start_datetime"/>

Perubahan-perubahan ini mengubah struktur database dengan menambahkan kolom di tabel, dan memodifikasi tampilan yang disimpan di database.

Agar dapat diterapkan di database yang tersedia, seperti database production Anda, perubahan-perubahan ini membutuhkan modul diupdate.

Bila Anda ingin update untuk dilakukan secara otomatis oleh platform Odoo.sh saat Anda push perubahan Anda, tingkatkan versi modul Anda di manifest.

Buka manifest modul __manifest__.py.

Ganti

'version': '0.1',

dengan

'version': '0.2',

Platform akan mendeteksi perubahan versi dan memicu update modul pada deployment revisi baru.

Browse ke folder Git Anda.

Lalu, dari terminal Odoo.sh:

$ cd ~/src/user/

Atau, dari terminal komputer Anda:

$ cd ~/src/odoo-addons/

Lalu, stage perubahan Anda untuk di-commit

$ git add my_module

Commit perubahan Anda

$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"

Push perubahan Anda:

Dari terminal Odoo.sh:

$ git push https HEAD:feature-1

Atau, dari terminal komputer Anda:

$ git push

Platform lalu akan membuat build baru untuk branch feature-1.

../../../_images/firstmodule-test-addachange-build.png

Setelah Anda menguji perubahan Anda, Anda dapat merge perubahan Anda di branch production, contohnya dengan menarik-dan-melepas branch pada branch production di antarmuka Odoo.sh. Selagi Anda meningkatkan versi modul di manifest, platform akan mengupdate modul secara otomatis dan field baru Anda akan langsung tersedia. Bila tidak Anda dapat secara manual mengupdate modul di daftar app.

Gunakan pustaka Python eksternal

Bila Anda ingin menggunakan pustaka Python eksternal yang tidak diinstal secara default, Anda dapat menggunakan file requirements.txt yang menuliskan pustaka eksternal yang merupakan ketergantungan modul-modul Anda.

Catatan

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

  • PostgreSQL extension tidak didukung pada Odoo.sh.

  • Untuk informasi lebih lanjut, konsultasikan FAQ kami.

Platform akan menggunakan file ini untuk secara otomatis menginstal pustaka-pustaka Python yang project Anda butuhkan.

Fitur ini dijelaskan di bagian ini menggunakan pustaka Unidecode di modul Anda.

Buat file requirements.txt di root folder repositori Anda

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

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

Tambahkan

unidecode

Lalu gunakan pustaka di modul Anda, contohnya untuk menghapus aksen dari karakter di field nama model Anda.

Buka file models/models.py.

Sebelum

from odoo import models, fields, api

Tambahkan

from unidecode import unidecode

Lalu

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)

Menambahkan ketergantungan Python membutuhkan peningkatan versi modul sebelum platform dapat menginstalnya.

Edit manifest modul __manifest__.py

Ganti

'version': '0.2',

dengan

'version': '0.3',

Stage dan commit perubahan Anda:

$ git add requirements.txt
$ git add my_module
$ git commit -m "[IMP] my_module: automatically remove special chars in my_module.my_module name field"

Lalu, push perubahan Anda:

Di terminal Odoo.sh:

$ git push https HEAD:feature-1

Di terminal komputer Anda:

$ git push