SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
TUTORIAL BASICO
OPEN ERP (V. 5.0.7)




    DESARROLLADORES OPEN ERP




     José Luis García Hernández
       Universidad de Antioquia
        Ingeniería de Sistemas
              Colombia
               Medellín
TUTORIAL BASICO OPEN ERP (V. 5.0.7)

Por: José Luis García Hernández

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




         : Copiar, distribuir y comunicar públicamente la obra.




         : Hacer obras derivadas

Bajo las siguientes condiciones:




         : Reconocimiento — Debe reconocer los créditos 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, sólo puede distribuir la obra generada bajo
una licencia idéntica 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 legítimos 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.




                                                                            2
Nota: Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de
la licencia de obra.
Para más información sobre términos de la licencia diríjase a la página
http://creativecommons.org/

Donaciones
Si este tutorial es de tu agrado puedes contribuir dando un pequeño aporte de
dinero, así podrás acceder a decenas de ejemplos, módulos, asesorías,
incluyendo tutoriales avanzados y tutoriales afines a Open ERP que
contribuirán a tu formación como desarrollador.

Tipos de Donación:

       •   Nivel 1
           Inversión: 5 dólares.
           Acceso: Asesorías y ejemplos

       •   Nivel 2
           Inversión: 10 dólares.
           Acceso: Asesorías y ejemplos, Tutoriales Básicos y afines.

       •   Nivel 2
           Inversión: 15 dólares.
           Acceso: Asesorías y ejemplos, Tutoriales Básicos, avanzados y
           afines

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




                                                                                       3
TABLA DE CONTENIDO



1. INTRODUCCION           …………………………………………………………6
2. QUE ES OPEN ERP        …………………………………………………………6
   2.1. Ventajas de Open ERP      …………………………………………………7
   2.2. Integración con otros software   …………………………………………8
3. INSTALACIÓN DE OPEN ERP               …………………………………………9
4. SISTEMA DE ARCHIVOS BÁSICOS …………………………………………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 básicos        …………………………………………………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 diseño          …………………………………………21
     4.4.4. Atributos para los campos …………………………………………22
5. MODELACIÓN DE OBJETOS …………………………………………………22
   5.1. Archivo <modulo>.py       …………………………………………………23
     5.1.1. Explicación y consideraciones   …………………………………23
   5.2. Archivo __terp__.py       …………………………………………………24
   5.3. Archivo __init__.py       …………………………………………………24
   5.4. Implementación de una vista Form    …………………………………24
   5.5. Implementación de una vista Tree    …………………………………25
6. CREACIÓN DE MENÚS 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



                                                             4
7. HERRAMIENTAS DE MODELADO (DIA UML)          …………………………30
8. MODELADO DE CLASES          …………………………………………………31
9. RELACIONES     …………………………………………………………………34
   9.1. Relación many2one      …………………………………………………34
     9.1.1. Explicación y consideraciones   …………………………………35
   9.2. Relación one2many      …………………………………………………36
10. HERENCIA      …………………………………………………………………37
   10.1.   Herencia de objetos …………………………………………………37
     10.1.1.      Herencia por extensión    …………………………………37
     10.1.2.      Herencia por prototipo    …………………………………39
     10.1.3.      Herencia por delegación   ………………………………….39
   10.2.   Herencia de vistas ………………………………………………….40
11. BIBLIOGRAFÍA ………………………………………………………………….41




                                                           5
1. INTRODUCCIÓN

El Open ERP (Enterprise Resource Planning, ERP por sus siglas en inglés) es
un sistema planeador de recursos empresariales que permite realizar una
gestión integrada de los recursos. Entre sus características están la
contabilidad analítica, contabilidad financiera, gestión de almacenes/inventario,
gestión de ventas y compras, automatización de tareas, campañas de
marketing, ayuda técnica (Helpdesk), y punto de venta, dentro de la
construcción misma del software se hace uso intensivo de flujos de trabajo que
se puede integrar con los módulos haciendo la modificación de aprobación y en
general de cualquier proceso adaptable.

Este Tutorial básico de Open ERP provee una introducción técnica y al mismo
tiempo completa de cómo implementar Open ERP en tu computador y aprender
a construir diferentes tipos modulos dependiendo de necesidades especificas.
El tutorial incluye desde la instalación 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 más
divertido y proporciona una gran satisfacción cuando se da con la solución
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 almacén
e inventario, entre otras. Open ERP soporta múltiples monedas, múltiples com-
pañías y múltiples contabilidades; además incorpora funcionalidades de gestión
de documentos para agilizar la colaboración 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+, también hay una alter-
nativa construida sobre Qt. Adicionalmente Open ERP tiene un cliente para



                                                                               6
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 adecuación e implantación sea
limpia teniendo un esquema de arquitectura menor que otras soluciones.

Dentro de la construcción misma del software se hace uso intensivo de flujos
de trabajo que se puede integrar con los módulos haciendo fácil la modificación
de y en general de cualquier proceso adaptable.


   2.1. Ventajas de OpenERP

   Completo
   En estos momentos existen más de 300 módulos específicos para distintos
   sectores de actividad.

   Potente
   OpenERP añade en la mayor parte de sus áreas herramientas de análisis y
   generación de reportes, con lo que la gestión y visualización de la informa-
   ción se simplifica.

   Flexible
   Las modificaciones y adaptaciones de código 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 estándares, abierto y ampliamente soportado.
   Existe una importante comunidad de desarrolladores que están constante-
   mente fortaleciendo el proyecto (amplia documentación, foros, cvs, mailing,
   listas, etc.).

   Accesible
   Open ERP se suministra bajo licencia GPL, por lo que no se abonan licen-
   cias de adquisición. Ud. sólo paga por los costos de integración y adapta-
   ción a las necesidades de su empresa.

   Avanzado técnicamente
      •    Usa doble entrada en la gestión de inventarios.

      •    Soporta múltiples vistas de la contabilidad.


                                                                                 7
•   Está preparado para conformar normas ISO9001.

   •   Funciona con bases de datos de objetos.

   •   Utiliza flujos de trabajos flexibles y dinámicos.

   •   Soporta plataformas heterogéneas: Linux, Windows.

   •   Utiliza un esquema de servidor distribuido.


2.2. Integración con otros software

Todos los informes de Open ERP se generan en PDF para una perfecta im-
presión. También se pueden generar archivos en Word o Excel que des-
pués pueden modificarse antes de ser enviados a un cliente por carta, mail
o fax en forma automática.
Open ERP se integra con los siguientes softwares comerciales:
   •   Visualización bajo Adobe Reader (PDF).

   •   Importación/Exportación de Microsoft Office u OpenOffice.

   •   Exportación a Excel (or CSV).

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

También existen publicados conectores con software libre como:

   •   OpenOffice: La suite ofimática de código abierto desarrollada por Sun
       Microsystems/Oracle.

   •   Mozilla Thunderbird: Cliente de correo electrónico de los creadores
       de Mozilla Firefox.

   •   Jasper Reports (iReport): herramienta de creación de informes Java
       libre.

   •   Magento: aplicación de comercio electrónico online.

   •   Oscommerce: otra aplicación de comercio electrónico online.

   •   Joomla: gestor de contenidos (integración parcial a través de xml-
       rpc).



                                                                             8
•   Spree: software de comercio electrónico para Ruby on Rails.

      •   Dia UML: software de diagramas para implementación de modulos.

3. INSTALACIÓN (Windows)

La instalación es total mente automática bajo todos los sistemas operativos
windows, solo se debe ingresar a la página oficial (www.openerp.com) y
descargar el paquete AllInOne y ejecutar la instalación, es preferible realizar la
instalación en el sistema de archivos.
Para la conexión del cliente al servidor Open ERP se debe iniciar la aplicación,
si es la primera vez que se ejecuta el cliente puede aparecer primero una
encuesta sobre el interés en el uso de Open ERP, este paso se puede obviar,
después aparecerá una ventana pequeña para iniciar la conexión 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 conexión se informa que ¡No se
puede conectar al servidor!, significa que los parámetros del Servidor son
incorrectos. Se debe hacer clic en el botón Cambiar y modificar los parámetros
de Servidor, Puerto y Protocolo de conexión. En una configuración por defecto
donde cliente y servidor están en la misma máquina estos serían los valores
típicos:

      •   Servidor: localhost

      •   Puerto: 8070

      •   Protocolo de conexión: NET-RPC (faster)


O también estos:

      •   Servidor: localhost

      •   Puerto: 8069

      •   Protocolo de conexión: 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.




                                                                                9
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 información:

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

      •   Contraseña del super-administrador: Esta contraseña debe
          coincidir con la definida en el parámetro admin_password del archivo
          de configuración del servidor. Por defecto admin aunque en entornos
          de producción hay que cambiarla para evitar que los usuarios sean
          capaces de crear bases de datos.


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

      •   Cargar datos de demostración: si se está testeando OpenERP por
          primera vez de clic en Sí o en caso contrario de clic en No en
          entornos de producción.

      •   Idioma por defecto: Idioma por defecto de la aplicación y de los
          nuevos usuarios: Spanish/Español, Catalan/Català…

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

A continuación empezará la creación de la base de datos de Open ERP. Se
crearán numerosas tablas y registros, por lo que puede tardar un poco la
instalación.

La conexión se hace automáticamente como usuario administrador y se iniciará
el asistente de instalación:

      •   Seleccionar un perfil: Se puede seleccionar un perfil (como muestra
          la figura 3) en concreto que nos instalará de forma automática los
          módulos relacionados con ese perfil o escoger el perfil mínimo (sólo
          instala el módulo base) y posteriormente instalar los módulos que
          interesen.




                                                                           11
Figura 3. Selección de perfil preferido

•   Información general: Aquí podemos introducir la información de la
    compañía como el nombre, dirección, correo electrónico, teléfono 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 organización se la denomina
    compañía).




                       Figura 4. Información general de la empresa


•   Información de los informes (2a pestaña): Aquí se definen los
    textos que aparecerán en la cabecera (derecha) y pie de pagina de



                                                                      12
los informes y el logo de la compañía (por defecto el logo aparecerá
          a la izquierda de la cabecera) como muestra la figura 5.




                             Figura 5. Información de los reportes de la empresa

Finalmente empezará la configuración de los módulos instalados mediante
asistentes con abundante información. Si se ha seleccionado el perfil mínimo
sólo se pedirá:
      •   Modo de vista: Interfaz simplificada o extendida (figura 6).




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

      •   Creación de nuevos usuarios: En entornos de producción 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).
          También se pueden crear más adelante.




                                                                                   13
Figura 7. Configuración de usuarios




Figura 8. Configuración de grupos




                                      14
Figura 9. Configuración de roles

Al terminar aparece el menú con los módulos instalados como muestra la figura
10.




            Figura 10. Finalización de instalación de la base de datos. Inicialización de la aplicación.



4. SISTEMAS DE ARCHIVOS BÁSICO

Todos los módulos 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 lógica


                                                                                                           15
del negocio, un modulo está compuesto por cuatro archivos básicos (algunos
módulos son más robustos):

      •   Archivo __init__.py

      •   Archivo __terp__.py

      •   Archivo <tu_modulo>.py

      •   Archivo <tu_vista>.xml

   4.1. Archivo __init__.py

   Permite cargar el modulo creado

   4.2. Archivo __terp__.py

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

      4.2.1. Diccionario descriptor:

                •   name : Nombre del modulo

                •   versión: Versión del modulo

                •   description: Una descripción 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, reportes…etc.

                •   init_xml: Lista de los archivos XML que se cargaran con la
                    instalación del modulo

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


                                                                            16
•   active: Determina los módulos que son creados en la base
                 de datos.

4.3. Archivo <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
            búsqueda y lectura de métodos

          • _rec_name: Nombre del campo que se usa para recursos de
            búsqueda


   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 básicos y los
   relacionales, los básicos solos sirven para introducir datos basicos y los
   relacionales (ver tipos de relación) permiten establecer relaciones entre
   los objetos.


   4.3.2. Campos básicos:

      •   boolean: Bolean (True o False)


                                                                          17
Sintaxis:
    Fields.boolean(‘Field name’, [, Optional Parameters])


•   integer: Numero entero

    Sintaxis:
    fields.integer('Field Name' [, Optional Parameters]),


•   float: Un numero de punto flotante

    Sintaxis:
    fields.float('Field Name' [, Optional Parameters]),


•   char: Un string de espacio limitado, su longitud es un parámetro
    requerido

    Sintaxis:
    fields.char('Field Name', size=n [, Optional Parameters])


•   text: Un campo de texto sin limite

    Sintaxis:
    fields.text('Field Name' [, Optional Parameters]),


•   date: Un dato

    Sintaxis:
    fields.date('Field Name' [, Optional Parameters]),


•   datetime: Permite asignar un dato de tiempo

    Sintexis:
    fields.datetime('Field Name' [, Optional Parameters]),


•   binary: Dato binario


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

    Sintaxis:



                                                                   18
fields.selection((('n','Unconfirmed'), ('c','Confirmed')),
                  'field Name' [, Optional Parameters])


4.3.3. Campos Relacionales

  •   one2many: Este campo expresa una relación uno a muchos
      entre dos objetos, este campo es obsoleto utilizando una relación
      many2one

      Sintaxis:
      fields.one2one('other.object.name', 'Field Name')
      fields.one2many('other.object.name', 'Field relation id', 'Fieldname',
      optional parameter)
      * Optional parameters:
              - invisible: True/False
              - states: ?
              - readonly: True/False


  •   many2one: Asocia este objeto con un objeto padre en una
      relación muchos a uno, por ejemplo, de muchas marcas de autos
      existe una que pertenece a un vehículo en particular

      Sintaxis:
      fields.many2one('other.object.name', 'Field Name', optional parameter)

      Optional parameters:
      - ondelete: What should happen when the resource this field points to is
      deleted.
      + Predefined value: "cascade", "set null", "restrict", "no action", "set
      default"
      + Default value: "set null"
      - required: True
      - readonly: True
      - select: True - (creates an index on the Foreign Key field)


  •   many2many:

      Sintaxis:
      fields.many2many(
                     'other.object.name',
                     'relationobject',
                     'actual.object.id',
                     'other.object.id',
                     'Field Name')

      Donde:

             •    other.object.name is the other object which
                  belongs to the relation

             •    relation object is the table that makes the link



                                                                               19
•   actual.object.id and other.object.id are the
                     fields’ names used in the relation table

          Ejemplo:
          'category_ids':fields.many2many(
                                        'res.partner.category',
                                        'res_partner_category_rel',
                                        'partner_id',
                                        'category_id',
                                        'Categories')


      •   one2one: Este campo se encuentra obsoleto por que una relación uno a
          uno es realmente una relación muchos a uno (many2one).

4.4. Archivo <modulo_view>.xml

Las vistas en Open ERP se dividen en tres; las tree, las form y las graphic, sin
embargo las más utilizadas son las tree y las from y son las que se verán
continuación. 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 relación
       one2many. También se puede realizar la operación 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 perímete
   realizar búsquedas en la pantalla. Esta vista es simple y solo tiene algunas
   opciones de diseño
   Los archivos xml que describen las vistas tienen el siguiente formato:

                                                                        20
<?xml version="1.0"?>
              <openerp>

                      <data>

                                [view definitions]
                      </data>
              </openerp>

La definición 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 acción perteneciente a esa vista

    • <menuitem> un tags que crea la entrada en el menu y el vinculo de la
      acción.


4.4.3. Elementos de diseño

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

       • Page: Define una nueva página para el notebook, ejemplo:
              <page string="Order Line"> ... </page>:

          El atributo string define el numero de pagina

       • Separator: Agrega una línea de separación en el formato, ejemplo:
              <separator string="Links" colspan="4"/>

          El atributo string define la etiqueta del separador y el atributo
          colspan define su tamaño

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


       • Group: Permite crear grupos de varias columnas, ejemplo:
              <group col="3" colspan="2">
                   <field name="invoiced" select="2"/>
                   <button colspan="1" name="make_invoice" states="confirmed"
                   string="Make Invoice"
                   type="object"/>
              </group>

              Parámetros para crear grupos
                  • colspan: numero de columnas para usar

                  • rowspan: numero de filas para expandir o no el grupo


                                                                                21
• 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 búsqueda 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
            símbolo “•”
          • string=”“: Cambia la etiqueta de un campo. También es usado como
            parámetro de búsqueda por la vista árbol.
          • domain: puede restringir un dominio
                    Example:
                          domain=”[(‘partner_id’,’=’,partner_id)]”
          • widget: puede cambiar un widget.
                 Example:
                          widget=”one2many_list”

                •   one2one_list
                •   one2many_list
                •   many2one_list
                •   many2many
                •   url
                •   email
                •   image
                •   float_time
                •   reference

5. MODELACIÓN DE OBJETOS

En el capitulo anterior se muestra que archivos debe tener un modulo básico. A
continuación 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 básico como muestra la ilustración 1:




                               Ilustración 1. Archivos basicos



                                                                                  22
5.1. Archivo motion.py:
1 from osv import fields, osv
2 cimport time

3 class motion_pelicula(osv.osv):
4    _name = 'motion.pelicula'
5    _description = 'Pelicula'
6    _columns = {
7        'nombre_d' : fields.char('Nombre director', size=30, required=True),
8        'nombre' : fields.char('Nombre pelicula', size=30, required=True),
9        'fecha' : fields.date('Fecha de adquisicion', required=True),
10       'costo_a' : fields.integer('Costo alquiler'),
11       'costo' : fields.integer('Costo de la pelicula'),
12       'codigo' : fields.integer('Codigo', required=True),
13       'numero' : fields.integer('Numero de copias',
required=True),
14    }
15    _defaults = {
16        'fecha' : lambda *a : time.strftime("%Y-%m-%d"),
17    }
18 mt.pelicula()


   5.1.1. Explicación y consideraciones:

      Línea Explicación                         Consideraciones
      1-2   Se importar los módulos requeridos
            para trabajar con objetos Open ERP,
            además puedes importar módulos
            Python     para    implementaciones
            superiores
      3     Todos los objetos heredan de Es importante recordar
            osv.osv                             que los nombres de las
                                                clases      no       pueden
                                                contener       letras     en
                                                mayúscula, es un error de
                                                programación y por lo
                                                tanto no permite que se
                                                instale el modulo. El
                                                nombre de la clase lleva
                                                una separación “_” , con
                                                el propósito de no poner
                                                letras en mayúscula, por
                                                convención los nombre de
                                                los objetos llevan primero
                                                el nombre del modulo y
                                                después        su     propio
                                                nombre, o su subnombre
                                                asociado a otra clase en
                                                caso      de      que     se
                                                establezcan       relaciones
                                                entre los objetos
      4-5   Las clase básicas contienen el El atributo name es el
            nombre y descripción                nombre de la clase pero
                                                con la excepción de que
                                                donde        lleve       una


                                                                                23
separación “_” se pone un
                                                     punto “.”
      6-14      Diccionario donde se especifican los Por ejemplo, el fields.char
                campos que se utilizaran en la vista crea una entrada de texto
                (columns)                            o textbox, además los
                                                     parámetros      de      los
                                                     campos nos especifican
                                                     cosas como el nombre del
                                                     campo, si es o no
                                                     requerido   entre otros
                                                     parámetros.

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

5.2. Archivo __terp__.py:
{
    "name" : "Peliculas Motion",
    "version" : "1.1",
    "author" : "Jose Luis",
    "category" : "Generic Modules/Human Resources",
    "website" : "http://www.deitek.com",
    "description": """Prueba para aficionados de python
    """,
    'author': 'Jose Luis',
    'website': 'http://www.deitek.com',
    'depends': ['base'],
    'init_xml': [],
    'update_xml': [
         'vista_view.xml'
    ],
    'demo_xml': [],
    'installable': True,
    'active': False,
}


5.3. Archivo __init__.py:
import motion




5.4. Implementación de una vista form

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

    Código:
    <record id="vista_pelicula_form" model="ir.ui.view">
            <field name="name">motion.pelicula.form</field>
            <field name="model">motion.pelicula</field>
            <field name="type">form</field>
            <field name="arch" type="xml">
                    <form string="Peliculas">
                            <group col="2" colspan="2">



                                                                                   24
<separator colspan="2" string="Informacion General"/>
                                     <field name="nombre" select="1"/>
                                     <field name="codigo" select="1"/>
                                     <field name="nombre_d" select="1"/>
                             </group>
                             <group col="2" colspan="2">
                             <separator string="Informacion Secundaria" colspan="2"/>
                                     <field name="fecha"/>
                                     <field name="costo"/>
                                     <field name="numero"/>
                                     <field name="costo_a"/>
                             </group>
                              <notebook colspan="4">
                              <page string="Notas">
                                     <field colspan="4" nolabel="1" name="notas"/>
                              </page>
                              </notebook>
                   </form>
           </field>
   </record>


   Vista:




                             Figura 11. Vista form del objeto motion.pelicula

5.5. Implementación 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 máscara de
búsqueda. Estas vistas son más simples que form’s 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:
   Código:
   <record id="vista_peliculas_arbol" model="ir.ui.view">
           <field name="name">motion.pelicula.tree</field>
           <field name="model">motion.pelicula</field>
           <field name="type">tree</field>
           <field name="arch" type="xml">
                   <tree string="Peliculas">
                           <field name="nombre"/>
                           <field name="codigo"/>
                           <field name="nombre_d"/>
                   </tree>
           </field>
   </record>



                                                                                        25
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 extensión .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 menús y sus acciones por lo que las figuras nos
  simplemente ilustrativas.


6. CREACIÓN DE MENÚS Y ACCIONES

  6.1. Menús

  Los menús en Open ERP poseen las siguientes características:

     •   Id: Todos los menús necesitan un id para poder ser identificados por Open
         ERP dentro de la tabla de item’s

     •   Name: Especifica la posición jerárquica y el nombre del menú o entrada

     •   Action: Identifica la acción 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,


                                                                                  26
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_JUMP_TO,
    STOCK_JUSTIFY_CENTER, STOCK_JUSTIFY_FILL,
    STOCK_JUSTIFY_LEFT, STOCK_JUSTIFY_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ú:
       <menuitem id="menuitem_id"
               name="Position/Of/The/Menu/Item/In/The/Tree"
               action="action_id"
               icon="NAME_FROM_LIST"
               groups="groupname"
               sequence="<integer>"/>


Para la vista creada en el capitulo anterior se agrega un menú raíz (figura 13)
con las siguientes líneas:
       <menuitem icon="STOCK_MEDIA_PLAY"
       id="menu_raiz_motion"
       name="Motion Peliculas"/>


Y los submenús (figura 3):
       <menuitem
                     id="menu_motion_reporte"
                     name="Reportes"
                     parent="motion.menu_raiz_motion"/>
       <menuitem
                     id="menu_motion_peli"
                     name="Peliculas"




                                                                               27
Vista:




                                   Figura 13. Menús

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 método del lado del servidor
  •   Group: Reúne algunas acciones en un grupo


A continuación se construye una nueva acción para la vista form y tree del objeto
motion.pelicula que creara la entrada para el formulario.

  6.2.1. Acciones Form:
  <record id="abrir_vista_nueva_pelicula" model="ir.actions.act_window">
        <field name="name">Nueva pelicula</field>
        <field name="res_model">motion.pelicula</field>
        <field name="view_type">form</field>
        <field name="view_mode">form,tree</field>
  </record>


  Enlace entre la acción y el submenú:
  <menuitem
  action="abrir_vista_nueva_pelicula"
  id="menu_abrir_vista_nueva_pelicula"
  parent="menu_motion_peli"/>
  parent="motion.menu_raiz_motion"/>


  6.2.2. Acciones Tree:
  <record id="abrir_vista_peliculas_arbol" model="ir.actions.act_window">
  <field name="name">Todas las peliculas</field>
          <field name="res_model">motion.pelicula</field>
          <field name="view_type">tree</field>
          <field name="view_mode">tree,form</field>
          <field name="view_id" ref="vista_peliculas_arbol"/>
          <field name="domain">[]</field>
  </record>

  Enlace entre la acción y el submenú:
  <menuitem
  action="abrir_vista_peliculas_arbol"
  id="menu_abrir_vista_peliculas_arbol"
  parent="menu_motion_peli"/>




                                                                              28
6.2.3. Archivo motion_view.xml:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
        <data>
                <menuitem icon="STOCK_MEDIA_PLAY"
                id="menu_raiz_motion"
                name="Motion Peliculas"/>

               <menuitem
               id="menu_motion_reporte"
               name="Reportes"
               parent="motion.menu_raiz_motion"/>

               <menuitem
               id="menu_motion_peli"
               name="Peliculas"
               parent="motion.menu_raiz_motion"/>

               <record id="vista_pelicula_form" model="ir.ui.view">
                       <field name="name">motion.pelicula.form</field>
                       <field name="model">motion.pelicula</field>
                       <field name="type">form</field>
                       <field name="arch" type="xml">
                               <form string="Peliculas">
                                       <group col="2" colspan="2">
                                       <separator colspan="2" string="Informacion
                                       General"/>
                                               <field name="nombre" select="1"/>
                                               <field name="codigo" select="1"/>
                                               <field name="nombre_d" select="1"/>
                                       </group>
                                       <group col="2" colspan="2">
                                       <separator string="Informacion Secundaria"
                                       colspan="2"/>
                                               <field name="fecha"/>
                                                <field name="costo"/>
                                                <field name="numero"/>
                                                <field name="costo_a"/>
                                       </group>
                                       <notebook colspan="4">
                                       <page string="Notas">
                                               <field colspan="4" nolabel="1"
                                               name="notas"/>
                                       </page>
                                       </notebook>

                               </form>
                       </field>
               </record>

               <record id="abrir_vista_nueva_pelicula" model="ir.actions.act_window">
                       <field name="name">Nueva pelicula</field>
                       <field name="res_model">motion.pelicula</field>
                       <field name="view_type">form</field>
                       <field name="view_mode">form,tree</field>
               </record>

               <menuitem
               action="abrir_vista_nueva_pelicula"
               id="menu_abrir_vista_nueva_pelicula"
               parent="menu_motion_peli"/>

               <record id="vista_peliculas_arbol" model="ir.ui.view">
                       <field name="name">motion.pelicula.tree</field>
                       <field name="model">motion.pelicula</field>
                       <field name="type">tree</field>
                       <field name="arch" type="xml">
                               <tree string="Peliculas">
                                       <field name="nombre"/>
                                       <field name="codigo"/>
                                       <field name="nombre_d"/>
                               </tree>
                       </field>
               </record>

                <record id="abrir_vista_peliculas_mi_lista" model="ir.actions.act_window">
                        <field name="name">All Peliculas</field>
                        <field name="res_model">motion.pelicula</field>
                        <field name="view_type">form</field>
                        <field name="view_mode">tree,form</field>



                                                                                             29
<field name="domain">[]</field>
                        </record>

                        <menuitem
                        action="abrir_vista_peliculas_mi_lista"
                        id="menu_abrir_vista_peliculas_arbol"
                        parent="menu_motion_peli"/>

              </data>
      </openerp>




      NOTA: Para probar módulos nuevos en Open ERP se debe reiniciar el
      servidor, el programa se encuentra localizado en la carpeta server/service.
      Después de realizar esto se debe actualizar la lista de modulo, finalmente se
      instala el modulo. En la versión 5.0.7 es posible actualizar la lista de módulos
      sin reiniciar el servidor.

7. HERRAMIENTAS DE MODELADO (DIA UML)

DIA es un programa de propósito general para la creación 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-relación, diagramas UML, diagramas de flujo, diagramas
de redes, diagramas de circuitos eléctricos, etc. Nuevas formas pueden ser fácilmen-
te agregadas, dibujándolas con un subconjunto de SVG e incluyéndolas en un archi-
vo XML.

El formato para leer y almacenar gráficos es XML (comprimido con gzip, para ahorrar
espacio). Puede producir salida en los formatos EPS, SVG y PNG.

También conviene recordar que Dia, gracias al paquete dia2code, puede generar el
esqueleto del código a escribir, si utilizáramos con tal fin un UML.

Esta herramienta también puede generar módulos Open ERP agregando el plugin
(codegen_openerp.py) que permite exportar diagramas de clases.

   7.1. Instalación 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 instalación de Dia
      •   Descargar el plugin codegen_openerp.py y descomprimirlo en la carpeta
          C:Archivos de programaDia o donde tengas instalado Dia. Puedes des-
          cargar el plugin del grupo de google:
          http://groups.google.com.co/group/openerpamerica




                                                                                   30
8. MODELADO DE CLASES

    Como se explico anteriormente es muy útil utilizar Dia para crear módulos
    Open ERP, debido a que el plugin genera todos los componentes básicos de
    un modulo, si se desean crear reportes, flujos de trabajo o métodos para las
    clases se debe añadir el código 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 venía trabajando anteriormente:

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




                Figura 14. Selección 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
           configuración de la clase, atributos, operaciones, plantillas y estilo.
           Para crear módulos solo se necesitan los atributos. El nombre de la
           clase debe ser genérico y sin mayúsculas, 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 código.




                                                                                 31
Figura 15. Asignando nombre y estereotipos de una clase



•   Después 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




                                                                      32
•   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. Exportación de un diagrama como modulo Open ERP

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


                                                                      33
una relación many2one primero debe existir la clase relacionada antes
              de crear la relación. En nuestro caso primero debe existir
              motion.genero y después motion.pelicula, también es aconsejable
              reiniciar Dia cuando se haga la exportación debido a que se ha
              identificado un error cuando se han realizado más de una exportación
              ya que se replica el código (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. Importación de módulos 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 capítulo se
mostrara algunos ejemplos en el modulo que se viene trabajando.

   9.1. Relación many2one

   Se empieza por establecer un objeto relacionado con una película, en este caso
   el género de la película, de muchos géneros hay una que pertenece a la película
   (una película puede estar relacionada con varios géneros de varias formas, sin
   embargo esto depende del punto de vista), por lo tanto es una relación
   many2one:

   Archivo 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)',


                                                                                34
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. Explicación y consideraciones:

      Línea Explicación                                    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    Relación many2one. Este campo                  IMPORTANTE: Es muy
            tiene una relación de muchos a uno,            importante crear primero
            ósea que de muchos géneros, hay                el objeto con el que se
            uno que pertenece a nuestra                    establece la relación y
            película, también tenemos que                  después      el    objeto
            agregar el campo a la vistas                   relacionado cuando se
                                                           está trabajando con un
                                                           campo many2one, de lo
                                                           contrario   Open    ERP
                                                           arrojara un error en la
                                                           instalación debido a que
                                                           se está accediendo a una
                                                           relación entre un objeto
                                                           que aun no existe


   9.1.2. Vista del objeto relacionado:
           <record id="vista_genero_arbol" model="ir.ui.view">
                   <field name="name">motion.genero.tree</field>
                         <field name="model">motion.genero</field>
                         <field name="type">tree</field>
                         <field name="arch" type="xml">
                         <tree string="Genero">
                                 <field name="gen"/>
                                 <field name="name"/>
                         </tree>
                   </field>
           </record>

           <record id="vista_genero_vista" model="ir.ui.view">
                   <field name="name">motion.genero.form</field>



                                                                                       35
<field name="model">motion.genero</field>
                        <field name="type">form</field>
                        <field name="arch" type="xml">
                        <form string="Genero">
                                 <field name="gen" select="1"/>
                                  <field name="name" select="1"/>
                        </form>
                  </field>
          </record>

          <record id="accion_genero" model="ir.actions.act_window">
                  <field name="name">Genero</field>
                        <field name="type">ir.actions.act_window</field>
                        <field name="res_model">motion.genero</field>
                        <field name="view_type">form</field>
          </record>



   Nota: Agregar el anterior código a archivo xml de la vista original (El menú ya
   se encuentra creado*), también se puede agregar la línea; <field
   name="genero"/>, a la vista del formulario de las películas.


9.2. Relación one2many
Para la relación one2many es la contraria a la many2one, esto significa que hay
muchos objetos que tienen relación con uno en específico. Se mostrara un
ejemplo; suponga que un cliente de películas quisiera ver cuántas películas tiene
alquiladas, debe aparecer entonces listadas estas películas en la vista de un
usuario, el modelo está representado por el diagrama de clases de la figura 20:




           Figura 20. Relación one2many entre la clase motion.cliente y motion.pelicula




                                                                                          36
Como muestra la muestra la anterior figura, existen realmente dos relaciones
     una relación one2many entre motion.cliente y motion.pelicula, y otra relación
     débil many2one entre motion.pelicula y motion.cliente, esta relación es débil
     porque el campo no es requerido para establecer la relación 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 películas para ese cliente.

10. HERENCIA

  10.1. Herencia de objetos
  En Open ERP existen tres tipos de herencia, herencia por prototipo, por extensión y
  por delegación (herencia múltiple), todas son completamente diferentes y
  constituyen una gran herramienta para el desarrollo de los módulos en Open ERP.
  En la herencia por prototipo y por extensión se debe agregar el siguiente atributo:
  _inherit='object.name'

  Donde “object.name” es el objeto del cual se hereda. Veamos los tipos de herencia:
     10.1.1.        Herencia por extensión
     Al igual que en programación orientada a objetos el olas nuevas clases creadas
     heredan los atributos y los métodos 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),



                                                                                        37
'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 operación (heren-
cia). Con la herencia establecida se especifica que los nuevos campos del
atributo “_columns” creados en la nueva clase podrán ser vistos en las vistas
form y tree de la clase original (superclase), En el ejemplo todos los campos
serán 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 después de la herencia




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




                                                                                       38
Figura 23. Vista web del objeto res.partner después 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 métodos de su padre (superclase), ejemplo:
class other_material(osv.osv):
    _name = 'other.material'
    _inherit = 'network.material'
    _columns = {
        'manuf_warranty': fields.boolean('Manufacturer warranty?'),
    }
    _defaults = {
        'manuf_warranty': lambda *a: False,
    }
other_material()


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 métodos no serán reconocidos en las vistas de la superclase.


10.1.3.          Herencia por delegación

La herencia por delegación es parecida a la herencia múltiple de c++, en este
caso el objeto heredad de múltiples tablas, la técnica cosiste en agregar una co-
lumna a la tabla al objeto heredado. Estas columnas guardaran una clave fora-
nea (id de otra tabla). Ejemplo:

class tiny_object(osv.osv)
    _name = 'tiny.object'
    _table = 'tiny_object'
    _inherits = {
        'tiny.object_a': 'object_a_id',
        'tiny.object_b': 'object_b_id',
        ... ,
        'tiny.object_n': 'object_n_id'
    }
    (...)


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 foráneas de “ti-
ny.object_a”,… “tiny.object_n” que son guardadas.



                                                                                                     39
El objeto “tiny.object” hereda todos las columnas y métodos 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 también la vista de la superclase, así se
puede agregar, quitar o modificar los campos que se deseen. Ejemplo:
<record model="ir.ui.view" id="view_partner_form">

    <field name="name">res.partner.form.inherit</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">
          <notebook position="inside">
              <page string="Relations">
                    <field name="relation_ids" colspan="4" nolabel="1"/>
              </page>
          </notebook>
    </field>
</record>

Es posible anexar o editar el contenido de un tag. Los tag tienen algunos
atributos que permiten especificar la posición en la cual se desean hacer
modificaciones, en el ejemplo se agrega una página a la vista “res.partner.form”
en el modulo base.
Se pueden utilizar los siguientes valores para indicar la posición:

       •   inside (default): Este valor indica que se anexara un tag dentro.
       •   after: Se agrega un contenido después del tag
       •   before: Se agregara un contenido después del tag
       •   replace: Se remplazara el contenido de un tag

Ejemplos de herencias de vistas

       •   Ejemplo:
       <record model="ir.ui.view" id="view_partner_form1">
           <field name="name">res.partner.form.inherit1</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">
                 <page string="Extra Info" position="replace">
                     <field name="relation_ids" colspan="4" nolabel="1"/>
                 </page>
           </field>
       </record>


       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"/>
           <field name="type">form</field>
           <field name="arch" type="xml">



                                                                                 40
<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:
<record model="ir.ui.view" id="view_res_partner_form">
        <field name="name">res.partner.form</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">
                   <page string="General" position="before">
                           <page string="Informacion General">
                            <field name="cod_empresa_cliente" select="1"/>
                            <field name="nit" select="2"/>
                            <field name="dv" select="0"/>
                            <field name="tel1" select="0"/>
                            <field name="tel2" select="0"/>
                            <field name="cel" select="0"/>
                            <field name="email" select="0"/>
                            <field name="fax" select="0"/>
                            <field name="direccion" select="0"/>
                            <field name="es_empleado" select="0"/>
                            <field name="desponi" select="0"/>
                            <field name="gran_contribuyente" select="0"/>
                            <field name="autoretenedor" select="0"/>
                            </page>
                   </page>
        </field>
</record>


En este ejemplo se crea una nueva página antes de la página general

•   Ejemplo:
<record model="ir.ui.view" id="view_partner_form3">
    <field name="name">res.partner.form.inherit4</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="after"/>
          <field name="relation_ids"/>
   </field>
</record>


Agrega el campo “relation_ids” después del campo “lang”



                                                                             41
11. BIBLIOGRAFÍA


      Open ERP. 2001. Última fecha de actualización: 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 actualización: 24 Marzo 2010. Fecha de
       acceso: 4 de Marzo de 2010. http://es.wikipedia.org/wiki/OpenERP
      Wikipedia. 2010. Última fecha de actualización: 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
       más información acerca de este tutorial




                                                                               42

Más contenido relacionado

La actualidad más candente

Oracle enterprise manager
Oracle enterprise managerOracle enterprise manager
Oracle enterprise managerilucysol
 
SAP BPC 7 M - Instalacion Paso a Paso
SAP BPC 7 M - Instalacion Paso a PasoSAP BPC 7 M - Instalacion Paso a Paso
SAP BPC 7 M - Instalacion Paso a Pasoanibal goicochea
 
Preguntas y respuestas Técnicas de SAP HANA
Preguntas y respuestas Técnicas  de SAP HANAPreguntas y respuestas Técnicas  de SAP HANA
Preguntas y respuestas Técnicas de SAP HANASergio Cannelli
 
Presentación - RIA utilizando un ERP-SAP
Presentación - RIA utilizando un ERP-SAPPresentación - RIA utilizando un ERP-SAP
Presentación - RIA utilizando un ERP-SAPEuler Sánchez
 
SAP BPC Instalacion - Paso a Paso
SAP BPC Instalacion - Paso a PasoSAP BPC Instalacion - Paso a Paso
SAP BPC Instalacion - Paso a Pasoanibal goicochea
 
Arquitectura de Aplicaciones Web ASP.NET/MVP
Arquitectura de Aplicaciones Web ASP.NET/MVPArquitectura de Aplicaciones Web ASP.NET/MVP
Arquitectura de Aplicaciones Web ASP.NET/MVPIng. Jose Franco
 
T5bissnsintyucjoseluisyaguiarchris
T5bissnsintyucjoseluisyaguiarchrisT5bissnsintyucjoseluisyaguiarchris
T5bissnsintyucjoseluisyaguiarchrisVanessaMasabanda
 
Yungan geovanny 6_s_ti_2
Yungan geovanny 6_s_ti_2Yungan geovanny 6_s_ti_2
Yungan geovanny 6_s_ti_2GeovannyYungan
 
Integración de Datos sin límites con Pentaho
Integración de Datos sin límites con PentahoIntegración de Datos sin límites con Pentaho
Integración de Datos sin límites con PentahoDatalytics
 
Curso Oracle11g Lenguaje PL/SQL Avanzado
Curso Oracle11g Lenguaje PL/SQL AvanzadoCurso Oracle11g Lenguaje PL/SQL Avanzado
Curso Oracle11g Lenguaje PL/SQL AvanzadoCLEFormación
 
Manual de instalación de sap crystal reports para enterprise
Manual de instalación de sap crystal reports para enterpriseManual de instalación de sap crystal reports para enterprise
Manual de instalación de sap crystal reports para enterpriseJorge Viveros Fonseca
 
Unificando el análisis de sistemas y la programación de software para lenguaj...
Unificando el análisis de sistemas y la programación de software para lenguaj...Unificando el análisis de sistemas y la programación de software para lenguaj...
Unificando el análisis de sistemas y la programación de software para lenguaj...Jonathan Franchesco Torres Baca
 

La actualidad más candente (20)

Oracle enterprise manager
Oracle enterprise managerOracle enterprise manager
Oracle enterprise manager
 
SAP BPC 7 M - Instalacion Paso a Paso
SAP BPC 7 M - Instalacion Paso a PasoSAP BPC 7 M - Instalacion Paso a Paso
SAP BPC 7 M - Instalacion Paso a Paso
 
Preguntas y respuestas Técnicas de SAP HANA
Preguntas y respuestas Técnicas  de SAP HANAPreguntas y respuestas Técnicas  de SAP HANA
Preguntas y respuestas Técnicas de SAP HANA
 
Presentación - RIA utilizando un ERP-SAP
Presentación - RIA utilizando un ERP-SAPPresentación - RIA utilizando un ERP-SAP
Presentación - RIA utilizando un ERP-SAP
 
ABAP 7.52
ABAP 7.52ABAP 7.52
ABAP 7.52
 
Factory talk
Factory talkFactory talk
Factory talk
 
BIG DATA SAP
BIG DATA SAPBIG DATA SAP
BIG DATA SAP
 
SAP BPC Instalacion - Paso a Paso
SAP BPC Instalacion - Paso a PasoSAP BPC Instalacion - Paso a Paso
SAP BPC Instalacion - Paso a Paso
 
Arquitectura de Aplicaciones Web ASP.NET/MVP
Arquitectura de Aplicaciones Web ASP.NET/MVPArquitectura de Aplicaciones Web ASP.NET/MVP
Arquitectura de Aplicaciones Web ASP.NET/MVP
 
Arquitectura integrada
Arquitectura integradaArquitectura integrada
Arquitectura integrada
 
Arquitectura Integrada
Arquitectura IntegradaArquitectura Integrada
Arquitectura Integrada
 
T5bissnsintyucjoseluisyaguiarchris
T5bissnsintyucjoseluisyaguiarchrisT5bissnsintyucjoseluisyaguiarchris
T5bissnsintyucjoseluisyaguiarchris
 
Yungan geovanny 6_s_ti_2
Yungan geovanny 6_s_ti_2Yungan geovanny 6_s_ti_2
Yungan geovanny 6_s_ti_2
 
Openerp
OpenerpOpenerp
Openerp
 
Integración de Datos sin límites con Pentaho
Integración de Datos sin límites con PentahoIntegración de Datos sin límites con Pentaho
Integración de Datos sin límites con Pentaho
 
Curso Oracle11g Lenguaje PL/SQL Avanzado
Curso Oracle11g Lenguaje PL/SQL AvanzadoCurso Oracle11g Lenguaje PL/SQL Avanzado
Curso Oracle11g Lenguaje PL/SQL Avanzado
 
Programando en 3 capas parte 1
Programando en 3 capas   parte 1Programando en 3 capas   parte 1
Programando en 3 capas parte 1
 
Tema1 erp
Tema1 erpTema1 erp
Tema1 erp
 
Manual de instalación de sap crystal reports para enterprise
Manual de instalación de sap crystal reports para enterpriseManual de instalación de sap crystal reports para enterprise
Manual de instalación de sap crystal reports para enterprise
 
Unificando el análisis de sistemas y la programación de software para lenguaj...
Unificando el análisis de sistemas y la programación de software para lenguaj...Unificando el análisis de sistemas y la programación de software para lenguaj...
Unificando el análisis de sistemas y la programación de software para lenguaj...
 

Destacado

Software OpenERP & Metodología ERP
Software OpenERP & Metodología ERPSoftware OpenERP & Metodología ERP
Software OpenERP & Metodología ERPGustavo González
 
Sig Semana 7 I
Sig Semana 7 ISig Semana 7 I
Sig Semana 7 Ivivian7894
 
Trabajo de sistemas tarea 4[1]
Trabajo de sistemas tarea 4[1]Trabajo de sistemas tarea 4[1]
Trabajo de sistemas tarea 4[1]karla
 
Open erp tutorial_basico
Open erp tutorial_basicoOpen erp tutorial_basico
Open erp tutorial_basicoMa Fer Ajoy
 
Practica 4: Configuración de Rutas Estaticas
Practica 4: Configuración de Rutas EstaticasPractica 4: Configuración de Rutas Estaticas
Practica 4: Configuración de Rutas EstaticasPriscila Pacheco
 
Planificación de Recursos Empresariales (ERP)
Planificación de Recursos Empresariales (ERP)Planificación de Recursos Empresariales (ERP)
Planificación de Recursos Empresariales (ERP)SIG&amp;A S.A.
 
Comunidad Open ERP - OpenObject Hispana Español
Comunidad Open ERP - OpenObject Hispana EspañolComunidad Open ERP - OpenObject Hispana Español
Comunidad Open ERP - OpenObject Hispana EspañolNhomar Hernandez
 
Hoja de ruta para implementar un erp
Hoja de ruta para implementar un erpHoja de ruta para implementar un erp
Hoja de ruta para implementar un erpEvaluandoSoftware
 
Introducción a ERP
Introducción a ERPIntroducción a ERP
Introducción a ERPuni
 
TeoríAs PedagóGicas Y PsicolóGicas Del Aprendizaje
TeoríAs PedagóGicas Y PsicolóGicas Del AprendizajeTeoríAs PedagóGicas Y PsicolóGicas Del Aprendizaje
TeoríAs PedagóGicas Y PsicolóGicas Del AprendizajeEuny Lou
 
Descripción de la interfaz de programación
Descripción de la interfaz de programaciónDescripción de la interfaz de programación
Descripción de la interfaz de programaciónEneldo Serrata
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great InfographicsSlideShare
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShareKapost
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareEmpowered Presentations
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation OptimizationOneupweb
 

Destacado (20)

DocUbuntu - Instalacion Estandar
DocUbuntu - Instalacion EstandarDocUbuntu - Instalacion Estandar
DocUbuntu - Instalacion Estandar
 
DocOpenERP - Manual openerp.230209
DocOpenERP - Manual openerp.230209DocOpenERP - Manual openerp.230209
DocOpenERP - Manual openerp.230209
 
Software OpenERP & Metodología ERP
Software OpenERP & Metodología ERPSoftware OpenERP & Metodología ERP
Software OpenERP & Metodología ERP
 
Sig Semana 7 I
Sig Semana 7 ISig Semana 7 I
Sig Semana 7 I
 
Scrum vs sap
Scrum vs sapScrum vs sap
Scrum vs sap
 
Trabajo de sistemas tarea 4[1]
Trabajo de sistemas tarea 4[1]Trabajo de sistemas tarea 4[1]
Trabajo de sistemas tarea 4[1]
 
Open erp tutorial_basico
Open erp tutorial_basicoOpen erp tutorial_basico
Open erp tutorial_basico
 
Practica 4: Configuración de Rutas Estaticas
Practica 4: Configuración de Rutas EstaticasPractica 4: Configuración de Rutas Estaticas
Practica 4: Configuración de Rutas Estaticas
 
Planificación de Recursos Empresariales (ERP)
Planificación de Recursos Empresariales (ERP)Planificación de Recursos Empresariales (ERP)
Planificación de Recursos Empresariales (ERP)
 
Comunidad Open ERP - OpenObject Hispana Español
Comunidad Open ERP - OpenObject Hispana EspañolComunidad Open ERP - OpenObject Hispana Español
Comunidad Open ERP - OpenObject Hispana Español
 
Hoja de ruta para implementar un erp
Hoja de ruta para implementar un erpHoja de ruta para implementar un erp
Hoja de ruta para implementar un erp
 
Introducción a ERP
Introducción a ERPIntroducción a ERP
Introducción a ERP
 
TeoríAs PedagóGicas Y PsicolóGicas Del Aprendizaje
TeoríAs PedagóGicas Y PsicolóGicas Del AprendizajeTeoríAs PedagóGicas Y PsicolóGicas Del Aprendizaje
TeoríAs PedagóGicas Y PsicolóGicas Del Aprendizaje
 
Descripción de la interfaz de programación
Descripción de la interfaz de programaciónDescripción de la interfaz de programación
Descripción de la interfaz de programación
 
Odoo a simple vista
Odoo a simple vistaOdoo a simple vista
Odoo a simple vista
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShare
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
 
You Suck At PowerPoint!
You Suck At PowerPoint!You Suck At PowerPoint!
You Suck At PowerPoint!
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization
 

Similar a Tutorial básico de Open ERP: instalación y modelado

Open erp tutorial_basico
Open erp tutorial_basicoOpen erp tutorial_basico
Open erp tutorial_basicoCecilia Corazza
 
Anexo 21-actividad-6
Anexo 21-actividad-6Anexo 21-actividad-6
Anexo 21-actividad-6Draven Draven
 
Administración de sistemas
Administración de sistemasAdministración de sistemas
Administración de sistemaskarolpaolaargel
 
Análisis comparativo Software GEP.
Análisis comparativo Software GEP.Análisis comparativo Software GEP.
Análisis comparativo Software GEP.Luis Vázquez
 
Curso de-introduccion-a-la-ingenieria-del-software
Curso de-introduccion-a-la-ingenieria-del-softwareCurso de-introduccion-a-la-ingenieria-del-software
Curso de-introduccion-a-la-ingenieria-del-softwareFabián Castillo Faune
 
Frases Motivadoras GLD (engargolado)
Frases Motivadoras GLD (engargolado)Frases Motivadoras GLD (engargolado)
Frases Motivadoras GLD (engargolado)DianaMorales3296
 
SDK PALESTRA
SDK PALESTRASDK PALESTRA
SDK PALESTRAPALESTRA
 
Openbravo - Presentación de Producto
Openbravo - Presentación de ProductoOpenbravo - Presentación de Producto
Openbravo - Presentación de ProductoEugenio Velazquez
 
Trabajo de investigación final if3100 sistema dolibarr
Trabajo de investigación final if3100   sistema dolibarrTrabajo de investigación final if3100   sistema dolibarr
Trabajo de investigación final if3100 sistema dolibarrRicardo Rojas Montero
 
Anexo 28-actividad-7
Anexo 28-actividad-7Anexo 28-actividad-7
Anexo 28-actividad-7Draven Draven
 
Ciclo de vida de sistemas
Ciclo de vida de sistemasCiclo de vida de sistemas
Ciclo de vida de sistemasMirna Lozano
 
Ab12007 cn12001 cr11060_cm12038_ss12006
Ab12007 cn12001  cr11060_cm12038_ss12006Ab12007 cn12001  cr11060_cm12038_ss12006
Ab12007 cn12001 cr11060_cm12038_ss12006jealasbarrientos
 
8 creacion de sistemas de informacion
8 creacion de sistemas de informacion8 creacion de sistemas de informacion
8 creacion de sistemas de informacionAbelAbedSilvaSantaCr
 
Ensayo de software
Ensayo de softwareEnsayo de software
Ensayo de softwareNixon Gomez
 

Similar a Tutorial básico de Open ERP: instalación y modelado (20)

Open erp tutorial_basico
Open erp tutorial_basicoOpen erp tutorial_basico
Open erp tutorial_basico
 
Open erp tutorial_basico
Open erp tutorial_basicoOpen erp tutorial_basico
Open erp tutorial_basico
 
Anexo 26-practica-7
Anexo 26-practica-7Anexo 26-practica-7
Anexo 26-practica-7
 
Anexo 21-actividad-6
Anexo 21-actividad-6Anexo 21-actividad-6
Anexo 21-actividad-6
 
Practica 4
Practica 4Practica 4
Practica 4
 
Administración de sistemas
Administración de sistemasAdministración de sistemas
Administración de sistemas
 
Análisis comparativo Software GEP.
Análisis comparativo Software GEP.Análisis comparativo Software GEP.
Análisis comparativo Software GEP.
 
Curso de-introduccion-a-la-ingenieria-del-software
Curso de-introduccion-a-la-ingenieria-del-softwareCurso de-introduccion-a-la-ingenieria-del-software
Curso de-introduccion-a-la-ingenieria-del-software
 
El open erp
El open erpEl open erp
El open erp
 
Frases Motivadoras GLD (engargolado)
Frases Motivadoras GLD (engargolado)Frases Motivadoras GLD (engargolado)
Frases Motivadoras GLD (engargolado)
 
SDK PALESTRA
SDK PALESTRASDK PALESTRA
SDK PALESTRA
 
Openbravo - Presentación de Producto
Openbravo - Presentación de ProductoOpenbravo - Presentación de Producto
Openbravo - Presentación de Producto
 
Trabajo de investigación final if3100 sistema dolibarr
Trabajo de investigación final if3100   sistema dolibarrTrabajo de investigación final if3100   sistema dolibarr
Trabajo de investigación final if3100 sistema dolibarr
 
Anexo 28-actividad-7
Anexo 28-actividad-7Anexo 28-actividad-7
Anexo 28-actividad-7
 
Ciclo de vida de sistemas
Ciclo de vida de sistemasCiclo de vida de sistemas
Ciclo de vida de sistemas
 
Ab12007 cn12001 cr11060_cm12038_ss12006
Ab12007 cn12001  cr11060_cm12038_ss12006Ab12007 cn12001  cr11060_cm12038_ss12006
Ab12007 cn12001 cr11060_cm12038_ss12006
 
8 creacion de sistemas de informacion
8 creacion de sistemas de informacion8 creacion de sistemas de informacion
8 creacion de sistemas de informacion
 
Ensayo de software
Ensayo de softwareEnsayo de software
Ensayo de software
 
Software
SoftwareSoftware
Software
 
software
software software
software
 

Último

El cheque 1 y sus tipos de cheque.pptx
El cheque  1 y sus tipos de  cheque.pptxEl cheque  1 y sus tipos de  cheque.pptx
El cheque 1 y sus tipos de cheque.pptxNathaliTAndradeS
 
QUE REQUISITOS DEBO CUMPLIR PARA PENSIONARME.pdf
QUE REQUISITOS DEBO CUMPLIR PARA PENSIONARME.pdfQUE REQUISITOS DEBO CUMPLIR PARA PENSIONARME.pdf
QUE REQUISITOS DEBO CUMPLIR PARA PENSIONARME.pdflupismdo
 
Principios de economia Mankiw 6 edicion.pdf
Principios de economia Mankiw 6 edicion.pdfPrincipios de economia Mankiw 6 edicion.pdf
Principios de economia Mankiw 6 edicion.pdfauxcompras5
 
METODOS ESCALA SALARIAL EN ESTRUCTURAS.PPT
METODOS ESCALA SALARIAL EN ESTRUCTURAS.PPTMETODOS ESCALA SALARIAL EN ESTRUCTURAS.PPT
METODOS ESCALA SALARIAL EN ESTRUCTURAS.PPTrodrigolozanoortiz
 
41 RAZONES DE PORQUE SI ESTAMOS MAL EN MÉXICO
41 RAZONES DE PORQUE SI ESTAMOS MAL EN MÉXICO41 RAZONES DE PORQUE SI ESTAMOS MAL EN MÉXICO
41 RAZONES DE PORQUE SI ESTAMOS MAL EN MÉXICOlupismdo
 
Politicas publicas para el sector agropecuario en México.pptx
Politicas publicas para el sector agropecuario en México.pptxPoliticas publicas para el sector agropecuario en México.pptx
Politicas publicas para el sector agropecuario en México.pptxvladisse
 
MANUAL PARA OBTENER MI PENSIÓN O RETIRAR MIS RECURSOS.pdf
MANUAL PARA OBTENER MI PENSIÓN O RETIRAR MIS RECURSOS.pdfMANUAL PARA OBTENER MI PENSIÓN O RETIRAR MIS RECURSOS.pdf
MANUAL PARA OBTENER MI PENSIÓN O RETIRAR MIS RECURSOS.pdflupismdo
 
puntos-clave-de-la-reforma-pensional-2023.pdf
puntos-clave-de-la-reforma-pensional-2023.pdfpuntos-clave-de-la-reforma-pensional-2023.pdf
puntos-clave-de-la-reforma-pensional-2023.pdfosoriojuanpablo114
 
Sistema de Control Interno aplicaciones en nuestra legislacion
Sistema de Control Interno aplicaciones en nuestra legislacionSistema de Control Interno aplicaciones en nuestra legislacion
Sistema de Control Interno aplicaciones en nuestra legislacionPedroSalasSantiago
 
mercado de capitales universidad simon rodriguez - guanare (unidad I).pdf
mercado de capitales universidad simon rodriguez - guanare (unidad I).pdfmercado de capitales universidad simon rodriguez - guanare (unidad I).pdf
mercado de capitales universidad simon rodriguez - guanare (unidad I).pdfGegdielJose1
 
canasta basica de la india original 2 .pptx
canasta basica de la india original 2 .pptxcanasta basica de la india original 2 .pptx
canasta basica de la india original 2 .pptxarmandoantoniomartin1
 
Análisis de la Temporada Turística 2024 en Uruguay
Análisis de la Temporada Turística 2024 en UruguayAnálisis de la Temporada Turística 2024 en Uruguay
Análisis de la Temporada Turística 2024 en UruguayEXANTE
 
TEMA 3 DECISIONES DE INVERSION Y FINANCIACION UNIVERISDAD REY JUAN CARLOS
TEMA 3 DECISIONES DE INVERSION Y FINANCIACION UNIVERISDAD REY JUAN CARLOSTEMA 3 DECISIONES DE INVERSION Y FINANCIACION UNIVERISDAD REY JUAN CARLOS
TEMA 3 DECISIONES DE INVERSION Y FINANCIACION UNIVERISDAD REY JUAN CARLOSreyjuancarlosjose
 
LOS MIMBRES HACEN EL CESTO: AGEING REPORT.
LOS MIMBRES HACEN EL CESTO: AGEING  REPORT.LOS MIMBRES HACEN EL CESTO: AGEING  REPORT.
LOS MIMBRES HACEN EL CESTO: AGEING REPORT.ManfredNolte
 
PRUEBA PRE ICFES ECONOMIA. (4) - copia.doc
PRUEBA PRE ICFES ECONOMIA. (4) - copia.docPRUEBA PRE ICFES ECONOMIA. (4) - copia.doc
PRUEBA PRE ICFES ECONOMIA. (4) - copia.docmilumenko
 
ejemplo de tesis para contabilidad- capitulos
ejemplo de tesis para contabilidad- capitulosejemplo de tesis para contabilidad- capitulos
ejemplo de tesis para contabilidad- capitulosguillencuevaadrianal
 

Último (17)

El cheque 1 y sus tipos de cheque.pptx
El cheque  1 y sus tipos de  cheque.pptxEl cheque  1 y sus tipos de  cheque.pptx
El cheque 1 y sus tipos de cheque.pptx
 
Mercado Eléctrico de Ecuador y España.pdf
Mercado Eléctrico de Ecuador y España.pdfMercado Eléctrico de Ecuador y España.pdf
Mercado Eléctrico de Ecuador y España.pdf
 
QUE REQUISITOS DEBO CUMPLIR PARA PENSIONARME.pdf
QUE REQUISITOS DEBO CUMPLIR PARA PENSIONARME.pdfQUE REQUISITOS DEBO CUMPLIR PARA PENSIONARME.pdf
QUE REQUISITOS DEBO CUMPLIR PARA PENSIONARME.pdf
 
Principios de economia Mankiw 6 edicion.pdf
Principios de economia Mankiw 6 edicion.pdfPrincipios de economia Mankiw 6 edicion.pdf
Principios de economia Mankiw 6 edicion.pdf
 
METODOS ESCALA SALARIAL EN ESTRUCTURAS.PPT
METODOS ESCALA SALARIAL EN ESTRUCTURAS.PPTMETODOS ESCALA SALARIAL EN ESTRUCTURAS.PPT
METODOS ESCALA SALARIAL EN ESTRUCTURAS.PPT
 
41 RAZONES DE PORQUE SI ESTAMOS MAL EN MÉXICO
41 RAZONES DE PORQUE SI ESTAMOS MAL EN MÉXICO41 RAZONES DE PORQUE SI ESTAMOS MAL EN MÉXICO
41 RAZONES DE PORQUE SI ESTAMOS MAL EN MÉXICO
 
Politicas publicas para el sector agropecuario en México.pptx
Politicas publicas para el sector agropecuario en México.pptxPoliticas publicas para el sector agropecuario en México.pptx
Politicas publicas para el sector agropecuario en México.pptx
 
MANUAL PARA OBTENER MI PENSIÓN O RETIRAR MIS RECURSOS.pdf
MANUAL PARA OBTENER MI PENSIÓN O RETIRAR MIS RECURSOS.pdfMANUAL PARA OBTENER MI PENSIÓN O RETIRAR MIS RECURSOS.pdf
MANUAL PARA OBTENER MI PENSIÓN O RETIRAR MIS RECURSOS.pdf
 
puntos-clave-de-la-reforma-pensional-2023.pdf
puntos-clave-de-la-reforma-pensional-2023.pdfpuntos-clave-de-la-reforma-pensional-2023.pdf
puntos-clave-de-la-reforma-pensional-2023.pdf
 
Sistema de Control Interno aplicaciones en nuestra legislacion
Sistema de Control Interno aplicaciones en nuestra legislacionSistema de Control Interno aplicaciones en nuestra legislacion
Sistema de Control Interno aplicaciones en nuestra legislacion
 
mercado de capitales universidad simon rodriguez - guanare (unidad I).pdf
mercado de capitales universidad simon rodriguez - guanare (unidad I).pdfmercado de capitales universidad simon rodriguez - guanare (unidad I).pdf
mercado de capitales universidad simon rodriguez - guanare (unidad I).pdf
 
canasta basica de la india original 2 .pptx
canasta basica de la india original 2 .pptxcanasta basica de la india original 2 .pptx
canasta basica de la india original 2 .pptx
 
Análisis de la Temporada Turística 2024 en Uruguay
Análisis de la Temporada Turística 2024 en UruguayAnálisis de la Temporada Turística 2024 en Uruguay
Análisis de la Temporada Turística 2024 en Uruguay
 
TEMA 3 DECISIONES DE INVERSION Y FINANCIACION UNIVERISDAD REY JUAN CARLOS
TEMA 3 DECISIONES DE INVERSION Y FINANCIACION UNIVERISDAD REY JUAN CARLOSTEMA 3 DECISIONES DE INVERSION Y FINANCIACION UNIVERISDAD REY JUAN CARLOS
TEMA 3 DECISIONES DE INVERSION Y FINANCIACION UNIVERISDAD REY JUAN CARLOS
 
LOS MIMBRES HACEN EL CESTO: AGEING REPORT.
LOS MIMBRES HACEN EL CESTO: AGEING  REPORT.LOS MIMBRES HACEN EL CESTO: AGEING  REPORT.
LOS MIMBRES HACEN EL CESTO: AGEING REPORT.
 
PRUEBA PRE ICFES ECONOMIA. (4) - copia.doc
PRUEBA PRE ICFES ECONOMIA. (4) - copia.docPRUEBA PRE ICFES ECONOMIA. (4) - copia.doc
PRUEBA PRE ICFES ECONOMIA. (4) - copia.doc
 
ejemplo de tesis para contabilidad- capitulos
ejemplo de tesis para contabilidad- capitulosejemplo de tesis para contabilidad- capitulos
ejemplo de tesis para contabilidad- capitulos
 

Tutorial básico de Open ERP: instalación y modelado

  • 1. TUTORIAL BASICO OPEN ERP (V. 5.0.7) DESARROLLADORES OPEN ERP José Luis García Hernández Universidad de Antioquia Ingeniería de Sistemas Colombia Medellín
  • 2. TUTORIAL BASICO OPEN ERP (V. 5.0.7) Por: José Luis García Hernández Este tutorial se encuentra protegido bajo la licencia de Creative Commons de reconocimiento-compartido 2.5, usted es libre de: : Copiar, distribuir y comunicar públicamente la obra. : Hacer obras derivadas Bajo las siguientes condiciones: : Reconocimiento — Debe reconocer los créditos 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, sólo puede distribuir la obra generada bajo una licencia idéntica 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 legítimos 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. 2
  • 3. Nota: Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de obra. Para más información sobre términos de la licencia diríjase a la página http://creativecommons.org/ Donaciones Si este tutorial es de tu agrado puedes contribuir dando un pequeño aporte de dinero, así podrás acceder a decenas de ejemplos, módulos, asesorías, incluyendo tutoriales avanzados y tutoriales afines a Open ERP que contribuirán a tu formación como desarrollador. Tipos de Donación: • Nivel 1 Inversión: 5 dólares. Acceso: Asesorías y ejemplos • Nivel 2 Inversión: 10 dólares. Acceso: Asesorías y ejemplos, Tutoriales Básicos y afines. • Nivel 2 Inversión: 15 dólares. Acceso: Asesorías y ejemplos, Tutoriales Básicos, avanzados y afines Si quieres dar una donación por favor ponte en contacto con el grupo en google http://groups.google.com.co/group/openerpamerica. 3
  • 4. TABLA DE CONTENIDO 1. INTRODUCCION …………………………………………………………6 2. QUE ES OPEN ERP …………………………………………………………6 2.1. Ventajas de Open ERP …………………………………………………7 2.2. Integración con otros software …………………………………………8 3. INSTALACIÓN DE OPEN ERP …………………………………………9 4. SISTEMA DE ARCHIVOS BÁSICOS …………………………………………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 básicos …………………………………………………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 diseño …………………………………………21 4.4.4. Atributos para los campos …………………………………………22 5. MODELACIÓN DE OBJETOS …………………………………………………22 5.1. Archivo <modulo>.py …………………………………………………23 5.1.1. Explicación y consideraciones …………………………………23 5.2. Archivo __terp__.py …………………………………………………24 5.3. Archivo __init__.py …………………………………………………24 5.4. Implementación de una vista Form …………………………………24 5.5. Implementación de una vista Tree …………………………………25 6. CREACIÓN DE MENÚS 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 4
  • 5. 7. HERRAMIENTAS DE MODELADO (DIA UML) …………………………30 8. MODELADO DE CLASES …………………………………………………31 9. RELACIONES …………………………………………………………………34 9.1. Relación many2one …………………………………………………34 9.1.1. Explicación y consideraciones …………………………………35 9.2. Relación one2many …………………………………………………36 10. HERENCIA …………………………………………………………………37 10.1. Herencia de objetos …………………………………………………37 10.1.1. Herencia por extensión …………………………………37 10.1.2. Herencia por prototipo …………………………………39 10.1.3. Herencia por delegación ………………………………….39 10.2. Herencia de vistas ………………………………………………….40 11. BIBLIOGRAFÍA ………………………………………………………………….41 5
  • 6. 1. INTRODUCCIÓN El Open ERP (Enterprise Resource Planning, ERP por sus siglas en inglés) es un sistema planeador de recursos empresariales que permite realizar una gestión integrada de los recursos. Entre sus características están la contabilidad analítica, contabilidad financiera, gestión de almacenes/inventario, gestión de ventas y compras, automatización de tareas, campañas de marketing, ayuda técnica (Helpdesk), y punto de venta, dentro de la construcción misma del software se hace uso intensivo de flujos de trabajo que se puede integrar con los módulos haciendo la modificación de aprobación y en general de cualquier proceso adaptable. Este Tutorial básico de Open ERP provee una introducción técnica y al mismo tiempo completa de cómo implementar Open ERP en tu computador y aprender a construir diferentes tipos modulos dependiendo de necesidades especificas. El tutorial incluye desde la instalación 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 más divertido y proporciona una gran satisfacción cuando se da con la solución 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 almacén e inventario, entre otras. Open ERP soporta múltiples monedas, múltiples com- pañías y múltiples contabilidades; además incorpora funcionalidades de gestión de documentos para agilizar la colaboración 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+, también hay una alter- nativa construida sobre Qt. Adicionalmente Open ERP tiene un cliente para 6
  • 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 adecuación e implantación sea limpia teniendo un esquema de arquitectura menor que otras soluciones. Dentro de la construcción misma del software se hace uso intensivo de flujos de trabajo que se puede integrar con los módulos haciendo fácil la modificación de y en general de cualquier proceso adaptable. 2.1. Ventajas de OpenERP Completo En estos momentos existen más de 300 módulos específicos para distintos sectores de actividad. Potente OpenERP añade en la mayor parte de sus áreas herramientas de análisis y generación de reportes, con lo que la gestión y visualización de la informa- ción se simplifica. Flexible Las modificaciones y adaptaciones de código 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 estándares, abierto y ampliamente soportado. Existe una importante comunidad de desarrolladores que están constante- mente fortaleciendo el proyecto (amplia documentación, foros, cvs, mailing, listas, etc.). Accesible Open ERP se suministra bajo licencia GPL, por lo que no se abonan licen- cias de adquisición. Ud. sólo paga por los costos de integración y adapta- ción a las necesidades de su empresa. Avanzado técnicamente • Usa doble entrada en la gestión de inventarios. • Soporta múltiples vistas de la contabilidad. 7
  • 8. Está preparado para conformar normas ISO9001. • Funciona con bases de datos de objetos. • Utiliza flujos de trabajos flexibles y dinámicos. • Soporta plataformas heterogéneas: Linux, Windows. • Utiliza un esquema de servidor distribuido. 2.2. Integración con otros software Todos los informes de Open ERP se generan en PDF para una perfecta im- presión. También se pueden generar archivos en Word o Excel que des- pués pueden modificarse antes de ser enviados a un cliente por carta, mail o fax en forma automática. Open ERP se integra con los siguientes softwares comerciales: • Visualización bajo Adobe Reader (PDF). • Importación/Exportación de Microsoft Office u OpenOffice. • Exportación a Excel (or CSV). • Google maps: servidor de aplicaciones de mapas en la web (gratuito). También existen publicados conectores con software libre como: • OpenOffice: La suite ofimática de código abierto desarrollada por Sun Microsystems/Oracle. • Mozilla Thunderbird: Cliente de correo electrónico de los creadores de Mozilla Firefox. • Jasper Reports (iReport): herramienta de creación de informes Java libre. • Magento: aplicación de comercio electrónico online. • Oscommerce: otra aplicación de comercio electrónico online. • Joomla: gestor de contenidos (integración parcial a través de xml- rpc). 8
  • 9. Spree: software de comercio electrónico para Ruby on Rails. • Dia UML: software de diagramas para implementación de modulos. 3. INSTALACIÓN (Windows) La instalación es total mente automática bajo todos los sistemas operativos windows, solo se debe ingresar a la página oficial (www.openerp.com) y descargar el paquete AllInOne y ejecutar la instalación, es preferible realizar la instalación en el sistema de archivos. Para la conexión del cliente al servidor Open ERP se debe iniciar la aplicación, si es la primera vez que se ejecuta el cliente puede aparecer primero una encuesta sobre el interés en el uso de Open ERP, este paso se puede obviar, después aparecerá una ventana pequeña para iniciar la conexión 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 conexión se informa que ¡No se puede conectar al servidor!, significa que los parámetros del Servidor son incorrectos. Se debe hacer clic en el botón Cambiar y modificar los parámetros de Servidor, Puerto y Protocolo de conexión. En una configuración por defecto donde cliente y servidor están en la misma máquina estos serían los valores típicos: • Servidor: localhost • Puerto: 8070 • Protocolo de conexión: NET-RPC (faster) O también estos: • Servidor: localhost • Puerto: 8069 • Protocolo de conexión: 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. 9
  • 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 información: • Servidor Open ERP: Los mismos datos de conexión que en la ventana de entrada. Normalmente localhost, 8070, NET-RPC (faster) • Contraseña del super-administrador: Esta contraseña debe coincidir con la definida en el parámetro admin_password del archivo de configuración del servidor. Por defecto admin aunque en entornos de producción hay que cambiarla para evitar que los usuarios sean capaces de crear bases de datos. 10
  • 11. Nuevo nombre de la base de datos: Nombre de la base de datos a crear, por ejemplo oerp_bd • Cargar datos de demostración: si se está testeando OpenERP por primera vez de clic en Sí o en caso contrario de clic en No en entornos de producción. • Idioma por defecto: Idioma por defecto de la aplicación y de los nuevos usuarios: Spanish/Español, Catalan/Català… • Contraseña del administrador: La contraseña del usuario para la base de datos especifica de Open ERP. Es muy importante este usuario (y recordar su contraseña) ya que es el usuario que puede administrar todo el sistema en esa base de datos. • Confirmar contraseña: Repetir la contraseña anterior. A continuación empezará la creación de la base de datos de Open ERP. Se crearán numerosas tablas y registros, por lo que puede tardar un poco la instalación. La conexión se hace automáticamente como usuario administrador y se iniciará el asistente de instalación: • Seleccionar un perfil: Se puede seleccionar un perfil (como muestra la figura 3) en concreto que nos instalará de forma automática los módulos relacionados con ese perfil o escoger el perfil mínimo (sólo instala el módulo base) y posteriormente instalar los módulos que interesen. 11
  • 12. Figura 3. Selección de perfil preferido • Información general: Aquí podemos introducir la información de la compañía como el nombre, dirección, correo electrónico, teléfono 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 organización se la denomina compañía). Figura 4. Información general de la empresa • Información de los informes (2a pestaña): Aquí se definen los textos que aparecerán en la cabecera (derecha) y pie de pagina de 12
  • 13. los informes y el logo de la compañía (por defecto el logo aparecerá a la izquierda de la cabecera) como muestra la figura 5. Figura 5. Información de los reportes de la empresa Finalmente empezará la configuración de los módulos instalados mediante asistentes con abundante información. Si se ha seleccionado el perfil mínimo sólo se pedirá: • Modo de vista: Interfaz simplificada o extendida (figura 6). Figura 6. Interface simplifica o extendida dependiendo de las necesidades del usuario • Creación de nuevos usuarios: En entornos de producción 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). También se pueden crear más adelante. 13
  • 14. Figura 7. Configuración de usuarios Figura 8. Configuración de grupos 14
  • 15. Figura 9. Configuración de roles Al terminar aparece el menú con los módulos instalados como muestra la figura 10. Figura 10. Finalización de instalación de la base de datos. Inicialización de la aplicación. 4. SISTEMAS DE ARCHIVOS BÁSICO Todos los módulos 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 lógica 15
  • 16. del negocio, un modulo está compuesto por cuatro archivos básicos (algunos módulos son más robustos): • Archivo __init__.py • Archivo __terp__.py • Archivo <tu_modulo>.py • Archivo <tu_vista>.xml 4.1. Archivo __init__.py Permite cargar el modulo creado 4.2. Archivo __terp__.py Este archivo contiene un diccionario que describe todos los archivos que se utilizan en la implementación de un modulo. 4.2.1. Diccionario descriptor: • name : Nombre del modulo • versión: Versión del modulo • description: Una descripción 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, reportes…etc. • init_xml: Lista de los archivos XML que se cargaran con la instalación del modulo • instalable: Determina si un modulo es instalable o no (True o False) 16
  • 17. active: Determina los módulos que son creados en la base de datos. 4.3. Archivo <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 búsqueda y lectura de métodos • _rec_name: Nombre del campo que se usa para recursos de búsqueda 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 básicos y los relacionales, los básicos solos sirven para introducir datos basicos y los relacionales (ver tipos de relación) permiten establecer relaciones entre los objetos. 4.3.2. Campos básicos: • boolean: Bolean (True o False) 17
  • 18. Sintaxis: Fields.boolean(‘Field name’, [, Optional Parameters]) • integer: Numero entero Sintaxis: fields.integer('Field Name' [, Optional Parameters]), • float: Un numero de punto flotante Sintaxis: fields.float('Field Name' [, Optional Parameters]), • char: Un string de espacio limitado, su longitud es un parámetro requerido Sintaxis: fields.char('Field Name', size=n [, Optional Parameters]) • text: Un campo de texto sin limite Sintaxis: fields.text('Field Name' [, Optional Parameters]), • date: Un dato Sintaxis: fields.date('Field Name' [, Optional Parameters]), • datetime: Permite asignar un dato de tiempo Sintexis: fields.datetime('Field Name' [, Optional Parameters]), • binary: Dato binario • selection: Esta campo permite seleccionar un dato de varios valores predeterminados Sintaxis: 18
  • 19. fields.selection((('n','Unconfirmed'), ('c','Confirmed')), 'field Name' [, Optional Parameters]) 4.3.3. Campos Relacionales • one2many: Este campo expresa una relación uno a muchos entre dos objetos, este campo es obsoleto utilizando una relación many2one Sintaxis: fields.one2one('other.object.name', 'Field Name') fields.one2many('other.object.name', 'Field relation id', 'Fieldname', optional parameter) * Optional parameters: - invisible: True/False - states: ? - readonly: True/False • many2one: Asocia este objeto con un objeto padre en una relación muchos a uno, por ejemplo, de muchas marcas de autos existe una que pertenece a un vehículo en particular Sintaxis: fields.many2one('other.object.name', 'Field Name', optional parameter) Optional parameters: - ondelete: What should happen when the resource this field points to is deleted. + Predefined value: "cascade", "set null", "restrict", "no action", "set default" + Default value: "set null" - required: True - readonly: True - select: True - (creates an index on the Foreign Key field) • many2many: Sintaxis: fields.many2many( 'other.object.name', 'relationobject', 'actual.object.id', 'other.object.id', 'Field Name') Donde: • other.object.name is the other object which belongs to the relation • relation object is the table that makes the link 19
  • 20. actual.object.id and other.object.id are the fields’ names used in the relation table Ejemplo: 'category_ids':fields.many2many( 'res.partner.category', 'res_partner_category_rel', 'partner_id', 'category_id', 'Categories') • one2one: Este campo se encuentra obsoleto por que una relación uno a uno es realmente una relación muchos a uno (many2one). 4.4. Archivo <modulo_view>.xml Las vistas en Open ERP se dividen en tres; las tree, las form y las graphic, sin embargo las más utilizadas son las tree y las from y son las que se verán continuación. 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 relación one2many. También se puede realizar la operación 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 perímete realizar búsquedas en la pantalla. Esta vista es simple y solo tiene algunas opciones de diseño Los archivos xml que describen las vistas tienen el siguiente formato: 20
  • 21. <?xml version="1.0"?> <openerp> <data> [view definitions] </data> </openerp> La definición 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 acción perteneciente a esa vista • <menuitem> un tags que crea la entrada en el menu y el vinculo de la acción. 4.4.3. Elementos de diseño Existen varios elementos de diseño que nos permiten personalizar las vistas form y tree de los objetos creados. • Page: Define una nueva página para el notebook, ejemplo: <page string="Order Line"> ... </page>: El atributo string define el numero de pagina • Separator: Agrega una línea de separación en el formato, ejemplo: <separator string="Links" colspan="4"/> El atributo string define la etiqueta del separador y el atributo colspan define su tamaño • Notebook: Permite distribuir los campos de la vista en diferentes tabs que van definidos por paginas, ejemplo: <notebook colspan="4">....</notebook> • Group: Permite crear grupos de varias columnas, ejemplo: <group col="3" colspan="2"> <field name="invoiced" select="2"/> <button colspan="1" name="make_invoice" states="confirmed" string="Make Invoice" type="object"/> </group> Parámetros para crear grupos • colspan: numero de columnas para usar • rowspan: numero de filas para expandir o no el grupo 21
  • 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 búsqueda 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 símbolo “•” • string=”“: Cambia la etiqueta de un campo. También es usado como parámetro de búsqueda por la vista árbol. • domain: puede restringir un dominio Example: domain=”[(‘partner_id’,’=’,partner_id)]” • widget: puede cambiar un widget. Example: widget=”one2many_list” • one2one_list • one2many_list • many2one_list • many2many • url • email • image • float_time • reference 5. MODELACIÓN DE OBJETOS En el capitulo anterior se muestra que archivos debe tener un modulo básico. A continuación 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 básico como muestra la ilustración 1: Ilustración 1. Archivos basicos 22
  • 23. 5.1. Archivo motion.py: 1 from osv import fields, osv 2 cimport time 3 class motion_pelicula(osv.osv): 4 _name = 'motion.pelicula' 5 _description = 'Pelicula' 6 _columns = { 7 'nombre_d' : fields.char('Nombre director', size=30, required=True), 8 'nombre' : fields.char('Nombre pelicula', size=30, required=True), 9 'fecha' : fields.date('Fecha de adquisicion', required=True), 10 'costo_a' : fields.integer('Costo alquiler'), 11 'costo' : fields.integer('Costo de la pelicula'), 12 'codigo' : fields.integer('Codigo', required=True), 13 'numero' : fields.integer('Numero de copias', required=True), 14 } 15 _defaults = { 16 'fecha' : lambda *a : time.strftime("%Y-%m-%d"), 17 } 18 mt.pelicula() 5.1.1. Explicación y consideraciones: Línea Explicación Consideraciones 1-2 Se importar los módulos requeridos para trabajar con objetos Open ERP, además puedes importar módulos Python para implementaciones superiores 3 Todos los objetos heredan de Es importante recordar osv.osv que los nombres de las clases no pueden contener letras en mayúscula, es un error de programación y por lo tanto no permite que se instale el modulo. El nombre de la clase lleva una separación “_” , con el propósito de no poner letras en mayúscula, por convención los nombre de los objetos llevan primero el nombre del modulo y después su propio nombre, o su subnombre asociado a otra clase en caso de que se establezcan relaciones entre los objetos 4-5 Las clase básicas contienen el El atributo name es el nombre y descripción nombre de la clase pero con la excepción de que donde lleve una 23
  • 24. separación “_” se pone un punto “.” 6-14 Diccionario donde se especifican los Por ejemplo, el fields.char campos que se utilizaran en la vista crea una entrada de texto (columns) o textbox, además los parámetros de los campos nos especifican cosas como el nombre del campo, si es o no requerido entre otros parámetros. 15-17 adicionalmente existe otras En este diccionario propiedades como defaults que inicializamos los campos establecer valores predeterminados en la vista, en este caso se inicializa con la fecha actual 16 Todas las clases deben ser inicializadas 5.2. Archivo __terp__.py: { "name" : "Peliculas Motion", "version" : "1.1", "author" : "Jose Luis", "category" : "Generic Modules/Human Resources", "website" : "http://www.deitek.com", "description": """Prueba para aficionados de python """, 'author': 'Jose Luis', 'website': 'http://www.deitek.com', 'depends': ['base'], 'init_xml': [], 'update_xml': [ 'vista_view.xml' ], 'demo_xml': [], 'installable': True, 'active': False, } 5.3. Archivo __init__.py: import motion 5.4. Implementación de una vista form En el capitulo anterior se creó un modulo de ilustración (motion), ahora se procede a construir la vista form (figura 11) del objeto: Código: <record id="vista_pelicula_form" model="ir.ui.view"> <field name="name">motion.pelicula.form</field> <field name="model">motion.pelicula</field> <field name="type">form</field> <field name="arch" type="xml"> <form string="Peliculas"> <group col="2" colspan="2"> 24
  • 25. <separator colspan="2" string="Informacion General"/> <field name="nombre" select="1"/> <field name="codigo" select="1"/> <field name="nombre_d" select="1"/> </group> <group col="2" colspan="2"> <separator string="Informacion Secundaria" colspan="2"/> <field name="fecha"/> <field name="costo"/> <field name="numero"/> <field name="costo_a"/> </group> <notebook colspan="4"> <page string="Notas"> <field colspan="4" nolabel="1" name="notas"/> </page> </notebook> </form> </field> </record> Vista: Figura 11. Vista form del objeto motion.pelicula 5.5. Implementación 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 máscara de búsqueda. Estas vistas son más simples que form’s 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: Código: <record id="vista_peliculas_arbol" model="ir.ui.view"> <field name="name">motion.pelicula.tree</field> <field name="model">motion.pelicula</field> <field name="type">tree</field> <field name="arch" type="xml"> <tree string="Peliculas"> <field name="nombre"/> <field name="codigo"/> <field name="nombre_d"/> </tree> </field> </record> 25
  • 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 extensión .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 menús y sus acciones por lo que las figuras nos simplemente ilustrativas. 6. CREACIÓN DE MENÚS Y ACCIONES 6.1. Menús Los menús en Open ERP poseen las siguientes características: • Id: Todos los menús necesitan un id para poder ser identificados por Open ERP dentro de la tabla de item’s • Name: Especifica la posición jerárquica y el nombre del menú o entrada • Action: Identifica la acción 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, 26
  • 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_JUMP_TO, STOCK_JUSTIFY_CENTER, STOCK_JUSTIFY_FILL, STOCK_JUSTIFY_LEFT, STOCK_JUSTIFY_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ú: <menuitem id="menuitem_id" name="Position/Of/The/Menu/Item/In/The/Tree" action="action_id" icon="NAME_FROM_LIST" groups="groupname" sequence="<integer>"/> Para la vista creada en el capitulo anterior se agrega un menú raíz (figura 13) con las siguientes líneas: <menuitem icon="STOCK_MEDIA_PLAY" id="menu_raiz_motion" name="Motion Peliculas"/> Y los submenús (figura 3): <menuitem id="menu_motion_reporte" name="Reportes" parent="motion.menu_raiz_motion"/> <menuitem id="menu_motion_peli" name="Peliculas" 27
  • 28. Vista: Figura 13. Menús 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 método del lado del servidor • Group: Reúne algunas acciones en un grupo A continuación se construye una nueva acción para la vista form y tree del objeto motion.pelicula que creara la entrada para el formulario. 6.2.1. Acciones Form: <record id="abrir_vista_nueva_pelicula" model="ir.actions.act_window"> <field name="name">Nueva pelicula</field> <field name="res_model">motion.pelicula</field> <field name="view_type">form</field> <field name="view_mode">form,tree</field> </record> Enlace entre la acción y el submenú: <menuitem action="abrir_vista_nueva_pelicula" id="menu_abrir_vista_nueva_pelicula" parent="menu_motion_peli"/> parent="motion.menu_raiz_motion"/> 6.2.2. Acciones Tree: <record id="abrir_vista_peliculas_arbol" model="ir.actions.act_window"> <field name="name">Todas las peliculas</field> <field name="res_model">motion.pelicula</field> <field name="view_type">tree</field> <field name="view_mode">tree,form</field> <field name="view_id" ref="vista_peliculas_arbol"/> <field name="domain">[]</field> </record> Enlace entre la acción y el submenú: <menuitem action="abrir_vista_peliculas_arbol" id="menu_abrir_vista_peliculas_arbol" parent="menu_motion_peli"/> 28
  • 29. 6.2.3. Archivo motion_view.xml: <?xml version="1.0" encoding="utf-8"?> <openerp> <data> <menuitem icon="STOCK_MEDIA_PLAY" id="menu_raiz_motion" name="Motion Peliculas"/> <menuitem id="menu_motion_reporte" name="Reportes" parent="motion.menu_raiz_motion"/> <menuitem id="menu_motion_peli" name="Peliculas" parent="motion.menu_raiz_motion"/> <record id="vista_pelicula_form" model="ir.ui.view"> <field name="name">motion.pelicula.form</field> <field name="model">motion.pelicula</field> <field name="type">form</field> <field name="arch" type="xml"> <form string="Peliculas"> <group col="2" colspan="2"> <separator colspan="2" string="Informacion General"/> <field name="nombre" select="1"/> <field name="codigo" select="1"/> <field name="nombre_d" select="1"/> </group> <group col="2" colspan="2"> <separator string="Informacion Secundaria" colspan="2"/> <field name="fecha"/> <field name="costo"/> <field name="numero"/> <field name="costo_a"/> </group> <notebook colspan="4"> <page string="Notas"> <field colspan="4" nolabel="1" name="notas"/> </page> </notebook> </form> </field> </record> <record id="abrir_vista_nueva_pelicula" model="ir.actions.act_window"> <field name="name">Nueva pelicula</field> <field name="res_model">motion.pelicula</field> <field name="view_type">form</field> <field name="view_mode">form,tree</field> </record> <menuitem action="abrir_vista_nueva_pelicula" id="menu_abrir_vista_nueva_pelicula" parent="menu_motion_peli"/> <record id="vista_peliculas_arbol" model="ir.ui.view"> <field name="name">motion.pelicula.tree</field> <field name="model">motion.pelicula</field> <field name="type">tree</field> <field name="arch" type="xml"> <tree string="Peliculas"> <field name="nombre"/> <field name="codigo"/> <field name="nombre_d"/> </tree> </field> </record> <record id="abrir_vista_peliculas_mi_lista" model="ir.actions.act_window"> <field name="name">All Peliculas</field> <field name="res_model">motion.pelicula</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> 29
  • 30. <field name="domain">[]</field> </record> <menuitem action="abrir_vista_peliculas_mi_lista" id="menu_abrir_vista_peliculas_arbol" parent="menu_motion_peli"/> </data> </openerp> NOTA: Para probar módulos nuevos en Open ERP se debe reiniciar el servidor, el programa se encuentra localizado en la carpeta server/service. Después de realizar esto se debe actualizar la lista de modulo, finalmente se instala el modulo. En la versión 5.0.7 es posible actualizar la lista de módulos sin reiniciar el servidor. 7. HERRAMIENTAS DE MODELADO (DIA UML) DIA es un programa de propósito general para la creación 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-relación, diagramas UML, diagramas de flujo, diagramas de redes, diagramas de circuitos eléctricos, etc. Nuevas formas pueden ser fácilmen- te agregadas, dibujándolas con un subconjunto de SVG e incluyéndolas en un archi- vo XML. El formato para leer y almacenar gráficos es XML (comprimido con gzip, para ahorrar espacio). Puede producir salida en los formatos EPS, SVG y PNG. También conviene recordar que Dia, gracias al paquete dia2code, puede generar el esqueleto del código a escribir, si utilizáramos con tal fin un UML. Esta herramienta también puede generar módulos Open ERP agregando el plugin (codegen_openerp.py) que permite exportar diagramas de clases. 7.1. Instalación 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 instalación de Dia • Descargar el plugin codegen_openerp.py y descomprimirlo en la carpeta C:Archivos de programaDia o donde tengas instalado Dia. Puedes des- cargar el plugin del grupo de google: http://groups.google.com.co/group/openerpamerica 30
  • 31. 8. MODELADO DE CLASES Como se explico anteriormente es muy útil utilizar Dia para crear módulos Open ERP, debido a que el plugin genera todos los componentes básicos de un modulo, si se desean crear reportes, flujos de trabajo o métodos para las clases se debe añadir el código 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 venía trabajando anteriormente: • Primero se debe configurar DIA para utilizar diagramas UML como muestra la figura 14. Figura 14. Selección 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 configuración de la clase, atributos, operaciones, plantillas y estilo. Para crear módulos solo se necesitan los atributos. El nombre de la clase debe ser genérico y sin mayúsculas, 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 código. 31
  • 32. Figura 15. Asignando nombre y estereotipos de una clase • Después 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 32
  • 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. Exportación de un diagrama como modulo Open ERP NOTA: Algunas veces se debe revisar el código generado por Dia, debido a que se puede generar el código en desorden, por ejemplo en 33
  • 34. una relación many2one primero debe existir la clase relacionada antes de crear la relación. En nuestro caso primero debe existir motion.genero y después motion.pelicula, también es aconsejable reiniciar Dia cuando se haga la exportación debido a que se ha identificado un error cuando se han realizado más de una exportación ya que se replica el código (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. Importación de módulos 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 capítulo se mostrara algunos ejemplos en el modulo que se viene trabajando. 9.1. Relación many2one Se empieza por establecer un objeto relacionado con una película, en este caso el género de la película, de muchos géneros hay una que pertenece a la película (una película puede estar relacionada con varios géneros de varias formas, sin embargo esto depende del punto de vista), por lo tanto es una relación many2one: Archivo 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)', 34
  • 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. Explicación y consideraciones: Línea Explicación 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 Relación many2one. Este campo IMPORTANTE: Es muy tiene una relación de muchos a uno, importante crear primero ósea que de muchos géneros, hay el objeto con el que se uno que pertenece a nuestra establece la relación y película, también tenemos que después el objeto agregar el campo a la vistas relacionado cuando se está trabajando con un campo many2one, de lo contrario Open ERP arrojara un error en la instalación debido a que se está accediendo a una relación entre un objeto que aun no existe 9.1.2. Vista del objeto relacionado: <record id="vista_genero_arbol" model="ir.ui.view"> <field name="name">motion.genero.tree</field> <field name="model">motion.genero</field> <field name="type">tree</field> <field name="arch" type="xml"> <tree string="Genero"> <field name="gen"/> <field name="name"/> </tree> </field> </record> <record id="vista_genero_vista" model="ir.ui.view"> <field name="name">motion.genero.form</field> 35
  • 36. <field name="model">motion.genero</field> <field name="type">form</field> <field name="arch" type="xml"> <form string="Genero"> <field name="gen" select="1"/> <field name="name" select="1"/> </form> </field> </record> <record id="accion_genero" model="ir.actions.act_window"> <field name="name">Genero</field> <field name="type">ir.actions.act_window</field> <field name="res_model">motion.genero</field> <field name="view_type">form</field> </record> Nota: Agregar el anterior código a archivo xml de la vista original (El menú ya se encuentra creado*), también se puede agregar la línea; <field name="genero"/>, a la vista del formulario de las películas. 9.2. Relación one2many Para la relación one2many es la contraria a la many2one, esto significa que hay muchos objetos que tienen relación con uno en específico. Se mostrara un ejemplo; suponga que un cliente de películas quisiera ver cuántas películas tiene alquiladas, debe aparecer entonces listadas estas películas en la vista de un usuario, el modelo está representado por el diagrama de clases de la figura 20: Figura 20. Relación one2many entre la clase motion.cliente y motion.pelicula 36
  • 37. Como muestra la muestra la anterior figura, existen realmente dos relaciones una relación one2many entre motion.cliente y motion.pelicula, y otra relación débil many2one entre motion.pelicula y motion.cliente, esta relación es débil porque el campo no es requerido para establecer la relación 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 películas para ese cliente. 10. HERENCIA 10.1. Herencia de objetos En Open ERP existen tres tipos de herencia, herencia por prototipo, por extensión y por delegación (herencia múltiple), todas son completamente diferentes y constituyen una gran herramienta para el desarrollo de los módulos en Open ERP. En la herencia por prototipo y por extensión se debe agregar el siguiente atributo: _inherit='object.name' Donde “object.name” es el objeto del cual se hereda. Veamos los tipos de herencia: 10.1.1. Herencia por extensión Al igual que en programación orientada a objetos el olas nuevas clases creadas heredan los atributos y los métodos 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), 37
  • 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 operación (heren- cia). Con la herencia establecida se especifica que los nuevos campos del atributo “_columns” creados en la nueva clase podrán ser vistos en las vistas form y tree de la clase original (superclase), En el ejemplo todos los campos serán 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 después de la herencia Figura 22. Vista web del objeto res.partner antes de instalar la herencia 38
  • 39. Figura 23. Vista web del objeto res.partner después 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 métodos de su padre (superclase), ejemplo: class other_material(osv.osv): _name = 'other.material' _inherit = 'network.material' _columns = { 'manuf_warranty': fields.boolean('Manufacturer warranty?'), } _defaults = { 'manuf_warranty': lambda *a: False, } other_material() 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 métodos no serán reconocidos en las vistas de la superclase. 10.1.3. Herencia por delegación La herencia por delegación es parecida a la herencia múltiple de c++, en este caso el objeto heredad de múltiples tablas, la técnica cosiste en agregar una co- lumna a la tabla al objeto heredado. Estas columnas guardaran una clave fora- nea (id de otra tabla). Ejemplo: class tiny_object(osv.osv) _name = 'tiny.object' _table = 'tiny_object' _inherits = { 'tiny.object_a': 'object_a_id', 'tiny.object_b': 'object_b_id', ... , 'tiny.object_n': 'object_n_id' } (...) 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 foráneas de “ti- ny.object_a”,… “tiny.object_n” que son guardadas. 39
  • 40. El objeto “tiny.object” hereda todos las columnas y métodos 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 también la vista de la superclase, así se puede agregar, quitar o modificar los campos que se deseen. Ejemplo: <record model="ir.ui.view" id="view_partner_form"> <field name="name">res.partner.form.inherit</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"> <notebook position="inside"> <page string="Relations"> <field name="relation_ids" colspan="4" nolabel="1"/> </page> </notebook> </field> </record> Es posible anexar o editar el contenido de un tag. Los tag tienen algunos atributos que permiten especificar la posición en la cual se desean hacer modificaciones, en el ejemplo se agrega una página a la vista “res.partner.form” en el modulo base. Se pueden utilizar los siguientes valores para indicar la posición: • inside (default): Este valor indica que se anexara un tag dentro. • after: Se agrega un contenido después del tag • before: Se agregara un contenido después del tag • replace: Se remplazara el contenido de un tag Ejemplos de herencias de vistas • Ejemplo: <record model="ir.ui.view" id="view_partner_form1"> <field name="name">res.partner.form.inherit1</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"> <page string="Extra Info" position="replace"> <field name="relation_ids" colspan="4" nolabel="1"/> </page> </field> </record> 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"/> <field name="type">form</field> <field name="arch" type="xml"> 40
  • 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: <record model="ir.ui.view" id="view_res_partner_form"> <field name="name">res.partner.form</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"> <page string="General" position="before"> <page string="Informacion General"> <field name="cod_empresa_cliente" select="1"/> <field name="nit" select="2"/> <field name="dv" select="0"/> <field name="tel1" select="0"/> <field name="tel2" select="0"/> <field name="cel" select="0"/> <field name="email" select="0"/> <field name="fax" select="0"/> <field name="direccion" select="0"/> <field name="es_empleado" select="0"/> <field name="desponi" select="0"/> <field name="gran_contribuyente" select="0"/> <field name="autoretenedor" select="0"/> </page> </page> </field> </record> En este ejemplo se crea una nueva página antes de la página general • Ejemplo: <record model="ir.ui.view" id="view_partner_form3"> <field name="name">res.partner.form.inherit4</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="after"/> <field name="relation_ids"/> </field> </record> Agrega el campo “relation_ids” después del campo “lang” 41
  • 42. 11. BIBLIOGRAFÍA  Open ERP. 2001. Última fecha de actualización: 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 actualización: 24 Marzo 2010. Fecha de acceso: 4 de Marzo de 2010. http://es.wikipedia.org/wiki/OpenERP  Wikipedia. 2010. Última fecha de actualización: 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 más información acerca de este tutorial 42