Bir müşteri şirketi taşındı, sözleşme sona erdi ve onu Odoo’da arşivlemek istiyorsunuz. Odoo bir hata mesajıyla yanıt verir: “Etkin bir kullanıcıyla bağlantılı kişileri arşivleyemezsiniz. Önce ilgili kullanıcıyı arşivleyin.” Şirketin birden fazla portal erişimi varsa bu şu anlama gelir: Her kullanıcıyı tek tek bul, tek tek arşivle, şirkete geri dön, yeniden arşivle.
Bunun için küçük bir modül olan Şirketi portal kullanıcılarıyla birlikte arşivleme modülünü (partner_archive_users) Odoo 19 için yazdık. Hata mesajı yerine bir onay sorusu gelir ve “Evet” denirse portal kullanıcıları ve şirket tek adımda arşivlenir. Modül, AGPL-3 lisansı altında özgür yazılım olarak GitHub’da yer alır:
github.com/Alex0176/odoo-partner-archive-users
Modülü Biricon IT Services’te 3 Kasım 2026’dan beri üretim sistemimizde kullanıyoruz. Yeni olduğu için deneyimimiz kısa. Modülü benimseyecek olanlar şu bölümleri okumalıdır: Kapsam ve Sınırlar bölümünü okumalıdır.
Odoo standardındaki sorun
Odoo, bir kişiyi arşivlerken ona bağlı bir kullanıcı olup olmadığını kontrol eder ve varsa işlemi iptal eder. Kontrol anlamlıdır, çünkü her kullanıcının bir kişiye ihtiyacı vardır. Dahili kullanıcılar, yani çalışanlar için bu kilit istenen bir şeydir de. Ancak müşterilerin portal kullanıcılarında bu daha çok elle yapılan bir iştir. Portal erişimleri olan her müşteri şirketi, örneğin faturaları ve destek taleplerini görüntülemek için, arşivlenirken aynı süreci gerektirir:
- Şirketin ve irtibat kişilerinin kullanıcılarını aramak,
- her birini tek tek arşivlemek,
- şirkete geri dönmek,
- şirketi arşivlemek.
Çözüm: bir onay sorusu
Modül, kişide Eylem → Arşivle yolunu genişletir; hem formda hem listede. Seçilen şirkete veya irtibat kişilerine bağlı etkin portal kullanıcıları varsa, “Şirket gerçekten arşivlensin mi? Sistemde hâlâ etkin kullanıcılar var.” sorusunu içeren bir diyalog açılır. Altında etkilenen kullanıcılar ad, giriş adı ve kişiyle birlikte listelenir.
- Evet, şirketi ve kullanıcıları arşivle: Önce kullanıcılar, ardından şirket arşivlenir.
- İptal: Hiçbir şey değişmez.
- Portal kullanıcısı yok: Odoo eskisi gibi davranır, diyalog görünmez.
Nelerin arşivlendiği ve nelerin arşivlenmediği
Kapsam bilerek dar tutulmuştur:
- Yalnızca portal ve genel kullanıcılar (
share = True). Dahili kullanıcılar bu yolla hiçbir zaman arşivlenmez. Kişiye bir çalışan erişimi bağlıysa, Odoo’nun hata mesajı geçerli kalır. Böylece kimse bir şirketi arşivlediği için yanlışlıkla bir çalışanı kilitlemez. - İrtibat kişileri kişi olarak etkin kalır. Yalnızca portal erişimleri arşivlenir. Bu, bir şirketi arşivlerken alt kişilere de dokunmayan Odoo standardına uygundur.
- Yalnızca arayüzün arşivleme yolu. Örneğin bir içe aktarmada veya betikte doğrudan
write({'active': False}), değişmeden Odoo’nun kontrolüne girer.
Teknik uygulama
Modülün mevcut modellerde yeni alanı yoktur. res.partner.action_archive için bir genişletmeden ve diyalog olarak görünen bir sihirbazdan (partner.archive.users.wizard) oluşur.
| Yapı taşı | Görev |
|---|---|
Kişide action_archive | Kişiye veya (şirketlerde) şirketin kişilerine bağlı, share = True olan etkin kullanıcıları arar. Varsa, arşivleme yerine diyalog döndürülür. |
| Sihirbaz | Şirketi ve bulunan kullanıcıları kaydeder, gösterir ve “Evet” denirse arşivlemeyi archive_linked_users bağlam anahtarıyla gerçekleştirir. |
skip_archive_users_wizard bağlamı | Diyaloğu kapatır. O zaman yine Odoo’nun kontrolü geçerli olur. |
| Erişim | Sihirbazı dahili kullanıcılar (base.group_user) oluşturabilir ve kullanabilir. |
| Çeviri | Almanca (de.po) ve şablon (.pot) birlikte gelir. |
Kullanıcılar yükseltilmiş yetkilerle aranır ve arşivlenir (sudo). Böylece diyalog, kullanıcı yönetimine erişimi olmayan kullanıcılar için de çalışır. Madalyonun öbür yüzü şurada yer alır: Sınırlar.
Bir bulgu: Test yeşildi, diyalog yine de bozuktu
Modülün ilk kullanımda, otomatik testlerin bulamadığı bir hatası vardı. Arayüzde “Arşivle”ye ilk tıklamada, diyalog yerine Cannot read properties of undefined (reading 'map') ile Odoo hata ekranı göründü.
Neden: Web istemcisi action_archive metodunu doğrudan çağırır ve döndürülen eylemi başka bir hazırlık yapmadan çalıştırır. Bu sırada eylemin views anahtarını zorunlu olarak okur. Bizim eylemimizde yalnızca view_mode vardı. type="object" düğmelerinden gelen eylemleri sunucu önceden tamamlar (call_button içinde clean_action), action_archive’in doğrudan çağrılmasında ise bunu yapmaz. Testler metodu yalnızca Python’da çağırdı ve orada eksik alan fark edilmedi.
Düzeltme tek bir satırdır ("views": [(False, "form")]); buna, tam olarak bu anahtarı isteyen bir test kontrolü eklenir. Bu sırada hiçbir şey arşivlenmedi. Ders: İstemcinin doğrudan çağırdığı bir metottan eylem döndüren (action_archive, action_unarchive ve benzerleri), her zaman views değerini de vermelidir.
Kurulum
git clone https://github.com/Alex0176/odoo-partner-archive-users.git
ln -s /pfad/odoo-partner-archive-users/partner_archive_users /pfad/addons/
odoo-bin -c odoo.conf -d <datenbank> -i partner_archive_users --stop-after-init
Bağımlılıklar base ve contacts’tır. Kurulumdan sonra Odoo hizmeti yeniden başlatılmalıdır, çünkü modül Python kodu içerir. Üretim sistemi işletenler modülü önce veritabanının bir kopyasına kurar.
Sınırlar
- Yetki. Kullanıcılar yükseltilmiş yetkilerle arşivlendiği için, bir kişiyi arşivleme yetkisi olan herkes diyalog üzerinden bu şirketin portal erişimlerini de arşivleyebilir. Dahili kullanıcılar için bu geçerli değildir. Portal erişimlerini daha ince ayarla güvenceye almak isteyenlerin modülü uyarlaması gerekir.
- Otomatik geri yükleme yok. Şirket daha sonra yeniden etkinleştirilirse, kullanıcılar arşivlenmiş kalır. Elle yeniden etkinleştirilmeleri gerekir.
- Yalnızca kişiler. Modül, kişi olarak şirketleri (
res.partner) ilgilendirir. Bir Odoo şirketinin (res.company) arşivlenmesinin, örneğin hâlâ kullanıcıların varsayılan şirketi olduğunda, başka kontrolleri vardır. Modül bunun için tasarlanmamıştır. - Yalnızca Odoo 19.0 Community ile test edildi. Diğer sürümler için denemedik.
Sık sorulan sorular
Çalışanlar neden birlikte arşivlenmiyor?
Dahili bir kullanıcının sistemde yetkileri vardır ve çoğunlukla kendi verilerine, görevlerine ve izinlerine bağlıdır. Onu bir şirketin arşivlenmesinin yan etkisi olarak kilitlemek bizim için fazla riskli. Bu nedenle Odoo hata mesajı geçerli kalır.
Onay sorusunu kapatabilir miyim?
Kodda skip_archive_users_wizard bağlamı üzerinden. Arayüzde bir ayar yoktur. Modülü kaldıran, yine Odoo’nun standart davranışını elde eder.
Hangi lisans altındadır?
AGPL-3 altında. Hatalar ve iyileştirmeler şu adreste bir issue olarak memnuniyetle karşılanır: GitHub deposu .
Biricon IT Services'ten destek
Küçük ve orta ölçekli işletmeler için Odoo kurulumlarına bakıyoruz: kurulumdan özelleştirmelere ve geçişlere, süregelen işletime kadar. Müşteri şirketlerini arşivleme gibi süreçleri Odoo’da basitleştirmek, müşterileriniz için bir portal kurmak veya bir modülü üretim ortamınıza güvenle almak istiyorsanız, memnuniyetle yardımcı oluruz. Diğer kendi geliştirmelerimiz: Önek, yıl ve sayaçtan oluşan belge numaraları, Avusturyalı müşteriler için ticaret sicili ve adres doğrulama ve Tekliflerde bölüm olarak ürün setleri.
Durum: 3 Kasım 2026. Aynı günkü düzeltmeyle birlikte modül sürümü 19.0.1.0.0. Görsellerdeki tüm adlar ve giriş adları serbestçe seçilmiştir.