Configuración de Relaciones Many2Many y Reportes QWeb en Odoo
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 6,57 KB
Práctica 7: Configuración Avanzada de Módulos
Para relacionar dos submenús, es necesario crear un campo nuevo en cada clase utilizando relaciones Many2Many.
Configuración en los Modelos
En la clase Alumno
asignaturaAlumno = fields.Many2Many('asignatura.model', string="Asignaturas")
Donde asignatura.model es el nombre de la clase destino y string es la etiqueta de la descripción.
En la clase Asignatura
alumnoAsignatura = fields.Many2Many("alumno.model", string="Alumnos")
Creación de Campos en la Vista XML
Dentro de la estructura de la vista, organizamos los campos mediante groups y sheets:
<sheet>
<group name="group_down">
<group name="group_left">
<field name="nombre"/>
<field name="apellido"/>
</group>
<group name="group_right">
<field name="repetidor"/>
<field name="matriculado"/>
</group>
</group>
<group name="group_top">
<field name="asignaturaAlumno"/>
</group>
</sheet>
Creación de Botones en la Vista
En el archivo todo_view.xml, definimos los botones dentro de la etiqueta header:
<header>
<button name="matricular" type="object" string="Matricular" class="oe_highlight" />
<button name="desmatricular" type="object" string="Desmatricular" />
</header>
Organización por Pestañas
Para crear pestañas, utilizamos las etiquetas <notebook> y <page>, insertando dentro el contenido de los botones y los campos correspondientes.
Generación de Informes (Reports)
Para generar informes, crearemos un nuevo archivo XML. Este debe añadirse al archivo __manifest__.py en el campo data y asegurar la dependencia report en el campo depends.
Definición del Reporte
<odoo>
<data>
<report id="reporteAlumnos"
model="alumno.model"
string="Informe de alumnos"
name="colegio.informe_reporte_view"
file="colegio.informe_reporte_view"
report_type="qweb-pdf"/>
<template id="informe_reporte_view">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="informe">
<div class="page">
<table class="table table-striped">
<h1>Informe sobre alumnos</h1>
<thead>
<tr>
<th>Nombre</th>
<!-- Añadimos todos los campos que tenemos -->
</tr>
</thead>
<tbody>
<tr>
<td><span t-esc="informe.nombre"/></td>
<!-- Añadimos todos los campos que tenemos -->
</tr>
</tbody>
</table>
</div>
</t>
</t>
</template>
</data>
</odoo>
Gestión de Permisos y Seguridad
Definimos los permisos en un archivo CSV (ir.model.access.csv):
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
- access_admin_alumno: Permisos totales (1,1,1,1) para el grupo manager.
- access_user_alumno: Permisos de solo lectura (1,0,0,0) para el grupo de usuarios.
Definición de Grupos en XML
<record id="tareas_group_category" model="ir.module.category">
<field name="name">Permisos módulo tareas</field>
</record>
<record id="manager_group" model="res.groups">
<field name="name">Administrador</field>
<field name="category_id" ref="tareas_group_category"/>
</record>
<record id="user_group" model="res.groups">
<field name="name">Usuarios</field>
<field name="category_id" ref="tareas_group_category"/>
</record>
Es fundamental añadir la ruta de estos archivos en el manifest dentro del campo data.
Carga de Datos de Prueba
Creamos una carpeta data con un archivo data.xml para poblar la base de datos:
<odoo>
<data>
<record model="alumno.model">
<field name="nombre">David</field>
<!-- Añadimos todos los campos adicionales -->
</record>
<record model="asignatura.model">
<field name="name">DesarrolloInterfaces</field>
</record>
</data>
</odoo>
Estructura y Función de los Archivos
- __manifest__.py: Archivo descriptor que contiene el manifiesto del módulo y declara las dependencias y archivos de datos.
- __init__.py: Archivo Python encargado de importar todos los módulos y subcarpetas que deben ejecutarse.
- todo_app.py: Define las clases y la lógica de negocio del módulo.
- todo_menu.xml: Define la estructura general de los menús del módulo.
- todo_view.xml: Define la vista de formulario y cómo se visualizan los campos al inspeccionar una tarea.
Decoradores API en Odoo
- @api.one: Se aplica específicamente a un único registro (instancia actual).
- @api.depends: Define que la ejecución de una función depende de los cambios en los campos especificados entre paréntesis.