domingo, 28 de febrero de 2010

Conversión de numeros a letras para openERP

Estoy corriendo la version 5.0.6 (servidor), Python 2.6 y OpenSuse 11.2.

Esta solución esta basada en información encontrada en internet en algunos foros de Python y openERP.

Abrir una consola con el usuario root e ir ar directorio:

/usr/local/lib/python2.6/site-packages/openerp-server/addons/account/report

una vez ahi, editar el archivo invoice.py (yo utilizé el editor vi), debería quedar como: (el código agregado está marcado)

import time
from numero_a_texto import Numero_a_Texto
from report import report_sxw

class account_invoice(report_sxw.rml_parse):
    def __init__(self, cr, uid, name, context):
        super(account_invoice, self).__init__(cr, uid, name, context)
        self.localcontext.update({
            'time': time,
            'obt_texto':self.obt_texto,
            'lang':context['lang'],
        })

    def obt_texto(self,cantidad):
        res=Numero_a_Texto(cantidad)
        return res
report_sxw.report_sxw(
    'report.account.invoice',
    'account.invoice',
    'addons/account/report/invoice.rml',
    parser=account_invoice
)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:


Una vez que esté listo el archivo, crear un nuevo archivo el archivo numero_a_texto.py, este archivo debe contener:

#!/usr/bin/python                  
# -*- coding: utf-8 -*-            

UNIDADES = (
    '',    
    'UN ', 
    'DOS ',
    'TRES ',
    'CUATRO ',
    'CINCO ',
    'SEIS ', 
    'SIETE ',
    'OCHO ', 
    'NUEVE ',
    'DIEZ ', 
    'ONCE ', 
    'DOCE ', 
    'TRECE ',
    'CATORCE ',
    'QUINCE ',
    'DIECISEIS ',
    'DIECISIETE ',
    'DIECIOCHO ',
    'DIECINUEVE ',
    'VEINTE '    
)                
DECENAS = (      
    'VENTI',     
    'TREINTA ',  
    'CUARENTA ', 
    'CINCUENTA ',
    'SESENTA ',  
    'SETENTA ',  
    'OCHENTA ',  
    'NOVENTA ',  
    'CIEN '      
)                
CENTENAS = (     
    'CIENTO ',   
    'DOSCIENTOS ',
    'TRESCIENTOS ',
    'CUATROCIENTOS ',
    'QUINIENTOS ',  
    'SEISCIENTOS ', 
    'SETECIENTOS ', 
    'OCHOCIENTOS ', 
    'NOVECIENTOS '  
)                   
                    
def Numero_a_Texto(number_in):
                             
    converted = ''                             

    if type(number_in) != 'str':
      number = str(number_in)  
    else:                      
      number = number_in       
                                                          
    number_str=number                                     
                                                          
    try:                                                  
      number_int, number_dec = number_str.split(".")      
    except ValueError:                                    
      number_int = number_str                             
      number_dec = ""                                     

    number_str = number_int.zfill(9)
    millones = number_str[:3]      
    miles = number_str[3:6]        
    cientos = number_str[6:]       

    if(millones):
        if(millones == '001'):
            converted += 'UN MILLON '
        elif(int(millones) > 0):    
            converted += '%sMILLONES ' % __convertNumber(millones)
                                                                 
    if(miles):                                                   
        if(miles == '001'):                                      
            converted += 'MIL '                                  
        elif(int(miles) > 0):                                    
            converted += '%sMIL ' % __convertNumber(miles)       
    if(cientos):                                                 
        if(cientos == '001'):                                    
            converted += 'UN '                                   
        elif(int(cientos) > 0):                                  
            converted += '%s ' % __convertNumber(cientos)        

    if number_dec == "":
      number_dec = "00"
    if (len(number_dec) < 2 ):
      number_dec+='0'        

    converted += 'PESOS '+ number_dec + "/100 M.N."

    return converted
                   
def __convertNumber(n):
    output = ''

    if(n == '100'):
        output = "CIEN "
    elif(n[0] != '0'):
        output = CENTENAS[int(n[0])-1]

    k = int(n[1:])
    if(k <= 20):
        output += UNIDADES[k]
    else:
        if((k > 30) & (n[2] != '0')):
            output += '%sY %s' % (DECENAS[int(n[1])-2], UNIDADES[int(n[2])])
        else:
            output += '%s%s' % (DECENAS[int(n[1])-2], UNIDADES[int(n[2])])

    return output
"""
print Numero_a_Texto(9121234.2)
"""


Una vez que este listo en la factura se debe de utilizar la etiqueta [[obt_texto(o.amount_total)]] en donde se requiera imprimir la cantidad en letras.


Notas:
Se debe reiniciar el servidor para que los cambios tengan efecto.
Python es sensible a los espacios tabuladores.

miércoles, 24 de febrero de 2010

Instalar ZINIO reader on OpenSuse 11.2

 En la version que tengo instalada no corren totalmente bien, algunas paginas se ven otras no, la pantalla se  bloquea, los iconos del menu desaparecen pero pasando el raton en el area donde deben de estar vuelven a aparecer, algunas veces las paginas giran solas 180º, en fin le falta mucho para decir que funciona.

Actualmente corriendo wine 1.1.38, Zinio Reader 3.7

  1. Descargar el software de instalacion de www.zinio.com
  2. Ejecutar la instalacion ( wine setup.exe )
  3. Abrir la configuracion de wine ( winecfg )
  4. En al pestaña Librerias agregar msxml3.dll, msxml3a.dll and msxml4.dll, seleccionar la opcion Nativo Windows.
  5. Seleccionar la pestaña Aplicaciones, agregar ZinioReader.exe y ZLH.exe y hacerlos ejecutar en Windows 98.

miércoles, 3 de febrero de 2010

Instalación de Genius CP-SF600 en OpenSuse 11.2

La instalacion de el escaner Genius CP-SF600 se hace de la siguiente manera:

  1. Conectar el escaner a un puerto USB
  2. Ir a YAST\Hardware\Scaner
  3. En la lista que aparezca, seleccionar el escaner a actualizar y presiona EDIT, buscar el modelo de escaner: Genius Colorpage SF600
  4. Permitir la instalacion del software
  5. Ahi te dara la indicacion de un archivo faltante, el archivo requerido es cism216.fw, para obtenerlo deberas descargar los drivers de la pagina de Genius
  6. Ya que tengas el driver (archivo .zip), descomprimelo y busca el directorio donde lo descomprimiste, ahi ejecuta
    wine INSTALL.EXE
  7. Ya que se haya instalado copia el archivo
    $HOME/.wine/drive_c/Program Files/ColorPage-SF600/cism216.fw
    en el folder indicado en el paso 5, o sea en
    /usr/share/sane/gt68xxM
  8. El escaner esta listo para ser usado con tu aplicacion favorita, en mi caso tengo Skanlite y xSane

Instalacion de Openbravo POS 2.3 en OpenSuse 11.2

La instalacion de Openbravo POS puede ser bastante simple siguiendo los pasos siguientes:

  1. Verificar que se tiene instalado SUN JAVA run time enviroment (JRE) 6
  2.  
    Usar en la consola: java -version
    
    
  3. Verificar si SUN JAVA es usado por defecto
  4.  
    linux-vjtw:# update-alternatives --config java
    
    There are 3 alternatives which provide `java'.
    
      Selection    Alternative
    -----------------------------------------------
     +        1    /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
              2    /usr/lib/jvm/jre-1.5.0-gcj/bin/java
    *         3    /usr/lib/jvm/jre-1.6.0-sun/bin/java
    
    Press enter to keep the default[*], or type selection number:
    
    Nota:En este caso se puede notar la versión SUN es empleada por defecto.(Marcada con *)
    
    
  5. Descargar Openbravo POS de acuerdo al tipo de computadora que se tenga, en mi caso descargué el archivo openbravopos-2.30-linux-installer.bin. El enlace de descarga: http://wiki.openbravo.com/wiki/Openbravo_POS_2.30_Release_notes#How_to_get_Openbravo_POS
  6. Ejecutar el archivo para su instalación.
  7.  
    ./openbravopos-2.30-linux-installer.bin
    
    
  8. Instalar MySQL y el conector Java para MySQL, en mi caso use YAST. Es una buena opcion instalar el Administrador de MySQL (es una interfaz gráfica para MySQL).
  9. Cuando MySQL haya sido instalado debemos iniciar el servidor de MySQL, para esto iniciar YAST y buscar : SYSTEM\SYSTEM SERVICES; en la columna SERVICE buscar MYSQL y habilitar el servicio para arrancar el servidor
  10. Abrir una consola y ejecutar :
  11.  
    mysql_install_db
    
    Nota:va a salir bastante informacion sobre lo que se acaba de instalar y recomendaciones.
    
    
  12. Agregar un password al usuario root (de MySQL), teclear en la consola:
  13.  
    mysqladmin -u root password “nuevo_password” 
    mysqladmin -u root -h localhost password “nuevo_password”
    
    
  14. Abrir el Administrador de MySQL (interfaz grafica) y crear un usuario y password para Openbravo POS. El usuario creado en mi caso es rsaucedo
  15. Crear una base de datos (Catalogo). En mi caso el nombre de la base de datos creada es: openbravopos.
  16. Al nuevo usuario creado darle todos los privilegios para accesar la nueva base de datos.
  17. Buscar el conector java instalado (debe de estar en /usr/share/java/mysql-connector-5.1.6.jar) y crear un link o copiar el archivo en el directorio donde se instalo Openbravo, que deberia de ser /opt/openbravopos-2.30/lib
  18. Iniciar Openbravo POS, deberia de marcar un error y abrir un panel de configuración, en ese panel cargar lo siguiente:
  19.  
    Driver library: /opt/openbravopos-2.30/libmysql-connector-java-5.1.6.jar
    Driver class: com.mysql.jdbc.Driver
    URL: jdbc:mysql://localhost:3306/openbravopos
    User: rsaucedo
    Password: 123456
    
    Nota:Los parametros empleados en driver library no deben de incluir espacios ni adelante ni atras, verificar bien para evitar errores, los otros parametros deben de ser cargados de acuerdo a el usuario y la base de datos (catalogo) creados en MySQL
    
    
  20. Cerrar y reiniciar Openbravo POS, en este punto va a decir que no hay Tablas creadas y que creara las tablas por defecto, dar ACEPTAR y listo deberia estar funcionando.

***Cuando intenté instalar por primera vez me marcaba que no encontraba el driver, el problema era que la version de JAVA por defecto no era la de SUN, cuando activé utilizar a SUN JRE por defecto el problema cesó