Un Robot que mueve Archivos en Python + Bash

De verdad que es muy importante aprender mas cada día de nuestro trabajo pero en especial de Dios, recordemos que todo el conocimiento proviene de Dios la Sabiduría es el temor a Jehova o al Señor, y el Discernimiento es conocer Al Señor… por esto yo día a día busco a Dios y dice la palabra todas las cosas se te darán por añadidura, es decir el conocimiento y las fuerzas para hacer cada Día tu trabajo serán añadidos y se te harán mucho mas fácil y podrás hacer cosas que ni pensabas 😀

Les cuento que Tenia que probar en tiempo real que el ODOO v8 leía los documentos PNR de Sabre, en Openerp v7 solo implemente una clase que al ser creada leía los PNRs, luego se me pidió que colocara dicha función que leía los PNR en el planificador de tareas de ODOO v7, y bueno me encontré con algunos detalles que poco  a poco fui sorteando :D, al final todo funciono y tocaba hacer lo mismo en ODOO v8 y así lo hice, pero también debía agregar cada cierto tiempo algunos PNRs para estar seguros que ODOO estaba leyendo los PNRs apenas llegaban y ademas estar seguros que los PNRs una vez leídos eran pasados a otra carpeta para no perder tiempo en leerlos o si quiera contarlos nuevamente, aunque fueran segundos son importantes 😀

Por lo que se me ocurrió la idea de crear un programita que hiciera esa ardua tarea de mover archivos cada cierto tiempo de una carpeta a otra, al final pensé en como hacerlo y quedo así:

# -*- coding: utf-8 -*-
import os

import random

import subprocess

os.system("ls /home/usuario/emular_server_sabre/resspl >/home/usuario/emular_server_sabre/lista_archivos_resspl")

archi=open('/home/usuario/emular_server_sabre/lista_archivos_resspl','r')
    
lineas=archi.read().splitlines()
lista_definitiva = []
for linea in lineas:
      
    lista_definitiva.append(linea)
    

print lista_definitiva
    
archi.close()

while len(lista_definitiva) >= 20:
    numero_aleatorio= random.randrange(20)
    print len(lista_definitiva)
    
    for archivos in range(numero_aleatorio):
      
          numero_aleatorio_sacar= random.randrange(len(lista_definitiva))
          
          archivo_pnr = lista_definitiva[numero_aleatorio_sacar]
          archivo_a_mover = '/home/usuario/emular_server_sabre/resspl/'+ archivo_pnr
          subprocess.call(['mv', archivo_a_mover, '/home/usuario/emular_server_sabre/resspl_new'])
          
          lista_definitiva.pop(numero_aleatorio_sacar)
          
          print archivo_a_mover
          
    os.system("sleep 10")

          

Les comento algunas lineas, importamos os y subprocess, por que es mas cómodo trabajar la shell desde os algunas veces y otras desde subprocess, random para darle un poco de realismo entre comillas :D, lo primero que hacemos es leer la carpeta donde llegaran los PNRs y la pasamos a un archivo, dicho archivo lo leemos linea a linea y lo agregamos 1 a 1 con for a una lista, cerramos el archivo, luego creamos un bucle que mientras queden mas de 20 archivos se ejecute siempre, luego creamos un numero_aleatorio que sera la cantidad de archivos que pasaremos entre 0 y 20, luego creamos en el for un numero aleatorio esta ves para sacar los números de la lista, así vamos moviendo dicho archivo  otro directorio, y hacemos eso para el numero de veces definidas aleatoria-mente, luego esperamos 10 segundos y repetimos el proceso:

Esta podría ser la salida:


Quedan este numero de archivos: 442
/home/setnorac/emular_server_sabre/resspl/TNMLIR00.PNR
/home/setnorac/emular_server_sabre/resspl/CMQSJB00.PNR
/home/setnorac/emular_server_sabre/resspl/BBILYI00.PNR
/home/setnorac/emular_server_sabre/resspl/VKTKVL00.PNR
/home/setnorac/emular_server_sabre/resspl/ASFFGA00.PNR
/home/setnorac/emular_server_sabre/resspl/NZBTGI00.PNR
/home/setnorac/emular_server_sabre/resspl/DEGYFS00.PNR
/home/setnorac/emular_server_sabre/resspl/WFBUUR00.PNR
/home/setnorac/emular_server_sabre/resspl/TEDUYP00.PNR
/home/setnorac/emular_server_sabre/resspl/AQVSGF00.PNR
/home/setnorac/emular_server_sabre/resspl/WNNESL00.PNR
/home/setnorac/emular_server_sabre/resspl/EZTZAX00.PNR
Quedan este numero de archivos: 430
/home/setnorac/emular_server_sabre/resspl/ODGGSK01.PNR
/home/setnorac/emular_server_sabre/resspl/WZUSXY02.PNR
/home/setnorac/emular_server_sabre/resspl/QCCKUP00.PNR
/home/setnorac/emular_server_sabre/resspl/QRYXQJ00.PNR
/home/setnorac/emular_server_sabre/resspl/MLLHVX00.PNR
/home/setnorac/emular_server_sabre/resspl/LKJVCP00.PNR
/home/setnorac/emular_server_sabre/resspl/GNUNXP00.PNR
/home/setnorac/emular_server_sabre/resspl/ZZXVVX00.PNR
/home/setnorac/emular_server_sabre/resspl/ZSTHCV00.PNR
/home/setnorac/emular_server_sabre/resspl/LLIBLM00.PNR
/home/setnorac/emular_server_sabre/resspl/KJNDYN00.PNR
/home/setnorac/emular_server_sabre/resspl/CDAZSI00.PNR
Quedan este numero de archivos: 418
/home/setnorac/emular_server_sabre/resspl/USYRFJ00.PNR
/home/setnorac/emular_server_sabre/resspl/HRZUTH09.PNR
/home/setnorac/emular_server_sabre/resspl/KABKQK00.PNR
/home/setnorac/emular_server_sabre/resspl/WFIIEH00.PNR
/home/setnorac/emular_server_sabre/resspl/RBHQMX00.PNR
/home/setnorac/emular_server_sabre/resspl/ZJVGZF00.PNR
/home/setnorac/emular_server_sabre/resspl/SZKRTH00.PNR
/home/setnorac/emular_server_sabre/resspl/WKEIPW00.PNR
Quedan este numero de archivos: 410
/home/setnorac/emular_server_sabre/resspl/NTJHEC00.PNR
Quedan este numero de archivos: 409
/home/setnorac/emular_server_sabre/resspl/KCMOWH03.PNR
/home/setnorac/emular_server_sabre/resspl/IWMGLY00.PNR
/home/setnorac/emular_server_sabre/resspl/UIVSYI00.PNR
/home/setnorac/emular_server_sabre/resspl/JREMOQ00.PNR
/home/setnorac/emular_server_sabre/resspl/TCPTNN00.PNR
/home/setnorac/emular_server_sabre/resspl/EQZFFS00.PNR
/home/setnorac/emular_server_sabre/resspl/FFFSRL00.PNR
/home/setnorac/emular_server_sabre/resspl/ZAKAMO01.PNR
/home/setnorac/emular_server_sabre/resspl/GWOYGO00.PNR
Quedan este numero de archivos: 400
/home/setnorac/emular_server_sabre/resspl/FTYBXG00.PNR
/home/setnorac/emular_server_sabre/resspl/GGSFVQ00.PNR
/home/setnorac/emular_server_sabre/resspl/YRYHQE00.PNR
/home/setnorac/emular_server_sabre/resspl/GVGEHA00.PNR
/home/setnorac/emular_server_sabre/resspl/EOUVSS00.PNR
/home/setnorac/emular_server_sabre/resspl/VDZGUO00.PNR
/home/setnorac/emular_server_sabre/resspl/ZKVDFB00.PNR
/home/setnorac/emular_server_sabre/resspl/WBEPNT00.PNR
/home/setnorac/emular_server_sabre/resspl/RYPPFK00.PNR
/home/setnorac/emular_server_sabre/resspl/VEWSTU00.PNR
/home/setnorac/emular_server_sabre/resspl/FFWFZB00.PNR
/home/setnorac/emular_server_sabre/resspl/BGDXGH00.PNR
/home/setnorac/emular_server_sabre/resspl/UZEDKC00.PNR
Quedan este numero de archivos: 387
Quedan este numero de archivos: 387
/home/setnorac/emular_server_sabre/resspl/EIGPDE00.PNR
/home/setnorac/emular_server_sabre/resspl/OJWCOC00.PNR
/home/setnorac/emular_server_sabre/resspl/DDCMEX00.PNR
/home/setnorac/emular_server_sabre/resspl/DKTGPP00.PNR
/home/setnorac/emular_server_sabre/resspl/AEJHFG00.PNR
/home/setnorac/emular_server_sabre/resspl/TGHKIK00.PNR
/home/setnorac/emular_server_sabre/resspl/DRKFSS00.PNR
Quedan este numero de archivos: 380
/home/setnorac/emular_server_sabre/resspl/KELLQI00.PNR
/home/setnorac/emular_server_sabre/resspl/OGGFZL00.PNR
/home/setnorac/emular_server_sabre/resspl/YUVINL00.PNR
/home/setnorac/emular_server_sabre/resspl/TAPXAA00.PNR
/home/setnorac/emular_server_sabre/resspl/EEMYZM00.PNR
/home/setnorac/emular_server_sabre/resspl/EBJWPM00.PNR
/home/setnorac/emular_server_sabre/resspl/STJHUE00.PNR
/home/setnorac/emular_server_sabre/resspl/EMSWIR00.PNR
/home/setnorac/emular_server_sabre/resspl/KPPWGH00.PNR
/home/setnorac/emular_server_sabre/resspl/FMFAYL00.PNR
/home/setnorac/emular_server_sabre/resspl/OJGBZT00.PNR
/home/setnorac/emular_server_sabre/resspl/DQKLJH00.PNR
/home/setnorac/emular_server_sabre/resspl/EHUKQF00.PNR
/home/setnorac/emular_server_sabre/resspl/CFGMKG00.PNR
/home/setnorac/emular_server_sabre/resspl/VXKOPK00.PNR
/home/setnorac/emular_server_sabre/resspl/YZHXZQ00.PNR
/home/setnorac/emular_server_sabre/resspl/QYOLSD00.PNR
/home/setnorac/emular_server_sabre/resspl/MSTWAM00.PNR
Quedan este numero de archivos: 362
/home/setnorac/emular_server_sabre/resspl/BJEIWS00.PNR
/home/setnorac/emular_server_sabre/resspl/RPXTNN00.PNR
/home/setnorac/emular_server_sabre/resspl/ETWBCA00.PNR
/home/setnorac/emular_server_sabre/resspl/UBUIYY00.PNR
/home/setnorac/emular_server_sabre/resspl/NEMIQT00.PNR

Y bueno en realidad no hace mucho pero nos puede dar muchas ideas de uso 😀

Ya subi el video a Youtube mañana lo subo al blog 😀

Feliz Día que Dios les Bendiga y les Llene de Gozo….

Pensando en la Proxima entrada y cosas que nos quedan por hacer en Python

Les cuento que esta semana he estado trabajando Full Time programando en Openerp v7, aunque me gustaría subir por lo menos el vídeo de lo que hice debo preguntar si puedo :S… mas o menos los tiros van así, he estado rehaciendo una API de una Aerolinea para extraer los datos de unos archivos llamados PNR, vaya que ni me imaginaba ese mundillo :S, al final todo salio bien gracias a Dios con muchos momentos de frustración al estar en terreno desconocido, pero al final corrió el código y aunque le faltan bastantes detalles(esto es bueno por que tengo trabajo :D) ya esta consumiendo los archivos en cuestión 😀

Debo comunicarles que me he decidido implementar la Base de Datos directamente a ODOO, les hablo del scrapping de la NFL que estaba haciendo, les cuento que tengo mas de 1 semana con una Otitis terrible y ya Gracias a Dios se me esta pasando, Voy a implementarla directamente en ODOO por que asi tendremos un mapeo de la base de datos y vistas interesantes en ODOO ojo que pronto subo un Vídeo 😀

Voy a ir subiendo Vídeos de entradas anteriores para los que no les gusta leer(aunque háganlo un habito :D), voy a comenzar con un Cursito de Python para Dummies en vídeo, así como también un vídeo de buenas practicas debugueando código en python si Dios nos lo permite claro 😀

Hay varias series que hay que retomar si o si, pero ahora trabajo 8 horas al día, y otras 3 copadas, mas 2 en otros proyectos me quedan como 3 libres :S bueno algo haré :D, por ejemplo Criptografia, APIS le tengo el ojo a Google :D, entre otras……. hay bastante que elegir en este blog :S

Bueno hasta aquí esta micro entrada informativa, me despido que Dios les bendiga les ilumine sus pasos y les de discernimiento…

Error al ejecutar pip install -r requirements.txt

#include “libxml/xmlversion.h”

^

compilation terminated.

error: command ‘x86_64-linux-gnu-gcc’ failed with exit status 1

—————————————-
Can’t roll back lxml; was not uninstalled
Cleaning up…
Command /usr/bin/python -c “import setuptools, tokenize;__file__=’/tmp/pip-build-GJ8XUc/lxml/setup.py’;exec(compile(getattr(tokenize, ‘open’, open)(__file__).read().replace(‘\r\n’, ‘\n’), __file__, ‘exec’))” install –record /tmp/pip-nbzGg4-record/install-record.txt –single-version-externally-managed –compile failed with error code 1 in /tmp/pip-build-GJ8XUc/lxml
Storing debug log for failure in /root/.pip/pip.log

Este es el Error que me salta en la pantalla, y es que cada vez que instalo el sistema en diferentes Gnu/linux me sale el mismo error y no me voy a extender mucho esta es la solucion:


apt-get install libxml2-dev libxslt1-dev python-dev

Saludos y comentar no cuenta nada, estamos para servir

Al final sale esto:


Cleaning up...

 

 

ODOO herencia de Modulos stock.pickin.out (Stock picking out )

ESto va a ser breve y simple solo para recordar y ayudar a quienes necesiten esto que en internet no esta tan explicito, agregar un campo por herencia a stock.pickin.out es igual que a partner ;D

ojo no voy a hablar de crear  modulos desde 0 a mnos que de verdad necesiten que lo haga, solo vamos a hablar del archivo .py y el archivo .xml, simple el py es donde vamos a crear toda la logica de programacion, las clases funciones y campos, y el archivo .xml es el archivo donde vamos a codificar como queremos que se vean los campos en el navegador 😀

el primer archivo quedaria asi


from openerp.osv import fields, osv

class stock_picking_out_mi(osv.osv):
    """
Modified stock
    """
    _inherit = "stock.picking.out"


    _columns = {
        

         'responsable': fields.many2one('res.partner','Responsable'),
         'despachado_por': fields.many2one('res.partner','Despachador'),
         

    }
    _defaults ={

    }

stock_picking_out_mi()



Solo me interesa agregar por quien fue despachado y quien es el responsable de la mercancía, ojo que los campos me los traigo de la clase res.partner solo por que ya esta instanciada…

	

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
<!-- Adding the fields from stock_move to the screen -->
    <record model="ir.ui.view" id="mi_modulo_stock_picking_out_mi_form">
        <field name="name">mi_modulo.stock.picking.out.form</field>
            <field name="model">stock.picking.out</field>
            <field name="type">form</field>
            <field name="inherit_id" ref="stock.view_picking_form"/>
            <field name="arch" type="xml">
                <field name='origin' position='before'>

 
                    <field name="despachado_por"/>
                    <field name="responsable"/>

                </field>
            </field>
        </record>
	
	
    </data>
</openerp>

Aqui podria colocar los campos donde se desee, pero lo colocamos despues de origin, le podemos crear un page entre otras mejoras, ojo con los nombre y sobre todo con la referencias, la linea que contiene lo siguiente es lo mas importante:


<field name="inherit_id" ref="stock.view_picking_form"/>

Instalar Netis WF-2402d en Debian o Ubuntu

Instalar Driver para Dispositivos WF-2402d, WF-2404d, WF2414, WF2411d en DEBIAN 7 “WHEEZY”

Hace poco me toco instalar el sistema Openerp v7 en un negocio y no tenían conexión directa al router  desde el servidor y solo tenían un conector wifi de la marca Netis por lo que me toco investigar como instarla revise el lsusb y me fije que habia un realtek network pero pense que era de la maquina, pero al no encontrar nada procedi a hacer lsusb con tail luego de conectar el dispositivo y aun salia este realtek bueno para mi sorpresa netis usa realtek y aquí paso a decir como lo instale con exito en mi sistema DEBIAN 7 “WHEEZY” Remasterizado aunque nada del otro mundo…..

Instalar en Debian 7 “Wheezy”

Esta versión es compatible con Realtek RTL8188CE, RTL8188CUS, RTL8188DE, RTL8188SU, RTL8191SE, RTL8191SU, RTL8192CE, RTL8192CU, RTL8192DE, RTL8192E, RTL8192SE, RTL8192SU and RTL8192U-based devices.

  1. Agregamos los repositorios al sistema, agregamos los “non-free” a /etc/apt/sources.list, por ejemplo:

     #nano /etc/apt/sources.list
    

    Escribimos:

    # Debian 7 "Wheezy" 
    deb http://httpredir.debian.org/debian/ wheezy main contrib non-free
    
  2. actualizamos la lista de paquetes para instalar el paquete firmware-realtek :

    # apt-get update && apt-get install firmware-realtek
    

     

    RTL8192U-based  es necesario agregarlo de manera manual asi: 

    # apt-get install unzip && exit
    $ wget ftp://ftp2.dlink.com/PRODUCTS/DWA-130/REVC/DWA-130_REVC_DRIVERS_0.06_LINUX.ZIP
    $ unzip DWA-130_REVC_DRIVERS_0.06_LINUX.ZIP
    $ su
    # mkdir /lib/firmware/RTL8192U
    # cp rtl8192u_linux_2.6.0006.1031.2008/firmware/RTL8192U/* /lib/firmware/RTL8192U
    

     

  3. Conecta el dispositivo al sistema deberias tenerlo en el administrado de redes ya configurado, en caso de no ser asi aqui tienes la opción de instalarlo:

https://wiki.debian.org/WiFi/HowToUse

 

informacion sacada de:

https://wiki.debian.org/rtl819x

 

Script Python para obtener Rif y Cedula a partir del NIF Openerp7 o Odoo7

La siguiente entrada esta dedicada a Openerp aunque no sera implementada directamente, primero vamos a plantear y solucionar el problemita de los Nif al que tarde o temprano los que trabajamos con Odoo nos hemos enfrentado…

Muchas personas en Venezuela y analizando los comentarios podríamos decir en todo el mundo no están habituados a los Nif simplemente no le gustaría ver el VE o Es(para España) al principio del Rif o simplemente no les gusta el formato den Venezuela Nif se resisten al cambio pero tarde o temprano tendrán que usarlo aunque parece que por ahora la mayoría de las empresas siguen usando Rif o Cédula…

El formato puede variar aunque usare uno muy normal mas no formal para nuestro primer ejemplo… comente cualquier inquietud es gratis la asesoría por ahora :D…

VEV16547897-5 

Supongamos este Nif, podria ser

VEV165478975 

Yo preferi para nuestro ejemplo el primero por que quería usar find 😀

En nuestro ejemplo tenemos una cadena de 13 caracteres que va desde 0 a 12

Si quisiéramos sacar el Rif para este formato usaríamos este script y agregar los cambios como herencia en un modulo de openerp (pendiente de hacerlo)

 

#Programa ejemplo de como cambiar el nif  a rif 😀 y tambien cedula

nif = "VEV16547897-5"  # no necesita comenarios
 
guion_nif = nif.find("-")    # Buscamos el guion en la cadena, no hace falta solo podias colocar guion_nif = 11

cedula = nif[3:guion_nif]   # Aqui podiamos colocar 11 en lugar de guion_nif, buscamos la cadena de numero Cedula
rif_falta_J = nif[3:]   # Buscamos el rif pero nos falta la J-
rif = "J-"+ rif_falta_J  # Creamos otra cadena porque son inmutables y le agregamos J-

# Aqui tenemos el resultado
print "La Cedula es:      ", cedula
print  "El Rif es:       ", rif 

No creo que necesite muchos comentarios seguiremos con el modulo directamente en la próxima entrada…

He visto los módulos hechos en openerp para este fin pero son muy poco explícitos :S

 

SyntaxError: JSON.parse: unexpected OPENERP 7….. SOLVED WKHTMLTOPDF corrupto!!!

SyntaxError: JSON.parse: unexpected end of data at line 2 column 1 of the JSON data

Este bendito error que ya me he encontrado varias veces y varias veces he resuelto, solo que esta vez me encontré con uno de mis colegas y su nueva instalación de openerp7 en su ubuntu y bueno no daba con el problema yo mismo había corrido un par de informes en esa maquina y el problema es un apt-get install wkhtmltopdf en el ubuntu y parece que este archivo de los repos de ubuntu no funciona con openerp por lo que nos toca instalar a mano 😀

 

aqui dejo los pasos muy sencillos!

0- para mayor comodidad creen un directorio he ingresen

# mkdir /opt/wkhtmltopdf

# cd /opt/wkhtmltopdf

1 Descargamos el archivo, si seque hay una versión mas reciente pero este es el que siempre he instalado!

# wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

2 descomprimimos el archivo descargado

bunzip2 wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

# tar -xvf wkhtmltopdf-0.11.0_rc1-static-i386.tar

 

3 movemos el archivo a los binarios del sistema :D, en caso de haber instalado el paquete nativo lo sobrescribimos

mv wkhtmltopdf-i386 /usr/bin/wkhtmltopdf

 

y listo todo funcionando :D… espero sea de ayuda…. y como a la gente de odoo le gusta borrar sus cosas de los blogs voy a ver si añado una wiki o algo parecido al blog

 

Muchas veces me siento a escribir una entrada y al final decido no hacerla ya que  aveces pienso en hacer del blog mas técnico(cuando estoy trabajando a full) y otras pienso en hacer el blog mas jovial a la final no me decidí y seguiré escribiendo como quiera 😀

 

Onchange en Openerp “Paso a Paso”!!!

Siempre que hago algo y  no lo documento tengo que pasar horas buscando en la red y aunque normalmente encuentro algo mejor o lo que estaba buscándome molesta usar 1 hora mas o menos buscando algo que ya había buscado y solucionado es por esta razón que cree el blog y la segunda para compartir mis problemas y soluciones a temas técnicos principalmente lo que me gusta y en lo que trabajo!

En esta ocasión traigo una entrada dedicada a onchange esta valiosa herramienta  o código, que hará ver nuestras vistas mas profesionales y hará que nuestro cliente sepa que hemos trabajado duro para cumplir con nuestro trabajo y con sus expectativas ademas dejamos el Software Libre muy en alto al hacer esto 😀 (Trabajar como si fuera para Dios, como no somos perfectos ni de cerca :S , por lo menos podemos intentar hacer el trabajo de esta manera :D)

Onchange, no encontré un definición si la tienen bienvenida!! Mas o menos es simplemente hacer que al cambiar el valor de un campo a mano este se represente en otro con cambios o sin ellos….

Por ejemplo si ingresamos el nombre de un cliente y quisiéramos saber su crédito sin ingresar a la vista form de este o  verlo desde la vista tree o para hacer la búsqueda creo que el onchange nos salvara la vida :D, ya que no tienes que guardar para ver cambios ni nada parecido…. se hacen en el momento que sales del campo 😀

Bueno como nada es exageradamente fácil aun en openerp o python, primero tenemos que crear un método que nos llamara al método onchange dentro de nuestra clase y luego agregar el método a la vista form en el archivo XML

Uno de las soluciones de StackOverflow fue la que me ayudo y es esta:

def onchange_bbb(self, cr, uid, ids, bbb, context=None):
 vals = {'aaa': bbb}
 return {'value': vals}

Este pequeño código es la parte lógica del programa onchange que intentamos hacer, nos debemos fijar primero en que bbb se encuentra dentro de los argumentos y en vals(valores) el primer valor es el que va a cambiar y el segundo es el que vamos a meter a mano

Así nos quedaría la vista Form del XML

field name="aaa"/>
<field name="bbb" on_change="onchange_bbb(bbb)"/>
<field name="ccc"/>
<field name="ddd"/>

y nos debemos fijar que bbb es quien cambia aaa y por esto el onchange lo lleva este campo y no el otro :D…. esta es la parte fácil en Internet encontrar esto y hacer un cambio de un campo normal a uno dentro de many2one, pero de many2one a uno fuera de este la situación es diferente y no encontré nada en Internet por lo menos no me funcionaron :S…. tenia un código por ay de otro modulo que buscaba un average y use la forma de búsqueda self.pool.get y browse y agregue esa linea al código y ya hace lo que les cuento 😀

def onchange_method(self, cr, uid, ids, campo1111, context=None):
name=self.pool.get('res.partner').browse(cr, uid,campo1111, context=context)
vals = {'campo2222' : name.campo1111}
return {'value': vals}

Si nos fijamos he cambiado todo, o no, no la respuesta esta en que bbb contiene  varios campos y entre ellos a campo1111 y por lo tanto al agregar este campo veremos el cambio en la vista que nos interesa sobre el campo2222…

field name="aaa"/>
<field name="bbb" on_change="onchange_method(bbb)"/>
<field name="campo2222"/>
<field name="ddd"/>

Espero les alla gustado y mas importante lo hayan implementado con éxito… a la brevedad escribiré como agregar el interesante botón imprimir Reporte con su método para nuestros módulos y hablare un poco de la criptografia y los SSL

 

 

 

 

Ecuaciones de Segundo Grado en Python [PARTE 2]

En la entrada anterior comente un pequeño error del programita que estabamos viendo para resolver ecuaciones de segundo grado en python y en esta entrada voy a colocar cual es el problema, hasta a mi me paso coloque 1 , 2 , 3 en los valores que me pedia el programa y me dio este error:


Valor de a: 1

Valor de b: 2

Valor de c: 3

Traceback (most recent call last):

  File "None", line 8, in
<module>

ValueError: math domain error

Aquí el error es de dominio matemático, debido a que math no trabaja con raíces negativas, por que debemos agregar unas lineas que verifiquen que el Discriminantes “ b**2 – 4ac ” sea mayor o igual a cero, para luego calcular la raíz, y si es menor imprimir por pantalla que no hay soluciones reales…


Valor de a: 1

Valor de b: 2

Valor de c: 3

Traceback (most recent call last):

  File "None", line 8, in
<module>

ValueError: math domain error

Para solucionarlo agregamos una sentencia condicional “if b**2 – 4*a*c >=0: ” Esto solo para saber si la raiz es real, luego hay otro problema y es que si las soluciones son iguales se muestran dos soluciones por lo que agregando otras lineas de codigo que verifiquen esto obtendriamos el siguiente codigo funcional que ahora si podemos probar:


from math import sqrt

a = float(raw_input('Valor de a: '))

b = float(raw_input('Valor de b: '))

c = float(raw_input('Valor de c: '))

if a != 0:
    discriminante= b**2 - 4*a*c
    if discriminante >=0:

        x1 = (-b + sqrt(discriminante)) / (2 * a)

        x2 = (-b - sqrt(discriminante)) / (2 * a)

        if x1==x2:

            print 'La Solucion de la ecuacion es: x1=%4.3f'% x1

        else:

            print 'Soluciones de la ecuacion: x1=%4.3f y x2=%4.3f ' % (x1, x2)

    else:

        print 'No Hay soluciones Reales. '

else:

    if b != 0:

       x = -c / b

       print 'Solucion de la ecuacion: x=%4.3f ' % x

    else:

       if c != 0:

          print 'La ecuacion no tiene solucion. '

       else:

          print 'La ecuacion tiene infinitas soluciones. '

Conocimiento sacado del excelente libro “Introducci ́n a la programaci ́n con Python y C ”

Ojo hay un proble en una linea que se corta, pude usar code pero me gusta sourcecode 😀

Instalar OpenERP7 v7 desde BAZAR

Instalar Openerp desde Bazar

Por que esta entrada? Bueno instalar OpenERP desde las fuentes facilitadas en la pagina de:

no es del todo funcional, no entiendo de verdad por que pero da una cantidad de problemas que no atentan contra la funcionalidad del openerp del todo pero debido a los fallos no es recomendable del todo, por lo que hoy les voy a contar como instale el openerp en mi maquina y en la de la empresa, lo que hasta el dia de hoy no me ha dado problemas…..

En fin, si seguiste el anterior minitutorial solo te faltan algunos pasos para tener funcionando de verdad el sistema, ojo como siempre en Gnu/Linux tenemos varias formas de hacer las cosas!

Primero vamos a descargarnos la ultima version del OpenERP de Bazar, para este experimento solo vamos a descargar el openerp que viene sin nada(sin cliente web y sin addons) y vamos a descargarnos el cliente web, no vamos a modificar nada en la configuracion por lo menos no todavia, vamos a mantener la misma que en el post pasado solo vamos a reagrupar el openerp y a tomar las partes que siempre funcionaron, el problema es que el Cliente WEB de la pagina anteriormente nombrada no funciona como deberia y vamos a tomar la version de Bazar mas limpia y le vamos a instalar el cliente web:


mkdir openerpv7

cd openerpv7

bzr branch lp:openobject-server/7.0 server

bzr branch lp:openerp-web/7.0 web

Ahora nos preguntaremos donde estan nuestros addons pues utilizaremos los del otro openerp que ya tenemos instalado, lo hacemos asi:

cp /opt/openerp/70/openerp/addons . -R

Ahora usamos ls para ver que todo va bien, tenemos 3 directorios: server, addons, server y web, ahora los unimos en una solo 😀


cp web/* server/openerp/addons -R

cp addons/* server/openerp/addons -R

Ahora vamos a ver si todo funciona :D, lo primero que debes preguntarte es como jeje, si hacemos un poco de memoria tenemos ya instalado todo y solo necesitamos modificar el script aque start.sh entonces lo copiamos a el directorio donde tenemos los 3 directorios claves, si lo copiaste en tu usuario deberia ser:

/home/tu-usuario/openerp/

El script deberia quedar asi:


#!/bin/bash

cd /home/tu-usuario/openerp/server

chmod +x openerp-server

python openerp-server –addons-path="/home/tu-usuario/openerp/server/openerp/addons" --db_host=localhost --db_user=openerp70 --db_password=openerp70 --db_port=5432 --xmlrpc-port=8269 --netrpc-port=8270

Simplemente lo corremos, ojo donde dice tu-usuaria deberia colocar tu usuario, o la ruta donde colocaste tu openerp 😀

Si todo fue bien nos dirijimos en el navegador a:

http://localhost:8270

Y ya deberiamos estar adentro,ahora la cuestion es si todo fue bien, si no fue bien es gratias responder a cualquier pregunta con respecto a este o cualquier otro post y tratare de ayudart a la brevedad, cualquier problema que tengas lo reolvemos ente todos 😀

Si todo eta funcionando, vamos a configurar el usuario administrador apra poder instalar modulos vamos a la pestaña configuracion, noramlmente ya te encuentras ahi, vamos a donde dice usuarios, vamos a administrados y cliqueamos donde dice editar, luego vamos a la segunda pestaa de esta configuracion y le damos permisos para configuracion tecnica, se que no se entiende mañana hare lo posible por colocar un par de imagenes o un video que te de mejor comprension, si lo entendiste perfecto…. Gracias spero sea de ayuda para alguien