Rabu, 24 Januari 2024
Bertemu lagi dengan kami di tutorial Odoo 16 , Di kesempatan sebelumnya kita sudah menyelesaikan tutorial Odoo 16 pada volume 1.2. Dan pada kesempatan kali ini kita akan melanjutkan tutorial sebelumnya yang sudah kita tunggu - tunggu. Baik tanpa berlama - lama kita masuk ke tutorialnya.
F. AUTOMATIC FIELD
Sesuai dengan judulnya "Automatic Field" Field - field di bawah ini akan otomatis tercipta ketika kita membuat model baru walaupun kita tidak mendefinisikanya.
Field yang berfungsi sebagai primary key, akan otomatis auto increment dan bersifat unik
Field yang memberikan informasi user siapa yang membuat record
Field yang memberikan informasi tanggal berapa record dibuat
Field yang memberikan informasi user siapa yang merubah record terakhir kali
Field yang memberikan informasi tanggal berapa record dirubah terakhir kali
G. SPESIAL FIELD
Spesial Field merupakan, Field yang akan di gunakan oleh beberapa atrribute dan Method dari ORM. Hal ini membuat Spesial Field harus di ikut sertakan setiap pembuatan model baru
Penjelasan lengkapnya pada bagian _rec_name
Digunakan untuk proses Stages atau Approval dan dipakai oleh attribute field States
Digunakan untuk fitur Multi Company dan attribute field check_company
Digunakan oleh button toggle visibility, defaultnya bernilai True, jika di set False maka record tidak dapat dilihat dan dicari
H. DECORATORS
A. @api.constrains()
Method ini memiliki decorator, Hal ini berfungsi untuk untuk membuat constraints (pengecekan batasan/aturan) value sebuah field.
@api.constrains('rounding')
def validate_rounding(self):
for record in self:
if record.rounding <= 0:
ise ValidationError(_("Please set a strictly positive rounding value."))
B. @api.onchange()
Method yang memiliki decorators ini akan menjalankan perintah action ketika user melakukan perubahan value dari Field, Pada form view.
@api.onchange('phone', 'country_id', 'company_id')
def _onchange_phone_validation(self):
if self.phone:
self.phone = self.phone_format(self.phone)
C. @api.depends()
Method yang memiliki decorators ini cenderung akan melakukan action ketika akan melakukan perubahan value dari field yang memiliki atrribute compute.
product_qty = fields.Float(compute=’_compute_product_qty’, string=’Product Qty’, digits=’Product Unit of Measure’)
@api.depends('product_id', 'product_uom', 'product_uom_qty')
def _compute_product_qty(self):
for line in self:
if not line.product_id or not line.product_uom or not line.product_uom_qty:
line.product_qty = 0.0
continue
line.product_qty = line.product_uom._compute_quantity(line.product_uom_qty, line.product_id.uom_id)
I. ENVIRONMENTS
Environments di gunakan untuk menyimpan beberapa informasi yang di gunakan oleh ORM seperti, Database cursor, User aktif, Dll. Setiap record set memiliki sebuah environments yang tidak bisa di rubah tetapi dapat kita akses dengan keyword (env)
Mendapatkan informasi user yang aktif
self.env.user
Berfungsi untuk melakukan proses query
self.env.cr.execute(‘SELECT indexname FROM pg_indexes WHERE indexname = %s’, (index_name))
Berfungsi untuk mendapatkan parameter
self.env.context.get(‘account_id’)
Mendapatkan record data yang didefiniskan pada file xml (view, groups, reports, dll) dengan memberikan xml_id nya
self.env.ref(‘base.view_users_form’)
Mendapatkan informasi company yang aktif
self.env.company
Mendapatkan informasi code bahasa
self.env.lang
J. ORM METHODS
1. Create()
Create() Berfungsi untuk membuat sebuah record baru.
self.env[‘res.partner’].create({
‘name’: ‘Muhammad Aziz’,
‘city’: ‘Bekasi’,
’email’: ‘abdulaziz.sbs@gmail.com’,
})
2. Copy()
Copy() Berfungsi untuk menduplicate sebuah record
self.partner_id.copy()
3. Write()
Write() Berfungsi untuk merubah value field dari record
self.partner_id.write({
‘name’: ‘Umar’,
’email’: ‘umar@gmail.com’,
})
4. Flush()
Flush Berfungsi untuk menjalankan proses-proses perhitungan dan update yang pending pada semua model
self.env[‘res.partner’].flush()
5. Browse()
Browser() Berfungsi untuk membuat sebuah recordset dari id record yang diberikan
self.env[‘res.partner’].browse([1, 2, 3, 4, 5])
6. Search()
Search() Berfungsi untuk melakukan pencarian record berdasarkan value field
self.env[‘res.partner’].search([(‘name’, ‘ilike’, ‘muhammad’), (‘city’, ‘=’, ‘bekasi’)])
7. Unlink()
Unlink() Berfungsi untuk menghapus record
self.partner_id.unlink()
8. Search Count()
Search count() Berfungsi untuk melakukan pencarian record berdasarkan value field dan menghitung total record yang didapat.
self.env[‘res.partner’].search_count([(‘name’, ‘ilike’, ‘muhammad’), (‘city’, ‘=’, ‘bekasi’)])
9. Read()
Read() Berfungsi untuk membaca value field dari record.
self.partner_id.read()
self.partner_id.read([‘city’])
10. Search Read()
Search Read() yaitu Fungsi gabungan antara search() dan read(). Berfungsi untuk mencari record berdasarkan domainnya dan membaca value field dari record yang di dapat
self.env[‘res.users’].search_read([(‘id’, ‘=’, 2)], [’email’])
K. RECORDSETS OPERATIONS
Record set yang satu ini memiliki banyak kelebihan, Selain berfungsi untuk menampung data sebagai object. Recordset juga memiliki beberapa operations yang bisa kita gunakan agar lebih maksimal dalam proses development.
1. Filltered()
Filltered berfungsi untuk memfilter recordset berdasarkan parameter yang di berikan.
value = data_sales.filtered(‘partner_id.is_company’)
print(value) #> sale.order(1, 4, 13, 20)
2. Mapped()
Mapped() berfungsi untuk membuat list value dari pemetaan record set.
value = data_partner.mapped(‘name’)
print(value) #> [‘Umar’, ‘Utsman’, ‘Ali’, ‘Hamzah’]
3. Sorted()
Sorted() berfungsi untuk mengurutkan recordset berdasarkan parameter yang di berikan
value = data_partner.sorted(‘name’)
print(value) #> sale.order(20, 4, 1, 13)
L. WIDGET
Terdapat banyak sekali Widget yang dapat kita gunakan, Di sini kami akan memberi beberapa contoh widget yang dapat di gunakan.
abstract
input
integer
boolean
date
datetime
daterange
dll
selection
radio
selection_badge
many2one
many2one_barcode
many2one_avatar
many2many
timezone_mismatch
report_layout
iframe_wrapper