Zákaznická firma odešla, smlouva skončila a vy ji chcete v Odoo archivovat. Odoo odpoví chybovou zprávou: „Nelze archivovat kontakty, které jsou propojeny s aktivním uživatelem. Nejprve archivujte příslušného uživatele.“ Má-li firma několik portálových přístupů, znamená to: každého uživatele jednotlivě vyhledat, jednotlivě archivovat, vrátit se k firmě, znovu archivovat.
Napsali jsme proto malý modul Archivace firmy včetně portálových uživatelů (partner_archive_users) pro Odoo 19. Místo chybové zprávy se zobrazí dotaz a při odpovědi „Ano“ se portáloví uživatelé a firma archivují v jednom kroku. Modul je k dispozici jako svobodný software pod licencí AGPL-3 na GitHubu:
github.com/Alex0176/odoo-partner-archive-users
Modul používáme ve společnosti Biricon IT Services v našem produkčním systému od 3. listopadu 2026. Je nový, zkušenosti s ním jsou tedy krátké. Kdo jej převezme, měl by si přečíst části o rozsahu a omezeních .
Problém ve standardním Odoo
Odoo při archivaci kontaktu kontroluje, zda na něj není navázán uživatel, a pokud ano, akci přeruší. Kontrola dává smysl, protože každý uživatel potřebuje kontakt. U interních uživatelů, tedy zaměstnanců, je zámek také žádoucí. U portálových uživatelů zákazníků je to však především ruční práce. Každá zákaznická firma s portálovými přístupy, například k nahlížení do faktur a tiketů, vyžaduje při archivaci stejný postup:
- Vyhledat uživatele firmy a jejích kontaktních osob,
- každého jednotlivě archivovat,
- vrátit se k firmě,
- archivovat firmu.
Řešení: dotaz
Modul rozšiřuje cestu Akce → Archivovat u kontaktu, ve formuláři i v seznamu. Pokud jsou k vybrané firmě nebo jejím kontaktním osobám navázáni aktivní portáloví uživatelé, otevře se dialog s otázkou „Má být firma opravdu archivována? V systému jsou ještě aktivní uživatelé.“ Pod ní jsou uvedeni dotčení uživatelé se jménem, přihlašovacím jménem a kontaktem.
- Ano, archivovat firmu a uživatele: Nejprve se archivují uživatelé, poté firma.
- Zrušit: Nic se nezmění.
- Žádní portáloví uživatelé: Odoo se chová jako dosud, dialog se nezobrazí.
Co se archivuje a co ne
Rozsah je záměrně úzký:
- Pouze portáloví a veřejní uživatelé (
share = True). Interní uživatelé se touto cestou nikdy nearchivují. Je-li na kontakt navázán zaměstnanecký přístup, chybová zpráva Odoo zůstává. Nikdo tak omylem nezablokuje zaměstnance tím, že archivoval firmu. - Kontaktní osoby zůstávají jako kontakty aktivní. Archivují se pouze jejich portálové přístupy. To odpovídá standardu Odoo, které se při archivaci firmy podřízených kontaktů také nedotýká.
- Pouze cesta archivace v uživatelském rozhraní. Přímé
write({'active': False}), například v importu nebo skriptu, prochází beze změny kontrolou Odoo.
Technické provedení
Modul nemá žádná nová pole u existujících modelů. Skládá se z rozšíření res.partner.action_archive a průvodce (partner.archive.users.wizard), který se zobrazí jako dialog.
| Součást | Úkol |
|---|---|
action_archive u kontaktu | Vyhledá aktivní uživatele s share = True, kteří jsou navázáni na kontakt nebo (u firem) na kontakty firmy. Pokud nějací existují, místo archivace se vrátí dialog. |
| Průvodce | Uloží firmu a nalezené uživatele, zobrazí je a při „Ano“ provede archivaci s kontextovým klíčem archive_linked_users. |
Kontext skip_archive_users_wizard | Vypne dialog. Pak opět platí kontrola Odoo. |
| Přístup | Průvodce smějí vytvářet a používat interní uživatelé (base.group_user). |
| Překlad | Němčina (de.po) a šablona (.pot) jsou přiloženy. |
Uživatelé se vyhledávají a archivují se zvýšenými oprávněními (sudo). Díky tomu dialog funguje i pro uživatele bez přístupu ke správě uživatelů. Odvrácená strana je uvedena v části omezeních.
Zjištění: Test byl zelený, dialog přesto nefungoval
Modul měl při prvním nasazení chybu, kterou automatické testy nenašly. Při prvním kliknutí na „Archivovat“ v uživatelském rozhraní se místo dialogu zobrazila chybová obrazovka Odoo s 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 nezbytně čte klíč views akce. Naše akce měla pouze view_mode. Akce z tlačítek s type="object" server předtím doplní (clean_action v call_button), přímé volání action_archive nikoli. Testy volaly metodu pouze v Pythonu a tam chybějící pole nevadilo.
Oprava je jeden řádek ("views": [(False, "form")]), k tomu přibyla kontrola v testu, která vyžaduje právě tento klíč. Přitom se nic nearchivovalo. Poučení: Kdo vrací akci z metody, kterou klient volá přímo (action_archive, action_unarchive a podobné), měl by vždy přidat 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
Závislosti jsou base a contacts. Po instalaci je nutné službu Odoo restartovat, protože modul obsahuje kód v Pythonu. Kdo provozuje produkční systém, instaluje modul nejprve na kopii databáze.
omezeních
- 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 také portálové přístupy této firmy. U interních uživatelů to neplatí. Kdo chce portálové přístupy zabezpečit jemněji, musí modul upravit.
- Žádné automatické obnovení. Pokud se firma později opět aktivuje, uživatelé zůstanou archivováni. Je nutné je ručně reaktivovat.
- Pouze kontakty. Modul se týká firem jako kontaktů (
res.partner). Archivace firmy Odoo (res.company) má jiné kontroly, například když je stále výchozí firmou uživatelů. K tomu modul není určen. - Testováno pouze s Odoo 19.0 Community. Pro jiné verze jsme jej neověřovali.
Časté dotazy
Proč se zaměstnanci nearchivují spolu s firmou?
Interní uživatel má v systému oprávnění a je většinou propojen s vlastními daty, úkoly a oprávněními. Zablokovat jej jako vedlejší účinek archivace firmy je pro nás příliš riskantní. Proto zůstává chybová zpráva Odoo.
Mohu dotaz vypnout?
V kódu prostřednictvím kontextu skip_archive_users_wizard. Nastavení v uživatelském rozhraní neexistuje. Kdo modul odinstaluje, získá opět standardní chování Odoo.
Pod jakou licencí je vydán?
Pod AGPL-3. Chyby a vylepšení jsou vítány formou issue v repozitáři GitHub .
Podpora od Biricon IT Services
Spravujeme instalace Odoo pro malé a střední podniky: od zavedení přes úpravy a migrace až po průběžný 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 své produkční instance, rádi vám pomůžeme. Další vlastní vývoj: Čísla dokladů z předpony, roku a čítače, Obchodní rejstřík a ověření adres pro rakouské zákazníky a Produktové sady v nabídce jako sekce.
Stav k 3. listopadu 2026. Verze modulu 19.0.1.0.0 s opravou téhož dne. Všechna jména a přihlašovací jména na obrázcích jsou zvolena libovolně.