4. Helpdesk y Soporte
helpdesk_halo_integration — Integración Helpdesk ↔ Halo ITSM
| Versión | 17.0.1.0.0 |
| Autor | ITConsulting |
| Dependencias | helpdesk, mail, hr_holidays |
| Complejidad | Muy Alta (integración API bidireccional) |
Descripción Funcional:
Integración bidireccional entre Odoo Helpdesk y Halo ITSM via API REST con autenticación OAuth2. Sincroniza tickets, acciones (respuestas), adjuntos y notificaciones. Incluye un gestor inteligente de notificaciones que verifica vacaciones del agente antes de notificar.
Descripción Técnica:
Modelos:
| Modelo | Tipo | Descripción |
|---|---|---|
halo.api.service |
AbstractModel | Servicio central OAuth2. Gestión de tokens, reintentos, cache de estados/outcomes (5 min) |
helpdesk.ticket |
Herencia | Campos Halo (URL, JSON, contador adjuntos, estado cerrado). Métodos de sincronización |
helpdesk.halo.mapping |
Normal | Mapeo bidireccional Odoo ↔ Halo: status, priority, type. Constraint unique_mapping |
helpdesk.halo.update |
Normal | Audit trail de sincronizaciones |
helpdesk.halo.attachment |
Normal | Adjuntos descargados desde Halo |
helpdesk.notification.manager |
AbstractModel | Gestor inteligente de notificaciones con check de vacaciones |
res.config.settings |
Transient | Configuración OAuth2: endpoint, client_id, secret, token, scope |
OAuth2 — Gestión de token:
_refresh_token_if_needed()
→ _regenerate_token_with_scope_analysis()
→ Prueba: scope='all', luego 'read write', luego None
→ _verify_token_access(): GET /api/tickets para validar
→ Almacena en ir.config_parameter (encriptado)
_make_authenticated_request(): Reintento automatico en 401/403
Sincronización de tickets:
action_sync_halo_data()
→ _sync_halo_actions(): Crea notas en chatter desde acciones Halo
→ _sync_halo_attachments(): Descarga adjuntos desde API Halo
→ _update_basic_fields_from_halo(): Actualiza status, priority via mapeo
→ _generate_halo_summary_html(): Resumen HTML con datos Halo
Wizard halo.action.wizard:
- Campos: ticket_id, action_description, action_type, halo_response (HTML)
- action_create_halo_action(): POST a /api/Tickets/{id}/Actions
Notificación inteligente:
check_and_notify_ticket()
→ _is_user_on_leave(): Consulta hr_holidays
→ Si de vacaciones: _send_fallback_notification() (email)
→ Si disponible: _send_discuss_notification() (canal ExtendedSupport_PPHE)
→ _send_webhook_notification(): Notificacion webhook externo
Datos:
- Canal Discuss: ExtendedSupport_PPHE
- Cron: DESACTIVADO (se usa webhook externo)
- Mapeos iniciales en halo_mapping_data.xml
- Template de email de notificación Halo
Configuración en Odoo (Ajustes):
- URL endpoint Halo
- Client ID / Client Secret
- Botones: "Autorizar", "Comprobar conexion", "Diagnosticar permisos"
itc_helpdesk_solution_tab — Pestana de Solución
| Versión | 17.0.1.0.3 |
| Autor | ITConsulting |
| Dependencias | base, helpdesk, portal |
Descripción Funcional:
Añade una pestana "Solucion" en tickets de helpdesk donde los agentes documentan la resolución. Visible en el portal del cliente.
Descripción Técnica:
- helpdesk.ticket (herencia): Campo solution (Html)
- Vista portal con solucion visible para el cliente
itc_ticket_user — Usuario Final del Ticket
| Versión | 17.0.1.0.2 |
| Autor | ITConsulting |
| Dependencias | helpdesk, contacts |
Descripción Funcional:
Añade el campo "Ticket User" al ticket de Helpdesk para identificar a la persona real que solicita el trabajo en la propiedad (hotel), distinta del cliente/empresa principal (partner_id) y del Property User (x_studio_property_user). El desplegable solo muestra contactos hijos del Property User seleccionado y permite crear un contacto nuevo al vuelo. El email del Ticket User es obligatorio: sin él no se puede guardar el ticket ni crear el contacto — es la garantía de que Extended Support siempre podrá responder al solicitante.
Descripción Técnica:
Modelo helpdesk.ticket (herencia):
ticket_user_id(Many2one →res.partner): campo principal. Dominio:[('parent_id', '=', x_studio_property_user), ('is_company', '=', False)]— solo personas hijas del Property User. Contexto:default_parent_id = x_studio_property_user,default_is_company = False,default_type = 'contact',from_ticket_user = True.@api.constrains('ticket_user_id')→_check_ticket_user_email: lanzaUserErrorsi el contacto seleccionado NO tiene email. Bloquea el guardado del ticket.
Modelo res.partner (herencia):
create()override: sicontext.get('from_ticket_user')y hayparent_idpero noemail→ValidationError. Impide crear contactos hijos sin email desde el "crear al vuelo" del campo.@api.constrains('email', 'parent_id')→_check_email_for_ticket_user_contacts: si el contacto es hijo de una empresa y está usado comoticket_user_iden al menos un ticket, no permite dejarlo sin email. Protege ante ediciones posteriores del contacto que romperían la comunicación con el solicitante.
Vistas (views/helpdesk_ticket_views.xml):
view_helpdesk_ticket_form_ticket_user: hereda de la vista de Studio y añade el campo trasx_studio_property_usercon dominio, contexto yoptions="{'no_quick_create': False, 'no_create_edit': False}".view_helpdesk_ticket_tree_ticket_user: añade el campo (invisible por defecto, activable desde el selector de columnas) al listado de tickets.
Fix multi-compañía (v17.0.1.0.2 — mayo 2026):
El dominio implícito que Odoo añade a partner_id por el check_company hace referencia a la variable company_id del formulario. Cuando esta variable NO existe en la vista renderizada (Studio la había ocultado), el autocomplete del campo Cliente revienta con Name 'company_id' is not defined y hace inutilizable la creación / edición de tickets.
El fix inyecta <field name="company_id" invisible="1"/> antes de partner_id, para que la variable esté disponible al evaluar el dominio. Y se aplica en DOS vistas core de Odoo (no en la vista Studio) para sobrevivir a cambios futuros de personalización:
view_helpdesk_ticket_form_company_fix→ heredahelpdesk.helpdesk_ticket_view_form(form estándar del backend).view_helpdesk_ticket_quick_create_company_fix→ heredahelpdesk.quick_create_ticket_form(form inline del "Nuevo" desde el kanban del cajetín, que reventaba de forma independiente).
Ruta de configuración: Servicio de atención → Tickets → cualquier ticket → campo Ticket User justo debajo de Property User.
Cómo verificar:
- Abre un ticket con Property User asignado — el desplegable de Ticket User solo muestra los contactos hijos de esa propiedad.
- Intenta seleccionar un contacto sin email → aparece el aviso "Email Required for Ticket User" y no permite guardar.
- Crea un contacto al vuelo desde el mismo campo dejando el email vacío →
ValidationErrorcon el mensaje "Email Required for New Contact". - Edita un contacto ya usado como Ticket User y vacía su email → bloqueo con el número de tickets en los que está siendo usado.
- Fix multi-compañía: haz clic en Nuevo desde el kanban de Helpdesk y en el form del ticket clica el campo Cliente → el autocomplete abre sin el error
company_id is not defined.
itc_mastel_helpdesk_pes_tech_support — Support Status (PES / Technical Support / Hotel Dashboard)
| Versión | 17.0.1.18.0 |
| Autor | ITConsulting |
| Dependencias | helpdesk, sale, contacts, mail |
| Ticket origen | #43073 |
| Complejidad | Alta (backend + OWL frontend + sincronización bidireccional) |
Descripción Funcional:
Da visibilidad inmediata al equipo de Soporte del Support Status contratado por cada cliente (PES OPERA, PES SIMPHONY, PES REVO, Technical Support, Hotel Dashboard…) y sus fechas de vigencia. Consta de cuatro piezas coordinadas:
- Tabla de fechas por cliente: en la ficha del contacto (pestaña Support Status), una fila por cada tipo contratado, con Fecha Inicio / Fecha Fin y un Estado calculado (Activo / Caducado / Pendiente / Pendiente de fechas / No contratado). Editable solo por Administración y por el grupo Studio Projects; el resto la ve en solo lectura. Cada alta / cambio / baja se registra en el chatter del cliente con usuario y fecha-hora.
- Pop-up OWL en el ticket: al ABRIR un ticket cuyo Property User tiene servicio especial contratado — o al ASIGNAR el Property User en un ticket ya abierto — se abre automáticamente un diálogo con los servicios contratados, sus fechas y estados, además de las Notas Internas del Property User. Un icono en la cabecera del ticket (junto al kanban_state) permite reabrirlo cuando se quiera.
- Aviso automático por email a Extended Support: al crearse un ticket o al asignar el Property User, si éste tiene servicio especial contratado se envía un correo bilingüe (español + inglés) al equipo Extended Support con los datos del ticket y las Notas Internas del Property User. Con protección anti-duplicado (
extended_support_notified). - Menú Contactos → Support Status: lista dedicada de una fila por cliente y tipo, con filtros por estado (Activo / Caducado / Pendiente / Pendiente de fechas / Con fechas) y agrupación por Tipo o Cliente. Solo lectura y exportable.
Regla de alcance del aviso: saltan pop-up y email para TODO Support Status (PES, Technical Support, OHIP…) EXCEPTO los productos de panel/BI (Hotel Dashboard, HD - POWER BI, cualquier HD - *), que solo se muestran informativos en el pop-up.
Regla de datos: el Support Status solo puede asignarse a contactos tipo Empresa; un constraint Python en res.partner rechaza el intento en personas físicas por ambas vías (tabla y tags).
Descripción Técnica:
Modelos:
| Modelo | Tipo | Descripción |
|---|---|---|
itc.partner.support.status |
Normal | Fila cliente × tipo. Espejo 1:1 del campo Studio x_studio_support_status_ (tags). Constraint SQL uniq_partner_support impide duplicar el mismo tipo en el mismo cliente. |
res.partner |
Herencia | One2many support_status_line_ids, sincronización bidireccional tabla↔tags, HTML del pop-up, constraint "solo empresas". |
helpdesk.ticket |
Herencia | Campos calculados (partner_has_special_support, partner_show_support_popup, partner_support_popup_html), envío del aviso, flag anti-duplicado. |
Campos clave en itc.partner.support.status:
partner_id(Many2one → res.partner, cascade)support_status_id(Many2one →x_support_status, cascade)date_start,date_end(Date)state(Selection calculado + buscable, NO almacenado): active / expired / pending / pending_dates / not_contracted. Sin campo almacenado ni cron: el_search_statetraduce cada valor a un dominio sobre las fechas evaluado contoday— siempre correcto.
Sincronización bidireccional tabla ↔ tag (evita bucles con skip_tag_sync / skip_line_sync):
Alta de fila → _sync_tag_to_partner(add=True) → añade tag al partner
Baja de fila → si es la última de ese tipo, quita el tag del partner
Cambio de tipo → añade el nuevo tag y, si el viejo queda huérfano, lo elimina
Cambio de tags en el partner (write x_studio_support_status_)
→ _sync_support_status_lines(): crea las filas que falten y
borra las que sobren, para dejar 1 fila por cada tag
Cálculo del pop-up y del email (helpdesk.ticket._compute_partner_support):
- Fuente del Support Status: SIEMPRE
x_studio_property_user. Sin fallback alpartner_idni a la Commercial Entity — si el Property User está vacío, no hay aviso. partner_has_special_support(dispara el email): solo Support Status en alcance (PES / Technical). Hotel Dashboard NO cuenta aunque tenga fechas.partner_show_support_popup(dispara el pop-up): Support Status en alcance O Notas Internas del Property User. Así el pop-up también sale si el hotel solo tiene notas relevantes.
Aviso a Extended Support (_notify_extended_support):
- Destinatario configurable vía
ir.config_parameter:itc_mastel_helpdesk_pes_tech_support.extended_support_email(por defecto[email protected]). - Se envía como
recipient_ids(creando el partner si no existe) y conemail_to=Falsepara NO duplicar la entrega. email_fromrobusto: intentacompany.email→user.email→[email protected].- Se dispara en
create()y también enwrite()cuando cambiax_studio_property_user(por eso funciona al asignar el Property User más tarde). El flagextended_support_notifiedevita reenvíos.
Frontend OWL (static/src/js/support_status_popup.js):
- Widget de campo
itc_support_status_popupregistrado sobre un booleano (partner_show_support_popup). - Usa
useEffectligado aresIdY apartner_show_support_popup: el pop-up salta al entrar al ticket y al pasar el booleano de false→true por asignar el Property User (el efecto se re-ejecuta sin recargar). - Renderiza el
partner_support_popup_htmlcalculado en servidor dentro de unDialogestándar (@web/core/dialog/dialog). - Se coloca arriba a la derecha en el form del ticket, junto al indicador de kanban_state (
views/helpdesk_ticket_views.xml).
Plantilla de email (data/mail_template.xml): plantilla bilingüe con Customer, Property User, Support Status contratados, Título del Ticket / Ticket Title, Ticket ID y Notas Internas. auto_delete=False para conservar el rastro.
- v17.0.1.18.0 (jul 2026, #43073): se añade la línea Título del Ticket (ES) / Ticket Title (EN) con
t-out="object.name", ubicada entre Support Status y Número de Ticket en ambos bloques idiomáticos, para que Extended Support vea el asunto del ticket directamente en el aviso sin necesidad de abrir Odoo.
Menú y vistas (views/support_status_views.xml): tree, form y search con filtros por estado y agrupación por Tipo / Cliente. Menú Contactos → Support Status (sequence=20).
Permisos: la edición de la tabla se concede en tiempo de instalación al grupo Studio Projects por nombre (no tiene xml_id) vía <function> que llama a _itc_setup_projects_access — crea el ir.model.access con xml_id propio para actualizaciones idempotentes.
Ruta de configuración:
- Fechas de un cliente: Contactos → ficha del hotel → pestaña Support Status.
- Listado global: Contactos → menú Support Status.
- Destinatario del aviso: Ajustes → Técnico → Parámetros del sistema →
itc_mastel_helpdesk_pes_tech_support.extended_support_email.
Cómo verificar:
- Abre la ficha de un hotel con PES contratado y ve a la pestaña Support Status: debe haber una fila por cada tag de Mastel Data. Como usuario Projects/Admin, edita una Fecha Fin y guarda → la modificación aparece en el chatter del cliente.
- Añade una fila nueva desde la pestaña → el tag correspondiente aparece automáticamente en el campo Studio
x_studio_support_status_. Elimínala → el tag desaparece si no queda ninguna otra fila del mismo tipo. - Crea un ticket nuevo cuyo Property User sea ese hotel → salta el pop-up con los servicios, sus fechas y estados. Al guardarlo, Extended Support recibe el correo bilingüe con los datos.
- Crea un ticket sin Property User y luego asígnalo → el pop-up salta al instante (sin recargar) y el email sale una sola vez.
- Menú Contactos → Support Status → filtra por "Caducado" y agrupa por Cliente para revisar renovaciones.
- Intenta añadir un tag de Support Status a un contacto tipo Individuo → error de validación "solo puede asignarse a contactos de tipo Empresa".
- Comprueba que el email recibido por Extended Support incluye la línea Título del Ticket / Ticket Title con el asunto del ticket, situada entre Support Status y Número de Ticket.
itc_mastel_pes_weekly_report — Informe PES Semanal
| Versión | 17.0.1.0.13 |
| Autor | ITConsulting |
| Dependencias | helpdesk, hr_timesheet, mail |
| Dependencia sistema | wkhtmltopdf (invocado por subprocess) |
Descripción Funcional:
Cron semanal (todos los lunes a las 11:00 CET / 09:00 UTC) que genera un PDF corporativo con las horas de Premium Extended Support consumidas la semana anterior y lo envía por correo al equipo Extended Support de Mastel. El informe incluye: KPIs de la semana (tickets PES, horas brutas, horas PES, Δ vs semana anterior), detalle línea a línea (fecha, ticket, cliente, agente, tipo de horas, multiplicador, horas), desglose por tipo de horas y comparativa mes a mes de los últimos tres meses con marca "parcial" cuando el mes en curso no se ha cerrado.
Descripción Técnica:
Modelo mastel.pes.weekly.report (AbstractModel):
_get_previous_week_range(today=None): devuelve(monday, sunday)de la semana anterior atoday. Siir.config_parameterpes_report.today_override(formatoYYYY-MM-DD) está fijado, se usa como "hoy" — permite regenerar informes de semanas históricas para validación sin desplegar código nuevo. Borrar el parámetro vuelve al comportamiento normal._get_pes_multiplier_ids(): busca entimesheet.time.multiplierpor prefijo de nombrePREMIUM CS%/PREMIUM ACS%— no hardcodea IDs._get_pes_lines(date_from, date_to):sudo()obligatorio (el cron corre como OdooBot). Dominio:timesheet_time_multiplier_id in [PES ids] AND date entre from y to. Ordenado por fecha, id._build_report_context(): calcula filas del detalle, totales de la semana, agregación por tipo de horas (consumption_agg), Δ vs semana anterior y llama a_build_monthly_comparison._build_monthly_comparison(ref_date): recorre los 3 meses hastaref_date, marca el último como "parcial" siend < month_end, calcula tickets distintos, horas brutas, horas PES y Δ vs mes anterior._render_html(ctx): construye HTML A4 apaisado con CSS inline (colores oro#CBB473, negro corporativo). Logo Mastel embebido como data URI base64 desdestatic/src/img/mastel_logo.png._html_to_pdf(html): escribe HTML a fichero temporal e invocawkhtmltopdfvíasubprocesscon flags de landscape A4 y márgenes 14/10/10/30mm. Timeout 60s. Devuelve bytes del PDF._cron_send_weekly_report(): entrypoint del cron. Creair.attachmentcon el PDF (nombreInforme_PES_YYYYMMDD.pdf) y envía la plantilla consubject = "Informe PES - DDMMYYYY".
Identificador canónico de "trabajo PES": el parte de horas (account.analytic.line) tiene en su timesheet_time_multiplier_id uno de los multipliers "PREMIUM CS Extended Support Hours X 1" o "PREMIUM ACS Extended Support Hours x 1.25". El factor sale del propio registro (multiplier), la etiqueta corta se abrevia en _short_multiplier_label (ej. "PREMIUM CS (OOH)").
Cron (data/ir_cron.xml): ir.cron Mastel — Envío semanal Informe PES. interval_number=7, interval_type=days, numbercall=-1, ejecutado como base.user_root. nextcall se fija al siguiente lunes 09:00 UTC.
Plantilla de correo (data/mail_template.xml) mail_template_mastel_pes_weekly:
- Modelo:
res.users(se envía como el usuario que ejecuta el cron). - Destinatarios fijos (Sebastian Boccassi, Erika Guzmán, operations@, Aníbal Merlo, Rafael Godoy).
- Subject sobreescrito en tiempo de envío con la fecha (
ctx.pes_subject_date). - Cuerpo bilingüe corto; el contenido va en el PDF adjunto.
Detalles del PDF:
- Rótulos y meses en español (
MONTH_ES,WEEKDAY_ES). - Formato de números es-ES con coma decimal (
_fmt_num). - Encabezado con logo, cliente, período (formato "Semana N · D – D mes AAAA") y fecha de generación.
- KPIs en tarjetas con borde superior oro.
- Salto de página forzado antes de la comparativa mensual para no partir la tabla.
Ruta de configuración:
- Cron: Ajustes → Técnico → Automatización → Acciones planificadas → "Mastel — Envío semanal Informe PES".
- Override histórico: Ajustes → Técnico → Parámetros del sistema → clave
pes_report.today_overridecon valorYYYY-MM-DD.
Cómo verificar:
- Ejecuta manualmente el cron desde Acciones planificadas → botón "Ejecutar manualmente". En el log del servidor debe aparecer
[PES] Generando informe … → …seguido de[PES] Enviado: N líneas, X h PES. - Comprueba la bandeja de entrada de los destinatarios: correo "Informe PES - DDMMAAAA" con PDF adjunto
Informe_PES_AAAAMMDD.pdf. - Regenera un informe histórico: crea el parámetro de sistema
pes_report.today_override = 2026-04-27(un lunes), lanza el cron manualmente → sale el informe de la semana 14 – 20 abr 2026. Borra el parámetro cuando termines. - Verifica el filtro de líneas: cualquier
account.analytic.linecuyotimesheet_time_multiplier_idno sea PREMIUM CS/ACS queda fuera; renombrar el multiplier rompe el informe (aparecerá "sin actividad PES"). - Revisa la comparativa mensual: el mes en curso debe mostrarse como "(parcial, N semana(s))".
itc_development_request — Portal de Solicitudes de Desarrollo
| Versión | 17.0.1.0.0 |
| Autor | IT Consulting |
| Dependencias | helpdesk, website |
Descripción Funcional:
Formulario web interno (/development-request) para que empleados de Mastel creen tickets de desarrollo HD/OHIP sin acceso al backend de Odoo.
Descripción Técnica:
Rutas del controller:
| Ruta | Método | Descripción |
|---|---|---|
/development-request |
GET, auth=user | Muestra formulario (solo usuarios internos) |
/development-request/submit |
POST, csrf | Valida, crea ticket, envia email, redirige |
/development-request/submitted |
GET | Página de confirmacion |
Creación del ticket:
team_id = "15. DEVELOPMENTS"
ticket_type_id = "Development Request"
x_studio_property_user = customer_id (cliente hotel)
Email: Tabla HTML con detalles del ticket → integrationsteam, hdteam, info
itc_helpdesk_partner_warning — Avisos de Partner
Descripción Funcional: Muestra los avisos de venta del partner al seleccionar cliente en un ticket. helpdesk.ticket (herencia con onchange en partner_id).
itc_github_link — Enlace GitHub para Helpdesk y Project
Propósito: Añade un campo URL (github_url) en tickets de Helpdesk y tareas de Project para vincular directamente a repositorios, PRs, issues o branches de GitHub.
Origen: ITC Custom (LGPL-3)
Dependencias: helpdesk, project
Lo que añade:
- Campo
github_url(Char, widget URL) enhelpdesk.ticket— columna derecha, después de Estimated Time - Campo
github_url(Char, widget URL) enproject.task— después de Fecha límite - Campo opcional, clickeable (abre en nueva pestaña)
Campos clave:
| Campo | Modelo | Tipo | Widget |
|---|---|---|---|
github_url |
helpdesk.ticket |
Char | url |
github_url |
project.task |
Char | url |
Notas técnicas:
- Vistas heredan de base Odoo (no Studio) con
priority=990 - Helpdesk: hereda
helpdesk.helpdesk_ticket_view_form— xpath agroup[2]position=inside - Project: hereda
project.view_task_form2— xpath adate_deadlineposition=after
Cómo verificar:
- Abrir ticket en Helpdesk → campo "GitHub Link" en columna derecha
- Abrir tarea en Project → campo "GitHub Link" después de Fecha límite
- Introducir URL → se renderiza como enlace clickeable
- Dejar vacío → sin error (campo opcional)
helpdesk_halo_integration — ver arriba (detallado)
bi_website_ticket_problem_solution_ent — FAQ de Tickets (BrowseInfo Enterprise)
Descripción Funcional: Sistema FAQ/Q&A para tickets. Modelo solution.ticket, reporte PDF de soluciones, vista web.
helpdesk_counting — Conteo de Tickets
Descripción Funcional: Añade contadores y metricas de tickets de helpdesk. Herencia de helpdesk.ticket (Kanak Infosystems).
helpdesk_timesheet_customization — Hoja de Horas en Helpdesk
Descripción Funcional: Personalizacion del registro de hojas de horas en tickets.
Navegación y Verificación
helpdesk_halo_integration — Integración con Halo ITSM
Ruta: Ajustes → Técnico → Halo Integration → configurar URL + API key de Halo
- Verifica la configuración de conexión en Ajustes → Halo
- Crea un ticket en Odoo — debe sincronizarse con Halo automáticamente via cron
- Comprueba el campo
halo_ticket_iden el ticket de Odoo
itc_helpdesk_solution_tab — Pestaña Solución
Ruta: Servicio de atención → Tickets → [cualquier ticket] → pestaña Solución
- Abre un ticket de soporte
- Navega a la pestaña "Solución"
- Documenta la solución aplicada y guarda
itc_ticket_user — Usuario Final del Ticket
Ruta: Servicio de atención → Tickets → ticket → campo Ticket User justo debajo de Property User
- Asigna el Property User → el desplegable de Ticket User solo muestra sus contactos hijos
- Selecciona un contacto sin email → aviso bloqueante "Email Required for Ticket User"
- Crea un contacto al vuelo dejando el email vacío → bloqueo "Email Required for New Contact"
- Edita un contacto ya usado como Ticket User y vacía su email → bloqueo con recuento de tickets afectados
- Fix multi-compañía: Nuevo desde el kanban → clic en Cliente → el autocomplete abre sin el error
company_id is not defined
itc_mastel_helpdesk_pes_tech_support — Support Status y aviso Extended Support
Rutas:
- Fechas de un cliente: Contactos → hotel → pestaña Support Status
- Listado global: Contactos → menú Support Status
- Destinatario del aviso: Ajustes → Técnico → Parámetros del sistema →
itc_mastel_helpdesk_pes_tech_support.extended_support_email
- En la ficha de un hotel con PES contratado, en la pestaña Support Status debe haber una fila por cada tag. Como usuario Projects/Admin edita una Fecha Fin → el cambio queda en el chatter del cliente.
- Añade una fila nueva → el tag aparece automáticamente en
x_studio_support_status_; elimínala → el tag se retira si nadie más la usa. - Crea un ticket cuyo Property User sea ese hotel → salta el pop-up con servicios, fechas y Notas Internas, y Extended Support recibe el correo bilingüe.
- Ticket sin Property User → asígnalo después → el pop-up salta al instante sin recargar y el email sale UNA sola vez (flag
extended_support_notified). - Contactos → Support Status → filtra por "Caducado" y agrupa por Cliente para revisar renovaciones.
- Intenta añadir un tag de Support Status a un Individuo →
ValidationError"solo puede asignarse a contactos tipo Empresa". - Verifica en el email recibido por Extended Support que aparece la línea Título del Ticket / Ticket Title con el asunto del ticket, entre Support Status y Número de Ticket (v17.0.1.18.0, #43073).
itc_mastel_pes_weekly_report — Informe PES semanal
Rutas:
- Cron: Ajustes → Técnico → Automatización → Acciones planificadas → "Mastel — Envío semanal Informe PES"
- Override histórico: Ajustes → Técnico → Parámetros del sistema →
pes_report.today_override(formatoYYYY-MM-DD)
- Botón "Ejecutar manualmente" sobre el cron → en el log aparece
[PES] Generando informe …y[PES] Enviado: N líneas, X h PES. - Verifica la recepción del correo "Informe PES - DDMMAAAA" con PDF adjunto
Informe_PES_AAAAMMDD.pdf. - Regenera un informe histórico: crea
pes_report.today_override = 2026-04-27, lanza el cron manualmente y bórralo al terminar. - Renombra temporalmente uno de los multipliers "PREMIUM CS/ACS …" → el informe siguiente saldrá vacío (verificación del filtro).
- Revisa la comparativa mensual: el mes en curso debe salir marcado como "(parcial, N semana(s))".
itc_development_request — Portal Solicitudes de Desarrollo
Ruta: Portal público → mastel.odoo.com/development-request (como usuario portal)
- Inicia sesión como usuario portal en mastel.odoo.com
- Navega a /development-request
- Envía una solicitud de prueba y verifica que aparece en Helpdesk → Tickets
helpdesk_counting — Conteo de Tickets
Ruta: Servicio de atención → [vista Kanban] → contadores en cabecera de cada columna
- Cambia a vista Kanban en Helpdesk
- Verifica los contadores numéricos en cada etapa
bi_website_ticket_problem_solution_ent — FAQ Portal
Ruta: Portal → ticket → sección Problema / Solución visible para el cliente
- Rellena los campos Problema y Solución en un ticket resuelto
- Entra al portal como cliente y verifica que puede ver ambas secciones