Odoo Development: XML Views and Python Models
Classified in Computers
Written on in
English with a size of 8.92 KB
Definición de Vistas y Acciones en XML
A continuación se detallan los registros XML para la configuración de vistas de lista, formulario, calendario y acciones de ventana en el sistema:
<!-- Vista de lista para Alumno -->
<record model="ir.ui.view" id="saez_alumno_tree">
<field name="name">Alumno List</field>
<field name="model">saez.alumno</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="apellido1"/>
<field name="apellido2"/>
<field name="fecha_nacimiento"/>
<field name="sexo"/>
</tree>
</field>
</record>
<!-- Acción de ventana para Alumno -->
<record model="ir.actions.act_window" id="saez_alumno">
<field name="name">Alumno Window</field>
<field name="res_model">saez.alumno</field>
<field name="view_mode">tree,form</field>
</record>
<!-- Vista formulario para Proyecto -->
<record model="ir.ui.view" id="saez_proyecto_form">
<field name="name">Proyecto Form</field>
<field name="model">saez.proyecto</field>
<field name="arch" type="xml">
<form string="Torneo Form">
</form>
</field>
</record>
<!-- Acción de ventana para Proyecto -->
<record model="ir.actions.act_window" id="saez_proyecto">
<field name="name">Proyecto Window</field>
<field name="res_model">saez.proyecto</field>
<field name="view_mode">tree,form,calendar</field>
</record>
<!-- Vista de lista para Proyecto -->
<record model="ir.ui.view" id="saez_proyecto_tree">
<field name="name">Proyecto List</field>
<field name="model">saez.proyecto</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="descripcion"/>
</tree>
</field>
</record>
<!-- Vista calendario para Proyecto -->
<record model="ir.ui.view" id="saez_proyecto_calendar">
<field name="name">Proyecto Calendar</field>
<field name="model">saez.proyecto</field>
<field name="arch" type="xml">
<calendar string="Proyecto Calendar" date_start="fecha_entrega" color="name">
<field name="descripcion"/>
</calendar>
</field>
</record>
<!-- Vista de lista para Estado -->
<record model="ir.ui.view" id="saez_estado_tree">
<field name="name">Estado List</field>
<field name="model">saez.estado</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="duracion"/>
</tree>
</field>
</record>
<!-- Acción de ventana para Estado -->
<record model="ir.actions.act_window" id="saez_estado">
<field name="name">Estado Window</field>
<field name="res_model">saez.estado</field>
<field name="view_mode">tree,form</field>
</record>
<!-- Vista de lista para Título -->
<record model="ir.ui.view" id="saez_titulo_tree">
<field name="name">Titulo List</field>
<field name="model">saez.titulo</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
</tree>
</field>
</record>
<!-- Acción de ventana para Título -->
<record model="ir.actions.act_window" id="saez_titulo">
<field name="name">Titulo Window</field>
<field name="res_model">saez.titulo</field>
<field name="view_mode">tree,form</field>
</record>
<!-- Vista de lista para Asignatura -->
<record model="ir.ui.view" id="saez_asignatura_tree">
<field name="name">Asignatura List</field>
<field name="model">saez.asignatura</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
</tree>
</field>
</record>
<!-- Acción de ventana y Menú para Asignatura -->
<record model="ir.actions.act_window" id="saez_asignatura">
<field name="name">Asignatura Window</field>
<field name="res_model">saez.asignatura</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem name="ExamenSaez" id="saez_menu_root"/>Datos de Prueba Iniciales
<!-- Registro de datos iniciales para el alumno -->
<record id="alumno0" model="saez.alumno">
<field name="name">Juan</field>
<field name="apellido1">Saez</field>
<field name="apellido2">Garcia</field>
<field name="fecha_nacimiento">2002-08-08</field>
<field name="sexo">Hombre</field>
<field name="pais_id">43</field>
</record>Modelos de Datos en Python
Estructura de las clases y relaciones definidas mediante el ORM:
Modelo: Título
class titulo(models.Model):
_name = 'saez.titulo'
_description = 'saez.titulo'
name = fields.Text(string="Titulo")
alumnos_ids = fields.Many2many(
'saez.alumno',
'saez_titulo_alumno_rel',
'titulo_id',
'alumno_id',
string='Alumnos'
)Modelo: Alumno
class alumno(models.Model):
_name = 'saez.alumno'
_description = 'saez.alumno'
name = fields.Text(string="Nombre")
apellido1 = fields.Text(string="Primer Apellido")
apellido2 = fields.Text(string="Segundo Apellido")
fecha_nacimiento = fields.Date(string="Fecha de Nacimiento")
sexo = fields.Selection([('Hombre', 'Hombre'), ('Mujer', 'Mujer')], string="Sexo")
foto = fields.Image(string="Foto")
pais_id = fields.Many2one('res.country', string='Pais')
proyectos_ids = fields.One2many('saez.proyecto', 'alumno_id', string='Proyectos')
titulos_ids = fields.Many2many(
'saez.titulo',
'saez_titulo_alumno_rel',
'alumno_id',
'titulo_id',
string='Titulos'
)Modelo: Estado
class estado(models.Model):
_name = 'saez.estado'
_description = 'saez.estado'
name = fields.Text(string="Nombre")
duracion = fields.Integer(string="Dias de Duracion")
proyectos_ids = fields.One2many('saez.proyecto', 'estado_id', string='Proyectos')Modelo: Asignatura
class asignatura(models.Model):
_name = 'saez.asignatura'
_description = 'saez.asignatura'
name = fields.Text(string="Nombre")
proyectos_ids = fields.One2many('saez.proyecto', 'asignatura_id', string='Proyectos')
_sql_constraints = [
('name_uniq', 'UNIQUE(name)', 'Asignatura name already exists !')
]Modelo: Proyecto
class proyecto(models.Model):
_name = 'saez.proyecto'
_description = 'saez.proyecto'
name = fields.Text(string="Nombre Proyecto")
descripcion = fields.Text(string="Descripcion")
fecha_inicio = fields.Date(string="Fecha Inicio")
fecha_entrega = fields.Date(string="Fecha Entrega")
nota = fields.Integer(string="Nota")
aprobado = fields.Boolean(string="Aprobado", compute="_comprobar_nota")
proyecto_definitivo = fields.Boolean(string="Proyecto Definitivo", compute="_comprobar_proyecto_definivo")
alumno_id = fields.Many2one('saez.alumno', string='Alumno')
estado_id = fields.Many2one('saez.estado', string='Estado')
asignatura_id = fields.Many2one('saez.asignatura', string='Asignatura', required=True)
@api.constrains('nota')
def _comprobar_formato_nota(self):
print("\tFUNCTION _comprobar_formato_nota RUNNING (Proyecto)")
# Implementar Código que valide que la nota no puede ser ni cero ni menos
if self.nota:
if self.nota >= 10:
self.aprobado = True
else:
self.aprobado = False
else:
self.aprobado = False
@api.onchange('nota')
def _comprobar_nota(self):
print("\tFUNCTION _comprobar_nota RUNNING (Proyecto)")
if self.nota:
if self.nota >= 5:
self.aprobado = True
else:
self.aprobado = False
else:
self.aprobado = False
def _comprobar_proyecto_definivo(self):
print("\tFUNCTION _comprobar_proyecto_definivo RUNNING (Proyecto)")
if self.fecha_inicio:
# Implementar Código
fecha = self.fecha_inicio + datetime.timedelta(days=(10))
fecha_hoy = date.today()
print("\tfecha:" + str(fecha))
print("\tfecha_hoy:" + str(fecha_hoy))
if fecha >= fecha_hoy:
self.proyecto_definitivo = True
else:
self.proyecto_definitivo = False
else:
self.proyecto_definitivo = False