Et kundefirma har flyttet, kontrakten er avsluttet, og du vil arkivere det i Odoo. Odoo svarer med en feilmelding: «Du kan ikke arkivere kontakter som er knyttet til en aktiv bruker. Arkiver først den tilhørende brukeren.» Har firmaet flere portaltilganger, betyr det: finn hver bruker enkeltvis, arkiver enkeltvis, tilbake til firmaet, arkiver på nytt.
Til dette har vi skrevet den lille modulen Firma archivieren samt Portalbenutzern (partner_archive_users) for Odoo 19. I stedet for feilmeldingen kommer et spørsmål, og ved «Ja» arkiveres portalbrukerne og firmaet i ett steg. Modulen ligger som fri programvare under AGPL-3-lisensen på GitHub:
github.com/Alex0176/odoo-partner-archive-users
Vi har brukt modulen hos Biricon IT Services i produksjonssystemet vårt siden 3. november 2026. Den er ny, så erfaringen med den er kort. Den som tar den i bruk, bør lese avsnittene om omfang og begrensninger .
Problemet i Odoo-standarden
Ved arkivering av en kontakt kontrollerer Odoo om en bruker er knyttet til den, og avbryter hvis så er tilfelle. Kontrollen gir mening, for hver bruker trenger en kontakt. For interne brukere, altså ansatte, er sperren også tilsiktet. For kunders portalbrukere er den derimot først og fremst manuelt arbeid. Hvert kundefirma med portaltilganger, for eksempel for å se fakturaer og saker, krever samme forløp ved arkivering:
- Finne brukerne til firmaet og kontaktpersonene,
- arkivere hver enkelt,
- tilbake til firmaet,
- arkivere firmaet.
Løsningen: et spørsmål
Modulen utvider veien Handling → Arkiver på kontakten, i skjemaet og i listen. Er det aktive portalbrukere knyttet til det valgte firmaet eller dets kontaktpersoner, åpnes en dialog med spørsmålet «Skal firmaet virkelig arkiveres? Det finnes fortsatt aktive brukere i systemet.» Under står de berørte brukerne med navn, påloggingsnavn og kontakt.
- Ja, arkiver firma og brukere: Først arkiveres brukerne, deretter firmaet.
- Avbryt: Ingenting endres.
- Ingen portalbrukere finnes: Odoo oppfører seg som før, ingen dialog vises.
Hva som arkiveres og hva som ikke arkiveres
Omfanget er bevisst snevert:
- Bare portal- og offentlige brukere (
share = True). Interne brukere arkiveres aldri via denne veien. Er det en ansatttilgang knyttet til kontakten, består Odoos feilmelding. Slik sperrer ingen ved et uhell en ansatt fordi vedkommende har arkivert et firma. - Kontaktpersoner forblir aktive som kontakter. Bare portaltilgangene deres arkiveres. Det tilsvarer Odoo-standarden, som heller ikke berører underkontaktene når et firma arkiveres.
- Bare arkiveringsveien i brukergrensesnittet. Et direkte
write({'active': False}), for eksempel i en import eller et skript, går uendret inn i Odoos kontroll.
Teknisk gjennomføring
Modulen har ingen nye felter på eksisterende modeller. Den består av en utvidelse av res.partner.action_archive og en veiviser (partner.archive.users.wizard) som vises som dialog.
| Byggestein | Oppgave |
|---|---|
action_archive på kontakten | Søker etter aktive brukere med share = True som er knyttet til kontakten eller (for firmaer) til kontakter i firmaet. Finnes det noen, returneres dialogen i stedet for å arkivere. |
| Veiviser | Lagrer firma og funne brukere, viser dem og utfører ved «Ja» arkiveringen med kontekstnøkkelen archive_linked_users. |
Kontekst skip_archive_users_wizard | Slår av dialogen. Da gjelder Odoos kontroll igjen. |
| Tilgang | Veiviseren kan opprettes og brukes av interne brukere (base.group_user). |
| Oversettelse | Tysk (de.po) og mal (.pot) følger med. |
Brukerne søkes opp og arkiveres med utvidede rettigheter (sudo). Dermed fungerer dialogen også for brukere uten tilgang til brukeradministrasjonen. Baksiden står under begrensninger.
Et funn: Testen var grønn, men dialogen var likevel ødelagt
Modulen hadde ved første bruk en feil som de automatiske testene ikke fant. Ved det første klikket på «Arkiver» i brukergrensesnittet vises i stedet for dialogen Odoos feilskjerm med Cannot read properties of undefined (reading 'map').
Årsaken: Webklienten kaller action_archive direkte og utfører en returnert handling uten videre behandling. Da leser den obligatorisk nøkkelen views i handlingen. Handlingen vår hadde bare view_mode. Handlinger fra knapper med type="object" supplerer serveren på forhånd (clean_action i call_button), men ikke det direkte kallet til action_archive. Testene kalte metoden bare i Python, og der falt det manglende feltet ikke opp.
Rettelsen er én linje ("views": [(False, "form")]), i tillegg kommer en kontroll i testen som krever akkurat denne nøkkelen. Ingenting ble arkivert i den forbindelse. Lærdommen: Den som returnerer en handling fra en metode som klienten kaller direkte (action_archive, action_unarchive og lignende), bør alltid ta med views.
Installasjon
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
Avhengigheter er base og contacts. Etter installasjonen må Odoo-tjenesten startes på nytt, fordi modulen inneholder Python-kode. Den som driver et produksjonssystem, installerer modulen først på en kopi av databasen.
begrensninger
- Tillatelse. Fordi brukerne arkiveres med utvidede rettigheter, kan alle som har lov til å arkivere en kontakt, via dialogen også arkivere portaltilgangene til dette firmaet. For interne brukere gjelder ikke dette. Den som vil sikre portaltilganger mer finmasket, må tilpasse modulen.
- Ingen automatisk gjenoppretting. Blir firmaet senere aktivert igjen, forblir brukerne arkivert. De må reaktiveres for hånd.
- Bare kontakter. Modulen gjelder firmaer som kontakter (
res.partner). Arkivering av et Odoo-firma (res.company) har andre kontroller, for eksempel hvis det fortsatt er brukernes standardfirma. Modulen er ikke ment for det. - Bare testet med Odoo 19.0 Community. For andre versjoner har vi ikke testet den.
Ofte stilte spørsmål
Hvorfor arkiveres ikke ansatte med?
En intern bruker har rettigheter i systemet og er som regel knyttet til egne data, oppgaver og tillatelser. Å sperre vedkommende som en bivirkning av å arkivere et firma, er for risikabelt for oss. Derfor består Odoos feilmelding.
Kan jeg slå av spørsmålet?
I koden via konteksten skip_archive_users_wizard. En innstilling i brukergrensesnittet finnes ikke. Den som avinstallerer modulen, får Odoos standardoppførsel igjen.
Under hvilken lisens står den?
Under AGPL-3. Feil og forbedringer er velkomne som issue i GitHub-repositoriet .
Støtte fra Biricon IT Services
Vi drifter Odoo-installasjoner for små og mellomstore bedrifter: fra innføring via tilpasninger og migreringer til løpende drift. Hvis du vil forenkle arbeidsprosesser som arkivering av kundefirmaer i Odoo, sette opp en portal for kundene dine eller trygt få en modul satt i produksjon, hjelper vi gjerne. Flere egenutviklinger: Dokumentnumre av prefiks, år og teller, Foretaksregister og adressekontroll for østerrikske kunder og Produktsett i tilbudet som seksjon.
Status: 3. november 2026. Modulversjon 19.0.1.0.0 med rettelsen fra samme dag. Alle navn og påloggingsnavn i illustrasjonene er fritt valgt.