[Technical] Membuat Modul Odoo 10 - Hello, Happy World!

Happy, Lucky, Smile, Yeay~~
Sudah lama saya tidak membuat postingan baru terkait Odoo karena beberapa hal terjadi hehe 
(┬┬﹏┬┬)

----------------------------------------
Berbeda dengan postingan - postingan sebelumnya,
postingan ini akan membahas cara untuk membuat modul kita sendiri di Odoo 10

(Kok bisa?)
Bisa dong....

Apa saja yang kita butuhkan:

  • Odoo 10 yang telah terinstall (baik di server maupun di pc kalian)
  • Python 2.7
    Walaupun saat postingan ini ditulis Python 2.7 sudah tidak dikembangkan lagi, kita tetap menggunakan Python 2.7 karena Odoo 10 merupakan Odoo versi lawas yang belum mendukung python versi 3 keatas.
  • Kemampuan dasar pemrograman dengan Python
    Jika anda belum memiliki pengalaman pemrograman dan baru ingin memulai untuk belajar, anda dapat mengandalkan video tutorial dari youtube atau situs belajar mandiri seperti Sololearn.
  • Code Editor
    Saya menggunakan Visual Studio Code, tapi anda bebas menggunakan text editor apa saja. (bahkan Notepad bawaan Windows bisa, tapi tidak disarankan)
  • Niat yang cukup kuat 😊

Teori
jika anda ingin langsung terjun ke memulai, silahkan skip ke bagian eksekusi.

Dilansir dari kanakinfosystems.com, Suatu modul Odoo memiliki elemen - elemen seperti:
  • objek atau model
  • view
  • controllers
  • static web data
Agar teratur dan terlihat rapih, umumnya suatu modul Odoo mengategorikan file nya kedalam subfolder, yaitu :
  • Controllers
  • Data
  • Models
  • Report
  • Security
  • Static
  • Views
  • Wizard
dimana setiap folder wajib memiliki __init__.py sebagai aksesor file Python dari setiap folder.

Di direktori root modul Odoo, wajib memiliki __manifest__.py yang menyimpan konfigurasi dan metadata dari modul. parameter yang biasanya terdapat pada __manifest__.py adalah, namun tidak terbatas pada :
  • Name : Nama modul
  • Version: Versi modul (dan bisa mencantumkan versi Odoo)
  • Author: Nama pembuat modul
  • Website: Situs dari pembuat modul
  • Summary: Penjelasan singkat mengenai modul
  • Description: Penjelasan fungsional modul
  • Depends : Dependensi dari modul
  • Data: Daftar file .xml dan .csv yang akan digunakan oleh modul
  • Licence: Lisensi dari modul
  • Installable, Application and auto-install.
Dalam model untuk suatu modul Odoo, anda dapat menemukan beberapa jenis parameter untuk field. 
Jika anda familiar dengan model relasional basis data, parameter ini merupakan definisi column untuk tabel. 
Jika anda pernah mempelajari pemrograman web dengan Django dan bekerja dengan models, Odoo memiliki parameter field yang serupa, yaitu :
  • Character
  • Integer
  • Float
  • Text
  • Html
  • Selection
  • Many2one
  • One2many
  • Many2many
Setelah membuat model, kita perlu menyediakan view untuk mendefinisikan bagaimana model tersebut akan ditampilkan. Jenis - jenis view yang tersedia dalam Odoo adalah, namun tidak terbatas pada:
  • Form view: Tampilan formulir untuk melihat detail, mengubah, atau menambah objek dari model
  • Tree/List view: Tampilan daftar berupa tabel dari model
  • Kanban View: Menampilkan masing - masing objek dari model dalam bentuk kartu
  • Graph view: Menampilkan model dalam grafik
  • Search view: Menampilkan model dalam mode pencarian.
Postingan ini tidak akan membahas setiap elemen dengan detail. Penjelasan lebih lanjut akan disediakan pada postingan - postingan berikutnya ataupun dapat anda cari dari forum Odoo 10.

Eksekusi

Kita akan membuat modul Odoo 10 yang memiliki nama Hello, Happy World!
Modul Hello, Happy World! nantinya akan menyimpan informasi nama, umur, dan deskripsi dalam suatu model dan ditampilkan dalam daftar atau tabel.

1. Pastikan lokasi anda akan mengembangkan modul anda, disini saya menggunakan direktori lain diluar odoo_addons karena folder odoo_addons terletak di dalam drive C yang membutuhkan admin permission untuk perubahannya (baca juga: install modul odoo)
    • Direktori yang saya buat untuk menyimpan modul yang saya kembangkan ada di

2. Daftarkan direktori tersebut kedalam konfigurasi Odoo, supaya Odoo juga mendaftarkan modul yang kita buat.
    • Buka file konfigurasi Odoo

      • File konfigurasi Odoo 10 secara default akan berada di

      • Buka file konfigurasi tersebut, dan tambahkan direktori anda ke addons_path

    • Restart Odoo Service
      • Jika anda menggunakan Windows, anda dapat menggunakan aplikasi manajemen service bawaan dari Windows. Search dan buka melalui start menu "Services".
      • Kemudian, temukan Odoo 10 dan klik restart

    • Pendaftaran konfigurasi selesai
3. Daftarkan odoo-bin kedalam System Environment
    • Jika anda menggunakan Windows, anda dapat membuka setting "Environment Variables" pada

    • Dan menambahkan direktori konfigurasi odoo (C:\Program Files (x86)\Odoo 10.0\server) pada variabel Path

    • Konfirmasi dan simpan, kemudian restart PC atau laptop anda 😊
4. (Akhirnya) Mulai Ngoding
kita akan menggunakan Scaffold untuk menggenerasi struktur awal dari modul kita,
  • Buka direktori modul anda dan buka terminal (di Windows: CMD) dan enter

    odoo-bin scaffold <nama folder modul kita> .
    • odoo-bin merupakan aplikasi dari odoo yang kita manfaatkan untuk membuat modul kita
    • scaffold merupakan fungsi untuk generasi struktur kode template 
    • nama folder modul kita merupakan nama folder dimana modul kita akan ditempatkan, nama folder dapat berupa apa saja dengan syarat tanpa spasi.
    • . (titik) merupakan direktori dimana folder modul kita akan diletakan. kita menggunakan titik karena kita (terminal / CMD kita) sudah berada di dalam folder addons.
  • Dalam tutorial ini, saya akan memasukan modul saya dalam folder bernama "hello_happy"

    odoo-bin scaffold hello_happy .
5. Modifikasi struktur modul anda
  • Kini anda sudah memiliki folder modul didalam direktori addons kalian. didalamnya sudah terdapat folder controllers, demo, models, security, dan views, serta file __init__.py dan __manifest__.py 
    • Penjelasan setiap folder secara ringkas sudah terdapat di atas.
  • Dalam postingan ini, modul Hello, Happy World! merupakan modul sederhana yang hanya berfungsi untuk menampilkan daftar saja.
    • Folder yang akan kita gunakan hanya models dan views, hapus folder lainnya.
      • Di dalam folder views, terdapat 2 file xml, kita hanya akan menggunakan views.xml. Hapus templates.xml
    • File __init__.py dan __manifest__.py akan tetap kita gunakan
      • Di dalam file __init__.py akan terdapat 2 baris
        • Kita belum menggunakan controllers dalam postingan ini, silahkan dihapus
      • Di dalam file __manifest__.py
        • hapus baris yang berisikan:
          • # 'security/ir.model.access.csv',
          • 'views/templates.xml',
          • # only loaded in demonstration mode
                'demo': [
                    'demo/demo.xml',
                ],
6. Ubah manifest atau metadata modul
  • Seperti yang telah dijelaskan di atas, kita akan memberikan informasi pada modul kita. Silahkan ubah parameter name, summary, description, author, dan website sesuai dengan keinginan anda.
# -*- coding: utf-8 -*-
{
    'name'"Hello, Happy World!",
    'summary'"""
        Daftar penonton konser Hello, Happy World!""",
    'description'"""
        Modul ini adalah simulasi mendaftarkan penonton konser dari Hello,  Happy World! dengan harapan semuanya dapat merasakan keseruan  dari menginstall modul sambil mendengarkan lagu Egao no Orchestra.
    """,
    'author'"Arnos-UIERP1",
    'website'"http://www.ptkita-uierp1.my.id/",
    # Categories can be used to filter modules in modules listing
    'category''Education',
    'version''1.0',
    # any module necessary for this one to work correctly
    'depends': ['base'],
    # always loaded
    'data': [
        'views/views.xml',
    ], "application"True
}

7. Modifikasi models\models.py
Di dalam file tersebut, terdapat beberapa barisan kode yang telah "dicomment", modifikasi sesuai kebutuhan anda. Disini saya akan membuat model saya menyimpan informasi nama, umur, dan deskripsi. nama model akan saya biarkan dulu :D

# -*- coding: utf-8 -*-

from odoo import models, fields, api

class hello_happy(models.Model):
    _name = 'hello_happy.hello_happy'

    nama = fields.Char()
    umur = fields.Integer()
    deskripsi = fields.Text()

8. Sesuaikan views\views.xml
views.xml akan mendefinisikan informasi tampilan dari modul yang kita buat. 
Disini, saya akan mencoba untuk :
  • Membuat Tree / List View dan Form View untuk model yang kita buat
  • Memberikan nama menu Hello, Happy World! di bar navigasi untuk mengakses modul kita
  • Menambahkan 1 kategori menu dengan nama Pendaftaran
  • Menambahkan aksi ketika memilih menu Pendaftaran, yaitu membuka View
<odoo>
  <data>
    <!-- explicit list view definition -->
    <record model="ir.ui.view" id="hello_happy.list">
      <field name="name">hello_happy list</field>
      <field name="model">hello_happy.hello_happy</field>
      <field name="arch" type="xml">
        <tree>
          <field name="nama"/>
          <field name="umur"/>
          <field name="deskripsi"/>
        </tree>
      </field>
    </record>

    <!-- actions opening views on models -->
    <record model="ir.actions.act_window" id="hello_happy.view_untuk_model">
      <field name="name">Mendaftar untuk Hello, Happy World!</field>
      <field name="res_model">hello_happy.hello_happy</field>
      <field name="view_mode">tree,form</field>
    </record>

    <!-- Top menu item -->
    <menuitem name="Hello, Happy World!" id="hello_happy.menu_root"/>
   
    <!-- menu categories -->
    <menuitem name="Pendaftaran" id="hello_happy.menu_pendaftaran" 
parent="hello_happy.menu_root"/>
   
    <!-- actions -->
    <menuitem name="List" id="hello_happy.daftar_pendaftaran" 
parent="hello_happy.menu_pendaftaran"
              action="hello_happy.view_untuk_model"/>
   
  </data>
</odoo>

Yang perlu diperhatikan disini adalah susunan parameter id, parent, dan action saling terhubung satu dengan yang lainnya.
  • id top menu item adalah parameter parent untuk menu categories
  • id menu categories adalah parameter parent untuk actions
  • id views on models adalah parameter action untuk actions
Modul sudah bisa diinstall !!!

9. Install Modul (panduan detail bisa dilihat di postingan install modul eksternal)

Selamat, anda sudah berhasil membuat modul pertama anda :D

Berikut merupakan tampilan modul Hello, Happy World!


Modul sudah terdaftar

Informasi modul

Tampilan awal modul

Salah satu entry dari daftar Hello, Happy World!


-----------------
Pesan tambahan:
  1. Anda dapat membuat file - file dan folder tersebut sendiri tanpa menggunakan scaffold
  2. Pada Odoo 10, aplikasi yang disediakan adalah Odoo-bin. Dapat berbeda untuk versi Odoo lainnya.
  3. Saya menggunakan Windows 10 update 2004 dalam pengerjaan ini, jika anda menggunakan OS yang lain, harap menyesuaikan :D.
  4. Terima kasih telah mengikuti, postingan ini agak panjang dan kamu berhasil sampai bawah
-----------------

Sampai bertemu di postingan selanjutnya

Comments