Di part 2 anda sudah berhasil membuat addons kosong yang tidak memberikan efek apapun terhadap aplikasi, kemudian di part 3 saya memberikan contoh addons yang sudah berisi penambahan fungsi, view dan report yang terdiri dari file py dan xml. Dan di part 4 ini kita akan membahas mengenai class, object dan attribute dari object tersebut. Ketiga komponen tersebut ditulis dalam file py.

Komponen kunci dari odoo adalah ORM (Object Relational Mapping). Seperti yang kita tahu ORM secara umum berfungsi untuk menghubungkan OOP dengan database, jadi kita tidak perlu menuliskan syntax SQL secara langsung untuk mengolah data di database (meskipun itu bisa dilakukan). Selain itu ORM juga berfungsi untuk keamanan, karena melalui ORM akan dilakukan filter security sesuai privilege user yang bersangkutan. Berbeda dengan kita menuliskan syntax SQL secara langsung, maka tidak akan dilakukan pengecekan security. Tapi meskipun demikian, ada beberapa kondisi dimana kita perlu untuk menuliskan syntax SQL secara langsung tanpa menggunakan ORM, dengan resiko yang sudah disebutkan sebelumnya.

Contoh penggunaan ORM :

pemeriksaan_ids = self.env['ms.pemeriksaan'].search([
    ('pendaftaran_id','=',me_id.id),
    ('state','!=','cancel')
])

Maka akan select ke database seperti berikut :

select * from ms_pemeriksaan where pendaftaran_id = 0 and state != 'cancel'

Note : angka 0 adalah id transaksi pendaftaran

Business objects dideklarasikan sebagai class python dengan menginherit super class models.

Models mempunyai beberapa attribute, dan attribute yang paling penting adalah _name yang harus ada dan menunjukkan nama dari model tersebut.

Berikut ini penjelasan lebih lanjut mengenai attribute yang dimiliki oleh models :

    • _name : nama model yang harus ada untuk setiap model. Attribute name ini akan menjadi table di database. Misalnya ketika kita menulis _name = "ms.pendaftaran", maka akan membuat table ms_pendaftaran di database. Nama model sering juga disebut object.
      contoh : _name = “ms.pendaftaran”
    • _rec_name : filed alternatif yang akan digunakan sebagai nama ketika relasi ke object lain. Secara default, jika _rec_name tidak ditulis maka akan menampilkan field name.
      contoh : _rec_name = ‘partner_id’
    • _inherit : untuk melakukan fungsi inheritance terhadap model yang sudah dideklarasikan sebelumnya di addons lain. Dapat menambahkan/mengubah field, method, attribute, dll.
      contoh : _inherit = ‘ms.pendaftaran’
    • _order : urutan data yang ditampilkan berdasarkan field tertentu, bisa ascending atau descending. Secara default data diurutkan berdasarkan id asc.
      contoh : _order = ‘name desc’
    • _auto : menunjukkan apakah akan dibuat table di database. Secara default bernilai True, Jika diset False maka harus override init() untuk membuat table. Jika tidak ingin membuat table maka set False dan menggunakan models.AbstactModel.
      contoh : _auto = False
    • _table : nama table yang akan dibuat. Secara default sama dengan _name.
      contoh : _table = ‘tbl_pendaftaran’
    • _inherits : ditulis dengan dictionary {‘nama_object_yg_diinherit’ : ‘field_relasi’}, bisa lebih dari satu. Fungsinya yaitu ketika membuat record di object tersebut, maka akan membuat record juga di object yg diinherit dengan menyimpan id record object yg di inherit pada field relasi (many2one) di current object.
      contoh : _inherits = {‘ms.pendaftaran’:’pendaftaran_id’}
    • _sql_constraints : akan membuat unique constraint di database
      contoh : _sql_constraints = [(‘unique_kode’, ‘unique(kode,name)’, ‘Kombinasi kode dan nama sudah ada, mohon cek kembali !’)]
      Artinya akan muncul warning saat menginput kombinasi kode dan name yang sudah pernah diinput sebelumnya.
    • _log_access : akan menambahkan beberapa field secara otomatis ketika mendefinisikan object baru, secara default bernilai True. Field-field yang ditambahkan tersebut adalah create_date, create_uid, write_date dan write_uid.
      contoh : _log_access = False

Praktek

Sekarang coba kita praktekkan beberapa attribute di atas ke dalam addons puskesmas

Kita akan mengubah _rec_name poli sehingga nama poli yang tampil di form pendaftaran adalah kodenya saja. Ikuti langkah-langkah berikut ini :

Penggunaan _sql_constraint sudah ada pada object “ms.poli” yaitu tidak boleh ada kode yang sama, silahkan anda test dengan menginput kode yang pernah diinput untuk record sebelumnya.

Di “ms.poli” pengurutan data pada tree view masih default, yaitu ‘id asc’. Sekarang coba anda ubah menjadi ‘name asc’ atau ‘name’ saja (jika tidak menuliskan asc/desc maka secara default adalah asc). Maka data yang diinput akan dirutkan berdasarkan nama poli.

Terimakasih, semoga bermanfaat dan CMIIW…

Tutorial odoo/openerp Indonesia