qweb - formatear los decimales de un campo float

4,204 views
Skip to first unread message

Victor Martin

unread,
Dec 29, 2014, 11:04:51 AM12/29/14
to openerp-s...@googlegroups.com
Estoy diseñando un report de factura en qweb en el que quiero que me saque la cantidad sin decimales.

¿Es posible hacer ésto directamente en un template de qweb, sin necesidad de crear ningún módulo adicional?

¿O debo crear un módulo que me extienda la línea de factura con un nuevo campo?

Lo que he intentado hacer (sin éxito) en mi plantilla qweb es lo siguiente:

<td class="text-right"><span t-field="l.quantity" t-field-options='{"format": "####0"}'/></td>

Muchas gracias

cubells

unread,
Dec 29, 2014, 11:45:39 AM12/29/14
to openerp-s...@googlegroups.com
El 29/12/14 a les 17:04, Victor Martin ha escrit:
> Estoy diseñando un report de factura en qweb en el que quiero que me
> saque la cantidad sin decimales.
>
> ¿Es posible hacer ésto directamente en un template de qweb, sin
> necesidad de crear ningún módulo adicional?
>
> ¿O debo crear un módulo que me extienda la línea de factura con un nuevo
> campo?
>
> Lo que he intentado hacer (sin éxito) en mi plantilla qweb es lo siguiente:
>
> /*<td class="text-right"><span t-field="l.quantity"
> t-field-options='{"format": "####0"}'/></td>*/
> /*
> */


Esto te debe de dar una idea:

./account_bank_statement_extensions/views/report_bankstatementbalance.xml:
<span
t-esc="formatLang(line['s_balance'] or 0, digits=2)"/>

--
Atentament, cubells.
--

Victor Martin

unread,
Dec 30, 2014, 11:51:09 AM12/30/14
to openerp-s...@googlegroups.com
Muchas gracias Vicent,

Siguiendo tu consejo he probado lo siguiente:

<span t-esc="l['quantity']"/>

y funciona !!!

En cambio a la que utilizo la función formatLang en cualquiera de las siguientes formas, deja de funcionar:

<td class="text-right"><span t-esc="formatLang(l['quantity'])"/></td>

<td class="text-right"><span t-esc="formatLang(l['quantity'], digits=4)"/></td>

<td class="text-right"><span t-esc="formatLang(l['quantity'], digits=4, dp='Account')"/></td>

¿Alguna idea ?

Muchas gracias de antemano



cubells

unread,
Dec 30, 2014, 12:07:26 PM12/30/14
to openerp-s...@googlegroups.com
El 30/12/14 a les 17:51, Victor Martin ha escrit:
> Muchas gracias Vicent,
>
> Siguiendo tu consejo he probado lo siguiente:
>
> <span t-esc="l['quantity']"/>
>
>
> y funciona !!!
>
> *_E__n cambio_* a la que utilizo la función formatLang en cualquiera de
> las siguientes formas, deja de funcionar:
>
> <tdclass="text-right"><spant-esc="formatLang(l['quantity'])"/></td>
>
>
> <tdclass="text-right"><spant-esc="formatLang(l['quantity'], digits=4)"/></td>


<span t-esc="formatLang(l['quantity'] or 0, digits=0)"/>


Pues te debería de funcionar, si l es la variable donde está la linea.

Cuando imprimes, en el log, te aparece algún error?



--
Atentament, cubells.
--

Victor Martin

unread,
Dec 30, 2014, 12:37:08 PM12/30/14
to openerp-s...@googlegroups.com
Hola Vicent, 

Este es el error que aparece al final del log, no sé cual es el objeto 'NoneType' object ...

QWebException: ""'NoneType' object is not callable" while evaluating
"formatLang(l['quantity'], digits=4, dp='Account')"" while evaluating
"translate_doc(doc_id, doc_model, 'partner_id.lang', 'dsn_invoice_rpt.report_nationalinvoice_document')"

Salut

cubells

unread,
Dec 30, 2014, 12:44:26 PM12/30/14
to openerp-s...@googlegroups.com
El 30/12/14 a les 18:37, Victor Martin ha escrit:
> Hola Vicent,
>
> Este es el error que aparece al final del log, no sé cual es el objeto
> 'NoneType' object ...
>
> */QWebException: ""'NoneType' object is not callable" while evaluating/*
> */"formatLang(l['quantity'], digits=4, dp='Account')"" while evaluating/*
> */"translate_doc(doc_id, doc_model, 'partner_id.lang',
> 'dsn_invoice_rpt.report_nationalinvoice_document')"/*



Pues ya lo tienes, l no tiene datos, no es la linea.

Puedes enseñarme el códido qweb entero?


--
Atentament, cubells.
--

Victor Martin

unread,
Jan 2, 2015, 7:34:11 AM1/2/15
to openerp-s...@googlegroups.com
Hola, 

Parece que ha habido un malentendido:

Por lo que he visto por el código formatLang es una función sólo para reports rml.  Entonces es normal que qweb lance esta excepción, ya que no sabe lo que es formatLang.

Por favor, corrígeme si me equivoco.

Si estoy en lo cierto, ¿sabes alguna otra manera de formatear un float para qweb?

Por cierto, Bon Any Nou !!!


cubells

unread,
Jan 2, 2015, 7:50:50 AM1/2/15
to openerp-s...@googlegroups.com
El 02/01/15 a les 13:34, Victor Martin ha escrit:
> Hola,
>
> Parece que ha habido un malentendido:
>
> Por lo que he visto por el código *formatLang* es una función sólo para
> reports rml. Entonces es normal que qweb lance esta excepción, ya que
> no sabe lo que es formatLang.
>


Eso te parece rml?


https://github.com/OCA/OCB/blob/8.0/addons/account_analytic_plans/views/report_crossoveredanalyticplans.xml




--
Atentament, cubells.
--

Victor Martin

unread,
Jan 2, 2015, 10:00:05 AM1/2/15
to openerp-s...@googlegroups.com
El ejemplo que me has puesto es claramente qweb, pero es que yo buscando la función formatLang desde la raíz de mi instalación de odoo la única función que encuentro con ese nombre está casualmente en una clase llamada rml_parse, de ahí mi deducción, que por lo visto es errónea.

Salu2.

cubells

unread,
Jan 2, 2015, 11:35:45 AM1/2/15
to openerp-s...@googlegroups.com
El 02/01/15 a les 16:00, Victor Martin ha escrit:
> El ejemplo que me has puesto es claramente qweb, pero es que yo buscando
> la función formatLang desde la raíz de mi instalación de odoo la única
> función que encuentro con ese nombre está casualmente en una clase
> llamada rml_parse, de ahí mi deducción, que por lo visto es errónea.
>
>


Vamos a tu problema que es lo que interesa.

Si pones esto:

<span t-esc="formatLang(l.quantity or 0, digits=0)"/>

te funciona?

O esto simplemente:


<span t-esc="l.quantity"/>

<span t-esc="l['quantity]"/>


Uno de los dos anteriores ha de funcionar por narices (si l es una
variable con datos), pero como no muestras el código entero, he de hacer
presuposiciones.


--
Atentament, cubells.
--

Victor Martin

unread,
Jan 5, 2015, 3:30:39 AM1/5/15
to openerp-s...@googlegroups.com
Hola Cubells, 

Esto funciona:

<span t-esc="l['quantity']"/> 

Ya lo indiqué así el día 30/12, pero quizás no lo leíste.

A la que introduzco la función formatLang es cuando deja de funcionar !!

Éste es el código del tbody :

<tbody>
<tr t-foreach="o.invoice_line" t-as="l">

<td class="text-right"><span t-esc="formatLang(l.quantity)"/></td>
<td><span t-field="l.name"/></td>
<td class="text-right"><span t-field="l.price_unit"/></td>
<td class="text-right">
<span t-field="l.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": "o.currency_id"}'/>
</td>
</tr>
</tbody>

Y la excepción que lanza siempre que uso la función formatLang :

QWebException: ""'NoneType' object is not callable" while evaluating
'formatLang(l.quantity)'" while evaluating
"translate_doc(doc_id, doc_model, 'partner_id.lang', 'dsn_invoice_rpt.report_nationalinvoice_document')"

Gracias de nuevo y un saludo


cubells

unread,
Jan 5, 2015, 4:34:56 AM1/5/15
to openerp-s...@googlegroups.com
El 05/01/15 a les 09:30, Victor Martin ha escrit:
> Hola Cubells,
>
> Esto funciona:
>
> <span t-esc="l['quantity']"/>
>
>
> Ya lo indiqué así el día 30/12, pero quizás no lo leíste.
>
>
> A la que introduzco la función_formatLang_ es cuando deja de funcionar !!
>
> Éste es el código del tbody :
>
>
> <tbody>
> <trt-foreach="o.invoice_line"t-as="l">
>
> <tdclass="text-right"><spant-esc="formatLang(l.quantity)"/></td>
> <td><spant-field="l.name"/></td>
> <tdclass="text-right"><spant-field="l.price_unit"/></td>
> <tdclass="text-right">
> <spant-field="l.price_subtotal"
> t-field-options='{"widget": "monetary", "display_currency": "o.currency_id"}'/>
> </td>
> </tr>
> </tbody>
>
>
> Y la excepción que lanza siempre que uso la función formatLang :
>
>
> QWebException: ""'NoneType' object is not callable" while evaluating
> 'formatLang(l.quantity)'" while evaluating
> "translate_doc(doc_id, doc_model, 'partner_id.lang', 'dsn_invoice_rpt.report_nationalinvoice_document')"
>


Extraño lo que te pasa.


Si esto dices que te funciona:

<span t-esc="l['quantity']"/>

Entonces la solución es sencilla

<span t-esc="int(l['quantity'])"/>


--
Atentament, cubells.
--

Victor Martin

unread,
Jan 5, 2015, 6:34:31 AM1/5/15
to openerp-s...@googlegroups.com
Gracias, ésto me sirve para salvar el expediente !!

Roberto Gil

unread,
Jan 5, 2015, 7:35:42 PM1/5/15
to openerp-s...@googlegroups.com
Has probado a quitar los de decimales?
Sin modificar el informe, vas a :

Configuración/tecnico/estructura de base de datos/precisión decimal

Aquí cambia Product unit of measure y Product UoS

Espero te sirva.

Vicktor Martin

unread,
Jan 6, 2015, 1:01:52 PM1/6/15
to openerp-s...@googlegroups.com

Es otra opción, pero seria global para todos los reports, por lo que perderiamos los decimales en otros reports de compras, etc...

De momento voy tirando con la función int .

Muchas gracias y un saludo

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

Diego Abad

unread,
Mar 12, 2015, 10:20:51 AM3/12/15
to openerp-s...@googlegroups.com
Victor, tu problema es que tienes que definir una clase wrapper para tu reporte, si haces eso te va a funcionar
la funcion formatLang en la vista qweb.  Puedes chequear un ejemplo en el modulo hr_payroll.

En ese modulo tienes la vista qweb report_payslip.xml dentro de la carpeta views,
y si te fijas dentro de la carpeta report tienes un archivo report_payslip.py.

Revisa ese ejemplo y te va a funcionar tu reporte.

Saludos,
Diego

Victor Martin

unread,
Mar 13, 2015, 9:06:47 AM3/13/15
to openerp-s...@googlegroups.com
Tomo nota Diego, muchas gracias.
Reply all
Reply to author
Forward
0 new messages