Pada bagian 4, sudah kita bahas bagaimana membuat field suatu model, serta tipe datanya. Pada bagian ini kita akan membahas tentang field parameter.
Field parameter pada dasarnya hanyalah parameter yang dimasukkan pada suatu fungsi atau method. Kadang ada yang menyebut argumen atau atribut. Yah pada dasarnya membuat field sama saja dengan memanggil konstruktor suatu class bukan. Field parameter digunakan untuk mengatur fitur suatu field, misal nilai default, label, tooltip, panjang, fitur tidak bisa diedit, fitur harus diisi dll.
Anda dapat menulis field parameter dengan 2 cara, yaitu :
-
Dengan Python
Berikut ini adalah contoh penulisan field Float dengan parameter menggunakan Python.
from odoo import api, fields, models, _ class Konsinyasi(models.Model): _name = "konsinyasi" jumlah = fields.Float("Jumlah",(16,2))
Script diatas artinya kita membuat field “jumlah” dengan tipe data Float, dengan label “Jumlah” dan maksimal 2 angka dibelakang koma. Penulisan seperti ini memang tidak masalah, tapi tidak saya sarankan. Karena bagaimana jika kita terbalik menuliskannya seperti ini ?
from odoo import api, fields, models, _ class Konsinyasi(models.Model): _name = "konsinyasi" jumlah = fields.Float((16,2),"Jumlah")
Script diatas akan menyebabkan error, karena urutan yang salah. Urutan yang benar jika kita membuat field Float adalah (string/label,digits). Saran saya, selalu gunakan “Named Parameter”. Dengan “Named Parameter” di posisi manapun kita meletakkan parameter, Odooo (dalam hal ini Python) akan dengan tepat membaca parameter kita. Sebagai contoh lihat script dibawah ini.
jumlah = fields.Float(digits=(16,2),string="Jumlah") jumlah = fields.Float(string="Jumlah",digits=(16,2))
Dalam kode diatas walaupun kita membalik urutan parameter, tidak akan menyebabkan error, karena menggunakan “Named Parameter”.
-
Dengan XML
Kita juga bisa menulis field parameter dalam bentuk xml. Field parameter yang ditulis dalam bentuk xml, biasanya lebih fleksibel. Misal pada module Sales, jika yang membuat transaksi adalah manager maka bisa input diskon, jika bukan, tidak bisa input diskon. Penulisan field parameter dalam bentuk xml akan dibahas pada bagian yang lain. Pada bagian ini kita fokus pada Python.
Berikut ini adalah beberapa contoh Field Parameter Odoo.
-
String
String bisa juga disebut label. Yaitu kata-kata sebelum form input suatu field. Jika anda tidak menulis field parameter ini, Odoo secara otomatis akan membuat label sesuai dengan nama field. Berikut ini contoh penggunaannya.
makelar = fields.Char(string="Nama Makelar")
Pada view akan tampil seperti ini.
-
Help
Help ini seperti tooltip. Jika kita menggerakkan mouse pada label suatu field, akan muncul keterangan diatasnya. Contoh penggunaanya.
makelar = fields.Char(string="Nama Makelar",help="Masukkan nama makelar")
Pada view akan tampil seperti ini.
-
Readonly
Jika anda men-set parameter ini jadi True, user tidak akan bisa mengubah nilai suatu field. Nilai default parameter ini adalah False, artinya user bisa mengubah nilainya secara default. Berikut ini contoh penggunaannya.
makelar = fields.Char(string="Nama Makelar",readonly=True) keterangan = fields.Text()
Pada view akan tampil seperti ini.
-
Required
Field parameter ini digunakan untuk men-set apakah field wajib diisi atau tidak. Jika diset True form tidak akan bisa disimpan jika field ini belum diisi. Default False, sehingga tidak harus diisi. Contoh penggunaanya.
makelar = fields.Char(string="Nama Makelar",required=True)
-
Default
Gunakan field parameter ini jika anda ingin men-set nilai default suatu field, jika user tidak mengisinya secara manual. Misal pada penjualan jika user tidak mengisi jumlah, maka jumlah akan diisi oleh sistem dengan nilai 10. Jika user melakukan perubahan pada nilainya misal 5, maka nilai yang dimasukkan oleh user adalah nilai yang tersimpan didatabase. Ada 3 cara penggunaan field parameter ini, yaitu :
-
Fixed Value
Seperti namanya nilai default adalah tetap. Contoh penggunaanya
jumlah = fields.Float(default=10) makelar = fields.Char(default="Budi")
-
Lamda
Lebih mudahnya Lambda adalah anonymous function atau function yang tidak bernama. Lihat disini untuk informasi lambda yang lebih detail. Berikut ini adalah contoh parameter default dengan lambda.
# nilai default adalah random dari 0 - 9 potongan = fields.Float(default=lambda self: randint(0,9)) # nilai default adalah id dari user yang login id_user = fields.Integer(default=lambda self: self.env.user.id)
-
Method
Penggunaan lambda sangat terbatas, yaitu dibatasi hanya satu ekspresi saja. Jika anda menginginkan nilai default dengan perhitungan yang lebih kompleks, misal harus query ke tabel lain gunakan method sebagai nilai default. Berikut ini contoh penggunaanya.
def nilai_default_potongan(self): # tempatkan logic program anda disini # jangan lupa return nilainya nilai_random = randint(0,9) return nilai_random + 10 potongan = fields.Float(default=nilai_default_potongan)
PENTING !!!. Function / method default anda harus ditulis sebelum anda menulis kode field seperti diatas. Jika function / method default anda ditulis sesudah anda menulis field akan terjadi error.
-
Fixed Value
-
Groups
Field parameter Groups digunakan untuk membatasi hak akses. Misal untuk membatasi hanya user tertentu yang bisa melihat harga jual. Hal ini akan dibahas pada bagian yang lain.
-
Copy
Field parameter ini digunakan untuk menentukan jika user menekan tombol “Duplicate” apakah nilai field ini di copy atau tidak. Default True, artinya nilainya dicopy ke form yang baru jika user menekan tombol “Duplicate”. Contoh penggunaanya.
quantity = fields.Float(copy=False)
-
Compute
Field parameter ini digunakan untuk melakukan perhitungan secara otomatis. Misal user hanya bisa input jumlah penjualan dan harga, sedangkan total harga dibuat readonly agar tidak bisa diedit oleh user. Maka gunakan field parameter ini untuk mengisi nilai total harga tadi secara otomatis. Contoh penggunaanya.
jumlah = fields.Integer() harga = fields.Float() total_harga = fields.Float(compute="compute_total_harga", readonly=True) @api.one @api.depends('jumlah','harga') # jalankan method ini, jika nilai jumlah dan harga berubah def compute_total_harga(self): for record in self: record.total_harga = record.jumlah * record.harga
PENTING !!!. Berbeda dengan field parameter default, anda bisa menulis function / method compute dimana saja asalkan masih dalam satu class, dan anda harus membalutnya dengan single quote (‘) atau double quote (“). Dan nilai field yang menggunakan parameter compute secara default tidak disimpan didatabase oleh Odoo. Tetapi function / method compute akan dijalankan tiap anda memanggil field ini baik dari view atau report.
-
Store
Field parameter ini digunakan untuk menentukan apakah nilai suatu field disimpan didatabase atau tidak. Defaultnya adalah True, artinya selalu disimpan, kecuali field yang menggunakan field parameter compute. Jika anda menggunakan field parameter compute dan ingin menyimpan nilainya didatabase, anda harus menulis field parameter ini secara manual. Contoh penggunaanya.
jumlah = fields.Integer() harga = fields.Float() total_harga = fields.Float(compute="compute_total_harga", readonly=True, store=True) @api.one @api.depends('jumlah','harga') # jalankan method ini, jika nilai jumlah dan harga berubah def compute_total_harga(self): for record in self: record.total_harga = record.jumlah * record.harga
-
Size
Field parameter ini biasanya digunakan untuk membatasi panjang suatu karakter, terutama pada field dengan tipe data Char. Contoh penggunaanya.
# panjang maksimal adalah 3 karakter kode_makelar = fields.Char(size=3)
Diatas adalah field parameter Odoo yang sebaiknya anda tahu. Tentu saja masih ada field parameter lain, terutama yang berhubungan dengan Relational Field, tapi akan dibahas pada bagian yang lain.