Ir al contenido

Odoo 19: archivar una empresa junto con sus usuarios del portal – módulo partner_archive_users con confirmación en lugar de un mensaje de error

3 de noviembre de 2026 | Odoo 19 Community | Desarrollo propio
3 de noviembre de 2026 por
Odoo 19: archivar una empresa junto con sus usuarios del portal – módulo partner_archive_users con confirmación en lugar de un mensaje de error

Módulo partner_archive_users para Odoo 19: confirmación al archivar una empresa con usuarios del portal

Una empresa cliente se ha marchado, el contrato ha finalizado y desea archivarla en Odoo. Odoo responde con un mensaje de error: «No puede archivar contactos vinculados a un usuario activo. Archive primero el usuario correspondiente». Si la empresa tiene varias cuentas de acceso al portal, esto implica buscar a cada usuario por separado, archivarlo individualmente, volver a la empresa e intentar archivarla de nuevo.

Para resolverlo, hemos desarrollado el pequeño módulo Archivar una empresa junto con sus usuarios del portal (partner_archive_users) para Odoo 19. En lugar del mensaje de error, se solicita confirmación y, al responder «Sí», se archivan los usuarios del portal y la empresa en un solo paso. El módulo está disponible en GitHub como software libre bajo la licencia AGPL-3:

github.com/Alex0176/odoo-partner-archive-users

En Biricon IT Services utilizamos el módulo en nuestro sistema de producción desde el 3 de noviembre de 2026. Es nuevo, por lo que nuestra experiencia con él aún es limitada. Quien vaya a utilizarlo debería leer los apartados de alcance y limitaciones .

El problema en Odoo estándar

Al archivar un contacto, Odoo comprueba si tiene un usuario vinculado y, si es así, interrumpe la operación. La comprobación tiene sentido, porque todo usuario necesita un contacto. Para los usuarios internos, es decir, los empleados, este bloqueo es intencionado. Sin embargo, en el caso de los usuarios del portal de los clientes, supone sobre todo trabajo manual. Para archivar cualquier empresa cliente con acceso al portal, por ejemplo, para consultar facturas y tickets, hay que seguir los mismos pasos:

  1. buscar los usuarios vinculados a la empresa y a sus personas de contacto,
  2. archivarlos uno por uno,
  3. volver a la empresa,
  4. archivar la empresa.

La solución: solicitar confirmación

El módulo amplía la opción Acción → Archivar del contacto, tanto en la vista de formulario como en la de lista. Si la empresa seleccionada o sus personas de contacto tienen usuarios del portal activos vinculados, se abre un diálogo con la pregunta «¿Seguro que desea archivar la empresa? Todavía hay usuarios activos en el sistema». Debajo se muestran los usuarios afectados, con su nombre, nombre de usuario y contacto.

Comparación: mensaje de error de Odoo al archivar una empresa y diálogo de confirmación del módulo

  • Sí, archivar empresa y usuarios: primero se archivan los usuarios y después la empresa.
  • Cancelar: no se cambia nada.
  • No hay usuarios del portal: Odoo se comporta como hasta ahora y no aparece ningún diálogo.

Qué se archiva y qué no

El alcance se ha limitado deliberadamente:

Resumen: se archivan los usuarios del portal y la empresa, las personas de contacto siguen activas y los usuarios internos nunca se modifican

  • Solo usuarios del portal y públicos (share = True). Los usuarios internos nunca se archivan por esta vía. Si el contacto tiene vinculada una cuenta de empleado, se mantiene el mensaje de error de Odoo. Así nadie bloquea por accidente a un empleado por haber archivado una empresa.
  • Las personas de contacto siguen activas como contactos. Solo se archivan sus cuentas de acceso al portal. Esto coincide con el comportamiento estándar de Odoo, que tampoco modifica los contactos secundarios al archivar una empresa.
  • Solo mediante la opción Archivar de la interfaz. Una llamada directa a write({'active': False}), por ejemplo, desde una importación o un script, sigue pasando por la comprobación habitual de Odoo.

Implementación técnica

El módulo no añade campos a los modelos existentes. Consta de una ampliación de res.partner.action_archive y un asistente (partner.archive.users.wizard) que se muestra como diálogo.

ComponenteFunción
action_archive del contactoBusca usuarios activos con share = True vinculados al contacto o, en el caso de empresas, a los contactos de la empresa. Si encuentra alguno, devuelve el diálogo en lugar de archivar.
AsistenteGuarda la empresa y los usuarios encontrados, los muestra y, al responder «Sí», ejecuta el archivado con la clave de contexto archive_linked_users.
Contexto skip_archive_users_wizardDesactiva el diálogo. Vuelve a aplicarse la comprobación de Odoo.
AccesoLos usuarios internos (base.group_user) pueden crear y utilizar el asistente.
TraducciónSe incluyen la traducción al alemán (de.po) y la plantilla (.pot).

Los usuarios se buscan y archivan con privilegios elevados (sudo). De este modo, el diálogo también funciona para quienes no tienen acceso a la gestión de usuarios. La contrapartida se explica en limitaciones.

Un hallazgo: la prueba pasaba, pero el diálogo fallaba

En su primer uso, el módulo tenía un error que las pruebas automatizadas no detectaron. Al hacer clic por primera vez en «Archivar» en la interfaz, en lugar del diálogo aparecía la pantalla de error de Odoo con Cannot read properties of undefined (reading 'map').

La causa: el cliente web llama directamente a action_archive y ejecuta la acción devuelta sin ningún procesamiento adicional. Para ello, necesita leer la clave views de la acción. Nuestra acción solo tenía view_mode. El servidor completa previamente las acciones de los botones con type="object" (clean_action en call_button), pero no hace lo mismo con la llamada directa a action_archive. Las pruebas solo llamaban al método desde Python, donde la ausencia de ese campo pasaba inadvertida.

La corrección consiste en una línea ("views": [(False, "form")]), a la que se añade una comprobación en la prueba que exige precisamente esa clave. Durante el fallo no se archivó nada. La lección: al devolver una acción desde un método al que el cliente llama directamente (action_archive, action_unarchive y similares), conviene incluir siempre 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

Las dependencias son base y contacts. Tras la instalación hay que reiniciar el servicio de Odoo, porque el módulo contiene código Python. Si se utiliza un sistema de producción, el módulo debe instalarse primero en una copia de la base de datos.

limitaciones

  • Permisos. Como los usuarios se archivan con privilegios elevados, cualquiera que pueda archivar un contacto también puede archivar las cuentas de acceso al portal de esa empresa a través del diálogo. Esto no se aplica a los usuarios internos. Quien necesite un control más detallado de los permisos sobre las cuentas del portal deberá adaptar el módulo.
  • Sin restauración automática. Si la empresa se reactiva más adelante, los usuarios siguen archivados. Hay que reactivarlos manualmente.
  • Solo contactos. El módulo se aplica a las empresas registradas como contactos (res.partner). El archivado de una compañía de Odoo (res.company) está sujeto a otras comprobaciones, por ejemplo, si sigue siendo la compañía predeterminada de algún usuario. El módulo no está diseñado para ese caso.
  • Probado únicamente con Odoo 19.0 Community. No lo hemos comprobado con otras versiones.

Preguntas frecuentes

¿Por qué no se archivan también los empleados?

Un usuario interno tiene permisos en el sistema y suele estar vinculado a sus propios datos, tareas y autorizaciones. Nos parece demasiado arriesgado bloquearlo como efecto secundario de archivar una empresa. Por eso, en ese caso se mantiene el mensaje de error de Odoo.

¿Puedo desactivar la confirmación?

En el código, mediante el contexto skip_archive_users_wizard. No hay ningún ajuste en la interfaz. Al desinstalar el módulo, se recupera el comportamiento estándar de Odoo.

¿Qué licencia tiene?

Se distribuye bajo la licencia AGPL-3. Puede comunicar errores y proponer mejoras abriendo una incidencia en el repositorio de GitHub .

Asistencia de Biricon IT Services

Nos encargamos de instalaciones de Odoo para pequeñas y medianas empresas: desde la implantación hasta el funcionamiento diario, pasando por adaptaciones y migraciones. Si desea simplificar procesos como el archivado de empresas cliente en Odoo, configurar un portal para sus clientes o incorporar un módulo de forma segura a su instancia de producción, estaremos encantados de ayudarle. Otros desarrollos propios: Números de documento con prefijo, año y contador, Registro Mercantil y validación de direcciones para clientes de Austria y Conjuntos de productos como sección en el presupuesto.

Contactar ahora

Actualizado a 3 de noviembre de 2026. Versión del módulo: 19.0.1.0.0, con la corrección de ese mismo día. Todos los nombres y nombres de usuario de las imágenes son ficticios.