Zákaznícka firma odišla, zmluva skončila a vy ju chcete v Odoo archivovať. Odoo odpovie chybovou hláškou: „Nemôžete archivovať kontakty, ktoré sú prepojené s aktívnym používateľom. Najprv archivujte príslušného používateľa.“ Ak má firma viacero portálových prístupov, znamená to: každého používateľa jednotlivo vyhľadať, jednotlivo archivovať, späť k firme, znova archivovať.
Napísali sme na to malý modul Archivácia firmy vrátane portálových používateľov (partner_archive_users) pre Odoo 19. Namiesto chybovej hlášky sa zobrazí otázka a pri „Áno“ sa portáloví používatelia a firma archivujú v jednom kroku. Modul je dostupný ako slobodný softvér pod licenciou AGPL-3 na GitHube:
github.com/Alex0176/odoo-partner-archive-users
Modul používame v Biricon IT Services od 3. novembra 2026 v našom produkčnom systéme. Je nový, skúsenosť s ním je teda krátka. Kto ho preberie, mal by si prečítať časti o rozsahu a obmedzeniach .
Problém v štandarde Odoo
Odoo pri archivácii kontaktu kontroluje, či sa na neho viaže používateľ, a ak áno, preruší operáciu. Kontrola dáva zmysel, pretože každý používateľ potrebuje kontakt. Pri interných používateľoch, teda zamestnancoch, je zámok aj zámerný. Pri portálových používateľoch zákazníkov je to však predovšetkým ručná práca. Každá zákaznícka firma s portálovými prístupmi, napríklad na nahliadanie do faktúr a tiketov, potrebuje pri archivácii ten istý postup:
- Vyhľadať používateľov firmy a jej kontaktných osôb,
- každého jednotlivo archivovať,
- späť k firme,
- archivovať firmu.
Riešenie: otázka
Modul rozširuje cestu Akcia → Archivovať pri kontakte, vo formulári aj v zozname. Ak sa na zvolenú firmu alebo jej kontaktné osoby viažu aktívni portáloví používatelia, otvorí sa dialóg s otázkou „Naozaj chcete firmu archivovať? V systéme sú ešte aktívni používatelia.“ Pod ňou sú dotknutí používatelia s menom, prihlasovacím menom a kontaktom.
- Áno, archivovať firmu a používateľov: Najprv sa archivujú používatelia, potom firma.
- Zrušiť: Nič sa nezmení.
- Žiadni portáloví používatelia: Odoo sa správa ako doteraz, dialóg sa nezobrazí.
Čo sa archivuje a čo nie
Rozsah je zámerne úzky:
- Iba portáloví a verejní používatelia (
share = True). Interní používatelia sa touto cestou nikdy nearchivujú. Ak sa na kontakt viaže prístup zamestnanca, chybová hláška Odoo zostane. Nikto tak omylom nezablokuje zamestnanca tým, že archivoval firmu. - Kontaktné osoby zostávajú aktívne ako kontakty. Archivujú sa iba ich portálové prístupy. To zodpovedá štandardu Odoo, ktorý pri archivácii firmy podkontakty tiež nechá nedotknuté.
- Iba cesta archivácie v rozhraní. Priame
write({'active': False}), napríklad v importe alebo skripte, prejde nezmenene do kontroly Odoo.
Technická realizácia
Modul nemá žiadne nové polia v existujúcich modeloch. Skladá sa z rozšírenia res.partner.action_archive a asistenta (partner.archive.users.wizard), ktorý sa zobrazuje ako dialóg.
| Stavebný prvok | Úloha |
|---|---|
action_archive pri kontakte | Vyhľadá aktívnych používateľov s share = True, ktorí sa viažu na kontakt alebo (pri firmách) na kontakty firmy. Ak nejakí existujú, namiesto archivácie sa vráti dialóg. |
| Asistent | Uloží firmu a nájdených používateľov, zobrazí ich a pri „Áno“ vykoná archiváciu s kľúčom kontextu archive_linked_users. |
Kontext skip_archive_users_wizard | Vypne dialóg. Potom opäť platí kontrola Odoo. |
| Prístup | Asistenta môžu vytvárať a používať interní používatelia (base.group_user). |
| Preklad | Nemčina (de.po) a šablóna (.pot) sú priložené. |
Používatelia sa vyhľadávajú a archivujú so zvýšenými právami (sudo). Vďaka tomu dialóg funguje aj pre používateľov bez prístupu k správe používateľov. Druhá strana veci je uvedená v časti obmedzeniach.
Zistenie: test bol zelený, dialóg napriek tomu nefungoval
Modul mal pri prvom nasadení chybu, ktorú automatické testy nenašli. Pri prvom kliknutí na „Archivovať“ v rozhraní sa namiesto dialógu zobrazila chybová obrazovka Odoo s Cannot read properties of undefined (reading 'map').
Príčina: Webový klient volá action_archive priamo a vrátenú akciu vykoná bez ďalšieho spracovania. Pritom nevyhnutne číta kľúč views akcie. Naša akcia mala iba view_mode. Akcie z tlačidiel s type="object" server predtým doplní (clean_action v call_button), priame volanie action_archive nie. Testy volali metódu iba v Pythone a tam chýbajúce pole nebolo vidieť.
Oprava je jeden riadok ("views": [(False, "form")]), pribudla k nej kontrola v teste, ktorá vyžaduje presne tento kľúč. Nič sa pritom nearchivovalo. Poučenie: kto vracia akciu z metódy, ktorú klient volá priamo (action_archive, action_unarchive a podobné), mal by vždy pribaliť views.
Inštalácia
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 sú base a contacts. Po inštalácii treba službu Odoo reštartovať, pretože modul obsahuje kód Pythonu. Kto prevádzkuje produkčný systém, nainštaluje modul najprv na kópii databázy.
obmedzeniach
- Oprávnenie. Pretože sa používatelia archivujú so zvýšenými právami, každý, kto môže archivovať kontakt, môže cez dialóg archivovať aj portálové prístupy tejto firmy. Pre interných používateľov to neplatí. Kto chce portálové prístupy zabezpečiť jemnejšie, musí modul upraviť.
- Žiadna automatická obnova. Ak sa firma neskôr opäť aktivuje, používatelia zostanú archivovaní. Musia sa reaktivovať ručne.
- Iba kontakty. Modul sa týka firiem ako kontaktov (
res.partner). Archivácia firmy Odoo (res.company) má iné kontroly, napríklad keď je ešte štandardnou firmou používateľov. Modul na to nie je určený. - Testované iba na Odoo 19.0 Community. Pre iné verzie sme ho nepreverovali.
Časté otázky
Prečo sa zamestnanci nearchivujú spolu s firmou?
Interný používateľ má v systéme práva a je zvyčajne prepojený s vlastnými údajmi, úlohami a oprávneniami. Zablokovať ho ako vedľajší účinok archivácie firmy je pre nás príliš riskantné. Preto zostáva chybová hláška Odoo.
Môžem otázku vypnúť?
V kóde cez kontext skip_archive_users_wizard. Nastavenie v rozhraní neexistuje. Kto modul odinštaluje, dostane opäť štandardné správanie Odoo.
Pod akou licenciou je?
Pod AGPL-3. Chyby a vylepšenia sú vítané ako issue v repozitári GitHub .
Podpora od Biricon IT Services
Spravujeme inštalácie Odoo pre malé a stredné podniky: od zavedenia cez úpravy a migrácie až po bežnú prevádzku. Ak chcete zjednodušiť postupy, ako je archivácia zákazníckych firiem v Odoo, zriadiť portál pre svojich zákazníkov alebo bezpečne dostať modul do svojej produkčnej inštancie, radi pomôžeme. Ďalšie vlastné vývoje: Čísla dokladov z prefixu, roka a počítadla, Obchodný register a overenie adries pre rakúskych zákazníkov a Produktové sety v ponuke ako sekcia.
Stav k 3. novembru 2026. Verzia modulu 19.0.1.0.0 s opravou z toho istého dňa. Všetky mená a prihlasovacie mená na obrázkoch sú zvolené voľne.