Sync from Odoo
Membuat organisasi dari Odoo dengan Import from Odoo, lalu memperbaruinya dengan Sync from Odoo. Node disusun dari atasan dan Job Title karyawan Odoo.
Gambaran Umum
Struktur organisasi dari Odoo dibuat dan diperbarui lewat dua fitur di Organization Structure:
- Import from Odoo membuat organisasi baru dari satu company Odoo.
- Sync from Odoo memperbarui organisasi hasil Import itu dengan data Odoo terbaru.
Keduanya membaca karyawan Odoo beserta Manager dan Job Title-nya, lalu menyusun kursi jabatan:
- Satu node adalah satu kursi jabatan. Orang dengan Job Title sama di bawah kursi atasan yang sama berbagi satu kursi.
- Nama kursi diambil dari Job Title karyawan. Bila kosong, dari Job Position. Bila keduanya kosong, kursi bernama "No job title".
- Garis lapor di bagan mengikuti Manager di Odoo. Atasan seseorang adalah anggota kursi di atasnya.
- Departemen Odoo tidak menjadi node. Departemen tampil sebagai label kecil di kursi.
- Setiap karyawan menjadi anggota kursinya. Karyawan dicocokkan dengan akun AlurKerja lewat email kerja di Odoo.
Satu organisasi hanya punya satu mode:
| Organisasi dibuat dengan | Sync from Odoo | Ubah node dan anggota di Studio |
|---|---|---|
| Blank organization | Tidak tersedia | Bebas, seperti biasa |
| Import from Odoo | Tersedia | Terkunci. Ubah di Odoo, lalu sync. |
Fitur bertahap
Fitur ini bawaannya mati. Admin instalasi harus menyalakannya di Studio, company-profile-service, dan integration-service. Lihat Feature Flag.
Syarat
- Ada koneksi Odoo di Integration › Odoo. Lihat Odoo Integrations.
- User Odoo pada koneksi itu bisa membaca departemen (
hr.department) dan karyawan (hr.employee). Modul Employees harus terpasang di Odoo. - Manager dan Job Title (atau Job Position) karyawan sudah diisi di Odoo. Karyawan tanpa Manager di company yang sama dianggap tidak punya atasan.
- Anda login sebagai Admin SOP atau Owner. Peran lain tidak melihat pilihan Import from Odoo maupun tombol Sync from Odoo.
Import from Odoo
Buka modal New Organization
Di halaman daftar Organization Structure, klik New Organization. Pada Start with, pilih Import from Odoo. Isi Name, lalu klik Continue.
Belum ada yang dibuat pada langkah ini. Modal mengingatkan: "Nothing is created until you apply."

Jalankan dialog Import from Odoo
Dialog Import from Odoo terbuka dengan empat langkah: Connection → Fetch → Review → Apply. Penjelasan tiap langkah ada di Langkah Dialog.
Buka organisasi baru
Setelah Apply, layar Odoo import applied tampil. Klik Done. Organisasi baru langsung terbuka.
Hasil Import:
- Organisasi baru dengan nama dari kolom Organization name.
- Satu node akar bernama company Odoo. Kursi teratas diletakkan di bawahnya.
- Organisasi lain tidak berubah.
- Bila ini organisasi pertama di workspace, tipenya My Organization.
Organisasi, node akar, dan seluruh kursinya ditulis dalam satu transaksi. Bila satu bagian gagal, organisasinya juga tidak dibuat.
Sync from Odoo
Tombol Sync from Odoo hanya ada di halaman struktur organisasi hasil Import from Odoo. Di sebelahnya tertulis kapan sync terakhir berjalan (Synced from Odoo · tanggal), atau Not synced yet. Daftar organisasi juga menampilkan keterangan Synced from Odoo · tanggal.
Organisasi yang dibuat dengan Blank organization tidak punya tombol ini. Sync lewat API ke organisasi itu juga ditolak dengan pesan "Only an organization created by Import from Odoo can sync. Create a new organization with Import from Odoo."
Sync ulang memperbarui node yang sudah ada. Kursi yang masih ada di Odoo tetap memakai node yang sama. Kursi baru ditambahkan. Kursi yang hilang ditandai Not in Odoo.
Langkah Dialog
Import from Odoo dan Sync from Odoo memakai empat langkah yang sama: Connection → Fetch → Review → Apply. Connection, Fetch, dan Review hanya membaca. Footer dialog selalu mengingatkan: "Nothing is changed until you apply."
Connection
Pada Import from Odoo, isi tiga pilihan:
- Odoo connection: koneksi dari Integration › Odoo. Sistem langsung menguji login dan hak baca departemen serta karyawan. Bila lolos, muncul "Connected to Odoo … This user can read departments and employees."
- Odoo company: perusahaan di Odoo yang karyawannya diambil.
- Organization name: nama organisasi baru. Isinya diambil dari Name di modal. Bila kolom ini kosong saat company dipilih, kolom diisi nama company Odoo.

Pada Sync from Odoo, koneksi dan company sudah dikunci sejak Import. Ketiganya tampil di kotak Locked after the first sync: Connection, Odoo company, dan Parent node. Parent node adalah node akar organisasi.

Bila uji koneksi gagal, tombol Fetch from Odoo tetap mati. Periksa koneksinya di Integration › Odoo, atau hak baca user Odoo-nya.
Fetch
Klik Fetch from Odoo. Sistem membaca departemen dan karyawan dari Odoo, lalu membandingkannya dengan organisasi tujuan. Belum ada yang ditulis pada langkah ini.

Review
Review menampilkan titik mulai, ringkasan angka, dan tiga tab: Positions, Employees, dan Skipped. Judul ringkasan berbunyi First sync pada Import, atau Changes since the last sync pada sync berikutnya. Di sinilah Anda memeriksa hasilnya sebelum apa pun disimpan. Penjelasan tiap bagian ada di Isi Review.
Footer menyebut jumlah perubahan yang akan ditulis, misalnya "5 changes will be written in one transaction." Bila tidak ada yang berubah, muncul "Everything is up to date." Bila ada peringatan yang memblokir, muncul "Apply is locked. See the warning above."
Apply
Klik Apply. Sistem membaca Odoo sekali lagi, lalu menulis semua perubahan dalam satu transaksi. Bila satu bagian gagal, tidak ada yang tersimpan sama sekali. Biarkan jendela tetap terbuka selama proses ini.

Setelah selesai, layar Odoo sync applied (atau Odoo import applied) menampilkan jumlah perubahan yang ditulis, waktu sync, dan ringkasan angkanya. Klik Done untuk menutup dialog.

Isi Review
Titik Mulai
Pada Import, pilih bagian Odoo yang diambil lewat Start from:
- Whole company: semua karyawan aktif company itu. Karyawan tanpa Manager menjadi kursi teratas.
- Satu orang: orang itu dan semua yang melapor kepadanya, langsung maupun lewat atasannya. Daftar hanya memuat orang yang punya bawahan, dengan format "Nama · Job Title".
Setelah memilih orang, muncul centang Leave [nama]'s position out and start below it. Bila dicentang, kursi orang itu tidak dibuat. Kursi bawahan langsungnya diletakkan tepat di bawah node akar.
Mengganti pilihan menjalankan Review ulang, jadi pohon dan ringkasannya ikut berubah.
Dikunci setelah Import
Titik mulai tidak bisa diganti setelah Import. Pada sync berikutnya, Review menampilkan kotak Start person berisi titik mulai yang terkunci, misalnya "Starts from … and everyone who reports to them." atau "Syncs the whole Odoo company.", diikuti "Locked after the first sync."
Bila orang puncak sudah tidak aktif di Odoo, Review memberi peringatan dan Apply dikunci: "The start person (Odoo employee id …) is not an active employee of this Odoo company. Nothing can be applied until they are active again in Odoo."
Tab Positions
Satu baris per kursi, berbentuk pohon. Baris paling atas adalah node akar, dengan keterangan "new top node, created on Apply" pada Import, atau "existing node in AlurKerja" pada sync. Label departemen tampil di samping nama kursi.
Di kanan atas ada pilihan tampilan List dan Tree. List adalah bawaan. Tree menggambar rencana yang sama sebagai bagan baca-saja: tanda status, label departemen, dan jumlah orang per kursi. Kursi Not in Odoo berwarna kuning. Klik Fit to view untuk memuat seluruh pohon. Scroll untuk zoom, geser untuk berpindah.
| Tanda | Arti |
|---|---|
| New | Kursi baru. Node baru dibuat. |
| Updated | Nama atau label departemen kursi berubah, misalnya "Department now …". |
| Not in Odoo | Kursi tidak ada lagi di Odoo. Node-nya tetap ada dan ditandai "Not in Odoo". |
| Back in Odoo | Kursi yang tadinya Not in Odoo ada lagi di Odoo. |
| No change | Tidak ada yang berubah. |
Sebuah kursi dikenali dari rangkaian Job Title dari puncak sampai kursi itu. Mengganti Job Title seseorang, atau Job Title atasan di jalur itu, membuat kursi baru. Kursi lama menjadi Not in Odoo.
Tab Employees
Satu baris per karyawan yang cocok dengan akun AlurKerja. Tandanya Added (masuk kursi), Moved (pindah kursi), Removed (sudah tidak di kursi itu), atau No change.
Bagian Manual nodes under Odoo positions dan Manual members not in Odoo hanya muncul bila ada node atau anggota yang ditambahkan manual sebelum organisasi Odoo dikunci. Pada bagian anggota, centang baris untuk mengeluarkan anggota itu saat Apply. Barisnya ditandai Will be removed.
Tab Skipped
Karyawan Odoo yang tidak dimasukkan ke struktur, beserta alasannya:
| Alasan | Cara memperbaiki |
|---|---|
| No work email in Odoo | Isi Work Email karyawan di Odoo. |
| No AlurKerja account with this email | Undang orangnya ke workspace (lihat di bawah). |
| Does not report to the start person in Odoo | Karyawan di luar garis lapor orang puncak. Periksa Manager-nya di Odoo. Orang puncak yang kursinya dilewati juga tampil dengan alasan ini. |
| Managers in Odoo loop back on each other | Rantai Manager berputar dan tidak pernah sampai ke puncak. Perbaiki Manager di Odoo. |
| "Odoo employee … already uses this work email." | Dua karyawan memakai Work Email yang sama. Beri tiap karyawan email sendiri. |
Karyawan tanpa akun AlurKerja punya centang Invite. Centang satu per satu, atau pakai Invite all. Setelah Apply, mereka menerima undangan email sebagai Member. Mereka masuk ke kursinya pada sync berikutnya, setelah undangan diterima.
Organisasi Hasil Import
Yang Dikunci
Organisasi hasil Import from Odoo hanya berubah lewat Odoo. Di halaman strukturnya:
- Di bawah judul tertulis "This organization is imported from Odoo. Change it in Odoo, then Sync from Odoo."
- Bagan tidak menampilkan tombol Add Child, Add Left Sibling, Add Right Sibling, Add Top Node, dan Edit. Node akar ikut terkunci.
- Ikon hapus hanya muncul di node Not in Odoo yang di bawahnya tidak ada node yang masih di Odoo. Ini satu-satunya cara membersihkan sisa sync.
- Panel Details tidak menampilkan kolom cari anggota dan ikon hapus anggota.
Kunci ini dijaga server, bukan hanya Studio. Perubahan node atau anggota dari Company Profile maupun API ditolak dengan pesan "This organization is imported from Odoo. Change it in Odoo, then sync again." Kunci mengikuti data, bukan flag. Organisasi tetap terkunci walau fitur dimatikan lagi.
Nama dan deskripsi organisasi tetap bisa diubah dari daftar organisasi.
Tanda di Bagan
Saat fitur aktif, setiap node diberi tanda sumber:
| Tanda | Arti |
|---|---|
| Odoo | Kursi dibuat oleh sync. Nama dan induknya dikelola di Odoo. |
| Not in Odoo | Kursinya sudah tidak ada di Odoo. Node tetap ada supaya rujukan lama tetap berjalan. |
| Manual | Node yang tidak berasal dari data Odoo, misalnya node akar hasil Import. |
Label departemen tampil di tepi kiri bawah kursi. Arahkan kursor ke label untuk melihat nama departemen lengkapnya.
Panel Details
Saat fitur aktif, panel Details kursi Odoo menampilkan "Synced from Odoo · tanggal. Name and parent are managed in Odoo." Node Not in Odoo menampilkan "This department is no longer in Odoo. The node stays so existing references keep working."
Anggota yang ditambahkan sync diberi tanda Odoo. Untuk memindahkan seseorang, ubah datanya di Odoo, lalu sync lagi.
Atasan
Kursi hasil sync dipakai saat mencari atasan seseorang, misalnya untuk delegasi Out of Office. Atasan adalah anggota kursi di atasnya. Periksa Manager di Odoo sebelum Apply, karena hasilnya langsung mengubah siapa atasan siapa.
Organisasi Lama
Organisasi yang di-sync dengan versi sebelumnya diperlakukan seperti berikut.
Organisasi manual yang pernah di-sync. Organisasi ini terbaca sebagai organisasi manual. Tombol Sync from Odoo tidak muncul lagi. Node dan anggota Odoo di dalamnya tetap terkunci per node:
- Nama node Odoo: kolom Role di form Edit hanya-baca, dengan keterangan "Synced from Odoo. Change the name in Odoo, then sync again." Deskripsi tetap bisa diubah.
- Hapus node: node Odoo tidak bisa dihapus. Node manual yang di bawahnya ada node Odoo juga tidak bisa dihapus. Ikon hapusnya abu-abu.
- Pindah node: node Odoo tidak bisa dipindah ke induk lain atau organisasi lain.
- Anggota Odoo: ikon hapusnya disembunyikan.
Untuk mendapatkan data Odoo terbaru, buat organisasi baru dengan Import from Odoo.
Organisasi hasil Import yang di-sync per departemen. Sync versi lama membuat satu node per departemen. Review organisasi seperti ini menampilkan peringatan "This organization was synced by department. Syncs now build positions from each Odoo employee's manager and job title, and departments only label them. Import it again from Odoo to get the positions. This organization stays as it is." Apply dikunci. Import ulang dari Odoo untuk mendapatkan kursi jabatan.
Node dari sync per departemen tidak dipakai saat mencari atasan.
Hal yang Wajib Diperhatikan
- Node tidak pernah dihapus oleh sync. Kursi yang hilang dari Odoo menjadi Not in Odoo, supaya rujukan yang sudah ada tetap berjalan. Hapus sendiri bila sudah tidak dipakai.
- Mengganti Job Title membuat kursi baru. Kursi lama menjadi Not in Odoo.
- Atasan ikut berubah. Kursi hasil sync dipakai untuk mencari atasan.
- Odoo berubah setelah Review. Apply ditolak dengan pesan "Odoo data changed after the review. Review the sync again before applying." Klik Review again.
- Sync bersamaan. Bila admin lain sedang menjalankan sync untuk organisasi yang sama, muncul "Another sync is already running for this organization. Try again in a moment."
Feature Flag
Fitur ini bawaannya mati di ketiga sisi. Ketiganya harus dinyalakan dengan nilai yang sama.
| Variabel | Tempat |
|---|---|
VITE_FEATURE_FLAG_ODOO_ORG_SYNC=true | Studio |
FEATURE_FLAG_ODOO_ORG_SYNC=true | company-profile-service |
FEATURE_FLAG_ODOO_ORG_SYNC=true | integration-service |
integration-service juga butuh dua variabel berikut. Tanpa keduanya, sync selalu gagal.
| Variabel | Isi |
|---|---|
COMPRO_INTERNAL_URL | URL company-profile-service di jaringan internal, misalnya http://onprem-compro-be:3004 |
INTERNAL_SERVICE_TOKEN | Nilai yang sama dengan INTERNAL_SERVICE_TOKEN di company-profile-service |
Jalankan migrasi company-profile-service 20261013174045, 20261013174046, 20261016102301, 20261016190012, dan 20261019210258 sebelum memasang versi barunya dan menyalakan flag. Studio membaca flag-nya dari conf.js saat runtime, jadi tidak perlu build ulang.
| Kondisi | Akibat |
|---|---|
| Flag Studio mati | Pilihan Import from Odoo, tombol Sync from Odoo, keterangan sync, dan tanda Odoo/Manual tidak muncul. Organisasi hasil Import tetap terkunci. |
| Flag server mati | Dialog menampilkan "Organization sync is not enabled on the server." |
