Odoo 16 | Technical Documentation | Volume 1.3
Odoo 16 | Tutorial Odoo 16 | Learn Odoo For Beginners | Odoo Technical Documentation

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

Odoo 16 | Technical Documentation | Volume 1.2
Odoo 16 | Tutorial Odoo 16 | Learn Odoo For Beginners | Odoo Technical Documentation