Odoo Technical Test
Incident Log System - BeraniExpress
Target Platform: Odoo 18.0 (Latest Version)
I. Deskripsi Proyek
BeraniExpress adalah penyedia layanan logistik nasional. Dalam operasional harian, tim lapangan sering menemui kendala teknis maupun operasional, seperti paket yang rusak, keterlambatan armada, atau kendala kesehatan kurir. BeraniExpress membutuhkan sistem pencatatan insiden internal yang rapi untuk menangani kendala operasional (keterlambatan, barang tertinggal, atau isu kesehatan kurir/pelanggan) tanpa alur yang kompleks. Peserta diminta membuat modul sederhana untuk mengelola siklus hidup insiden tersebut.
Goals: Anda diminta untuk membangun modul Odoo mandiri guna mencatat dan mengelola insiden tersebut. Fitur ini akan membantu tim operasional melakukan tindak lanjut (follow-up) secara terstruktur hingga masalah dinyatakan selesai.
II. Prasyarat (Prerequisites)
-
Menguasai pengembangan modul Odoo (Python & XML).
-
Memiliki lingkungan kerja Odoo 18.0 terinstal secara lokal.
-
Memahami penggunaan Git untuk kontrol versi.
-
Memahami standar penamaan (naming convention) Odoo.
III. Spesifikasi Teknis (Mandatory)
1. Pengembangan Model Data
Buat model courier.incident di dalam modul courier_core dengan atribut berikut:
| Field | Label | Tipe Data | Ketentuan (Berdasarkan File Asli) |
name |
Judul Insiden | Char | Required. |
customer_id |
Pelanggan | Many2one | Relasi ke courier.customer (Required). |
shipment_id |
No. Resi | Many2one | Relasi ke courier.shipment (Transaksi). |
incident_type |
Tipe | Selection | 'health', 'lost_item', 'delay', 'other' (Default: 'other'). |
incident_datetime |
Waktu | Datetime | Required, default: sekarang. |
severity |
Urgensi | Selection | 'low', 'medium', 'high' (Default: 'low'). |
description |
Kronologi | Text | Detail kejadian. |
followup_note |
Catatan | Text | Tindakan yang diambil. |
state |
Status | Selection | 'draft', 'followup', 'done' (Default: 'draft'). |
resolved_at |
Selesai pada | Datetime | Read only (Hanya terisi otomatis saat Done). |
2. Antarmuka Pengguna (UI/UX)
Gunakan standar desain Odoo 18 untuk komponen berikut:
-
Tree View: Menampilkan daftar insiden dengan kolom status yang jelas.
-
Form View: Menyediakan area input data lengkap dengan Status Bar di bagian atas.Tata letak yang rapi, mencakup header (status bar), sheet (informasi utama), dan chatter (opsional).
-
Menu Hierarchy: Buat menu "Log Insiden" yang mudah diakses di bawah
menu_courier_root(atau root menu utama) dengan action yang mengarah ke kedua view di atas.
3. Logika Bisnis (State Workflow)
Tambahkan metode Python untuk fungsi tombol pada Form View:
-
Button "Mark Follow-up": Mengubah
statemenjadi'followup'. -
Button "Resolve": Mengubah
statemenjadi'done'dan mengisiresolved_atdengan waktu sekarang (fields.Datetime.now()).
IV. Tantangan Tambahan (Opsional)
Untuk nilai tambah, implementasikan fitur berikut:
-
SQL Constraints: Tambahkan
_sql_constraintsuntuk mencegah duplikasi data dengan kombinasi:customer_id+incident_type+incident_datetime. -
UI Decorations: Pada Tree View, gunakan atribut dekorasi baris:
-
decoration-warninguntuk status'followup'. -
decoration-successuntuk status'done'.
-
-
Python Validation: Gunakan decorator
@api.constrainsuntuk memastikan jika status diubah menjadi'done', makafollowup_notewajib diisi.
V. Pengiriman & Penilaian
1. Metode Pengiriman
Waktu Pengerjaan: 2 hari kalender (48 jam).
Kriteria Lulus: Kode dapat diinstal tanpa error, fungsionalitas tombol berjalan sesuai spesifikasi, dan riwayat commit di GitHub terkelola dengan baik.
Hasil pekerjaan wajib dikumpulkan dalam bentuk Link Repositori GitHub Publik. Pastikan repositori Anda berisi:
-
Source code modul lengkap.
-
Hanya diperbolehkan menggunakan 1 model, 1 menu, 1 tree view, dan 1 form view.
-
Penggunaan AI diperbolehkan, namun konsistensi penamaan ID XML dan pola modul sangat diutamakan.
-
-
Struktur Folder:
-
models/courier_incident.py(Jangan lupa update__init__.py). -
views/courier_incident_views.xml(Pastikan terdaftar di__manifest__.py). -
security/ir.model.access.csv(Akses dasar untuk internal user).
-
-
Kualitas Commit:
-
Gunakan Conventional Commits (contoh:
feat: add incident model,fix: validation on resolved state). -
Hindari melakukan satu commit besar untuk semua file (Atomic Commits).
-
-
README.md: Tuliskan langkah manual singkat untuk menguji fungsi (Create -> Mark Follow-up -> Resolve).
2. Kriteria Penilaian Git (Commit Quality)
Cara Anda mengelola kode akan menjadi poin penilaian signifikan:
-
Conventional Commits: Gunakan format pesan commit yang standar, contoh:
feat: add incident logic and state transitions. -
Atomic Commits: Lakukan commit secara bertahap (misal: commit model, lalu commit view secara terpisah).
-
Clean History: Pastikan riwayat commit rapi dan mencerminkan progres pengerjaan yang logis.
VI. Referensi
Gunakan tautan berikut sebagai panduan teknis selama pengerjaan:
-
Odoo 18 Development Tutorial:
https://www.odoo.com/documentation/18.0/developer/tutorials/server_framework_101.html
-
Odoo ORM API Reference:
https://www.odoo.com/documentation/18.0/developer/reference/backend/orm.html
-
Odoo Views & UI:
https://www.odoo.com/documentation/18.0/developer/reference/backend/views.html
-
Git Commit Standards:
Semoga berhasil dengan Odoo Technical Test Anda!
