Unha empresa cliente marchou, o contrato rematou e quere arquivala en Odoo. Odoo responde cunha mensaxe de erro: “Non pode arquivar contactos que están vinculados a un usuario activo. Arquive primeiro o usuario correspondente.” Se a empresa ten varios accesos ao portal, isto significa: buscar cada usuario por separado, arquivalo por separado, volver á empresa e arquivala de novo.
Para iso escribimos o pequeno módulo Arquivar unha empresa xunto cos usuarios do portal (partner_archive_users) para Odoo 19. En vez da mensaxe de erro aparece unha pregunta de confirmación e, se se responde “Si”, os usuarios do portal e a empresa arquívanse nun só paso. O módulo está dispoñible como software libre baixo a licenza AGPL-3 en GitHub:
github.com/Alex0176/odoo-partner-archive-users
Usamos o módulo en Biricon IT Services desde o 3 de novembro de 2026 no noso sistema produtivo. É novo, polo que a experiencia con el é curta. Quen o adopte debería ler os apartados sobre Alcance e Límites .
O problema no Odoo estándar
Ao arquivar un contacto, Odoo comproba se hai un usuario vinculado a el e cancela a operación se é así. A comprobación ten sentido, porque todo usuario necesita un contacto. Para os usuarios internos, é dicir, os empregados, o bloqueo tamén é desexado. Pero nos usuarios do portal dos clientes é sobre todo traballo manual. Toda empresa cliente con accesos ao portal, por exemplo para consultar facturas e tickets, necesita ao arquivala o mesmo proceso:
- Buscar os usuarios da empresa e das súas persoas de contacto,
- arquivar cada un por separado,
- volver á empresa,
- arquivar a empresa.
A solución: unha pregunta de confirmación
O módulo amplía o camiño Acción → Arquivar no contacto, tanto no formulario como na lista. Se á empresa escollida ou ás súas persoas de contacto están vinculados usuarios do portal activos, ábrese un diálogo coa pregunta “Realmente debe arquivarse a empresa? Aínda hai usuarios activos no sistema.” Debaixo aparecen os usuarios afectados co seu nome, nome de inicio de sesión e contacto.
- Si, arquivar a empresa e os usuarios: primeiro arquívanse os usuarios e despois a empresa.
- Cancelar: non cambia nada.
- Non hai usuarios do portal: Odoo compórtase como ata agora, non aparece ningún diálogo.
Que se arquiva e que non
O alcance está deliberadamente limitado:
- Só usuarios do portal e públicos (
share = True). Os usuarios internos nunca se arquivan por este camiño. Se ao contacto está vinculado un acceso de empregado, mantense a mensaxe de erro de Odoo. Así ninguén bloquea por descoido a un empregado por arquivar unha empresa. - As persoas de contacto seguen activas como contactos. Só se arquivan os seus accesos ao portal. Isto corresponde ao Odoo estándar, que ao arquivar unha empresa tampouco toca os subcontactos.
- Só o camiño de arquivar da interface. Un
write({'active': False})directo, por exemplo nunha importación ou nun script, pasa sen cambios pola comprobación de Odoo.
Implementación técnica
O módulo non ten campos novos en modelos existentes. Consiste nunha ampliación de res.partner.action_archive e un asistente (partner.archive.users.wizard) que aparece como diálogo.
| Compoñente | Función |
|---|---|
action_archive no contacto | Busca usuarios activos con share = True vinculados ao contacto ou (no caso de empresas) a contactos da empresa. Se hai algún, en vez de arquivar devólvese o diálogo. |
| Asistente | Garda a empresa e os usuarios atopados, amósaos e, ao responder “Si”, executa o arquivado coa clave de contexto archive_linked_users. |
Contexto skip_archive_users_wizard | Desactiva o diálogo. Entón volve valer a comprobación de Odoo. |
| Acceso | O asistente poden crealo e usalo os usuarios internos (base.group_user). |
| Tradución | Inclúense o alemán (de.po) e o modelo (.pot). |
Os usuarios búscanse e arquívanse con dereitos elevados (sudo). Así o diálogo tamén funciona para usuarios sen acceso á xestión de usuarios. O reverso está en Límites.
Un achado: a proba estaba en verde, pero o diálogo estaba roto
O módulo tivo un erro no primeiro uso que as probas automáticas non detectaron. No primeiro clic en “Arquivar” na interface apareceu, en vez do diálogo, a pantalla de erro de Odoo con Cannot read properties of undefined (reading 'map').
A causa: o cliente web chama directamente a action_archive e executa sen máis tratamento unha acción devolta. Ao facelo le obrigatoriamente a clave views da acción. A nosa acción só tiña view_mode. As accións de botóns con type="object" compleas antes o servidor (clean_action en call_button), pero a chamada directa a action_archive non. As probas chamaban o método só en Python e aí non se notaba a falta do campo.
A corrección é unha liña ("views": [(False, "form")]), á que se suma unha comprobación na proba que esixe precisamente esa clave. Non se arquivou nada con iso. A lección: quen devolva unha acción desde un método que o cliente chama directamente (action_archive, action_unarchive e semellantes) debería incluír sempre views.
Instalación
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
As dependencias son base e contacts. Despois de instalar hai que reiniciar o servizo de Odoo, porque o módulo contén código Python. Quen opere un sistema produtivo, instala o módulo primeiro nunha copia da base de datos.
Límites
- Permiso. Como os usuarios se arquivan con dereitos elevados, quen poida arquivar un contacto tamén pode, a través do diálogo, arquivar os accesos ao portal desa empresa. Para os usuarios internos isto non se aplica. Quen queira protexer con máis finura os accesos ao portal ten que adaptar o módulo.
- Sen restauración automática. Se a empresa se volve activar máis tarde, os usuarios seguen arquivados. Hai que reactivalos a man.
- Só contactos. O módulo afecta a empresas como contactos (
res.partner). Arquivar unha empresa de Odoo (res.company) ten outras comprobacións, por exemplo se aínda é a empresa predeterminada de usuarios. O módulo non está pensado para iso. - Só probado con Odoo 19.0 Community. Non o comprobamos para outras versións.
Preguntas frecuentes
Por que non se arquivan tamén os empregados?
Un usuario interno ten dereitos no sistema e adoita estar vinculado a datos, tarefas e permisos propios. Bloquealo como efecto secundario de arquivar unha empresa parécenos demasiado arriscado. Por iso se mantén a mensaxe de erro de Odoo.
Podo desactivar a pregunta de confirmación?
No código, a través do contexto skip_archive_users_wizard. Non hai un axuste na interface. Quen desinstale o módulo recupera o comportamento estándar de Odoo.
Baixo que licenza está?
Baixo a AGPL-3. Os erros e as melloras son benvidos como issue no repositorio de GitHub .
Apoio de Biricon IT Services
Atendemos instalacións de Odoo para pequenas e medianas empresas: desde a implantación, pasando por adaptacións e migracións, ata a operación continua. Se quere simplificar en Odoo procesos como o arquivado de empresas clientes, configurar un portal para os seus clientes ou levar con seguridade un módulo á súa instancia produtiva, axudarémolo con gusto. Máis desenvolvementos propios: Números de documento con prefixo, ano e contador, Firmenbuch e verificación de enderezos para clientes austríacos e Conxuntos de produtos no orzamento como sección.
Data: 3 de novembro de 2026. Versión do módulo 19.0.1.0.0 coa corrección do mesmo día. Todos os nomes e nomes de inicio de sesión das ilustracións están elixidos libremente.