Zákaznická firma odešla, smlouva skončila a chcete ji v Odoo archivovat. Odoo odpoví chybovou zprávou: „Nelze archivovat kontakty propojené s aktivním uživatelem. Nejprve archivujte příslušného uživatele.“ Pokud má firma více přístupů do portálu, znamená to najít každého uživatele zvlášť, jednotlivě je archivovat, vrátit se k firmě a znovu ji archivovat.
Proto jsme pro Odoo 19 vytvořili malý modul Archivace firmy včetně uživatelů portálu (partner_archive_users). Místo chybové zprávy se zobrazí potvrzovací dotaz a po volbě „Ano“ se uživatelé portálu i firma archivují v jednom kroku. Modul je dostupný na GitHubu jako svobodný software pod licencí AGPL-3:
github.com/Alex0176/odoo-partner-archive-users
V Biricon IT Services modul používáme v produkčním systému od 3. listopadu 2026. Je nový, takže zkušenosti s ním máme zatím krátké. Pokud jej chcete nasadit, doporučujeme přečíst si části Rozsah a Omezení .
Problém ve standardním Odoo
Při archivaci kontaktu Odoo kontroluje, zda je s ním propojený uživatel, a pokud ano, akci přeruší. Tato kontrola dává smysl, protože každý uživatel potřebuje kontakt. U interních uživatelů, tedy zaměstnanců, je toto omezení záměrné. U zákaznických uživatelů portálu ale především přidává ruční práci. Každá zákaznická firma s přístupy do portálu, například pro prohlížení faktur a požadavků na podporu, vyžaduje při archivaci stejný postup:
- vyhledat uživatele firmy a jejích kontaktních osob,
- každého zvlášť archivovat,
- vrátit se k firmě,
- archivovat firmu.
Řešení: potvrzovací dotaz
Modul rozšiřuje akci Akce → Archivovat u kontaktu, a to ve formuláři i v seznamu. Pokud jsou s vybranou firmou nebo jejími kontaktními osobami propojeni aktivní uživatelé portálu, otevře se dialog s otázkou „Opravdu chcete firmu archivovat? V systému jsou stále aktivní uživatelé.“ Pod ní je seznam dotčených uživatelů se jménem, přihlašovacím jménem a kontaktem.
- Ano, archivovat firmu i uživatele: Nejprve se archivují uživatelé a poté firma.
- Zrušit: Nic se nezmění.
- Žádní uživatelé portálu: Odoo se chová jako dosud, dialog se nezobrazí.
Co se archivuje a co ne
Rozsah funkcí je záměrně úzký:
- Pouze portáloví a veřejní uživatelé (
share = True). Interní uživatelé se tímto způsobem nikdy nearchivují. Pokud je ke kontaktu přiřazen zaměstnanecký účet, chybové hlášení Odoo se zobrazí i nadále. Nikdo tak omylem nezablokuje zaměstnance jen tím, že archivuje firmu. - Kontaktní osoby zůstávají jako kontakty aktivní. Archivují se pouze jejich přístupy do portálu. To odpovídá standardnímu chování Odoo, které při archivaci firmy rovněž nemění její podřízené kontakty.
- Pouze archivace přes uživatelské rozhraní. Přímé volání
write({'active': False}), například při importu nebo ve skriptu, nadále podléhá standardní kontrole Odoo.
Technické řešení
Modul nepřidává do stávajících modelů žádná nová pole. Skládá se z rozšíření res.partner.action_archive a průvodce (partner.archive.users.wizard), který se zobrazuje jako dialog.
| Součást | Úloha |
|---|---|
action_archive u kontaktu | Vyhledá aktivní uživatele s share = True, kteří jsou přiřazeni ke kontaktu nebo u firem ke kontaktům dané firmy. Pokud nějaké najde, místo archivace vrátí dialog. |
| Průvodce | Uloží firmu a nalezené uživatele, zobrazí je a při volbě „Ano“ provede archivaci s kontextovým klíčem archive_linked_users. |
Kontext skip_archive_users_wizard | Vypne dialog. Poté opět platí standardní kontrola Odoo. |
| Přístup | Průvodce mohou vytvářet a používat interní uživatelé (base.group_user). |
| Překlad | Součástí je německý překlad (de.po) a šablona (.pot). |
Uživatelé se vyhledávají a archivují se zvýšenými oprávněními (sudo). Dialog tak funguje i uživatelům bez přístupu ke správě uživatelů. Nevýhody tohoto řešení popisujeme v části Omezení.
Zjištěný problém: test prošel, ale dialog přesto nefungoval
Při prvním nasazení se v modulu projevila chyba, kterou automatické testy neodhalily. Po prvním kliknutí na „Archivovat“ v uživatelském rozhraní se místo dialogu zobrazila chybová obrazovka Odoo s hlášením Cannot read properties of undefined (reading 'map').
Příčina: webový klient volá action_archive přímo a vrácenou akci provede bez dalšího zpracování. Přitom vždy čte klíč views dané akce. Naše akce obsahovala pouze view_mode. Akce z tlačítek s type="object" server předem doplňuje (clean_action v call_button), při přímém volání action_archive to však nedělá. Testy volaly metodu pouze v Pythonu, kde se chybějící pole neprojevilo.
Oprava spočívá v jediném řádku ("views": [(False, "form")]) a v doplnění kontroly do testu, která vyžaduje právě tento klíč. Při chybě se nic nearchivovalo. Poučení: pokud vracíte akci z metody, kterou klient volá přímo (action_archive, action_unarchive a podobné), měli byste vždy předat i views.
Instalace
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
Modul závisí na modulech base a contacts. Po instalaci je nutné restartovat službu Odoo, protože modul obsahuje kód v Pythonu. Pokud provozujete produkční systém, nainstalujte modul nejprve na kopii databáze.
Omezení
- Oprávnění. Protože se uživatelé archivují se zvýšenými oprávněními, může každý, kdo smí archivovat kontakt, prostřednictvím dialogu archivovat i přístupy dané firmy do portálu. Na interní uživatele se to nevztahuje. Pokud potřebujete přístupy do portálu chránit podrobnějšími oprávněními, musíte modul upravit.
- Bez automatického obnovení. Pokud firmu později znovu aktivujete, uživatelé zůstanou archivovaní. Je nutné je znovu aktivovat ručně.
- Pouze kontakty. Modul se týká firem vedených jako kontakty (
res.partner). Archivace společnosti v Odoo (res.company) podléhá jiným kontrolám, například pokud je stále výchozí společností některých uživatelů. K tomu tento modul není určen. - Testováno pouze v Odoo 19.0 Community. V jiných verzích jsme modul neověřovali.
Časté dotazy
Proč se současně nearchivují i zaměstnanci?
Interní uživatel má v systému oprávnění a obvykle je propojen s vlastními daty, úkoly a přístupovými právy. Zablokovat ho jako vedlejší účinek archivace firmy považujeme za příliš riskantní. V tomto případě se proto nadále zobrazuje chybové hlášení Odoo.
Mohu potvrzovací dialog vypnout?
V kódu pomocí kontextu skip_archive_users_wizard. V uživatelském rozhraní takové nastavení není. Odinstalováním modulu se obnoví standardní chování Odoo.
Pod jakou licencí je modul dostupný?
Pod licencí AGPL-3. Hlášení chyb a návrhy na vylepšení uvítáme jako issues v repozitáři na GitHubu .
Podpora od Biricon IT Services
Spravujeme instalace Odoo pro malé a střední podniky: od zavedení přes úpravy a migrace až po každodenní provoz. Pokud chcete zjednodušit postupy, jako je archivace zákaznických firem v Odoo, zřídit portál pro své zákazníky nebo bezpečně nasadit modul do produkčního prostředí, rádi vám pomůžeme. Další moduly z našeho vývoje: Čísla dokladů z prefixu, roku a pořadového čísla, Obchodní rejstřík a ověřování adres pro rakouské zákazníky a Sady produktů v nabídce jako sekce.
Stav k 3. listopadu 2026. Verze modulu 19.0.1.0.0 s opravou ze stejného dne. Všechna jména a přihlašovací jména na obrázcích jsou smyšlená.