Penyempurnaan Business Category

This commit is contained in:
2026-04-16 16:14:13 +07:00
parent de061dd2a1
commit 2ffbeb776e
26 changed files with 746 additions and 32 deletions
@@ -0,0 +1,250 @@
# Review dan Rekomendasi Implementasi Simpanan Koperasi
Dokumen Management
Tanggal: 16 April 2026
## Ringkasan Eksekutif
Modul `asa_simpin_syariah` memiliki fondasi yang cukup baik untuk dipakai sebagai basis pengelolaan simpan pinjam syariah anggota koperasi. Modul ini sudah memiliki data anggota, produk simpanan, master akad, dan pola integrasi accounting pada fitur pembiayaan serta investasi.
Namun demikian, hasil review menunjukkan bahwa fitur simpanan anggota yang aktif saat ini belum terhubung langsung ke jurnal accounting pada saat transaksi setor maupun tarik dilakukan. Dengan kondisi sekarang, modul ini belum direkomendasikan untuk langsung dipakai sebagai sistem operasional simpanan koperasi tanpa penyesuaian lebih lanjut.
Rekomendasi utama adalah melanjutkan modul ini dengan refactor terarah pada area simpanan anggota agar:
- setiap jenis simpanan anggota tercatat rapi per rekening,
- setiap transaksi setor dan tarik otomatis membentuk jurnal accounting,
- saldo simpanan anggota akurat,
- proses operasional dan audit menjadi lebih aman.
## Latar Belakang
Koperasi membutuhkan sistem yang dapat mencatat beberapa jenis simpanan anggota, seperti:
- simpanan pokok,
- simpanan wajib,
- simpanan sukarela,
- simpanan hari raya atau simpanan khusus lainnya.
Selain pencatatan saldo, kebutuhan penting berikutnya adalah integrasi langsung ke accounting, sehingga setiap transaksi setor dan tarik tidak hanya tercatat sebagai mutasi internal, tetapi juga langsung masuk ke jurnal akuntansi perusahaan.
## Tujuan Review
Review ini dilakukan untuk menjawab tiga hal utama:
- apakah modul `asa_simpin_syariah` layak dipakai untuk pengelolaan simpanan anggota koperasi,
- apakah modul ini sudah siap untuk otomatis membuat jurnal accounting saat setor dan tarik,
- langkah implementasi apa yang paling aman dan paling efisien untuk dilanjutkan.
## Temuan Utama
### 1. Fondasi modul sudah cukup baik
Modul sudah memiliki komponen dasar yang penting:
- master anggota koperasi,
- pembuatan rekening simpanan anggota,
- produk simpanan,
- master akad dan pemetaan jurnal,
- contoh implementasi accounting pada fitur lain.
Ini berarti modul tidak perlu dibangun dari nol.
### 2. Jalur simpanan aktif belum otomatis menjurnal
Fitur simpanan yang aktif saat ini hanya menyimpan data setor dan tarik sebagai data operasional. Transaksi tersebut belum secara otomatis membentuk `account.move` atau jurnal accounting.
Dampaknya:
- setor dan tarik belum tercermin langsung pada pembukuan,
- audit trail accounting belum lengkap,
- perlu proses tambahan manual jika ingin sinkron dengan akuntansi.
### 3. Struktur simpanan saat ini masih transisi
Terdapat dua pola model simpanan di dalam modul:
- model lama yang pernah diarahkan ke accounting,
- model aktif yang dipakai di UI saat ini.
Kondisi ini menunjukkan bahwa pengembangan sebelumnya belum diselesaikan sampai konsisten. Jika dibiarkan, hal ini berpotensi menimbulkan kebingungan operasional dan beban perawatan teknis.
### 4. Perhitungan saldo pada jalur aktif belum cukup aman
Logika saldo pada model simpanan aktif belum sepenuhnya memperhitungkan transaksi tarik secara benar. Untuk kebutuhan koperasi, ini harus dibenahi sebelum sistem dipakai dalam skala produksi.
### 5. Modul layak dilanjutkan, tetapi belum layak dipakai mentah-mentah
Kesimpulan review adalah:
- modul ini layak dilanjutkan sebagai basis sistem,
- modul ini belum direkomendasikan langsung dipakai tanpa refactor,
- pengembangan lanjutan akan lebih hemat dibanding membangun ulang dari nol.
## Analisis Dampak Bisnis
Jika modul digunakan dalam kondisi sekarang tanpa penyempurnaan, risiko bisnis yang mungkin muncul adalah:
- saldo simpanan anggota tidak selalu akurat,
- jurnal accounting harus dibuat manual,
- potensi selisih antara buku simpanan dan pembukuan,
- proses audit dan pelacakan transaksi menjadi lebih sulit,
- risiko koreksi data meningkat seiring jumlah transaksi.
Sebaliknya, jika modul disempurnakan sesuai rekomendasi, manfaat yang diperoleh adalah:
- pencatatan simpanan anggota lebih tertib,
- saldo anggota dapat dipantau secara real-time,
- jurnal accounting terbentuk otomatis,
- kontrol internal dan audit trail menjadi lebih kuat,
- proses kerja operasional koperasi menjadi lebih cepat dan konsisten.
## Rekomendasi Strategis
### A. Gunakan model simpanan aktif sebagai basis utama
Arah yang paling efisien adalah mempertahankan model simpanan yang saat ini aktif di UI, lalu menyempurnakannya agar menjadi rekening simpanan anggota final.
Keuntungan pendekatan ini:
- perubahan terhadap kebiasaan user lebih kecil,
- migrasi dari kondisi sistem sekarang lebih ringan,
- pengembangan bisa fokus ke kebutuhan bisnis inti.
### B. Tambahkan posting jurnal otomatis untuk setor dan tarik
Setiap transaksi simpanan sebaiknya menghasilkan jurnal accounting sebagai berikut:
Saat setor:
- debit ke akun kas atau bank,
- credit ke akun kewajiban simpanan anggota.
Saat tarik:
- debit ke akun kewajiban simpanan anggota,
- credit ke akun kas atau bank.
Dengan pola ini, sistem operasional dan accounting akan langsung sinkron.
### C. Rapikan konfigurasi akun per jenis simpanan
Setiap jenis simpanan sebaiknya memiliki mapping akun yang jelas, misalnya:
- Simpanan Pokok,
- Simpanan Wajib,
- Simpanan Sukarela,
- Simpanan Hari Raya.
Hal ini penting agar jurnal yang terbentuk sesuai dengan struktur laporan keuangan koperasi.
### D. Terapkan validasi bisnis
Sistem perlu dilengkapi dengan validasi, antara lain:
- tarikan tidak boleh melebihi saldo,
- simpanan pokok dapat dibuat tidak bisa ditarik,
- hanya transaksi yang sudah diposting yang memengaruhi saldo,
- transaksi yang sudah diposting tidak dihapus, tetapi dibalikkan dengan mekanisme yang aman.
## Rencana Implementasi Bertahap
### Tahap 1. Stabilisasi struktur simpanan
Fokus:
- merapikan model simpanan aktif,
- memperbaiki perhitungan saldo,
- membersihkan referensi model lama,
- memperbaiki bug approval anggota.
Estimasi hasil:
- data simpanan lebih konsisten,
- saldo lebih akurat,
- pondasi pengembangan accounting siap.
### Tahap 2. Integrasi accounting otomatis
Fokus:
- membuat transaksi setor dan tarik otomatis menghasilkan jurnal,
- menambahkan relasi ke `account.move`,
- menyediakan jejak transaksi yang dapat dilihat dari rekening simpanan.
Estimasi hasil:
- operasional simpanan dan accounting langsung terhubung,
- pekerjaan manual pembukuan berkurang.
### Tahap 3. Penyederhanaan konfigurasi admin
Fokus:
- membuka konfigurasi akun yang relevan,
- menyederhanakan setup untuk admin,
- memastikan setiap jenis simpanan punya mapping yang jelas.
Estimasi hasil:
- implementasi lebih mudah dipelihara,
- risiko salah setting berkurang.
### Tahap 4. Pelaporan dan kontrol
Fokus:
- laporan mutasi simpanan anggota,
- laporan saldo per jenis simpanan,
- smart button ke jurnal accounting,
- penguatan audit trail.
Estimasi hasil:
- monitoring management lebih baik,
- kontrol keuangan lebih kuat.
## Estimasi Keputusan Management yang Dibutuhkan
Agar implementasi bisa berjalan efektif, management idealnya memberikan keputusan pada poin-poin berikut:
1. Menyetujui modul ini dilanjutkan sebagai basis sistem simpanan koperasi.
2. Menyetujui refactor terbatas sebelum go-live operasional.
3. Menyetujui bahwa transaksi setor dan tarik wajib terhubung otomatis ke accounting.
4. Menyetujui jenis-jenis simpanan yang akan diaktifkan pada tahap awal implementasi.
5. Menyetujui akun-akun accounting yang akan dipakai untuk masing-masing jenis simpanan.
## Kesimpulan
Secara umum, `asa_simpin_syariah` adalah modul yang layak untuk dilanjutkan sebagai fondasi sistem simpanan koperasi berbasis syariah. Nilai utamanya adalah modul ini sudah memiliki banyak komponen dasar yang bisa dimanfaatkan, sehingga pengembangan lanjutan lebih efisien dibanding membangun sistem baru dari nol.
Namun, agar aman digunakan sebagai sistem operasional simpanan anggota yang langsung terhubung ke accounting, modul ini tetap memerlukan refactor terarah pada area simpanan. Dengan langkah tersebut, sistem dapat memenuhi kebutuhan operasional koperasi sekaligus kebutuhan pembukuan dan pengawasan management.
## Rekomendasi Akhir
Rekomendasi saya kepada management adalah:
- lanjutkan penggunaan modul ini sebagai basis pengembangan,
- jangan digunakan mentah-mentah untuk operasional penuh,
- prioritaskan refactor simpanan dan integrasi jurnal accounting sebagai tahap pertama.
## Sign-Off
Disusun oleh:
- Nama: ______________________
- Jabatan: ____________________
- Tanggal: ____________________
Diperiksa oleh:
- Nama: ______________________
- Jabatan: ____________________
- Tanggal: ____________________
Disetujui oleh:
- Nama: ______________________
- Jabatan: ____________________
- Tanggal: ____________________
Binary file not shown.
@@ -0,0 +1,332 @@
# Review `asa_simpin_syariah` untuk Simpanan Anggota Koperasi
## Tujuan
Dokumen ini merangkum hasil review modul `asa_simpin_syariah` untuk kebutuhan:
- menyimpan jenis-jenis simpanan anggota koperasi,
- mencatat transaksi setor dan tarik simpanan,
- membuat jurnal accounting secara langsung saat transaksi diposting.
## Kesimpulan Singkat
Modul ini **punya fondasi yang cukup baik** untuk dijadikan basis simpan pinjam syariah karena sudah memiliki:
- model anggota (`simpin_syariah.member`),
- tipe/master akad dan mapping jurnal,
- contoh implementasi accounting di pembiayaan, pinjaman, dan investasi,
- pembuatan rekening simpanan anggota saat approval anggota.
Namun untuk kebutuhan **simpanan anggota yang langsung menjurnal ke accounting**, modul ini **belum siap dipakai apa adanya**. Jalur simpanan yang aktif di UI saat ini tidak membuat jurnal accounting, sementara jalur simpanan lama yang sempat terhubung ke accounting sudah tidak aktif dan masih menyisakan bug struktural.
## Temuan Review
### 1. Jalur simpanan yang aktif tidak membuat jurnal accounting
UI yang aktif saat ini memakai model `form.simpanan`:
- `views/form_simpanan_views.xml`
- `models/form_simpanan.py`
Masalah utamanya:
- `form.simpanan.line` hanya menyimpan `debit`, `credit`, `keterangan`, dan `balance`.
- Tidak ada relasi ke `account.move` atau `account.payment`.
- Tidak ada method posting transaksi setor/tarik ke accounting.
Artinya, jika user setor atau tarik lewat menu yang aktif sekarang, transaksi hanya tersimpan sebagai data operasional internal dan **tidak menghasilkan jurnal akuntansi**.
### 2. Ada dua arsitektur simpanan yang berjalan paralel
Saat ini ada dua model simpanan:
- model lama: `simpin_syariah.rekening` di `models/syariah_simpanan.py`,
- model aktif: `form.simpanan` di `models/form_simpanan.py`.
Dampaknya:
- proses approval anggota sudah membuat data `form.simpanan`,
- tetapi sebagian method lama masih mencari data `simpin_syariah.rekening`,
- sebagian navigasi UI juga masih mengarah ke action/view milik model lama.
Kondisi ini membuat modul berada di fase transisi yang belum selesai. Untuk operasional koperasi, ini berisiko menimbulkan data tidak sinkron, tombol rusak, dan logika bisnis ganda.
### 3. Jalur lama yang pernah diarahkan ke accounting sekarang tidak aktif dan belum bersih
Di `views/syariah_simpanan_views.xml`, hampir seluruh form/action/menu untuk `simpin_syariah.rekening` dikomentari. Artinya jalur lama ini pada praktiknya tidak dipakai di UI.
Selain itu, di `models/syariah_simpanan.py` masih ada indikasi masalah:
- transaksi lama membuat `account.payment` dengan field `simpanan_line_id`, tetapi field ini tidak didefinisikan di modul,
- field `balance` memakai compute `_store_balance`, tetapi method tersebut tidak ada,
- ada beberapa potensi error di `name_search` dan relasi turunannya.
Jadi model lama juga belum aman untuk langsung dihidupkan kembali.
### 4. Perhitungan saldo simpanan aktif belum benar untuk transaksi tarik
Di `form.simpanan`, field `balance` dihitung dengan menjumlahkan `debit` saja. `credit` tidak ikut mengurangi saldo.
Akibatnya:
- transaksi tarikan tidak benar-benar menurunkan saldo total,
- saldo di header bisa berbeda dengan saldo mutasi per baris,
- pembatasan saldo tarik (`max_debit`) menjadi tidak akurat.
Ini adalah blocker utama jika modul ingin dipakai sebagai buku simpanan koperasi.
### 5. Workflow simpanan aktif tidak konsisten
State yang tersedia:
- `draft`
- `submit`
- `check`
- `approve`
- `active`
- `close`
- `block`
Tetapi method yang dipakai saat ini:
- `func_submit()` memindahkan `draft -> submit`
- `func_approve()` memindahkan `submit -> active`
- `func_close()` hanya bisa jalan dari `approve -> close`
Karena record langsung masuk ke `active`, tombol close praktis tidak sejalan dengan alur state yang sedang dipakai.
### 6. Approval anggota punya bug saat partner sudah ada
Di `action_approve()` pada `models/syariah_member.py`, jika partner sudah ada maka variabel `user_id` tidak dibuat, tetapi tetap dipakai sesudah blok `if/else`.
Ini bisa membuat proses approval gagal pada anggota yang partner-nya sudah lebih dulu ada di database.
### 7. Konfigurasi accounting untuk simpanan ada, tetapi UI konfigurasi banyak yang disembunyikan
Modul sebenarnya sudah punya fondasi konfigurasi accounting:
- `master.kode_transaksi`
- `master.akad_syariah`
- `master.akad_journal`
Ini cukup bagus sebagai basis pemetaan jurnal simpanan. Namun di `views/syariah_config_views.xml`, banyak form/action/menu konfigurasi tersebut dikomentari. Akibatnya, konfigurasi penting sulit dipelihara dari UI.
## Apakah Modul Ini Bisa Dipakai untuk Simpanan Koperasi?
### Bisa, tetapi belum langsung siap produksi
Modul ini layak dipakai sebagai **starting point**, bukan sebagai solusi final yang langsung operasional untuk simpanan anggota.
Yang sudah cocok:
- ada master anggota,
- ada produk simpanan,
- ada pola jurnal dari modul pembiayaan/pinjaman,
- ada proses auto-create rekening simpanan saat anggota disetujui.
Yang belum siap:
- jurnal setor/tarik pada jalur simpanan aktif,
- saldo yang akurat,
- konsistensi model,
- konfigurasi yang mudah dipakai admin,
- referensi UI/model lama yang masih tercecer.
## Rekomendasi Arsitektur
### Pilih satu model simpanan saja
Saran paling aman: **jadikan `form.simpanan` sebagai model rekening simpanan utama** karena:
- model ini yang sekarang aktif di UI,
- model ini yang dibuat otomatis saat approval anggota,
- migrasi dari kondisi sekarang akan lebih kecil.
Model lama `simpin_syariah.rekening` sebaiknya:
- dipensiunkan bertahap,
- atau hanya dipertahankan sebagai referensi migrasi,
- lalu seluruh method lama yang masih menunjuk ke model lama dibersihkan.
### Ubah `form.simpanan.line` menjadi transaksi resmi yang bisa diposting
Minimal field yang disarankan pada `form.simpanan.line`:
- `date`
- `transaction_type` (`setor`, `tarik`, `adjustment`, opsional `transfer`)
- `amount`
- `description`
- `state` (`draft`, `posted`, `cancel`)
- `journal_id`
- `move_id`
- `debit`
- `credit`
- `balance`
Catatan:
- `debit` dan `credit` tetap boleh dipertahankan jika ingin mengikuti struktur lama,
- tetapi untuk UI operasional akan lebih aman jika user hanya mengisi `transaction_type` + `amount`,
- nilai `debit/credit` dibentuk otomatis oleh sistem.
### Gunakan `account.move`, bukan sekadar catatan internal
Untuk kebutuhan koperasi, transaksi setor/tarik sebaiknya menghasilkan `account.move` yang diposting langsung.
Alasannya:
- audit trail lebih kuat,
- mudah direkonsiliasi dengan kas/bank,
- mengikuti pola Odoo Accounting,
- lebih fleksibel untuk laporan buku besar dan neraca.
## Desain Jurnal yang Disarankan
### Setoran simpanan
Saat anggota menyetor:
- Debit: akun kas/bank dari jurnal yang dipilih
- Credit: akun kewajiban simpanan anggota
Contoh:
- Debit `111100 - Kas`
- Credit `211100 - Simpanan Anggota Wajib`
### Tarikan simpanan
Saat anggota menarik simpanan:
- Debit: akun kewajiban simpanan anggota
- Credit: akun kas/bank dari jurnal yang dipilih
Contoh:
- Debit `211300 - Simpanan Sukarela Anggota`
- Credit `111100 - Kas`
### Sumber akun kewajiban simpanan
Ada dua opsi yang masuk akal:
1. Mapping per jenis simpanan melalui `master.akad_journal`
2. Mapping langsung per produk simpanan
Rekomendasi saya:
- jika koperasi Anda ingin tetap dekat dengan desain modul syariah, pakai `master.akad_syariah` + `master.akad_journal`,
- jika ingin implementasi lebih sederhana dan cepat, tambahkan akun kewajiban langsung di produk simpanan.
## Alur Operasional yang Disarankan
### Pembukaan simpanan anggota
Saat anggota disetujui:
- sistem membuat rekening simpanan per jenis,
- misalnya: `pokok`, `wajib`, `sukarela`, `hari raya`,
- status rekening langsung `active`.
### Setor
User klik tombol `Setor` pada rekening simpanan:
- isi tanggal,
- isi nominal,
- pilih kas/bank journal,
- isi keterangan,
- sistem membuat `account.move`,
- sistem post jurnal,
- sistem simpan `move_id` di transaksi simpanan,
- saldo rekening diperbarui dari transaksi yang sudah `posted`.
### Tarik
User klik tombol `Tarik` pada rekening simpanan:
- isi tanggal,
- isi nominal,
- pilih kas/bank journal,
- sistem validasi saldo tersedia,
- sistem membuat `account.move`,
- sistem post jurnal,
- sistem simpan `move_id`,
- saldo rekening diperbarui.
## Validasi yang Wajib Ada
Sebelum modul dipakai produksi, saya sarankan validasi berikut wajib dibuat:
- tidak boleh tarik melebihi saldo,
- simpanan `pokok` bisa dibuat tidak boleh ditarik,
- simpanan `wajib` bisa dibatasi hanya pada kondisi tertentu,
- hanya transaksi `posted` yang memengaruhi saldo,
- jurnal harus punya akun debit/kredit yang lengkap,
- transaksi tidak boleh dihapus setelah posted, hanya bisa reverse/cancel.
## Perubahan Teknis Minimum yang Saya Rekomendasikan
### Tahap 1: Stabilkan model aktif
- rapikan `form.simpanan`,
- perbaiki compute saldo agar `debit - credit`,
- perbaiki workflow state,
- matikan referensi ke `simpin_syariah.rekening` yang sudah tidak dipakai,
- perbaiki bug `action_approve()` pada member.
### Tahap 2: Tambahkan posting accounting
- tambahkan `move_id` pada transaksi simpanan,
- buat method `action_post_setor()` dan `action_post_tarik()`,
- buat helper untuk menyiapkan line `account.move`,
- post jurnal otomatis saat transaksi disetujui.
### Tahap 3: Rapikan konfigurasi
- buka kembali menu konfigurasi yang relevan,
- sederhanakan master yang benar-benar dibutuhkan admin,
- definisikan mapping akun per jenis simpanan.
### Tahap 4: Audit dan laporan
- buat smart button ke jurnal accounting,
- buat laporan mutasi simpanan anggota,
- buat laporan saldo per jenis simpanan.
## Rekomendasi Implementasi Praktis
Jika target Anda adalah segera memakai modul ini untuk koperasi, saya sarankan pendekatan berikut:
1. Jangan aktifkan kembali `simpin_syariah.rekening` apa adanya.
2. Pertahankan `form.simpanan` sebagai rekening simpanan utama.
3. Refactor `form.simpanan.line` agar menjadi transaksi yang bisa mem-post jurnal.
4. Ambil pola pembuatan `account.move` dari modul `syariah_pinjaman.py` dan `syariah_investasi.py`.
5. Gunakan satu mapping akun yang sederhana dulu untuk tiap jenis simpanan.
Dengan pendekatan ini, implementasi akan lebih cepat, lebih konsisten dengan UI saat ini, dan lebih aman untuk produksi dibanding menghidupkan ulang jalur lama.
## Status Rekomendasi
### Cocok untuk dilanjutkan
Modul ini **layak dilanjutkan** sebagai basis simpanan koperasi syariah.
### Tidak disarankan dipakai mentah-mentah
Jika dipakai langsung tanpa refactor, risiko utamanya adalah:
- saldo simpanan tidak akurat,
- jurnal accounting tidak terbentuk,
- proses approval/member bisa error,
- masih ada referensi model lama yang tidak aktif.
## Langkah Berikutnya
Jika ingin, tahap lanjutan yang paling bernilai adalah:
1. refactor `form.simpanan` menjadi rekening simpanan final,
2. tambah posting jurnal otomatis untuk setor dan tarik,
3. rapikan konfigurasi akun per jenis simpanan,
4. siapkan skenario uji transaksi simpanan anggota dari awal sampai jurnal posting.
@@ -4,7 +4,7 @@
Modul `grt_crm_business_category` dipakai untuk memisahkan data CRM berdasarkan Business Category, agar:
- Pipeline bisa diikat ke kategori bisnis tertentu.
- Akses user dibatasi berdasarkan kategori yang diizinkan.
- User antar kategori tidak saling update data (kecuali admin/manager CRM).
- User antar kategori tidak saling membaca atau update data lintas kategori.
## 2. Ringkasan Fitur yang Sudah Dibuat
1. Master model `crm.business.category`.
@@ -17,7 +17,9 @@ Modul `grt_crm_business_category` dipakai untuk memisahkan data CRM berdasarkan
- `default_business_category_id`
- `active_business_category_id`
5. Rule security berbasis kategori (read/create/write/delete) sesuai role.
6. Menu konfigurasi khusus:
6. Isolasi strict untuk aktivitas CRM (`mail.activity`) berdasarkan kategori lead.
7. Override rule default CRM yang terlalu permisif agar tidak membypass rule kategori.
8. Menu konfigurasi khusus:
- `CRM > Configuration > Business Categories`
- `CRM > Configuration > Pipelines by Category`
- `CRM > Configuration > User Category Access`
@@ -64,6 +66,12 @@ Lokasi: `models/business_category_mixin.py`
- `business.category.mixin` untuk dipakai ulang di modul lain.
- Menyediakan field `business_category_id` dengan default dari active/default category user.
### 3.6 Extend `mail.activity`
Lokasi: `models/mail_activity.py`
- Tambah field `business_category_id` (computed + stored) untuk mirror kategori dari lead terkait.
- Jika `res_model = crm.lead`, kategori aktivitas mengikuti `crm.lead.business_category_id`.
- Field ini dipakai sebagai basis record rule agar aktivitas CRM hanya terlihat pada kategori user yang diizinkan.
## 4. Data Default
Lokasi: `data/crm_business_category_data.xml`
Dibuat 6 kategori awal:
@@ -97,10 +105,23 @@ Lokasi: `security/ir.rule.csv`
- Read-only kategori yang diizinkan.
#### Untuk manager/admin CRM (`sales_team.group_sale_manager`)
- Full access (read/write/create/unlink) untuk:
- `crm.lead`
- `crm.team`
- `crm.business.category`
- `crm.lead`: read/write/create/unlink tetap dibatasi ke `user.effective_business_category_ids`.
- `crm.team`: read/write/create/unlink dibatasi ke `user.effective_business_category_ids`.
- `mail.activity` (khusus aktivitas CRM / `res_model = crm.lead`): read dibatasi ke `user.effective_business_category_ids`.
#### Untuk system admin (`base.group_system`)
- `crm.team`: full access mengikuti company user.
- `crm.activity.history`: access dibatasi ke `user.effective_business_category_ids`.
### 5.3 Override Rule Default CRM
Lokasi: `security/crm_base_rule_overrides.xml`
Untuk menjaga policy strict category dan mencegah OR-combine rule default CRM membuka akses lintas kategori,
rule bawaan berikut dinonaktifkan:
1. `crm.crm_rule_all_lead`
2. `crm.crm_rule_personal_lead`
Dengan override ini, evaluasi akses `crm.lead` mengikuti rule kategori pada modul ini.
## 6. Menu dan Konfigurasi Operasional
@@ -130,13 +151,15 @@ Fungsi: set `Allowed`, `Default`, dan `Active` business category per user.
1. Di environment ini, inject ke tab default `Access Rights` user (`base.view_users_form`) sempat menimbulkan error validator `safe_eval` (opcode `RESUME/RETURN_CONST`).
2. Karena itu, pengaturan user kategori dibuat lewat menu terpisah `User Category Access` agar stabil.
3. Rule dipindah ke `ir.rule.csv` (bukan XML eval groups) untuk kompatibilitas environment saat ini.
4. Mulai versi `14.0.2.12.0`, diberlakukan strict isolation untuk aktivitas CRM dan override rule default CRM yang permisif.
## 9. Checklist Testing
1. Login sebagai manager CRM:
- Bisa lihat semua kategori/team/lead.
- Bisa create/edit/delete data lintas kategori.
- Hanya bisa lihat lead/team/activity CRM pada kategori yang termasuk `effective_business_category_ids`.
- Tidak bisa lihat lead/activity CRM dari kategori lain.
2. Login sebagai user CRM biasa (category A):
- Hanya bisa lihat lead/team/category di category A.
- Hanya bisa lihat aktivitas CRM (`mail.activity` pada `crm.lead`) di category A.
- Tidak bisa edit lead milik user lain walau sama category.
- Bisa edit lead milik sendiri.
3. Buat lead dengan team tanpa category:
@@ -149,10 +172,12 @@ Fungsi: set `Allowed`, `Default`, dan `Active` business category per user.
- `models/crm_business_category.py`
- `models/crm_team.py`
- `models/crm_lead.py`
- `models/mail_activity.py`
- `models/res_users.py`
- `models/business_category_mixin.py`
- `security/ir.model.access.csv`
- `security/ir.rule.csv`
- `security/crm_base_rule_overrides.xml`
- `data/crm_business_category_data.xml`
- `views/crm_business_category_views.xml`
- `views/crm_team_business_category_views.xml`
+2 -1
View File
@@ -9,11 +9,12 @@ This enables different staging flow per business category through team pipelines
"author": "PT Gagak Rimang Teknologi",
"website": "https://rimang.id",
"category": "Sales/CRM",
"version": "14.0.2.11.1",
"version": "14.0.2.13.0",
"depends": ["crm", "grt_business_category_base"],
"data": [
"security/ir.model.access.csv",
"security/ir.rule.csv",
"security/crm_base_rule_overrides.xml",
"views/assets.xml",
"views/crm_activity_history_views.xml",
"views/crm_lead_views.xml",
@@ -5,6 +5,15 @@ from datetime import timedelta
class MailActivity(models.Model):
_inherit = "mail.activity"
business_category_id = fields.Many2one(
"crm.business.category",
string="Business Category",
compute="_compute_business_category_id",
store=True,
readonly=True,
index=True,
)
kilometer = fields.Float(string="Kilometer (KM)", digits=(16, 2))
gps_captured = fields.Boolean(string="GPS Captured")
gps_latitude = fields.Float(string="GPS Latitude", digits=(9, 6))
@@ -13,6 +22,20 @@ class MailActivity(models.Model):
gps_client_tz = fields.Char(string="GPS Client TZ")
gps_openstreetmap_url = fields.Char(string="OpenStreetMap URL")
@api.depends("res_model", "res_id")
def _compute_business_category_id(self):
lead_ids = {activity.res_id for activity in self if activity.res_model == "crm.lead" and activity.res_id}
lead_category_map = {}
if lead_ids:
leads = self.env["crm.lead"].sudo().browse(list(lead_ids)).exists()
lead_category_map = {lead.id: lead.business_category_id.id for lead in leads}
for activity in self:
if activity.res_model == "crm.lead" and activity.res_id:
activity.business_category_id = lead_category_map.get(activity.res_id)
else:
activity.business_category_id = False
@staticmethod
def _has_valid_gps(lat, lon):
if lat is None or lon is None:
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Enforce strict business category isolation by disabling permissive default CRM lead rules. -->
<record id="crm.crm_rule_all_lead" model="ir.rule">
<field name="active" eval="0"/>
</record>
<record id="crm.crm_rule_personal_lead" model="ir.rule">
<field name="active" eval="0"/>
</record>
</odoo>
@@ -2,9 +2,16 @@ id,name,model_id:id,domain_force,groups:id,perm_read,perm_write,perm_create,perm
crm_lead_business_category_rule_user_read_create,CRM Lead read/create by effective business category,crm.model_crm_lead,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",crm.group_use_lead,1,0,1,0
crm_lead_business_category_rule_user_write_own,CRM Lead write own by effective business category,crm.model_crm_lead,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids),'|',('user_id','=',user.id),('create_uid','=',user.id)]",crm.group_use_lead,0,1,0,1
crm_team_business_category_rule_user,CRM Team read by effective business category,sales_team.model_crm_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",crm.group_use_lead,1,0,0,0
crm_stage_business_category_rule_user,CRM Stage read by effective business category,crm.model_crm_stage,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",crm.group_use_lead,1,0,0,0
crm_lead_business_category_rule_manager,CRM Lead full access for manager in effective business category,crm.model_crm_lead,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
crm_team_business_category_rule_manager,CRM Team full access for manager in effective business category,sales_team.model_crm_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
crm_stage_business_category_rule_manager,CRM Stage full access for manager in effective business category,crm.model_crm_stage,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
crm_activity_history_rule_user,CRM Activity History by effective business category,model_crm_activity_history,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",crm.group_use_lead,1,0,0,0
crm_activity_history_rule_manager,CRM Activity History full access for manager in effective business category,model_crm_activity_history,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
crm_team_business_category_rule_sysadmin,CRM Team full access for system admin,sales_team.model_crm_team,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
crm_team_business_category_rule_sysadmin,CRM Team access for system admin in effective business category,sales_team.model_crm_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
crm_stage_business_category_rule_sysadmin,CRM Stage access for system admin in effective business category,crm.model_crm_stage,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
crm_lead_business_category_rule_sysadmin,CRM Lead access for system admin in effective business category,crm.model_crm_lead,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
crm_activity_history_rule_sysadmin,CRM Activity History access for system admin in effective business category,model_crm_activity_history,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
mail_activity_business_category_rule_user_read,Mail Activity read by effective business category for CRM,mail.model_mail_activity,"['|',('res_model','!=','crm.lead'),('business_category_id','in',user.effective_business_category_ids.ids)]",crm.group_use_lead,1,0,0,0
mail_activity_business_category_rule_manager_read,Mail Activity read by effective business category for manager,mail.model_mail_activity,"['|',('res_model','!=','crm.lead'),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,0,0,0
mail_activity_business_category_rule_sysadmin_read,Mail Activity read by effective business category for system admin,mail.model_mail_activity,"['|',('res_model','!=','crm.lead'),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,0,0,0
1 id name model_id:id domain_force groups:id perm_read perm_write perm_create perm_unlink
2 crm_lead_business_category_rule_user_read_create CRM Lead read/create by effective business category crm.model_crm_lead [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] crm.group_use_lead 1 0 1 0
3 crm_lead_business_category_rule_user_write_own CRM Lead write own by effective business category crm.model_crm_lead [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids),'|',('user_id','=',user.id),('create_uid','=',user.id)] crm.group_use_lead 0 1 0 1
4 crm_team_business_category_rule_user CRM Team read by effective business category sales_team.model_crm_team [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] crm.group_use_lead 1 0 0 0
5 crm_stage_business_category_rule_user CRM Stage read by effective business category crm.model_crm_stage [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] crm.group_use_lead 1 0 0 0
6 crm_lead_business_category_rule_manager CRM Lead full access for manager in effective business category crm.model_crm_lead [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
7 crm_team_business_category_rule_manager CRM Team full access for manager in effective business category sales_team.model_crm_team [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
8 crm_stage_business_category_rule_manager CRM Stage full access for manager in effective business category crm.model_crm_stage [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
9 crm_activity_history_rule_user CRM Activity History by effective business category model_crm_activity_history [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] crm.group_use_lead 1 0 0 0
10 crm_activity_history_rule_manager CRM Activity History full access for manager in effective business category model_crm_activity_history [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
11 crm_team_business_category_rule_sysadmin CRM Team full access for system admin CRM Team access for system admin in effective business category sales_team.model_crm_team [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
12 crm_stage_business_category_rule_sysadmin CRM Stage access for system admin in effective business category crm.model_crm_stage [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
13 crm_lead_business_category_rule_sysadmin CRM Lead access for system admin in effective business category crm.model_crm_lead [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
14 crm_activity_history_rule_sysadmin CRM Activity History access for system admin in effective business category model_crm_activity_history [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
15 mail_activity_business_category_rule_user_read Mail Activity read by effective business category for CRM mail.model_mail_activity ['|',('res_model','!=','crm.lead'),('business_category_id','in',user.effective_business_category_ids.ids)] crm.group_use_lead 1 0 0 0
16 mail_activity_business_category_rule_manager_read Mail Activity read by effective business category for manager mail.model_mail_activity ['|',('res_model','!=','crm.lead'),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 0 0 0
17 mail_activity_business_category_rule_sysadmin_read Mail Activity read by effective business category for system admin mail.model_mail_activity ['|',('res_model','!=','crm.lead'),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 0 0 0
@@ -10,7 +10,7 @@ for expense transactions and accounting entries.
"author": "PT Gagak Rimang Teknologi",
"website": "https://rimang.id",
"category": "Human Resources/Expenses",
"version": "14.0.1.1.0",
"version": "14.0.1.2.0",
"depends": [
"hr_expense",
"account",
@@ -2,17 +2,19 @@ id,name,model_id:id,domain_force,groups:id,perm_read,perm_write,perm_create,perm
hr_expense_business_category_rule_user_read_create,Expense read/create by effective business category,hr_expense.model_hr_expense,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_user,1,0,1,0
hr_expense_business_category_rule_user_write_own,Expense write own by effective business category,hr_expense.model_hr_expense,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids),'|',('employee_id.user_id','=',user.id),('create_uid','=',user.id)]",hr_expense.group_hr_expense_user,0,1,0,1
hr_expense_business_category_rule_manager,Expense full access for expense manager in effective business category,hr_expense.model_hr_expense,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_manager,1,1,1,1
hr_expense_business_category_rule_sysadmin,Expense full access for system admin,hr_expense.model_hr_expense,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
hr_expense_business_category_rule_sysadmin,Expense access for system admin in effective business category,hr_expense.model_hr_expense,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
hr_expense_sheet_business_category_rule_user,Expense Report read by effective business category,hr_expense.model_hr_expense_sheet,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_user,1,0,0,0
hr_expense_sheet_business_category_rule_manager,Expense Report full access for expense manager in effective business category,hr_expense.model_hr_expense_sheet,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_manager,1,1,1,1
hr_expense_sheet_business_category_rule_sysadmin,Expense Report full access for system admin,hr_expense.model_hr_expense_sheet,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
hr_expense_sheet_business_category_rule_sysadmin,Expense Report access for system admin in effective business category,hr_expense.model_hr_expense_sheet,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
expense_team_business_category_rule_user,Expense Team read by effective business category,model_expense_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_user,1,0,0,0
expense_team_business_category_rule_manager,Expense Team full access for expense manager in effective business category,model_expense_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_manager,1,1,1,1
expense_team_business_category_rule_sysadmin,Expense Team full access for system admin,model_expense_team,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
expense_team_business_category_rule_sysadmin,Expense Team access for system admin in effective business category,model_expense_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
crm_business_category_rule_expense_user,Business Category by user effective list for expense user,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_user,1,0,0,0
crm_business_category_rule_expense_manager,Business Category access for expense manager in effective business category,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_manager,1,1,1,1
crm_business_category_rule_expense_sysadmin,Business Category full access for system admin,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
crm_business_category_rule_expense_sysadmin,Business Category access for system admin in effective business category,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
account_move_expense_business_category_rule_user,Journal Entry read by effective business category for expense user,account.model_account_move,"[('company_id','in',user.company_ids.ids),('expense_business_category_id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_user,1,0,0,0
account_move_expense_business_category_rule_manager,Journal Entry access for expense manager in effective business category,account.model_account_move,"[('company_id','in',user.company_ids.ids),('expense_business_category_id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_manager,1,1,1,1
account_move_expense_business_category_rule_sysadmin,Journal Entry access for system admin in effective business category,account.model_account_move,"[('company_id','in',user.company_ids.ids),('expense_business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
account_move_line_expense_business_category_rule_user,Journal Item read by effective business category for expense user,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.expense_business_category_id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_user,1,0,0,0
account_move_line_expense_business_category_rule_manager,Journal Item access for expense manager in effective business category,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.expense_business_category_id','in',user.effective_business_category_ids.ids)]",hr_expense.group_hr_expense_manager,1,1,1,1
account_move_line_expense_business_category_rule_sysadmin,Journal Item access for system admin in effective business category,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.expense_business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
1 id name model_id:id domain_force groups:id perm_read perm_write perm_create perm_unlink
2 hr_expense_business_category_rule_user_read_create Expense read/create by effective business category hr_expense.model_hr_expense [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_user 1 0 1 0
3 hr_expense_business_category_rule_user_write_own Expense write own by effective business category hr_expense.model_hr_expense [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids),'|',('employee_id.user_id','=',user.id),('create_uid','=',user.id)] hr_expense.group_hr_expense_user 0 1 0 1
4 hr_expense_business_category_rule_manager Expense full access for expense manager in effective business category hr_expense.model_hr_expense [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_manager 1 1 1 1
5 hr_expense_business_category_rule_sysadmin Expense full access for system admin Expense access for system admin in effective business category hr_expense.model_hr_expense [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
6 hr_expense_sheet_business_category_rule_user Expense Report read by effective business category hr_expense.model_hr_expense_sheet [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_user 1 0 0 0
7 hr_expense_sheet_business_category_rule_manager Expense Report full access for expense manager in effective business category hr_expense.model_hr_expense_sheet [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_manager 1 1 1 1
8 hr_expense_sheet_business_category_rule_sysadmin Expense Report full access for system admin Expense Report access for system admin in effective business category hr_expense.model_hr_expense_sheet [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
9 expense_team_business_category_rule_user Expense Team read by effective business category model_expense_team [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_user 1 0 0 0
10 expense_team_business_category_rule_manager Expense Team full access for expense manager in effective business category model_expense_team [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_manager 1 1 1 1
11 expense_team_business_category_rule_sysadmin Expense Team full access for system admin Expense Team access for system admin in effective business category model_expense_team [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
12 crm_business_category_rule_expense_user Business Category by user effective list for expense user grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_user 1 0 0 0
13 crm_business_category_rule_expense_manager Business Category access for expense manager in effective business category grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_manager 1 1 1 1
14 crm_business_category_rule_expense_sysadmin Business Category full access for system admin Business Category access for system admin in effective business category grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
15 account_move_expense_business_category_rule_user Journal Entry read by effective business category for expense user account.model_account_move [('company_id','in',user.company_ids.ids),('expense_business_category_id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_user 1 0 0 0
16 account_move_expense_business_category_rule_manager Journal Entry access for expense manager in effective business category account.model_account_move [('company_id','in',user.company_ids.ids),('expense_business_category_id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_manager 1 1 1 1
17 account_move_expense_business_category_rule_sysadmin Journal Entry access for system admin in effective business category account.model_account_move [('company_id','in',user.company_ids.ids),('expense_business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
18 account_move_line_expense_business_category_rule_user Journal Item read by effective business category for expense user account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.expense_business_category_id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_user 1 0 0 0
19 account_move_line_expense_business_category_rule_manager Journal Item access for expense manager in effective business category account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.expense_business_category_id','in',user.effective_business_category_ids.ids)] hr_expense.group_hr_expense_manager 1 1 1 1
20 account_move_line_expense_business_category_rule_sysadmin Journal Item access for system admin in effective business category account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.expense_business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
@@ -10,7 +10,7 @@ propagation for stock valuation journal entries.
"author": "PT Gagak Rimang Teknologi",
"website": "https://rimang.id",
"category": "Inventory",
"version": "14.0.1.1.2",
"version": "14.0.1.2.0",
"depends": [
"stock_account",
"sale_stock",
@@ -2,27 +2,29 @@ id,name,model_id:id,domain_force,groups:id,perm_read,perm_write,perm_create,perm
stock_picking_business_category_rule_user_read_create,Transfer read/create by effective business category,stock.model_stock_picking,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_user,1,0,1,0
stock_picking_business_category_rule_user_write_own,Transfer write own by effective business category,stock.model_stock_picking,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids),'|',('user_id','=',user.id),('create_uid','=',user.id)]",stock.group_stock_user,0,1,0,1
stock_picking_business_category_rule_manager,Transfer full access for inventory manager in effective business category,stock.model_stock_picking,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_manager,1,1,1,1
stock_picking_business_category_rule_sysadmin,Transfer full access for system admin,stock.model_stock_picking,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
stock_picking_business_category_rule_sysadmin,Transfer access for system admin in effective business category,stock.model_stock_picking,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
stock_move_business_category_rule_user,Stock Move by effective business category,stock.model_stock_move,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_user,1,0,0,0
stock_move_business_category_rule_manager,Stock Move full access for inventory manager in effective business category,stock.model_stock_move,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_manager,1,1,1,1
stock_move_business_category_rule_sysadmin,Stock Move full access for system admin,stock.model_stock_move,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
stock_move_business_category_rule_sysadmin,Stock Move access for system admin in effective business category,stock.model_stock_move,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
stock_warehouse_business_category_rule_user,Warehouse by effective business category,stock.model_stock_warehouse,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_user,1,0,0,0
stock_warehouse_business_category_rule_manager,Warehouse full access for inventory manager in effective business category,stock.model_stock_warehouse,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_manager,1,1,1,1
stock_warehouse_business_category_rule_sysadmin,Warehouse full access for system admin,stock.model_stock_warehouse,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
stock_warehouse_business_category_rule_sysadmin,Warehouse access for system admin in effective business category,stock.model_stock_warehouse,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
stock_team_business_category_rule_user,Inventory Team read by effective business category,model_stock_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_user,1,0,0,0
stock_team_business_category_rule_manager,Inventory Team full access for inventory manager in effective business category,model_stock_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_manager,1,1,1,1
stock_team_business_category_rule_sysadmin,Inventory Team full access for system admin,model_stock_team,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
stock_team_business_category_rule_sysadmin,Inventory Team access for system admin in effective business category,model_stock_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
crm_business_category_rule_inventory_user,Business Category by user effective list for inventory user,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",stock.group_stock_user,1,0,0,0
crm_business_category_rule_inventory_manager,Business Category access for inventory manager in effective business category,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",stock.group_stock_manager,1,1,1,1
crm_business_category_rule_inventory_sysadmin,Business Category full access for system admin,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
crm_business_category_rule_inventory_sysadmin,Business Category access for system admin in effective business category,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
account_move_inventory_business_category_rule_user,Journal Entry read by effective business category for inventory user,account.model_account_move,"[('company_id','in',user.company_ids.ids),('inventory_business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_user,1,0,0,0
account_move_inventory_business_category_rule_manager,Journal Entry access for inventory manager in effective business category,account.model_account_move,"[('company_id','in',user.company_ids.ids),('inventory_business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_manager,1,1,1,1
account_move_inventory_business_category_rule_sysadmin,Journal Entry access for system admin in effective business category,account.model_account_move,"[('company_id','in',user.company_ids.ids),('inventory_business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
account_move_line_inventory_business_category_rule_user,Journal Item read by effective business category for inventory user,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.inventory_business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_user,1,0,0,0
account_move_line_inventory_business_category_rule_manager,Journal Item access for inventory manager in effective business category,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.inventory_business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_manager,1,1,1,1
account_move_line_inventory_business_category_rule_sysadmin,Journal Item access for system admin in effective business category,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.inventory_business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
product_template_business_category_rule_user,Product Template by effective business category,product.model_product_template,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_user,1,1,1,1
product_template_business_category_rule_sysadmin,Product Template full access for system admin,product.model_product_template,"[(1,'=',1)]",base.group_system,1,1,1,1
product_template_business_category_rule_sysadmin,Product Template access for system admin in effective business category,product.model_product_template,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
product_product_business_category_rule_user,Product Variant by effective business category,product.model_product_product,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_user,1,1,1,1
product_product_business_category_rule_sysadmin,Product Variant full access for system admin,product.model_product_product,"[(1,'=',1)]",base.group_system,1,1,1,1
product_product_business_category_rule_sysadmin,Product Variant access for system admin in effective business category,product.model_product_product,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
stock_quant_business_category_rule_user,Stock Quant by effective business category,stock.model_stock_quant,"[('company_id','in',user.company_ids.ids),('product_id.business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_user,1,0,0,0
stock_quant_business_category_rule_manager,Stock Quant access for inventory manager in effective business category,stock.model_stock_quant,"[('company_id','in',user.company_ids.ids),('product_id.business_category_id','in',user.effective_business_category_ids.ids)]",stock.group_stock_manager,1,1,1,1
stock_quant_business_category_rule_sysadmin,Stock Quant full access for system admin,stock.model_stock_quant,"[(1,'=',1)]",base.group_system,1,1,1,1
stock_quant_business_category_rule_sysadmin,Stock Quant access for system admin in effective business category,stock.model_stock_quant,"[('company_id','in',user.company_ids.ids),('product_id.business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
1 id name model_id:id domain_force groups:id perm_read perm_write perm_create perm_unlink
2 stock_picking_business_category_rule_user_read_create Transfer read/create by effective business category stock.model_stock_picking [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_user 1 0 1 0
3 stock_picking_business_category_rule_user_write_own Transfer write own by effective business category stock.model_stock_picking [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids),'|',('user_id','=',user.id),('create_uid','=',user.id)] stock.group_stock_user 0 1 0 1
4 stock_picking_business_category_rule_manager Transfer full access for inventory manager in effective business category stock.model_stock_picking [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_manager 1 1 1 1
5 stock_picking_business_category_rule_sysadmin Transfer full access for system admin Transfer access for system admin in effective business category stock.model_stock_picking [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
6 stock_move_business_category_rule_user Stock Move by effective business category stock.model_stock_move [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_user 1 0 0 0
7 stock_move_business_category_rule_manager Stock Move full access for inventory manager in effective business category stock.model_stock_move [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_manager 1 1 1 1
8 stock_move_business_category_rule_sysadmin Stock Move full access for system admin Stock Move access for system admin in effective business category stock.model_stock_move [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
9 stock_warehouse_business_category_rule_user Warehouse by effective business category stock.model_stock_warehouse [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_user 1 0 0 0
10 stock_warehouse_business_category_rule_manager Warehouse full access for inventory manager in effective business category stock.model_stock_warehouse [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_manager 1 1 1 1
11 stock_warehouse_business_category_rule_sysadmin Warehouse full access for system admin Warehouse access for system admin in effective business category stock.model_stock_warehouse [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
12 stock_team_business_category_rule_user Inventory Team read by effective business category model_stock_team [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_user 1 0 0 0
13 stock_team_business_category_rule_manager Inventory Team full access for inventory manager in effective business category model_stock_team [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_manager 1 1 1 1
14 stock_team_business_category_rule_sysadmin Inventory Team full access for system admin Inventory Team access for system admin in effective business category model_stock_team [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
15 crm_business_category_rule_inventory_user Business Category by user effective list for inventory user grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] stock.group_stock_user 1 0 0 0
16 crm_business_category_rule_inventory_manager Business Category access for inventory manager in effective business category grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] stock.group_stock_manager 1 1 1 1
17 crm_business_category_rule_inventory_sysadmin Business Category full access for system admin Business Category access for system admin in effective business category grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
18 account_move_inventory_business_category_rule_user Journal Entry read by effective business category for inventory user account.model_account_move [('company_id','in',user.company_ids.ids),('inventory_business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_user 1 0 0 0
19 account_move_inventory_business_category_rule_manager Journal Entry access for inventory manager in effective business category account.model_account_move [('company_id','in',user.company_ids.ids),('inventory_business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_manager 1 1 1 1
20 account_move_inventory_business_category_rule_sysadmin Journal Entry access for system admin in effective business category account.model_account_move [('company_id','in',user.company_ids.ids),('inventory_business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
21 account_move_line_inventory_business_category_rule_user Journal Item read by effective business category for inventory user account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.inventory_business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_user 1 0 0 0
22 account_move_line_inventory_business_category_rule_manager Journal Item access for inventory manager in effective business category account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.inventory_business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_manager 1 1 1 1
23 account_move_line_inventory_business_category_rule_sysadmin Journal Item access for system admin in effective business category account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.inventory_business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
24 product_template_business_category_rule_user Product Template by effective business category product.model_product_template [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_user 1 1 1 1
25 product_template_business_category_rule_sysadmin Product Template full access for system admin Product Template access for system admin in effective business category product.model_product_template [(1,'=',1)] [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
26 product_product_business_category_rule_user Product Variant by effective business category product.model_product_product [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_user 1 1 1 1
27 product_product_business_category_rule_sysadmin Product Variant full access for system admin Product Variant access for system admin in effective business category product.model_product_product [(1,'=',1)] [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
28 stock_quant_business_category_rule_user Stock Quant by effective business category stock.model_stock_quant [('company_id','in',user.company_ids.ids),('product_id.business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_user 1 0 0 0
29 stock_quant_business_category_rule_manager Stock Quant access for inventory manager in effective business category stock.model_stock_quant [('company_id','in',user.company_ids.ids),('product_id.business_category_id','in',user.effective_business_category_ids.ids)] stock.group_stock_manager 1 1 1 1
30 stock_quant_business_category_rule_sysadmin Stock Quant full access for system admin Stock Quant access for system admin in effective business category stock.model_stock_quant [(1,'=',1)] [('company_id','in',user.company_ids.ids),('product_id.business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
@@ -10,7 +10,7 @@ for purchasing transactions.
"author": "PT Gagak Rimang Teknologi",
"website": "https://rimang.id",
"category": "Purchases",
"version": "14.0.1.1.0",
"version": "14.0.1.2.0",
"depends": [
"purchase",
"account",
@@ -2,13 +2,16 @@ id,name,model_id:id,domain_force,groups:id,perm_read,perm_write,perm_create,perm
purchase_order_business_category_rule_user_read_create,Purchase Order read/create by effective business category,purchase.model_purchase_order,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",purchase.group_purchase_user,1,0,1,0
purchase_order_business_category_rule_user_write_own,Purchase Order write own by effective business category,purchase.model_purchase_order,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids),'|',('user_id','=',user.id),('create_uid','=',user.id)]",purchase.group_purchase_user,0,1,0,1
purchase_order_business_category_rule_manager,Purchase Order full access for purchase manager in effective business category,purchase.model_purchase_order,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",purchase.group_purchase_manager,1,1,1,1
purchase_order_business_category_rule_sysadmin,Purchase Order full access for system admin,purchase.model_purchase_order,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
purchase_order_business_category_rule_sysadmin,Purchase Order access for system admin in effective business category,purchase.model_purchase_order,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
purchase_team_business_category_rule_user,Purchase Team read by effective business category,model_purchase_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",purchase.group_purchase_user,1,0,0,0
purchase_team_business_category_rule_manager,Purchase Team full access for purchase manager in effective business category,model_purchase_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",purchase.group_purchase_manager,1,1,1,1
purchase_team_business_category_rule_sysadmin,Purchase Team full access for system admin,model_purchase_team,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
purchase_team_business_category_rule_sysadmin,Purchase Team access for system admin in effective business category,model_purchase_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
crm_business_category_rule_purchase_user,Business Category by user effective list for purchase user,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",purchase.group_purchase_user,1,0,0,0
crm_business_category_rule_purchase_manager,Business Category access for purchase manager in effective business category,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",purchase.group_purchase_manager,1,1,1,1
crm_business_category_rule_purchase_sysadmin,Business Category access for system admin in effective business category,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
account_move_purchase_business_category_rule_user,Vendor Bill read by effective business category for purchase user,account.model_account_move,"[('company_id','in',user.company_ids.ids),('purchase_business_category_id','in',user.effective_business_category_ids.ids)]",purchase.group_purchase_user,1,0,0,0
account_move_purchase_business_category_rule_manager,Vendor Bill access for purchase manager in effective business category,account.model_account_move,"[('company_id','in',user.company_ids.ids),('purchase_business_category_id','in',user.effective_business_category_ids.ids)]",purchase.group_purchase_manager,1,1,1,1
account_move_purchase_business_category_rule_sysadmin,Vendor Bill access for system admin in effective business category,account.model_account_move,"[('company_id','in',user.company_ids.ids),('purchase_business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
account_move_line_purchase_business_category_rule_user,Journal Item read by effective business category for purchase user,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.purchase_business_category_id','in',user.effective_business_category_ids.ids)]",purchase.group_purchase_user,1,0,0,0
account_move_line_purchase_business_category_rule_manager,Journal Item access for purchase manager in effective business category,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.purchase_business_category_id','in',user.effective_business_category_ids.ids)]",purchase.group_purchase_manager,1,1,1,1
account_move_line_purchase_business_category_rule_sysadmin,Journal Item access for system admin in effective business category,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.purchase_business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
1 id name model_id:id domain_force groups:id perm_read perm_write perm_create perm_unlink
2 purchase_order_business_category_rule_user_read_create Purchase Order read/create by effective business category purchase.model_purchase_order [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] purchase.group_purchase_user 1 0 1 0
3 purchase_order_business_category_rule_user_write_own Purchase Order write own by effective business category purchase.model_purchase_order [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids),'|',('user_id','=',user.id),('create_uid','=',user.id)] purchase.group_purchase_user 0 1 0 1
4 purchase_order_business_category_rule_manager Purchase Order full access for purchase manager in effective business category purchase.model_purchase_order [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] purchase.group_purchase_manager 1 1 1 1
5 purchase_order_business_category_rule_sysadmin Purchase Order full access for system admin Purchase Order access for system admin in effective business category purchase.model_purchase_order [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
6 purchase_team_business_category_rule_user Purchase Team read by effective business category model_purchase_team [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] purchase.group_purchase_user 1 0 0 0
7 purchase_team_business_category_rule_manager Purchase Team full access for purchase manager in effective business category model_purchase_team [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] purchase.group_purchase_manager 1 1 1 1
8 purchase_team_business_category_rule_sysadmin Purchase Team full access for system admin Purchase Team access for system admin in effective business category model_purchase_team [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
9 crm_business_category_rule_purchase_user Business Category by user effective list for purchase user grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] purchase.group_purchase_user 1 0 0 0
10 crm_business_category_rule_purchase_manager Business Category access for purchase manager in effective business category grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] purchase.group_purchase_manager 1 1 1 1
11 crm_business_category_rule_purchase_sysadmin Business Category access for system admin in effective business category grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
12 account_move_purchase_business_category_rule_user Vendor Bill read by effective business category for purchase user account.model_account_move [('company_id','in',user.company_ids.ids),('purchase_business_category_id','in',user.effective_business_category_ids.ids)] purchase.group_purchase_user 1 0 0 0
13 account_move_purchase_business_category_rule_manager Vendor Bill access for purchase manager in effective business category account.model_account_move [('company_id','in',user.company_ids.ids),('purchase_business_category_id','in',user.effective_business_category_ids.ids)] purchase.group_purchase_manager 1 1 1 1
14 account_move_purchase_business_category_rule_sysadmin Vendor Bill access for system admin in effective business category account.model_account_move [('company_id','in',user.company_ids.ids),('purchase_business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
15 account_move_line_purchase_business_category_rule_user Journal Item read by effective business category for purchase user account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.purchase_business_category_id','in',user.effective_business_category_ids.ids)] purchase.group_purchase_user 1 0 0 0
16 account_move_line_purchase_business_category_rule_manager Journal Item access for purchase manager in effective business category account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.purchase_business_category_id','in',user.effective_business_category_ids.ids)] purchase.group_purchase_manager 1 1 1 1
17 account_move_line_purchase_business_category_rule_sysadmin Journal Item access for system admin in effective business category account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.purchase_business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
+2 -1
View File
@@ -9,7 +9,7 @@ plus a two-step approval flow: Sales Team Leader then Accounting Manager.
"author": "PT Gagak Rimang Teknologi",
"website": "https://rimang.id",
"category": "Sales/Sales",
"version": "14.0.1.2.2",
"version": "14.0.1.3.0",
"depends": [
"sale_management",
"sale_crm",
@@ -25,6 +25,7 @@ plus a two-step approval flow: Sales Team Leader then Accounting Manager.
"security/security.xml",
"security/ir.model.access.csv",
"security/ir.rule.csv",
"security/sale_base_rule_overrides.xml",
"views/customer_behavior_dashboard_views.xml",
"views/customer_behavior_recompute_wizard_views.xml",
"views/customer_behavior_segment_views.xml",
@@ -2,19 +2,27 @@ id,name,model_id:id,domain_force,groups:id,perm_read,perm_write,perm_create,perm
sale_order_business_category_rule_user_read_create,Sale Order read/create by effective business category,sale.model_sale_order,"[('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_salesman,1,0,1,0
sale_order_business_category_rule_user_write_own,Sale Order write own by effective business category,sale.model_sale_order,"[('business_category_id','in',user.effective_business_category_ids.ids),'|',('user_id','=',user.id),('create_uid','=',user.id)]",sales_team.group_sale_salesman,0,1,0,1
sale_order_business_category_rule_manager,Sale Order full access for sales manager in effective business category,sale.model_sale_order,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
sale_order_business_category_rule_sysadmin,Sale Order full access for system admin,sale.model_sale_order,"[(1,'=',1)]",base.group_system,1,1,1,1
sale_order_business_category_rule_sysadmin,Sale Order access for system admin in effective business category,sale.model_sale_order,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
crm_team_business_category_rule_sales_user,CRM Team read by effective business category for sales user,sales_team.model_crm_team,"[('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_salesman,1,0,0,0
crm_team_business_category_rule_sales_manager,CRM Team full access for sales manager in effective business category,sales_team.model_crm_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
crm_team_business_category_rule_sales_sysadmin,CRM Team access for system admin in effective business category,sales_team.model_crm_team,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
crm_business_category_rule_sales_user,Business Category by user effective list for sales user,grt_business_category_base.model_crm_business_category,"[('id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_salesman,1,0,0,0
crm_business_category_rule_sales_manager,Business Category access for sales manager in effective business category,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
crm_business_category_rule_sales_sysadmin,Business Category access for system admin in effective business category,grt_business_category_base.model_crm_business_category,"[('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
customer_behavior_analysis_rule_sales_user,Customer Behavior Analysis by effective business category,model_customer_behavior_analysis,"[('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_salesman,1,0,0,0
customer_behavior_analysis_rule_sales_manager,Customer Behavior Analysis full access for sales manager in effective business category,model_customer_behavior_analysis,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
customer_behavior_analysis_rule_sales_sysadmin,Customer Behavior Analysis access for system admin in effective business category,model_customer_behavior_analysis,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
account_move_business_category_rule_sales_user,Invoice read by effective business category for sales user,account.model_account_move,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_salesman,1,0,0,0
account_move_business_category_rule_sales_manager,Invoice access for sales manager in effective business category,account.model_account_move,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
account_move_business_category_rule_sales_sysadmin,Invoice access for system admin in effective business category,account.model_account_move,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
account_payment_business_category_rule_sales_user,Payment read by effective business category for sales user,account.model_account_payment,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_salesman,1,0,0,0
account_payment_business_category_rule_sales_manager,Payment access for sales manager in effective business category,account.model_account_payment,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
account_payment_business_category_rule_sales_sysadmin,Payment access for system admin in effective business category,account.model_account_payment,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
account_move_line_business_category_rule_sales_user,Journal Item read by effective business category for sales user,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_salesman,1,0,0,0
account_move_line_business_category_rule_sales_manager,Journal Item access for sales manager in effective business category,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
account_move_line_business_category_rule_sales_sysadmin,Journal Item access for system admin in effective business category,account.model_account_move_line,"[('company_id','in',user.company_ids.ids),('move_id.business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
customer_behavior_config_rule_sales_manager,Customer Behavior Config access by effective business category,model_customer_behavior_config,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
customer_behavior_config_rule_sales_sysadmin,Customer Behavior Config access by effective business category for system admin,model_customer_behavior_config,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
customer_behavior_segment_rule_sales_user,Customer Behavior Segment read by effective business category,model_customer_behavior_segment,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_salesman,1,0,0,0
customer_behavior_segment_rule_sales_manager,Customer Behavior Segment access by effective business category,model_customer_behavior_segment,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
customer_behavior_segment_rule_sales_sysadmin,Customer Behavior Segment access by effective business category for system admin,model_customer_behavior_segment,"[('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
1 id name model_id:id domain_force groups:id perm_read perm_write perm_create perm_unlink
2 sale_order_business_category_rule_user_read_create Sale Order read/create by effective business category sale.model_sale_order [('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_salesman 1 0 1 0
3 sale_order_business_category_rule_user_write_own Sale Order write own by effective business category sale.model_sale_order [('business_category_id','in',user.effective_business_category_ids.ids),'|',('user_id','=',user.id),('create_uid','=',user.id)] sales_team.group_sale_salesman 0 1 0 1
4 sale_order_business_category_rule_manager Sale Order full access for sales manager in effective business category sale.model_sale_order [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
5 sale_order_business_category_rule_sysadmin Sale Order full access for system admin Sale Order access for system admin in effective business category sale.model_sale_order [(1,'=',1)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
6 crm_team_business_category_rule_sales_user CRM Team read by effective business category for sales user sales_team.model_crm_team [('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_salesman 1 0 0 0
7 crm_team_business_category_rule_sales_manager CRM Team full access for sales manager in effective business category sales_team.model_crm_team [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
8 crm_team_business_category_rule_sales_sysadmin CRM Team access for system admin in effective business category sales_team.model_crm_team [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
9 crm_business_category_rule_sales_user Business Category by user effective list for sales user grt_business_category_base.model_crm_business_category [('id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_salesman 1 0 0 0
10 crm_business_category_rule_sales_manager Business Category access for sales manager in effective business category grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
11 crm_business_category_rule_sales_sysadmin Business Category access for system admin in effective business category grt_business_category_base.model_crm_business_category [('company_id','in',user.company_ids.ids),('id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
12 customer_behavior_analysis_rule_sales_user Customer Behavior Analysis by effective business category model_customer_behavior_analysis [('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_salesman 1 0 0 0
13 customer_behavior_analysis_rule_sales_manager Customer Behavior Analysis full access for sales manager in effective business category model_customer_behavior_analysis [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
14 customer_behavior_analysis_rule_sales_sysadmin Customer Behavior Analysis access for system admin in effective business category model_customer_behavior_analysis [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
15 account_move_business_category_rule_sales_user Invoice read by effective business category for sales user account.model_account_move [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_salesman 1 0 0 0
16 account_move_business_category_rule_sales_manager Invoice access for sales manager in effective business category account.model_account_move [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
17 account_move_business_category_rule_sales_sysadmin Invoice access for system admin in effective business category account.model_account_move [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
18 account_payment_business_category_rule_sales_user Payment read by effective business category for sales user account.model_account_payment [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_salesman 1 0 0 0
19 account_payment_business_category_rule_sales_manager Payment access for sales manager in effective business category account.model_account_payment [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
20 account_payment_business_category_rule_sales_sysadmin Payment access for system admin in effective business category account.model_account_payment [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
21 account_move_line_business_category_rule_sales_user Journal Item read by effective business category for sales user account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_salesman 1 0 0 0
22 account_move_line_business_category_rule_sales_manager Journal Item access for sales manager in effective business category account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
23 account_move_line_business_category_rule_sales_sysadmin Journal Item access for system admin in effective business category account.model_account_move_line [('company_id','in',user.company_ids.ids),('move_id.business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
24 customer_behavior_config_rule_sales_manager Customer Behavior Config access by effective business category model_customer_behavior_config [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
25 customer_behavior_config_rule_sales_sysadmin Customer Behavior Config access by effective business category for system admin model_customer_behavior_config [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
26 customer_behavior_segment_rule_sales_user Customer Behavior Segment read by effective business category model_customer_behavior_segment [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_salesman 1 0 0 0
27 customer_behavior_segment_rule_sales_manager Customer Behavior Segment access by effective business category model_customer_behavior_segment [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
28 customer_behavior_segment_rule_sales_sysadmin Customer Behavior Segment access by effective business category for system admin model_customer_behavior_segment [('business_category_id.company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Disable permissive default sales rules to enforce strict business-category isolation. -->
<record id="sale.sale_order_see_all" model="ir.rule">
<field name="active" eval="0"/>
</record>
<record id="sale.sale_order_personal_rule" model="ir.rule">
<field name="active" eval="0"/>
</record>
</odoo>
+2 -1
View File
@@ -2,12 +2,13 @@
{
"name": "Odoo KPI CRM Trigger",
"summary": "CRM event rules to send KPI values by assignment",
"version": "14.0.1.0.0",
"version": "14.0.1.1.0",
"category": "Sales/CRM",
"author": "Custom",
"depends": ["crm", "mail", "hr", "odoo_kpi", "grt_crm_business_category"],
"data": [
"security/ir.model.access.csv",
"security/ir.rule.csv",
"views/kpi_crm_trigger_rule_views.xml",
],
"installable": True,
@@ -151,6 +151,13 @@ class KpiCrmTriggerRuleLine(models.Model):
rule_id = fields.Many2one("kpi.crm.trigger.rule", required=True, ondelete="cascade", index=True)
sequence = fields.Integer(default=10)
active = fields.Boolean(default=True)
business_category_id = fields.Many2one(
"crm.business.category",
related="rule_id.business_category_id",
store=True,
readonly=True,
index=True,
)
stage_id = fields.Many2one("crm.stage", string="Stage")
activity_type_id = fields.Many2one("mail.activity.type", string="Activity Type")
employee_id = fields.Many2one(
@@ -0,0 +1,7 @@
id,name,model_id:id,domain_force,groups:id,perm_read,perm_write,perm_create,perm_unlink
kpi_crm_trigger_rule_category_kpi_manager,KPI CRM Trigger Rule by effective business category (KPI Manager),model_kpi_crm_trigger_rule,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_manager,1,1,1,1
kpi_crm_trigger_rule_category_kpi_admin,KPI CRM Trigger Rule by effective business category (KPI Admin),model_kpi_crm_trigger_rule,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_admin,1,1,1,1
kpi_crm_trigger_rule_category_sale_manager,KPI CRM Trigger Rule by effective business category (Sales Manager),model_kpi_crm_trigger_rule,"[('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
kpi_crm_trigger_rule_line_category_kpi_manager,KPI CRM Trigger Rule Line by effective business category (KPI Manager),model_kpi_crm_trigger_rule_line,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_manager,1,1,1,1
kpi_crm_trigger_rule_line_category_kpi_admin,KPI CRM Trigger Rule Line by effective business category (KPI Admin),model_kpi_crm_trigger_rule_line,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_admin,1,1,1,1
kpi_crm_trigger_rule_line_category_sale_manager,KPI CRM Trigger Rule Line by effective business category (Sales Manager),model_kpi_crm_trigger_rule_line,"[('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
1 id name model_id:id domain_force groups:id perm_read perm_write perm_create perm_unlink
2 kpi_crm_trigger_rule_category_kpi_manager KPI CRM Trigger Rule by effective business category (KPI Manager) model_kpi_crm_trigger_rule [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_manager 1 1 1 1
3 kpi_crm_trigger_rule_category_kpi_admin KPI CRM Trigger Rule by effective business category (KPI Admin) model_kpi_crm_trigger_rule [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_admin 1 1 1 1
4 kpi_crm_trigger_rule_category_sale_manager KPI CRM Trigger Rule by effective business category (Sales Manager) model_kpi_crm_trigger_rule [('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
5 kpi_crm_trigger_rule_line_category_kpi_manager KPI CRM Trigger Rule Line by effective business category (KPI Manager) model_kpi_crm_trigger_rule_line [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_manager 1 1 1 1
6 kpi_crm_trigger_rule_line_category_kpi_admin KPI CRM Trigger Rule Line by effective business category (KPI Admin) model_kpi_crm_trigger_rule_line [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_admin 1 1 1 1
7 kpi_crm_trigger_rule_line_category_sale_manager KPI CRM Trigger Rule Line by effective business category (Sales Manager) model_kpi_crm_trigger_rule_line [('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
@@ -2,12 +2,13 @@
{
"name": "Odoo KPI Customer Behavior Trigger",
"summary": "Customer behavior event rules to send KPI values by assignment",
"version": "14.0.1.0.0",
"version": "14.0.1.1.0",
"category": "Sales/Sales",
"author": "Custom",
"depends": ["sale_management", "hr", "odoo_kpi", "grt_sales_business_category"],
"data": [
"security/ir.model.access.csv",
"security/ir.rule.csv",
"views/kpi_customer_behavior_trigger_rule_views.xml",
],
"installable": True,
@@ -0,0 +1,7 @@
id,name,model_id:id,domain_force,groups:id,perm_read,perm_write,perm_create,perm_unlink
kpi_customer_behavior_trigger_rule_category_kpi_manager,KPI Customer Behavior Trigger Rule by effective business category (KPI Manager),model_kpi_customer_behavior_trigger_rule,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_manager,1,1,1,1
kpi_customer_behavior_trigger_rule_category_kpi_admin,KPI Customer Behavior Trigger Rule by effective business category (KPI Admin),model_kpi_customer_behavior_trigger_rule,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_admin,1,1,1,1
kpi_customer_behavior_trigger_rule_category_sale_manager,KPI Customer Behavior Trigger Rule by effective business category (Sales Manager),model_kpi_customer_behavior_trigger_rule,"[('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
kpi_customer_behavior_trigger_rule_line_category_kpi_manager,KPI Customer Behavior Trigger Rule Line by effective business category (KPI Manager),model_kpi_customer_behavior_trigger_rule_line,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_manager,1,1,1,1
kpi_customer_behavior_trigger_rule_line_category_kpi_admin,KPI Customer Behavior Trigger Rule Line by effective business category (KPI Admin),model_kpi_customer_behavior_trigger_rule_line,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_admin,1,1,1,1
kpi_customer_behavior_trigger_rule_line_category_sale_manager,KPI Customer Behavior Trigger Rule Line by effective business category (Sales Manager),model_kpi_customer_behavior_trigger_rule_line,"[('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
1 id name model_id:id domain_force groups:id perm_read perm_write perm_create perm_unlink
2 kpi_customer_behavior_trigger_rule_category_kpi_manager KPI Customer Behavior Trigger Rule by effective business category (KPI Manager) model_kpi_customer_behavior_trigger_rule [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_manager 1 1 1 1
3 kpi_customer_behavior_trigger_rule_category_kpi_admin KPI Customer Behavior Trigger Rule by effective business category (KPI Admin) model_kpi_customer_behavior_trigger_rule [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_admin 1 1 1 1
4 kpi_customer_behavior_trigger_rule_category_sale_manager KPI Customer Behavior Trigger Rule by effective business category (Sales Manager) model_kpi_customer_behavior_trigger_rule [('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
5 kpi_customer_behavior_trigger_rule_line_category_kpi_manager KPI Customer Behavior Trigger Rule Line by effective business category (KPI Manager) model_kpi_customer_behavior_trigger_rule_line [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_manager 1 1 1 1
6 kpi_customer_behavior_trigger_rule_line_category_kpi_admin KPI Customer Behavior Trigger Rule Line by effective business category (KPI Admin) model_kpi_customer_behavior_trigger_rule_line [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_admin 1 1 1 1
7 kpi_customer_behavior_trigger_rule_line_category_sale_manager KPI Customer Behavior Trigger Rule Line by effective business category (Sales Manager) model_kpi_customer_behavior_trigger_rule_line [('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
+2 -1
View File
@@ -2,12 +2,13 @@
{
"name": "Odoo KPI Sales Trigger",
"summary": "Sales event rules to send KPI values by assignment",
"version": "14.0.1.0.2",
"version": "14.0.1.1.0",
"category": "Sales/Sales",
"author": "Custom",
"depends": ["sale_management", "account", "hr", "odoo_kpi", "grt_sales_business_category"],
"data": [
"security/ir.model.access.csv",
"security/ir.rule.csv",
"views/kpi_sales_trigger_rule_views.xml",
],
"installable": True,
@@ -106,6 +106,13 @@ class KpiSalesTriggerRuleLine(models.Model):
rule_id = fields.Many2one("kpi.sales.trigger.rule", required=True, ondelete="cascade", index=True)
sequence = fields.Integer(default=10)
active = fields.Boolean(default=True)
business_category_id = fields.Many2one(
"crm.business.category",
related="rule_id.business_category_id",
store=True,
readonly=True,
index=True,
)
employee_id = fields.Many2one(
"hr.employee",
related="assignment_id.employee_id",
@@ -0,0 +1,7 @@
id,name,model_id:id,domain_force,groups:id,perm_read,perm_write,perm_create,perm_unlink
kpi_sales_trigger_rule_category_kpi_manager,KPI Sales Trigger Rule by effective business category (KPI Manager),model_kpi_sales_trigger_rule,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_manager,1,1,1,1
kpi_sales_trigger_rule_category_kpi_admin,KPI Sales Trigger Rule by effective business category (KPI Admin),model_kpi_sales_trigger_rule,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_admin,1,1,1,1
kpi_sales_trigger_rule_category_sale_manager,KPI Sales Trigger Rule by effective business category (Sales Manager),model_kpi_sales_trigger_rule,"[('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
kpi_sales_trigger_rule_line_category_kpi_manager,KPI Sales Trigger Rule Line by effective business category (KPI Manager),model_kpi_sales_trigger_rule_line,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_manager,1,1,1,1
kpi_sales_trigger_rule_line_category_kpi_admin,KPI Sales Trigger Rule Line by effective business category (KPI Admin),model_kpi_sales_trigger_rule_line,"[('business_category_id','in',user.effective_business_category_ids.ids)]",odoo_kpi.group_kpi_admin,1,1,1,1
kpi_sales_trigger_rule_line_category_sale_manager,KPI Sales Trigger Rule Line by effective business category (Sales Manager),model_kpi_sales_trigger_rule_line,"[('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
1 id name model_id:id domain_force groups:id perm_read perm_write perm_create perm_unlink
2 kpi_sales_trigger_rule_category_kpi_manager KPI Sales Trigger Rule by effective business category (KPI Manager) model_kpi_sales_trigger_rule [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_manager 1 1 1 1
3 kpi_sales_trigger_rule_category_kpi_admin KPI Sales Trigger Rule by effective business category (KPI Admin) model_kpi_sales_trigger_rule [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_admin 1 1 1 1
4 kpi_sales_trigger_rule_category_sale_manager KPI Sales Trigger Rule by effective business category (Sales Manager) model_kpi_sales_trigger_rule [('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
5 kpi_sales_trigger_rule_line_category_kpi_manager KPI Sales Trigger Rule Line by effective business category (KPI Manager) model_kpi_sales_trigger_rule_line [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_manager 1 1 1 1
6 kpi_sales_trigger_rule_line_category_kpi_admin KPI Sales Trigger Rule Line by effective business category (KPI Admin) model_kpi_sales_trigger_rule_line [('business_category_id','in',user.effective_business_category_ids.ids)] odoo_kpi.group_kpi_admin 1 1 1 1
7 kpi_sales_trigger_rule_line_category_sale_manager KPI Sales Trigger Rule Line by effective business category (Sales Manager) model_kpi_sales_trigger_rule_line [('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1