Halo Mba Maya!
Wah, senangnya bisa bantu rekan-rekan praktisi Odoo di sini. Pertanyaan Mba Maya ini sering banget jadi bahan diskusi seru, karena memang domain dan filter itu sekilas mirip tapi punya peran yang fundamentalnya beda. Yuk, kita bedah tuntas biar lebih cerah!
---
Secara garis besar, perbedaan paling mendasar antara
domain dan
filter di Odoo adalah:
Domain itu seperti "aturan main" yang
menentukan data apa saja yang bisa diakses atau ditampilkan sejak awal. Ini ibarat saringan pertama yang paling ketat, dan seringnya diatur oleh developer atau admin.
Filter itu seperti "alat bantu" untuk pengguna
mempersempit atau mengelompokkan data yang sudah tersedia (yang mungkin sudah disaring oleh domain). Ini lebih interaktif dan fleksibel untuk kebutuhan pencarian spesifik pengguna.
---
Mari kita jelaskan lebih detail:
Apa itu Domain?
Domain adalah sekumpulan kondisi (criteria) yang mendefinisikan data apa saja yang akan diambil atau tersedia dari database Odoo untuk konteks tertentu. Kondisi ini seperti sebuah klausa WHERE dalam query SQL.
- Fungsi Utama: Membatasi pilihan yang tersedia di sebuah field (misalnya di
Many2one atau Many2many), atau menentukan subset data default yang muncul di sebuah list view atau laporan.
- Definisi: Biasanya didefinisikan dalam kode Python (misalnya di atribut
_domain atau computed fields), atau dalam file XML (di atribut domain pada tag <field> atau <record> untuk action window).
- Kapan Digunakan: Ketika Anda perlu menerapkan aturan bisnis yang konsisten dan wajib. Misalnya, sebuah field hanya boleh memilih produk dengan tipe tertentu, atau sebuah tampilan daftar hanya boleh menampilkan dokumen dengan status tertentu secara default.
- Sifat: Lebih ke arah teknis dan seringkali merupakan bagian dari konfigurasi dasar modul. Ini memodifikasi query database secara fundamental.
---
Apa itu Filter (Search Filter)?
Filter (sering disebut juga Search Filter atau Preset Filter) adalah mekanisme yang memungkinkan pengguna mempersempit hasil pencarian dari data yang sudah tersedia. Ini adalah fitur interaktif di search bar Odoo.
- Fungsi Utama: Memberikan opsi pencarian cepat, pengelompokan (Group By), dan kemampuan untuk menyimpan pencarian favorit (Favorite Searches) bagi pengguna.
- Definisi: Didefinisikan dalam XML di dalam tag
<search> (menggunakan tag <filter>) atau dibuat langsung oleh pengguna melalui search bar Odoo.
- Kapan Digunakan: Ketika Anda ingin memberikan fleksibilitas kepada pengguna untuk mencari, memilah, atau mengelompokkan data sesuai kebutuhan ad-hoc mereka. Ini membantu pengguna untuk "menganalisis" data dari berbagai perspektif.
- Sifat: Lebih ke arah user interface dan pengalaman pengguna. Ini tidak mengubah data apa yang bisa diakses oleh Odoo secara fundamental, melainkan mengatur apa yang ditampilkan kepada pengguna dari data yang sudah ada.
---
Perbedaan Mendasar dalam Skenario Praktis:
Kita ibaratkan Odoo ini seperti sebuah perpustakaan besar.
Domain adalah seperti "peraturan perpustakaan" yang bilang, "Untuk rak buku 'Fiksi Ilmiah', kami hanya meletakkan buku yang genre-nya memang Fiksi Ilmiah." Jadi, sejak awal, buku-buku yang bukan Fiksi Ilmiah tidak akan pernah ada di rak itu.
Filter adalah seperti Anda sebagai pengunjung, setelah melihat semua buku di rak 'Fiksi Ilmiah', Anda berkata, "Saya mau cari buku Fiksi Ilmiah yang penulisnya 'Asimov'." Anda sedang menyaring lagi dari buku yang sudah ada di rak.
---
Contoh Kasus Praktis di Odoo:
Kapan Ideal Menggunakan Domain?
Gunakan domain ketika Anda perlu memastikan integritas data atau menerapkan aturan bisnis yang ketat pada tingkat data dasar.
- Contoh 1 (Modul Sales): Di form Sales Order Line, field 'Product' seharusnya hanya menampilkan produk yang bertipe 'Storable Product' atau 'Consumable', dan tidak menampilkan 'Service'.
- Implementasi: Pada definisi field `product_id` di XML view, tambahkan `domain="[('type', 'in', ['product', 'consu'])]"`.
- Mengapa Domain: Karena secara bisnis, kita tidak menjual 'Service' sebagai barang fisik di Sales Order Line, dan pilihan ini harus dibatasi secara permanen dan otomatis.
- Contoh 2 (Modul Inventory/Accounting): Ketika Anda membuka daftar Invoices, Anda ingin agar secara default Odoo hanya menampilkan invoice yang statusnya 'Draft' atau 'Posted', tidak termasuk yang 'Cancelled'.
- Implementasi: Pada action window untuk model 'account.move' (untuk invoice), set atribut `domain="[('state', 'in', ['draft', 'posted']), ('move_type', '=', 'out_invoice')]"`.
- Mengapa Domain: Ini mengatur tampilan default yang paling relevan untuk sebagian besar pengguna, memastikan mereka tidak langsung melihat data yang mungkin sudah tidak aktif.
Kapan Ideal Menggunakan Filter?
Gunakan filter ketika Anda ingin memberikan fleksibilitas pencarian dan analisis kepada pengguna tanpa mengubah aturan dasar data.
- Contoh 1 (Modul Sales - Untuk Search Box Advance): Di daftar Sales Orders, Anda ingin ada tombol cepat di search bar untuk menampilkan "Pesanan Saya" (order yang ditugaskan ke pengguna yang sedang login) atau "Penawaran Terbuka".
- Implementasi: Dalam tag
<search> di XML view Sales Order, tambahkan:
<filter string="Pesanan Saya" name="my_sales" domain="[('user_id', '=', uid)]"/>
<filter string="Penawaran Terbuka" name="open_quotations" domain="[('state', 'in', ['draft', 'sent'])]"/>
- Mengapa Filter: Ini adalah opsi pencarian yang berguna dan sering dipakai, tapi bukan batasan data yang wajib untuk semua kondisi. Pengguna bisa memilih menggunakannya atau tidak.
- Contoh 2 (Modul Inventory): Seorang manajer gudang ingin melihat semua produk yang stoknya di bawah minimum, lalu mengelompokkannya berdasarkan 'Lokasi Gudang'.
- Implementasi: Manajer bisa menggunakan search bar, mengetik kondisi 'Quantity On Hand < Min Quantity', lalu memilih 'Group By' 'Location'.
- Mengapa Filter: Ini adalah kebutuhan analisis data yang dinamis dan ad-hoc. Manajer bisa menggabungkan berbagai kriteria pencarian dan pengelompokan sesuai kebutuhannya saat itu. Dia juga bisa menyimpan kombinasi ini sebagai Favorite Search.
---
Kesimpulan untuk Mba Maya:
Ketika Mba Maya berurusan dengan kustomisasi tampilan data dan pencarian:
- Jika tujuannya adalah untuk memastikan data yang ditampilkan atau dipilih selalu sesuai dengan aturan bisnis tertentu, sehingga data yang tidak relevan tidak pernah muncul, maka gunakan domain. Domain ini biasanya didefinisikan secara hardcoded (via XML atau Python) di dalam modul atau action window.
- Jika tujuannya adalah untuk memberikan alat bantu kepada pengguna untuk menelusuri, mencari, dan menganalisis data yang sudah ada dengan berbagai kriteria sesuai kebutuhan mereka, maka gunakan filter (dengan mendefinisikan
<filter> dan <field> di dalam tag <search>).
Semoga pencerahan ini membantu Mba Maya dan tim IT di Jakarta untuk lebih mudah menentukan kapan harus menggunakan domain dan kapan filter di Odoo, ya! Selamat ngoprek Odoo!