[Résolu] Temp. ODT - Montant Prix Unitaire remisé

Bonjour à tous,

Voilà sur les template ODT nous avons le tag {line_discount_percent} qui permet donc d’obtenir le pourcentage de remise (dans ce cas précis, 30%).
Mais je souhaiterai savoir s’il existe un tag permettant d’afficher le prix unitaire remisé.
Car en effet, les clients me font souvent le même retour que le montant HT ne correspond pas a la multiplication de la quantité x le montant unitaire (ce qui est logique en soit, mais pour les clients, pas clair).

Voici un exemple concret:

Qté: 40
Prix unitaire non remisé: 173.73
Remise: 30%
Montant total HT: 4864.44

Sauf que, 173.73 x 40 = 6949.20
Mais bien évidemment le résultat est bon, car 6949.20 - 30% = 4864.44.

Mais les clients s’y perdent.

Je souhaiterai donc savoir si on pouvait ajouté un tag, permettant d’afficher le Prix Unitaire après remisé ce qui donnerait donc:

Qté: 40
Prix Unitaire HT: 173.73
Remise: 30%
Prix Unitaire remisé: 121.61
Montant HT: 4864.44.

Et les clients qui feront donc 121.61 x 40 tomberont bien sur 4864.4

Merci d’avance pour votre retour.

Cordialement.

Pièces jointes :

Bonjour :happy:
Voici la liste des substitutions dispo :

'line_fulldesc' => doc_getlinedesc($line,$outputlangs)
'line_product_ref' => $line->product_ref
'line_product_label' => $line->product_label
'line_product_type' => $line->product_type
'line_desc' => $line->desc
'line_vatrate' =>vatrate($line->tva_tx,true,$line->info_bits)
'line_up' =>price2num($line->subprice)
'line_up_locale' =>price($line->subprice, 0, $outputlangs)
'line_qty' => $line->qty
'line_discount_percent' =>($line->remise_percent?$line->remise_percent.'%':'')
'line_price_ht' =>price2num($line->total_ht)
'line_price_ttc' =>price2num($line->total_ttc)
'line_price_vat' =>price2num($line->total_tva)
'line_price_ht_locale' =>price($line->total_ht, 0, $outputlangs)
'line_price_ttc_locale' =>price($line->total_ttc, 0, $outputlangs)
'line_price_vat_locale' =>price($line->total_tva, 0, $outputlangs)
'line_date_start' =>dol_print_date($line->date_start, 'day', 'tzuser')
'line_date_start_locale' =>dol_print_date($line->date_start, 'day', 'tzuser', $outputlangs)
'line_date_start_rfc' =>dol_print_date($line->date_start, 'dayrfc', 'tzuser')
'line_date_end' =>dol_print_date($line->date_end, 'day', 'tzuser')
'line_date_end_locale' =>dol_print_date($line->date_end, 'day', 'tzuser', $outputlangs)
'line_date_end_rfc' =>dol_print_date($line->date_end, 'dayrfc', 'tzuser')
'line_multicurrency_code' => price2num($line->multicurrency_code)
'line_multicurrency_subprice' => price2num($line->multicurrency_subprice)
'line_multicurrency_total_ht' => price2num($line->multicurrency_total_ht)
'line_multicurrency_total_tva' => price2num($line->multicurrency_total_tva)
'line_multicurrency_total_ttc' => price2num($line->multicurrency_total_ttc)
'line_multicurrency_subprice_locale' => price($line->multicurrency_subprice, 0, $outputlangs)
'line_multicurrency_total_ht_locale' => price($line->multicurrency_total_ht, 0, $outputlangs)
'line_multicurrency_total_tva_locale' => price($line->multicurrency_total_tva, 0, $outputlangs)
'line_multicurrency_total_ttc_locale' => price($line->multicurrency_total_ttc, 0, $outputlangs)

Bonjour,

Merci pour votre réponse, mais j’avais déjà découvert celle-ci sur le Wiki de Dolibarr.
Je me suis permis de poser la question sur le forum parce que justement je ne vois pas la substitution de disponible.
D’où le fait de ma question de savoir si cela était possible de le faire ?

Ce qui serait bien, c’est d’avoir par exemple:
{line_up} qui nous affiche bien le prix unitaire.
Et {line_up_discount} qui ferait:
{line_up} - {line_discount_percent} = {line_up_discount} qui nous afficherait le prix unitaire remisé.

Merci tout de même :happy:

:wink:
Il faut alors proposer sur github un truc du genre je pense.

line_up_discount ='';
if($line->remise_percent>0)
{
line_up_discount =price2num( ($line->subprice*($line->remise_percent/100))+$line->subprice);
}

Merci pour votre réponse, cela devient un peu trop « technique » pour moi … :happy:

Au pire :whistle: directement dans votre fichier (dont vous faites une sauvegarde avant :evil: ) :

htdocs/core/class/commondocgenerator.class.php
ajoutez dans la fonction :

get_substitutionarray_lines($line,$outputlangs)
après la ligne:

global $conf;
ajoutez :

[code]
$line_up_discount = ‹  ›;//valeur par défaut

if($line->subprice>0 && $line->remise_percent>0)
{//si prix et remise existent
$line_up_discount = price2num( ($line->subprice*($line->remise_percent/100))+$line->subprice);
}[/code]

puis dans le tableau:

$resarray= array(...);
ajouter la ligne:

'line_up_discount'=>$line_up_discount,

Ca devrait le faire dites moi si ca fonctionne pour vous (j’ai pas testé)

1 « J'aime »

Merci pour votre aide,
Cela fonctionne pour le tag, en revanche, il fait le PU + 30% et non PU -30%
Il fait 173.73 + 30% qui donne 225.849 au tag et non 173.73 - 30% qui devrait afficher 121.611.

Est-il également possible d’arrêter à 2 décimales ? Avec un arrondi au supérieur ? Exemple pour 121.611 = 121.61, et pour 121.619 = 121.62 ?

Merci d’avance :happy:

Il faut alors remplacer par :

 $line_up_discount = price( $line->subprice -  ( $line->subprice * ( $line->remise_percent/100 ) ) );

si c’est pas bon au niveau de l’arrondi essaie alors :

 $line_up_discount = round($line->subprice -  ($line->subprice * ( $line->remise_percent/100 )), 2);

Dis moi si c’est bon :wink:

1 « J'aime »

Merci à vous :happy:
Le 2e code fait son travail :happy: Je verrai sur un autre devis si l’arrondi supérieur se fait bien :happy:

Encore merci :happy:

Chouette :sunglasses:

  1. la première ligne correspond à la fonction price() de Dolibarr
  2. la deuxième correspond à la fonction php round() qui l’arrondi à 2 chiffre après la virgule

N’oubliez pas de marquer le sujet comme résolu dans le titre: [Résolu]

:happy:

Voilà qui est fait :happy:
Bonne journée à vous

Bonjour,

Je déterre un peu le topic avec une question un peu simplette.

Tout d’abord pouvez vous détailler la démarche ?
Je comprends bien ce qu’il faut faire dans le fichier htdocs/core/class/commondocgenerator.class.php, mais comment faire en sort que ça se répercute quelque part ? Il faut bien modifier un template ailleurs non ? la vous n’avez fait qu’ajouter la possibilité de faire ce calcul mais vous ne l’affichez pas ?!

En fait je travaille plutôt sur les template pdf, et je vousdrai faire exactement ce qui est proposé dans ce post, mais sur le template azur.

Est-ce que vous avez des recommandation ?
Merci d’avance

Bonjour,

Pour ce qui est des templates PDF je ne suis pas « expert » en la matière.
En revanche pour les ODT et pour répondre à votre question « la vous n’avez fait qu’ajouter la possibilité de faire ce calcul mais vous ne l’affichez pas ?! »

En effet, c’est ce que le code sus-cité effectue comme manœuvre, il ne reste plus qu’à l’importer dans le fichier ODT comme n’importe quel autre tag, [line_up_discount] dans la case que l’on souhaite.

Cordialement.