Hola amigos en ésta publicación les explicaré como desarrollar un módulo en OPENERP 7 usando su propio framework OPENOBJECT.

Suponemos que tiene instalado OPENERP 7 en Ubuntu Server o alguna otra distribución de GNU/Linux.

Vamos a crear un modulo llamado demo, que nos permitirá registrar el nombre de una persona, su edad y la fecha.

Captura de pantalla - 080314 - 01:33:15

 

1. Nos dirigimos a la siguiente ruta.

cd /opt/openerp/server/openerp/addons/

2. Creamos  una carpeta que para nuestro caso será demo e ingresamos en dicha carpeta

mkdir demo
cd demo

3. Creamos los archivo __init__.py, __openerp__.py, demo.py y demo_view.xml

touch __init__.py
touch __openerp__.py
touch demo.py
touch demo_view.xml

__init__.py: Aqui importaremos todos los archivos y directorios que contienen codigo python, éste archivo hace que OPENERP reconozca al directorio o capeta demo como un módulo.

__openerp__.py: Contiene un diccionario en Python para agregar las descripciones del módulo, como autor, versión, etc.

demo.py: Aquí escribiremos el código Python que permitirá agregar o modificar las funcionalidades de OPENERP, este archivo será importado en __init__.py, como veremos mas abajo.

demo_view.xml: Aquí vamos agregar los codigos XML que permitirá construir la vista del Módulo en OPENERP, en nombre debe de terminar en _view.xml por convención.

4. Con tu editor favorito editamos el archivo __init__.py, para este ejemplo usaré el editor vim.

vim __init__.py

Agregamos lo siguiente y guardamos los cambios

#En los modulos estadares generalmente aqui en las primeras lineas
#van los terminos de licencia
# -*- coding: utf-8 -*-
#    ......
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as
#    published by the Free Software Foundation, either version 3 of the
#    License, or (at your option) any later version.
#    ........

import demo

La tercera linea se recomienda agregar, permite reconocer que python trabaje en utf-8

5. Editamos el archivo __openerp__.py

vim __openerp__.py

Agregamos los siguiente y guardamos

# -*- encoding: utf-8 -*-

{
    "name": "Demo",
    "version": "1.0",
    "description": """
        Modulo para fines educativos
    """,
    "author": "Ing. Javier Salazar Carlos",
    "website": "http://salazarcarlos.com",
    "category": "",
    "depends": [
            "base",#Este modulo para instalarse debe tener el modulo base instalado
            "web",#Este modulo para instalarse debe tener el modulo web instalado
                ],
    "data":[
            "demo_view.xml", #todos los archivos xml que posea nuestro modulo se debe de agregarse aqui
                ],
    "demo_xml": [
                        ],
    "update_xml": [
                        ],
    "active": False,
    "installable": True,
}

 

5. Editamos el archivo demo.py y agregamos el siguiente código:

 

# -*- coding: utf-8 -*-
#importamos las librerias propias de openerp, con la cual vamos a hacer referencia a las clases maestras
from openerp.osv import osv,fields
from openerp import netsvc
from openerp.tools.translate import _
from datetime import datetime

#Definimos la clase demo
class demo_demo(osv.osv):
        _name = 'demo.demo' # nombre de la tabla que se creara en la base de datos cuando se instala el modulo
                # lo siguiente son las columnas de la tabla
        _columns = {
                'name': fields.char('Nombre', size=64),
                'edad': fields.integer('Edad',size=3,help="Edad actual"),
                'fecha_nac': fields.date('Fecha'),
                }
demo_demo()

 

6. Editamos el archivo demo_view.xml que permitirá construir la vista del formulario demo.

<?xml version="1.0" encoding="utf-8"?>
<!--Siempre las lineas xml van a ir delimitados por la etiqueta openerp -->
<openerp>
  <!--Las etiquetas data tambien delimitan a las record siempre-->
  <data> <!-- Toda la parte grafica del menu va dentro del la etiqueta <demo>...</demo> -->
        <!--Contruimos la Vista lista - Tree View -->
        <record model="ir.ui.view" id="view_demo_tree">
            <field name="name">demo.tree</field>
            <field name="model">demo.demo</field>
            <field name="arch" type="xml">
                <tree string="Listar de registro">
                   <field name="name"/>
                   <field name="fecha_nac"/>
                   <field name="edad"/>
                </tree>
            </field>
        </record>
    <!-- Construimos la Vista formulario - Form View -->
        <record model="ir.ui.view" id="view_demo_form">
            <field name="name">demo.form</field>
            <field name="model">demo.demo</field>
            <field name="arch" type="xml">
               <form string="Nuevo registro" version="7.0">
                <sheet>
                        <group>
                                <field name="name"/>
                                <field name="fecha_nac"/>
                                <field name="edad"/>
                        </group>
                  </sheet>
                </form>
            </field>
        </record>

    <!-- Definimos una accion para disparar el formulario de demo, cuando hagamos clic en el munu "Demo"  -->
    <record model="ir.actions.act_window" id="action_open_view_demo_form">
        <field name="name">Demo</field>
        <field name="res_model">demo.demo</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>
   <!-- Definimos el nombre del menu padre para Demo, este ira en la parte superior de openerp -->
        <menuitem name="Demo" id="menu_demo_form" action="action_open_view_demo_form" sequence="15"/>

  <!-- Lo siguiente es el menu hijo de Demo, que tambien se llama Demo -->
          <menuitem name="Demo" id="menu_demo" parent="menu_demo_form" sequence="2"/>

  <!-- El siguiente menu "Lista demo", listara los registro guardados en la tabla "demo"  -->
          <menuitem name="Lista demo" id="listar_demo" parent="menu_demo" action="action_open_view_demo_form" sequence="3"/>
  </data>
</openerp>

 

Explicando un poco el contenido del XML, en OPENERP existe varios tipos de vista: Vista lista(tree), Vista formulario(form), etc. hemo construido los dos tipos de vista.

Vista tree:

De la fila 7-17 del archivo xml anterior, permite construir la vista tree

Linea 7:
<record model=»ir.ui.view» id=»view_demo_tree»>
Esta etiqueta indica el inicio de la vista Lista o tree
La etiqueta <record> tiene 2 atributos importantes

model: vista heredada del modelo ir.ui.view
id: Nombre único para cada vista, debe de empezar siempre en view y terminar en tree por convención y si es de tipo formulario terminar en form

Linea 8:
<field name=»name»>demo.tree</field>
Permite asignar un nombre unico a la vista tree, por convencion siempre termina en tree (nombre_vista.tree)

Linea 9:
<field name=»model»>demo.demo</field>
A que modelo o clase esta asociado la vista tree (valor de _name:demo.demo en la clase demo_demo)

Linea 10:
<field name=»arch» type=»xml»>
Como ven esta etiqueta  tiene su cierre (</field>) en la linea 16, dentro de esta etiqueta se coloca los campos que quiero que se muestren en la vista tree

Linea 11:
<tree string=»Listar de registro»>
Esta etiqueta indica que la vista es tipo tree o lista propiamente dicho, dentro de esta etiqueta se coloca los campos a mostrar

Linea 12:
<field name=»name»/>
Las lineas a partir de la 12 nos muestran los campos a ser mostrados en la vista tree,
Estas etiquetas tienen propiedad name, en ella se coloca entre comillas el nombre de los campos de la clase o modelo demo.demo que se desea agregar.

Captura de pantalla - 080314 - 00:13:12

Vista form

Captura de pantalla - 080314 - 00:17:10

 

Linea 36:
<record model=»ir.actions.act_window» id=»action_open_view_demo_form»>
Las acciones son parte de un modulo de OPENERP, aquí creamos una acción que se ejecutará cuando hacemos clic en el menu Demo
El atributo model: indica que hereda de vista tipo accion, siempre lleva el mismo atributo.
El atributo id: es un identificar único para cada accion que se defina

Linea 37:
<field name=»name»>Demo</field>
Toda accion tiene un nombre para nuestro caso lo llamamos Demo

Linea 38:
<field name=»res_model»>demo.demo</field>
Indica a que clase o modelo se asocia dicha accion, para nuestro caso demo.demo

Linea 39:
<field name=»view_type»>form</field>
Indica que tipo de vista se ejecutará con dicha acción.

Linea 43:
<menuitem name=»Demo» id=»menu_demo_form» action=»action_open_view_demo_form» sequence=»15″/>
Con esto construimos el menú superior o principal del modulo, ver imagen siguiente:
Id: Este atributo indica un identificador o nombre único a cada menu
action: Indica que accion se ejecutara cuando se hace clic en el menu Demo, se coloca el id de la accion para nuestro caso de la linea 36
Captura de pantalla - 080314 - 01:02:52

Linea 46:
<menuitem name=»Demo» id=»menu_demo» parent=»menu_demo_form» sequence=»2″/>
Con esto se construye el menu Demo de color morado tal como muestra la imagen siguiente:
parent: Atributo que indica dentro de que menu se mostrará, se coloca el id del menu padre, para nuestro caso de la linea 43
Captura de pantalla - 080314 - 01:06:21

Linea 49:
<menuitem name=»Lista demo» id=»listar_demo» parent=»menu_demo» action=»action_open_view_demo_form» sequence=»3″/>
Con esto se construye el menu Lista demo

7. Damos los permisos a nuestro modulo demo

 

chown -R openerp: /opt/openerp/server/openerp/addons/demo

8. Ingresamos a nuestro OPENERP por medio de un navegador web: http://ip_mi_server:8060 iniciamos sesión con usuario administrador y ademas debemos de tener activado Características técnicas para el usuario administrador y nos dirigimos a la pestaña Configuración/Actualizar lista de modulos y damos actualizar.

Captura de pantalla de 2013-11-24 04:28:42

8. Nos dirigimos a Configuración/modulos instalados y en la parte derecha en el área de búsqueda colocamos el nombre del modulo demo y presionamos enter, nos deberia mostra el modulo Demo, presionamos en el botón Instalar.

Captura de pantalla - 080314 - 01:25:14

 

9. Si todo hemos hecho correctamente nos debería mostrar el menu de Demo .

Captura de pantalla - 080314 - 01:30:23

 

Eso es todo espero que les sea de utilidad.

 

Categorías: Odoo ERP v7

Javier Salazar Carlos

Soy Ingeniero de Ingeniería de Sistemas, egresado de la Universidad Nacional del Callao, especialista en Tecnologías de la Información y de las Comunicaciones (TICs).

15 comentarios

felipe · 18/03/2014 a las 4:17 pm

Hola compañero, como puedo colocar en el formulario de pedido 5 columnas, serian las cantidades por talla del producto en cuestión y el total que seria la sumatoria de estas cantidades, algo como esto:

S M L XL 2XL TOTAL
60 120 120 120 60 480

    Javier Salazar Carlos · 19/03/2014 a las 3:03 am

    La recomendación es cada talla sea un producto diferente, por ejemplo:

    PRODUCTO A TALLA S
    PRODUCTO A TALLA M
    PRODUCTO A TALLA L

    Luego cuando hagas tu pedido de venta o compra elijas cada producto como una nueva linea de producto.

jhuliana · 23/07/2014 a las 9:21 pm

me da el error el ejemplo ValidateError

Ha ocurrido un error mientras se validaban los campo(s) arch: Invalid XML for View Architecture!

quiero colocar o relacionar o heredar la ficha openerp usuario y empresa quitando campos y anexando otros, como lo hago

Joaquín · 04/08/2014 a las 8:08 pm

hola, fíjate que cree un modulo en modo gráfico pero ya esta un poco avanzado mi pregunta es, donde se guarda dicho modulo? para hacerle modificaciones al código, saludos

    Javier Salazar Carlos · 04/08/2014 a las 8:14 pm

    Pues la verdad es que no se recomienda crear modulos en modo gráfico porque cuando quieras hacer una actualización de tus módulos, los cambios que has hecho los perderás, es mejor desarrollar el módulo usando su propio framework.

      juan · 26/08/2014 a las 9:06 am

      Un saludo, mi duda es la siguiente estoy utilizando el framework para desarrollar un módulo nuevo, pero en el archivo xml se define el código de un solo menú, como hago para agregar más(en este caso Lista Demo) o más (Demo en morado) para un solo módulo, donde agrego ese codigo xml, en el mismo o tengo que crear uno nuevo para los demás, gracias

        Javier Salazar Carlos · 27/08/2014 a las 1:19 pm

        Todos se agregan en el mismo archivo xml, para agregar un nuevo menu solo tienes que agregar esto:

        solo tienes que cambiar el id, ya que cada menu debe de tener un unico id.

          juan · 29/08/2014 a las 12:05 am

          muchas gracias por la información, me fue de mucha utilidad, me surje la duda, es posible que por ejemplo al utilizar el módulo de ventas, al registrar una venta al mismo tiempo se modifique los datos de otro módulo, es decir, si registro la venta de un producto, se modifique al mismo tiempo los datos del producto en el módulo almacen?

          juan · 29/08/2014 a las 12:06 am

          Muchas gracias por su tiempo.

Jaider · 24/10/2014 a las 4:20 pm

Buenas,

mi pregunta es la siguiente:

En este ejemplo se trabaja con una vista independiente con su propio menu y demas. Como se haria para crear una form dentro de una vista existente, ejemplo dentro del empleado crear una pestaña adicional con informacion por ejemplo de estudios.

Gracias.

    Javier Salazar Carlos · 28/10/2014 a las 8:31 pm

    Los procedimientos son casi similares, pero un detalle este artículo fue publicado solo con fines académicos, ya que para hacer módulos es recomendable programar usando su propio framework.

Hind · 05/05/2015 a las 8:28 am

Hola!
Gracias por este tutorial, la verdad me ayudo mucho.
El problema es cuando agrego un nuevo campo en este modulo ( por ejemplo

) el módulo no funciona, y me da errores en el archivo .xml dado que solo agrege el nuevo campo sin cambiar nada en el archivo.
Gracias de anticipo

    Javier Salazar Carlos · 06/05/2015 a las 12:54 pm

    Puedes ver el log para ver mas detalles del error, esto si es que tienes instalado Odoo en Ubuntu con el comando siguiente:

    $ tail -f /var/log/odoo-server.log

Antonio · 28/01/2019 a las 9:59 am

Buenos días. Recién estoy empezando a usar Odoo, más exactamente Odoo Studio. Hay algún ejemplo ambientado en Windows. En la empresa en donde trabajo tenemos todo bajo Windows, los puestos locales tienen W7 o 10 y el servidor es un Windows Server 2008. Hace algo así como 2 semanas se comunico una persona de Odoo, pero le comentaba que no entendia como habia que hacer para construir un módulo nuevo, que habia llegado a migrar algunas tablas de la aplicación que estamos usando actualmente (Tablas DBF, estilo FoxPro), pero que si quiero por ej. crear un módulo que calcule el saldo de un cliente, ya ahi no se como seguir. Esa persona quedó en que le iba a decir a un desarrollador para que se comunique conmigo, pero al día de la fecha eso no pasó todavia. Gracias.

– Creación de módulos en OPENERP 7 en modo gráfico · 22/03/2014 a las 2:01 am

[…] Hola amigos quiero compartir con ustedes como crear nuevos módulos en OPENERP 7, en modo gráfico, esto es con fines educativos, ya que si queremos crear un módulo la forma correcta es usar el FRAMEWORK de OPENERP que es OPENOBJECT, aquí se explica como hacerlo. […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

code