Projecte Odoo complet

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

Aquest article tracta de explicar amb tot el detall que es puga el procés de creació d'un mòdul en Odoo. La teoria està en l'article d'Odoo i també part en la part d'Instal·lar Odoo. Anirem explicant qüestions tècniques, però també sobre el procés pas a pas per evitar errades i anar comprovant que tot funciona.

Com que és un article didàctic, algunes coses no es faran a la primera com es farien en un desenvolupament professional. Ens deixarem conscientment coses i algunes les desfarem o seran redundants. Per exemple, començarem sense fer res d'herència per a, després, desfer part del treball i aplicar l'herència quan ja sabem.

Un dels temes favorits dels alumnes i dels que més joc donen a l'hora de fer un mòdul és la gestió de campionats esportius. Per tant, aquest mòdul serà sobre la creació d'un mòdul per a gestionar lligues de qualsevol esport amb fase de tots contra tots i play-offs.

Creació e instal·lació d'un mòdul

El nostre mòdul serà instal·lat en un servidor en producció. Per tant, es copiarà el mòdul al directori oficial dels mòduls o es crearà en la configuració central del servidor un PATH que continga la ruta absoluta del directori o està. El procés per a desenvolupar-lo pot ser diferent. El recomanable seria fer el que diu l'article d'Instal·lació d'Odoo a la seua secció Configuració de la ruta dels mòduls..

Creem un mòdul buit en aquesta ruta amb el comandament:

 $ odoo scaffold league .

Podríem posar-nos directament a programar en els directoris creats, però es recomana primer instal·lar el mòdul buit. Anem a la web > Configuració > Activar mode desenvolupador i després Aplicacions > Actualitzar llista d'aplicacions. Finalment es cerca el mòdul i s'instal·la. En principi no dona problemes perquè no té res.

Creació dels primers models

El nostre mòdul gestiona lligues, per tant ens interessa gestionar les temporades, equips, classificacions, jugadors, jornades, partits, resultats, guanyadors i altres coses que ja anirem pensant.

El més recomanable per a fer un mòdul per primera vegada i aprendre és fer tots els models que pensem que necessitem en el python amb els fields bàsics i fer les seues vistes.

Aquest pot ser el codi inicial per provar que funciona.

En models.py:

# -*- coding: utf-8 -*-

from odoo import models, fields, api

class league(models.Model):
     _name = 'league.league'
     name = fields.Char()
     start_date = fields.Date()
     end_date = fields.Date()
     
class team(models.Model):
	_name = 'league.team'
	name = fields.Char()
	logo = fields.Binary()
	
class player(models.Model):
	_name = 'league.player'
	name = fields.Char()
	photo = fields.Binary()
	
class match(models.Model):
	_name = 'league.match'
	name = fields.Char()
	date = fields.Datetime()


En views.xml:

<odoo>
  <data>
    <record model="ir.actions.act_window" id="league.leagues_action_window">
      <field name="name">league window</field>
      <field name="res_model">league.league</field>
      <field name="view_mode">tree,form</field>
    </record>
    <record model="ir.actions.act_window" id="league.teams_action_window">
      <field name="name">league window</field>
      <field name="res_model">league.team</field>
      <field name="view_mode">tree,form</field>
    </record>
    <record model="ir.actions.act_window" id="league.players_action_window">
      <field name="name">league window</field>
      <field name="res_model">league.player</field>
      <field name="view_mode">tree,form</field>
    </record>
    <record model="ir.actions.act_window" id="league.matches_action_window">
      <field name="name">league window</field>
      <field name="res_model">league.match</field>
      <field name="view_mode">tree,form</field>
    </record>
    
    <menuitem name="League" id="league.menu_root"/>

    <menuitem name="Data" id="league.menu_data" parent="league.menu_root"/>

    <menuitem name="Leagues" id="league.menu_leagues" parent="league.menu_data"
              action="league.leagues_action_window"/>
    <menuitem name="Teams" id="league.menu_teams" parent="league.menu_data"
              action="league.teams_action_window"/>
    <menuitem name="Players" id="league.menu_players" parent="league.menu_data"
              action="league.players_action_window"/>
    <menuitem name="Matchs" id="league.menu_matches" parent="league.menu_data"
              action="league.matches_action_window"/>
    
  </data>
</odoo>


Una vegada fet, deguem para el servici Odoo, i reiniciar-lo especificant la base de dades i el mòdul que volem actualitzar i depurar, com diu la part de depurar Odoo del manual d'Instal·lació.

 $ odoo -d league -u league

Les relacions entre els models

De moment són models amb poques dades (ja afegirem més) independents entre ells. Però els equips participen en lligues, tenen jugadors i els partits tenen equips. Cal fer aquestes relacions bàsiques:

Player (Many2one) <-> (One2many) Team
Match (Many2one visitor) --> Team
Match (Many2one local) --> Team

La relació entre equips i lligues és especial, ja que necessitem també guardar els punts que té en eixa lliga en concret. Per tant, necessitem una taula en mig anomenada Points:

Team (One2many) <-> (Many2one) Points (Many2one) <-> (One2many) League

Els partits són de lligues, però es tenen que organitzar per jornades:

Match (Many2one) <-> (One2many) Day (Many2one) <-> (One2many) League