Rapport Facture : formatage des quantités

53 views
Skip to first unread message

JMarc Legrand

unread,
Apr 20, 2016, 5:15:06 AM4/20/16
to tryton-fr
Rebonjour !

Dans le même travail sur les templates de facture, je me casse les dents sur le formatage des quantités.

La compagnie utilise les unités suivantes : Part ou Unité.

Dans le cas d'Unité, j'ai un affichage du type : 2 u => et je voudrais supprimer le u
Dans le cas de Part, j'ai un affichage du type : 0.2500 p => et je voudrais avoir 25 % (sans p)

La case quantité est codée ainsi : 

<(format_number(line.quantity, invoice.party.lang, digits=line.unit_digits) + (line.unit and (' ' + line.unit.symbol) or '')) or ''>  

J'ai tenté un : 


<if test="line.unit.symbol == 'p'">
    <(format_number(line.quantity, invoice.party.lang, digits=line.unit_digits)*100 + (line.unit and (' %') or '')) or ''>
</if>
<else>
    <(format_number(line.quantity, invoice.party.lang, digits=line.unit_digits) + (line.unit and ('') or '')) or ''>
</else>


Mais je reçois un message d'erreur que je ne parviens pas à décrypter.


Dans un sens, comme je ne comprends pas tout ce que je fais, je pense qu'il est normal que je me plante...


Merci d'avance pour votre aide !

JMarc




Cédric Krier

unread,
Apr 22, 2016, 12:25:03 PM4/22/16
to tryton-fr
On 2016-04-20 02:00, JMarc Legrand wrote:
> Rebonjour !
>
> Dans le même travail sur les templates de facture, je me casse les dents
> sur le formatage des quantités.
>
> La compagnie utilise les unités suivantes : Part ou Unité.
>
> Dans le cas d'Unité, j'ai un affichage du type : 2 u => et je voudrais
> supprimer le u
> Dans le cas de Part, j'ai un affichage du type : 0.2500 p => et je voudrais
> avoir 25 % (sans p)
>
> La case quantité est codée ainsi :
>
> <(format_number(line.quantity, invoice.party.lang, digits=line.unit_digits)
> + (line.unit and (' ' + line.unit.symbol) or '')) or ''>
>
> J'ai tenté un :
>
>
> <if test="line.unit.symbol == 'p'">
> <(format_number(line.quantity, invoice.party.lang,
> digits=line.unit_digits)*100 + (line.unit and (' %') or '')) or ''>

format_number retourne une string donc ça n'a pas de sens de multiplier.

> </if>
> <else>

Genshi ne supporte pas ce format de clause. Il faut utiliser
when/choose/otherwise ou bien des if successif.

> <(format_number(line.quantity, invoice.party.lang,
> digits=line.unit_digits) + (line.unit and ('') or '')) or ''>
> </else>
>
>
> Mais je reçois un message d'erreur que je ne parviens pas à décrypter.

Ce serait bien de les poster s'il faut plus d'aide.

--
Cédric Krier - B2CK SPRL
Email/Jabber: cedric...@b2ck.com
Tel: +32 472 54 46 59
Website: http://www.b2ck.com/

JMarc Legrand

unread,
Apr 29, 2016, 4:20:04 AM4/29/16
to tryton-fr


Le vendredi 22 avril 2016 18:25:03 UTC+2, Cédric Krier a écrit :
On 2016-04-20 02:00, JMarc Legrand wrote:
> Rebonjour !
>
> Dans le même travail sur les templates de facture, je me casse les dents
> sur le formatage des quantités.
>
> La compagnie utilise les unités suivantes : Part ou Unité.
>
> Dans le cas d'Unité, j'ai un affichage du type : 2 u => et je voudrais
> supprimer le u
> Dans le cas de Part, j'ai un affichage du type : 0.2500 p => et je voudrais
> avoir 25 % (sans p)
>
> La case quantité est codée ainsi :
>
> <(format_number(line.quantity, invoice.party.lang, digits=line.unit_digits)
> + (line.unit and (' ' + line.unit.symbol) or '')) or ''>  
>
> J'ai tenté un :
>
>
> <if test="line.unit.symbol == 'p'">
>     <(format_number(line.quantity, invoice.party.lang,
> digits=line.unit_digits)*100 + (line.unit and (' %') or '')) or ''>

format_number retourne une string donc ça n'a pas de sens de multiplier.

C'est bien ce que je pressentais... 
> </if>
> <else>

Genshi ne supporte pas ce format de clause. Il faut utiliser
when/choose/otherwise ou bien des if successif.

Arf, le template est plein de when, choose et otherwise, j'aurais dû m'en douter. Je vais relire la doc Genshi. Je me suis cru dans un Jinja, je pense...
 
>     <(format_number(line.quantity, invoice.party.lang,
> digits=line.unit_digits) + (line.unit and ('') or '')) or ''>
> </else>
>
>
> Mais je reçois un message d'erreur que je ne parviens pas à décrypter.

Ce serait bien de les poster s'il faut plus d'aide.

OK je retravaille là-dessus et je reviens vers la liste si besoin.
Merci pour votre aide !
JMarc

JMarc Legrand

unread,
Jul 22, 2016, 9:45:04 AM7/22/16
to tryt...@googlegroups.com
Bonjour à tous, je reviens à la charge sur le sujet, avec : 

1. Une solution : je suis parvenu à choisir l'unité en fonction du type Part (p, donc %) ou Unité (u donc aucune unité affichée) : 

<if test="line.unit.symbol == 'p'">

    <(format_number(line.quantity*100, invoice.party.lang, digits=line.unit_digits) + (line.unit and (' ' + '%') or '')) or ''>

</if>

<if test="line.unit.symbol == 'u'">

    <(format_number(line.quantity, invoice.party.lang, digits=line.unit_digits) + (line.unit and (' ') or '')) or ''>

</if> 

Le '*100' du premier cas permet d'afficher des pourcentages.


2. Une question : 

dans le 1er cas (<if test="line.unit.symbol == 'p'">), j'ai encore 4 chiffres float après la virgule, là où je souhaiterais n'en avoir que 2. 

J'ai tenté diverses formules pythonesques, mais impossible d'y parvenir.

avez-vous la solution à ce petit souci de formatage ?


D'avance merci !

JMarc 


--
Vous recevez ce message, car vous êtes abonné à un sujet dans le groupe Google Groupes "tryton-fr".
Cette discussion peut être lue sur le Web à l'adresse https://groups.google.com/d/msgid/tryton-fr/d49a430c-78b8-43c1-adfc-9015dade5185%40googlegroups.com.

Cédric Krier

unread,
Aug 3, 2016, 4:40:02 AM8/3/16
to tryt...@googlegroups.com
On 2016-07-22 15:22, JMarc Legrand wrote:
> Bonjour à tous, je reviens à la charge sur le sujet, avec :
>
> *1. Une solution :* je suis parvenu à choisir l'unité en fonction du type
> Part (p, donc %) ou Unité (u donc aucune unité affichée) :
>
> <if test="line.unit.symbol == 'p'">
>
> <(format_number(line.quantity*100, invoice.party.lang,
> digits=line.unit_digits) + (line.unit and (' ' + '%') or '')) or ''>
>
> </if>
>
> <if test="line.unit.symbol == 'u'">
>
> <(format_number(line.quantity, invoice.party.lang,
> digits=line.unit_digits) + (line.unit and (' ') or '')) or ''>
>
> </if>
>
> Le '*100' du premier cas permet d'afficher des pourcentages.
>
>
> *2. Une question : *
>
> dans le 1er cas (<if test="line.unit.symbol == 'p'">), j'ai encore 4
> chiffres float après la virgule, là où je souhaiterais n'en avoir que 2.
>
> J'ai tenté diverses formules pythonesques, mais impossible d'y parvenir.
>
> avez-vous la solution à ce petit souci de formatage ?

Et bien le nombre de décimale est définit par le paramètre "digits" donc
il faut le changer pour la valeur que vous souhaitez.
Mais normalement "line.unit_digits" doit retourner la valeur configurer
sur l'unité en question.

PS: Merci de ne pas top-poster sur cette mailing liste, voir
http://groups.tryton.org/netiquette
Reply all
Reply to author
Forward
0 new messages