En kundevirksomhed er flyttet væk, kontrakten er ophørt, og du vil arkivere den i Odoo. Odoo svarer med en fejlmeddelelse: »Du kan ikke arkivere kontakter, der er knyttet til en aktiv bruger. Arkivér først den tilhørende bruger.« Har virksomheden flere portaladgange, betyder det: Find hver bruger enkeltvis, arkivér enkeltvis, tilbage til virksomheden, arkivér igen.
Vi har til det formål skrevet det lille modul Arkivér virksomhed inklusive portalbrugere (partner_archive_users) til Odoo 19. I stedet for fejlmeddelelsen kommer en forespørgsel, og ved »Ja« arkiveres portalbrugerne og virksomheden i ét trin. Modulet er tilgængeligt som fri software under AGPL-3-licensen på GitHub:
github.com/Alex0176/odoo-partner-archive-users
Vi bruger modulet hos Biricon IT Services i vores produktionssystem siden 3. november 2026. Det er nyt, så erfaringen med det er kort. Den, der overtager det, bør læse afsnittene om omfang og begrænsninger .
Problemet i Odoo-standarden
Odoo kontrollerer ved arkivering af en kontakt, om en bruger hænger på den, og afbryder, hvis det er tilfældet. Kontrollen giver mening, for hver bruger har brug for en kontakt. For interne brugere, altså medarbejdere, er spærringen også tilsigtet. For kunders portalbrugere er den derimod mest af alt manuelt arbejde. Hver kundevirksomhed med portaladgange, f.eks. til at se fakturaer og tickets, kræver ved arkivering det samme forløb:
- Find brugerne hos virksomheden og dens kontaktpersoner,
- arkivér hver enkeltvis,
- tilbage til virksomheden,
- arkivér virksomheden.
Løsningen: en forespørgsel
Modulet udvider vejen Handling → Arkivér på kontakten, i formularen såvel som i listen. Hænger der aktive portalbrugere på den valgte virksomhed eller dens kontaktpersoner, åbner der sig en dialog med spørgsmålet »Skal virksomheden virkelig arkiveres? Der er stadig aktive brugere i systemet.« Nedenunder står de berørte brugere med navn, brugernavn og kontakt.
- Ja, arkivér virksomhed og brugere: Først arkiveres brugerne, derefter virksomheden.
- Annullér: Der ændres ingenting.
- Ingen portalbrugere til stede: Odoo opfører sig som hidtil, der vises ingen dialog.
Hvad der arkiveres, og hvad der ikke gør
Omfanget er bevidst snævert afgrænset:
- Kun portal- og offentlige brugere (
share = True). Interne brugere arkiveres aldrig ad denne vej. Hænger en medarbejderadgang på kontakten, består Odoos fejlmeddelelse. Således spærrer ingen ved et uheld en medarbejder, fordi vedkommende har arkiveret en virksomhed. - Kontaktpersoner forbliver aktive som kontakter. Kun deres portaladgange arkiveres. Det svarer til Odoo-standarden, som ved arkivering af en virksomhed heller ikke rører underkontakterne.
- Kun grænsefladens arkiveringsvej. Et direkte
write({'active': False}), f.eks. i en import eller et script, løber uændret ind i Odoos kontrol.
Teknisk implementering
Modulet har ingen nye felter på eksisterende modeller. Det består af en udvidelse af res.partner.action_archive og en guide (partner.archive.users.wizard), som vises som dialog.
| Byggesten | Opgave |
|---|---|
action_archive på kontakten | Søger aktive brugere med share = True, som hænger på kontakten eller (ved virksomheder) på virksomhedens kontakter. Findes der nogen, returneres dialogen i stedet for at arkivere. |
| Guide | Gemmer virksomhed og fundne brugere, viser dem og udfører ved »Ja« arkiveringen med kontekstnøglen archive_linked_users. |
Kontekst skip_archive_users_wizard | Slår dialogen fra. Så gælder Odoos kontrol igen. |
| Adgang | Guiden må interne brugere (base.group_user) oprette og bruge. |
| Oversættelse | Tysk (de.po) og skabelon (.pot) medfølger. |
Brugerne søges og arkiveres med forhøjede rettigheder (sudo). Dermed fungerer dialogen også for brugere uden adgang til brugeradministrationen. Bagsiden står under begrænsninger.
Et fund: Testen var grøn, dialogen alligevel i stykker
Modulet havde ved den første brug en fejl, som de automatiske tests ikke fandt. Ved det første klik på »Arkivér« i grænsefladen dukkede i stedet for dialogen Odoos fejlskærm op med Cannot read properties of undefined (reading 'map').
Årsagen: Webklienten kalder action_archive direkte og udfører en returneret handling uden yderligere bearbejdning. Her læser den obligatorisk nøglen views i handlingen. Vores handling havde kun view_mode. Handlinger fra knapper med type="object" supplerer serveren på forhånd (clean_action i call_button), det direkte kald af action_archive gør den ikke. Testene kaldte kun metoden i Python, og dér blev det manglende felt ikke opdaget.
Rettelsen er én linje ("views": [(False, "form")]), dertil kommer en kontrol i testen, som kræver netop denne nøgle. Der blev ikke arkiveret noget undervejs. Erfaringen: Den, der returnerer en handling fra en metode, som klienten kalder direkte (action_archive, action_unarchive og lignende), bør altid medgive views.
Installation
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
Afhængigheder er base og contacts. Efter installationen skal Odoo-tjenesten genstartes, fordi modulet indeholder Python-kode. Den, der driver et produktionssystem, installerer først modulet på en kopi af databasen.
begrænsninger
- Tilladelse. Fordi brugerne arkiveres med forhøjede rettigheder, kan enhver, der må arkivere en kontakt, via dialogen også arkivere denne virksomheds portaladgange. For interne brugere gælder det ikke. Den, der vil sikre portaladgange mere finkornet, må tilpasse modulet.
- Ingen automatisk genoprettelse. Aktiveres virksomheden senere igen, forbliver brugerne arkiveret. De skal genaktiveres i hånden.
- Kun kontakter. Modulet vedrører virksomheder som kontakter (
res.partner). Arkivering af en Odoo-virksomhed (res.company) har andre kontroller, f.eks. hvis den stadig er brugeres standardvirksomhed. Det er modulet ikke beregnet til. - Kun testet med Odoo 19.0 Community. Til andre versioner har vi ikke afprøvet det.
Ofte stillede spørgsmål
Hvorfor arkiveres medarbejdere ikke med?
En intern bruger har rettigheder i systemet og er oftest knyttet til egne data, opgaver og tilladelser. At spærre vedkommende som en bivirkning af arkivering af en virksomhed er os for risikabelt. Derfor forbliver Odoos fejlmeddelelse.
Kan jeg slå forespørgslen fra?
I koden via konteksten skip_archive_users_wizard. En indstilling i grænsefladen findes ikke. Den, der afinstallerer modulet, får Odoos standardadfærd igen.
Under hvilken licens udgives det?
Under AGPL-3. Fejl og forbedringer er velkomne som issue i GitHub-repositoryet .
Støtte fra Biricon IT Services
Vi passer Odoo-installationer for små og mellemstore virksomheder: fra implementering over tilpasninger og migreringer til den løbende drift. Hvis du vil forenkle forløb som arkivering af kundevirksomheder i Odoo, oprette en portal til dine kunder eller sikkert bringe et modul ind i din produktionsinstans, hjælper vi gerne. Flere egenudviklinger: Bilagsnumre af præfiks, år og tæller, Firmenbuch og adressekontrol for østrigske kunder og Produktsæt i tilbuddet som sektion.
Status: 3. november 2026. Modulversion 19.0.1.0.0 med rettelsen fra samme dag. Alle navne og brugernavne i illustrationerne er frit valgt.