Přejít na obsah

Odoo 19: Archivace firmy včetně portálových uživatelů – modul partner_archive_users s dotazem místo chybové zprávy

3. listopadu 2026 | Odoo 19 Community | Vlastní vývoj
3. listopadu 2026 od
Odoo 19: Archivace firmy včetně portálových uživatelů – modul partner_archive_users s dotazem místo chybové zprávy

Modul partner_archive_users pro Odoo 19: dotaz při archivaci firmy s portálovými uživateli

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:

  1. Vyhledat uživatele firmy a jejích kontaktních osob,
  2. každého jednotlivě archivovat,
  3. vrátit se k firmě,
  4. 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.

Srovnání: chybová zpráva Odoo při archivaci firmy a dialog s dotazem z modulu

  • 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ý:

Přehled: portáloví uživatelé a firma se archivují, kontaktní osoby zůstávají aktivní, interních uživatelů se nikdy nedotýká

  • 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 kontaktuVyhledá 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ůvodceUloží 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_wizardVypne dialog. Pak opět platí kontrola Odoo.
PřístupPrůvodce smějí vytvářet a používat interní uživatelé (base.group_user).
PřekladNě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.

Kontaktujte nás nyní

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ě.