Ir al contenido

Odoo 19: archivar una empresa junto con sus usuarios del portal – módulo partner_archive_users con pregunta de confirmación en lugar de 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 pregunta de confirmación en lugar de mensaje de error

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

Una empresa cliente se ha marchado, el contrato ha terminado y usted quiere archivarla en Odoo. Odoo responde con un mensaje de error: «No puede archivar contactos vinculados a un usuario activo. Archive primero el usuario asociado.» Si la empresa tiene varios accesos al portal, esto significa: buscar cada usuario por separado, archivarlo por separado, volver a la empresa y archivarla de nuevo.

Para ello hemos escrito el pequeño módulo Archivar empresa junto con sus usuarios del portal (partner_archive_users) para Odoo 19. En lugar del mensaje de error aparece una pregunta de confirmación y, si se responde «Sí», los usuarios del portal y la empresa se archivan 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

Utilizamos el módulo en Biricon IT Services, en nuestro sistema de producción, desde el 3 de noviembre de 2026. Es nuevo, así que la experiencia con él es corta. Quien lo adopte debería leer las secciones sobre Alcance y Límites .

El problema en Odoo estándar

Al archivar un contacto, Odoo comprueba si hay un usuario vinculado a él y cancela la operación si es así. La comprobación tiene sentido, porque cada usuario necesita un contacto. Para los usuarios internos, es decir, los empleados, el bloqueo también es deseado. En el caso de los usuarios del portal de clientes, en cambio, supone sobre todo trabajo manual. Toda empresa cliente con accesos al portal, por ejemplo para consultar facturas y tickets, requiere el mismo proceso al archivarla:

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

La solución: una pregunta de confirmación

El módulo amplía la vía Acción → Archivar en el contacto, tanto en el formulario como en la lista. Si de la empresa seleccionada o de sus personas de contacto dependen usuarios del portal activos, se abre un diálogo con la pregunta «¿Debe archivarse realmente la empresa? Todavía hay usuarios activos en el sistema.» Debajo figuran los usuarios afectados con nombre, nombre de inicio de sesión y contacto.

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

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

Qué se archiva y qué no

El alcance se ha limitado deliberadamente:

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

  • Solo usuarios del portal y públicos (share = True). Los usuarios internos nunca se archivan por esta vía. Si al contacto está vinculado un acceso de empleado, el mensaje de error de Odoo se mantiene. 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 accesos al portal. Esto coincide con el comportamiento estándar de Odoo, que al archivar una empresa tampoco toca los subcontactos.
  • Solo la vía de archivado de la interfaz. Un write({'active': False}) directo, por ejemplo en una importación o un script, pasa sin cambios por la comprobación de Odoo.

Implementación técnica

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

ComponenteFunción
action_archive en el contactoBusca usuarios activos con share = True vinculados al contacto o (en el caso de empresas) a contactos de la empresa. Si los hay, en lugar de archivar se devuelve el diálogo.
AsistenteGuarda la empresa y los usuarios encontrados, los muestra y, si se responde «Sí», ejecuta el archivado con la clave de contexto archive_linked_users.
Contexto skip_archive_users_wizardDesactiva el diálogo. Entonces vuelve a aplicarse la comprobación de Odoo.
AccesoEl asistente pueden crearlo y utilizarlo los usuarios internos (base.group_user).
TraducciónSe incluyen el alemán (de.po) y la plantilla (.pot).

Los usuarios se buscan y se archivan con derechos elevados (sudo). Así el diálogo funciona también para usuarios sin acceso a la administración de usuarios. El reverso de esto figura en Límites.

Un hallazgo: la prueba salió en verde, pero el diálogo estaba roto

En su primer uso, el módulo tuvo un error que las pruebas automáticas no detectaron. Al hacer clic por primera vez en «Archivar» en la interfaz, en lugar del diálogo apareció 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 sin más preparación una acción devuelta. Para ello lee obligatoriamente la clave views de la acción. Nuestra acción solo tenía view_mode. Las acciones de botones con type="object" las completa antes el servidor (clean_action en call_button), pero no en la llamada directa a action_archive. Las pruebas llamaban al método solo en Python, y allí no se notó la falta del campo.

La corrección es una línea ("views": [(False, "form")]), a la que se añade en la prueba una comprobación que exige precisamente esa clave. No se archivó nada en el proceso. La lección: quien devuelva una acción desde un método al que llama directamente el cliente (action_archive, action_unarchive y similares) debería 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. Quien gestione un sistema de producción debería instalar primero el módulo en una copia de la base de datos.

Límites

  • Permisos. Dado que los usuarios se archivan con derechos elevados, cualquiera que pueda archivar un contacto puede también archivar, a través del diálogo, los accesos al portal de esa empresa. Para los usuarios internos esto no se aplica. Quien quiera proteger con mayor finura los accesos al portal deberá adaptar el módulo.
  • Sin restauración automática. Si la empresa se reactiva más adelante, los usuarios permanecen archivados. Deben reactivarse a mano.
  • Solo contactos. El módulo se refiere a las empresas como contactos (res.partner). Archivar una empresa de Odoo (res.company) tiene otras comprobaciones, por ejemplo cuando sigue siendo la empresa predeterminada de usuarios. El módulo no está pensado para eso.
  • Probado solo con Odoo 19.0 Community. No lo hemos comprobado para otras versiones.

Preguntas frecuentes

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

Un usuario interno tiene derechos en el sistema y suele estar vinculado a datos, tareas y permisos propios. Bloquearlo como efecto secundario de archivar una empresa nos parece demasiado arriesgado. Por eso se mantiene el mensaje de error de Odoo.

¿Puedo desactivar la pregunta de confirmación?

En el código, mediante el contexto skip_archive_users_wizard. No existe un ajuste en la interfaz. Quien desinstale el módulo vuelve a obtener el comportamiento estándar de Odoo.

¿Bajo qué licencia se distribuye?

Bajo la AGPL-3. Los errores y las mejoras son bienvenidos como issue en el repositorio de GitHub .

Asistencia de Biricon IT Services

Gestionamos instalaciones de Odoo para pequeñas y medianas empresas: desde la implantación, pasando por las adaptaciones y las migraciones, hasta la explotación diaria. Si desea simplificar en Odoo procesos como el archivado de empresas clientes, configurar un portal para sus clientes o incorporar con seguridad un módulo a su instancia de producción, estaremos encantados de ayudarle. Más desarrollos propios: Números de documento con prefijo, año y contador, Registro Mercantil y verificación de direcciones para clientes austriacos y Conjuntos de productos en el presupuesto como sección.

Póngase en contacto ahora

Situación a 3 de noviembre de 2026. Versión del módulo 19.0.1.0.0 con la corrección del mismo día. Todos los nombres y nombres de inicio de sesión de las ilustraciones son de libre elección.