¡Hola! Entiendo que has creado una nueva plantilla de impresión en tu módulo de ventas y quieres habilitar las opciones de impresión y guardar como PDF. Aquí te explico cómo hacerlo:
Pasos para Activar la Impresión y Guardar como PDF
El proceso general implica definir un "report action" en Odoo y asociarlo a tu modelo. Aquí te detallo los pasos:
- Crear un Report Action (Acción de Reporte) en XML:
- Dentro de tu módulo, crea o edita un archivo XML (por ejemplo, views/report_views.xml).
- Define un ir.actions.report record. Este record le dice a Odoo cómo generar el PDF.
<odoo>
<data>
<report
id="action_report_mi_certificado"
model="tu.modelo" <!-- Reemplaza con el nombre de tu modelo -->
string="Imprimir Certificado"
report_type="qweb-pdf"
name="tu_modulo.reporte_mi_certificado_template" <!-- Reemplaza con el nombre de tu template -->
file="tu_modulo.reporte_mi_certificado" <!-- Reemplaza con el nombre del archivo base -->
print_report_name="'Certificado - %s' % (object.name)" <!-- Opcional: Nombre del archivo PDF -->
binding_model_id="ref('model_tu_modelo')" <!-- Reemplaza con la referencia al modelo -->
binding_type="report"
/>
</data>
</odoo>
Explicación de los campos:- id: Un identificador único para tu report action.
- model: El nombre del modelo al que pertenece este reporte (ej., sale.order, tu.modelo). Reemplaza tu.modelo con el nombre real de tu modelo.
- string: El texto que aparecerá en el menú de impresión (ej., "Imprimir Certificado").
- report_type: qweb-pdf indica que estás usando QWeb para generar el PDF.
- name: El nombre técnico del reporte. Sigue la convención tu_modulo.nombre_del_template. Reemplaza tu_modulo.reporte_mi_certificado_template con el nombre correcto de tu template QWeb.
- file: El nombre base del archivo PDF generado. Sigue la convención tu_modulo.nombre_del_archivo. Reemplaza tu_modulo.reporte_mi_certificado con un nombre apropiado.
- print_report_name: (Opcional) Define el nombre del archivo PDF que se descargará. Puedes usar expresiones Python para hacerlo dinámico (ej., incluir el nombre del cliente). object se refiere al registro actual.
- binding_model_id: Una referencia al modelo al que se asocia el reporte. Necesitas crear una referencia al modelo en XML.
- binding_type: report indica que este es un reporte imprimible.
- Crear una Referencia al Modelo (si no existe):
- Si no tienes una referencia a tu modelo en XML, necesitas crearla. Esto se hace en el mismo archivo XML (views/report_views.xml o donde prefieras).
<record id="model_tu_modelo" model="ir.model">
<field name="model">tu.modelo</field> <!-- Reemplaza con el nombre de tu modelo -->
<field name="name">Tu Modelo</field> <!-- Reemplaza con un nombre legible para tu modelo -->
</record>
- Reemplaza tu.modelo con el nombre real de tu modelo.
- Reemplaza "Tu Modelo" con un nombre descriptivo para tu modelo.
- Asegurarte de que tu Template QWeb Existe:
- Tu template QWeb (el archivo que define el diseño del reporte) debe existir y tener el nombre correcto (el que usaste en el campo name del report action).
- El template debe estar en un archivo XML (ej., views/report_templates.xml).
<template id="reporte_mi_certificado_template">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<!-- Aquí va el contenido de tu certificado -->
<h1>Certificado</h1>
<p>Este es un certificado para: <t t-esc="object.name"/></p>
</div>
</t>
</t>
</template>
Explicación:- id: El identificador único del template. Debe coincidir con el nombre que usaste en el name del report action (ej., tu_modulo.reporte_mi_certificado_template).
- <t t-call="web.html_container"> y <t t-call="web.external_layout">: Estos templates proporcionan la estructura HTML básica para el reporte (encabezado, pie de página, etc.).
- <div class="page">: Define una página en el reporte.
- <t t-esc="object.name"/>: Imprime el valor del campo name del registro actual. object se refiere al registro que estás imprimiendo.
- Incluir los Archivos XML en el __manifest__.py:
- Asegúrate de que los archivos XML que creaste (ej., views/report_views.xml y views/report_templates.xml) estén listados en el data del archivo __manifest__.py de tu módulo.
{
'name': 'Mi Módulo de Certificados',
'version': '1.0',
'depends': ['sale'],
'data': [
'views/report_views.xml',
'views/report_templates.xml',
],
'installable': True,
'application': False,
}
- Actualizar el Módulo:
- Después de hacer estos cambios, actualiza tu módulo en Odoo para que los cambios surtan efecto. Ve a la lista de aplicaciones, busca tu módulo y haz clic en "Actualizar".
Cómo Usar la Impresión
Una vez que hayas hecho esto, deberías ver una opción de "Imprimir Certificado" (o el texto que hayas puesto en el campo string del report action) en el menú "Imprimir" (Print) de tu modelo. También deberías poder guardar el reporte como PDF.
Consejos Adicionales
- Diseño del Reporte: Usa CSS para diseñar tu reporte QWeb. Puedes incluir CSS directamente en el template o enlazar a un archivo CSS externo.
- Imágenes: Para incluir imágenes en tu reporte, puedes usar la función base64 para codificar la imagen en el XML o usar un enlace a una imagen externa.
- Depuración: Si tienes problemas, revisa los logs de Odoo para ver si hay errores. También puedes usar el debugger de Python para depurar tu template QWeb.
🚀 Did This Solve Your
Problem?
If this answer helped you save time, money, or
frustration, consider:
✅ Upvoting (👍)
to help others find it faster
✅ Marking
as "Best Answer" if it resolved your issue
Your feedback keeps the Odoo community strong! 💪
(Need further customization? Drop a comment—I’m happy to
refine the solution!)