Está en la página 1de 42

TUTORIAL BASICO

OPEN ERP (V. 5.0.7)





DESARROLLADORES OPEN ERP











J os Luis Garca Hernndez
Universidad de Antioquia
Ingeniera de Sistemas
Colombia
Medelln



2

TUTORIAL BASICO OPEN ERP (V. 5.0.7)

Por: Jos Luis Garca Hernndez

Este tutorial se encuentra protegido bajo la licencia de Creative Commons de
reconocimiento-compartido 2.5, usted es libre de:

: Copiar, distribuir y comunicar pblicamente la obra.

: Hacer obras derivadas

Bajo las siguientes condiciones:

: Reconocimiento Debe reconocer los crditos de la obra de la
manera especificada por el autor o el licenciador (pero no de una manera que
sugiera que tiene su apoyo o apoyan el uso que hace de su obra).

: Compartir bajo la misma licencia Si altera o transforma esta
obra, o genera una obra derivada, slo puede distribuir la obra generada bajo
una licencia idntica a sta.

Con el entendimiento de que:

Renuncia: Cualquiera de estas condiciones puede no aplicarse si se obtiene el
permiso del propietario del copyright.

Otros Derechos: De ninguna manera cualquiera de los siguientes derechos se
ven afectados por la licencia:
Los derivados de usos legtimos o derechos de uso justo;
los derechos morales del autor;
Los derechos que otras personas pueden tener, tanto en la propia obra o
en la forma en que la obra se utiliza, como la publicidad o derechos de
privacidad.

3

Nota: Al reutilizar o distribuir la obra, tiene que dejar bien claro los trminos de
la licencia de obra.
Para ms informacin sobre trminos de la licencia dirjase a la pgina
http://creativecommons.org/

Donaciones
Si este tutorial es de tu agrado puedes contribuir dando un pequeo aporte de
dinero, as podrs acceder a decenas de ejemplos, mdulos, asesoras,
incluyendo tutoriales avanzados y tutoriales afines a Open ERP que
contribuirn a tu formacin como desarrollador.

Tipos de Donacin:

Nivel 1
Inversin: 5 dlares.
Acceso: Asesoras y ejemplos

Nivel 2
Inversin: 10 dlares.
Acceso: Asesoras y ejemplos, Tutoriales Bsicos y afines.

Nivel 2
Inversin: 15 dlares.
Acceso: Asesoras y ejemplos, Tutoriales Bsicos, avanzados y
afines

Si quieres dar una donacin por favor ponte en contacto con el grupo en google
http://groups.google.com.co/group/openerpamerica.





4

TABLA DE CONTENIDO

1. INTRODUCCION 6
2. QUE ES OPEN ERP 6
2.1. Ventajas de Open ERP 7
2.2. Integracin con otros software 8
3. INSTALACIN DE OPEN ERP 9
4. SISTEMA DE ARCHIVOS BSICOS 15
4.1. Archivo __init__.py 16
4.2. Archivo __terp__.py 16
4.2.1. Diccionario descriptor 16
4.3. Archivo <modulo>.py 17
4.3.1. Atributos 17
4.3.2. Campos bsicos 17
4.3.3. Campos Relacionales 19
4.4. Archivo <modulo_view>.xml 20
4.4.1. Vista Form 20
4.4.2. Vista Tree 20
4.4.3. Elementos de diseo 21
4.4.4. Atributos para los campos 22
5. MODELACIN DE OBJ ETOS 22
5.1. Archivo <modulo>.py 23
5.1.1. Explicacin y consideraciones 23
5.2. Archivo __terp__.py 24
5.3. Archivo __init__.py 24
5.4. Implementacin de una vista Form 24
5.5. Implementacin de una vista Tree 25
6. CREACIN DE MENS Y ACCIONES.........26
6.1. Menus 26
6.2. Acciones 28
6.2.1. Acciones Form 28
6.2.2. Acciones Tree 28
6.2.3. Archivo xml (completo) 29
5

7. HERRAMIENTAS DE MODELADO (DIA UML) 30
8. MODELADO DE CLASES 31
9. RELACIONES 34
9.1. Relacin many2one 34
9.1.1. Explicacin y consideraciones 35
9.2. Relacin one2many 36
10. HERENCIA 37
10.1. Herencia de objetos 37
10.1.1. Herencia por extensin 37
10.1.2. Herencia por prototipo 39
10.1.3. Herencia por delegacin .39
10.2. Herencia de vistas .40
11. BIBLIOGRAFA .41





















6

1. INTRODUCCIN

El Open ERP (Enterprise Resource Planning, ERP por sus siglas en ingls) es
un sistema planeador de recursos empresariales que permite realizar una
gestin integrada de los recursos. Entre sus caractersticas estn la
contabilidad analtica, contabilidad financiera, gestin de almacenes/inventario,
gestin de ventas y compras, automatizacin de tareas, campaas de
marketing, ayuda tcnica (Helpdesk), y punto de venta, dentro de la
construccin misma del software se hace uso intensivo de flujos de trabajo que
se puede integrar con los mdulos haciendo la modificacin de aprobacin y en
general de cualquier proceso adaptable.

Este Tutorial bsico de Open ERP provee una introduccin tcnica y al mismo
tiempo completa de cmo implementar Open ERP en tu computador y aprender
a construir diferentes tipos modulos dependiendo de necesidades especificas.
El tutorial incluye desde la instalacin de Open ERP hasta la personalizacion
de los diferentes modulos.

Para este tutorial es importante tener conocimiento previos de Phyton para la
construccion de los objetos que componen un modulo, tambien es necesario un
poco de xml para construir las vistas de los objetos, los flujos de trabajo y los
diferentes procesos de negocio que componen a los modulos.

Es necesario recordar que este tutorial es de uso basico, por lo tanto es
necesario comprometerse un poco y tener voluntad para experimentar. Pero no
hay de qu preocuparse: aprender a implementar Open ERP es de lo ms
divertido y proporciona una gran satisfaccin cuando se da con la solucin
correcta.

2. QUE ES OPEN ERP

Open ERP es un sistema planeador de recursos empresariales o ERP que cu-
bre las necesidades de las reas de contabilidad, ventas, compras, y almacn
e inventario, entre otras. Open ERP soporta mltiples monedas, mltiples com-
paas y mltiples contabilidades; adems incorpora funcionalidades de gestin
de documentos para agilizar la colaboracin entre departamentos y equipos en
la empresa; y permite trabajar remotamente mediante una interfaz web desde
una computadora conectada a Internet. Tiene componentes separados en es-
quema Cliente-servidor. Dispone de interfaces XML-RPC, y SOAP. Anterior-
mente se le conoci como TinyErp.
Open ERP es multiplataforma, funciona sobre Linux y Windows, y la interfaz de
usuario est construida sobre la biblioteca grafica Gtk+, tambin hay una alter-
nativa construida sobre Qt. Adicionalmente Open ERP tiene un cliente para
7

ambiente Web llamado Etiny que fue construido sobre el framework para desa-
rrollo de aplicaciones web TurboGears.
Emplea a Postgresql como Sistema manejador de bases de datos y ha sido
programado con Python, lo cual permite que su adecuacin e implantacin sea
limpia teniendo un esquema de arquitectura menor que otras soluciones.
Dentro de la construccin misma del software se hace uso intensivo de flujos
de trabajo que se puede integrar con los mdulos haciendo fcil la modificacin
de y en general de cualquier proceso adaptable.

2.1. Ventajas de OpenERP

Completo
En estos momentos existen ms de 300 mdulos especficos para distintos
sectores de actividad.
Potente
OpenERP aade en la mayor parte de sus reas herramientas de anlisis y
generacin de reportes, con lo que la gestin y visualizacin de la informa-
cin se simplifica.
Flexible
Las modificaciones y adaptaciones de cdigo a las necesidades de las em-
presas se pueden realizar en forma gil. Por ejemplo: flujos de trabajo
(workflows) editables; reportes personalizados; control de productos y vis-
tas.
Libre
Es un sistema basado en estndares, abierto y ampliamente soportado.
Existe una importante comunidad de desarrolladores que estn constante-
mente fortaleciendo el proyecto (amplia documentacin, foros, cvs, mailing,
listas, etc.).
Accesible
Open ERP se suministra bajo licencia GPL, por lo que no se abonan licen-
cias de adquisicin. Ud. slo paga por los costos de integracin y adapta-
cin a las necesidades de su empresa.
Avanzado tcnicamente
Usa doble entrada en la gestin de inventarios.

Soporta mltiples vistas de la contabilidad.
8

Est preparado para conformar normas ISO9001.

Funciona con bases de datos de objetos.

Utiliza flujos de trabajos flexibles y dinmicos.

Soporta plataformas heterogneas: Linux, Windows.

Utiliza un esquema de servidor distribuido.


2.2. Integracin con otros software

Todos los informes de Open ERP se generan en PDF para una perfecta im-
presin. Tambin se pueden generar archivos en Word o Excel que des-
pus pueden modificarse antes de ser enviados a un cliente por carta, mail
o fax en forma automtica.
Open ERP se integra con los siguientes softwares comerciales:
Visualizacin bajo Adobe Reader (PDF).

Importacin/Exportacin de Microsoft Office u OpenOffice.

Exportacin a Excel (or CSV).

Google maps: servidor de aplicaciones de mapas en la web (gratuito).

Tambin existen publicados conectores con software libre como:

OpenOffice: La suite ofimtica de cdigo abierto desarrollada por Sun
Microsystems/Oracle.

Mozilla Thunderbird: Cliente de correo electrnico de los creadores
de Mozilla Firefox.

J asper Reports (iReport): herramienta de creacin de informes J ava
libre.

Magento: aplicacin de comercio electrnico online.

Oscommerce: otra aplicacin de comercio electrnico online.

J oomla: gestor de contenidos (integracin parcial a travs de xml-
rpc).

9

Spree: software de comercio electrnico para Ruby on Rails.

Dia UML: software de diagramas para implementacin de modulos.

3. INSTALACIN (Windows)

La instalacin es total mente automtica bajo todos los sistemas operativos
windows, solo se debe ingresar a la pgina oficial (www.openerp.com) y
descargar el paquete AllInOne y ejecutar la instalacin, es preferible realizar la
instalacin en el sistema de archivos.
Para la conexin del cliente al servidor Open ERP se debe iniciar la aplicacin,
si es la primera vez que se ejecuta el cliente puede aparecer primero una
encuesta sobre el inters en el uso de Open ERP, este paso se puede obviar,
despus aparecer una ventana pequea para iniciar la conexin la cual est
conectada por el puerto 8069 con el protocolo XML-RPC o por el puerto 8070
con el protocolo NET-RPC los cuales son valores por defecto.

Si en el campo Base de datos de la ventana de conexin se informa que No se
puede conectar al servidor!, significa que los parmetros del Servidor son
incorrectos. Se debe hacer clic en el botn Cambiar y modificar los parmetros
de Servidor, Puerto y Protocolo de conexin. En una configuracin por defecto
donde cliente y servidor estn en la misma mquina estos seran los valores
tpicos:

Servidor: localhost

Puerto: 8070

Protocolo de conexin: NET-RPC (faster)

O tambin estos:

Servidor: localhost

Puerto: 8069

Protocolo de conexin: XML-RPC

Si por el contrario se informa que Base de datos no encontrada, debe crear
una!, se debe cerrar la ventana de entrada (Cancelar) y seleccionar en el men
superior Archivo/Base de datos/Nueva base de datos como muestra la figura 1.


10


Figura 1. Ruta para instalar la nueva base de datos (Archivo/Bases de Datos/Nueva base
de datos)

Aparecer una ventana como el de la figura 2:


Figura 2. Datos para crear de la nueva base de datos

Rellenar el formulario con la siguiente informacin:

Servidor Open ERP: Los mismos datos de conexin que en la
ventana de entrada. Normalmente localhost, 8070, NET-RPC (faster)

Contrasea del super-administrador: Esta contrasea debe
coincidir con la definida en el parmetro admin_password del archivo
de configuracin del servidor. Por defecto admin aunque en entornos
de produccin hay que cambiarla para evitar que los usuarios sean
capaces de crear bases de datos.
11

Nuevo nombre de la base de datos: Nombre de la base de datos a
crear, por ejemplo oerp_bd

Cargar datos de demostracin: si se est testeando OpenERP por
primera vez de clic en S o en caso contrario de clic en No en
entornos de produccin.

Idioma por defecto: Idioma por defecto de la aplicacin y de los
nuevos usuarios: Spanish/Espaol, Catalan/Catal

Contrasea del administrador: La contrasea del usuario para la
base de datos especifica de Open ERP. Es muy importante este
usuario (y recordar su contrasea) ya que es el usuario que puede
administrar todo el sistema en esa base de datos.
Confirmar contrasea: Repetir la contrasea anterior.

A continuacin empezar la creacin de la base de datos de Open ERP. Se
crearn numerosas tablas y registros, por lo que puede tardar un poco la
instalacin.

La conexin se hace automticamente como usuario administrador y se iniciar
el asistente de instalacin:

Seleccionar un perfil: Se puede seleccionar un perfil (como muestra
la figura 3) en concreto que nos instalar de forma automtica los
mdulos relacionados con ese perfil o escoger el perfil mnimo (slo
instala el mdulo base) y posteriormente instalar los mdulos que
interesen.

12


Figura 3. Seleccin de perfil preferido

Informacin general: Aqu podemos introducir la informacin de la
compaa como el nombre, direccin, correo electrnico, telfono y
moneda como muestra la figura 4. (en Open ERP las empresas con
las que se mantiene relaciones -clientes, proveedores- se llaman
empresas y a la propia empresa o organizacin se la denomina
compaa).


Figura 4. Informacin general de la empresa

Informacin de los informes (2a pestaa): Aqu se definen los
textos que aparecern en la cabecera (derecha) y pie de pagina de
13

los informes y el logo de la compaa (por defecto el logo aparecer
a la izquierda de la cabecera) como muestra la figura 5.


Figura 5. Informacin de los reportes de la empresa

Finalmente empezar la configuracin de los mdulos instalados mediante
asistentes con abundante informacin. Si se ha seleccionado el perfil mnimo
slo se pedir:
Modo de vista: Interfaz simplificada o extendida (figura 6).

Figura 6. Interface simplifica o extendida
dependiendo de las necesidades del usuario

Creacin de nuevos usuarios: En entornos de produccin es
altamente recomendable crear un usuario para cada empleado que
no tenga el poder del usuario admin (figura 7). Asignando el usuario a
diferentes grupos y/o roles podemos configurar su perfil (figura 8 y 9).
Tambin se pueden crear ms adelante.

14


Figura 7. Configuracin de usuarios

Figura 8. Configuracin de grupos

15


Figura 9. Configuracin de roles

Al terminar aparece el men con los mdulos instalados como muestra la figura
10.


Figura 10. Finalizacin de instalacin de la base de datos. Inicializacin de la aplicacin.

4. SISTEMAS DE ARCHIVOS BSICO

Todos los mdulos open ERP se encuentran encapsulados en la carpeta Open
ERP/server/addon. Para crear un modulo se necesita crear una carpeta con el
nombre del modulo en dicho directorio, dentro de esta carpeta se aloja la lgica
16

del negocio, un modulo est compuesto por cuatro archivos bsicos (algunos
mdulos son ms robustos):

Archivo __init__.py

Archivo __terp__.py

Archivo <tu_modulo>.py

Archivo <tu_vista>.xml

4.1. Archi vo __init__.py

Permite cargar el modulo creado

4.2. Archi vo __terp__.py

Este archivo contiene un diccionario que describe todos los archivos que se
utilizan en la implementacin de un modulo.

4.2.1. Diccionario descriptor:

name : Nombre del modulo

versin: Versin del modulo

description: Una descripcin del modulo

autor: Persona o entidad que desarrollo el modulo

website: Sitio web de la entidad que desarrollo el modulo

license: Tipo de licencia del modulo
(Predeterminada:GPL2)

depends: Lista de modulos de los cuales depende el
modulo, el modulo base es el mas usado puesto que en el
se definen los datos necesarios para implementar las
vistas, reportesetc.

init_xml: Lista de los archivos XML que se cargaran con la
instalacin del modulo

instalable: Determina si un modulo es instalable o no
(True o False)
17

active: Determina los mdulos que son creados en la base
de datos.

4.3. Archi vo <modulo>.py

En este archivo se definen los objetos que componen un modulo en la vista
y en la base de datos, estos objetos tienen atributos predeterminados los
cuales son usados e interpretados por Open ERP.

4.3.1. Atributos predeterminados:
_columns: Este atributo es requerido, en el se definen los
campos que se crean en la tabla de la base de datos y las
vistas

_constraints: Permite establecer restricciones a un campo de
un objeto

_sql_constraints: Permite establecer restricciones SQL a un
campo de un objeto

_defaults: Establece valores predeterminados para un campo

_inherit: Establece la herencia entre los objetos

_name: Este atributo es requerido y pone nombre al objeto
creado

_order: Este atributo es usado como resultado de una
bsqueda y lectura de mtodos

_rec_name: Nombre del campo que se usa para recursos de
bsqueda

Los objetos en Open ERP contienen campos los cuales permiten
introducir datos en la base de datos, estos campos van definidos en el
atributo columns. Hay dos tipos de campos, los bsicos y los
relacionales, los bsicos solos sirven para introducir datos basicos y los
relacionales (ver tipos de relacin) permiten establecer relaciones entre
los objetos.


4.3.2. Campos bsicos:

boolean: Bolean (True o False)
18


Sintaxis:

Fi el ds. bool ean( Fi el d name , [ , Opt i onal Par amet er s] )

integer: Numero entero

Sintaxis:

f i el ds. i nt eger ( ' Fi el d Name' [ , Opt i onal Par amet er s] ) ,

float: Un numero de punto flotante

Sintaxis:

f i el ds. f l oat ( ' Fi el d Name' [ , Opt i onal Par amet er s] ) ,

char: Un string de espacio limitado, su longitud es un parmetro
requerido

Sintaxis:

f i el ds. char ( ' Fi el d Name' , si ze=n [ , Opt i onal Par amet er s] )

text: Un campo de texto sin limite

Sintaxis:

f i el ds. t ext ( ' Fi el d Name' [ , Opt i onal Par amet er s] ) ,

date: Un dato

Sintaxis:

f i el ds. dat e( ' Fi el d Name' [ , Opt i onal Par amet er s] ) ,

datetime: Permite asignar un dato de tiempo

Sintexis:

f i el ds. dat et i me( ' Fi el d Name' [ , Opt i onal Par amet er s] ) ,

binary: Dato binario


selection: Esta campo permite seleccionar un dato de varios
valores predeterminados

Sintaxis:

19

f i el ds. sel ect i on( ( ( ' n' , ' Unconf i r med' ) , ( ' c' , ' Conf i r med' ) ) ,
' f i el d Name' [ , Opt i onal Par amet er s] )

4.3.3. Campos Relacionales

one2many: Este campo expresa una relacin uno a muchos
entre dos objetos, este campo es obsoleto utilizando una relacin
many2one

Sintaxis:
f i el ds. one2one( ' ot her . obj ect . name' , ' Fi el d Name' )
f i el ds. one2many( ' ot her . obj ect . name' , ' Fi el d r el at i on i d' , ' Fi el dname' ,
opt i onal par amet er )
* Opt i onal par amet er s:
- i nvi si bl e: Tr ue/ Fal se
- st at es: ?
- r eadonl y: Tr ue/ Fal se

many2one: Asocia este objeto con un objeto padre en una
relacin muchos a uno, por ejemplo, de muchas marcas de autos
existe una que pertenece a un vehculo en particular

Sintaxis:

f i el ds. many2one( ' ot her . obj ect . name' , ' Fi el d Name' , opt i onal par amet er )

Opt i onal par amet er s:
- ondel et e: What shoul d happen when t he r esour ce t hi s f i el d poi nt s t o i s
del et ed.
+ Pr edef i ned val ue: " cascade" , " set nul l " , " r est r i ct " , " no act i on" , " set
def aul t "
+ Def aul t val ue: " set nul l "
- r equi r ed: Tr ue
- r eadonl y: Tr ue
- sel ect : Tr ue - ( cr eat es an i ndex on t he For ei gn Key f i el d)

many2many:

Sintaxis:
f i el ds. many2many(
' ot her . obj ect . name' ,
' r el at i onobj ect ' ,
' act ual . obj ect . i d' ,
' ot her . obj ect . i d' ,
' Fi el d Name' )

Donde:
other.object.name is the other object which
belongs to the relation
relation object is the table that makes the link
20

actual.object.id and other.object.id are the
fields names used in the relation table
Ejemplo:
' cat egor y_i ds' : f i el ds. many2many(
' r es. par t ner . cat egor y' ,
' r es_par t ner _cat egor y_r el ' ,
' par t ner _i d' ,
' cat egor y_i d' ,
' Cat egor i es' )

one2one: Este campo se encuentra obsoleto por que una relacin uno a
uno es realmente una relacin muchos a uno (many2one).

4.4. Archi vo <modulo_view>.xml

Las vistas en Open ERP se dividen en tres; las tree, las form y las graphic, sin
embargo las ms utilizadas son las tree y las from y son las que se vern
continuacin. Las vistas describen como es mostrado cada objeto. Describe
como y donde es dibujado cada campo de nuestro objeto, existen dos vistas
principales:

Vistas rbol (tree)
Vistas form

4.4.1. Vistas Form

Distribuyen los campos en una forma o ventana siguiendo ciertos criterios y
personalizaciones. Los campos son distribuidos usando las siguientes reglas:

Cada campo es precedido por una etiqueta con su nombre
Los capos son puestos de izquierda a derecha, de acuerdo al orden con
que son declarados en el archivo xml
El formato siempre esta divido en cuatro espacios ocupados por dos
campos con sus respectivas etiquetas, sin embargo un campo puede
usar varias columnas como es el caso de de un campo de relacin
one2many. Tambin se puede realizar la operacin inversa, tomar varias
columnas y dividirlas en varias columnas.

4.4.2. Vistas Arbol:

Las vistas rbol son usadas como modo de listado la cual nos permete
realizar bsquedas en la pantalla. Esta vista es simple y solo tiene algunas
opciones de diseo
Los archivos xml que describen las vistas tienen el siguiente formato:
21

<?xml ver si on=" 1. 0" ?>
<openerp>
<data>
[ vi ew def i ni t i ons]
</data>
</openerp>
La definicin de la vista contiene tres tipos de tag:

<record> un tags con el atributo model=ir.ui.view, que contiene la
definicion de la vista

<record> un tags con el atributo model=ir.actions.act_window, que
contiene el tipo de accin perteneciente a esa vista

<menuitem> un tags que crea la entrada en el menu y el vinculo de la
accin.

4.4.3. Elementos de diseo

Existen varios elementos de diseo que nos permiten personalizar las vistas
form y tree de los objetos creados.

Page: Define una nueva pgina para el notebook, ejemplo:

<page st r i ng=" Or der Li ne" > . . . </page>:
El atributo string define el numero de pagina

Separator: Agrega una lnea de separacin en el formato, ejemplo:
<separator st r i ng=" Li nks" col span=" 4" />
El atributo string define la etiqueta del separador y el atributo
colspan define su tamao

Notebook: Permite distribuir los campos de la vista en diferentes
tabs que van definidos por paginas, ejemplo:
<notebook col span=" 4" >. . . . </notebook>

Group: Permite crear grupos de varias columnas, ejemplo:
<group col =" 3" col span=" 2" >
<field name=" i nvoi ced" sel ect =" 2" />
<button col span=" 1" name=" make_i nvoi ce" st at es=" conf i r med"
st r i ng=" Make I nvoi ce"
t ype=" obj ect " />
</group>
Parmetros para crear grupos
colspan: numero de columnas para usar

rowspan: numero de filas para expandir o no el grupo

22

col: numero de columnas proporcionas (to its children)

string: (optional) If set, a frame will be drawn around the
group of fields, with a label containing the string.
Otherwise, the frame will be invisible.

4.4.4. Atributos para los campos (field) dentro de la vista
select= 1 : Esta marca proporciona un criterio de bsqueda para la
vista rbol, este criterio es un campo del objeto. Cuando su valor es 1
significa que es un criterio.
colspan= 4 :El numero de columnas por las que se puede extender un
campo
readonly= 1 : Establece un widget como solo lectura
invisible= True : Oculta el campo y su etiqueta
password= True : Reemplaza la entrada de un campo con un
smbolo
string= : Cambia la etiqueta de un campo. Tambin es usado como
parmetro de bsqueda por la vista rbol.
domain: puede restringir un dominio
Example:
domai n=[ ( par t ner _i d , = , par t ner _i d) ]
widget: puede cambiar un widget.
Example:
wi dget =one2many_l i st
one2one_list
one2many_list
many2one_list
many2many
url
email
image
float_time
reference

5. MODELACIN DE OBJETOS

En el capitulo anterior se muestra que archivos debe tener un modulo bsico. A
continuacin se crea un objeto dentro del archivo <tu_modulo>.py con fines
ilustrativos:

Se crear una carpeta server/addons con el nombre del modulo (motion), adentro se
crean los archivos necesarios para un modulo bsico como muestra la ilustracin 1:


Ilustracin 1. Archivos basicos
23


5.1. Archi vo motion.py:

1 f r omosv i mpor t f i el ds, osv
2 ci mpor t t i me

3 cl ass motion_pelicula( osv. osv) :
4 _name = 'motion.pelicula'
5 _descr i pt i on = 'Pelicula'
6 _col umns = {
7 'nombre_d' : f i el ds. char ( 'Nombre director', si ze=30, r equi r ed=Tr ue) ,
8 'nombre' : f i el ds. char ( 'Nombre pelicula', si ze=30, r equi r ed=Tr ue) ,
9 'fecha' : f i el ds. dat e( 'Fecha de adquisicion', r equi r ed=Tr ue) ,
10 'costo_a' : f i el ds. i nt eger ( 'Costo alquiler') ,
11 'costo' : f i el ds. i nt eger ( 'Costo de la pelicula') ,
12 'codigo' : f i el ds. i nt eger ( 'Codigo', r equi r ed=Tr ue) ,
13 'numero' : f i el ds. i nt eger ( 'Numero de copias',
r equi r ed=Tr ue) ,
14 }
15 _def aul t s = {
16 'fecha' : l ambda *a : t i me. st r f t i me( "%Y-%m-%d") ,
17 }
18 mt . pel i cul a( )

5.1.1. Explicacin y consideraciones:

Lnea Explicacin Consideraciones
1-2 Se importar los mdulos requeridos
para trabajar con objetos Open ERP,
adems puedes importar mdulos
Python para implementaciones
superiores

3 Todos los objetos heredan de
osv.osv
Es importante recordar
que los nombres de las
clases no pueden
contener letras en
mayscula, es un error de
programacin y por lo
tanto no permite que se
instale el modulo. El
nombre de la clase lleva
una separacin _ , con
el propsito de no poner
letras en mayscula, por
convencin los nombre de
los objetos llevan primero
el nombre del modulo y
despus su propio
nombre, o su subnombre
asociado a otra clase en
caso de que se
establezcan relaciones
entre los objetos
4-5 Las clase bsicas contienen el
nombre y descripcin
El atributo name es el
nombre de la clase pero
con la excepcin de que
donde lleve una
24

separacin _ se pone un
punto .
6-14 Diccionario donde se especifican los
campos que se utilizaran en la vista
(columns)
Por ejemplo, el fields.char
crea una entrada de texto
o textbox, adems los
parmetros de los
campos nos especifican
cosas como el nombre del
campo, si es o no
requerido entre otros
parmetros.

15-17 adicionalmente existe otras
propiedades como defaults que
establecer valores predeterminados
En este diccionario
inicializamos los campos
en la vista, en este caso
se inicializa con la fecha
actual
16 Todas las clases deben ser
inicializadas


5.2. Archi vo __terp__.py:

{
" name" : " Pel i cul as Mot i on" ,
" ver si on" : " 1. 1" ,
" aut hor " : " J ose Lui s" ,
" cat egor y" : " Gener i c Modul es/ Human Resour ces" ,
" websi t e" : " ht t p: / / www. dei t ek. com" ,
" descr i pt i on" : " " " Pr ueba par a af i ci onados de pyt hon
" " " ,
' aut hor ' : ' J ose Lui s' ,
' websi t e' : ' ht t p: / / www. dei t ek. com' ,
' depends' : [ ' base' ] ,
' i ni t _xml ' : [ ] ,
' updat e_xml ' : [
' vi st a_vi ew. xml '
] ,
' demo_xml ' : [ ] ,
' i nst al l abl e' : Tr ue,
' act i ve' : Fal se,
}

5.3. Archi vo __init__.py:

i mpor t mot i on


5.4. Implementacin de una vista form

En el capitulo anterior se cre un modulo de ilustracin (motion), ahora se
procede a construir la vista form (figura 11) del objeto:

Cdigo:
<r ecor d i d=" vi st a_pel i cul a_f or m" model =" i r . ui . vi ew" >
<f i el d name=" name" >mot i on. pel i cul a. f or m</ f i el d>
<f i el d name=" model " >mot i on. pel i cul a</ f i el d>
<f i el d name=" t ype" >f or m</ f i el d>
<f i el d name=" ar ch" t ype=" xml " >
<f or mst r i ng=" Pel i cul as" >
<gr oup col =" 2" col span=" 2" >
25

<separ at or col span=" 2" st r i ng=" I nf or maci on Gener al " / >
<f i el d name=" nombr e" sel ect =" 1" / >
<f i el d name=" codi go" sel ect =" 1" / >
<f i el d name=" nombr e_d" sel ect =" 1" / >
</ gr oup>
<gr oup col =" 2" col span=" 2" >
<separ at or st r i ng=" I nf or maci on Secundar i a" col span=" 2" / >
<f i el d name=" f echa" / >
<f i el d name=" cost o" / >
<f i el d name=" numer o" / >
<f i el d name=" cost o_a" / >
</ gr oup>
<not ebook col span=" 4" >
<page st r i ng=" Not as" >
<f i el d col span=" 4" nol abel =" 1" name=" not as" / >
</ page>
</ not ebook>
</ f or m>
</ f i el d>
</ r ecor d>

Vista:

Figura 11. Vista form del objeto motion.pelicula
5.5. Implementacin de una vista tree

Como se vio anterior mente existen dos tipos de vista, las form y las tree (arbol),
las vistas tree son usadas cuando trabajamos en el modo lista y en la mscara de
bsqueda. Estas vistas son ms simples que forms y por lo tanto tiene menos
opciones. El formato para la vista rbol (figura 1) en xml del objeto que se
construyo en el capitulo anterior seria:

Cdigo:
<r ecor d i d=" vi st a_pel i cul as_ar bol " model =" i r . ui . vi ew" >
<f i el d name=" name" >mot i on. pel i cul a. t r ee</ f i el d>
<f i el d name=" model " >mot i on. pel i cul a</ f i el d>
<f i el d name=" t ype" >t r ee</ f i el d>
<f i el d name=" ar ch" t ype=" xml " >
<t r ee st r i ng=" Pel i cul as" >
<f i el d name=" nombr e" / >
<f i el d name=" codi go" / >
<f i el d name=" nombr e_d" / >
</ t r ee>
</ f i el d>
</ r ecor d>

26

Vista:

Figura 12. Vista tree del objeto motion.pelicula

Como se puede observar es muy similar al formato de la vista form, solo cambia
su extensin .tree. esta vista es mas sencilla.

Se debe tener en cuenta que aun no puede acceder a las vistas debido a que
aun no se han configurado los mens y sus acciones por lo que las figuras nos
simplemente ilustrativas.

6. CREACIN DE MENS Y ACCIONES

6.1. Mens

Los mens en Open ERP poseen las siguientes caractersticas:

Id: Todos los mens necesitan un id para poder ser identificados por Open
ERP dentro de la tabla de items

Name: Especifica la posicin jerrquica y el nombre del men o entrada

Action: Identifica la accin asociada al men (este campo no es
obligatorio)

Icon: Especifica el icono que ser utilizado por el men
Los iconos disponibles son : STOCK_ABOUT, STOCK_ADD,
STOCK_APPLY, STOCK_BOLD, STOCK_CANCEL, STOCK_CDROM,
STOCK_CLEAR, STOCK_CLOSE, STOCK_COLOR_PICKER,
STOCK_CONNECT, STOCK_CONVERT, STOCK_COPY, STOCK_CUT,
STOCK_DELETE, STOCK_DIALOG_AUTHENTICATION,
STOCK_DIALOG_ERROR, STOCK_DIALOG_INFO,
STOCK_DIALOG_QUESTION, STOCK_DIALOG_WARNING,
27

STOCK_DIRECTORY, STOCK_DISCONNECT, STOCK_DND,
STOCK_DND_MULTIPLE, STOCK_EDIT, STOCK_EXECUTE,
STOCK_FILE, STOCK_FIND, STOCK_FIND_AND_REPLACE,
STOCK_FLOPPY, STOCK_GOTO_BOTTOM, STOCK_GOTO_FIRST,
STOCK_GOTO_LAST, STOCK_GOTO_TOP, STOCK_GO_BACK,
STOCK_GO_DOWN, STOCK_GO_FORWARD, STOCK_GO_UP,
STOCK_HARDDISK, STOCK_HELP, STOCK_HOME, STOCK_INDENT,
STOCK_INDEX, STOCK_ITALIC, STOCK_J UMP_TO,
STOCK_J USTIFY_CENTER, STOCK_J USTIFY_FILL,
STOCK_J USTIFY_LEFT, STOCK_J USTIFY_RIGHT,
STOCK_MEDIA_FORWARD, STOCK_MEDIA_NEXT,
STOCK_MEDIA_PAUSE, STOCK_MEDIA_PLAY,
STOCK_MEDIA_PREVIOUS, STOCK_MEDIA_RECORD,
STOCK_MEDIA_REWIND, STOCK_MEDIA_STOP,
STOCK_MISSING_IMAGE, STOCK_NETWORK, STOCK_NEW,
STOCK_NO, STOCK_OK, STOCK_OPEN, STOCK_PASTE,
STOCK_PREFERENCES, STOCK_PRINT, STOCK_PRINT_PREVIEW,
STOCK_PROPERTIES, STOCK_QUIT,STOCK_REDO,
STOCK_REFRESH, STOCK_REMOVE, STOCK_REVERT_TO_SAVED,
STOCK_SAVE, STOCK_SAVE_AS, STOCK_SELECT_COLOR,
STOCK_SELECT_FONT, STOCK_SORT_ASCENDING,
STOCK_SORT_DESCENDING, STOCK_SPELL_CHECK, STOCK_STOP,
STOCK_STRIKETHROUGH, STOCK_UNDELETE, STOCK_UNDERLINE,
STOCK_UNDO, STOCK_UNINDENT, STOCK_YES, STOCK_ZOOM_100,
STOCK_ZOOM_FIT, STOCK_ZOOM_IN, STOCK_ZOOM_OUT, terp-
account, terp-crm, terp-mrp, terp-product, terp-purchase, terp-sale, terp-
tools, terp-administration, terp-hr, terp-partner, terp-project, terp-report,
terp-stock

Groups: Especifica los grupos que pueden ver el men

Sintaxis para un men:

<menui t emi d=" menui t em_i d"
name=" Posi t i on/ Of / The/ Menu/ I t em/ I n/ The/ Tr ee"
act i on=" act i on_i d"
i con=" NAME_FROM_LI ST"
gr oups=" gr oupname"
sequence=" <i nt eger >" / >

Para la vista creada en el capitulo anterior se agrega un men raz (figura 13)
con las siguientes lneas:

<menui t emi con=" STOCK_MEDI A_PLAY"
i d=" menu_r ai z_mot i on"
name=" Mot i on Pel i cul as" / >

Y los submens (figura 3):

<menui t em
i d=" menu_mot i on_r epor t e"
name=" Repor t es"
par ent =" mot i on. menu_r ai z_mot i on" / >
<menui t em
i d=" menu_mot i on_pel i "
name=" Pel i cul as"

28

Vista:

Figura 13. Mens
6.2. Acciones

Las acciones determinan el comportamiento del sistema en respuesta a las
acciones de usuario, las tipos de acciones son:
Window: Abren una nueva ventana
Report: Imprimen un reporte
Custom Report: Personaliza los reportes
Wizard: Iniciar un Wizard
Execute: Ejecutar un mtodo del lado del servidor
Group: Rene algunas acciones en un grupo

A continuacin se construye una nueva accin para la vista form y tree del objeto
motion.pelicula que creara la entrada para el formulario.

6.2.1. Acciones Form:

<r ecor d i d=" abr i r _vi st a_nueva_pel i cul a" model =" i r . act i ons. act _wi ndow" >
<f i el d name=" name" >Nueva pel i cul a</ f i el d>
<f i el d name=" r es_model " >mot i on. pel i cul a</ f i el d>
<f i el d name=" vi ew_t ype" >f or m</ f i el d>
<f i el d name=" vi ew_mode" >f or m, t r ee</ f i el d>
</ r ecor d>

Enlace entre la accin y el submen:

<menui t em
act i on=" abr i r _vi st a_nueva_pel i cul a"
i d=" menu_abr i r _vi st a_nueva_pel i cul a"
par ent =" menu_mot i on_pel i " / >
par ent =" mot i on. menu_r ai z_mot i on" / >

6.2.2. Acciones Tree:

<r ecor d i d=" abr i r _vi st a_pel i cul as_ar bol " model =" i r . act i ons. act _wi ndow" >
<f i el d name=" name" >Todas l as pel i cul as</ f i el d>
<f i el d name=" r es_model " >mot i on. pel i cul a</ f i el d>
<f i el d name=" vi ew_t ype" >t r ee</ f i el d>
<f i el d name=" vi ew_mode" >t r ee, f or m</ f i el d>
<f i el d name=" vi ew_i d" r ef =" vi st a_pel i cul as_ar bol " / >
<f i el d name=" domai n" >[ ] </ f i el d>
</ r ecor d>

Enlace entre la accin y el submen:

<menui t em
act i on=" abr i r _vi st a_pel i cul as_ar bol "
i d=" menu_abr i r _vi st a_pel i cul as_ar bol "
par ent =" menu_mot i on_pel i " / >

29

6.2.3. Archi vo motion_view.xml:

<?xml ver si on=" 1. 0" encodi ng="ut f - 8" ?>
<opener p>
<dat a>
<menui t emi con=" STOCK_MEDI A_PLAY"
i d=" menu_r ai z_mot i on"
name="Mot i on Pel i cul as" / >

<menui t em
i d=" menu_mot i on_r epor t e"
name="Repor t es"
par ent =" mot i on. menu_r ai z_mot i on" / >

<menui t em
i d=" menu_mot i on_pel i "
name="Pel i cul as"
par ent =" mot i on. menu_r ai z_mot i on" / >

<r ecor d i d=" vi st a_pel i cul a_f or m" model =" i r . ui . vi ew" >
<f i el d name=" name">mot i on. pel i cul a. f or m</ f i el d>
<f i el d name=" model " >mot i on. pel i cul a</ f i el d>
<f i el d name=" t ype">f or m</ f i el d>
<f i el d name=" ar ch" t ype=" xml " >
<f or mst r i ng="Pel i cul as" >
<gr oup col =" 2" col span=" 2">
<separ at or col span=" 2" st r i ng=" I nf or maci on
Gener al " / >
<f i el d name=" nombr e" sel ect =" 1" / >
<f i el d name=" codi go" sel ect =" 1" / >
<f i el d name=" nombr e_d" sel ect =" 1" / >
</ gr oup>
<gr oup col =" 2" col span=" 2">
<separ at or st r i ng=" I nf or maci on Secundar i a"
col span=" 2" / >
<f i el d name=" f echa" / >
<f i el d name=" cost o" / >
<f i el d name=" numer o"/ >
<f i el d name=" cost o_a" / >
</ gr oup>
<not ebook col span=" 4" >
<page st r i ng=" Not as">
<f i el d col span=" 4" nol abel =" 1"
name="not as" / >
</ page>
</ not ebook>

</ f or m>
</ f i el d>
</ r ecor d>

<r ecor d i d=" abr i r _vi st a_nueva_pel i cul a" model =" i r . act i ons. act _wi ndow" >
<f i el d name=" name">Nueva pel i cul a</ f i el d>
<f i el d name=" r es_model " >mot i on. pel i cul a</ f i el d>
<f i el d name=" vi ew_t ype" >f or m</ f i el d>
<f i el d name=" vi ew_mode" >f or m, t r ee</ f i el d>
</ r ecor d>

<menui t em
act i on=" abr i r _vi st a_nueva_pel i cul a"
i d=" menu_abr i r _vi st a_nueva_pel i cul a"
par ent =" menu_mot i on_pel i " / >

<r ecor d i d=" vi st a_pel i cul as_ar bol " model =" i r . ui . vi ew" >
<f i el d name=" name">mot i on. pel i cul a. t r ee</ f i el d>
<f i el d name=" model " >mot i on. pel i cul a</ f i el d>
<f i el d name=" t ype">t r ee</ f i el d>
<f i el d name=" ar ch" t ype=" xml " >
<t r ee st r i ng="Pel i cul as" >
<f i el d name=" nombr e" / >
<f i el d name=" codi go" / >
<f i el d name=" nombr e_d"/ >
</ t r ee>
</ f i el d>
</ r ecor d>

<r ecor d i d=" abr i r _vi st a_pel i cul as_mi _l i st a" model =" i r . act i ons. act _wi ndow" >
<f i el d name=" name">Al l Pel i cul as</ f i el d>
<f i el d name=" r es_model " >mot i on. pel i cul a</ f i el d>
<f i el d name=" vi ew_t ype" >f or m</ f i el d>
<f i el d name=" vi ew_mode" >t r ee, f or m</ f i el d>
30

<f i el d name=" domai n" >[ ] </ f i el d>
</ r ecor d>

<menui t em
act i on=" abr i r _vi st a_pel i cul as_mi _l i st a"
i d=" menu_abr i r _vi st a_pel i cul as_ar bol "
par ent =" menu_mot i on_pel i " / >

</ dat a>
</ opener p>



NOTA: Para probar mdulos nuevos en Open ERP se debe reiniciar el
servidor, el programa se encuentra localizado en la carpeta server/service.
Despus de realizar esto se debe actualizar la lista de modulo, finalmente se
instala el modulo. En la versin 5.0.7 es posible actualizar la lista de mdulos
sin reiniciar el servidor.

7. HERRAMIENTAS DE MODELADO (DIA UML)

DIA es un programa de propsito general para la creacin de diagramas, desarrolla-
da como parte del proyecto GNOME bajo licencia GPL. Est concebido de forma
modular, con diferentes paquetes de formas para diferentes necesidades.
Se puede utilizar para dibujar diferentes tipos de diagramas. Actualmente se incluyen
diagramas entidad-relacin, diagramas UML, diagramas de flujo, diagramas
de redes, diagramas de circuitos elctricos, etc. Nuevas formas pueden ser fcilmen-
te agregadas, dibujndolas con un subconjunto de SVG e incluyndolas en un archi-
vo XML.
El formato para leer y almacenar grficos es XML (comprimido con gzip, para ahorrar
espacio). Puede producir salida en los formatos EPS, SVG y PNG.
Tambin conviene recordar que Dia, gracias al paquete dia2code, puede generar el
esqueleto del cdigo a escribir, si utilizramos con tal fin un UML.
Esta herramienta tambin puede generar mdulos Open ERP agregando el plugin
(codegen_openerp.py) que permite exportar diagramas de clases.
7.1. Instalacin de Dia UML
Instalar Phyton2.3 o Phyton2.4
Descargar alguna de las ltimas versiones de Dia con soporte para Python
Agregar el complemento para Python durante la instalacin de Dia
Descargar el plugin codegen_openerp.py y descomprimirlo en la carpeta
C:\Archivos de programa\Dia o donde tengas instalado Dia. Puedes des-
cargar el plugin del grupo de google:
http://groups.google.com.co/group/openerpamerica



31

8. MODELADO DE CLASES

Como se explico anteriormente es muy til utilizar Dia para crear mdulos
Open ERP, debido a que el plugin genera todos los componentes bsicos de
un modulo, si se desean crear reportes, flujos de trabajo o mtodos para las
clases se debe aadir el cdigo y realizar todos los cambios pertinentes. De
tal manera que para explicar un poco el manejo de Dia se creara el modulo
motion que se vena trabajando anteriormente:

Primero se debe configurar DIA para utilizar diagramas UML como
muestra la figura 14.


Figura 14. Seleccin de diagramas UML para trabajar con clases
Se debe arrastra el icono de las clases agregando todas las que sean
necesarias, en la figura 15 se muestra la ventana donde deben ir la
configuracin de la clase, atributos, operaciones, plantillas y estilo.
Para crear mdulos solo se necesitan los atributos. El nombre de la
clase debe ser genrico y sin maysculas, en Open ERP se utiliza el
punto para indicar pertenencia entre el modulo y sus clases (relaciones
de clases), El estereotipo es el men donde aparecer nuestro objeto,
adicionalmente se pueden agregar comentarios que permite
documentar nuestro cdigo.

32


Figura 15. Asignando nombre y estereotipos de una clase

Despus de bautizar nuestra clase se procede a agregar los atributos
como muestra la figura 6, son simplemente los campos del diccionario
columns.


Figura 16. Campos del atributo _columns

33








Se puede agregar (no es necesario) relaciones entre nuestras clase
como muestra la figura 17.


Figura 17. Relaciones entre clases

Se debe exportar el diagrama como un modulo Open ERP como
muestra la figura 18


Figura 18. Exportacin de un diagrama como modulo Open ERP

NOTA: Algunas veces se debe revisar el cdigo generado por Dia,
debido a que se puede generar el cdigo en desorden, por ejemplo en
34

una relacin many2one primero debe existir la clase relacionada antes
de crear la relacin. En nuestro caso primero debe existir
motion.genero y despus motion.pelicula, tambin es aconsejable
reiniciar Dia cuando se haga la exportacin debido a que se ha
identificado un error cuando se han realizado ms de una exportacin
ya que se replica el cdigo (este error puede ser corregido en
versiones posteriores por lo que esta nota puede no ser necesaria en
algunos casos).

Finalmente se puede instalar el modulo importando desde Open ERP
como muestra la figura 19.


Figura 19. Importacin de mdulos en Open ERP

9. RELACIONES

Como se explico en el sistema de archivos los objetos pueden establecer relaciones
entre s por medio de uno o varios campos del atributo columns. En este captulo se
mostrara algunos ejemplos en el modulo que se viene trabajando.

9.1. Relacin many2one

Se empieza por establecer un objeto relacionado con una pelcula, en este caso
el gnero de la pelcula, de muchos gneros hay una que pertenece a la pelcula
(una pelcula puede estar relacionada con varios gneros de varias formas, sin
embargo esto depende del punto de vista), por lo tanto es una relacin
many2one:

Archi vo motion.py:

1 from osv import fields, osv
2 cimport time

3 class motion_genero(osv.osv):
4 _name = 'motion.genero'
5 _desciption = 'Genero'
6 _columns = {
5 'name':fields.char('Codigo',size=30,required=True)
7 'gen' : fields.char('Genero', size=30, required=True),
8 }
9 _sql_constraints = [
10 ('name_uniq', 'unique (name)',
11 'El nombre del codigo debe ser unico !'),
12 ('gen_uniq', 'unique (gen)',
35

13 'El nombre del genero debe ser unico !')
14 ]
15 motion_genero()
16
17
18 class motion_pelicula(osv.osv):
19 _name = 'motion.pelicula'
20 _description = 'Pelicula'
21 _columns = {
22 'nombre_d' : fields.char('Nombre director', size=30, required=True),
23 'nombre' : fields.char('Nombre pelicula', size=30, required=True),
24 'fecha' : fields.date('Fecha de adquisicion', required=True),
25 'costo_a' : fields.integer('Costo alquiler'),
26 'costo' : fields.integer('Costo de la pelicula'),
27 'codigo' : fields.integer('Codigo', required=True),
28 'numero' : fields.integer('Numero de copias', required=True),
29 'gen' : fields.many2one('motion.genero',Genero,
required=True),
30 }
31 _defaults = {
32 'fecha' : lambda *a : time.strftime("%Y-%m-%d"),
33 }
34 mt.pelicula()


9.1.1. Explicacin y consideraciones:

Lnea Explicacin Consideraciones
9-14 El campo _sql_constraints perime
restringir la base de datos, en este
caso no se permiten datos repetidos
en los campos

29 Relacin many2one. Este campo
tiene una relacin de muchos a uno,
sea que de muchos gneros, hay
uno que pertenece a nuestra
pelcula, tambin tenemos que
agregar el campo a la vistas
IMPORTANTE: Es muy
importante crear primero
el objeto con el que se
establece la relacin y
despus el objeto
relacionado cuando se
est trabajando con un
campo many2one, de lo
contrario Open ERP
arrojara un error en la
instalacin debido a que
se est accediendo a una
relacin entre un objeto
que aun no existe


9.1.2. Vista del objeto relacionado:

<r ecor d i d=" vi st a_gener o_ar bol " model =" i r . ui . vi ew" >
<f i el d name=" name" >mot i on. gener o. t r ee</ f i el d>
<f i el d name=" model " >mot i on. gener o</ f i el d>
<f i el d name=" t ype" >t r ee</ f i el d>
<f i el d name=" ar ch" t ype=" xml " >
<t r ee st r i ng=" Gener o" >
<f i el d name=" gen" / >
<f i el d name=" name" / >
</ t r ee>
</ f i el d>
</ r ecor d>

<r ecor d i d=" vi st a_gener o_vi st a" model =" i r . ui . vi ew" >
<f i el d name=" name" >mot i on. gener o. f or m</ f i el d>
36

<f i el d name=" model " >mot i on. gener o</ f i el d>
<f i el d name=" t ype" >f or m</ f i el d>
<f i el d name=" ar ch" t ype=" xml " >
<f or mst r i ng=" Gener o" >
<f i el d name=" gen" sel ect =" 1" / >
<f i el d name=" name" sel ect =" 1" / >
</ f or m>
</ f i el d>
</ r ecor d>

<r ecor d i d=" acci on_gener o" model =" i r . act i ons. act _wi ndow" >
<f i el d name=" name" >Gener o</ f i el d>
<f i el d name=" t ype" >i r . act i ons. act _wi ndow</ f i el d>
<f i el d name=" r es_model " >mot i on. gener o</ f i el d>
<f i el d name=" vi ew_t ype" >f or m</ f i el d>
</ r ecor d>


Nota: Agregar el anterior cdigo a archivo xml de la vista original (El men ya
se encuentra creado*), tambin se puede agregar la lnea; <f i el d
name=" gener o" / >, a la vista del formulario de las pelculas.

9.2. Relacin one2many
Para la relacin one2many es la contraria a la many2one, esto significa que hay
muchos objetos que tienen relacin con uno en especfico. Se mostrara un
ejemplo; suponga que un cliente de pelculas quisiera ver cuntas pelculas tiene
alquiladas, debe aparecer entonces listadas estas pelculas en la vista de un
usuario, el modelo est representado por el diagrama de clases de la figura 20:

Figura 20. Relacin one2many entre la clase motion.cliente y motion.pelicula

37

Como muestra la muestra la anterior figura, existen realmente dos relaciones
una relacin one2many entre motion.cliente y motion.pelicula, y otra relacin
dbil many2one entre motion.pelicula y motion.cliente, esta relacin es dbil
porque el campo no es requerido para establecer la relacin one2many, sin
embargo debe estar presente. Al generar el modulo con Dia se puede eliminar
el campo cliente_id de la vista de motion.pelicula, la vista del cliente se
muestra en la figura 21.


Figura 21. Vista de la pantalla de un cliente

Como muestra la figura 21 se creara un listado de pelculas para ese cliente.

10. HERENCIA

10.1. Herencia de objetos
En Open ERP existen tres tipos de herencia, herencia por prototipo, por extensin y
por delegacin (herencia mltiple), todas son completamente diferentes y
constituyen una gran herramienta para el desarrollo de los mdulos en Open ERP.
En la herencia por prototipo y por extensin se debe agregar el siguiente atributo:
_i nher i t =' obj ect . name'
Donde object.name es el objeto del cual se hereda. Veamos los tipos de herencia:
10.1.1. Herencia por extensin
Al igual que en programacin orientada a objetos el olas nuevas clases creadas
heredan los atributos y los mtodos de la superclase padre, sin embargo la
diferencia radica en que el objeto afectado es el padre y no el hijo, ejemplo:
class res_partner(osv.osv):
_name = 'res.partner'
_inherit="res.partner"
_columns = {
'codEmpresaCliente': fields.integer('Codigo Empresa Cliente',size=4),
'nit': fields.char('NIT',size=10),
'ciudades_cod_dane_ciudad': fields.integer('Codigo de Ciudades',size=3),
38

'dv': fields.integer('Digito de Verificacion',size=3),
'tel1': fields.char('Telefono 1',size=16),
'tel2': fields.char('Telefono 2',size=16),
'cel': fields.char('Celular',size=16),
'email': fields.char('Email',size=100),
'fax': fields.char('FAX',size=100),
'direccion': fields.char('Direccion',size=200),
'autoretenedor': fields.boolean('Autoretenedor'),
'granContribuyente': fields.boolean('Gran Contribuyente'),
'diponibilidad': fields.boolean('Disponibilidad'),
'es_empleado': fields.boolean('Es Empleado'),
}
res_partner()


En el anterior ejemplo se puede observar el uso del campo _inherit, el cual
especifica la superclase de la cual se hereda.
Es importante apreciar que el campo _name tiene el mismo valor que el
campo _inherit, sin embargo el nombre general de la clase puede ser dife-
rente o igual a la clase original sin afectar el resultado de la operacin (heren-
cia). Con la herencia establecida se especifica que los nuevos campos del
atributo _columns creados en la nueva clase podrn ser vistos en las vistas
form y tree de la clase original (superclase), En el ejemplo todos los campos
sern agregados a la superclase, cabe resaltar que para que los campos sean
visibles en la vista se debe heredar la vista de la superclase en el archivo
<modulo_view>. xml y agregar estos campos. Las figura 22 muestra la vista
antes y la figura 23 despus de la herencia


Figura 22. Vista web del objeto res.partner antes de instalar la herencia

39


Figura 23. Vista web del objeto res.partner despus de instalar el modulo que contiene la herencia

10.1.2. Herencia por prototipo

En este tipo de herencia la diferencia radica en que la nueva clase copia todos
los atributos y mtodos de su padre (superclase), ejemplo:

cl ass ot her _mat er i al ( osv. osv) :
_name = ' ot her . mat er i al '
_i nher i t = ' net wor k. mat er i al '
_col umns = {
' manuf _war r ant y' : f i el ds. bool ean( ' Manuf act ur er war r ant y?' ) ,
}
_def aul t s = {
' manuf _war r ant y' : l ambda *a: Fal se,
}
ot her _mat er i al ( )

En este ejemplo el campo _inherit y _name son diferentes debido a que la
tabla (el objeto nuevo) es el que est operando y no su padre, por lo tanto sus
atributos y mtodos no sern reconocidos en las vistas de la superclase.

10.1.3. Herencia por delegacin

La herencia por delegacin es parecida a la herencia mltiple de c++, en este
caso el objeto heredad de mltiples tablas, la tcnica cosiste en agregar una co-
lumna a la tabla al objeto heredado. Estas columnas guardaran una clave fora-
nea (id de otra tabla). Ejemplo:

cl ass t i ny_obj ect ( osv. osv)
_name = ' t i ny. obj ect '
_t abl e = ' t i ny_obj ect '
_i nher i t s = {
' t i ny. obj ect _a' : ' obj ect _a_i d' ,
' t i ny. obj ect _b' : ' obj ect _b_i d' ,
. . . ,
' t i ny. obj ect _n' : ' obj ect _n_i d'
}
( . . . )

Los valores object_a_id, object_b_id, object_n_id son de tipo string y deter-
mina el titulo de las columnas las cuales son las claves forneas de ti-
ny.object_a, tiny.object_n que son guardadas.

40

El objeto tiny.object hereda todos las columnas y mtodos de los n objectos ti-
ny.object_a, tiny.object_n.

10.2. Herencia de vistas
Cuando se crean objetos heredades a veces es necesario modificar la vista del
objeto por lo tanto es necesario heredar tambin la vista de la superclase, as se
puede agregar, quitar o modificar los campos que se deseen. Ejemplo:
<r ecor d model =" i r . ui . vi ew" i d=" vi ew_par t ner _f or m" >
<f i el d name=" name" >r es. par t ner . f or m. i nher i t </ f i el d>
<f i el d name=" model " >r es. par t ner </ f i el d>
<f i el d name=" i nher i t _i d" r ef =" base. vi ew_par t ner _f or m" / >
<f i el d name=" t ype" >f or m</ f i el d>
<f i el d name=" ar ch" t ype=" xml " >
<not ebook posi t i on=" i nsi de" >
<page st r i ng=" Rel at i ons" >
<f i el d name=" r el at i on_i ds" col span=" 4" nol abel =" 1" / >
</ page>
</ not ebook>
</ f i el d>
</ r ecor d>

Es posible anexar o editar el contenido de un tag. Los tag tienen algunos
atributos que permiten especificar la posicin en la cual se desean hacer
modificaciones, en el ejemplo se agrega una pgina a la vista res.partner.form
en el modulo base.

Se pueden utilizar los siguientes valores para indicar la posicin:
inside (default): Este valor indica que se anexara un tag dentro.
after: Se agrega un contenido despus del tag
before: Se agregara un contenido despus del tag
replace: Se remplazara el contenido de un tag
Ejemplos de herencias de vistas

Ejemplo:

<r ecor d model =" i r . ui . vi ew" i d=" vi ew_par t ner _f or m1" >
<f i el d name=" name" >r es. par t ner . f or m. i nher i t 1</ f i el d>
<f i el d name=" model " >r es. par t ner </ f i el d>
<f i el d name=" i nher i t _i d" r ef =" base. vi ew_par t ner _f or m" / >
<f i el d name=" t ype" >f or m</ f i el d>
<f i el d name=" ar ch" t ype=" xml " >
<page st r i ng=" Ext r a I nf o" posi t i on=" r epl ace" >
<f i el d name=" r el at i on_i ds" col span=" 4" nol abel =" 1" / >
</ page>
</ f i el d>
</ r ecor d>

Reemplazara el contenido de la pagina Extra info por el campo
relation_ids.

Ejemplo:

<record model="ir.ui.view" id="view_partner_form2">
<field name="name">res.partner.form.inherit2</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<f i el d name=" t ype" >f or m</ f i el d>
<field name="arch" type="xml">
41

<field name="lang" position="replace"/>
</field>
</record>

Elimina un campo de la vista form mediante el argumento replace

Ejemplo:

<record model="ir.ui.view" id="view_partner_form3">
<field name="name">res.partner.form.inherit3</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="type">form</field>
<field name="arch" type="xml">
<field name="lang" position="before"/>
<field name="relation_ids"/>
</field>
</record>


Agrega el campo relation_ids antes del campo especificado lang

Ejemplo:

<r ecor d model =" i r . ui . vi ew" i d=" vi ew_r es_par t ner _f or m" >
<f i el d name=" name" >r es. par t ner . f or m</ f i el d>
<f i el d name=" model " >r es. par t ner </ f i el d>
<f i el d name=" i nher i t _i d" r ef =" base. vi ew_par t ner _f or m" / >
<f i el d name=" t ype" >f or m</ f i el d>
<f i el d name=" ar ch" t ype=" xml " >
<page st r i ng=" Gener al " posi t i on=" bef or e" >
<page st r i ng=" I nf or maci on Gener al " >
<f i el d name=" cod_empr esa_cl i ent e" sel ect =" 1" / >
<f i el d name=" ni t " sel ect =" 2" / >
<f i el d name=" dv" sel ect =" 0" / >
<f i el d name=" t el 1" sel ect =" 0" / >
<f i el d name=" t el 2" sel ect =" 0" / >
<f i el d name=" cel " sel ect =" 0" / >
<f i el d name=" emai l " sel ect =" 0" / >
<f i el d name=" f ax" sel ect =" 0" / >
<f i el d name=" di r ecci on" sel ect =" 0" / >
<f i el d name=" es_empl eado" sel ect =" 0" / >
<f i el d name=" desponi " sel ect =" 0" / >
<f i el d name=" gr an_cont r i buyent e" sel ect =" 0" / >
<f i el d name=" aut or et enedor " sel ect =" 0" / >
</ page>
</ page>
</ f i el d>
</ r ecor d>

En este ejemplo se crea una nueva pgina antes de la pgina general

Ejemplo:

<r ecor d model =" i r . ui . vi ew" i d=" vi ew_par t ner _f or m3" >
<f i el d name=" name" >r es. par t ner . f or m. i nher i t 4</ f i el d>
<f i el d name=" model " >r es. par t ner </ f i el d>
<f i el d name=" i nher i t _i d" r ef =" base. vi ew_par t ner _f or m" / >
<f i el d name=" t ype" >f or m</ f i el d>
<f i el d name=" ar ch" t ype=" xml " >
<f i el d name=" l ang" posi t i on=" af t er " / >
<f i el d name=" r el at i on_i ds" / >
</ f i el d>
</ r ecor d>

Agrega el campo relation_ids despus del campo lang


42

11. BIBLIOGRAFA


Open ERP. 2001. ltima fecha de actualizacin: 2001. Fecha de acceso:
27 de Marzo de 2010. http://www.openerp.com/
Spain OpenERP Alliance. Fecha de acceso: 30 de Marzo de 2010.
http://www.openerpspain.com
Wikipedia. 2010. ltima fecha de actualizacin: 24 Marzo 2010. Fecha de
acceso: 4 de Marzo de 2010. http://es.wikipedia.org/wiki/OpenERP
Wikipedia. 2010. ltima fecha de actualizacin: 11 Marzo 2010. Fecha de
acceso: 7 de Marzo de 2010. http://en.wikipedia.org/wiki/Dia_(software)
www.aulaerp.com. . Fecha de acceso: 17 de Marzo de 2010.
http://groups.google.com.co/group/openerpamerica. visita este portal para
ms informacin acerca de este tutorial

También podría gustarte