diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 697b9cf..f15c95c 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -19,7 +19,11 @@ "Bash(move lab_logo.png lims_management/static/img/lab_logo.png)", "WebFetch(domain:github.com)", "WebFetch(domain:apps.odoo.com)", - "Bash(dir:*)" + "Bash(dir:*)", + "Bash(find:*)", + "Bash(true)", + "Bash(bash:*)", + "Bash(grep:*)" ], "deny": [] } diff --git a/CLAUDE.md b/CLAUDE.md index f126516..c1544b0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -132,8 +132,8 @@ At the start of each work session, read these documents to understand requiremen ### Odoo 18 Specific Conventions #### View Definitions -- **CRITICAL**: Use `` instead of `` - using `` causes `ValueError: Wrong value for ir.ui.view.type: 'tree'` -- View mode in actions must be `list,form` not `tree,form` +- **CRITICAL**: Use `` instead of `` in view XML - using `` causes error "El nodo raíz de una vista list debe ser , no " +- View mode in actions must be `tree,form` not `list,form` (paradójicamente, el modo se llama "tree" pero el XML debe usar ``) #### Visibility Attributes - Use `invisible` attribute directly instead of `attrs`: @@ -257,4 +257,96 @@ Automatically installed via `scripts/install_hooks.sh`: ### Branch Naming - Feature branches: `feature/XX-description` (where XX is issue number) -- Always create PRs to 'dev' branch, not 'main' \ No newline at end of file +- Always create PRs to 'dev' branch, not 'main' + +## Desarrollo de nuevos modelos y vistas + +### Orden de carga en __manifest__.py +Al agregar archivos al manifest, seguir SIEMPRE este orden: +1. security/*.xml (grupos y categorías) +2. security/ir.model.access.csv +3. data/*.xml (secuencias, categorías, datos base) +4. views/*_views.xml en este orden específico: + - Modelos base (sin dependencias) + - Modelos dependientes + - Vistas que referencian acciones + - menus.xml (SIEMPRE al final de views) +5. wizards/*.xml +6. reports/*.xml +7. demo/*.xml + +### Desarrollo de modelos relacionados +Cuando crees modelos que se relacionan entre sí en el mismo issue: + +#### Fase 1: Modelos base +1. Crear modelos SIN campos One2many +2. Solo incluir campos básicos y Many2one si el modelo referenciado ya existe +3. Probar que la instancia levante + +#### Fase 2: Relaciones +1. Agregar campos One2many en los modelos padre +2. Verificar que todos los inverse_name existan +3. Probar nuevamente + +#### Fase 3: Vistas complejas +1. Agregar vistas con referencias a acciones +2. Verificar que las acciones referenciadas ya estén definidas + +### Contextos en vistas XML +- En formularios: usar `id` (NO `active_id`) +- En acciones de ventana: usar `active_id` +- En campos One2many: usar `parent` para referenciar el registro padre + +### Checklist antes de reiniciar instancia +- [ ] ¿Los modelos referenciados en relaciones ya existen? +- [ ] ¿Las acciones/vistas referenciadas se cargan ANTES? +- [ ] ¿Los grupos en ir.model.access.csv coinciden con los de security.xml? +- [ ] ¿Usaste `id` en lugar de `active_id` en contextos de formulario? +- [ ] ¿Verificaste que todos los campos en las vistas existen en los modelos? +- [ ] ¿Los nombres de métodos/acciones coinciden exactamente con los definidos en Python? +- [ ] ¿Los widgets utilizados son válidos en Odoo 18? + +### Desarrollo de vistas - Mejores prácticas + +#### Antes de crear vistas: +1. **Verificar campos del modelo**: SIEMPRE revisar qué campos existen con `grep "fields\." models/archivo.py` +2. **Verificar métodos disponibles**: Buscar métodos con `grep "def action_" models/archivo.py` +3. **Verificar campos relacionados**: Confirmar que los campos related tienen la ruta correcta + +#### Orden de creación de vistas: +1. **Primero**: Definir todas las acciones (ir.actions.act_window) en un solo lugar +2. **Segundo**: Crear las vistas (form, list, search, etc.) +3. **Tercero**: Crear los menús que referencian las acciones +4. **Cuarto**: Si hay referencias cruzadas entre archivos, considerar consolidar en un solo archivo + +#### Widgets válidos en Odoo 18: +- Numéricos: `float`, `integer`, `monetary` (NO `float_time` para datos generales) +- Texto: `text`, `char`, `html` (NO `text_emojis`) +- Booleanos: `boolean`, `boolean_toggle`, `boolean_button` +- Selección: `selection`, `radio`, `selection_badge` +- Relaciones: `many2one`, `many2many_tags` +- Estado: `statusbar`, `badge`, `progressbar` + +#### Errores comunes y soluciones: + +##### Error: "External ID not found" +- **Causa**: Referencia a un ID que aún no fue cargado +- **Solución**: Reorganizar orden en __manifest__.py o mover definición al mismo archivo + +##### Error: "Field 'X' does not exist" +- **Causa**: Vista referencia campo inexistente en el modelo +- **Solución**: Verificar modelo y agregar campo o corregir nombre en vista + +##### Error: "action_X is not a valid action" +- **Causa**: Nombre de método incorrecto en botón +- **Solución**: Verificar nombre exacto del método en el modelo Python + +##### Error: "Invalid widget" +- **Causa**: Uso de widget no existente o deprecated +- **Solución**: Usar widgets estándar de Odoo 18 + +#### Estrategia de depuración: +1. Leer el error completo en los logs +2. Identificar archivo y línea exacta del problema +3. Verificar que el elemento referenciado existe y está accesible +4. Si es necesario, simplificar la vista temporalmente para aislar el problema \ No newline at end of file diff --git a/documents/logs/log_odoo_init.txt b/documents/logs/log_odoo_init.txt new file mode 100644 index 0000000..c899070 --- /dev/null +++ b/documents/logs/log_odoo_init.txt @@ -0,0 +1,1215 @@ +2025-07-15 14:35:57.982 | Esperando a PostgreSQL en db:5432... +2025-07-15 14:35:58.008 | PostgreSQL no está listo todavía ([Errno 111] Connection refused), esperando... +2025-07-15 14:36:00.011 | PostgreSQL no está listo todavía ([Errno 111] Connection refused), esperando... +2025-07-15 14:36:02.013 | PostgreSQL está listo. +2025-07-15 14:36:02.013 | Creando base de datos 'lims_demo' e instalando módulos... +2025-07-15 14:38:21.923 | --- Odoo stdout --- +2025-07-15 14:38:21.924 | +2025-07-15 14:38:21.924 | --- Odoo stderr --- +2025-07-15 14:38:21.924 | 2025-07-15 20:36:03,689 27 INFO ? odoo: Odoo version 18.0-20250710 +2025-07-15 14:38:21.924 | 2025-07-15 20:36:03,690 27 INFO ? odoo: Using configuration file at /etc/odoo/odoo.conf +2025-07-15 14:38:21.924 | 2025-07-15 20:36:03,690 27 INFO ? odoo: addons paths: ['/usr/lib/python3/dist-packages/odoo/addons', '/var/lib/odoo/.local/share/Odoo/addons/18.0', '/mnt/extra-addons'] +2025-07-15 14:38:21.924 | 2025-07-15 20:36:03,690 27 INFO ? odoo: database: odoo@db:5432 +2025-07-15 14:38:21.924 | Warn: Can't find .pfb for face 'Courier' +2025-07-15 14:38:21.924 | 2025-07-15 20:36:04,668 27 INFO ? odoo.addons.base.models.ir_actions_report: Will use the Wkhtmltopdf binary at /usr/local/bin/wkhtmltopdf +2025-07-15 14:38:21.924 | 2025-07-15 20:36:04,797 27 INFO ? odoo.addons.base.models.ir_actions_report: Will use the Wkhtmltoimage binary at /usr/local/bin/wkhtmltoimage +2025-07-15 14:38:21.924 | 2025-07-15 20:36:05,338 27 INFO lims_demo odoo.modules.loading: init db +2025-07-15 14:38:21.924 | 2025-07-15 20:36:07,672 27 INFO lims_demo odoo.modules.loading: loading 1 modules... +2025-07-15 14:38:21.924 | 2025-07-15 20:36:07,673 27 INFO lims_demo odoo.modules.loading: Loading module base (1/1) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:07,702 27 INFO lims_demo odoo.modules.registry: module base: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:08,658 27 INFO lims_demo odoo.models: Prepare computation of ir.module.module.menus_by_module +2025-07-15 14:38:21.924 | 2025-07-15 20:36:08,658 27 INFO lims_demo odoo.models: Prepare computation of ir.module.module.reports_by_module +2025-07-15 14:38:21.924 | 2025-07-15 20:36:08,658 27 INFO lims_demo odoo.models: Prepare computation of ir.module.module.views_by_module +2025-07-15 14:38:21.924 | 2025-07-15 20:36:08,942 27 INFO lims_demo odoo.models: Prepare computation of res.partner.user_id +2025-07-15 14:38:21.924 | 2025-07-15 20:36:08,942 27 INFO lims_demo odoo.models: Prepare computation of res.partner.commercial_partner_id +2025-07-15 14:38:21.924 | 2025-07-15 20:36:08,942 27 INFO lims_demo odoo.models: Prepare computation of res.partner.complete_name +2025-07-15 14:38:21.924 | 2025-07-15 20:36:08,943 27 INFO lims_demo odoo.models: Prepare computation of res.partner.company_registry +2025-07-15 14:38:21.924 | 2025-07-15 20:36:08,943 27 INFO lims_demo odoo.models: Prepare computation of res.partner.commercial_company_name +2025-07-15 14:38:21.924 | 2025-07-15 20:36:08,943 27 INFO lims_demo odoo.models: Prepare computation of res.partner.partner_share +2025-07-15 14:38:21.924 | 2025-07-15 20:36:09,005 27 INFO lims_demo odoo.models: Prepare computation of res.currency.decimal_places +2025-07-15 14:38:21.924 | 2025-07-15 20:36:09,111 27 INFO lims_demo odoo.models: Prepare computation of res.company.uses_default_logo +2025-07-15 14:38:21.924 | 2025-07-15 20:36:09,111 27 INFO lims_demo odoo.models: Prepare computation of res.company.logo_web +2025-07-15 14:38:21.924 | 2025-07-15 20:36:09,119 27 INFO lims_demo odoo.models: Computing parent_path for table res_company... +2025-07-15 14:38:21.924 | 2025-07-15 20:36:09,185 27 INFO lims_demo odoo.models: Prepare computation of res.users.signature +2025-07-15 14:38:21.924 | 2025-07-15 20:36:09,186 27 INFO lims_demo odoo.models: Prepare computation of res.users.share +2025-07-15 14:38:21.924 | 2025-07-15 20:36:14,744 27 INFO lims_demo odoo.modules.loading: loading base/data/res_bank.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:14,756 27 INFO lims_demo odoo.modules.loading: loading base/data/res.lang.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:14,821 27 INFO lims_demo odoo.modules.loading: loading base/data/res_lang_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:14,912 27 INFO lims_demo odoo.modules.loading: loading base/data/res_partner_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:15,021 27 INFO lims_demo odoo.modules.loading: loading base/data/res_currency_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:15,776 27 INFO lims_demo odoo.modules.loading: loading base/data/res_company_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:15,787 27 INFO lims_demo odoo.modules.loading: loading base/data/res_users_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:18,117 27 INFO lims_demo odoo.modules.loading: loading base/data/report_paperformat_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:18,146 27 INFO lims_demo odoo.modules.loading: loading base/data/res_country_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:19,550 27 INFO lims_demo odoo.modules.loading: loading base/data/ir_demo_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:19,592 27 INFO lims_demo odoo.modules.loading: loading base/security/base_groups.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:21,228 27 INFO lims_demo odoo.modules.loading: loading base/security/base_security.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:21,564 27 INFO lims_demo odoo.modules.loading: loading base/views/base_menus.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:21,661 27 INFO lims_demo odoo.modules.loading: loading base/views/decimal_precision_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:21,686 27 INFO lims_demo odoo.modules.loading: loading base/views/res_config_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:21,696 27 INFO lims_demo odoo.modules.loading: loading base/data/res.country.state.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:22,745 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_actions_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:22,912 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_asset_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:22,933 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_config_parameter_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:22,956 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_cron_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:22,992 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_cron_trigger_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,017 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_filters_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,046 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_mail_server_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,076 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_model_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,376 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_attachment_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,401 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_rule_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,424 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_sequence_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,449 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_ui_menu_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,476 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_ui_view_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,529 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_default_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,551 27 INFO lims_demo odoo.modules.loading: loading base/data/ir_config_parameter_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,555 27 INFO lims_demo odoo.modules.loading: loading base/data/ir_cron_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,569 27 INFO lims_demo odoo.modules.loading: loading base/report/ir_model_report.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,574 27 INFO lims_demo odoo.modules.loading: loading base/report/ir_model_templates.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,583 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_logging_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,606 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_qweb_widget_templates.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,624 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_module_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,689 27 INFO lims_demo odoo.modules.loading: loading base/data/ir_module_category_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,796 27 INFO lims_demo odoo.modules.loading: loading base/data/ir_module_module.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,867 27 INFO lims_demo odoo.modules.loading: loading base/report/ir_module_reports.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,871 27 INFO lims_demo odoo.modules.loading: loading base/report/ir_module_report_templates.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,876 27 INFO lims_demo odoo.modules.loading: loading base/wizard/base_module_update_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,894 27 INFO lims_demo odoo.modules.loading: loading base/wizard/base_language_install_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,909 27 INFO lims_demo odoo.modules.loading: loading base/wizard/base_import_language_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,922 27 INFO lims_demo odoo.modules.loading: loading base/wizard/base_module_upgrade_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,946 27 INFO lims_demo odoo.modules.loading: loading base/wizard/base_module_uninstall_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,958 27 INFO lims_demo odoo.modules.loading: loading base/wizard/base_export_language_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,973 27 INFO lims_demo odoo.modules.loading: loading base/wizard/base_partner_merge_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:23,990 27 INFO lims_demo odoo.modules.loading: loading base/data/ir_demo_failure_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,008 27 INFO lims_demo odoo.modules.loading: loading base/views/ir_profile_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,030 27 INFO lims_demo odoo.modules.loading: loading base/views/res_company_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,053 27 INFO lims_demo odoo.modules.loading: loading base/views/res_lang_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,077 27 INFO lims_demo odoo.modules.loading: loading base/views/res_partner_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,201 27 INFO lims_demo odoo.modules.loading: loading base/views/res_bank_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,248 27 INFO lims_demo odoo.modules.loading: loading base/views/res_country_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,305 27 INFO lims_demo odoo.modules.loading: loading base/views/res_currency_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,348 27 INFO lims_demo odoo.modules.loading: loading base/views/res_users_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,474 27 INFO lims_demo odoo.modules.loading: loading base/views/res_device_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,498 27 INFO lims_demo odoo.modules.loading: loading base/views/res_users_identitycheck_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,506 27 INFO lims_demo odoo.modules.loading: loading base/views/res_config_settings_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,514 27 INFO lims_demo odoo.modules.loading: loading base/views/report_paperformat_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,546 27 INFO lims_demo odoo.modules.loading: loading base/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,684 27 INFO lims_demo odoo.modules.loading: Module base: loading demo +2025-07-15 14:38:21.924 | 2025-07-15 20:36:24,685 27 INFO lims_demo odoo.modules.loading: loading base/data/res_users_demo.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:30,598 27 INFO lims_demo odoo.modules.loading: loading base/data/res_partner_bank_demo.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:30,605 27 INFO lims_demo odoo.modules.loading: loading base/data/res_currency_demo.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:30,610 27 INFO lims_demo odoo.modules.loading: loading base/data/res_currency_rate_demo.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:31,063 27 INFO lims_demo odoo.modules.loading: loading base/data/res_bank_demo.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:31,070 27 INFO lims_demo odoo.modules.loading: loading base/data/res_partner_demo.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:31,402 27 INFO lims_demo odoo.modules.loading: loading base/data/res_partner_image_demo.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:31,617 27 INFO lims_demo odoo.addons.base.models.ir_module: module base: loading translation file /usr/lib/python3/dist-packages/odoo/addons/base/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:31,618 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/base/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:33,118 27 INFO lims_demo odoo.modules.loading: Module base loaded in 25.44s, 9283 queries (+9283 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:33,118 27 INFO lims_demo odoo.modules.loading: 1 modules loaded in 25.45s, 9283 queries (+9283 extra) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:33,154 27 INFO lims_demo odoo.addons.base.models.ir_module: module base: loading translation file /usr/lib/python3/dist-packages/odoo/addons/base/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:33,155 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/base/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:34,158 27 INFO lims_demo odoo.modules.loading: updating modules list +2025-07-15 14:38:21.924 | 2025-07-15 20:36:34,158 27 INFO lims_demo odoo.addons.base.models.ir_module: ALLOW access to module.update_list on [] to user __system__ #1 via n/a +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,142 27 INFO lims_demo odoo.addons.base.models.ir_module: ALLOW access to module.button_install on ['Sales', 'Invoicing', 'Inventory', 'Gestión de Laboratorio Clínico (LIMS)'] to user __system__ #1 via n/a +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,354 27 INFO lims_demo odoo.modules.loading: loading 62 modules... +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,354 27 INFO lims_demo odoo.modules.loading: Loading module l10n_us (2/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,373 27 INFO lims_demo odoo.modules.registry: module l10n_us: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,412 27 INFO lims_demo odoo.modules.loading: loading l10n_us/data/res_company_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,419 27 INFO lims_demo odoo.modules.loading: loading l10n_us/views/res_partner_bank_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,442 27 INFO lims_demo odoo.addons.base.models.ir_module: module l10n_us: no translation for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,456 27 INFO lims_demo odoo.modules.loading: Module l10n_us loaded in 0.10s, 60 queries (+60 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,456 27 INFO lims_demo odoo.modules.loading: Loading module uom (3/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,492 27 INFO lims_demo odoo.modules.registry: module uom: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,593 27 INFO lims_demo odoo.modules.loading: loading uom/data/uom_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,698 27 INFO lims_demo odoo.modules.loading: loading uom/security/uom_security.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,724 27 INFO lims_demo odoo.modules.loading: loading uom/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,740 27 INFO lims_demo odoo.modules.loading: loading uom/views/uom_uom_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,801 27 INFO lims_demo odoo.addons.base.models.ir_module: module uom: loading translation file /usr/lib/python3/dist-packages/odoo/addons/uom/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,802 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/uom/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,825 27 INFO lims_demo odoo.modules.loading: Module uom loaded in 0.37s, 307 queries (+307 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,825 27 INFO lims_demo odoo.modules.loading: Loading module web (4/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:35,860 27 INFO lims_demo odoo.modules.registry: module web: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,637 27 INFO lims_demo odoo.modules.loading: loading web/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,647 27 INFO lims_demo odoo.modules.loading: loading web/views/webclient_templates.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,710 27 INFO lims_demo odoo.modules.loading: loading web/views/report_templates.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,804 27 INFO lims_demo odoo.modules.loading: loading web/views/base_document_layout_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,822 27 INFO lims_demo odoo.modules.loading: loading web/views/partner_view.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,827 27 INFO lims_demo odoo.modules.loading: loading web/views/speedscope_template.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,833 27 INFO lims_demo odoo.modules.loading: loading web/views/neutralize_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,840 27 INFO lims_demo odoo.modules.loading: loading web/data/ir_attachment.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,846 27 INFO lims_demo odoo.modules.loading: loading web/data/report_layout.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,892 27 INFO lims_demo odoo.addons.base.models.ir_module: module web: loading translation file /usr/lib/python3/dist-packages/odoo/addons/web/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:36,892 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/web/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,088 27 INFO lims_demo odoo.modules.loading: Module web loaded in 1.26s, 1128 queries (+1128 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,088 27 INFO lims_demo odoo.modules.loading: Loading module auth_totp (5/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,123 27 INFO lims_demo odoo.modules.registry: module auth_totp: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,270 27 INFO lims_demo odoo.modules.loading: loading auth_totp/security/security.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,306 27 INFO lims_demo odoo.modules.loading: loading auth_totp/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,324 27 INFO lims_demo odoo.modules.loading: loading auth_totp/data/ir_action_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,333 27 INFO lims_demo odoo.modules.loading: loading auth_totp/views/res_users_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,374 27 INFO lims_demo odoo.modules.loading: loading auth_totp/views/templates.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,379 27 INFO lims_demo odoo.modules.loading: loading auth_totp/wizard/auth_totp_wizard_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,395 27 INFO lims_demo odoo.addons.base.models.ir_module: module auth_totp: loading translation file /usr/lib/python3/dist-packages/odoo/addons/auth_totp/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,395 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/auth_totp/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,417 27 INFO lims_demo odoo.modules.loading: Module auth_totp loaded in 0.33s, 193 queries (+193 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,417 27 INFO lims_demo odoo.modules.loading: Loading module barcodes (6/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,445 27 INFO lims_demo odoo.modules.registry: module barcodes: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,546 27 INFO lims_demo odoo.modules.loading: loading barcodes/data/barcodes_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,556 27 INFO lims_demo odoo.modules.loading: loading barcodes/views/barcodes_view.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,585 27 INFO lims_demo odoo.modules.loading: loading barcodes/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,603 27 INFO lims_demo odoo.addons.base.models.ir_module: module barcodes: loading translation file /usr/lib/python3/dist-packages/odoo/addons/barcodes/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,603 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/barcodes/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,630 27 INFO lims_demo odoo.modules.loading: Module barcodes loaded in 0.21s, 158 queries (+158 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,630 27 INFO lims_demo odoo.modules.loading: Loading module base_import (7/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:37,847 27 INFO lims_demo odoo.modules.registry: module base_import: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:38,803 27 INFO lims_demo odoo.modules.loading: loading base_import/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:38,824 27 INFO lims_demo odoo.addons.base.models.ir_module: module base_import: loading translation file /usr/lib/python3/dist-packages/odoo/addons/base_import/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:38,824 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/base_import/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:38,843 27 INFO lims_demo odoo.modules.loading: Module base_import loaded in 1.21s, 916 queries (+916 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:38,843 27 INFO lims_demo odoo.modules.loading: Loading module base_import_module (8/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:38,870 27 INFO lims_demo odoo.modules.registry: module base_import_module: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:38,965 27 INFO lims_demo odoo.modules.loading: loading base_import_module/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:38,978 27 INFO lims_demo odoo.modules.loading: loading base_import_module/views/base_import_module_view.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,002 27 INFO lims_demo odoo.modules.loading: loading base_import_module/views/ir_module_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,044 27 INFO lims_demo odoo.addons.base.models.ir_module: module base_import_module: loading translation file /usr/lib/python3/dist-packages/odoo/addons/base_import_module/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,045 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/base_import_module/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,065 27 INFO lims_demo odoo.modules.loading: Module base_import_module loaded in 0.22s, 172 queries (+172 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,065 27 INFO lims_demo odoo.modules.loading: Loading module base_setup (9/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,084 27 INFO lims_demo odoo.modules.registry: module base_setup: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,141 27 INFO lims_demo odoo.modules.loading: loading base_setup/data/base_setup_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,151 27 INFO lims_demo odoo.modules.loading: loading base_setup/views/res_config_settings_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,213 27 INFO lims_demo odoo.modules.loading: loading base_setup/views/res_partner_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,228 27 INFO lims_demo odoo.addons.base.models.ir_module: module base_setup: loading translation file /usr/lib/python3/dist-packages/odoo/addons/base_setup/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,228 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/base_setup/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,259 27 INFO lims_demo odoo.modules.loading: Module base_setup loaded in 0.19s, 157 queries (+157 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,259 27 INFO lims_demo odoo.modules.loading: Loading module bus (10/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,308 27 INFO lims_demo odoo.modules.registry: module bus: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,482 27 INFO lims_demo odoo.modules.loading: loading bus/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,509 27 INFO lims_demo odoo.addons.base.models.ir_module: module bus: loading translation file /usr/lib/python3/dist-packages/odoo/addons/bus/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,510 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/bus/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,540 27 INFO lims_demo odoo.modules.loading: Module bus loaded in 0.28s, 168 queries (+168 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,541 27 INFO lims_demo odoo.modules.loading: Loading module http_routing (11/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,640 27 INFO lims_demo odoo.modules.registry: module http_routing: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,734 27 INFO lims_demo odoo.modules.loading: loading http_routing/views/http_routing_template.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,861 27 INFO lims_demo odoo.modules.loading: loading http_routing/views/res_lang_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,926 27 INFO lims_demo odoo.addons.base.models.ir_module: module http_routing: loading translation file /usr/lib/python3/dist-packages/odoo/addons/http_routing/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,926 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/http_routing/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,976 27 INFO lims_demo odoo.modules.loading: Module http_routing loaded in 0.44s, 103 queries (+103 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:39,976 27 INFO lims_demo odoo.modules.loading: Loading module onboarding (12/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:40,083 27 INFO lims_demo odoo.modules.registry: module onboarding: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:40,500 27 INFO lims_demo odoo.modules.loading: loading onboarding/views/onboarding_templates.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:40,560 27 INFO lims_demo odoo.modules.loading: loading onboarding/views/onboarding_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:40,655 27 INFO lims_demo odoo.modules.loading: loading onboarding/views/onboarding_menus.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:40,688 27 INFO lims_demo odoo.modules.loading: loading onboarding/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:40,777 27 INFO lims_demo odoo.addons.base.models.ir_module: module onboarding: loading translation file /usr/lib/python3/dist-packages/odoo/addons/onboarding/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:40,778 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/onboarding/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:40,876 27 INFO lims_demo odoo.modules.loading: Module onboarding loaded in 0.90s, 234 queries (+234 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:40,876 27 INFO lims_demo odoo.modules.loading: Loading module resource (13/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:41,040 27 INFO lims_demo odoo.modules.registry: module resource: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:41,681 27 INFO lims_demo odoo.modules.loading: loading resource/data/resource_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:41,820 27 INFO lims_demo odoo.modules.loading: loading resource/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:41,870 27 INFO lims_demo odoo.modules.loading: loading resource/security/resource_security.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:41,956 27 INFO lims_demo odoo.modules.loading: loading resource/views/resource_resource_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,063 27 INFO lims_demo odoo.modules.loading: loading resource/views/resource_calendar_leaves_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,172 27 INFO lims_demo odoo.modules.loading: loading resource/views/resource_calendar_attendance_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,212 27 INFO lims_demo odoo.modules.loading: loading resource/views/resource_calendar_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,280 27 INFO lims_demo odoo.modules.loading: loading resource/views/menuitems.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,325 27 INFO lims_demo odoo.modules.loading: Module resource: loading demo +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,330 27 INFO lims_demo odoo.modules.loading: loading resource/data/resource_demo.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,432 27 INFO lims_demo odoo.addons.base.models.ir_module: module resource: loading translation file /usr/lib/python3/dist-packages/odoo/addons/resource/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,432 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/resource/i18n/es.po for language es_ES +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,547 27 INFO lims_demo odoo.modules.loading: Module resource loaded in 1.67s, 436 queries (+436 other) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,547 27 INFO lims_demo odoo.modules.loading: Loading module utm (14/62) +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,580 27 INFO lims_demo odoo.modules.registry: module utm: creating or updating database tables +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,857 27 INFO lims_demo odoo.modules.loading: loading utm/data/utm_medium_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:42,933 27 INFO lims_demo odoo.modules.loading: loading utm/data/utm_source_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:43,006 27 INFO lims_demo odoo.modules.loading: loading utm/data/utm_stage_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:43,021 27 INFO lims_demo odoo.modules.loading: loading utm/data/utm_tag_data.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:43,029 27 INFO lims_demo odoo.modules.loading: loading utm/views/utm_campaign_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:43,169 27 INFO lims_demo odoo.modules.loading: loading utm/views/utm_medium_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:43,191 27 INFO lims_demo odoo.modules.loading: loading utm/views/utm_source_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:43,218 27 INFO lims_demo odoo.modules.loading: loading utm/views/utm_stage_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:43,247 27 INFO lims_demo odoo.modules.loading: loading utm/views/utm_tag_views.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:43,261 27 INFO lims_demo odoo.modules.loading: loading utm/views/utm_menus.xml +2025-07-15 14:38:21.924 | 2025-07-15 20:36:43,293 27 INFO lims_demo odoo.modules.loading: loading utm/security/ir.model.access.csv +2025-07-15 14:38:21.924 | 2025-07-15 20:36:43,316 27 INFO lims_demo odoo.modules.loading: Module utm: loading demo +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,317 27 INFO lims_demo odoo.modules.loading: loading utm/data/utm_campaign_demo.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,336 27 INFO lims_demo odoo.modules.loading: loading utm/data/utm_stage_demo.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,348 27 INFO lims_demo odoo.addons.base.models.ir_module: module utm: loading translation file /usr/lib/python3/dist-packages/odoo/addons/utm/i18n/es.po for language es_ES +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,348 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/utm/i18n/es.po for language es_ES +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,385 27 INFO lims_demo odoo.modules.loading: Module utm loaded in 0.84s, 454 queries (+454 other) +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,385 27 INFO lims_demo odoo.modules.loading: Loading module web_tour (15/62) +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,412 27 INFO lims_demo odoo.modules.registry: module web_tour: creating or updating database tables +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,419 27 INFO lims_demo odoo.models: Prepare computation of res.users.tour_enabled +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,548 27 INFO lims_demo odoo.modules.loading: loading web_tour/security/ir.model.access.csv +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,564 27 INFO lims_demo odoo.modules.loading: loading web_tour/views/tour_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,602 27 INFO lims_demo odoo.modules.loading: loading web_tour/views/res_users_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,627 27 INFO lims_demo odoo.addons.base.models.ir_module: module web_tour: loading translation file /usr/lib/python3/dist-packages/odoo/addons/web_tour/i18n/es.po for language es_ES +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,628 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/web_tour/i18n/es.po for language es_ES +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,707 27 INFO lims_demo odoo.modules.loading: Module web_tour loaded in 0.32s, 196 queries (+196 other) +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,707 27 INFO lims_demo odoo.modules.loading: Loading module barcodes_gs1_nomenclature (16/62) +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,761 27 INFO lims_demo odoo.modules.registry: module barcodes_gs1_nomenclature: creating or updating database tables +2025-07-15 14:38:21.925 | 2025-07-15 20:36:43,891 27 INFO lims_demo odoo.modules.loading: loading barcodes_gs1_nomenclature/data/barcodes_gs1_rules.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,013 27 INFO lims_demo odoo.modules.loading: loading barcodes_gs1_nomenclature/views/barcodes_view.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,074 27 INFO lims_demo odoo.addons.base.models.ir_module: module barcodes_gs1_nomenclature: loading translation file /usr/lib/python3/dist-packages/odoo/addons/barcodes_gs1_nomenclature/i18n/es.po for language es_ES +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,074 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/barcodes_gs1_nomenclature/i18n/es.po for language es_ES +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,099 27 INFO lims_demo odoo.modules.loading: Module barcodes_gs1_nomenclature loaded in 0.39s, 199 queries (+199 other) +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,099 27 INFO lims_demo odoo.modules.loading: Loading module html_editor (17/62) +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,344 27 INFO lims_demo odoo.modules.registry: module html_editor: creating or updating database tables +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,411 27 INFO lims_demo odoo.addons.base.models.ir_module: module html_editor: loading translation file /usr/lib/python3/dist-packages/odoo/addons/html_editor/i18n/es.po for language es_ES +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,411 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/html_editor/i18n/es.po for language es_ES +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,433 27 INFO lims_demo odoo.modules.loading: Module html_editor loaded in 0.33s, 44 queries (+44 other) +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,433 27 INFO lims_demo odoo.modules.loading: Loading module iap (18/62) +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,463 27 INFO lims_demo odoo.modules.registry: module iap: creating or updating database tables +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,594 27 INFO lims_demo odoo.modules.loading: loading iap/data/services.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,601 27 INFO lims_demo odoo.modules.loading: loading iap/security/ir.model.access.csv +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,617 27 INFO lims_demo odoo.modules.loading: loading iap/security/ir_rule.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,631 27 INFO lims_demo odoo.modules.loading: loading iap/views/iap_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,671 27 INFO lims_demo odoo.modules.loading: loading iap/views/res_config_settings.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,693 27 INFO lims_demo odoo.addons.base.models.ir_module: module iap: loading translation file /usr/lib/python3/dist-packages/odoo/addons/iap/i18n/es.po for language es_ES +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,693 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/iap/i18n/es.po for language es_ES +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,719 27 INFO lims_demo odoo.modules.loading: Module iap loaded in 0.29s, 194 queries (+194 other) +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,720 27 INFO lims_demo odoo.modules.loading: Loading module mail (19/62) +2025-07-15 14:38:21.925 | 2025-07-15 20:36:44,783 27 INFO lims_demo odoo.modules.registry: module mail: creating or updating database tables +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,358 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.partner_ids +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,359 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.template_id +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,359 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.activity_type_id +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,359 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.activity_date_deadline_range +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,359 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.activity_user_id +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,359 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.mail_post_method +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,359 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.activity_summary +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,360 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.activity_date_deadline_range_type +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,360 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.activity_user_type +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,360 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.activity_user_field_name +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,360 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.activity_note +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,360 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.mail_post_autofollow +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,433 27 INFO lims_demo odoo.models: Prepare computation of res.company.email_primary_color +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,433 27 INFO lims_demo odoo.models: Prepare computation of res.company.email_secondary_color +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,450 27 INFO lims_demo odoo.models: Prepare computation of res.users.notification_type +2025-07-15 14:38:21.925 | 2025-07-15 20:36:45,581 27 INFO lims_demo odoo.models: Prepare computation of res.partner.email_normalized +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,507 27 INFO lims_demo odoo.modules.loading: loading mail/data/mail_groups.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,657 27 INFO lims_demo odoo.modules.loading: loading mail/wizard/mail_activity_schedule_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,673 27 INFO lims_demo odoo.modules.loading: loading mail/wizard/mail_blacklist_remove_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,683 27 INFO lims_demo odoo.modules.loading: loading mail/wizard/mail_compose_message_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,712 27 INFO lims_demo odoo.modules.loading: loading mail/wizard/mail_resend_message_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,745 27 INFO lims_demo odoo.modules.loading: loading mail/wizard/mail_resend_partner_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,779 27 INFO lims_demo odoo.modules.loading: loading mail/wizard/mail_template_preview_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,803 27 INFO lims_demo odoo.modules.loading: loading mail/wizard/mail_wizard_invite_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,829 27 INFO lims_demo odoo.modules.loading: loading mail/wizard/mail_template_reset_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,862 27 INFO lims_demo odoo.modules.loading: loading mail/views/fetchmail_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,931 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_message_subtype_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:49,992 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_tracking_value_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,041 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_notification_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,089 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_message_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,197 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_message_schedule_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,260 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_mail_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,359 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_followers_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,405 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_ice_server_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,444 27 INFO lims_demo odoo.modules.loading: loading mail/views/discuss_channel_member_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,494 27 INFO lims_demo odoo.modules.loading: loading mail/views/discuss_channel_rtc_session_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,563 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_link_preview_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,602 27 INFO lims_demo odoo.modules.loading: loading mail/views/discuss/discuss_gif_favorite_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,648 27 INFO lims_demo odoo.modules.loading: loading mail/views/discuss_channel_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,751 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_canned_response_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:50,827 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_activity_views.xml +2025-07-15 14:38:21.925 | 2025-07-15 20:36:51,725 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_activity_plan_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,118 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_activity_plan_template_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,173 27 INFO lims_demo odoo.modules.loading: loading mail/views/res_config_settings_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,258 27 INFO lims_demo odoo.modules.loading: loading mail/data/ir_config_parameter_data.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,278 27 INFO lims_demo odoo.modules.loading: loading mail/data/res_partner_data.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,538 27 INFO lims_demo odoo.modules.loading: loading mail/data/mail_message_subtype_data.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,571 27 INFO lims_demo odoo.modules.loading: loading mail/data/mail_templates_chatter.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,621 27 INFO lims_demo odoo.modules.loading: loading mail/data/mail_templates_email_layouts.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,697 27 INFO lims_demo odoo.modules.loading: loading mail/data/mail_templates_mailgateway.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,741 27 INFO lims_demo odoo.modules.loading: loading mail/data/discuss_channel_data.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,871 27 INFO lims_demo odoo.modules.loading: loading mail/data/mail_activity_data.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,890 27 INFO lims_demo odoo.modules.loading: loading mail/data/security_notifications_templates.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,897 27 INFO lims_demo odoo.modules.loading: loading mail/data/ir_cron_data.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,959 27 INFO lims_demo odoo.modules.loading: loading mail/data/ir_actions_client.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:52,967 27 INFO lims_demo odoo.modules.loading: loading mail/security/mail_security.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,233 27 INFO lims_demo odoo.modules.loading: loading mail/security/ir.model.access.csv +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,403 27 INFO lims_demo odoo.modules.loading: loading mail/views/discuss_public_templates.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,411 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_alias_domain_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,441 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_alias_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,476 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_gateway_allowed_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,490 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_guest_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,506 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_message_reaction_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,519 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_templates_public.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,528 27 INFO lims_demo odoo.modules.loading: loading mail/views/res_users_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,551 27 INFO lims_demo odoo.modules.loading: loading mail/views/res_users_settings_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,568 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_template_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,597 27 INFO lims_demo odoo.modules.loading: loading mail/views/ir_actions_server_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,617 27 INFO lims_demo odoo.modules.loading: loading mail/views/ir_model_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,722 27 INFO lims_demo odoo.modules.loading: loading mail/views/res_partner_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,842 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_blacklist_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:53,879 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_menus.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,132 27 INFO lims_demo odoo.modules.loading: loading mail/views/res_company_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,156 27 INFO lims_demo odoo.modules.loading: loading mail/views/mail_scheduled_message_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,172 27 INFO lims_demo odoo.modules.loading: loading mail/data/mail_canned_response_data.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,180 27 INFO lims_demo odoo.modules.loading: loading mail/data/mail_templates_invite.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,192 27 INFO lims_demo odoo.modules.loading: loading mail/data/web_tour_tour.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,200 27 INFO lims_demo odoo.modules.loading: Module mail: loading demo +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,201 27 INFO lims_demo odoo.modules.loading: loading mail/demo/discuss_channel_demo.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,483 27 INFO lims_demo odoo.modules.loading: loading mail/demo/mail_canned_response_demo.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,497 27 INFO lims_demo odoo.addons.base.models.ir_module: module mail: loading translation file /usr/lib/python3/dist-packages/odoo/addons/mail/i18n/es.po for language es_ES +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,497 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/mail/i18n/es.po for language es_ES +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,884 27 INFO lims_demo odoo.modules.loading: Module mail loaded in 10.16s, 4785 queries (+4786 other) +2025-07-15 14:38:21.928 | 2025-07-15 20:36:54,884 27 INFO lims_demo odoo.modules.loading: Loading module web_editor (20/62) +2025-07-15 14:38:21.928 | 2025-07-15 20:36:55,061 27 INFO lims_demo odoo.modules.registry: module web_editor: creating or updating database tables +2025-07-15 14:38:21.928 | 2025-07-15 20:36:57,453 27 INFO lims_demo odoo.modules.loading: loading web_editor/security/ir.model.access.csv +2025-07-15 14:38:21.928 | 2025-07-15 20:36:57,472 27 INFO lims_demo odoo.modules.loading: loading web_editor/data/editor_assets.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:57,479 27 INFO lims_demo odoo.modules.loading: loading web_editor/views/editor.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:57,500 27 INFO lims_demo odoo.modules.loading: loading web_editor/views/snippets.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:57,555 27 INFO lims_demo odoo.addons.base.models.ir_module: module web_editor: loading translation file /usr/lib/python3/dist-packages/odoo/addons/web_editor/i18n/es.po for language es_ES +2025-07-15 14:38:21.928 | 2025-07-15 20:36:57,555 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/web_editor/i18n/es.po for language es_ES +2025-07-15 14:38:21.928 | 2025-07-15 20:36:57,622 27 INFO lims_demo odoo.modules.loading: Module web_editor loaded in 2.74s, 1529 queries (+1529 other) +2025-07-15 14:38:21.928 | 2025-07-15 20:36:57,622 27 INFO lims_demo odoo.modules.loading: Loading module analytic (21/62) +2025-07-15 14:38:21.928 | 2025-07-15 20:36:57,691 27 INFO lims_demo odoo.modules.registry: module analytic: creating or updating database tables +2025-07-15 14:38:21.928 | 2025-07-15 20:36:57,967 27 INFO lims_demo odoo.modules.loading: loading analytic/security/analytic_security.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:58,032 27 INFO lims_demo odoo.modules.loading: loading analytic/security/ir.model.access.csv +2025-07-15 14:38:21.928 | 2025-07-15 20:36:58,077 27 INFO lims_demo odoo.modules.loading: loading analytic/views/analytic_line_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:58,160 27 INFO lims_demo odoo.modules.loading: loading analytic/views/analytic_account_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:58,245 27 INFO lims_demo odoo.modules.loading: loading analytic/views/analytic_plan_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:58,278 27 INFO lims_demo odoo.modules.loading: loading analytic/views/analytic_distribution_model_views.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:58,303 27 INFO lims_demo odoo.modules.loading: loading analytic/data/analytic_data.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:58,417 27 INFO lims_demo odoo.modules.loading: Module analytic: loading demo +2025-07-15 14:38:21.928 | 2025-07-15 20:36:58,418 27 INFO lims_demo odoo.modules.loading: loading analytic/data/analytic_account_demo.xml +2025-07-15 14:38:21.928 | 2025-07-15 20:36:59,623 27 INFO lims_demo odoo.addons.base.models.ir_module: module analytic: loading translation file /usr/lib/python3/dist-packages/odoo/addons/analytic/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:36:59,623 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/analytic/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:36:59,720 27 INFO lims_demo odoo.modules.loading: Module analytic loaded in 2.10s, 679 queries (+679 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:36:59,720 27 INFO lims_demo odoo.modules.loading: Loading module auth_signup (22/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:36:59,787 27 INFO lims_demo odoo.modules.registry: module auth_signup: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:36:59,946 27 INFO lims_demo odoo.modules.loading: loading auth_signup/data/ir_config_parameter_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:36:59,956 27 INFO lims_demo odoo.modules.loading: loading auth_signup/data/ir_cron_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:36:59,971 27 INFO lims_demo odoo.modules.loading: loading auth_signup/data/mail_template_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,023 27 INFO lims_demo odoo.modules.loading: loading auth_signup/views/res_config_settings_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,062 27 INFO lims_demo odoo.modules.loading: loading auth_signup/views/res_users_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,110 27 INFO lims_demo odoo.modules.loading: loading auth_signup/views/auth_signup_login_templates.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,141 27 INFO lims_demo odoo.modules.loading: loading auth_signup/views/auth_signup_templates_email.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,161 27 INFO lims_demo odoo.modules.loading: loading auth_signup/views/webclient_templates.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,176 27 INFO lims_demo odoo.addons.base.models.ir_module: module auth_signup: loading translation file /usr/lib/python3/dist-packages/odoo/addons/auth_signup/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,176 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/auth_signup/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,233 27 INFO lims_demo odoo.modules.loading: Module auth_signup loaded in 0.51s, 217 queries (+217 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,233 27 INFO lims_demo odoo.modules.loading: Loading module auth_totp_mail (23/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,291 27 INFO lims_demo odoo.modules.registry: module auth_totp_mail: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,363 27 INFO lims_demo odoo.modules.loading: loading auth_totp_mail/data/ir_action_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,401 27 INFO lims_demo odoo.modules.loading: loading auth_totp_mail/data/mail_template_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,416 27 INFO lims_demo odoo.modules.loading: loading auth_totp_mail/data/security_notifications_template.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,434 27 INFO lims_demo odoo.modules.loading: loading auth_totp_mail/views/res_users_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,491 27 INFO lims_demo odoo.addons.base.models.ir_module: module auth_totp_mail: loading translation file /usr/lib/python3/dist-packages/odoo/addons/auth_totp_mail/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,492 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/auth_totp_mail/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,528 27 INFO lims_demo odoo.modules.loading: Module auth_totp_mail loaded in 0.29s, 128 queries (+128 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,528 27 INFO lims_demo odoo.modules.loading: Loading module base_install_request (24/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,674 27 INFO lims_demo odoo.modules.registry: module base_install_request: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,867 27 INFO lims_demo odoo.modules.loading: loading base_install_request/security/ir.model.access.csv +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,898 27 INFO lims_demo odoo.modules.loading: loading base_install_request/wizard/base_module_install_request_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,969 27 INFO lims_demo odoo.modules.loading: loading base_install_request/data/mail_template_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:00,988 27 INFO lims_demo odoo.modules.loading: loading base_install_request/data/mail_templates_module_install.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,001 27 INFO lims_demo odoo.modules.loading: loading base_install_request/views/ir_module_module_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,068 27 INFO lims_demo odoo.addons.base.models.ir_module: module base_install_request: loading translation file /usr/lib/python3/dist-packages/odoo/addons/base_install_request/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,069 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/base_install_request/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,139 27 INFO lims_demo odoo.modules.loading: Module base_install_request loaded in 0.61s, 161 queries (+161 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,139 27 INFO lims_demo odoo.modules.loading: Loading module google_gmail (25/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,246 27 INFO lims_demo odoo.modules.registry: module google_gmail: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,361 27 INFO lims_demo odoo.modules.loading: loading google_gmail/views/fetchmail_server_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,387 27 INFO lims_demo odoo.modules.loading: loading google_gmail/views/ir_mail_server_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,403 27 INFO lims_demo odoo.modules.loading: loading google_gmail/views/res_config_settings_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,448 27 INFO lims_demo odoo.addons.base.models.ir_module: module google_gmail: loading translation file /usr/lib/python3/dist-packages/odoo/addons/google_gmail/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,448 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/google_gmail/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,478 27 INFO lims_demo odoo.modules.loading: Module google_gmail loaded in 0.34s, 130 queries (+130 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,478 27 INFO lims_demo odoo.modules.loading: Loading module iap_mail (26/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,579 27 INFO lims_demo odoo.modules.registry: module iap_mail: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,659 27 INFO lims_demo odoo.modules.loading: loading iap_mail/data/mail_templates.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,677 27 INFO lims_demo odoo.modules.loading: loading iap_mail/views/iap_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,706 27 INFO lims_demo odoo.addons.base.models.ir_module: module iap_mail: loading translation file /usr/lib/python3/dist-packages/odoo/addons/iap_mail/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,706 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/iap_mail/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,733 27 INFO lims_demo odoo.modules.loading: Module iap_mail loaded in 0.25s, 71 queries (+71 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,733 27 INFO lims_demo odoo.modules.loading: Loading module mail_bot (27/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:01,927 27 INFO lims_demo odoo.modules.registry: module mail_bot: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:02,049 27 INFO lims_demo odoo.modules.loading: loading mail_bot/views/res_users_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:02,096 27 INFO lims_demo odoo.modules.loading: loading mail_bot/data/mailbot_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:02,111 27 INFO lims_demo odoo.addons.base.models.ir_module: module mail_bot: loading translation file /usr/lib/python3/dist-packages/odoo/addons/mail_bot/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:02,111 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/mail_bot/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:02,129 27 INFO lims_demo odoo.modules.loading: Module mail_bot loaded in 0.40s, 134 queries (+134 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:02,129 27 INFO lims_demo odoo.modules.loading: Loading module phone_validation (28/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:02,404 27 INFO lims_demo odoo.modules.registry: module phone_validation: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:04,833 27 INFO lims_demo odoo.modules.loading: loading phone_validation/security/ir.model.access.csv +2025-07-15 14:38:21.929 | 2025-07-15 20:37:04,892 27 INFO lims_demo odoo.modules.loading: loading phone_validation/views/phone_blacklist_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:04,980 27 INFO lims_demo odoo.modules.loading: loading phone_validation/wizard/phone_blacklist_remove_view.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,014 27 INFO lims_demo odoo.addons.base.models.ir_module: module phone_validation: loading translation file /usr/lib/python3/dist-packages/odoo/addons/phone_validation/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,014 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/phone_validation/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,083 27 INFO lims_demo odoo.modules.loading: Module phone_validation loaded in 2.95s, 1610 queries (+1610 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,083 27 INFO lims_demo odoo.modules.loading: Loading module privacy_lookup (29/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,262 27 INFO lims_demo odoo.modules.registry: module privacy_lookup: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,601 27 INFO lims_demo odoo.modules.loading: loading privacy_lookup/wizard/privacy_lookup_wizard_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,703 27 INFO lims_demo odoo.modules.loading: loading privacy_lookup/views/privacy_log_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,778 27 INFO lims_demo odoo.modules.loading: loading privacy_lookup/security/ir.model.access.csv +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,818 27 INFO lims_demo odoo.modules.loading: loading privacy_lookup/data/ir_actions_server_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,853 27 INFO lims_demo odoo.addons.base.models.ir_module: module privacy_lookup: loading translation file /usr/lib/python3/dist-packages/odoo/addons/privacy_lookup/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,853 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/privacy_lookup/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,917 27 INFO lims_demo odoo.modules.loading: Module privacy_lookup loaded in 0.83s, 254 queries (+254 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:05,917 27 INFO lims_demo odoo.modules.loading: Loading module product (30/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:06,172 27 INFO lims_demo odoo.modules.registry: module product: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:08,340 27 INFO lims_demo odoo.modules.loading: loading product/data/product_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:08,386 27 INFO lims_demo odoo.modules.loading: loading product/security/product_security.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:08,684 27 INFO lims_demo odoo.modules.loading: loading product/security/ir.model.access.csv +2025-07-15 14:38:21.929 | 2025-07-15 20:37:08,752 27 INFO lims_demo odoo.modules.loading: loading product/wizard/product_label_layout_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:08,782 27 INFO lims_demo odoo.modules.loading: loading product/wizard/update_product_attribute_value_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:08,796 27 INFO lims_demo odoo.modules.loading: loading product/views/product_tag_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:08,823 27 INFO lims_demo odoo.modules.loading: loading product/views/product_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,012 27 INFO lims_demo odoo.modules.loading: loading product/views/res_config_settings_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,054 27 INFO lims_demo odoo.modules.loading: loading product/views/product_attribute_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,136 27 INFO lims_demo odoo.modules.loading: loading product/views/product_attribute_value_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,144 27 INFO lims_demo odoo.modules.loading: loading product/views/product_category_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,172 27 INFO lims_demo odoo.modules.loading: loading product/views/product_combo_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,197 27 INFO lims_demo odoo.modules.loading: loading product/views/product_document_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,227 27 INFO lims_demo odoo.modules.loading: loading product/views/product_packaging_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,278 27 INFO lims_demo odoo.modules.loading: loading product/views/product_pricelist_item_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,313 27 INFO lims_demo odoo.modules.loading: loading product/views/product_pricelist_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,347 27 INFO lims_demo odoo.modules.loading: loading product/views/product_supplierinfo_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,379 27 INFO lims_demo odoo.modules.loading: loading product/views/product_template_attribute_line_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,388 27 INFO lims_demo odoo.modules.loading: loading product/views/product_template_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,436 27 INFO lims_demo odoo.modules.loading: loading product/views/res_country_group_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,446 27 INFO lims_demo odoo.modules.loading: loading product/views/res_partner_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,460 27 INFO lims_demo odoo.modules.loading: loading product/report/product_reports.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,495 27 INFO lims_demo odoo.modules.loading: loading product/report/product_product_templates.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,544 27 INFO lims_demo odoo.modules.loading: loading product/report/product_template_templates.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,564 27 INFO lims_demo odoo.modules.loading: loading product/report/product_packaging.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,572 27 INFO lims_demo odoo.modules.loading: loading product/report/product_pricelist_report_templates.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,582 27 INFO lims_demo odoo.modules.loading: Module product: loading demo +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,583 27 INFO lims_demo odoo.modules.loading: loading product/data/product_attribute_demo.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,638 27 INFO lims_demo odoo.modules.loading: loading product/data/product_category_demo.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:09,713 27 INFO lims_demo odoo.modules.loading: loading product/data/product_demo.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:10,321 27 INFO lims_demo odoo.models.unlink: User #1 deleted mail.message records with IDs: [66] +2025-07-15 14:38:21.929 | 2025-07-15 20:37:10,327 27 INFO lims_demo odoo.models.unlink: User #1 deleted product.product records with IDs: [9] +2025-07-15 14:38:21.929 | 2025-07-15 20:37:10,406 27 INFO lims_demo odoo.models.unlink: User #1 deleted mail.message records with IDs: [68, 67] +2025-07-15 14:38:21.929 | 2025-07-15 20:37:10,409 27 INFO lims_demo odoo.models.unlink: User #1 deleted product.product records with IDs: [10, 11] +2025-07-15 14:38:21.929 | 2025-07-15 20:37:11,196 27 INFO lims_demo odoo.models.unlink: User #1 deleted mail.message records with IDs: [86] +2025-07-15 14:38:21.929 | 2025-07-15 20:37:11,202 27 INFO lims_demo odoo.models.unlink: User #1 deleted product.product records with IDs: [22] +2025-07-15 14:38:21.929 | 2025-07-15 20:37:11,380 27 INFO lims_demo odoo.models.unlink: User #1 deleted mail.message records with IDs: [72] +2025-07-15 14:38:21.929 | 2025-07-15 20:37:11,396 27 INFO lims_demo odoo.models.unlink: User #1 deleted product.product records with IDs: [15] +2025-07-15 14:38:21.929 | 2025-07-15 20:37:12,944 27 INFO lims_demo odoo.modules.loading: loading product/data/product_document_demo.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:12,970 27 INFO lims_demo odoo.modules.loading: loading product/data/product_supplierinfo_demo.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,058 27 INFO lims_demo odoo.addons.base.models.ir_module: module product: loading translation file /usr/lib/python3/dist-packages/odoo/addons/product/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,058 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/product/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,522 27 INFO lims_demo odoo.modules.loading: Module product loaded in 7.60s, 3834 queries (+3834 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,522 27 INFO lims_demo odoo.modules.loading: Loading module resource_mail (31/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,576 27 INFO lims_demo odoo.modules.registry: module resource_mail: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,626 27 INFO lims_demo odoo.addons.base.models.ir_module: module resource_mail: loading translation file /usr/lib/python3/dist-packages/odoo/addons/resource_mail/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,626 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/resource_mail/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,636 27 INFO lims_demo odoo.modules.loading: Module resource_mail loaded in 0.11s, 37 queries (+37 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,636 27 INFO lims_demo odoo.modules.loading: Loading module sales_team (32/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,698 27 INFO lims_demo odoo.modules.registry: module sales_team: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,742 27 INFO lims_demo odoo.models: Prepare computation of res.users.sale_team_id +2025-07-15 14:38:21.929 | 2025-07-15 20:37:13,892 27 INFO lims_demo odoo.modules.loading: loading sales_team/security/sales_team_security.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,087 27 INFO lims_demo odoo.modules.loading: loading sales_team/security/ir.model.access.csv +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,104 27 INFO lims_demo odoo.modules.loading: loading sales_team/data/crm_team_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,156 27 INFO lims_demo odoo.modules.loading: loading sales_team/views/crm_tag_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,174 27 INFO lims_demo odoo.modules.loading: loading sales_team/views/crm_team_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,210 27 INFO lims_demo odoo.modules.loading: loading sales_team/views/crm_team_member_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,270 27 INFO lims_demo odoo.modules.loading: loading sales_team/views/mail_activity_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,278 27 INFO lims_demo odoo.modules.loading: Module sales_team: loading demo +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,278 27 INFO lims_demo odoo.modules.loading: loading sales_team/data/crm_team_demo.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,343 27 INFO lims_demo odoo.modules.loading: loading sales_team/data/crm_tag_demo.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,363 27 INFO lims_demo odoo.addons.base.models.ir_module: module sales_team: loading translation file /usr/lib/python3/dist-packages/odoo/addons/sales_team/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,363 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/sales_team/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,412 27 INFO lims_demo odoo.modules.loading: Module sales_team loaded in 0.78s, 666 queries (+666 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,412 27 INFO lims_demo odoo.modules.loading: Loading module web_unsplash (33/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,463 27 INFO lims_demo odoo.modules.registry: module web_unsplash: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,572 27 INFO lims_demo odoo.modules.loading: loading web_unsplash/views/res_config_settings_view.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,610 27 INFO lims_demo odoo.addons.base.models.ir_module: module web_unsplash: loading translation file /usr/lib/python3/dist-packages/odoo/addons/web_unsplash/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,611 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/web_unsplash/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,622 27 INFO lims_demo odoo.modules.loading: Module web_unsplash loaded in 0.21s, 115 queries (+115 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,622 27 INFO lims_demo odoo.modules.loading: Loading module partner_autocomplete (34/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,687 27 INFO lims_demo odoo.modules.registry: module partner_autocomplete: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,847 27 INFO lims_demo odoo.modules.loading: loading partner_autocomplete/security/ir.model.access.csv +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,864 27 INFO lims_demo odoo.modules.loading: loading partner_autocomplete/views/res_partner_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,903 27 INFO lims_demo odoo.modules.loading: loading partner_autocomplete/views/res_company_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,918 27 INFO lims_demo odoo.modules.loading: loading partner_autocomplete/views/res_config_settings_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,936 27 INFO lims_demo odoo.modules.loading: loading partner_autocomplete/data/cron.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,947 27 INFO lims_demo odoo.modules.loading: loading partner_autocomplete/data/iap_service_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,958 27 INFO lims_demo odoo.addons.base.models.ir_module: module partner_autocomplete: loading translation file /usr/lib/python3/dist-packages/odoo/addons/partner_autocomplete/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,958 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/partner_autocomplete/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,980 27 INFO lims_demo odoo.modules.loading: Module partner_autocomplete loaded in 0.36s, 212 queries (+212 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:14,980 27 INFO lims_demo odoo.modules.loading: Loading module portal (35/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,053 27 INFO lims_demo odoo.modules.registry: module portal: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,533 27 INFO lims_demo odoo.modules.loading: loading portal/security/ir.model.access.csv +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,550 27 INFO lims_demo odoo.modules.loading: loading portal/data/mail_template_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,564 27 INFO lims_demo odoo.modules.loading: loading portal/data/mail_templates.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,573 27 INFO lims_demo odoo.modules.loading: loading portal/views/mail_templates_public.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,582 27 INFO lims_demo odoo.modules.loading: loading portal/views/portal_templates.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,731 27 INFO lims_demo odoo.modules.loading: loading portal/views/res_config_settings_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,752 27 INFO lims_demo odoo.modules.loading: loading portal/wizard/portal_share_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,765 27 INFO lims_demo odoo.modules.loading: loading portal/wizard/portal_wizard_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,794 27 INFO lims_demo odoo.addons.base.models.ir_module: module portal: loading translation file /usr/lib/python3/dist-packages/odoo/addons/portal/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,794 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/portal/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,923 27 INFO lims_demo odoo.modules.loading: Module portal loaded in 0.94s, 549 queries (+549 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:15,923 27 INFO lims_demo odoo.modules.loading: Loading module sms (36/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:16,018 27 INFO lims_demo odoo.modules.registry: module sms: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:16,030 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.sms_template_id +2025-07-15 14:38:21.929 | 2025-07-15 20:37:16,030 27 INFO lims_demo odoo.models: Prepare computation of ir.actions.server.sms_method +2025-07-15 14:38:21.929 | 2025-07-15 20:37:16,059 27 INFO lims_demo odoo.models: Prepare computation of res.partner.phone_sanitized +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,417 27 INFO lims_demo odoo.modules.loading: loading sms/data/iap_service_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,425 27 INFO lims_demo odoo.modules.loading: loading sms/data/ir_cron_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,436 27 INFO lims_demo odoo.modules.loading: loading sms/wizard/sms_account_code_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,447 27 INFO lims_demo odoo.modules.loading: loading sms/wizard/sms_account_phone_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,455 27 INFO lims_demo odoo.modules.loading: loading sms/wizard/sms_account_sender_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,461 27 INFO lims_demo odoo.modules.loading: loading sms/wizard/sms_composer_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,475 27 INFO lims_demo odoo.modules.loading: loading sms/wizard/sms_template_preview_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,488 27 INFO lims_demo odoo.modules.loading: loading sms/wizard/sms_resend_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,503 27 INFO lims_demo odoo.modules.loading: loading sms/wizard/sms_template_reset_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,512 27 INFO lims_demo odoo.modules.loading: loading sms/views/ir_actions_server_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,528 27 INFO lims_demo odoo.modules.loading: loading sms/views/mail_notification_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,547 27 INFO lims_demo odoo.modules.loading: loading sms/views/res_config_settings_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,565 27 INFO lims_demo odoo.modules.loading: loading sms/views/res_partner_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,599 27 INFO lims_demo odoo.modules.loading: loading sms/views/iap_account_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,611 27 INFO lims_demo odoo.modules.loading: loading sms/views/sms_sms_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,640 27 INFO lims_demo odoo.modules.loading: loading sms/views/sms_template_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,666 27 INFO lims_demo odoo.modules.loading: loading sms/security/ir.model.access.csv +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,699 27 INFO lims_demo odoo.modules.loading: loading sms/security/sms_security.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,706 27 INFO lims_demo odoo.modules.loading: Module sms: loading demo +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,706 27 INFO lims_demo odoo.modules.loading: loading sms/data/sms_demo.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,711 27 INFO lims_demo odoo.modules.loading: loading sms/data/mail_demo.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,766 27 INFO lims_demo odoo.addons.base.models.ir_module: module sms: loading translation file /usr/lib/python3/dist-packages/odoo/addons/sms/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,767 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/sms/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,830 27 INFO lims_demo odoo.modules.loading: Module sms loaded in 4.91s, 2374 queries (+2374 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,830 27 INFO lims_demo odoo.modules.loading: Loading module snailmail (37/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:20,905 27 INFO lims_demo odoo.modules.registry: module snailmail: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,458 27 INFO lims_demo odoo.modules.loading: loading snailmail/data/iap_service_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,466 27 INFO lims_demo odoo.modules.loading: loading snailmail/data/snailmail_data.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,475 27 INFO lims_demo odoo.modules.loading: loading snailmail/views/report_assets.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,488 27 INFO lims_demo odoo.modules.loading: loading snailmail/views/snailmail_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,511 27 INFO lims_demo odoo.modules.loading: loading snailmail/wizard/snailmail_letter_format_error_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,522 27 INFO lims_demo odoo.modules.loading: loading snailmail/wizard/snailmail_letter_missing_required_fields_views.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,534 27 INFO lims_demo odoo.modules.loading: loading snailmail/security/ir.model.access.csv +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,556 27 INFO lims_demo odoo.addons.base.models.ir_module: module snailmail: loading translation file /usr/lib/python3/dist-packages/odoo/addons/snailmail/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,556 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/snailmail/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,587 27 INFO lims_demo odoo.modules.loading: Module snailmail loaded in 0.76s, 493 queries (+493 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,587 27 INFO lims_demo odoo.modules.loading: Loading module auth_totp_portal (38/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,641 27 INFO lims_demo odoo.modules.registry: module auth_totp_portal: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,691 27 INFO lims_demo odoo.modules.loading: loading auth_totp_portal/security/security.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,707 27 INFO lims_demo odoo.modules.loading: loading auth_totp_portal/views/templates.xml +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,724 27 INFO lims_demo odoo.addons.base.models.ir_module: module auth_totp_portal: loading translation file /usr/lib/python3/dist-packages/odoo/addons/auth_totp_portal/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,724 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/auth_totp_portal/i18n/es.po for language es_ES +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,737 27 INFO lims_demo odoo.modules.loading: Module auth_totp_portal loaded in 0.15s, 69 queries (+69 other) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,737 27 INFO lims_demo odoo.modules.loading: Loading module digest (39/62) +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,807 27 INFO lims_demo odoo.modules.registry: module digest: creating or updating database tables +2025-07-15 14:38:21.929 | 2025-07-15 20:37:21,969 27 INFO lims_demo odoo.modules.loading: loading digest/security/ir.model.access.csv +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,057 27 INFO lims_demo odoo.modules.loading: loading digest/data/digest_data.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,080 27 INFO lims_demo odoo.modules.loading: loading digest/data/digest_tips_data.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,096 27 INFO lims_demo odoo.modules.loading: loading digest/data/ir_cron_data.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,106 27 INFO lims_demo odoo.modules.loading: loading digest/data/res_config_settings_data.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,111 27 INFO lims_demo odoo.modules.loading: loading digest/views/digest_views.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,180 27 INFO lims_demo odoo.modules.loading: loading digest/views/digest_templates.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,186 27 INFO lims_demo odoo.modules.loading: loading digest/views/res_config_settings_views.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,207 27 INFO lims_demo odoo.addons.base.models.ir_module: module digest: loading translation file /usr/lib/python3/dist-packages/odoo/addons/digest/i18n/es.po for language es_ES +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,207 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/digest/i18n/es.po for language es_ES +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,259 27 INFO lims_demo odoo.modules.loading: Module digest loaded in 0.52s, 318 queries (+318 other) +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,260 27 INFO lims_demo odoo.modules.loading: Loading module payment (40/62) +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,364 27 INFO lims_demo odoo.modules.registry: module payment: creating or updating database tables +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,819 27 INFO lims_demo odoo.modules.loading: loading payment/data/ir_actions_server_data.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,826 27 INFO lims_demo odoo.modules.loading: loading payment/data/onboarding_data.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:22,832 27 INFO lims_demo odoo.modules.loading: loading payment/data/payment_method_data.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:24,843 27 INFO lims_demo odoo.modules.loading: loading payment/data/payment_provider_data.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:25,022 27 INFO lims_demo odoo.modules.loading: loading payment/data/payment_cron.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:25,031 27 INFO lims_demo odoo.modules.loading: loading payment/views/express_checkout_templates.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:25,037 27 INFO lims_demo odoo.modules.loading: loading payment/views/payment_form_templates.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:25,077 27 INFO lims_demo odoo.modules.loading: loading payment/views/portal_templates.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:25,119 27 INFO lims_demo odoo.modules.loading: loading payment/views/payment_provider_views.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:25,167 27 INFO lims_demo odoo.modules.loading: loading payment/views/payment_method_views.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:25,213 27 INFO lims_demo odoo.modules.loading: loading payment/views/payment_transaction_views.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:25,272 27 INFO lims_demo odoo.modules.loading: loading payment/views/payment_token_views.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:25,311 27 INFO lims_demo odoo.modules.loading: loading payment/views/res_partner_views.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:25,337 27 INFO lims_demo odoo.modules.loading: loading payment/security/ir.model.access.csv +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,078 27 INFO lims_demo odoo.modules.loading: loading payment/security/payment_security.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,120 27 INFO lims_demo odoo.modules.loading: loading payment/wizards/payment_capture_wizard_views.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,133 27 INFO lims_demo odoo.modules.loading: loading payment/wizards/payment_link_wizard_views.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,151 27 INFO lims_demo odoo.modules.loading: loading payment/wizards/payment_onboarding_views.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,177 27 INFO lims_demo odoo.addons.base.models.ir_module: module payment: loading translation file /usr/lib/python3/dist-packages/odoo/addons/payment/i18n/es.po for language es_ES +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,177 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/payment/i18n/es.po for language es_ES +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,357 27 INFO lims_demo odoo.modules.loading: Module payment loaded in 5.10s, 2368 queries (+2368 other) +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,357 27 INFO lims_demo odoo.modules.loading: Loading module spreadsheet (41/62) +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,466 27 INFO lims_demo odoo.modules.registry: module spreadsheet: creating or updating database tables +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,572 27 INFO lims_demo odoo.modules.loading: loading spreadsheet/views/public_readonly_spreadsheet_templates.xml +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,592 27 INFO lims_demo odoo.addons.base.models.ir_module: module spreadsheet: loading translation file /usr/lib/python3/dist-packages/odoo/addons/spreadsheet/i18n/es.po for language es_ES +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,592 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/spreadsheet/i18n/es.po for language es_ES +2025-07-15 14:38:21.930 | 2025-07-15 20:37:27,703 27 INFO lims_demo odoo.modules.loading: Module spreadsheet loaded in 0.35s, 90 queries (+90 other) +2025-07-15 14:38:21.931 | 2025-07-15 20:37:27,703 27 INFO lims_demo odoo.modules.loading: Loading module account (42/62) +2025-07-15 14:38:21.931 | 2025-07-15 20:37:28,007 27 INFO lims_demo odoo.modules.registry: module account: creating or updating database tables +2025-07-15 14:38:21.931 | 2025-07-15 20:37:28,172 27 INFO lims_demo odoo.models: Prepare computation of res.partner.bank.has_iban_warning +2025-07-15 14:38:21.931 | 2025-07-15 20:37:28,172 27 INFO lims_demo odoo.models: Prepare computation of res.partner.bank.has_money_transfer_warning +2025-07-15 14:38:21.931 | 2025-07-15 20:37:28,584 27 INFO lims_demo odoo.models: Prepare computation of res.company.account_fiscal_country_id +2025-07-15 14:38:21.931 | 2025-07-15 20:37:28,584 27 INFO lims_demo odoo.models: Prepare computation of res.company.invoice_terms_html +2025-07-15 14:38:21.931 | 2025-07-15 20:37:34,863 27 INFO lims_demo odoo.modules.loading: loading account/security/account_security.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:35,572 27 INFO lims_demo odoo.modules.loading: loading account/security/ir.model.access.csv +2025-07-15 14:38:21.931 | 2025-07-15 20:37:35,736 27 INFO lims_demo odoo.modules.loading: loading account/data/account_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:35,856 27 INFO lims_demo odoo.modules.loading: loading account/data/digest_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:35,869 27 INFO lims_demo odoo.modules.loading: loading account/views/account_report.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:35,898 27 INFO lims_demo odoo.modules.loading: loading account/data/mail_template_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:35,924 27 INFO lims_demo odoo.modules.loading: loading account/data/onboarding_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:35,964 27 INFO lims_demo odoo.modules.loading: loading account/data/account_tour.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:35,970 27 INFO lims_demo odoo.modules.loading: loading account/data/ir_sequence.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:35,974 27 INFO lims_demo odoo.modules.loading: loading account/views/account_payment_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,068 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_automatic_entry_wizard_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,087 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_autopost_bills_wizard.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,099 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_unreconcile_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,107 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_move_reversal_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,123 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_resequence_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,135 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_payment_register_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,155 27 INFO lims_demo odoo.modules.loading: loading account/views/account_move_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,818 27 INFO lims_demo odoo.modules.loading: loading account/wizard/setup_wizards_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,844 27 INFO lims_demo odoo.modules.loading: loading account/views/account_account_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,886 27 INFO lims_demo odoo.modules.loading: loading account/views/account_group_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,900 27 INFO lims_demo odoo.modules.loading: loading account/views/account_journal_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,960 27 INFO lims_demo odoo.modules.loading: loading account/views/account_account_tag_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:36,974 27 INFO lims_demo odoo.modules.loading: loading account/views/account_bank_statement_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,006 27 INFO lims_demo odoo.modules.loading: loading account/views/account_reconcile_model_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,042 27 INFO lims_demo odoo.modules.loading: loading account/views/account_tax_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,109 27 INFO lims_demo odoo.modules.loading: loading account/views/account_full_reconcile_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,117 27 INFO lims_demo odoo.modules.loading: loading account/views/account_payment_term_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,147 27 INFO lims_demo odoo.modules.loading: loading account/views/account_payment_method.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,164 27 INFO lims_demo odoo.modules.loading: loading account/views/res_partner_bank_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,196 27 INFO lims_demo odoo.modules.loading: loading account/views/report_statement.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,212 27 INFO lims_demo odoo.modules.loading: loading account/views/terms_template.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,226 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_validate_move_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,244 27 INFO lims_demo odoo.modules.loading: loading account/views/res_company_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,283 27 INFO lims_demo odoo.modules.loading: loading account/views/product_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,331 27 INFO lims_demo odoo.modules.loading: loading account/views/account_analytic_plan_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,341 27 INFO lims_demo odoo.modules.loading: loading account/views/account_analytic_account_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,358 27 INFO lims_demo odoo.modules.loading: loading account/views/account_analytic_distribution_model_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,383 27 INFO lims_demo odoo.modules.loading: loading account/views/account_analytic_line_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,424 27 INFO lims_demo odoo.modules.loading: loading account/views/report_invoice.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,471 27 INFO lims_demo odoo.modules.loading: loading account/report/account_invoice_report_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,519 27 INFO lims_demo odoo.modules.loading: loading account/views/account_cash_rounding_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,537 27 INFO lims_demo odoo.modules.loading: loading account/views/ir_actions_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,551 27 INFO lims_demo odoo.modules.loading: loading account/views/ir_module_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,572 27 INFO lims_demo odoo.modules.loading: loading account/views/res_config_settings_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,630 27 INFO lims_demo odoo.modules.loading: loading account/views/partner_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,791 27 INFO lims_demo odoo.modules.loading: loading account/views/account_journal_dashboard_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,823 27 INFO lims_demo odoo.modules.loading: loading account/views/account_portal_templates.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,892 27 INFO lims_demo odoo.modules.loading: loading account/views/report_payment_receipt_templates.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,905 27 INFO lims_demo odoo.modules.loading: loading account/data/service_cron.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,927 27 INFO lims_demo odoo.modules.loading: loading account/views/account_incoterms_view.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,956 27 INFO lims_demo odoo.modules.loading: loading account/data/account_incoterms_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,981 27 INFO lims_demo odoo.modules.loading: loading account/views/digest_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:37,997 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_move_send_wizard.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,008 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_move_send_batch_wizard.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,015 27 INFO lims_demo odoo.modules.loading: loading account/report/account_hash_integrity_templates.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,025 27 INFO lims_demo odoo.modules.loading: loading account/views/res_currency.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,042 27 INFO lims_demo odoo.modules.loading: loading account/views/account_menuitem.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,469 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_secure_entries_wizard.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,517 27 INFO lims_demo odoo.modules.loading: loading account/views/mail_message_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,565 27 INFO lims_demo odoo.modules.loading: loading account/wizard/accrued_orders.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,585 27 INFO lims_demo odoo.modules.loading: loading account/views/bill_preview_template.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,603 27 INFO lims_demo odoo.modules.loading: loading account/data/account_reports_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,642 27 INFO lims_demo odoo.modules.loading: loading account/views/uom_uom_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,661 27 INFO lims_demo odoo.modules.loading: loading account/views/product_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,687 27 INFO lims_demo odoo.modules.loading: loading account/views/tests_shared_js_python.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,696 27 INFO lims_demo odoo.modules.loading: loading account/views/base_document_layout_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,721 27 INFO lims_demo odoo.modules.loading: loading account/views/account_lock_exception_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,743 27 INFO lims_demo odoo.modules.loading: loading account/views/report_templates.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,766 27 INFO lims_demo odoo.modules.loading: loading account/wizard/account_merge_wizard_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,788 27 INFO lims_demo odoo.modules.loading: Module account: loading demo +2025-07-15 14:38:21.931 | 2025-07-15 20:37:38,789 27 INFO lims_demo odoo.modules.loading: loading account/demo/account_demo.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:44,884 27 INFO lims_demo odoo.addons.base.models.ir_module: module account: loading translation file /usr/lib/python3/dist-packages/odoo/addons/account/i18n/es.po for language es_ES +2025-07-15 14:38:21.931 | 2025-07-15 20:37:44,884 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/account/i18n/es.po for language es_ES +2025-07-15 14:38:21.931 | 2025-07-15 20:37:45,474 27 INFO lims_demo odoo.modules.loading: Module account loaded in 17.77s, 8152 queries (+8153 other) +2025-07-15 14:38:21.931 | 2025-07-15 20:37:45,475 27 INFO lims_demo odoo.modules.loading: Loading module spreadsheet_dashboard (43/62) +2025-07-15 14:38:21.931 | 2025-07-15 20:37:45,681 27 INFO lims_demo odoo.modules.registry: module spreadsheet_dashboard: creating or updating database tables +2025-07-15 14:38:21.931 | 2025-07-15 20:37:45,850 27 INFO lims_demo odoo.modules.loading: loading spreadsheet_dashboard/security/security.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:45,987 27 INFO lims_demo odoo.modules.loading: loading spreadsheet_dashboard/security/ir.model.access.csv +2025-07-15 14:38:21.931 | 2025-07-15 20:37:46,007 27 INFO lims_demo odoo.modules.loading: loading spreadsheet_dashboard/views/spreadsheet_dashboard_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:46,042 27 INFO lims_demo odoo.modules.loading: loading spreadsheet_dashboard/views/menu_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:46,083 27 INFO lims_demo odoo.modules.loading: loading spreadsheet_dashboard/data/dashboard.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:46,119 27 INFO lims_demo odoo.addons.base.models.ir_module: module spreadsheet_dashboard: loading translation file /usr/lib/python3/dist-packages/odoo/addons/spreadsheet_dashboard/i18n/es.po for language es_ES +2025-07-15 14:38:21.931 | 2025-07-15 20:37:46,119 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/spreadsheet_dashboard/i18n/es.po for language es_ES +2025-07-15 14:38:21.931 | 2025-07-15 20:37:46,160 27 INFO lims_demo odoo.modules.loading: Module spreadsheet_dashboard loaded in 0.69s, 344 queries (+344 other) +2025-07-15 14:38:21.931 | 2025-07-15 20:37:46,161 27 INFO lims_demo odoo.modules.loading: Loading module stock (44/62) +2025-07-15 14:38:21.931 | 2025-07-15 20:37:46,552 27 INFO lims_demo odoo.modules.registry: module stock: creating or updating database tables +2025-07-15 14:38:21.931 | 2025-07-15 20:37:47,035 27 INFO lims_demo odoo.models: Prepare computation of product.template.tracking +2025-07-15 14:38:21.931 | 2025-07-15 20:37:47,036 27 INFO lims_demo odoo.models: Prepare computation of product.template.is_storable +2025-07-15 14:38:21.931 | 2025-07-15 20:37:50,348 27 INFO lims_demo odoo.modules.loading: loading stock/security/stock_security.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:51,116 27 INFO lims_demo odoo.modules.loading: loading stock/security/ir.model.access.csv +2025-07-15 14:38:21.931 | 2025-07-15 20:37:51,480 27 INFO lims_demo odoo.modules.loading: loading stock/data/digest_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:51,498 27 INFO lims_demo odoo.modules.loading: loading stock/data/mail_templates.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:51,511 27 INFO lims_demo odoo.modules.loading: loading stock/data/default_barcode_patterns.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:51,527 27 INFO lims_demo odoo.modules.loading: loading stock/data/stock_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,038 27 INFO lims_demo odoo.modules.loading: loading stock/data/stock_sequence_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,069 27 INFO lims_demo odoo.modules.loading: loading stock/data/stock_traceability_report_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,075 27 INFO lims_demo odoo.modules.loading: loading stock/report/report_stock_quantity.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,091 27 INFO lims_demo odoo.modules.loading: loading stock/report/report_stock_reception.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,125 27 INFO lims_demo odoo.modules.loading: loading stock/report/stock_report_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,204 27 INFO lims_demo odoo.modules.loading: loading stock/report/report_package_barcode.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,245 27 INFO lims_demo odoo.modules.loading: loading stock/report/report_lot_barcode.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,265 27 INFO lims_demo odoo.modules.loading: loading stock/report/report_location_barcode.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,288 27 INFO lims_demo odoo.modules.loading: loading stock/report/report_stockpicking_operations.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,325 27 INFO lims_demo odoo.modules.loading: loading stock/report/report_deliveryslip.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,392 27 INFO lims_demo odoo.modules.loading: loading stock/report/report_stockinventory.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,403 27 INFO lims_demo odoo.modules.loading: loading stock/report/report_stock_rule.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,441 27 INFO lims_demo odoo.modules.loading: loading stock/report/stock_lot_customer.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,476 27 INFO lims_demo odoo.modules.loading: loading stock/report/package_templates.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,484 27 INFO lims_demo odoo.modules.loading: loading stock/report/picking_templates.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,505 27 INFO lims_demo odoo.modules.loading: loading stock/report/product_templates.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,520 27 INFO lims_demo odoo.modules.loading: loading stock/report/product_packaging.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,529 27 INFO lims_demo odoo.modules.loading: loading stock/report/report_return_slip.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,548 27 INFO lims_demo odoo.modules.loading: loading stock/data/mail_template_data.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,574 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_menu_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,721 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_change_product_qty_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,739 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_picking_return_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,761 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_inventory_conflict.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,781 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_backorder_confirmation_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,804 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_quantity_history.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,814 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_request_count.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,830 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_replenishment_info.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,869 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_rules_report_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,884 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_warn_insufficient_qty_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,907 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/product_replenish_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,927 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/product_label_layout_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,941 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_track_confirmation_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,955 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_orderpoint_snooze_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,973 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_package_destination_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:52,990 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_inventory_adjustment_name.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:53,005 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_inventory_warning.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:53,021 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_label_type.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:53,032 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_lot_label_layout.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:53,043 27 INFO lims_demo odoo.modules.loading: loading stock/wizard/stock_quant_relocate.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:53,057 27 INFO lims_demo odoo.modules.loading: loading stock/views/res_partner_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:53,111 27 INFO lims_demo odoo.modules.loading: loading stock/views/product_strategy_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:53,241 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_lot_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:53,372 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_scrap_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:53,522 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_quant_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:54,328 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_warehouse_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:54,432 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_move_line_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:54,641 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_move_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:55,057 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_picking_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:55,652 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_picking_type_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:55,860 27 INFO lims_demo odoo.modules.loading: loading stock/views/product_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:56,639 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_location_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:56,912 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_orderpoint_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:57,123 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_storage_category_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:57,271 27 INFO lims_demo odoo.modules.loading: loading stock/views/res_config_settings_views.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:57,419 27 INFO lims_demo odoo.modules.loading: loading stock/views/report_stock_traceability.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:57,453 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_template.xml +2025-07-15 14:38:21.931 | 2025-07-15 20:37:57,479 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_rule_views.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:37:57,664 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_package_level_views.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:37:57,755 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_package_type_view.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:37:57,846 27 INFO lims_demo odoo.modules.loading: loading stock/views/stock_forecasted.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:37:57,859 27 INFO lims_demo odoo.modules.loading: Module stock: loading demo +2025-07-15 14:38:21.932 | 2025-07-15 20:37:57,860 27 INFO lims_demo odoo.modules.loading: loading stock/data/stock_demo_pre.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:37:58,631 27 INFO lims_demo odoo.modules.loading: loading stock/data/stock_demo.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:00,579 27 INFO lims_demo odoo.modules.loading: loading stock/data/stock_demo2.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:01,369 27 INFO lims_demo odoo.modules.loading: loading stock/data/stock_orderpoint_demo.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:01,396 27 INFO lims_demo odoo.modules.loading: loading stock/data/stock_storage_category_demo.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:01,422 27 INFO lims_demo odoo.addons.base.models.ir_module: module stock: loading translation file /usr/lib/python3/dist-packages/odoo/addons/stock/i18n/es.po for language es_ES +2025-07-15 14:38:21.932 | 2025-07-15 20:38:01,423 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/stock/i18n/es.po for language es_ES +2025-07-15 14:38:21.932 | 2025-07-15 20:38:01,973 27 INFO lims_demo odoo.modules.loading: Module stock loaded in 15.81s, 6984 queries (+6984 other) +2025-07-15 14:38:21.932 | 2025-07-15 20:38:01,973 27 INFO lims_demo odoo.modules.loading: Loading module account_edi_ubl_cii (45/62) +2025-07-15 14:38:21.932 | 2025-07-15 20:38:02,105 27 INFO lims_demo odoo.modules.registry: module account_edi_ubl_cii: creating or updating database tables +2025-07-15 14:38:21.932 | 2025-07-15 20:38:02,152 27 INFO lims_demo odoo.models: Prepare computation of res.partner.peppol_endpoint +2025-07-15 14:38:21.932 | 2025-07-15 20:38:02,152 27 INFO lims_demo odoo.models: Prepare computation of res.partner.peppol_eas +2025-07-15 14:38:21.932 | 2025-07-15 20:38:02,586 27 INFO lims_demo odoo.modules.loading: loading account_edi_ubl_cii/data/cii_22_templates.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:02,647 27 INFO lims_demo odoo.modules.loading: loading account_edi_ubl_cii/data/ubl_20_templates.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:02,800 27 INFO lims_demo odoo.modules.loading: loading account_edi_ubl_cii/data/ubl_21_templates.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:02,877 27 INFO lims_demo odoo.modules.loading: loading account_edi_ubl_cii/views/res_partner_views.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:02,935 27 INFO lims_demo odoo.addons.base.models.ir_module: module account_edi_ubl_cii: loading translation file /usr/lib/python3/dist-packages/odoo/addons/account_edi_ubl_cii/i18n/es.po for language es_ES +2025-07-15 14:38:21.932 | 2025-07-15 20:38:02,936 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/account_edi_ubl_cii/i18n/es.po for language es_ES +2025-07-15 14:38:21.932 | 2025-07-15 20:38:03,022 27 INFO lims_demo odoo.modules.loading: Module account_edi_ubl_cii loaded in 1.05s, 398 queries (+398 other) +2025-07-15 14:38:21.932 | 2025-07-15 20:38:03,022 27 INFO lims_demo odoo.modules.loading: Loading module account_payment (46/62) +2025-07-15 14:38:21.932 | 2025-07-15 20:38:03,192 27 INFO lims_demo odoo.modules.registry: module account_payment: creating or updating database tables +2025-07-15 14:38:21.932 | 2025-07-15 20:38:03,250 27 INFO lims_demo odoo.models: Prepare computation of account.payment.method.line.payment_provider_id +2025-07-15 14:38:21.932 | 2025-07-15 20:38:03,565 27 INFO lims_demo odoo.modules.loading: loading account_payment/data/ir_config_parameter.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:03,573 27 INFO lims_demo odoo.modules.loading: loading account_payment/data/onboarding_data.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:03,586 27 INFO lims_demo odoo.modules.loading: loading account_payment/security/ir.model.access.csv +2025-07-15 14:38:21.932 | 2025-07-15 20:38:03,606 27 INFO lims_demo odoo.modules.loading: loading account_payment/security/ir_rules.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:03,621 27 INFO lims_demo odoo.modules.loading: loading account_payment/views/account_payment_menus.xml +2025-07-15 14:38:21.932 | 2025-07-15 20:38:03,656 27 INFO lims_demo odoo.modules.loading: loading account_payment/views/account_portal_templates.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,733 27 INFO lims_demo odoo.modules.loading: loading account_payment/views/account_move_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,760 27 INFO lims_demo odoo.modules.loading: loading account_payment/views/account_journal_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,783 27 INFO lims_demo odoo.modules.loading: loading account_payment/views/account_payment_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,794 27 INFO lims_demo odoo.modules.loading: loading account_payment/views/payment_form_templates.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,804 27 INFO lims_demo odoo.modules.loading: loading account_payment/views/payment_provider_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,817 27 INFO lims_demo odoo.modules.loading: loading account_payment/views/payment_transaction_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,827 27 INFO lims_demo odoo.modules.loading: loading account_payment/wizards/account_payment_register_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,842 27 INFO lims_demo odoo.modules.loading: loading account_payment/wizards/payment_link_wizard_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,864 27 INFO lims_demo odoo.modules.loading: loading account_payment/wizards/payment_refund_wizard_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,876 27 INFO lims_demo odoo.modules.loading: loading account_payment/wizards/res_config_settings_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,926 27 INFO lims_demo odoo.addons.base.models.ir_module: module account_payment: loading translation file /usr/lib/python3/dist-packages/odoo/addons/account_payment/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,926 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/account_payment/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,992 27 INFO lims_demo odoo.modules.loading: Module account_payment loaded in 0.97s, 551 queries (+551 other) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:03,992 27 INFO lims_demo odoo.modules.loading: Loading module l10n_us_account (47/62) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,129 27 INFO lims_demo odoo.addons.base.models.ir_module: module l10n_us_account: no translation for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,161 27 INFO lims_demo odoo.modules.loading: Module l10n_us_account loaded in 0.17s, 14 queries (+14 other) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,161 27 INFO lims_demo odoo.modules.loading: Loading module snailmail_account (48/62) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,305 27 INFO lims_demo odoo.modules.registry: module snailmail_account: creating or updating database tables +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,472 27 INFO lims_demo odoo.modules.loading: loading snailmail_account/views/res_config_settings_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,506 27 INFO lims_demo odoo.addons.base.models.ir_module: module snailmail_account: loading translation file /usr/lib/python3/dist-packages/odoo/addons/snailmail_account/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,506 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/snailmail_account/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,521 27 INFO lims_demo odoo.modules.loading: Module snailmail_account loaded in 0.36s, 124 queries (+124 other) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,521 27 INFO lims_demo odoo.modules.loading: Loading module spreadsheet_account (49/62) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,849 27 INFO lims_demo odoo.modules.registry: module spreadsheet_account: creating or updating database tables +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,956 27 INFO lims_demo odoo.addons.base.models.ir_module: module spreadsheet_account: loading translation file /usr/lib/python3/dist-packages/odoo/addons/spreadsheet_account/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:04,956 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/spreadsheet_account/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:05,011 27 INFO lims_demo odoo.modules.loading: Module spreadsheet_account loaded in 0.49s, 58 queries (+58 other) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:05,011 27 INFO lims_demo odoo.modules.loading: Loading module spreadsheet_dashboard_account (50/62) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:05,159 27 INFO lims_demo odoo.modules.loading: loading spreadsheet_dashboard_account/data/dashboards.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:05,233 27 INFO lims_demo odoo.addons.base.models.ir_module: module spreadsheet_dashboard_account: loading translation file /usr/lib/python3/dist-packages/odoo/addons/spreadsheet_dashboard_account/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:05,233 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/spreadsheet_dashboard_account/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:05,245 27 INFO lims_demo odoo.modules.loading: Module spreadsheet_dashboard_account loaded in 0.23s, 30 queries (+30 other) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:05,245 27 INFO lims_demo odoo.modules.loading: Loading module stock_account (51/62) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:05,417 27 INFO lims_demo odoo.modules.registry: module stock_account: creating or updating database tables +2025-07-15 14:38:21.934 | 2025-07-15 20:38:05,471 27 INFO lims_demo odoo.models: Prepare computation of product.template.lot_valuated +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,106 27 INFO lims_demo odoo.modules.loading: loading stock_account/security/stock_account_security.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,178 27 INFO lims_demo odoo.modules.loading: loading stock_account/security/ir.model.access.csv +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,202 27 INFO lims_demo odoo.modules.loading: loading stock_account/data/stock_account_data.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,212 27 INFO lims_demo odoo.modules.loading: loading stock_account/views/stock_account_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,422 27 INFO lims_demo odoo.modules.loading: loading stock_account/views/res_config_settings_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,471 27 INFO lims_demo odoo.modules.loading: loading stock_account/data/product_data.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,494 27 INFO lims_demo odoo.modules.loading: loading stock_account/views/report_invoice.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,515 27 INFO lims_demo odoo.modules.loading: loading stock_account/views/stock_valuation_layer_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,725 27 INFO lims_demo odoo.modules.loading: loading stock_account/views/stock_quant_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,783 27 INFO lims_demo odoo.modules.loading: loading stock_account/views/product_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,914 27 INFO lims_demo odoo.modules.loading: loading stock_account/views/stock_lot_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,951 27 INFO lims_demo odoo.modules.loading: loading stock_account/views/stock_picking_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:06,995 27 INFO lims_demo odoo.modules.loading: loading stock_account/wizard/stock_request_count.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:07,022 27 INFO lims_demo odoo.modules.loading: loading stock_account/wizard/stock_valuation_layer_revaluation_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:07,059 27 INFO lims_demo odoo.modules.loading: loading stock_account/wizard/stock_quantity_history.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:07,082 27 INFO lims_demo odoo.modules.loading: loading stock_account/report/account_invoice_report_view.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:07,104 27 INFO lims_demo odoo.modules.loading: Module stock_account: loading demo +2025-07-15 14:38:21.934 | 2025-07-15 20:38:07,105 27 INFO lims_demo odoo.modules.loading: loading stock_account/data/stock_account_demo.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:07,156 27 INFO lims_demo odoo.addons.base.models.ir_module: module stock_account: loading translation file /usr/lib/python3/dist-packages/odoo/addons/stock_account/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:07,157 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/stock_account/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:07,848 27 INFO lims_demo odoo.modules.loading: Module stock_account loaded in 2.60s, 1451 queries (+1451 other) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:07,848 27 INFO lims_demo odoo.modules.loading: Loading module stock_sms (52/62) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,091 27 INFO lims_demo odoo.modules.registry: module stock_sms: creating or updating database tables +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,306 27 INFO lims_demo odoo.modules.loading: loading stock_sms/data/sms_data.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,321 27 INFO lims_demo odoo.modules.loading: loading stock_sms/views/res_config_settings_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,406 27 INFO lims_demo odoo.modules.loading: loading stock_sms/wizard/confirm_stock_sms_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,417 27 INFO lims_demo odoo.modules.loading: loading stock_sms/security/ir.model.access.csv +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,440 27 INFO lims_demo odoo.modules.loading: loading stock_sms/security/sms_security.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,457 27 INFO lims_demo odoo.addons.base.models.ir_module: module stock_sms: loading translation file /usr/lib/python3/dist-packages/odoo/addons/stock_sms/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,457 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/stock_sms/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,499 27 INFO lims_demo odoo.modules.loading: Module stock_sms loaded in 0.65s, 195 queries (+195 other) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,499 27 INFO lims_demo odoo.modules.loading: Loading module sale (53/62) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,672 27 INFO lims_demo odoo.modules.registry: module sale: creating or updating database tables +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,682 27 INFO lims_demo odoo.models: Prepare computation of account.move.team_id +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,841 27 INFO lims_demo odoo.models: Prepare computation of product.template.service_type +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,841 27 INFO lims_demo odoo.models: Prepare computation of product.template.expense_policy +2025-07-15 14:38:21.934 | 2025-07-15 20:38:08,841 27 INFO lims_demo odoo.models: Prepare computation of product.template.invoice_policy +2025-07-15 14:38:21.934 | 2025-07-15 20:38:12,096 27 INFO lims_demo odoo.modules.loading: loading sale/security/ir.model.access.csv +2025-07-15 14:38:21.934 | 2025-07-15 20:38:12,583 27 INFO lims_demo odoo.modules.loading: loading sale/security/res_groups.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:12,790 27 INFO lims_demo odoo.modules.loading: loading sale/security/ir_rules.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,004 27 INFO lims_demo odoo.modules.loading: loading sale/report/account_invoice_report_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,038 27 INFO lims_demo odoo.modules.loading: loading sale/report/ir_actions_report_templates.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,080 27 INFO lims_demo odoo.modules.loading: loading sale/report/ir_actions_report.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,101 27 INFO lims_demo odoo.modules.loading: loading sale/report/sale_report_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,196 27 INFO lims_demo odoo.modules.loading: loading sale/data/ir_cron.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,212 27 INFO lims_demo odoo.modules.loading: loading sale/data/ir_sequence_data.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,226 27 INFO lims_demo odoo.modules.loading: loading sale/data/mail_activity_type_data.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,242 27 INFO lims_demo odoo.modules.loading: loading sale/data/mail_message_subtype_data.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,288 27 INFO lims_demo odoo.modules.loading: loading sale/data/mail_template_data.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,384 27 INFO lims_demo odoo.modules.loading: loading sale/data/sale_tour.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,395 27 INFO lims_demo odoo.modules.loading: loading sale/data/ir_config_parameter.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,411 27 INFO lims_demo odoo.modules.loading: loading sale/wizard/account_accrued_orders_wizard_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,461 27 INFO lims_demo odoo.modules.loading: loading sale/wizard/mass_cancel_orders_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,527 27 INFO lims_demo odoo.modules.loading: loading sale/wizard/payment_link_wizard_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,590 27 INFO lims_demo odoo.modules.loading: loading sale/wizard/res_config_settings_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,671 27 INFO lims_demo odoo.modules.loading: loading sale/wizard/sale_make_invoice_advance_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,692 27 INFO lims_demo odoo.modules.loading: loading sale/wizard/sale_order_cancel_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,708 27 INFO lims_demo odoo.modules.loading: loading sale/wizard/sale_order_discount_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,722 27 INFO lims_demo odoo.modules.loading: loading sale/views/sale_order_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:13,950 27 INFO lims_demo odoo.modules.loading: loading sale/views/account_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,015 27 INFO lims_demo odoo.modules.loading: loading sale/views/crm_team_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,053 27 INFO lims_demo odoo.modules.loading: loading sale/views/mail_activity_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,057 27 INFO lims_demo odoo.modules.loading: loading sale/views/mail_activity_plan_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,065 27 INFO lims_demo odoo.modules.loading: loading sale/views/payment_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,094 27 INFO lims_demo odoo.modules.loading: loading sale/views/product_document_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,122 27 INFO lims_demo odoo.modules.loading: loading sale/views/product_packaging_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,142 27 INFO lims_demo odoo.modules.loading: loading sale/views/product_template_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,159 27 INFO lims_demo odoo.modules.loading: loading sale/views/product_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,247 27 INFO lims_demo odoo.modules.loading: loading sale/views/res_partner_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,340 27 INFO lims_demo odoo.modules.loading: loading sale/views/sale_order_line_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,368 27 INFO lims_demo odoo.modules.loading: loading sale/views/sale_portal_templates.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,424 27 INFO lims_demo odoo.modules.loading: loading sale/views/utm_campaign_views.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,442 27 INFO lims_demo odoo.modules.loading: loading sale/views/sale_menus.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,664 27 INFO lims_demo odoo.modules.loading: Module sale: loading demo +2025-07-15 14:38:21.934 | 2025-07-15 20:38:14,664 27 INFO lims_demo odoo.modules.loading: loading sale/data/product_demo.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:15,227 27 INFO lims_demo odoo.modules.loading: loading sale/data/sale_demo.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:17,189 27 INFO lims_demo odoo.addons.base.models.ir_module: module sale: loading translation file /usr/lib/python3/dist-packages/odoo/addons/sale/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:17,190 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/sale/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:17,955 27 INFO lims_demo odoo.modules.loading: Module sale loaded in 9.46s, 4729 queries (+4730 other) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:17,955 27 INFO lims_demo odoo.modules.loading: Loading module spreadsheet_dashboard_stock_account (54/62) +2025-07-15 14:38:21.934 | 2025-07-15 20:38:18,158 27 INFO lims_demo odoo.modules.loading: loading spreadsheet_dashboard_stock_account/data/dashboards.xml +2025-07-15 14:38:21.934 | 2025-07-15 20:38:18,256 27 INFO lims_demo odoo.addons.base.models.ir_module: module spreadsheet_dashboard_stock_account: loading translation file /usr/lib/python3/dist-packages/odoo/addons/spreadsheet_dashboard_stock_account/i18n/es.po for language es_ES +2025-07-15 14:38:21.934 | 2025-07-15 20:38:18,257 27 INFO lims_demo odoo.tools.translate: loading base translation file /usr/lib/python3/dist-packages/odoo/addons/spreadsheet_dashboard_stock_account/i18n/es.po for language es_ES +2025-07-15 14:38:21.935 | 2025-07-15 20:38:18,281 27 INFO lims_demo odoo.modules.loading: Module spreadsheet_dashboard_stock_account loaded in 0.33s, 29 queries (+29 other) +2025-07-15 14:38:21.935 | 2025-07-15 20:38:18,281 27 INFO lims_demo odoo.modules.loading: Loading module lims_management (55/62) +2025-07-15 14:38:21.935 | 2025-07-15 20:38:18,374 27 WARNING lims_demo py.warnings: /usr/lib/python3/dist-packages/odoo/api.py:482: DeprecationWarning: The model odoo.addons.lims_management.models.analysis_parameter is not overriding the create method in batch +2025-07-15 14:38:21.936 | File "/usr/bin/odoo", line 8, in +2025-07-15 14:38:21.936 | odoo.cli.main() +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/cli/command.py", line 66, in main +2025-07-15 14:38:21.936 | o.run(args) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/cli/server.py", line 182, in run +2025-07-15 14:38:21.936 | main(args) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/cli/server.py", line 175, in main +2025-07-15 14:38:21.936 | rc = odoo.service.server.start(preload=preload, stop=stop) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 1457, in start +2025-07-15 14:38:21.936 | rc = server.run(preload, stop) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 622, in run +2025-07-15 14:38:21.936 | rc = preload_registries(preload) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 1361, in preload_registries +2025-07-15 14:38:21.936 | registry = Registry.new(dbname, update_module=update_module) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/decorator.py", line 232, in fun +2025-07-15 14:38:21.936 | return caller(func, *(extras + args), **kw) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 97, in locked +2025-07-15 14:38:21.936 | return func(inst, *args, **kwargs) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 129, in new +2025-07-15 14:38:21.936 | odoo.modules.load_modules(registry, force_demo, status, update_module) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 484, in load_modules +2025-07-15 14:38:21.936 | processed_modules += load_marked_modules(env, graph, +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 365, in load_marked_modules +2025-07-15 14:38:21.936 | loaded, processed = load_module_graph( +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 186, in load_module_graph +2025-07-15 14:38:21.936 | load_openerp_module(package.name) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/modules/module.py", line 384, in load_openerp_module +2025-07-15 14:38:21.936 | __import__(qualname) +2025-07-15 14:38:21.936 | File "/mnt/extra-addons/lims_management/__init__.py", line 3, in +2025-07-15 14:38:21.936 | from . import models +2025-07-15 14:38:21.936 | File "/mnt/extra-addons/lims_management/models/__init__.py", line 2, in +2025-07-15 14:38:21.936 | from . import analysis_parameter +2025-07-15 14:38:21.936 | File "/mnt/extra-addons/lims_management/models/analysis_parameter.py", line 6, in +2025-07-15 14:38:21.936 | class LimsAnalysisParameter(models.Model): +2025-07-15 14:38:21.936 | File "/mnt/extra-addons/lims_management/models/analysis_parameter.py", line 117, in LimsAnalysisParameter +2025-07-15 14:38:21.936 | @api.model +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/api.py", line 429, in model +2025-07-15 14:38:21.936 | return model_create_single(method) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/api.py", line 482, in model_create_single +2025-07-15 14:38:21.936 | warnings.warn( +2025-07-15 14:38:21.936 | +2025-07-15 14:38:21.936 | 2025-07-15 20:38:18,399 27 WARNING lims_demo py.warnings: /usr/lib/python3/dist-packages/odoo/api.py:482: DeprecationWarning: The model odoo.addons.lims_management.models.product_template_parameter is not overriding the create method in batch +2025-07-15 14:38:21.936 | File "/usr/bin/odoo", line 8, in +2025-07-15 14:38:21.936 | odoo.cli.main() +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/cli/command.py", line 66, in main +2025-07-15 14:38:21.936 | o.run(args) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/cli/server.py", line 182, in run +2025-07-15 14:38:21.936 | main(args) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/cli/server.py", line 175, in main +2025-07-15 14:38:21.936 | rc = odoo.service.server.start(preload=preload, stop=stop) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 1457, in start +2025-07-15 14:38:21.936 | rc = server.run(preload, stop) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 622, in run +2025-07-15 14:38:21.936 | rc = preload_registries(preload) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 1361, in preload_registries +2025-07-15 14:38:21.936 | registry = Registry.new(dbname, update_module=update_module) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/decorator.py", line 232, in fun +2025-07-15 14:38:21.936 | return caller(func, *(extras + args), **kw) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 97, in locked +2025-07-15 14:38:21.936 | return func(inst, *args, **kwargs) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 129, in new +2025-07-15 14:38:21.936 | odoo.modules.load_modules(registry, force_demo, status, update_module) +2025-07-15 14:38:21.936 | File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 484, in load_modules +2025-07-15 14:38:21.936 | processed_modules += load_marked_modules(env, graph, +2025-07-15 14:38:21.937 | File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 365, in load_marked_modules +2025-07-15 14:38:21.937 | loaded, processed = load_module_graph( +2025-07-15 14:38:21.937 | File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 186, in load_module_graph +2025-07-15 14:38:21.937 | load_openerp_module(package.name) +2025-07-15 14:38:21.937 | File "/usr/lib/python3/dist-packages/odoo/modules/module.py", line 384, in load_openerp_module +2025-07-15 14:38:21.937 | __import__(qualname) +2025-07-15 14:38:21.937 | File "/mnt/extra-addons/lims_management/__init__.py", line 3, in +2025-07-15 14:38:21.937 | from . import models +2025-07-15 14:38:21.937 | File "/mnt/extra-addons/lims_management/models/__init__.py", line 3, in +2025-07-15 14:38:21.937 | from . import product_template_parameter +2025-07-15 14:38:21.937 | File "/mnt/extra-addons/lims_management/models/product_template_parameter.py", line 6, in +2025-07-15 14:38:21.937 | class ProductTemplateParameter(models.Model): +2025-07-15 14:38:21.937 | File "/mnt/extra-addons/lims_management/models/product_template_parameter.py", line 95, in ProductTemplateParameter +2025-07-15 14:38:21.937 | @api.model +2025-07-15 14:38:21.937 | File "/usr/lib/python3/dist-packages/odoo/api.py", line 429, in model +2025-07-15 14:38:21.937 | return model_create_single(method) +2025-07-15 14:38:21.937 | File "/usr/lib/python3/dist-packages/odoo/api.py", line 482, in model_create_single +2025-07-15 14:38:21.937 | warnings.warn( +2025-07-15 14:38:21.937 | +2025-07-15 14:38:21.937 | 2025-07-15 20:38:18,708 27 INFO lims_demo odoo.modules.registry: module lims_management: creating or updating database tables +2025-07-15 14:38:21.937 | 2025-07-15 20:38:18,842 27 INFO lims_demo odoo.models: Prepare computation of stock.lot.barcode +2025-07-15 14:38:21.937 | 2025-07-15 20:38:19,546 27 INFO lims_demo odoo.modules.loading: loading lims_management/security/lims_security.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:19,675 27 INFO lims_demo odoo.modules.loading: loading lims_management/security/ir.model.access.csv +2025-07-15 14:38:21.937 | 2025-07-15 20:38:19,715 27 INFO lims_demo odoo.modules.loading: loading lims_management/data/ir_sequence.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:19,729 27 INFO lims_demo odoo.modules.loading: loading lims_management/data/product_category.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:19,761 27 INFO lims_demo odoo.modules.loading: loading lims_management/data/sample_types.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:20,783 27 INFO lims_demo odoo.modules.loading: loading lims_management/data/lims_sequence.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:20,798 27 INFO lims_demo odoo.modules.loading: loading lims_management/views/partner_views.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:20,842 27 INFO lims_demo odoo.modules.loading: loading lims_management/views/analysis_views.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:21,000 27 INFO lims_demo odoo.modules.loading: loading lims_management/views/sale_order_views.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:21,040 27 INFO lims_demo odoo.modules.loading: loading lims_management/views/stock_lot_views.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:21,059 27 INFO lims_demo odoo.modules.loading: loading lims_management/views/menus.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:21,194 27 INFO lims_demo odoo.modules.loading: loading lims_management/views/lims_test_views.xml +2025-07-15 14:38:21.937 | 2025-07-15 20:38:21,221 27 WARNING lims_demo odoo.modules.loading: Transient module states were reset +2025-07-15 14:38:21.937 | 2025-07-15 20:38:21,223 27 ERROR lims_demo odoo.modules.registry: Failed to load registry +2025-07-15 14:38:21.937 | 2025-07-15 20:38:21,223 27 CRITICAL lims_demo odoo.service.server: Failed to initialize database `lims_demo`. +2025-07-15 14:38:21.937 | Traceback (most recent call last): +2025-07-15 14:38:21.937 | File "/usr/lib/python3/dist-packages/odoo/tools/cache.py", line 103, in lookup +2025-07-15 14:38:21.937 | r = d[key] +2025-07-15 14:38:21.937 | ~^^^^^ +2025-07-15 14:38:21.937 | File "/usr/lib/python3/dist-packages/decorator.py", line 232, in fun +2025-07-15 14:38:21.937 | return caller(func, *(extras + args), **kw) +2025-07-15 14:38:21.937 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.937 | File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 97, in locked +2025-07-15 14:38:21.937 | return func(inst, *args, **kwargs) +2025-07-15 14:38:21.937 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.937 | File "/usr/lib/python3/dist-packages/odoo/tools/lru.py", line 33, in __getitem__ +2025-07-15 14:38:21.937 | a = self.d[obj] +2025-07-15 14:38:21.937 | ~~~~~~^^^^^ +2025-07-15 14:38:21.937 | KeyError: ('ir.model.data', , 'lims_management.action_report_test_result') +2025-07-15 14:38:21.937 | +2025-07-15 14:38:21.937 | During handling of the above exception, another exception occurred: +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | Traceback (most recent call last): +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 544, in _tag_root +2025-07-15 14:38:21.938 | f(rec) +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 412, in _tag_record +2025-07-15 14:38:21.938 | f_val = _eval_xml(self, field, env) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 127, in _eval_xml +2025-07-15 14:38:21.938 | +_process("".join(etree.tostring(n, encoding='unicode') for n in node)) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 116, in _process +2025-07-15 14:38:21.938 | self.idref[id] = self.id_get(id) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 526, in id_get +2025-07-15 14:38:21.938 | res = self.model_id_get(id_str, raise_if_not_found) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 532, in model_id_get +2025-07-15 14:38:21.938 | return self.env['ir.model.data']._xmlid_to_res_model_res_id(id_str, raise_if_not_found=raise_if_not_found) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_model.py", line 2253, in _xmlid_to_res_model_res_id +2025-07-15 14:38:21.938 | return self._xmlid_lookup(xmlid) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/decorator.py", line 232, in fun +2025-07-15 14:38:21.938 | return caller(func, *(extras + args), **kw) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/cache.py", line 110, in lookup +2025-07-15 14:38:21.938 | value = d[key] = self.method(*args, **kwargs) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_model.py", line 2246, in _xmlid_lookup +2025-07-15 14:38:21.938 | raise ValueError('External ID not found in the system: %s' % xmlid) +2025-07-15 14:38:21.938 | ValueError: External ID not found in the system: lims_management.action_report_test_result +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | The above exception was the direct cause of the following exception: +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | Traceback (most recent call last): +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 1361, in preload_registries +2025-07-15 14:38:21.938 | registry = Registry.new(dbname, update_module=update_module) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/decorator.py", line 232, in fun +2025-07-15 14:38:21.938 | return caller(func, *(extras + args), **kw) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 97, in locked +2025-07-15 14:38:21.938 | return func(inst, *args, **kwargs) +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 129, in new +2025-07-15 14:38:21.938 | odoo.modules.load_modules(registry, force_demo, status, update_module) +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 484, in load_modules +2025-07-15 14:38:21.938 | processed_modules += load_marked_modules(env, graph, +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 365, in load_marked_modules +2025-07-15 14:38:21.938 | loaded, processed = load_module_graph( +2025-07-15 14:38:21.938 | ^^^^^^^^^^^^^^^^^^ +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 228, in load_module_graph +2025-07-15 14:38:21.938 | load_data(env, idref, mode, kind='data', package=package) +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 72, in load_data +2025-07-15 14:38:21.938 | tools.convert_file(env, package.name, filename, idref, mode, noupdate, kind) +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 615, in convert_file +2025-07-15 14:38:21.938 | convert_xml_import(env, module, fp, idref, mode, noupdate) +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 686, in convert_xml_import +2025-07-15 14:38:21.938 | obj.parse(doc.getroot()) +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 601, in parse +2025-07-15 14:38:21.938 | self._tag_root(de) +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 544, in _tag_root +2025-07-15 14:38:21.938 | f(rec) +2025-07-15 14:38:21.938 | File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 557, in _tag_root +2025-07-15 14:38:21.938 | raise ParseError('while parsing %s:%s, somewhere inside\n%s' % ( +2025-07-15 14:38:21.938 | odoo.tools.convert.ParseError: while parsing /mnt/extra-addons/lims_management/views/lims_test_views.xml:6, somewhere inside +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | lims.test.form +2025-07-15 14:38:21.938 | lims.test +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 |

+2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 |

+2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 |
+2025-07-15 14:38:21.938 | 2025-07-15 20:38:21,232 27 INFO lims_demo odoo.service.server: Initiating shutdown +2025-07-15 14:38:21.938 | 2025-07-15 20:38:21,232 27 INFO lims_demo odoo.service.server: Hit CTRL-C again or send a second signal to force the shutdown. +2025-07-15 14:38:21.938 | 2025-07-15 20:38:21,233 27 INFO lims_demo odoo.sql_db: ConnectionPool(read/write;used=0/count=0/max=64): Closed 1 connections +2025-07-15 14:38:21.938 | +2025-07-15 14:38:21.947 | Odoo falló con código de salida 255 \ No newline at end of file diff --git a/documents/plans/issue-51-implementation-plan.md b/documents/plans/issue-51-implementation-plan.md new file mode 100644 index 0000000..9705a7b --- /dev/null +++ b/documents/plans/issue-51-implementation-plan.md @@ -0,0 +1,173 @@ +# Plan de Implementación - Issue #51: Catálogo de Parámetros de Laboratorio + +## Objetivo +Implementar un catálogo maestro de parámetros de laboratorio con configuración por análisis y rangos de referencia flexibles basados en edad, sexo y otras condiciones del paciente. + +## Arquitectura Propuesta + +### Modelos Principales +1. **lims.analysis.parameter** - Catálogo maestro de parámetros +2. **product.template.parameter** - Asociación parámetro-análisis +3. **lims.parameter.range** - Rangos de referencia flexibles +4. **lims.result** (modificado) - Usar parameter_id en lugar de parameter_name + +## Fases de Implementación + +### Fase 1: Creación de Modelos Base (Tasks 1-4) +**Objetivo**: Establecer la estructura de datos fundamental + +#### Task 1: Crear modelo lims.analysis.parameter +- Crear archivo `lims_management/models/analysis_parameter.py` +- Definir campos: name, code, value_type, unit, selection_values, description, active +- Implementar constraints y validaciones +- Crear vistas (list, form) para gestión del catálogo +- Agregar menú de configuración +- Crear permisos de seguridad + +#### Task 2: Crear modelo product.template.parameter +- Crear archivo `lims_management/models/product_template_parameter.py` +- Definir relación entre product.template y lims.analysis.parameter +- Implementar campos: sequence, required, instructions +- Agregar constraint de unicidad +- Crear vista embebida en product.template +- Actualizar herencia de product.template + +#### Task 3: Crear modelo lims.parameter.range +- Crear archivo `lims_management/models/parameter_range.py` +- Implementar campos de condiciones: gender, age_min, age_max, pregnant +- Implementar campos de valores: normal_min/max, critical_min/max +- Crear método _compute_name() +- Agregar constraint de unicidad +- Crear vistas de configuración + +#### Task 4: Agregar método _compute_age() en res.partner +- Extender modelo res.partner +- Implementar cálculo de edad basado en birth_date +- Agregar campo is_pregnant (Boolean) +- Crear tests unitarios para el cálculo + +### Fase 2: Migración y Adaptación (Tasks 5-7) +**Objetivo**: Adaptar el sistema existente al nuevo modelo + +#### Task 5: Modificar modelo lims.result +- Cambiar parameter_name (Char) a parameter_id (Many2one) +- Mantener parameter_name como campo related (compatibilidad) +- Implementar _compute_applicable_range() +- Actualizar _compute_is_out_of_range() para usar rangos flexibles +- Crear script de migración de datos + +#### Task 6: Actualizar generación automática de resultados +- Modificar _generate_test_results() en lims.test +- Generar líneas basadas en product.template.parameter +- Respetar orden (sequence) y obligatoriedad +- Asignar tipos de dato correctos + +#### Task 7: Eliminar modelo obsoleto lims.analysis.range +- Remover archivo del modelo +- Eliminar referencias en product.template +- Actualizar vistas que lo referencian +- Limpiar datos de demo +- Actualizar __init__.py y __manifest__.py + +### Fase 3: Interfaz de Usuario (Tasks 8-10) +**Objetivo**: Crear interfaces intuitivas para configuración y uso + +#### Task 8: Crear vistas de configuración de parámetros +- Vista de catálogo de parámetros (búsqueda, filtros) +- Formulario de parámetro con smart buttons +- Vista de configuración de parámetros por análisis +- Vista de rangos con filtros por parámetro + +#### Task 9: Actualizar vistas de ingreso de resultados +- Adaptar formulario de lims.result +- Mostrar tipo de dato esperado +- Validación en tiempo real +- Indicadores visuales de valores fuera de rango +- Mostrar rango aplicable según paciente + +#### Task 10: Crear wizards de configuración masiva +- Wizard para copiar configuración entre análisis +- Wizard para importar parámetros desde CSV +- Wizard para aplicar rangos a múltiples parámetros + +### Fase 4: Datos y Validación (Tasks 11-13) +**Objetivo**: Poblar el sistema con datos útiles y validar funcionamiento + +#### Task 11: Crear datos de demostración +- Parámetros comunes de hematología +- Parámetros de química sanguínea +- Configuración para análisis existentes +- Rangos por edad/sexo realistas +- Casos de prueba especiales + +#### Task 12: Desarrollar tests automatizados +- Tests unitarios para modelos +- Tests de integración para flujos +- Tests de validación de rangos +- Tests de migración de datos +- Tests de rendimiento + +#### Task 13: Actualizar reportes +- Modificar report_test_result +- Incluir información del catálogo +- Mostrar rangos aplicables +- Resaltar valores anormales +- Agregar interpretación cuando esté disponible + +## Consideraciones Técnicas + +### Migración de Datos +- Script Python para migrar parameter_name existentes +- Crear parámetros automáticamente desde histórico +- Mantener compatibilidad durante transición +- Backup antes de migración + +### Performance +- Índices en campos de búsqueda frecuente +- Cache para rangos aplicables +- Lazy loading en vistas con muchos parámetros + +### Seguridad +- Solo administradores pueden crear/modificar catálogo +- Técnicos pueden ver pero no editar parámetros +- Logs de auditoría para cambios en rangos + +## Cronograma Estimado + +- **Fase 1**: 2-3 días (Modelos base y estructura) +- **Fase 2**: 2 días (Migración y adaptación) +- **Fase 3**: 2 días (Interfaces de usuario) +- **Fase 4**: 1-2 días (Datos y validación) + +**Total estimado**: 7-9 días de desarrollo + +## Riesgos y Mitigaciones + +1. **Riesgo**: Pérdida de datos durante migración + - **Mitigación**: Scripts de backup y rollback + +2. **Riesgo**: Resistencia al cambio de usuarios + - **Mitigación**: Mantener compatibilidad temporal, capacitación + +3. **Riesgo**: Complejidad en rangos múltiples + - **Mitigación**: UI intuitiva, valores por defecto sensatos + +## Criterios de Éxito + +- [ ] Todos los tests automatizados pasan +- [ ] Migración sin pérdida de datos +- [ ] Validación automática funcional +- [ ] Reportes muestran información correcta +- [ ] Performance aceptable (< 2s carga de resultados) +- [ ] Documentación actualizada + +## Próximos Pasos + +1. Revisar y aprobar este plan +2. Comenzar con Task 1: Crear modelo lims.analysis.parameter +3. Seguir el orden de las fases para mantener coherencia +4. Validar cada fase antes de continuar + +--- + +**Nota**: Este plan está sujeto a ajustes según se descubran nuevos requerimientos o complejidades durante la implementación. \ No newline at end of file diff --git a/init_odoo.py b/init_odoo.py index fdff0c5..46e197f 100644 --- a/init_odoo.py +++ b/init_odoo.py @@ -36,6 +36,7 @@ odoo_command = [ "-d", DB_NAME, "-i", MODULES_TO_INSTALL, "--load-language", "es_ES", + "--without-demo=", # Forzar carga de datos demo "--stop-after-init" ] @@ -99,34 +100,62 @@ EOF print("\nCreando datos de demostración de pruebas de laboratorio...") sys.stdout.flush() - if os.path.exists("/app/test/create_test_demo_data.py"): - with open("/app/test/create_test_demo_data.py", "r") as f: - test_script_content = f.read() + # Usar el nuevo script consolidado de datos demo + demo_script_path = "/app/test/create_demo_data.py" + if os.path.exists(demo_script_path): + with open(demo_script_path, "r") as f: + demo_script_content = f.read() - create_tests_command = f""" + create_demo_command = f""" odoo shell -c {ODOO_CONF} -d {DB_NAME} <<'EOF' -{test_script_content} +{demo_script_content} EOF """ result = subprocess.run( - create_tests_command, + create_demo_command, shell=True, capture_output=True, text=True, check=False ) - print("--- Create Test Demo Data stdout ---") + print("--- Create Demo Data stdout ---") print(result.stdout) - print("--- Create Test Demo Data stderr ---") + print("--- Create Demo Data stderr ---") print(result.stderr) sys.stdout.flush() if result.returncode == 0: - print("Datos de demostración de pruebas creados exitosamente.") + print("Datos de demostración creados exitosamente.") else: - print(f"Advertencia: Fallo al crear datos de demostración de pruebas (código {result.returncode})") + print(f"Advertencia: Fallo al crear datos de demostración (código {result.returncode})") + else: + # Fallback al script anterior si existe + old_script_path = "/app/test/create_test_demo_data.py" + if os.path.exists(old_script_path): + print("Usando script de demostración anterior...") + with open(old_script_path, "r") as f: + test_script_content = f.read() + + create_tests_command = f""" + odoo shell -c {ODOO_CONF} -d {DB_NAME} <<'EOF' +{test_script_content} +EOF + """ + + result = subprocess.run( + create_tests_command, + shell=True, + capture_output=True, + text=True, + check=False + ) + + if result.returncode == 0: + print("Datos de demostración de pruebas creados exitosamente.") + else: + print(f"Advertencia: Fallo al crear datos de demostración de pruebas (código {result.returncode})") # --- Actualizar logo de la empresa --- print("\nActualizando logo de la empresa...") diff --git a/lims_management/__manifest__.py b/lims_management/__manifest__.py index 3aecd8d..95f6fdc 100644 --- a/lims_management/__manifest__.py +++ b/lims_management/__manifest__.py @@ -34,13 +34,23 @@ 'views/sale_order_views.xml', 'views/stock_lot_views.xml', 'views/lims_test_views.xml', + 'views/lims_result_views.xml', + 'views/lims_result_bulk_entry_views.xml', 'views/res_config_settings_views.xml', + 'views/product_template_parameter_views.xml', + 'views/parameter_range_views.xml', + 'views/analysis_parameter_views.xml', + 'views/product_template_parameter_config_views.xml', + 'views/parameter_dashboard_views.xml', 'views/menus.xml', ], 'demo': [ 'demo/z_lims_demo.xml', 'demo/z_analysis_demo.xml', 'demo/z_sample_demo.xml', + 'demo/parameter_demo.xml', + 'demo/parameter_range_demo.xml', + 'demo/analysis_parameter_config_demo.xml', 'demo/z_automatic_generation_demo.xml', ], 'installable': True, diff --git a/lims_management/demo/analysis_parameter_config_demo.xml b/lims_management/demo/analysis_parameter_config_demo.xml new file mode 100644 index 0000000..b61b03a --- /dev/null +++ b/lims_management/demo/analysis_parameter_config_demo.xml @@ -0,0 +1,363 @@ + + + + + + + + 10 + True + + + + + + 20 + True + + + + + + 30 + True + + + + + + 40 + True + + + + + + 50 + True + + + + + + 60 + True + + + + + + 70 + True + + + + + + + 10 + True + + + + + + 20 + True + + + + + + 30 + True + + + + + + 40 + True + + + + + + + 10 + True + + + + + + + 10 + True + + + + + + 20 + False + Completar solo si el cultivo es positivo + + + + + + 30 + False + Completar solo si el cultivo es positivo. Formato: >100,000 UFC/mL + + + + + + + 10 + True + + + + + + 20 + True + + + + + + + 10 + True + + + + + + 20 + False + + + + + + + 10 + True + + + + + + 20 + False + + + + + + + Química Sanguínea Básica + True + chemistry + + service + + + + 3.0 + + Panel básico de química sanguínea que incluye glucosa, creatinina, urea, ALT y AST. + + + + + + + + 10 + True + + + + + + 20 + True + + + + + + 30 + True + + + + + + 40 + True + + + + + + 50 + True + + + + + Urianálisis Completo + True + other + + service + + + + 10.0 + + Examen completo de orina que incluye examen físico, químico y microscópico del sedimento. + + + + + + + + 10 + True + + + + + + 20 + True + + + + + + 30 + True + + + + + + 40 + True + + + + + + 50 + True + + + + + + 60 + True + + + + + + 70 + True + + + + + + 80 + True + + + + + + 90 + True + + + + + Panel de Serología Básica + True + immunology + + service + + + + 5.0 + + Panel serológico que incluye HIV, Hepatitis B, Hepatitis C y VDRL. + + + + + + + + 10 + True + + + + + + 20 + True + + + + + + 30 + True + + + + + + 40 + True + + + + + Prueba de Embarazo en Sangre + True + immunology + + service + + + + 1.0 + + Detección cualitativa de Beta-HCG en sangre. + + + + + + + 10 + True + + + + \ No newline at end of file diff --git a/lims_management/demo/parameter_demo.xml b/lims_management/demo/parameter_demo.xml new file mode 100644 index 0000000..585a565 --- /dev/null +++ b/lims_management/demo/parameter_demo.xml @@ -0,0 +1,339 @@ + + + + + + + + HGB + Hemoglobina + numeric + g/dL + Concentración de hemoglobina en sangre + + + + + HCT + Hematocrito + numeric + % + Porcentaje del volumen de glóbulos rojos + + + + + RBC + Glóbulos Rojos + numeric + millones/µL + Recuento de eritrocitos + + + + + WBC + Glóbulos Blancos + numeric + mil/µL + Recuento de leucocitos + + + + + PLT + Plaquetas + numeric + mil/µL + Recuento de plaquetas + + + + + NEUT + Neutrófilos + numeric + % + Porcentaje de neutrófilos + + + + + LYMPH + Linfocitos + numeric + % + Porcentaje de linfocitos + + + + + + + GLU + Glucosa + numeric + mg/dL + Nivel de glucosa en sangre + + + + + CREA + Creatinina + numeric + mg/dL + Nivel de creatinina sérica + + + + + UREA + Urea + numeric + mg/dL + Nivel de urea en sangre + + + + + CHOL + Colesterol Total + numeric + mg/dL + Nivel de colesterol total + + + + + HDL + Colesterol HDL + numeric + mg/dL + Colesterol de alta densidad + + + + + LDL + Colesterol LDL + numeric + mg/dL + Colesterol de baja densidad + + + + + TRIG + Triglicéridos + numeric + mg/dL + Nivel de triglicéridos + + + + + ALT + Alanina Aminotransferasa (ALT) + numeric + U/L + Enzima hepática ALT + + + + + AST + Aspartato Aminotransferasa (AST) + numeric + U/L + Enzima hepática AST + + + + + + + U-COLOR + Color + selection + Amarillo claro,Amarillo,Amarillo oscuro,Ámbar,Rojizo,Marrón,Turbio + Color de la muestra de orina + + + + + U-ASP + Aspecto + selection + Transparente,Ligeramente turbio,Turbio,Muy turbio + Aspecto de la muestra de orina + + + + + U-PH + pH + numeric + unidades + pH de la orina + + + + + U-DENS + Densidad + numeric + g/mL + Densidad específica de la orina + + + + + U-PROT + Proteínas + selection + Negativo,Trazas,+,++,+++,++++ + Presencia de proteínas en orina + + + + + U-GLU + Glucosa + selection + Negativo,Trazas,+,++,+++,++++ + Presencia de glucosa en orina + + + + + U-SANG + Sangre + selection + Negativo,Trazas,+,++,+++ + Presencia de sangre en orina + + + + + U-LEU + Leucocitos + numeric + por campo + Leucocitos en sedimento urinario + + + + + U-BACT + Bacterias + selection + Escasas,Moderadas,Abundantes + Presencia de bacterias en orina + + + + + + + CULT + Resultado del Cultivo + selection + Negativo,Positivo + Resultado del cultivo microbiológico + + + + + MICRO + Microorganismo Aislado + text + Identificación del microorganismo + + + + + UFC + Recuento de Colonias + text + UFC/mL (Unidades Formadoras de Colonias) + + + + + + + TP + Tiempo de Protrombina + numeric + segundos + Tiempo de coagulación PT + + + + + INR + INR + numeric + ratio + Índice Internacional Normalizado + + + + + TTP + Tiempo de Tromboplastina Parcial + numeric + segundos + Tiempo de coagulación PTT + + + + + + + HIV + HIV 1/2 + selection + No Reactivo,Reactivo,Indeterminado + Anticuerpos anti-HIV + + + + + HBsAg + Antígeno de Superficie Hepatitis B + selection + No Reactivo,Reactivo,Indeterminado + HBsAg + + + + + HCV + Anticuerpos Hepatitis C + selection + No Reactivo,Reactivo,Indeterminado + Anti-HCV + + + + + VDRL + VDRL + selection + No Reactivo,Reactivo + Prueba de sífilis VDRL + + + + + HCG + Prueba de Embarazo + selection + Negativo,Positivo + Beta-HCG cualitativa + + + + \ No newline at end of file diff --git a/lims_management/demo/parameter_range_demo.xml b/lims_management/demo/parameter_range_demo.xml new file mode 100644 index 0000000..816d9c5 --- /dev/null +++ b/lims_management/demo/parameter_range_demo.xml @@ -0,0 +1,374 @@ + + + + + + + Hombre adulto + male + 18 + 99 + 13.5 + 17.5 + 7.0 + 20.0 + + + + + Mujer adulta + female + 18 + 99 + False + 12.0 + 15.5 + 7.0 + 20.0 + + + + + Mujer embarazada + female + 15 + 50 + True + 11.0 + 14.0 + 7.0 + 20.0 + + + + + Niños 2-12 años + both + 2 + 12 + 11.5 + 14.5 + 7.0 + 20.0 + + + + + + Hombre adulto + male + 18 + 99 + 41 + 53 + 20 + 60 + + + + + Mujer adulta + female + 18 + 99 + 36 + 46 + 20 + 60 + + + + + + Hombre adulto + male + 18 + 99 + 4.5 + 5.9 + + + + + Mujer adulta + female + 18 + 99 + 4.1 + 5.1 + + + + + + Adulto + both + 18 + 99 + 4.5 + 11.0 + 2.0 + 30.0 + + + + + Niño + both + 2 + 17 + 5.0 + 15.0 + 2.0 + 30.0 + + + + + + Todos + both + 0 + 99 + 150 + 400 + 50 + 1000 + + + + + + Adulto + both + 18 + 99 + 45 + 70 + + + + + + Adulto + both + 18 + 99 + 20 + 45 + + + + + + Ayunas + both + 0 + 99 + 70 + 100 + 40 + 500 + Valores normales en ayunas. Prediabetes: 100-125 mg/dL. Diabetes: ≥126 mg/dL + + + + + + Hombre adulto + male + 18 + 99 + 0.7 + 1.3 + 6.0 + + + + + Mujer adulta + female + 18 + 99 + 0.6 + 1.1 + 6.0 + + + + + + Adulto + both + 18 + 99 + 15 + 45 + 100 + + + + + + Adulto + both + 18 + 99 + 0 + 200 + Deseable: <200 mg/dL. Límite alto: 200-239 mg/dL. Alto: ≥240 mg/dL + + + + + + Hombre + male + 18 + 99 + 40 + 100 + + + + + Mujer + female + 18 + 99 + 50 + 100 + + + + + + Adulto + both + 18 + 99 + 0 + 100 + Óptimo: <100 mg/dL. Casi óptimo: 100-129 mg/dL. Límite alto: 130-159 mg/dL. Alto: 160-189 mg/dL. Muy alto: ≥190 mg/dL + + + + + + Adulto + both + 18 + 99 + 0 + 150 + 500 + Normal: <150 mg/dL. Límite alto: 150-199 mg/dL. Alto: 200-499 mg/dL. Muy alto: ≥500 mg/dL + + + + + + Hombre + male + 18 + 99 + 10 + 40 + 1000 + + + + + Mujer + female + 18 + 99 + 10 + 35 + 1000 + + + + + + Adulto + both + 18 + 99 + 10 + 40 + 1000 + + + + + + Normal + both + 0 + 99 + 4.5 + 8.0 + + + + + + Normal + both + 0 + 99 + 1.003 + 1.030 + + + + + + Normal + both + 0 + 99 + 0 + 5 + + + + + + Normal + both + 0 + 99 + 11 + 13.5 + 9 + 30 + + + + + + Sin anticoagulación + both + 0 + 99 + 0.8 + 1.2 + + + + + + Normal + both + 0 + 99 + 25 + 35 + 20 + 70 + + + + \ No newline at end of file diff --git a/lims_management/demo/z_analysis_demo.xml b/lims_management/demo/z_analysis_demo.xml index 2dbe6ca..0117a16 100644 --- a/lims_management/demo/z_analysis_demo.xml +++ b/lims_management/demo/z_analysis_demo.xml @@ -19,25 +19,6 @@ - - - - male - 18 - 99 - 4.5 - 5.9 - millones/µL - - - - female - 18 - 99 - 4.0 - 5.2 - millones/µL - @@ -55,21 +36,6 @@ - - - - 0 - 200 - mg/dL - - - - - - 0 - 100 - mg/dL - diff --git a/lims_management/models/__init__.py b/lims_management/models/__init__.py index 78eb9f2..8e58433 100644 --- a/lims_management/models/__init__.py +++ b/lims_management/models/__init__.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- -from . import analysis_range +from . import analysis_parameter +from . import product_template_parameter +from . import parameter_range from . import product from . import partner from . import sale_order diff --git a/lims_management/models/__pycache__/__init__.cpython-312.pyc b/lims_management/models/__pycache__/__init__.cpython-312.pyc index a1e9030..4830c5f 100644 Binary files a/lims_management/models/__pycache__/__init__.cpython-312.pyc and b/lims_management/models/__pycache__/__init__.cpython-312.pyc differ diff --git a/lims_management/models/__pycache__/partner.cpython-312.pyc b/lims_management/models/__pycache__/partner.cpython-312.pyc index cb379f7..0ba6f10 100644 Binary files a/lims_management/models/__pycache__/partner.cpython-312.pyc and b/lims_management/models/__pycache__/partner.cpython-312.pyc differ diff --git a/lims_management/models/__pycache__/product.cpython-312.pyc b/lims_management/models/__pycache__/product.cpython-312.pyc index a2b65f2..a8b31aa 100644 Binary files a/lims_management/models/__pycache__/product.cpython-312.pyc and b/lims_management/models/__pycache__/product.cpython-312.pyc differ diff --git a/lims_management/models/analysis_parameter.py b/lims_management/models/analysis_parameter.py new file mode 100644 index 0000000..d30620c --- /dev/null +++ b/lims_management/models/analysis_parameter.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields, api +from odoo.exceptions import ValidationError + + +class LimsAnalysisParameter(models.Model): + _name = 'lims.analysis.parameter' + _description = 'Catálogo de Parámetros de Laboratorio' + _order = 'name' + _rec_name = 'name' + + name = fields.Char( + string='Nombre', + required=True, + help='Nombre descriptivo del parámetro (ej: Hemoglobina)' + ) + + code = fields.Char( + string='Código', + required=True, + help='Código único del parámetro (ej: HGB)' + ) + + value_type = fields.Selection([ + ('numeric', 'Numérico'), + ('text', 'Texto'), + ('boolean', 'Sí/No'), + ('selection', 'Selección') + ], + string='Tipo de Valor', + required=True, + default='numeric', + help='Tipo de dato que acepta este parámetro' + ) + + unit = fields.Char( + string='Unidad de Medida', + help='Unidad de medida del parámetro (ej: g/dL, mg/dL, %)' + ) + + selection_values = fields.Text( + string='Valores de Selección', + help='Para tipo "Selección", ingrese los valores posibles separados por comas' + ) + + description = fields.Text( + string='Descripción', + help='Descripción detallada del parámetro y su significado clínico' + ) + + active = fields.Boolean( + string='Activo', + default=True, + help='Si está desmarcado, el parámetro no estará disponible para nuevas configuraciones' + ) + + category_id = fields.Many2one( + 'product.category', + string='Categoría', + domain="[('parent_id.name', '=', 'Análisis de Laboratorio')]", + help='Categoría del parámetro para agrupar en reportes' + ) + + # Relaciones + template_parameter_ids = fields.One2many( + 'product.template.parameter', + 'parameter_id', + string='Análisis que usan este parámetro' + ) + + range_ids = fields.One2many( + 'lims.parameter.range', + 'parameter_id', + string='Rangos de Referencia' + ) + + # Campos computados + analysis_count = fields.Integer( + string='Cantidad de Análisis', + compute='_compute_analysis_count', + store=True + ) + + @api.depends('template_parameter_ids') + def _compute_analysis_count(self): + for record in self: + record.analysis_count = len(record.template_parameter_ids) + + @api.constrains('code') + def _check_code_unique(self): + for record in self: + if self.search_count([ + ('code', '=', record.code), + ('id', '!=', record.id) + ]) > 0: + raise ValidationError(f'El código "{record.code}" ya existe. Los códigos deben ser únicos.') + + @api.constrains('value_type', 'selection_values') + def _check_selection_values(self): + for record in self: + if record.value_type == 'selection' and not record.selection_values: + raise ValidationError('Debe especificar los valores de selección para parámetros de tipo "Selección".') + + @api.constrains('value_type', 'unit') + def _check_numeric_unit(self): + for record in self: + if record.value_type == 'numeric' and not record.unit: + raise ValidationError('Los parámetros numéricos deben tener una unidad de medida.') + + def get_selection_list(self): + """Devuelve la lista de valores de selección como una lista de Python""" + self.ensure_one() + if self.value_type == 'selection' and self.selection_values: + return [val.strip() for val in self.selection_values.split(',') if val.strip()] + return [] + + @api.model + def create(self, vals): + # Convertir código a mayúsculas + if 'code' in vals: + vals['code'] = vals['code'].upper() + return super(LimsAnalysisParameter, self).create(vals) + + def write(self, vals): + # Convertir código a mayúsculas + if 'code' in vals: + vals['code'] = vals['code'].upper() + return super(LimsAnalysisParameter, self).write(vals) + + def name_get(self): + result = [] + for record in self: + name = f"[{record.code}] {record.name}" + if record.unit: + name += f" ({record.unit})" + result.append((record.id, name)) + return result + + @api.model + def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None): + args = args or [] + if name: + args = ['|', ('code', operator, name), ('name', operator, name)] + args + return self._search(args, limit=limit, access_rights_uid=name_get_uid) \ No newline at end of file diff --git a/lims_management/models/analysis_range.py b/lims_management/models/analysis_range.py deleted file mode 100644 index c527226..0000000 --- a/lims_management/models/analysis_range.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -from odoo import models, fields - -class LimsAnalysisRange(models.Model): - _name = 'lims.analysis.range' - _description = 'Rangos de Referencia para Análisis Clínicos' - - analysis_id = fields.Many2one( - 'product.template', - string="Análisis", - required=True, - ondelete='cascade' - ) - gender = fields.Selection([ - ('male', 'Masculino'), - ('female', 'Femenino'), - ('both', 'Ambos') - ], string="Género", default='both') - - age_min = fields.Integer(string="Edad Mínima", default=0) - age_max = fields.Integer(string="Edad Máxima", default=99) - - min_value = fields.Float(string="Valor Mínimo") - max_value = fields.Float(string="Valor Máximo") - - unit_of_measure = fields.Char(string="Unidad de Medida") diff --git a/lims_management/models/lims_result.py b/lims_management/models/lims_result.py index a123c25..572c3f8 100644 --- a/lims_management/models/lims_result.py +++ b/lims_management/models/lims_result.py @@ -25,10 +25,27 @@ class LimsResult(models.Model): ondelete='cascade' ) - # Por ahora, estos campos básicos - parameter_name = fields.Char( + # Cambio de parameter_name a parameter_id + parameter_id = fields.Many2one( + 'lims.analysis.parameter', string='Parámetro', - required=True + required=True, + ondelete='restrict' + ) + + # Mantener parameter_name como campo related para compatibilidad + parameter_name = fields.Char( + string='Nombre del Parámetro', + related='parameter_id.name', + store=True, + readonly=True + ) + + parameter_code = fields.Char( + string='Código', + related='parameter_id.code', + store=True, + readonly=True ) sequence = fields.Integer( @@ -36,12 +53,21 @@ class LimsResult(models.Model): default=10 ) - # TODO: Implementar parameter_id cuando exista lims.test.parameter - # parameter_id = fields.Many2one( - # 'lims.test.parameter', - # string='Parámetro' - # ) + # Campos relacionados del parámetro + parameter_value_type = fields.Selection( + related='parameter_id.value_type', + string='Tipo de Valor', + store=True, + readonly=True + ) + parameter_unit = fields.Char( + related='parameter_id.unit', + string='Unidad', + readonly=True + ) + + # Valores del resultado value_numeric = fields.Float( string='Valor Numérico' ) @@ -50,33 +76,63 @@ class LimsResult(models.Model): string='Valor de Texto' ) - value_selection = fields.Selection( - [], # Por ahora vacío + value_selection = fields.Char( string='Valor de Selección' ) + value_boolean = fields.Boolean( + string='Valor Sí/No' + ) + + # Campo unificado para mostrar el valor + value_display = fields.Char( + string='Valor', + compute='_compute_value_display', + store=True + ) + + # Campos computados para validación de rangos + applicable_range_id = fields.Many2one( + 'lims.parameter.range', + compute='_compute_applicable_range', + string='Rango Aplicable', + store=False + ) + is_out_of_range = fields.Boolean( string='Fuera de Rango', compute='_compute_is_out_of_range', store=True ) + is_critical = fields.Boolean( + string='Valor Crítico', + compute='_compute_is_out_of_range', + store=True + ) + notes = fields.Text( string='Notas del Técnico' ) - # Campos para rangos normales (temporal) - normal_min = fields.Float( - string='Valor Normal Mínimo' + # Información del paciente (para cálculo de rangos) + patient_id = fields.Many2one( + related='test_id.patient_id', + string='Paciente', + store=True ) - normal_max = fields.Float( - string='Valor Normal Máximo' + test_date = fields.Datetime( + related='test_id.create_date', + string='Fecha de la Prueba', + store=True ) - unit = fields.Char( - string='Unidad' - ) + result_status = fields.Selection([ + ('normal', 'Normal'), + ('abnormal', 'Anormal'), + ('critical', 'Crítico') + ], string='Estado', compute='_compute_result_status', store=True) @api.depends('test_id', 'parameter_name') def _compute_display_name(self): @@ -87,38 +143,146 @@ class LimsResult(models.Model): else: record.display_name = record.parameter_name or _('Nuevo') - @api.depends('value_numeric', 'normal_min', 'normal_max') - def _compute_is_out_of_range(self): - """Determina si el valor está fuera del rango normal.""" + @api.depends('value_numeric', 'value_text', 'value_selection', 'value_boolean', 'parameter_value_type') + def _compute_value_display(self): + """Calcula el valor a mostrar según el tipo de dato.""" for record in self: - if record.value_numeric and (record.normal_min or record.normal_max): - if record.normal_min and record.value_numeric < record.normal_min: - record.is_out_of_range = True - elif record.normal_max and record.value_numeric > record.normal_max: - record.is_out_of_range = True + if record.parameter_value_type == 'numeric': + if record.value_numeric is not False: + record.value_display = f"{record.value_numeric} {record.parameter_unit or ''}" else: - record.is_out_of_range = False + record.value_display = '' + elif record.parameter_value_type == 'text': + record.value_display = record.value_text or '' + elif record.parameter_value_type == 'selection': + record.value_display = record.value_selection or '' + elif record.parameter_value_type == 'boolean': + record.value_display = 'Sí' if record.value_boolean else 'No' else: - record.is_out_of_range = False + record.value_display = '' - @api.constrains('value_numeric', 'value_text', 'value_selection') - def _check_single_value_type(self): - """Asegura que solo un tipo de valor esté lleno.""" + @api.depends('parameter_id', 'patient_id', 'test_date') + def _compute_applicable_range(self): + """Determina el rango de referencia aplicable según el paciente.""" for record in self: - filled_values = 0 - if record.value_numeric: - filled_values += 1 - if record.value_text: - filled_values += 1 - if record.value_selection: - filled_values += 1 + if not record.parameter_id or not record.patient_id: + record.applicable_range_id = False + continue - if filled_values > 1: + # Calcular edad del paciente en la fecha del test + if record.test_date: + age = record.patient_id.get_age_at_date(record.test_date.date()) + else: + age = record.patient_id.age + + # Buscar rango más específico + domain = [ + ('parameter_id', '=', record.parameter_id.id), + ('age_min', '<=', age), + ('age_max', '>=', age), + '|', + ('gender', '=', record.patient_id.gender), + ('gender', '=', 'both') + ] + + # Considerar embarazo si aplica + if record.patient_id.gender == 'female' and record.patient_id.is_pregnant: + domain.append(('pregnant', '=', True)) + + # Ordenar para obtener el más específico primero + ranges = self.env['lims.parameter.range'].search( + domain, + order='gender desc, pregnant desc', + limit=1 + ) + + record.applicable_range_id = ranges[0] if ranges else False + + @api.depends('value_numeric', 'applicable_range_id', 'parameter_value_type') + def _compute_is_out_of_range(self): + """Determina si el valor está fuera del rango normal y si es crítico.""" + for record in self: + record.is_out_of_range = False + record.is_critical = False + + # Solo aplica para valores numéricos + if record.parameter_value_type != 'numeric' or record.value_numeric is False: + continue + + if not record.applicable_range_id: + continue + + range_obj = record.applicable_range_id + status = range_obj.get_value_status(record.value_numeric) + + record.is_out_of_range = (status != 'normal') + record.is_critical = (status == 'critical') + + @api.depends('parameter_id', 'value_numeric', 'is_out_of_range', 'is_critical', 'parameter_value_type') + def _compute_result_status(self): + """Calcula el estado visual del resultado.""" + for record in self: + if record.parameter_value_type != 'numeric': + record.result_status = 'normal' + elif record.is_critical: + record.result_status = 'critical' + elif record.is_out_of_range: + record.result_status = 'abnormal' + else: + record.result_status = 'normal' + + @api.constrains('value_numeric', 'value_text', 'value_selection', 'value_boolean', 'parameter_value_type') + def _check_value_type(self): + """Asegura que el valor ingresado corresponda al tipo de parámetro.""" + for record in self: + if not record.parameter_id: + continue + + value_type = record.parameter_value_type + has_value = False + + if value_type == 'numeric': + has_value = record.value_numeric not in [False, 0.0] + if record.value_text or record.value_selection: + raise ValidationError( + _('Para parámetros numéricos solo se debe ingresar el valor numérico.') + ) + elif value_type == 'text': + has_value = bool(record.value_text) + if (record.value_numeric not in [False, 0.0]) or record.value_selection or record.value_boolean: + raise ValidationError( + _('Para parámetros de texto solo se debe ingresar el valor de texto.') + ) + elif value_type == 'selection': + has_value = bool(record.value_selection) + if (record.value_numeric not in [False, 0.0]) or record.value_text or record.value_boolean: + raise ValidationError( + _('Para parámetros de selección solo se debe elegir una opción.') + ) + elif value_type == 'boolean': + has_value = True # Boolean siempre tiene valor (True o False) + if (record.value_numeric not in [False, 0.0]) or record.value_text or record.value_selection: + raise ValidationError( + _('Para parámetros Sí/No solo se debe marcar el checkbox.') + ) + + # Solo requerir valor si la prueba no está en borrador + if not has_value and record.parameter_id and record.test_id.state != 'draft': raise ValidationError( - _('Solo se puede ingresar un tipo de valor (numérico, texto o selección) por resultado.') + _('Debe ingresar un valor para el resultado del parámetro %s.') % record.parameter_name ) + + @api.onchange('parameter_id') + def _onchange_parameter_id(self): + """Limpia los valores cuando se cambia el parámetro.""" + if self.parameter_id: + # Limpiar todos los valores + self.value_numeric = False + self.value_text = False + self.value_selection = False + self.value_boolean = False - if filled_values == 0: - raise ValidationError( - _('Debe ingresar al menos un valor para el resultado.') - ) \ No newline at end of file + # Si es selección, obtener las opciones + if self.parameter_value_type == 'selection' and self.parameter_id.selection_values: + # Esto se usará en las vistas para mostrar las opciones dinámicamente + pass \ No newline at end of file diff --git a/lims_management/models/lims_test.py b/lims_management/models/lims_test.py index a098d79..70d2de0 100644 --- a/lims_management/models/lims_test.py +++ b/lims_management/models/lims_test.py @@ -146,7 +146,46 @@ class LimsTest(models.Model): for vals in vals_list: if vals.get('name', 'Nuevo') == 'Nuevo': vals['name'] = self.env['ir.sequence'].next_by_code('lims.test') or 'Nuevo' - return super().create(vals_list) + + tests = super().create(vals_list) + # Generar resultados automáticamente + tests._generate_test_results() + return tests + + def _generate_test_results(self): + """Genera automáticamente las líneas de resultado basadas en los parámetros configurados del análisis.""" + for test in self: + if test.result_ids: + # Si ya tiene resultados, no generar nuevos + continue + + # Obtener el product.template del análisis + product_tmpl = test.product_id.product_tmpl_id + + # Buscar los parámetros configurados para este análisis + template_parameters = self.env['product.template.parameter'].search([ + ('product_tmpl_id', '=', product_tmpl.id) + ], order='sequence, id') + + # Crear una línea de resultado por cada parámetro + for param_config in template_parameters: + result_vals = { + 'test_id': test.id, + 'parameter_id': param_config.parameter_id.id, + 'sequence': param_config.sequence, + 'notes': param_config.instructions or '' + } + + # Inicializar valores según el tipo + if param_config.parameter_value_type == 'boolean': + result_vals['value_boolean'] = False + + self.env['lims.result'].create(result_vals) + + if template_parameters: + _logger.info(f"Generados {len(template_parameters)} resultados para la prueba {test.name}") + else: + _logger.warning(f"No se encontraron parámetros configurados para el análisis {product_tmpl.name}") def action_start_process(self): """Inicia el proceso de análisis.""" @@ -236,6 +275,28 @@ class LimsTest(models.Model): return True + def action_regenerate_results(self): + """Regenera los resultados basados en la configuración actual del análisis.""" + self.ensure_one() + if self.state not in ['draft', 'in_process']: + raise UserError(_('Solo se pueden regenerar resultados en pruebas en borrador o en proceso.')) + + # Confirmar con el usuario + if self.result_ids: + # En producción, aquí se mostraría un wizard de confirmación + # Por ahora, eliminamos los resultados existentes + self.result_ids.unlink() + + # Regenerar + self._generate_test_results() + + self.message_post( + body=_('Resultados regenerados por %s') % self.env.user.name, + subject=_('Resultados Regenerados') + ) + + return True + def action_draft(self): """Regresa a borrador.""" self.ensure_one() diff --git a/lims_management/models/parameter_range.py b/lims_management/models/parameter_range.py new file mode 100644 index 0000000..097a449 --- /dev/null +++ b/lims_management/models/parameter_range.py @@ -0,0 +1,214 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields, api +from odoo.exceptions import ValidationError + + +class LimsParameterRange(models.Model): + _name = 'lims.parameter.range' + _description = 'Rangos de Referencia por Parámetro' + _order = 'parameter_id, gender desc, age_min' + _rec_name = 'name' + + parameter_id = fields.Many2one( + 'lims.analysis.parameter', + string='Parámetro', + required=True, + ondelete='cascade', + help='Parámetro al que aplica este rango de referencia' + ) + + name = fields.Char( + string='Descripción', + compute='_compute_name', + store=True, + help='Descripción automática del rango' + ) + + # Condiciones + gender = fields.Selection([ + ('male', 'Masculino'), + ('female', 'Femenino'), + ('both', 'Ambos') + ], + string='Género', + default='both', + required=True, + help='Género al que aplica este rango' + ) + + age_min = fields.Integer( + string='Edad Mínima', + default=0, + help='Edad mínima en años (inclusive)' + ) + + age_max = fields.Integer( + string='Edad Máxima', + default=150, + help='Edad máxima en años (inclusive)' + ) + + pregnant = fields.Boolean( + string='Embarazada', + default=False, + help='Marcar si este rango es específico para mujeres embarazadas' + ) + + # Valores de referencia + normal_min = fields.Float( + string='Valor Normal Mínimo', + help='Límite inferior del rango normal' + ) + + normal_max = fields.Float( + string='Valor Normal Máximo', + help='Límite superior del rango normal' + ) + + critical_min = fields.Float( + string='Valor Crítico Mínimo', + help='Por debajo de este valor es crítico' + ) + + critical_max = fields.Float( + string='Valor Crítico Máximo', + help='Por encima de este valor es crítico' + ) + + # Información adicional + interpretation = fields.Text( + string='Interpretación', + help='Guía de interpretación clínica para este rango' + ) + + # Campos relacionados para facilitar búsquedas + parameter_name = fields.Char( + related='parameter_id.name', + string='Nombre del Parámetro', + store=True, + readonly=True + ) + + parameter_code = fields.Char( + related='parameter_id.code', + string='Código del Parámetro', + store=True, + readonly=True + ) + + parameter_unit = fields.Char( + related='parameter_id.unit', + string='Unidad', + readonly=True + ) + + @api.depends('parameter_id', 'gender', 'age_min', 'age_max', 'pregnant') + def _compute_name(self): + for record in self: + if not record.parameter_id: + record.name = 'Nuevo rango' + continue + + parts = [record.parameter_id.name] + + # Agregar género si no es ambos + if record.gender != 'both': + gender_name = dict(self._fields['gender'].selection).get(record.gender, '') + parts.append(gender_name) + + # Agregar rango de edad + if record.age_min == 0 and record.age_max == 150: + parts.append('Todas las edades') + else: + parts.append(f"{record.age_min}-{record.age_max} años") + + # Agregar indicador de embarazo + if record.pregnant: + parts.append('Embarazada') + + record.name = ' - '.join(parts) + + @api.constrains('age_min', 'age_max') + def _check_age_range(self): + for record in self: + if record.age_min < 0: + raise ValidationError('La edad mínima no puede ser negativa.') + if record.age_max < record.age_min: + raise ValidationError('La edad máxima debe ser mayor o igual a la edad mínima.') + if record.age_max > 150: + raise ValidationError('La edad máxima no puede ser mayor a 150 años.') + + @api.constrains('normal_min', 'normal_max') + def _check_normal_range(self): + for record in self: + if record.normal_min and record.normal_max and record.normal_min > record.normal_max: + raise ValidationError('El valor normal mínimo debe ser menor o igual al valor normal máximo.') + + @api.constrains('critical_min', 'critical_max', 'normal_min', 'normal_max') + def _check_critical_range(self): + for record in self: + # Validar que crítico mínimo sea menor que normal mínimo + if record.critical_min and record.normal_min and record.critical_min > record.normal_min: + raise ValidationError('El valor crítico mínimo debe ser menor o igual al valor normal mínimo.') + + # Validar que crítico máximo sea mayor que normal máximo + if record.critical_max and record.normal_max and record.critical_max < record.normal_max: + raise ValidationError('El valor crítico máximo debe ser mayor o igual al valor normal máximo.') + + @api.constrains('gender', 'pregnant') + def _check_pregnant_gender(self): + for record in self: + if record.pregnant and record.gender == 'male': + raise ValidationError('No se puede marcar "Embarazada" para rangos masculinos.') + + @api.constrains('parameter_id', 'gender', 'age_min', 'age_max', 'pregnant') + def _check_unique_range(self): + for record in self: + # Buscar rangos duplicados + domain = [ + ('parameter_id', '=', record.parameter_id.id), + ('gender', '=', record.gender), + ('age_min', '=', record.age_min), + ('age_max', '=', record.age_max), + ('pregnant', '=', record.pregnant), + ('id', '!=', record.id) + ] + + if self.search_count(domain) > 0: + raise ValidationError('Ya existe un rango con estas mismas condiciones para este parámetro.') + + def is_value_normal(self, value): + """Verifica si un valor está dentro del rango normal""" + self.ensure_one() + if not value or not self.normal_min or not self.normal_max: + return True + return self.normal_min <= value <= self.normal_max + + def is_value_critical(self, value): + """Verifica si un valor está en rango crítico""" + self.ensure_one() + if not value: + return False + + # Crítico por debajo + if self.critical_min and value < self.critical_min: + return True + + # Crítico por encima + if self.critical_max and value > self.critical_max: + return True + + return False + + def get_value_status(self, value): + """Devuelve el estado del valor: 'normal', 'abnormal', 'critical'""" + self.ensure_one() + if not value: + return 'normal' + + if self.is_value_critical(value): + return 'critical' + elif not self.is_value_normal(value): + return 'abnormal' + else: + return 'normal' \ No newline at end of file diff --git a/lims_management/models/partner.py b/lims_management/models/partner.py index f90bc73..b2f567d 100644 --- a/lims_management/models/partner.py +++ b/lims_management/models/partner.py @@ -1,5 +1,8 @@ # -*- coding: utf-8 -*- from odoo import models, fields, api +from odoo.exceptions import ValidationError +from datetime import date +from dateutil.relativedelta import relativedelta class ResPartner(models.Model): _inherit = 'res.partner' @@ -17,6 +20,19 @@ class ResPartner(models.Model): ('female', 'Femenino'), ('other', 'Otro') ], string="Género") + + # Nuevos campos para el cálculo de rangos + age = fields.Integer( + string="Edad", + compute='_compute_age', + store=False, + help="Edad calculada en años basada en la fecha de nacimiento" + ) + + is_pregnant = fields.Boolean( + string="Embarazada", + help="Marcar si la paciente está embarazada (solo aplica para género femenino)" + ) is_doctor = fields.Boolean(string="Es Médico") doctor_license = fields.Char(string="Licencia Médica", copy=False) @@ -25,6 +41,25 @@ class ResPartner(models.Model): ('patient_identifier_unique', 'unique(patient_identifier)', 'El identificador del paciente debe ser único.'), ('doctor_license_unique', 'unique(doctor_license)', 'La licencia médica debe ser única.') ] + + @api.depends('birthdate_date') + def _compute_age(self): + """Calcula la edad en años basada en la fecha de nacimiento""" + today = date.today() + for partner in self: + if partner.birthdate_date: + # Calcular diferencia usando relativedelta para precisión + delta = relativedelta(today, partner.birthdate_date) + partner.age = delta.years + else: + partner.age = 0 + + @api.constrains('is_pregnant', 'gender') + def _check_pregnant_gender(self): + """Valida que solo pacientes de género femenino puedan estar embarazadas""" + for partner in self: + if partner.is_pregnant and partner.gender != 'female': + raise ValidationError('Solo las pacientes de género femenino pueden estar marcadas como embarazadas.') @api.model_create_multi def create(self, vals_list): @@ -32,3 +67,25 @@ class ResPartner(models.Model): if vals.get('is_patient') and not vals.get('patient_identifier'): vals['patient_identifier'] = self.env['ir.sequence'].next_by_code('res.partner.patient_identifier') return super(ResPartner, self).create(vals_list) + + def get_age_at_date(self, target_date=None): + """ + Calcula la edad del paciente en una fecha específica. + + :param target_date: Fecha en la que calcular la edad. Si es None, usa la fecha actual. + :return: Edad en años + """ + self.ensure_one() + if not self.birthdate_date: + return 0 + + if not target_date: + target_date = date.today() + elif isinstance(target_date, str): + target_date = fields.Date.from_string(target_date) + + if target_date < self.birthdate_date: + return 0 + + delta = relativedelta(target_date, self.birthdate_date) + return delta.years diff --git a/lims_management/models/product.py b/lims_management/models/product.py index 0f23f1c..c0a643b 100644 --- a/lims_management/models/product.py +++ b/lims_management/models/product.py @@ -22,10 +22,11 @@ class ProductTemplate(models.Model): string="Especificaciones Técnicas" ) - value_range_ids = fields.One2many( - 'lims.analysis.range', - 'analysis_id', - string="Rangos de Referencia" + parameter_ids = fields.One2many( + 'product.template.parameter', + 'product_tmpl_id', + string="Parámetros del Análisis", + help="Parámetros que se medirán en este análisis" ) is_sample_type = fields.Boolean( diff --git a/lims_management/models/product_template_parameter.py b/lims_management/models/product_template_parameter.py new file mode 100644 index 0000000..2646998 --- /dev/null +++ b/lims_management/models/product_template_parameter.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields, api +from odoo.exceptions import ValidationError + + +class ProductTemplateParameter(models.Model): + _name = 'product.template.parameter' + _description = 'Parámetros por Análisis' + _order = 'product_tmpl_id, sequence, id' + _rec_name = 'parameter_id' + + product_tmpl_id = fields.Many2one( + 'product.template', + string='Análisis', + required=True, + ondelete='cascade', + domain=[('is_analysis', '=', True)], + help='Análisis al que pertenece este parámetro' + ) + + parameter_id = fields.Many2one( + 'lims.analysis.parameter', + string='Parámetro', + required=True, + ondelete='restrict', + help='Parámetro de laboratorio' + ) + + sequence = fields.Integer( + string='Secuencia', + default=10, + help='Orden en que aparecerá el parámetro en los resultados' + ) + + required = fields.Boolean( + string='Obligatorio', + default=True, + help='Si está marcado, este parámetro debe tener un valor en los resultados' + ) + + instructions = fields.Text( + string='Instrucciones específicas', + help='Instrucciones especiales para este parámetro en este análisis' + ) + + # Campos relacionados para facilitar búsquedas y vistas + parameter_name = fields.Char( + related='parameter_id.name', + string='Nombre del Parámetro', + store=True, + readonly=True + ) + + parameter_code = fields.Char( + related='parameter_id.code', + string='Código', + store=True, + readonly=True + ) + + parameter_value_type = fields.Selection( + related='parameter_id.value_type', + string='Tipo de Valor', + store=True, + readonly=True + ) + + parameter_unit = fields.Char( + related='parameter_id.unit', + string='Unidad', + readonly=True + ) + + _sql_constraints = [ + ('unique_param_per_analysis', + 'UNIQUE(product_tmpl_id, parameter_id)', + 'El parámetro ya está configurado para este análisis. Cada parámetro solo puede aparecer una vez por análisis.') + ] + + @api.constrains('sequence') + def _check_sequence(self): + for record in self: + if record.sequence < 0: + raise ValidationError('La secuencia debe ser un número positivo.') + + def name_get(self): + result = [] + for record in self: + name = f"{record.product_tmpl_id.name} - [{record.parameter_code}] {record.parameter_name}" + if record.parameter_unit: + name += f" ({record.parameter_unit})" + result.append((record.id, name)) + return result + + @api.model + def create(self, vals): + # Si no se especifica secuencia, asignar la siguiente disponible + if 'sequence' not in vals and 'product_tmpl_id' in vals: + max_sequence = self.search([ + ('product_tmpl_id', '=', vals['product_tmpl_id']) + ], order='sequence desc', limit=1).sequence + vals['sequence'] = (max_sequence or 0) + 10 + return super(ProductTemplateParameter, self).create(vals) + + def copy_data(self, default=None): + default = dict(default or {}) + # Al duplicar, incrementar la secuencia + default['sequence'] = self.sequence + 10 + return super(ProductTemplateParameter, self).copy_data(default) \ No newline at end of file diff --git a/lims_management/security/ir.model.access.csv b/lims_management/security/ir.model.access.csv index b2d9cb9..36ea507 100644 --- a/lims_management/security/ir.model.access.csv +++ b/lims_management/security/ir.model.access.csv @@ -1,5 +1,10 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_lims_analysis_range_user,lims.analysis.range.user,model_lims_analysis_range,base.group_user,1,1,1,1 +access_lims_analysis_parameter_user,lims.analysis.parameter.user,model_lims_analysis_parameter,base.group_user,1,0,0,0 +access_lims_analysis_parameter_manager,lims.analysis.parameter.manager,model_lims_analysis_parameter,group_lims_admin,1,1,1,1 +access_product_template_parameter_user,product.template.parameter.user,model_product_template_parameter,base.group_user,1,0,0,0 +access_product_template_parameter_manager,product.template.parameter.manager,model_product_template_parameter,group_lims_admin,1,1,1,1 +access_lims_parameter_range_user,lims.parameter.range.user,model_lims_parameter_range,base.group_user,1,0,0,0 +access_lims_parameter_range_manager,lims.parameter.range.manager,model_lims_parameter_range,group_lims_admin,1,1,1,1 access_sale_order_receptionist,sale.order.receptionist,sale.model_sale_order,group_lims_receptionist,1,1,1,0 access_stock_lot_user,stock.lot.user,stock.model_stock_lot,base.group_user,1,1,1,1 access_lims_test_user,lims.test.user,model_lims_test,base.group_user,1,1,1,1 diff --git a/lims_management/tests/README.md b/lims_management/tests/README.md new file mode 100644 index 0000000..c4d4048 --- /dev/null +++ b/lims_management/tests/README.md @@ -0,0 +1,80 @@ +# Tests del Módulo LIMS + +Este directorio contiene los tests automatizados para el módulo `lims_management`, específicamente para el sistema de catálogo de parámetros. + +## Estructura de Tests + +### 1. test_analysis_parameter.py +Tests para el modelo `lims.analysis.parameter`: +- Creación de parámetros con diferentes tipos de valores +- Validaciones de campos requeridos +- Prevención de códigos duplicados +- Relaciones con rangos y análisis + +### 2. test_parameter_range.py +Tests para el modelo `lims.parameter.range`: +- Creación de rangos de referencia +- Validaciones de valores mínimos y máximos +- Rangos específicos por género y edad +- Búsqueda de rangos aplicables según características del paciente + +### 3. test_result_parameter_integration.py +Tests de integración entre resultados y parámetros: +- Asignación de parámetros a resultados +- Selección automática de rangos aplicables +- Detección de valores fuera de rango y críticos +- Formato de visualización de resultados + +### 4. test_auto_result_generation.py +Tests para la generación automática de resultados: +- Creación automática al generar pruebas +- Herencia de secuencia desde la configuración +- Rendimiento en creación masiva + +## Ejecución de Tests + +### Usando Odoo Test Framework +```bash +# Desde el servidor Odoo +python3 -m odoo.cli.server -d lims_demo --test-enable --test-tags lims_management +``` + +### Usando el Script Simplificado +```bash +# Copiar script al contenedor +docker cp test/test_parameters_simple.py lims_odoo:/tmp/ + +# Ejecutar tests +docker-compose exec odoo python3 /tmp/test_parameters_simple.py +``` + +## Cobertura de Tests + +Los tests cubren: + +1. **Validaciones del Modelo** + - Campos requeridos según tipo de parámetro + - Restricciones de unicidad + - Validaciones de rangos + +2. **Lógica de Negocio** + - Generación automática de resultados + - Búsqueda de rangos aplicables + - Cálculo de estados (fuera de rango, crítico) + +3. **Integración** + - Flujo completo desde orden hasta resultados + - Compatibilidad con el sistema existente + +## Datos de Prueba + +Los tests utilizan: +- Parámetros de demostración del archivo `parameter_demo.xml` +- Rangos de referencia de `parameter_range_demo.xml` +- Análisis configurados en `analysis_parameter_config_demo.xml` + +## Notas Importantes + +- Los tests se ejecutan en transacciones que se revierten automáticamente +- No afectan los datos de producción o demostración +- Requieren que el módulo esté instalado con datos demo \ No newline at end of file diff --git a/lims_management/tests/__init__.py b/lims_management/tests/__init__.py new file mode 100644 index 0000000..0a66197 --- /dev/null +++ b/lims_management/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +from . import test_analysis_parameter +from . import test_parameter_range +from . import test_result_parameter_integration +from . import test_auto_result_generation \ No newline at end of file diff --git a/lims_management/tests/test_analysis_parameter.py b/lims_management/tests/test_analysis_parameter.py new file mode 100644 index 0000000..18bd63f --- /dev/null +++ b/lims_management/tests/test_analysis_parameter.py @@ -0,0 +1,175 @@ +# -*- coding: utf-8 -*- +""" +Tests para el modelo lims.analysis.parameter +""" +from odoo.tests import TransactionCase +from odoo.exceptions import ValidationError + + +class TestAnalysisParameter(TransactionCase): + """Tests para el catálogo de parámetros de análisis""" + + def setUp(self): + super().setUp() + self.Parameter = self.env['lims.analysis.parameter'] + + def test_create_numeric_parameter(self): + """Test crear parámetro numérico con validaciones""" + # Crear parámetro numérico válido + param = self.Parameter.create({ + 'code': 'TEST001', + 'name': 'Test Parameter', + 'value_type': 'numeric', + 'unit': 'mg/dL', + 'description': 'Test numeric parameter' + }) + + self.assertEqual(param.code, 'TEST001') + self.assertEqual(param.value_type, 'numeric') + self.assertEqual(param.unit, 'mg/dL') + + def test_numeric_parameter_requires_unit(self): + """Test que parámetros numéricos requieren unidad""" + with self.assertRaises(ValidationError) as e: + self.Parameter.create({ + 'code': 'TEST002', + 'name': 'Test Parameter No Unit', + 'value_type': 'numeric', + # Sin unit - debe fallar + }) + self.assertIn('unidad de medida', str(e.exception)) + + def test_create_selection_parameter(self): + """Test crear parámetro de selección con opciones""" + param = self.Parameter.create({ + 'code': 'TEST003', + 'name': 'Test Selection', + 'value_type': 'selection', + 'selection_values': 'Positivo,Negativo,Indeterminado' + }) + + self.assertEqual(param.value_type, 'selection') + self.assertEqual(param.selection_values, 'Positivo,Negativo,Indeterminado') + + def test_selection_parameter_requires_values(self): + """Test que parámetros de selección requieren valores""" + with self.assertRaises(ValidationError) as e: + self.Parameter.create({ + 'code': 'TEST004', + 'name': 'Test Selection No Values', + 'value_type': 'selection', + # Sin selection_values - debe fallar + }) + self.assertIn('valores de selección', str(e.exception)) + + def test_duplicate_code_not_allowed(self): + """Test que no se permiten códigos duplicados""" + # Crear primer parámetro + self.Parameter.create({ + 'code': 'DUP001', + 'name': 'Original Parameter', + 'value_type': 'text' + }) + + # Intentar crear duplicado + with self.assertRaises(ValidationError) as e: + self.Parameter.create({ + 'code': 'DUP001', + 'name': 'Duplicate Parameter', + 'value_type': 'text' + }) + self.assertIn('ya existe', str(e.exception)) + + def test_boolean_parameter(self): + """Test crear parámetro booleano""" + param = self.Parameter.create({ + 'code': 'BOOL001', + 'name': 'Test Boolean', + 'value_type': 'boolean', + 'description': 'Boolean parameter' + }) + + self.assertEqual(param.value_type, 'boolean') + self.assertFalse(param.unit) # Boolean no debe tener unidad + + def test_text_parameter(self): + """Test crear parámetro de texto""" + param = self.Parameter.create({ + 'code': 'TEXT001', + 'name': 'Test Text', + 'value_type': 'text', + 'description': 'Text parameter' + }) + + self.assertEqual(param.value_type, 'text') + self.assertFalse(param.unit) # Text no debe tener unidad + self.assertFalse(param.selection_values) # Text no debe tener valores de selección + + def test_parameter_name_display(self): + """Test nombre mostrado del parámetro""" + # Con unidad + param1 = self.Parameter.create({ + 'code': 'DISP001', + 'name': 'Glucosa', + 'value_type': 'numeric', + 'unit': 'mg/dL' + }) + self.assertEqual(param1.display_name, 'Glucosa (mg/dL)') + + # Sin unidad + param2 = self.Parameter.create({ + 'code': 'DISP002', + 'name': 'Cultivo', + 'value_type': 'text' + }) + self.assertEqual(param2.display_name, 'Cultivo') + + def test_parameter_ranges_relationship(self): + """Test relación con rangos de referencia""" + param = self.Parameter.create({ + 'code': 'RANGE001', + 'name': 'Test with Ranges', + 'value_type': 'numeric', + 'unit': 'U/L' + }) + + # Crear rango para este parámetro + range1 = self.env['lims.parameter.range'].create({ + 'parameter_id': param.id, + 'name': 'Adult Male', + 'gender': 'male', + 'age_min': 18, + 'age_max': 65, + 'normal_min': 10.0, + 'normal_max': 50.0 + }) + + self.assertEqual(len(param.range_ids), 1) + self.assertEqual(param.range_ids[0], range1) + + def test_parameter_analysis_relationship(self): + """Test relación con análisis a través de product.template.parameter""" + param = self.Parameter.create({ + 'code': 'ANAL001', + 'name': 'Test Analysis Link', + 'value_type': 'numeric', + 'unit': 'mmol/L' + }) + + # Crear producto análisis + analysis = self.env['product.template'].create({ + 'name': 'Test Analysis', + 'type': 'service', + 'is_analysis': True, + 'categ_id': self.env.ref('lims_management.product_category_clinical_analysis').id, + }) + + # Crear configuración parámetro-análisis + config = self.env['product.template.parameter'].create({ + 'product_tmpl_id': analysis.id, + 'parameter_id': param.id, + 'sequence': 10 + }) + + self.assertEqual(len(param.analysis_config_ids), 1) + self.assertEqual(param.analysis_config_ids[0], config) \ No newline at end of file diff --git a/lims_management/tests/test_auto_result_generation.py b/lims_management/tests/test_auto_result_generation.py new file mode 100644 index 0000000..d0ae8ed --- /dev/null +++ b/lims_management/tests/test_auto_result_generation.py @@ -0,0 +1,283 @@ +# -*- coding: utf-8 -*- +""" +Tests para la generación automática de resultados basada en parámetros +""" +from odoo.tests import TransactionCase +from datetime import date + + +class TestAutoResultGeneration(TransactionCase): + """Tests para la generación automática de resultados al crear pruebas""" + + def setUp(self): + super().setUp() + + # Modelos + self.Test = self.env['lims.test'] + self.Sample = self.env['stock.lot'] + self.Order = self.env['sale.order'] + self.Parameter = self.env['lims.analysis.parameter'] + self.TemplateParam = self.env['product.template.parameter'] + self.Product = self.env['product.template'] + self.Partner = self.env['res.partner'] + + # Crear paciente + self.patient = self.Partner.create({ + 'name': 'Patient for Auto Generation', + 'is_patient': True, + 'gender': 'male', + 'birth_date': date(1985, 3, 15) + }) + + # Crear doctor + self.doctor = self.Partner.create({ + 'name': 'Dr. Test', + 'is_doctor': True + }) + + # Crear parámetros + self.param1 = self.Parameter.create({ + 'code': 'AUTO1', + 'name': 'Parameter Auto 1', + 'value_type': 'numeric', + 'unit': 'mg/dL' + }) + + self.param2 = self.Parameter.create({ + 'code': 'AUTO2', + 'name': 'Parameter Auto 2', + 'value_type': 'selection', + 'selection_values': 'Normal,Anormal' + }) + + self.param3 = self.Parameter.create({ + 'code': 'AUTO3', + 'name': 'Parameter Auto 3', + 'value_type': 'text' + }) + + # Crear análisis con parámetros configurados + self.analysis_multi = self.Product.create({ + 'name': 'Multi-Parameter Analysis', + 'type': 'service', + 'is_analysis': True, + 'categ_id': self.env.ref('lims_management.product_category_clinical_analysis').id, + 'sample_type_id': self.env.ref('lims_management.sample_type_blood').id, + }) + + # Configurar parámetros en el análisis + self.TemplateParam.create({ + 'product_tmpl_id': self.analysis_multi.id, + 'parameter_id': self.param1.id, + 'sequence': 10 + }) + + self.TemplateParam.create({ + 'product_tmpl_id': self.analysis_multi.id, + 'parameter_id': self.param2.id, + 'sequence': 20 + }) + + self.TemplateParam.create({ + 'product_tmpl_id': self.analysis_multi.id, + 'parameter_id': self.param3.id, + 'sequence': 30 + }) + + # Crear análisis sin parámetros + self.analysis_empty = self.Product.create({ + 'name': 'Empty Analysis', + 'type': 'service', + 'is_analysis': True, + 'categ_id': self.env.ref('lims_management.product_category_clinical_analysis').id, + }) + + def test_auto_generate_results_on_test_creation(self): + """Test generación automática de resultados al crear una prueba""" + # Crear orden y muestra + order = self.Order.create({ + 'partner_id': self.patient.id, + 'doctor_id': self.doctor.id, + 'is_lab_request': True, + 'order_line': [(0, 0, { + 'product_id': self.analysis_multi.product_variant_id.id, + 'product_uom_qty': 1.0 + })] + }) + order.action_confirm() + + # Generar muestra + order.action_generate_samples() + sample = order.lab_sample_ids[0] + + # La prueba debe haberse creado automáticamente con los resultados + self.assertEqual(len(sample.test_ids), 1) + test = sample.test_ids[0] + + # Verificar que se generaron todos los resultados + self.assertEqual(len(test.result_ids), 3) + + # Verificar que cada resultado tiene el parámetro correcto + param_ids = test.result_ids.mapped('parameter_id') + self.assertIn(self.param1, param_ids) + self.assertIn(self.param2, param_ids) + self.assertIn(self.param3, param_ids) + + # Verificar orden de secuencia + results_sorted = test.result_ids.sorted('sequence') + self.assertEqual(results_sorted[0].parameter_id, self.param1) + self.assertEqual(results_sorted[1].parameter_id, self.param2) + self.assertEqual(results_sorted[2].parameter_id, self.param3) + + def test_no_results_for_analysis_without_parameters(self): + """Test que no se generan resultados para análisis sin parámetros""" + # Crear orden con análisis sin parámetros + order = self.Order.create({ + 'partner_id': self.patient.id, + 'is_lab_request': True, + 'order_line': [(0, 0, { + 'product_id': self.analysis_empty.product_variant_id.id, + 'product_uom_qty': 1.0 + })] + }) + order.action_confirm() + order.action_generate_samples() + + sample = order.lab_sample_ids[0] + test = sample.test_ids[0] + + # No debe haber resultados + self.assertEqual(len(test.result_ids), 0) + + def test_manual_test_creation_generates_results(self): + """Test generación de resultados al crear prueba manualmente""" + # Crear muestra manual + sample = self.Sample.create({ + 'name': 'SAMPLE-MANUAL-001', + 'is_lab_sample': True, + 'patient_id': self.patient.id, + 'sample_state': 'collected' + }) + + # Crear prueba manualmente + test = self.Test.create({ + 'sample_id': sample.id, + 'patient_id': self.patient.id, + 'product_id': self.analysis_multi.product_variant_id.id, + 'state': 'draft' + }) + + # Verificar generación automática + self.assertEqual(len(test.result_ids), 3) + + def test_results_inherit_correct_sequence(self): + """Test que los resultados heredan la secuencia correcta""" + # Crear análisis con secuencias específicas + analysis = self.Product.create({ + 'name': 'Sequence Test Analysis', + 'type': 'service', + 'is_analysis': True, + 'categ_id': self.env.ref('lims_management.product_category_clinical_analysis').id, + }) + + # Configurar con secuencias no consecutivas + self.TemplateParam.create({ + 'product_tmpl_id': analysis.id, + 'parameter_id': self.param1.id, + 'sequence': 100 + }) + + self.TemplateParam.create({ + 'product_tmpl_id': analysis.id, + 'parameter_id': self.param2.id, + 'sequence': 50 + }) + + self.TemplateParam.create({ + 'product_tmpl_id': analysis.id, + 'parameter_id': self.param3.id, + 'sequence': 75 + }) + + # Crear prueba + test = self.Test.create({ + 'patient_id': self.patient.id, + 'product_id': analysis.product_variant_id.id, + 'state': 'draft' + }) + + # Verificar orden: param2 (50), param3 (75), param1 (100) + results_sorted = test.result_ids.sorted('sequence') + self.assertEqual(results_sorted[0].parameter_id, self.param2) + self.assertEqual(results_sorted[0].sequence, 50) + self.assertEqual(results_sorted[1].parameter_id, self.param3) + self.assertEqual(results_sorted[1].sequence, 75) + self.assertEqual(results_sorted[2].parameter_id, self.param1) + self.assertEqual(results_sorted[2].sequence, 100) + + def test_bulk_test_creation_performance(self): + """Test rendimiento de creación masiva de pruebas""" + # Crear múltiples órdenes + orders = [] + for i in range(5): + order = self.Order.create({ + 'partner_id': self.patient.id, + 'is_lab_request': True, + 'order_line': [(0, 0, { + 'product_id': self.analysis_multi.product_variant_id.id, + 'product_uom_qty': 1.0 + })] + }) + order.action_confirm() + orders.append(order) + + # Generar muestras en lote + for order in orders: + order.action_generate_samples() + + # Verificar que todas las pruebas tienen resultados + total_tests = 0 + total_results = 0 + + for order in orders: + for sample in order.lab_sample_ids: + for test in sample.test_ids: + total_tests += 1 + total_results += len(test.result_ids) + + self.assertEqual(total_tests, 5) + self.assertEqual(total_results, 15) # 5 tests * 3 parameters each + + def test_result_generation_with_mixed_analyses(self): + """Test generación con análisis mixtos (con y sin parámetros)""" + # Crear orden con múltiples análisis + order = self.Order.create({ + 'partner_id': self.patient.id, + 'is_lab_request': True, + 'order_line': [ + (0, 0, { + 'product_id': self.analysis_multi.product_variant_id.id, + 'product_uom_qty': 1.0 + }), + (0, 0, { + 'product_id': self.analysis_empty.product_variant_id.id, + 'product_uom_qty': 1.0 + }) + ] + }) + order.action_confirm() + order.action_generate_samples() + + # Verificar resultados por prueba + tests_with_results = 0 + tests_without_results = 0 + + for sample in order.lab_sample_ids: + for test in sample.test_ids: + if test.result_ids: + tests_with_results += 1 + else: + tests_without_results += 1 + + self.assertEqual(tests_with_results, 1) # Solo analysis_multi + self.assertEqual(tests_without_results, 1) # Solo analysis_empty \ No newline at end of file diff --git a/lims_management/tests/test_parameter_range.py b/lims_management/tests/test_parameter_range.py new file mode 100644 index 0000000..97d7478 --- /dev/null +++ b/lims_management/tests/test_parameter_range.py @@ -0,0 +1,249 @@ +# -*- coding: utf-8 -*- +""" +Tests para el modelo lims.parameter.range +""" +from odoo.tests import TransactionCase +from odoo.exceptions import ValidationError + + +class TestParameterRange(TransactionCase): + """Tests para rangos de referencia de parámetros""" + + def setUp(self): + super().setUp() + self.Range = self.env['lims.parameter.range'] + self.Parameter = self.env['lims.analysis.parameter'] + + # Crear parámetro de prueba + self.test_param = self.Parameter.create({ + 'code': 'HGB_TEST', + 'name': 'Hemoglobina Test', + 'value_type': 'numeric', + 'unit': 'g/dL' + }) + + def test_create_basic_range(self): + """Test crear rango básico""" + range_obj = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Adulto General', + 'normal_min': 12.0, + 'normal_max': 16.0 + }) + + self.assertEqual(range_obj.parameter_id, self.test_param) + self.assertEqual(range_obj.normal_min, 12.0) + self.assertEqual(range_obj.normal_max, 16.0) + self.assertFalse(range_obj.gender) # Sin género específico + + def test_range_validation_min_max(self): + """Test validación que min < max""" + with self.assertRaises(ValidationError) as e: + self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Rango Inválido', + 'normal_min': 20.0, + 'normal_max': 10.0 # Max menor que min + }) + self.assertIn('menor o igual', str(e.exception)) + + def test_range_validation_age(self): + """Test validación de rangos de edad""" + with self.assertRaises(ValidationError) as e: + self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Rango Edad Inválida', + 'age_min': 65, + 'age_max': 18, # Max menor que min + 'normal_min': 12.0, + 'normal_max': 16.0 + }) + self.assertIn('edad', str(e.exception)) + + def test_critical_values_validation(self): + """Test validación de valores críticos""" + # Crítico min debe ser menor que normal min + with self.assertRaises(ValidationError) as e: + self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Crítico Inválido', + 'normal_min': 12.0, + 'normal_max': 16.0, + 'critical_min': 13.0 # Mayor que normal_min + }) + self.assertIn('crítico mínimo', str(e.exception)) + + # Crítico max debe ser mayor que normal max + with self.assertRaises(ValidationError) as e: + self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Crítico Inválido 2', + 'normal_min': 12.0, + 'normal_max': 16.0, + 'critical_max': 15.0 # Menor que normal_max + }) + self.assertIn('crítico máximo', str(e.exception)) + + def test_gender_specific_ranges(self): + """Test rangos específicos por género""" + # Rango para hombres + male_range = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Hombre Adulto', + 'gender': 'male', + 'age_min': 18, + 'age_max': 65, + 'normal_min': 14.0, + 'normal_max': 18.0 + }) + + # Rango para mujeres + female_range = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Mujer Adulta', + 'gender': 'female', + 'age_min': 18, + 'age_max': 65, + 'normal_min': 12.0, + 'normal_max': 16.0 + }) + + self.assertEqual(male_range.gender, 'male') + self.assertEqual(female_range.gender, 'female') + + def test_pregnancy_specific_range(self): + """Test rangos para embarazadas""" + pregnancy_range = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Embarazada', + 'gender': 'female', + 'pregnant': True, + 'age_min': 15, + 'age_max': 50, + 'normal_min': 11.0, + 'normal_max': 14.0 + }) + + self.assertTrue(pregnancy_range.pregnant) + self.assertEqual(pregnancy_range.gender, 'female') + + def test_find_applicable_range(self): + """Test encontrar rango aplicable según características del paciente""" + # Crear varios rangos + general_range = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'General', + 'normal_min': 12.0, + 'normal_max': 16.0 + }) + + male_adult_range = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Hombre Adulto', + 'gender': 'male', + 'age_min': 18, + 'age_max': 65, + 'normal_min': 14.0, + 'normal_max': 18.0 + }) + + child_range = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Niño', + 'age_max': 12, + 'normal_min': 11.0, + 'normal_max': 14.0 + }) + + pregnant_range = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Embarazada', + 'gender': 'female', + 'pregnant': True, + 'normal_min': 11.0, + 'normal_max': 14.0 + }) + + # Test para hombre adulto de 30 años + applicable = self.Range._find_applicable_range( + self.test_param.id, + gender='male', + age=30, + is_pregnant=False + ) + self.assertEqual(applicable, male_adult_range) + + # Test para niño de 8 años + applicable = self.Range._find_applicable_range( + self.test_param.id, + gender='male', + age=8, + is_pregnant=False + ) + self.assertEqual(applicable, child_range) + + # Test para mujer embarazada + applicable = self.Range._find_applicable_range( + self.test_param.id, + gender='female', + age=28, + is_pregnant=True + ) + self.assertEqual(applicable, pregnant_range) + + # Test para caso sin rango específico (mujer no embarazada) + applicable = self.Range._find_applicable_range( + self.test_param.id, + gender='female', + age=35, + is_pregnant=False + ) + self.assertEqual(applicable, general_range) # Debe devolver el rango general + + def test_range_overlap_allowed(self): + """Test que se permiten rangos superpuestos""" + # Rango 1: 0-18 años + range1 = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Pediátrico', + 'age_max': 18, + 'normal_min': 11.0, + 'normal_max': 15.0 + }) + + # Rango 2: 12-65 años (se superpone con rango 1) + range2 = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Adolescente-Adulto', + 'age_min': 12, + 'age_max': 65, + 'normal_min': 12.0, + 'normal_max': 16.0 + }) + + # Ambos rangos deben existir sin error + self.assertTrue(range1.exists()) + self.assertTrue(range2.exists()) + + def test_range_description_compute(self): + """Test generación automática de descripción""" + # Rango con todas las características + full_range = self.Range.create({ + 'parameter_id': self.test_param.id, + 'name': 'Completo', + 'gender': 'female', + 'age_min': 18, + 'age_max': 45, + 'pregnant': True, + 'normal_min': 11.0, + 'normal_max': 14.0, + 'critical_min': 8.0, + 'critical_max': 20.0 + }) + + description = full_range.description + self.assertIn('Mujer', description) + self.assertIn('18-45 años', description) + self.assertIn('Embarazada', description) + self.assertIn('11.0 - 14.0', description) + self.assertIn('Críticos', description) \ No newline at end of file diff --git a/lims_management/tests/test_result_parameter_integration.py b/lims_management/tests/test_result_parameter_integration.py new file mode 100644 index 0000000..15428ed --- /dev/null +++ b/lims_management/tests/test_result_parameter_integration.py @@ -0,0 +1,291 @@ +# -*- coding: utf-8 -*- +""" +Tests para la integración entre resultados y el catálogo de parámetros +""" +from odoo.tests import TransactionCase +from datetime import date + + +class TestResultParameterIntegration(TransactionCase): + """Tests para la integración de resultados con parámetros y rangos""" + + def setUp(self): + super().setUp() + + # Modelos + self.Result = self.env['lims.result'] + self.Test = self.env['lims.test'] + self.Parameter = self.env['lims.analysis.parameter'] + self.Range = self.env['lims.parameter.range'] + self.Partner = self.env['res.partner'] + self.Product = self.env['product.template'] + + # Crear paciente de prueba + self.patient_male = self.Partner.create({ + 'name': 'Test Patient Male', + 'is_patient': True, + 'gender': 'male', + 'birth_date': date(1990, 1, 1) # 34 años aprox + }) + + self.patient_female_pregnant = self.Partner.create({ + 'name': 'Test Patient Pregnant', + 'is_patient': True, + 'gender': 'female', + 'birth_date': date(1995, 6, 15), # 29 años aprox + 'is_pregnant': True + }) + + # Crear parámetro de prueba + self.param_glucose = self.Parameter.create({ + 'code': 'GLU_TEST', + 'name': 'Glucosa Test', + 'value_type': 'numeric', + 'unit': 'mg/dL' + }) + + # Crear rangos de referencia + self.range_general = self.Range.create({ + 'parameter_id': self.param_glucose.id, + 'name': 'General', + 'normal_min': 70.0, + 'normal_max': 100.0, + 'critical_min': 50.0, + 'critical_max': 200.0 + }) + + self.range_pregnant = self.Range.create({ + 'parameter_id': self.param_glucose.id, + 'name': 'Embarazada', + 'gender': 'female', + 'pregnant': True, + 'normal_min': 60.0, + 'normal_max': 95.0, + 'critical_min': 45.0, + 'critical_max': 180.0 + }) + + # Crear análisis de prueba + self.analysis = self.Product.create({ + 'name': 'Glucosa en Sangre Test', + 'type': 'service', + 'is_analysis': True, + 'categ_id': self.env.ref('lims_management.product_category_clinical_analysis').id, + }) + + # Configurar parámetro en el análisis + self.env['product.template.parameter'].create({ + 'product_tmpl_id': self.analysis.id, + 'parameter_id': self.param_glucose.id, + 'sequence': 10 + }) + + def test_result_parameter_assignment(self): + """Test asignación de parámetro a resultado""" + # Crear test + test = self.Test.create({ + 'patient_id': self.patient_male.id, + 'product_id': self.analysis.product_variant_id.id, + 'state': 'draft' + }) + + # Crear resultado + result = self.Result.create({ + 'test_id': test.id, + 'parameter_id': self.param_glucose.id, + 'value_numeric': 85.0 + }) + + self.assertEqual(result.parameter_id, self.param_glucose) + self.assertEqual(result.value_type, 'numeric') + self.assertEqual(result.unit, 'mg/dL') + + def test_applicable_range_selection(self): + """Test selección automática de rango aplicable""" + # Test para paciente masculino + test_male = self.Test.create({ + 'patient_id': self.patient_male.id, + 'product_id': self.analysis.product_variant_id.id, + 'state': 'draft' + }) + + result_male = self.Result.create({ + 'test_id': test_male.id, + 'parameter_id': self.param_glucose.id, + 'value_numeric': 85.0 + }) + + # Debe usar el rango general + self.assertEqual(result_male.applicable_range_id, self.range_general) + self.assertFalse(result_male.is_out_of_range) + self.assertFalse(result_male.is_critical) + + # Test para paciente embarazada + test_pregnant = self.Test.create({ + 'patient_id': self.patient_female_pregnant.id, + 'product_id': self.analysis.product_variant_id.id, + 'state': 'draft' + }) + + result_pregnant = self.Result.create({ + 'test_id': test_pregnant.id, + 'parameter_id': self.param_glucose.id, + 'value_numeric': 98.0 # Fuera de rango para embarazada + }) + + # Debe usar el rango para embarazadas + self.assertEqual(result_pregnant.applicable_range_id, self.range_pregnant) + self.assertTrue(result_pregnant.is_out_of_range) + self.assertFalse(result_pregnant.is_critical) + + def test_out_of_range_detection(self): + """Test detección de valores fuera de rango""" + test = self.Test.create({ + 'patient_id': self.patient_male.id, + 'product_id': self.analysis.product_variant_id.id, + 'state': 'draft' + }) + + # Valor normal + result_normal = self.Result.create({ + 'test_id': test.id, + 'parameter_id': self.param_glucose.id, + 'value_numeric': 85.0 + }) + self.assertFalse(result_normal.is_out_of_range) + self.assertFalse(result_normal.is_critical) + + # Valor alto pero no crítico + result_high = self.Result.create({ + 'test_id': test.id, + 'parameter_id': self.param_glucose.id, + 'value_numeric': 115.0 + }) + self.assertTrue(result_high.is_out_of_range) + self.assertFalse(result_high.is_critical) + + # Valor crítico alto + result_critical = self.Result.create({ + 'test_id': test.id, + 'parameter_id': self.param_glucose.id, + 'value_numeric': 250.0 + }) + self.assertTrue(result_critical.is_out_of_range) + self.assertTrue(result_critical.is_critical) + + def test_selection_parameter_result(self): + """Test resultado con parámetro de selección""" + # Crear parámetro de selección + param_culture = self.Parameter.create({ + 'code': 'CULT_TEST', + 'name': 'Cultivo Test', + 'value_type': 'selection', + 'selection_values': 'Negativo,Positivo' + }) + + test = self.Test.create({ + 'patient_id': self.patient_male.id, + 'product_id': self.analysis.product_variant_id.id, + 'state': 'draft' + }) + + result = self.Result.create({ + 'test_id': test.id, + 'parameter_id': param_culture.id, + 'value_selection': 'Positivo' + }) + + self.assertEqual(result.value_type, 'selection') + self.assertEqual(result.value_selection, 'Positivo') + self.assertFalse(result.applicable_range_id) # Selection no tiene rangos + + def test_text_parameter_result(self): + """Test resultado con parámetro de texto""" + param_observation = self.Parameter.create({ + 'code': 'OBS_TEST', + 'name': 'Observación Test', + 'value_type': 'text' + }) + + test = self.Test.create({ + 'patient_id': self.patient_male.id, + 'product_id': self.analysis.product_variant_id.id, + 'state': 'draft' + }) + + result = self.Result.create({ + 'test_id': test.id, + 'parameter_id': param_observation.id, + 'value_text': 'Muestra hemolizada levemente' + }) + + self.assertEqual(result.value_type, 'text') + self.assertEqual(result.value_text, 'Muestra hemolizada levemente') + + def test_boolean_parameter_result(self): + """Test resultado con parámetro booleano""" + param_pregnancy = self.Parameter.create({ + 'code': 'PREG_TEST', + 'name': 'Embarazo Test', + 'value_type': 'boolean' + }) + + test = self.Test.create({ + 'patient_id': self.patient_female_pregnant.id, + 'product_id': self.analysis.product_variant_id.id, + 'state': 'draft' + }) + + result = self.Result.create({ + 'test_id': test.id, + 'parameter_id': param_pregnancy.id, + 'value_boolean': True + }) + + self.assertEqual(result.value_type, 'boolean') + self.assertTrue(result.value_boolean) + + def test_formatted_value_display(self): + """Test formato de visualización de valores""" + test = self.Test.create({ + 'patient_id': self.patient_male.id, + 'product_id': self.analysis.product_variant_id.id, + 'state': 'draft' + }) + + # Valor numérico + result_numeric = self.Result.create({ + 'test_id': test.id, + 'parameter_id': self.param_glucose.id, + 'value_numeric': 85.5 + }) + self.assertEqual(result_numeric.formatted_value, '85.5 mg/dL') + + # Valor de selección + param_selection = self.Parameter.create({ + 'code': 'SEL_FORMAT', + 'name': 'Selection Format', + 'value_type': 'selection', + 'selection_values': 'Opción A,Opción B' + }) + + result_selection = self.Result.create({ + 'test_id': test.id, + 'parameter_id': param_selection.id, + 'value_selection': 'Opción A' + }) + self.assertEqual(result_selection.formatted_value, 'Opción A') + + # Valor booleano + param_bool = self.Parameter.create({ + 'code': 'BOOL_FORMAT', + 'name': 'Boolean Format', + 'value_type': 'boolean' + }) + + result_bool = self.Result.create({ + 'test_id': test.id, + 'parameter_id': param_bool.id, + 'value_boolean': True + }) + self.assertEqual(result_bool.formatted_value, 'Sí') \ No newline at end of file diff --git a/lims_management/views/analysis_parameter_views.xml b/lims_management/views/analysis_parameter_views.xml new file mode 100644 index 0000000..6488f1e --- /dev/null +++ b/lims_management/views/analysis_parameter_views.xml @@ -0,0 +1,136 @@ + + + + + lims.analysis.parameter.form + lims.analysis.parameter + +
+ +
+ + +
+ +
+

+ +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + lims.analysis.parameter.list + lims.analysis.parameter + + + + + + + + + + + + + + + lims.analysis.parameter.search + lims.analysis.parameter + + + + + + + + + + + + + + + + + + + + + + Parámetros de Análisis + lims.analysis.parameter + list,form + + {'search_default_active': 1} + +

+ Crear nuevo parámetro +

+

+ Los parámetros definen qué valores se pueden registrar en los análisis de laboratorio. + Cada parámetro tiene un tipo de dato, unidad de medida y rangos de referencia. +

+
+
+
\ No newline at end of file diff --git a/lims_management/views/analysis_views.xml b/lims_management/views/analysis_views.xml index 4c51171..87df2f7 100644 --- a/lims_management/views/analysis_views.xml +++ b/lims_management/views/analysis_views.xml @@ -1,22 +1,6 @@ - - - lims.analysis.range.tree - lims.analysis.range - - - - - - - - - - - - product.template.form.lims @@ -36,9 +20,21 @@ - - + + + + + + + + + + + + diff --git a/lims_management/views/lims_result_bulk_entry_views.xml b/lims_management/views/lims_result_bulk_entry_views.xml new file mode 100644 index 0000000..64cda97 --- /dev/null +++ b/lims_management/views/lims_result_bulk_entry_views.xml @@ -0,0 +1,162 @@ + + + + + lims.test.result.entry.form + lims.test + 20 + +
+
+ +
+ +
+

+ +

+

+ +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + Ingreso Rápido de Resultados + lims.test + list,form + + + [('state', 'in', ['in_process', 'result_entered'])] + {'search_default_my_tests': 1, 'search_default_in_process': 1} + +

+ No hay pruebas pendientes de resultados +

+

+ Las pruebas aparecerán aquí cuando estén listas para + el ingreso de resultados. +

+
+
+ + + + lims.result.pivot + lims.result + + + + + + + + + + + lims.result.graph + lims.result + + + + + + + + + + + Análisis de Resultados + lims.result + pivot,graph,list + +

+ Análisis estadístico de los resultados de laboratorio. +

+
+
+
\ No newline at end of file diff --git a/lims_management/views/lims_result_views.xml b/lims_management/views/lims_result_views.xml new file mode 100644 index 0000000..5f35ebe --- /dev/null +++ b/lims_management/views/lims_result_views.xml @@ -0,0 +1,148 @@ + + + + + lims.result.form + lims.result + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + + lims.result.list + lims.result + + + + + + + + + + + + + + + + + + + + + + lims.result.search + lims.result + + + + + + + + + + + + + + + + + + + + + + + + + + + Resultados de Análisis + lims.result + list,form + + {'search_default_out_of_range': 1} + +

+ No hay resultados registrados +

+

+ Los resultados se crean automáticamente al generar las pruebas + de laboratorio basándose en los parámetros configurados. +

+
+
+
\ No newline at end of file diff --git a/lims_management/views/lims_test_views.xml b/lims_management/views/lims_test_views.xml index 4588e15..d317dc6 100644 --- a/lims_management/views/lims_test_views.xml +++ b/lims_management/views/lims_test_views.xml @@ -24,6 +24,10 @@