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

Related entries: