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

jueves, 24 de septiembre de 2015

Truncar y Redondear Flotantes en Python

Truncar y Redondear Flotantes en Python



    Eh creado esta entrada para mostrar estas 2 funciones muy útiles al momento de programar con Python, cual es la diferencia entre truncar y redondear, cuando truncamos un numero básicamente cortamos la cantidad a cierto numero de decimales sin importar si este podría redondearse hacia arriba o hacia abajo, lo que básicamente hacemos al redondear.

Para truncar un numero en python utilizamos la función format:

"{0:.4f}".format(12.05464897987)

# El resultado seria 12.0546
# En la expresión {0:.2f}, en el lado del # valor del diccionario indicamos
# el numero de decimales.
# Seguido del metodo format y dentro la 
# cantidad a truncar.

## Con separación de miles: ##

'{0:,.4f}'.format(o.initial_balance)

Para redondear un numero en pyhton utilizamos la función round:


round(12.05464897987,2)

# El resultado seria 12.0547
# Ejecutamos el metodo round y este recibe:
# - Cantidad
# - Numero de Decimales a redondear.

miércoles, 23 de septiembre de 2015

Ejecución de Métodos en Clases Odoo desde Web Services

Como ejecutar un Método desde un Web Services Python



Anteriormente hable un poco sobre como utilizar los Web Services de Odoo desde aplicaciones externas como Python Django, ahora quiero compartir como ejecutar un método no propio del FrameWork( Create, Unlink, Copy, Search, Write, Read), si no ejecutar un metodo de una clase X, por ejemplo el método Confirmar Pedido de Venta desde una conexión Web Service Python.

La sintaxis es la siguiente:

import xmlrpclib
dbname = "Mi_Base"
username = "admin"
pwd = "admin"
sock_common = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/common')
uid = sock_common.login(dbname, username, pwd)
sock = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/object')
res = sock.execute(dbname, username, pwd, 'sale.order', 'action_button_confirm', [1])
print '############ Resultado >>>>> ',res
print " Ejecución Finalizada ... "

    Como podemos observar, es necesario Indicar la Base de Datos, Usuario y Contraseña de admin o algún usuario con los permisos sobre la clase que vamos a trabajar y al final enfocarnos en los IDS del metodo a ejecutar, en el ejemplo anterior mande el registro 1 de la tabla sale_order.

martes, 22 de septiembre de 2015

Override Metodos Odoo

Extender Funciones en Odoo (Método Super)


    Al momento de desarrollar, muchas veces necesitamos hacer un override a un método de una clase heredada, esto lo podemos realizar con ayuda del metodo super propio de Python.

La estructura es la siguiente:

@api.multi
def MetodoClase(self,):
    .... Aqui mi Codigo
    return super(ClaseHeredada, self).MetodoClase()
    Primero necesitamos definir los decoradores correspondientes del Método, posteriormente solo extender mediante el método super de Python, aquí puedo darles un consejo, el método super puede ser asignado a una variable y el orden de la variable afectara el comportamiento del método, en la sintaxis de arriba primero ejecutaría mi código y posterior a esto el método Original, si quisiéramos cambiar este orden bastaría con esto:

@api.multi
def MetodoClase(self,):
    res = super(ClaseHeredada, self).MetodoClase()
    .... Aqui mi Codigo
    return res

Ejemplo Completo de un método Super:

# -*- encoding: utf-8 -*-
############################################################################
#    (c) 2015 German Ponce Dominguez
#    All Rights Reserved.
#    info skype: german_442 email: (german.ponce@outlook.com)
############################################################################

import itertools
from lxml import etree

from openerp import models, fields, api, _
from openerp.exceptions import except_orm, Warning, RedirectWarning
from openerp.tools import float_compare
import openerp.addons.decimal_precision as dp


class account_invoice(models.Model):
    # Inherits partner and adds invoice information in the partner form
    _inherit = 'account.invoice'

    @api.multi
    def invoice_validate(self):
        res = super(account_invoice, self).invoice_validate()
        return res

Eliminar en Link en campos Many2Many Odoo

No acceder a Campos Relacionales en un Formulario



En algunas ocasiones es necesario eliminar el link que nos da Odoo para acceder a clases relacion por medio de campos many2one, por motivos de seguridad o por necesidad, para ello solo es necesario en la definicion del campo agregar la opcion no_open, su estructura es:

<field name="campo_many2one" options="{'no_open': True}"/>


Widgets para Campos Many2Many Odoo

Widgets para Campos Many2Many Odoo



Los widgets permitidos para Odoo, con campos Many2Many son:

  1. many2many widget (Defecto)
  2. many2many_tags widget (Crea Etiquetas)
  3. many2many_checkboxes widget (Tipo Lista)
  4. many2many_kanban widget (Subvista Grafica)
  5. x2many_counter widget
  6. many2many_binary widget (Subvista para Campos binary).

many2many widget por defecto

El widget many2many  es utilizado por defecto en todos los campos many2many por estándar Odoo crea un grid de tipo subvista (tree,form), toma como referencia la "Accion" de la Clase Heredada.
many2many widget
Opciones:
  • no_create - Elimina el Boton “Crear"
Un Ejemplo:
<field name="campo_many2many" options="{'no_create': True}"/>

many2many_tags widget

Este widget te permite seleccionar registros de la clase relación y mostrarlas en forma de etiquetas, por estándar solo toma el nombre del registro para mostrarlo, podemos ver este Widget en Recursos Humanos o al definir un nuevo registro de Clientes/Proveedores.
many2many_tags widget
Opciones:
  • no_quick_create - Elimina la opción de crear.
  • no_create_edit -  Elimina la opción de Crear y Editar.
    many2many_tags widget
  • no_create - no_quick_create and no_create_edit combined.
Ejemplo:
<field name="campo_many2many"
widget="many2many_tags"
options="{'no_create_edit': True}"/>

many2many_checkboxes widget

Este modulo mostrara un listado de todos los registros de la clase relacionada, solo para activar los campos que utilizaremos en nuestro registro de formulario, es muy importante destacar que en este widget no es posible crear o editar un registro.
many2many_tags widget
Ejemplo:
<field name="campo_many2many
" widget="many2many_checkboxes"/>

many2many_kanban widget

El widget many2many_kanban  te permite tener una vista de tipo kanban en cada uno de los registros insertados en nuestro Formulario.
many2many_kanban widget
Ejemplo:
<field name="campo_many2many" widget="many2many_kanban">
<kanban>
<field name="name"/>
<templates>
<t t-name="kanban-box">
<field name="name"/>
</t>
</templates>
</kanban>
</field>

x2many_counter widget

Este widget te muestra un conteo de todos los registros disponibles en la tabla o modelo relacionado, este widget tambien se puede utilizar en campos one2many.
x2many_counter widget
Ejemplo
<field name="campo_many2many" widget="x2many_counter" string="things"/>

many2many_binary widget

Este Widget te permite tener un listado de Archivos (ficheros), es exclusivo para campos relacionados con la tabla ir.attachment.
many2many_binary kanban
Ejemplo:
<field name="campo_many2many" widget="many2many_binary" string="Attach a file"/>
Fuente: http://ludwiktrammer.github.io/odoo/form-widgets-many2many-fields-options-odoo.html

martes, 8 de septiembre de 2015

Ruta Fisica de Bases de Datos PostgreSQL

¿Donde se encuentran mis BD de Postgres?

Es muy común tener la duda acerca de la ruta de instalacion de PostgreSQL y en donde estan almacenadas mis Bases de Datos, si utilizas Ubuntu la ruta es:
  •  /var/lib/postgresql/9.4/main/
Si estas usando Windows la ruta seria:
  • C:\Program Files\PostgreSQL\9.4\main
Si necesitas la carpeta en donde se encuentran tus bases, existe dentro de esa ruta la carpeta con el nombre base:
  • /var/lib/postgresql/9.4/main/base
Si escribimos ls observaríamos solo seran carpetas del tipo:

Si queremos obtener una relación sobre carpeta y base de datos que le corresponde:

  1. Entramos como superusuario de Postgres: sudo su postgres
  2. Nos conectamos al Template 1: psql template1;
  3. Ejecutamos el siguiente Script:  select datname,oid from pg_database;
El resultado anterior nos mostrara el nombre de la carpeta y a que base corresponde.