Programacion Interactiva

Descubre una Nueva y Poderosa Herramienta.

FrameWork de Nueva Generacion

Acceso a tu Informacion desde cualquier Dispositivo con Navegador.

Enfoque en el Backend

Frontend de forma facil con Odoo y XML.

Creacion de Verticales

Creacion de nuevas Verticales Conquistando nuevos Mercados.

Tu marca aqui mismo

Llega a miles de personas.

Publicidad

Mostrando las entradas con la etiqueta openobject. Mostrar todas las entradas
Mostrando las entradas con la etiqueta openobject. Mostrar todas las entradas

jueves, 9 de enero de 2014

Manejo de Campos many2many en Odoo (OPENERP)

Manejo de Campos many2many 



    En OPENERP es muy comĆŗn que encontrĆ”semos en el código de algunos módulos la utilización de campos relacionales may2many, los cuales contienen la siguiente sintaxis:

(0, 0, { fields }) Crear nuevos registros con la lista de campos.
(1, ID, { fields }) Modificar la lista de campos.
(2, ID) Borrar un id de la relación many2many.
(3, ID) Quitar (desvincular) un id de la relación manay2many.
(4, ID) Vincular un id
(5, ID) Desvincular todas las veces que aparece un id
(6,?, IDS) Establecer una lista de enlaces

    Por ejemplo para enlazar los impuestos de un producto al crear una linea en pedidos de venta o en lineas de factura nuestros valores quedarĆ­an de la siguiente manera:

pedido_padre_id = 65
product_obj = self.pool.get('product.product')
product_id = product_obj.search(cr, uid, [('name','=','Soda 2.5 Litros')])
product_browse = product_obj.browse(cr, uid, product_id, context=None)[0]

 linea_venta = {
                'product_id'           :  product_browse.id,
                'product_uom_qty' :  1,
                'product_uom'     : product_browse.uom_id.id,
                'product_uos_qty' : 1,
                'price_unit'          : product_browse.list_price,
                'name'                 : product_browse.name,
                'type'                   : 'make_to_stock',
                'default_code'      : product_browse.default_code,
                'tax_id'                : [(6, 0, [x.id for x in line.product_id.taxes_id])],
                'order_id'             :  pedido_padre_id,
            })

 order_line_id = self.pool.get('sale.order.line').create(cr, uid, linea_venta, context=None)

   Que pasa en este ejemplo estoy creando una linea para el pedido de venta con el ID 65 en la cual estoy pasando la información del producto 'Soda de 2.5 Litros' hacia mi linea, el punto mas importante en este ejemplo ó la que estamos estudiando es  'tax_id' : [(6, 0, [x.id for x in line.product_id.taxes_id])], que estamos haciendo en esta parte del código, estamos enlazando los impuestos del producto anterior en mi linea de pedido, Ć©sto nos evita que nosotros realicemos la creación de cada impuesto al momento de mandar cada linea a un pedido de venta.
    

miƩrcoles, 8 de enero de 2014

MƩtodos ORM BƔsicos para Programar Modulos en Odoo (OpenERP)

MƩtodos ORM bƔsicos (Crear, Buscar, Leer, Actualizar y Borrar)

MƩtodo create

Sintaxis

create (cr, uid, values, context=None)

Crea un nuevo registro con los valores especificados. ParƔmetros especƭficos:

values: Diccionario con los valores de los campos para el nuevo registro.

Devuelve el id del registro creado. Puede generar los siguientes errores:

AccessError: Si el usuario no tiene permisos de escritura en el objeto solicitado, o si el usuario intenta
ignorar las reglas de acceso para crear el objeto solicitado.

ValidateError: Si el usuario intenta introducir un valor invƔlido para un campo que no estƔ en la
selección.

UserError: Si se crease un bucle en una estructura de objetos jerÔrquica como resultado de la operación (como establecer un objeto como su propio padre).

Por ejemplo para crear un producto tendriamos que generar el diccionario con los valores necesarios, principalmente los que son requeridos por el Modelo:

product_obj = self.pool.get('product.product')

product_vals = {
                         'name': 'Producto X',
                         'type': 'product' ,
                         'list_price': 45.00,
                         'procure_method': 'make_to_stock',
                         }

product_create_id = product_obj.create(cr, uid, product_vals, context=None)

ParƔmetros comunes a la mayorƭa de mƩtodos ORM en Odoo (OPENERP)



La mayorƭa de mƩtodos ORM tiene una serie de parƔmetros comunes a todos ellos:

  •cr: Cursor de la base de datos
  •uid: Identificador del usuario actual
  •ids: Lista de enteros con los identificadores de los registros (o lista con un Ćŗnico entero cuando hay       sólo un id)
  •context: Diccionario con los argumentos de contexto, como idioma, zona horaria, ...

    Al definir nuestros modelos como herencia de la clase osv.osv permite que todos los mĆ©todos de ORM estĆ©n disponibles para la programación de los módulos. Estos mĆ©todos pueden ser invocados por los propios objetos, dentro de la clase Python, o desde fuera de la clase, obteniendo en primer lugar una instancia a travĆ©s del concentrador (pooler) del sistema de ORM.

Contexto de los mƩtodos ORM


    En OpenObject, el contexto tiene datos muy importantes, como el idioma en que se debe escribir un documento, si el campo de una función necesita actualizarse o no, ...

    Cuando se efectĆŗa una llamada a un mĆ©todo ORM, es probable que el objeto ya tenga un contexto y el OpenObject lo proporcione como un parĆ”metro en casi todos los mĆ©todos. Si el objeto tiene un contexto, es muy importante que siempre se pase el mismo a todos los mĆ©todos a los que se llame.

    Esta regla tambiĆ©n es aplicable a los mĆ©todos ORM que escriba un programador. El programador debe esperar recibir un contexto como parĆ”metro en todos los mĆ©todos que desee llamar, y siempre debe pasar el contexto a todos los mĆ©todos a los que llame.


lunes, 6 de enero de 2014

INSTALACION DE OPENERP 7.0 EN UBUNTU, UBUNTU SERVER, 12.X y 13.X


OpenERP Logo
Que tal buenas tardes a todos en este tutorial enseƱare como instalar OpenERP en Ubuntu 12.04, aplica tambien para 12.10 y otras distribuciones de Linux como Debian, Linux Mint, entre otras.....

Si alguno no sabe que es OpenERP o un ERP aqui esta el concepto:

"OpenERP es un conjunto de soluciones integradas para gestión empresarial.
OpenERP automatiza y simplifica los procesos de negocio con la cadena de suministro, con la cadena logĆ­stica, con la gestión de los clientes, con la lógica financiera, con los recursos humanos de la empresa... y  definitiva con todas y cada una de las Ć”reas inherentes a cualquier modelo de negocio. Bajo licencia libre, multiplataforma y con posibilidad de uso bien mediante interfaz web o aplicación de escritorio, la información y la gestión empresarial siempre estĆ”n accesibles desde cualquier lugar."

Realizar Respaldo y Restauración Base de Datos de OpenERP 7.0 desde Terminal o Linea de Comandos Utilizando PostgreSQL 9.1 y 9.2

Que tal muy buenas tardes en este tutorial explicaremos como poder realizar un backup o respaldo y restauracion de nuestra base de datos de openerp con postgresql. Antes que nada utilzaremos el comando pg_dump podemos informanos un poco mas en el siguiente enlace:

  http://www.postgresql.org/docs/9.1/static/app-pgdump.html

 Para realizar un respaldo o tambiĆ©n conocido como backup de nuestras base de datos de OpenERP mediante postgrest mediante terminal ejecutaremos el siguiente comando en donde especificaremos la base de datos a restaurar en este caso se nombro TMS, el usuario despues de la letra -U en este caso mi usuario de postgres relacionado con openerp se nombro durante mi instalacion como openerp70, en la letra -h definimos el servidor de nuestra instalacion de openerp en este caso ejecutamos el comando localmente asi que nuestro servidor local por defecto seria localhost, despues insertamos el puerto que utiliza nuestro servicio despues de la leta -p en este caso por defecto utiliza openerp el puerto 5432 y por ultimo especificamos la ruta donde guardara el archivo de restauracion de nuestra base de datos en este caso la ruta de utilizacion fue /opt/openerp y de ahĆ­ el nombre con el que se guardara nuestro respaldo en este caso el nombre utilizado es dbbackup tambien podemos aƱadir que se comprima nuestra base de datos agregandole -Z y un numero de compresion de archivos que va del rango 1 a 9, el numero 9 seria la compresion maxima de un archivo, al fina de la ruta solo se le agrega .gz a tu backup y listo!!!!

 En este caso lo realizare sin la compresion, quedando asi el siguiente comando: pg_dump TMS -Fp -U openerp70 -h localhost -p 5432 > /opt/openerp/dbbackup

  Nota: El comando pg_dump se ejecuta fuera del superusuario de postgres...

Campos Funcionales con OpenERP

En OpenERP un campo funcional es un campo cuyo valor no sera definido por el usuario sino el resultado de una funcion (estos campos no se guardan en base de datos ). En ocasiones, para aumentar la velocidad de consulta de OpenERP y facilitar las bĆŗsquedas, los campos funcionales tambiĆ©n pueden ser guardados en la base de datos aunque siempre son calculados/actualizados por una o varias funciones y no por el usuario
.
La estructura de un campo funcional es la Siguiente:
fields.function(fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type="float, fnct_search=None, obj=None, method=False, store=False, multi=False,...)

Desarrollo de modulos para OpenERP 6.1, 7.0, 8.0

El desarrollo de modulos en OpenERP esta basado en el modelo MVC (Modelo Vista Controlador) y  ORM como su mapeo relacional de objetos, utilizando Python como lenguaje de programacion base y XML para poder generar las vistas de nuestro modulo, PostgreSQL como nuestro gestor de bases de datos, para programar modulos en OpenERP, no se necesita ser un experto en Python, simplemente con entender la base de Python, el manejo de las listas, tuplas y diccionarios y la definicion de funciones.
Para poder desarrollar modulos para OpenERP es necesario conocer un poco sobre el ORM ya que OpenERP tiene sus propias reglas para el desarrollo de sus modulos, una estructura necesaria para que nuestro modulo pueda ser instalado dentro de nuestro OpenERP, para el manejo de nuestras versiones de OpenERP utilizamos Launchpad (https://launchpad.net/) como sitio web y aplicacion web para poder mantener el versionamiento de nuestro modulo o modulos en desarrollo, y asi poder cooperar con la comunidad de software libre.
El siguiente video es desarrollado por el Ing. Israel Cruz Argil donde se trata de mostrar el desarrollo de un modulo OpenERP tocando algunos de los puntos anteriores:

Si necesitan mas informacion sobre etiquetas de XML para las estructuras de vistas para nuestro modulo visiten: http://doc.openerp.com/v6.1/developer/index.html#book-develop-link

Idioma Personalizado para OpenERP

Idioma Personalizado OpenERP
Como ya conocemos OpenERP es un sistema demasiado flexible, nos permite editar vistas, objetos directamente en el sistema, basĆ”ndonos en esta "propiedad" de OpenERP podemos definir una Traducción Personalizada de nuestro Idioma, ya que en ocasiones la traducción por defecto en OpenERP no es muy clara o algunas palabras estĆ”n traducidas a un nivel estĆ”ndar  para solucionar este problema podemos generar una Traducción propia para que posteriormente pudiĆ©ramos reutilizarla o en su caso compartirla con la comunidad de OpenERP.

jueves, 21 de noviembre de 2013

Herencia de Vistas y Objetos en OpenERP 7.0 para Agregar Campos en Formularios

OpenERP al utilizar Python como lenguaje de programación, obtiene la caracterĆ­sticas como la programación orientada a objetos y por lo tanto podemos hacer uso de la Herencia para modificar, extender, utilizar mĆ©todos, clases, sin necesidad de crear un metodo nuevamente.
Existen diferentes tipos de herencia en OpenERP pueden leer un poco mas sobre herencia en el enlace: http://doc.openerp.com/v6.0//developer/2_5_Objects_Fields_Methods/object_inherit.html
En este tutorial explicare como crear un modulo en OpenERP para extender nuestro objeto y modificar a nuestras necesidades los objetos de OpenERP, anteriormente se explico como agregar campos en formularios directamente en OpenERP, pero OpenERP version 7.0 tiene algunos problemas si queremos realizar cambios de esta manera, ademas de que al actualizar cualquier modulo que modificamos se eliminan los cambios realizados, para evitar esto creamos un modulo por separado que herede los objetos que queremos extender y asi poder instalar nuestro modulo cada ves que sea necesario sin afectar al Sistema directamente y de una manera mas profesional manejar nuestras clases.