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

Jum'at, 19 Januari 2024


Bertemu lagi dengan kami di tutorial Odoo 16 , Di kesempatan sebelumnya kita sudah melakukan instalasi odoo 16 di ubuntu desktop 22.04 sebagai landasan utama bagi kita untuk melnjutkan ke tutorial selanjutnya. 


Sebelum kita memulai tutorial ini alangkah baiknya kita mengetahi tentang instilah ORM. ORM adalah (Object Relational Mapping) yang berfungsi untuk menjadi penghubung antara pemrograman (python) dan database (postgresql).

Dengan adanya ORM ini, kita dimudahkan untuk berinteraksi dengan database tanpa perlu menulis syntax SQL Query secara langsung, karna sudah di encapsulasi (bungkus). Begitu juga dengan konsep OOP seperti object dan class yang bisa kita gunakan untuk memanipulasi database

Pada pertemuan volume 1 ini, Kita akan membahas teori secara umum ORM Odoo, seperti Model, Field, Method, dan lain sebaginya.

A. Model (Object) 

Model (Object) adalah sebuah struktur dalam database yang berfungsi untuk menentukan bagaimana proses sebuah data di simpan, diatur dan di manipulasi. Sederhananya Model adalah Table di database. Model Odoo dibuat ketika kita menginherit salah satu dari 3 models dibawah ini :

1. Model

Berikut adalah Model yang umumnya di pakai pada Odoo.  Setiap class yang me-nginherite model ini, maka akan membuat sebuah tabel di database yang akan menyimpan data secara permanen. Contoh sebagai berikut.

from odoo import api, fields, models, tools, _

class SaleOrder(models.Model):  
        _name = "sale.order"


2. TransientModel

Model ini akan membuat table yang datanya disimpan dalam waktu tertentu dan akan dihapus secara periodik. Biasanya digunakan untuk wizard, report, dll. Contoh sebagai berikut.

  from odoo import api, fields, models, tools, _

class HrDepartureWizard(models.TransientModel): 
        _inherit = 'hr.departure.wizard'


3.  AbstractModel

Model yang menjadi super class (sumber/leluhur/nenek-moyang) dari model-model yang lain seperti Model dan TransientModel. Model ini tidak membuat table apalagi data, jadi model ini nanti akan di inherit oleh model lainnya. Contoh sebagai berikut.

from odoo import api, fields, models, tools, _

class HrEmployeeBase(models.AbstractModel):
        _name = "hr.employee.base"

Berikut kami beri contoh model lain yang menginherit bisa seperti ini.

from odoo import api, fields, models, tools, _
 
class HrEmployee(models.Model):
         _name = "hr.employee"
         _inherit = ['hr.employee.base']

setiap Install Model yang kita buat merupakan Recordset, Yaitu kumpulan record sebuah model. Recordset bisa kita akses dengan method browser() atau search() dan bisa juga dengan akses field. Contoh dari sebuah recordset table Sale Order dengan 5 record (angka menandakan id recordnya) 

sale.order(1, 2, 3, 4, 5)
 
def sebuah_method(self):
     # Mencetak Recordset
     print(self) # => sebuah.model(1, 2, 3, 4, 5)
    Melakukan Looping Terhadap Recordset
    for record in self:
           # Mencetak Singletons (Single Record)
           print(record) # => sebuah.model(1), lalu sebuah.model(2), lalu sebuah.model(3), ...

Recordset merupakan sebuah fitur yang sangat powerfull, dari sini kita bisa melakukan proses CRUD dan mengakses semua relasi antar table pada sebuah database.

B.  ATTRIBUTE CLASS

Setiap model yang kita buat harus melalui sebuah Class seperti contoh diatas.  Sebuah Class memiliki beberapa attribute. Berikut adalah beberapa attribute yang ada.

1. Auto

Attribute ini memiliki nilai boolean yaitu True dan False. Jika True, maka Model yang di buat akan membuat sebuah table pada database. Untuk Model dan TransientModel secara default attribute auto bernilai True, sedangkan AbstractModel bernilai False. Dari sini kita bisa mengetahui kenapa AbstractModel tidak membuat table pada database

  _auto = True
2. Login Access

Attribute ini memiliki nilai boolean yaitu True dan False. Jika True, maka Model yang dibuat akan membuat 4 field default yaitu

create_date # Berisi Tanggal pembuatan record
create_uid # Berisi User yang membuat record
write_date # Berisi Tanggal perubahan record 
write_uid # Berisi User yang merubah record

Nilai default sama seperti attribute auto yaitu untuk Model dan TranstModel secara default bernilai True, sedangkan AbstractModel  bernilai False 

_log_access = False
3. Table

Table berfungsi untuk memberikan nama table pada database yang di gunakan oleh Modelnya. Attribute ini memiliki nilai string dan menggunakan separator underscore (_) antar kata. Attribute ini jarang di gunakan karena biasanya cukup menggunakan attribute name saja.

_table = ‘ir_actions’
4. Name

Name berfungsi untuk menetapkan nama sebuah Model. Jika tidak ada atribut tabel yang dibuat, penamaan tabel di database akan mengikuti nilai string dari atribut nama ini. Biasanya, nilai atribut ini berupa string dan menggunakan titik (.) sebagai pemisah antar kata, namun saat membuat tabel di database, titik tersebut akan diganti dengan underscore.

_name = ‘sale.order’
5. Description

Description berfungsi untuk Memberikan deskripsi untuk sebuah Model, umumnya berfungsi sebagai penjelasan dari atribut nama. Atribut ini berisi nilai string dan menggunakan spasi sebagai pemisah antar kata.

_description = ‘Sale Order’
6. Inherit

Inherit berfunsi untuk melakukan pewarisan (inheritance) dari model induk. Dengan memanfaatkan kata kunci ini, kita dapat menambahkan atau mengubah elemen-elemen seperti field, method, atribut, dan sebagainya ke dalam model induk sesuai keinginan kita. Atribut ini memiliki nilai berupa string dan menggunakan titik sebagai pemisah antar kata. Informasi lebih lanjut akan dijelaskan secara rinci dalam artikel mendatang.

_inherit = ‘sale.order’
7. Inherits

mendelegasikan (mengalihkan) catatan ke model induk. Ketika kita melakukan pewarisan (inheritance) dan menyesuaikan tabel atau model induk, dengan menggunakan "inherits", kita sebenarnya membuat suatu bidang relasi yang mencerminkan tabel atau model induk. Hal ini memungkinkan kita untuk mengakses semua bidang dari tabel induk pada tabel kita sendiri.

Untuk mengakses fitur ini , Kita harus mendeklarasikan atribut dan membuat field relasi Many2One ke parent. Konsep ini memiliki beberapa kesamaan dengan field reladed.

8. Rec Name

Rec Name berfungsi untuk Berfungsi untuk memberikan label pada suatu catatan, secara default menggunakan field name. Jika field name tidak dibuat, maka kita perlu menggunakan atribut ini dan mengisi nilainya dengan field penggantinya. Atribut ini memiliki nilai berupa string yang merupakan nama suatu field.

_rec_name = ‘product_id’
9. Order

 Order berfungsi untuk menyusun catatan data dalam urutan tertentu. Efeknya terlihat pada tampilan daftar (list/tree view) dan saat melakukan pencarian. Atribut ini memiliki nilai berupa string, yang merupakan nama suatu field, dan bisa mencakup lebih dari satu field. Secara default, sistem pengurutan menggunakan urutan menaik (ascending), sehingga untuk urutan menurun (descending), kita perlu menambahkan kata kunci "desc" setelah nama field. Jika tidak ditentukan, nilai defaultnya adalah field ID.

_order = “date desc, name, id desc”
10. Sql Constraints

Sql constraints berfungsi untuk menerapkan constraint yang ada dalam SQL. Atribut ini memiliki nilai berupa daftar (List), di mana setiap elemennya adalah sebuah Tuple. Setiap Tuple memiliki tiga elemen, yaitu variabel id atau code, fungsi atau sintaks constraint, dan pesan kesalahan yang terkait. Penjelasan rinci mengenai hal ini akan disajikan dalam artikel berikutnya.

_sql_constraints = [(
            'code_company_uniq',
            'UNIQE (code, company_id)',
            'The code of the account must be unique per company !'
)]

C. FIELD

is_reconciled = fields.Boolean(string=’Is Reconciled’)

code = fields.Char(string=’Code’)

subtotal = fields.Float(string=’Subtotal’)

quantity = fields.Integer(string=’Quantity’)

favicon = fields.Binary(string=’Company Favicon’)

Although this Website may be linked to other websites, we are not, directly or indirectly, implying any approval, association, sponsorship, endorsement, or affiliation with any linked website, unless specifically stated herein.

You should carefully review the legal statements and other conditions of use of any website which you access through a link from this Website. Your linking to any other off-site pages or other websites is at your own risk.

flag_image = fields.Image(string=’Image’)

amount_total = fields.Monetary(string=’Total’)

Field monetary membutuhkan field currency_id yang harus many2one ke model res_currency

state = fields.Selection(string=’Status’, selection=[(‘open’, ‘New’), (‘posted’, ‘Process’)])

note = fields.Text(string=’Description’)

These terms of service ("Terms", "Agreement") are an agreement between the website ("Website operator", "us", "we" or "our") and you ("User", "you" or "your"). This Agreement sets forth the general terms and conditions of your use of this website and any of its products or services (collectively, "Website" or "Services").

date_from = fields.Date(string=’Start Date’)

close_date = fields.Datetime(string=’Close Date’)

partner_id = fields.Many2one(‘res.partner’, string=’Customer’)

Although this Website may be linked to other websites, we are not, directly or indirectly, implying any approval, association, sponsorship, endorsement, or affiliation with any linked website, unless specifically stated herein.

You should carefully review the legal statements and other conditions of use of any website which you access through a link from this Website. Your linking to any other off-site pages or other websites is at your own risk.

order_line = fields.One2many(‘sale.order.line’, ‘order_id’, string=’Order Lines’)

invoice_ids = fields.Many2many(‘account.move.line’, ‘sale_order_invoice_rel’, ‘order_line_id’, ‘invoice_line_id’, string=’Invoice’)

Field ini secara tampilan sama seperti field One2many tetapi secara pengisian data sama seperti field Many2one

reference_id = fields.Reference(string=’Reference’, selection=’_selection_target_model’)

Field ini tergolong unik karna menggabungkan 2 field Many2one yang saling berhubungan.

Selain field-field diatas, ada juga field yang lainnya seperti Json, Properties, PropertiesDefinition, dan Many2oneReference. Akan tetapi field ini sangat jarang digunakan dan hanya di gunakan dalam kasus tertentu saja.

Selain field-field diatas, ada juga field yang lainnya seperti Json, Properties, PropertiesDefinition, dan Many2oneReference. Field tersebut sangat jarang di gunakan, tetapi field ini akan di gunakan dalam kasus -kasus tertentu.

Setelah kita mempelajari apa itu model , Atribut Class, dan Field. Di pertemuan selanjutnya kita akan melanjutkanya dengan hal - hal yang lebih menarik lagi, jadi sebelum lanjut ke volume selanjutnya pastikan kalian sudah memahami penjelasan yang sudah di paparkan di atas. Tetap semangat karena odoo itu menyenangkan, sampai bertemu di volume selanjutnya....



Referensi : https://tutorialopenerp.wordpress.com/2023/05/28/odoo-16-technical-documentation-part-1/
Odoo 16 | Instalasi Odoo 16 | Ubuntu Desktop 22.04
Tutorial Odoo 16 | Odoo 16 Manual Installation | Learn Odoo For Beginners