Una empresa client se n’ha anat, el contracte s’ha acabat i voleu arxivar-la a Odoo. Odoo respon amb un missatge d’error: «No podeu arxivar contactes vinculats a un usuari actiu. Arxiveu primer l’usuari corresponent.» Si l’empresa té diversos accessos al portal, això vol dir: buscar cada usuari per separat, arxivar-lo per separat, tornar a l’empresa i arxivar-la de nou.
Per això hem escrit el petit mòdul Arxivar una empresa juntament amb els usuaris del portal (partner_archive_users) per a Odoo 19. En lloc del missatge d’error apareix una pregunta de confirmació i, amb «Sí», els usuaris del portal i l’empresa s’arxiven en un sol pas. El mòdul està disponible a GitHub com a programari lliure sota la llicència AGPL-3:
github.com/Alex0176/odoo-partner-archive-users
Utilitzem el mòdul a Biricon IT Services, al nostre sistema de producció, des del 3 de novembre de 2026. És nou, de manera que l’experiència que en tenim és breu. Qui l’adopti hauria de llegir les seccions sobre l’abast i límits .
El problema a l’Odoo estàndard
En arxivar un contacte, Odoo comprova si hi ha un usuari vinculat i s’interromp si és així. La comprovació té sentit, perquè cada usuari necessita un contacte. Per als usuaris interns, és a dir, els empleats, el bloqueig també és volgut. Però en els usuaris del portal dels clients és sobretot feina manual. Cada empresa client amb accessos al portal, per exemple per consultar factures i tiquets, requereix en arxivar el mateix procediment:
- Cercar els usuaris de l’empresa i dels seus contactes,
- arxivar cadascun per separat,
- tornar a l’empresa,
- arxivar l’empresa.
La solució: una pregunta de confirmació
El mòdul amplia el camí Acció → Arxiva al contacte, tant al formulari com a la llista. Si a l’empresa triada o als seus contactes hi ha usuaris del portal actius, s’obre un diàleg amb la pregunta «Realment s’ha d’arxivar l’empresa? Encara hi ha usuaris actius al sistema.» A sota apareixen els usuaris afectats amb nom, nom d’inici de sessió i contacte.
- Sí, arxivar l’empresa i els usuaris: Primer s’arxiven els usuaris, després l’empresa.
- Cancel·la: No canvia res.
- No hi ha usuaris del portal: Odoo es comporta com fins ara, no apareix cap diàleg.
Què s’arxiva i què no
L’abast està deliberadament delimitat:
- Només usuaris del portal i públics (
share = True). Els usuaris interns no s’arxiven mai per aquest camí. Si al contacte hi ha un accés d’empleat, el missatge d’error d’Odoo es manté. Així ningú no bloqueja per accident un empleat per haver arxivat una empresa. - Els contactes de l’empresa continuen actius com a contactes. Només s’arxiven els seus accessos al portal. Això correspon a l’Odoo estàndard, que en arxivar una empresa tampoc no toca els subcontactes.
- Només el camí d’arxivar de la interfície. Un
write({'active': False})directe, per exemple en una importació o en un script, s’executa sense canvis amb la comprovació d’Odoo.
Implementació tècnica
El mòdul no té camps nous en models existents. Consisteix en una ampliació de res.partner.action_archive i un assistent (partner.archive.users.wizard) que apareix com a diàleg.
| Component | Tasca |
|---|---|
action_archive al contacte | Cerca usuaris actius amb share = True vinculats al contacte o (en les empreses) a contactes de l’empresa. Si n’hi ha, en lloc d’arxivar es retorna el diàleg. |
| Assistent | Desa l’empresa i els usuaris trobats, els mostra i, amb «Sí», executa l’arxivament amb la clau de context archive_linked_users. |
Context skip_archive_users_wizard | Desactiva el diàleg. Aleshores torna a valer la comprovació d’Odoo. |
| Accés | L’assistent el poden crear i utilitzar els usuaris interns (base.group_user). |
| Traducció | S’inclouen l’alemany (de.po) i la plantilla (.pot). |
Els usuaris es cerquen i s’arxiven amb drets elevats (sudo). Així, el diàleg també funciona per a usuaris sense accés a la gestió d’usuaris. L’altra cara de la moneda consta a límits.
Una troballa: la prova era verda, però el diàleg estava trencat
El mòdul va tenir un error a la primera posada en servei que les proves automàtiques no van trobar. En fer el primer clic a «Arxiva» a la interfície, en lloc del diàleg va aparèixer la pantalla d’error d’Odoo amb Cannot read properties of undefined (reading 'map').
La causa: el client web crida action_archive directament i executa una acció retornada sense més preparació. Hi llegeix obligatòriament la clau views de l’acció. La nostra acció només tenia view_mode. Les accions de botons amb type="object" les completa el servidor abans (clean_action a call_button), però no la crida directa a action_archive. Les proves només cridaven el mètode a Python, i allà no es va notar que faltava el camp.
La correcció és una línia ("views": [(False, "form")]), a més d’una comprovació a la prova que exigeix exactament aquesta clau. En fer-ho no es va arxivar res. La lliçó: qui retorna una acció des d’un mètode que el client crida directament (action_archive, action_unarchive i similars) hauria d’incloure-hi sempre views.
Instal·lació
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
Les dependències són base i contacts. Després d’instal·lar-lo, cal reiniciar el servei d’Odoo, perquè el mòdul conté codi Python. Qui gestioni un sistema de producció instal·la el mòdul primer en una còpia de la base de dades.
límits
- Autorització. Com que els usuaris s’arxiven amb drets elevats, tothom qui pugui arxivar un contacte pot arxivar també, a través del diàleg, els accessos al portal d’aquesta empresa. Per als usuaris interns això no s’aplica. Qui vulgui protegir amb més finesa els accessos al portal ha d’adaptar el mòdul.
- Cap restabliment automàtic. Si l’empresa es reactiva més endavant, els usuaris continuen arxivats. Cal reactivar-los a mà.
- Només contactes. El mòdul afecta les empreses com a contactes (
res.partner). Arxivar una empresa d’Odoo (res.company) té altres comprovacions, per exemple si encara és l’empresa per defecte d’usuaris. El mòdul no està pensat per a això. - Només provat amb Odoo 19.0 Community. No l’hem comprovat per a altres versions.
Preguntes freqüents
Per què no s’arxiven també els empleats?
Un usuari intern té drets al sistema i sol estar vinculat a dades, tasques i autoritzacions pròpies. Bloquejar-lo com a efecte secundari d’arxivar una empresa ens sembla massa arriscat. Per això es manté el missatge d’error d’Odoo.
Puc desactivar la pregunta de confirmació?
Al codi, mitjançant el context skip_archive_users_wizard. No hi ha cap opció de configuració a la interfície. Qui desinstal·li el mòdul recupera el comportament estàndard d’Odoo.
Sota quina llicència es troba?
Sota l’AGPL-3. Els errors i les millores són benvinguts com a issue al repositori de GitHub .
Suport de Biricon IT Services
Gestionem instal·lacions d’Odoo per a petites i mitjanes empreses: des de la implantació, passant per les adaptacions i les migracions, fins a l’explotació contínua. Si voleu simplificar a Odoo processos com l’arxivament d’empreses client, configurar un portal per als vostres clients o posar amb seguretat un mòdul a la vostra instància de producció, us ajudarem amb gust. Altres desenvolupaments propis: Números de document amb prefix, any i comptador, Firmenbuch i verificació d’adreces per a clients austríacs i Conjunts de productes al pressupost com a secció.
Poseu-vos en contacte amb nosaltres
Data: 3 de novembre de 2026. Versió del mòdul 19.0.1.0.0 amb la correcció del mateix dia. Tots els noms i noms d’inici de sessió de les il·lustracions són d’elecció lliure.