Přejít na obsah

Odoo 19: archivace firmy včetně uživatelů portálu – modul partner_archive_users s potvrzovacím dialogem místo chybového hlášení

3. listopadu 2026 | Odoo 19 Community | Vlastní vývoj
3. listopadu 2026 od
Odoo 19: archivace firmy včetně uživatelů portálu – modul partner_archive_users s potvrzovacím dialogem místo chybového hlášení

Modul partner_archive_users pro Odoo 19: potvrzovací dotaz při archivaci firmy s uživateli portálu

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:

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

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

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

Přehled: uživatelé portálu a firma se archivují, kontaktní osoby zůstávají aktivní, interní uživatelé se nikdy nemění

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

Kontaktujte nás

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