pagaré - cheque - número en letras

752 views
Skip to first unread message

Victor Martin

unread,
Dec 18, 2015, 5:39:24 AM12/18/15
to Usuarios Odoo / OpenERP en España
Hola, 

Estoy creando un report para pagarés, cheques, etc...

¿Cómo puedo obtener el importe en palabras?

Ejemplo:

importe: 159.23
importe:  ciento cincuenta y nueve euros con 23 céntimos

Gracias,
Víctor Martín



Sandra Figueroa

unread,
Dec 18, 2015, 6:40:50 AM12/18/15
to Usuarios Odoo / OpenERP en España

Rafael Montes Ruiz

unread,
Dec 18, 2015, 8:15:16 PM12/18/15
to Usuarios Odoo / OpenERP en España
Yo lo tengo hecho para los recibos. Mañana te pongo el codigo

Rafael Montes Ruiz

unread,
Dec 19, 2015, 5:36:27 AM12/19/15
to Usuarios Odoo / OpenERP en España
Hola victor. Tienes que crearte un fichero llamado por ejemplo numeroatexto.py con este contenido:

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'

if (float(number_dec) > 0.001 ):
converted += 'con '+ __convertDecimales(number_dec)

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
def __convertDecimales(n):
output=""
if n=='01':
output='UN'
if n=='02':
output='DOS'
if n=='03':
output='TRES'
if n=='04':
output='CUATRO'
if n=='05':
output='CINCO'
if n=='06':
output='SEIS'
if n=='07':
output='SIETE'
if n=='08':
output='OCHO'
if n=='09':
output='NUEVE'
if n=='10':
output='DIEZ'
if n=='11':
output='ONCE'
if n=='12':
output='DOCE'
if n=='13':
output='TRECE'
if n=='14':
output='CATORCE'
if n=='15':
output='QUINCE'
if n=='16':
output='DIECISEIS'
if n=='17':
output='DIECISIETE'
if n=='18':
output='DIECIOCHO'
if n=='19':
output='DIECINUEVE'
if n=='20':
output='VEINTE'
if n=='21':
output='VEINTIUN'
if n=='22':
output='VEINTIDOS'
if n=='23':
output='VEINTITRES'
if n=='24':
output='VEINTICUATRO'
if n=='25':
output='VEINTICINCO'
if n=='26':
output='VEINTISEIS'
if n=='27':
output='VEINTISIETE'
if n=='28':
output='VEINTIOCHO'
if n=='29':
output='VEINTINUEVE'
if n=='30':
output='TREINTA'
if n=='31':
output='TREINTA Y UN'
if n=='32':
output='TREINTA Y DOS'
if n=='33':
output='TREINTA Y TRES'
if n=='34':
output='TREINTA Y CUATRO'
if n=='35':
output='TREINTA Y CINCO'
if n=='36':
output='TREINTA Y SEIS'
if n=='37':
output='TREINTA Y SIETE'
if n=='38':
output='TREINTA Y OCHO'
if n=='39':
output='TREINTA Y NUEVE'
if n=='40':
output='CUARENTA'
if n=='41':
output='CUARENTA Y UN'
if n=='42':
output='CUARENTA Y DOS'
if n=='43':
output='CUARENTA Y TRES'
if n=='44':
output='CUARENTA Y CUATRO'
if n=='45':
output='CUARENTA Y CINCO'
if n=='46':
output='CUARENTA Y SEIS'
if n=='47':
output='CUARENTA Y SIETE'
if n=='48':
output='CUARENTA Y OCHO'
if n=='49':
output='CUARENTA Y NUEVE'
if n=='50':
output='CINCUENTA'

if n=='51':
output='CINCUENTA Y UN'
if n=='52':
output='CINCUENTA Y DOS'
if n=='53':
output='CINCUENTA Y TRES'
if n=='54':
output='CINCUENTA Y CUATRO'
if n=='55':
output='CINCUENTA Y CINCO'
if n=='56':
output='CINCUENTA Y SEIS'
if n=='57':
output='CINCUENTA Y SIETE'
if n=='58':
output='CINCUENTA Y OCHO'
if n=='59':
output='CINCUENTA Y NUEVE'
if n=='60':
output='SESENTA'
if n=='61':
output='SESENTA Y UN'
if n=='62':
output='SESENTA Y DOS'
if n=='63':
output='SESENTA Y TRES'
if n=='64':
output='SESENTA Y CUATRO'
if n=='65':
output='SESENTA Y CINCO'
if n=='66':
output='SESENTA Y SEIS'
if n=='67':
output='SESENTA Y SIETE'
if n=='68':
output='SESENTA Y OCHO'
if n=='69':
output='SESENTA Y NUEVE'
if n=='70':
output='SETENTA'
if n=='71':
output='SETENTA Y UN'
if n=='72':
output='SETENTA Y DOS'
if n=='73':
output='SETENTA Y TRES'
if n=='74':
output='SETENTA Y CUATRO'
if n=='75':
output='SETENTA Y CINCO'
if n=='76':
output='SETENTA Y SEIS'
if n=='77':
output='SETENTA Y SIETE'
if n=='78':
output='SETENTA Y OCHO'
if n=='79':
output='SETENTA Y NUEVE'
if n=='80':
output='OCHENTA'
if n=='81':
output='OCHENTA Y UN'
if n=='82':
output='OCHENTA Y DOS'
if n=='83':
output='OCHENTA Y TRES'
if n=='84':
output='OCHENTA Y CUATRO'
if n=='85':
output='OCHENTA Y CINCO'
if n=='86':
output='OCHENTA Y SEIS'
if n=='87':
output='OCHENTA Y SIETE'
if n=='88':
output='OCHENTA Y OCHO'
if n=='89':
output='OCHENTA Y NUEVE'
if n=='90':
output='NOVENTA'
if n=='91':
output='NOVENTA Y UN'
if n=='92':
output='NOVENTA Y DOS'
if n=='93':
output='NOVENTA Y TRES'
if n=='94':
output='NOVENTA Y CUATRO'
if n=='95':
output='NOVENTA Y CINCO'
if n=='96':
output='NOVENTA Y SEIS'
if n=='97':
output='NOVENTA Y SIETE'
if n=='98':
output='NOVENTA Y OCHO'
if n=='99':
output='NOVENTA Y NUEVE'



return output

Luego lo importas en el .py de tu modulo, y creas una funcion con este codigo:

def obt_texto(self, cr, uid, ids, cantidad, context=None):
res=Numero_a_Texto(cantidad)
return res

Y ya desde el informe que hayas creado, llamas a esa funcion o.obt_texto(cantidad) y te lo pinta con letras

Un saludo

Victor Martin

unread,
Dec 23, 2015, 3:36:41 AM12/23/15
to Usuarios Odoo / OpenERP en España
Hola, 

Muchas gracias a todos.  He creado una clase que hereda de payment.order, lo que quiero es pasar a texto el campo total del modelo payment.order, pero debo estar haciendo algo mal porque no consigo pasar correctamente este campo.  Mi código es el siguiente, y el último traceback que me da es "NameError:  global name 'PaymentOrder' is not defined"

Mi código:

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

from openerp import models, fields, api
import numeroatexto

class PaymentOrder(models.Model):
    _inherit='payment.order'

    def _amount_to_words(self):
        return Numero_a_Texto(super(PaymentOrder, self).total)


    dsn_amount_in_words = fields.Char(string='Amount in Words',
                                      size=255,
                                      default=_amount_to_words(super),
                                      required=False)


Victor Martin

unread,
Dec 23, 2015, 4:25:57 AM12/23/15
to Usuarios Odoo / OpenERP en España
Anteriormente probé de llamar a la función _amount_to_words tal que así:

    dsn_amount_in_words = fields.Char(string='Amount in Words',
                                      size=255,
                                      default=_amount_to_words(),
                                      required=False)

Pero me salta un error conforme no estoy pasando suficientes parámetros a la función.  El único argumento que tiene esta función es self !!

Rafael Montes Ruiz

unread,
Dec 24, 2015, 8:20:32 AM12/24/15
to Usuarios Odoo / OpenERP en España
Yo lo tengo asi:

from numero_a_texto import Numero_a_Texto


Y luego la funcion asi:

Victor Martin

unread,
Dec 29, 2015, 6:41:42 AM12/29/15
to Usuarios Odoo / OpenERP en España
He conseguido que la función de convertir número a texto me funcione !!!

Muchas gracias a todos.

juan perez

unread,
Sep 26, 2017, 12:05:00 PM9/26/17
to Usuarios Odoo / OpenERP en España
Estimado Victor, serias tan amable de compartir como finalmente lograste hacer funcionar, actualmente estoy trabajando en la version 7 con el codigo que ha pasado Rafael e intento estirar el dato en openoffice pero sin exito.

Te estaria muy agradecido, ya que le llevo dando vueltas a esto pero no me sale.

Desde ya agradecido.

Saludos

Víctor Martín

unread,
Oct 9, 2017, 6:40:46 AM10/9/17
to openerp-s...@googlegroups.com
Hola Juan,

Encontré en github una función que hacía todo el trabajo duro, yo sólo la copié.  Puedes ver la función to_word en:


Saludos,

Víctor

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/openerp-spain-users/NOuLLFi_Xb4/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a openerp-spain-users+unsub...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

juan perez

unread,
Oct 9, 2017, 12:18:53 PM10/9/17
to openerp-s...@googlegroups.com
Que tal Victor, agradecido por tu respuesta ya que aun le vengo dando vueltas a este tema de convertir números a letras

Te comento que en su momento vi esta función pero no logre incorporarlo, por ahí mi consulta es medio básica pero no estoy logrando incorporarlo.

¿Como lo has hecho?
  - Guardando esta función e importando en el modulo, como realizas la conversión
  - Agregándolo directamente en el modulo y usándolo con un campo Function ó un Ochange 

Para mostrar la conversión, lo almacenas en un campo y lo estiras en el xml, por cierto estoy trabajando en la versión 7 

Desde ya te agradezco la ayuda.

Saludos  

Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a openerp-spain-users+unsubscribe...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a openerp-spain-users+unsub...@googlegroups.com.

Osmar Montesinos

unread,
Oct 9, 2017, 12:38:45 PM10/9/17
to Usuarios Odoo / OpenERP en España
Victor disculpa que te moleste con este tema, soy nuevo en Odoo, quisiera saber como manejas el temade los pagares en Odoo,solo lo registras en Contabilidad -> Pagos?

Gracias de antemano,
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a openerp-spain-users+unsub...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

Víctor Martín

unread,
Oct 10, 2017, 3:05:04 AM10/10/17
to openerp-s...@googlegroups.com
Hola Juan,

Fíjate en este módulo, es el que tengo funcionando:


Puedes ver como desde pagare.py hago un import del otro archivo, number_to_letter, así que ya tengo disponible la función

Saludos,




Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a openerp-spain-users+unsubscribe...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/openerp-spain-users/NOuLLFi_Xb4/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a openerp-spain-users+unsub...@googlegroups.com.

juan perez

unread,
Nov 10, 2017, 12:49:01 PM11/10/17
to Usuarios Odoo / OpenERP en España
Saludos Victor.

Le tengo dando vueltas a este tema ya hace varias semanas pero no logro dar con la solución he mirado los links que me enviaste y e visto otros pero no logrado nada, no se si es por que estoy trabajando en la Version 7 ya que los que me pasaste son para la 8 y otro que encontre era para la version 6.

Como te mencione estoy trabajando en la version 7 bajo windows 7, me guataria cortarlo por lo sano y usar directo la v8 pero se complica ya que tengo corriendo desde hace un tiempo con un cliente varios modulos y cambiar significaria todo un nuevo desafio.

Si tuviste la oportunidad de hacerlo / usarlo en la v7 te estaria agradecido la ayuda que me puedas dar, te comento que no logro estirar el valor convertido a texto en el reporte rml

Desde ya nuevamente agradecido

Saludos.

Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a openerp-spain-users+unsub...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a openerp-spain-users+unsub...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages