diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php
index ec7883ce910..f933e38cb79 100644
--- a/htdocs/comm/propal.php
+++ b/htdocs/comm/propal.php
@@ -474,28 +474,6 @@ if ($_GET['action'] == 'modif' && $user->rights->propale->creer)
}
-if ($_POST['action'] == "setabsolutediscount" && $user->rights->propale->creer)
-{
- if ($_POST["remise_id"])
- {
- $propal = new Propal($db);
- $propal->id=$_GET['propalid'];
- $ret=$propal->fetch($_GET['propalid']);
- if ($ret > 0)
- {
- $propal->insert_discount($_POST["remise_id"]);
- if ($result < 0)
- {
- $mesg='
'.$propal->error.'
';
- }
- }
- else
- {
- dolibarr_print_error($db,$propal->error);
- }
- }
-}
-
/*
* Ajout d'une ligne produit dans la propale
*/
@@ -551,7 +529,8 @@ if ($_POST['action'] == "addligne" && $user->rights->propale->creer)
$_POST['qty'],
$tva_tx,
$_POST['idprod'],
- $_POST['remise_percent']
+ $_POST['remise_percent'],
+ 'HT'
);
if ($_REQUEST['lang_id'])
@@ -1150,7 +1129,7 @@ if ($_GET['propalid'] > 0)
}
print "\n";
}
- print ''.$objp->tva_tx.'% | ';
+ print ''.vatrate($objp->tva_tx).'% | ';
print ''.price($objp->subprice)." | \n";
// Qty
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index dd967093876..66b26a1dd2a 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -1639,7 +1639,7 @@ if ($_GET['action'] == 'create')
}
}
print '';
- print ''.$objp->tva_tx.'% | ';
+ print ''.vatrate($objp->tva_tx).'% | ';
print ''.price($objp->subprice).' | ';
print '';
print (($objp->info_bits & 2) != 2) ? $objp->qty : ' ';
@@ -2193,9 +2193,10 @@ else
/*
* Lignes de factures
*/
- $sql = 'SELECT l.fk_product, l.description, l.price, l.qty, l.rowid, l.tva_taux,';
+ $sql = 'SELECT l.fk_product, l.description, l.qty, l.rowid, l.tva_taux,';
$sql.= ' l.fk_remise_except,';
$sql.= ' l.remise_percent, l.subprice, l.info_bits,';
+ $sql.= ' l.total_ht, l.total_tva, l.total_ttc,';
$sql.= ' '.$db->pdate('l.date_start').' as date_start,';
$sql.= ' '.$db->pdate('l.date_end').' as date_end,';
$sql.= ' p.ref, p.fk_product_type, p.label as product,';
@@ -2289,7 +2290,7 @@ else
}
print " | \n";
}
- print ''.$objp->tva_taux.'% | ';
+ print ''.vatrate($objp->tva_taux).'% | ';
print ''.price($objp->subprice)." | \n";
print '';
if (($objp->info_bits & 2) != 2)
@@ -2306,7 +2307,7 @@ else
{
print ' | | ';
}
- print ''.price($objp->subprice*$objp->qty*(100-$objp->remise_percent)/100)." | \n";
+ print ''.price($objp->total_ht)." | \n";
// Icone d'edition et suppression
if ($fac->statut == 0 && $user->rights->facture->creer)
diff --git a/htdocs/html.form.class.php b/htdocs/html.form.class.php
index 09c5c16b8e8..f39f5cffa6e 100644
--- a/htdocs/html.form.class.php
+++ b/htdocs/html.form.class.php
@@ -2316,7 +2316,7 @@ class Form
{
print ' selected="true"';
}
- print '>'.$libtva[$i].'';
+ print '>'.vatrate($libtva[$i]).'';
$this->tva_taux_value[$i] = $txtva[$i];
$this->tva_taux_libelle[$i] = $libtva[$i];
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index faba2cf87df..f657f25ce19 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -456,7 +456,7 @@ LimitsSetup=Limits/Precision setup
LimitsDesc=You can define here limits and precision used by Dolibarr
MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
-MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Excedented decimals will be replaced by three dots ...)
+MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add ... after this number if you want to see ... when number is truncated when shown on screen)
##### Users setup #####
UserGroupSetup=Users and groups module setup
GeneratePassword=Suggest a generated password
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index f480ebdbdec..45bcf065d70 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -463,7 +463,7 @@ LimitsSetup=Configuration des limites et precisions
LimitsDesc=Vous pouvez définir ici les limites et précisions utilisées par Dolibarr
MAIN_MAX_DECIMALS_UNIT=Nombre de décimals maximum pour les prix unitaires
MAIN_MAX_DECIMALS_TOT=Nombre de décimals maximum pour les prix totaux
-MAIN_MAX_DECIMALS_SHOWN=Nombre de décimals maximum pour les montant affichés à l'écran (Les décimals en trop sont remplacés par trois petits points: ...)
+MAIN_MAX_DECIMALS_SHOWN=Nombre de décimals maximum pour les montant affichés à l'écran (Mettre ... après ce nombre max si vous voulez voir ... quand le nombre est tronqué à l'affichage écran)
##### Users setup #####
UserGroupSetup=Configuration module utilisateurs et groupes
GeneratePassword=Proposer un mot de passe généré
diff --git a/htdocs/lib/functions.inc.php b/htdocs/lib/functions.inc.php
index b4d5c8a5ccc..f19120f05bc 100644
--- a/htdocs/lib/functions.inc.php
+++ b/htdocs/lib/functions.inc.php
@@ -1903,17 +1903,36 @@ function print_fleche_navigation($page,$file,$options='',$nextpage)
}
+/**
+* \brief Fonction qui retourne un taux de tva formaté pour visualisation
+* \remarks Fonction utilisée dans les pdf et les pages html
+* \param rate Taux a formater (19.6 19,6 19.6% 19,6%...)
+* \return string Chaine avec montant formaté (19,6 ou 19,6%)
+*/
+function vatrate($rate)
+{
+ $foundpercent=false;
+ if (eregi('%',$rate))
+ {
+ $rate=eregi_replace('%','',$rate);
+ $foundpercent=true;
+ }
+ return price($rate,0,'',0,0).($foundpercent?'%':'');
+}
+
+
/**
* \brief Fonction qui retourne un montant monétaire formaté pour visualisation
* \remarks Fonction utilisée dans les pdf et les pages html
* \param amount Montant a formater
* \param html Formatage html ou pas (0 par defaut)
-* \param outlangs Objet langs pour formatage
+* \param outlangs Objet langs pour formatage text
* \param trunc 1=Tronque affichage si trop de décimales,0=Force le non troncage
+* \param nbdecimal Nbre decimals minimum.
* \return string Chaine avec montant formaté
* \seealso price2num Fonction inverse de price
*/
-function price($amount, $html=0, $outlangs='', $trunc=1)
+function price($amount, $html=0, $outlangs='', $trunc=1, $nbdecimal=2)
{
global $langs,$conf;
@@ -1934,17 +1953,19 @@ function price($amount, $html=0, $outlangs='', $trunc=1)
$decpart = $datas[1];
$decpart = eregi_replace('0+$','',$decpart); // Supprime les 0 de fin de partie décimale
//print "decpart=".$decpart."
";
-
- // On pose par defaut 2 decimales
- $nbdecimal = 2;
$end='';
+
// On augmente au besoin si il y a plus de 2 décimales
if (strlen($decpart) > $nbdecimal) $nbdecimal=strlen($decpart);
// Si on depasse max
if ($trunc && $nbdecimal > $conf->global->MAIN_MAX_DECIMALS_SHOWN)
{
$nbdecimal=$conf->global->MAIN_MAX_DECIMALS_SHOWN;
- $end='...';
+ if (eregi('\.\.\.',$conf->global->MAIN_MAX_DECIMALS_SHOWN))
+ {
+ // Si un affichage est tronqué, on montre des ...
+ $end='...';
+ }
}
// Formate nombre
diff --git a/htdocs/propal.class.php b/htdocs/propal.class.php
index 9ddf830b6be..ee7195c3fb2 100644
--- a/htdocs/propal.class.php
+++ b/htdocs/propal.class.php
@@ -280,8 +280,8 @@ class Propal extends CommonObject
$remise_percent=price2num($remise_percent);
$qty=price2num($qty);
if (! $qty) $qty=1;
- $pu = price2num($pu);
- $txtva = price2num($txtva);
+ $pu = price2num($pu,'MU');
+ $txtva = price2num($txtva,'MU');
// Calcul du total TTC et de la TVA pour la ligne a partir de
// qty, pu, remise_percent et txtva
@@ -292,8 +292,9 @@ class Propal extends CommonObject
$total_tva = $tabprice[1];
$total_ttc = $tabprice[2];
+ // \TODO A virer
// Anciens indicateurs: $price, $remise (a ne plus utiliser)
- $price = $pu;
+ $price = $pu;
if ($remise_percent > 0)
{
$remise = round(($pu * $remise_percent / 100), 2);
@@ -316,7 +317,7 @@ class Propal extends CommonObject
$ligne->total_tva=$total_tva;
$ligne->total_ttc=$total_ttc;
- // Ne plus utiliser
+ // \TODO Ne plus utiliser
$ligne->price=$price;
$ligne->remise=$remise;
@@ -2236,6 +2237,9 @@ class PropaleLigne
dolibarr_syslog("PropaleLigne.class::insert rang=".$this->rang);
$this->db->begin();
+ // Nettoyage parameteres
+ if (! $this->remise) $this->remise=0;
+
$rangtouse=$this->rang;
if ($rangtouse == -1)
{
@@ -2258,29 +2262,29 @@ class PropaleLigne
// Insertion dans base de la ligne
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'propaldet';
- $sql.= ' (fk_propal, description, price, qty, tva_tx,';
- $sql.= ' fk_product, remise_percent, subprice, remise, fk_remise_except, ';
- $sql.= ' rang, coef,';
- $sql.= ' info_bits, total_ht, total_tva, total_ttc)';
+ $sql.= ' (fk_propal, description, fk_product, fk_remise_except, qty, tva_tx,';
+ $sql.= ' subprice, remise_percent, price, remise, ';
+ $sql.= ' info_bits, ';
+ $sql.= ' total_ht, total_tva, total_ttc, coef, rang)';
$sql.= " VALUES (".$this->fk_propal.",";
$sql.= " '".addslashes($this->desc)."',";
- $sql.= " '".price2num($this->price)."',";
- $sql.= " '".price2num($this->qty)."',";
- $sql.= " '".price2num($this->tva_tx)."',";
if ($this->fk_product) { $sql.= "'".$this->fk_product."',"; }
else { $sql.='null,'; }
- $sql.= " '".price2num($this->remise_percent)."',";
- $sql.= " '".price2num($this->subprice)."',";
- $sql.= " '".price2num($this->remise)."',";
if ($this->fk_remise_except) $sql.= $this->fk_remise_except.",";
else $sql.= 'null,';
- $sql.= ' '.$rangtouse.',';
+ $sql.= " ".price2num($this->qty).",";
+ $sql.= " ".price2num($this->tva_tx).",";
+ $sql.= " ".price2num($this->subprice).",";
+ $sql.= " ".price2num($this->remise_percent).",";
+ $sql.= " ".price2num($this->price).","; // \TODO A virer
+ $sql.= " ".price2num($this->remise).","; // \TODO A virer
+ $sql.= " '".$this->info_bits."',";
+ $sql.= " ".price2num($this->total_ht).",";
+ $sql.= " ".price2num($this->total_tva).",";
+ $sql.= " ".price2num($this->total_ttc).",";
if (isset($this->coef)) $sql.= ' '.$this->coef.',';
else $sql.= ' null,';
- $sql.= " '".$this->info_bits."',";
- $sql.= " '".price2num($this->total_ht)."',";
- $sql.= " '".price2num($this->total_tva)."',";
- $sql.= " '".price2num($this->total_ttc)."'";
+ $sql.= ' '.$rangtouse;
$sql.= ')';
dolibarr_syslog("PropaleLigne.class::insert sql=$sql");
@@ -2313,20 +2317,20 @@ class PropaleLigne
// Mise a jour ligne en base
$sql = "UPDATE ".MAIN_DB_PREFIX."propaldet SET";
$sql.= " description='".addslashes($this->desc)."'";
- $sql.= ",price='".price2num($this->price)."'";
- $sql.= ",subprice='".price2num($this->subprice)."'";
- $sql.= ",remise='".price2num($this->remise)."'";
- $sql.= ",remise_percent='".price2num($this->remise_percent)."'";
if ($fk_remise_except) $sql.= ",fk_remise_except=".$this->fk_remise_except;
else $sql.= ",fk_remise_except=null";
$sql.= ",tva_tx='".price2num($this->tva_tx)."'";
$sql.= ",qty='".price2num($this->qty)."'";
+ $sql.= ",subprice=".price2num($this->subprice)."";
+ $sql.= ",remise_percent=".price2num($this->remise_percent)."";
+ $sql.= ",price=".price2num($this->price).""; // \TODO A virer
+ $sql.= ",remise=".price2num($this->remise).""; // \TODO A virer
+ $sql.= ",info_bits='".$this->info_bits."'";
+ $sql.= ",total_ht=".price2num($this->total_ht)."";
+ $sql.= ",total_tva=".price2num($this->total_tva)."";
+ $sql.= ",total_ttc=".price2num($this->total_ttc)."";
$sql.= ",rang='".$this->rang."'";
$sql.= ",coef='".$this->coef."'";
- $sql.= ",info_bits='".$this->info_bits."'";
- $sql.= ",total_ht='".price2num($this->total_ht)."'";
- $sql.= ",total_tva='".price2num($this->total_tva)."'";
- $sql.= ",total_ttc='".price2num($this->total_ttc)."'";
$sql.= " WHERE rowid = ".$this->rowid;
dolibarr_syslog("PropaleLigne::update sql=$sql");
@@ -2347,7 +2351,7 @@ class PropaleLigne
}
/**
- * \brief Mise a jour an base des champs total_xxx de ligne de propale
+ * \brief Mise a jour en base des champs total_xxx de ligne de propale
* \return int <0 si ko, >0 si ok
*/
function update_total()
@@ -2356,9 +2360,9 @@ class PropaleLigne
// Mise a jour ligne en base
$sql = "UPDATE ".MAIN_DB_PREFIX."propaldet SET";
- $sql.= " total_ht='".price2num($this->total_ht)."'";
- $sql.= ",total_tva='".price2num($this->total_tva)."'";
- $sql.= ",total_ttc='".price2num($this->total_ttc)."'";
+ $sql.= " total_ht=".price2num($this->total_ht)."";
+ $sql.= ",total_tva=".price2num($this->total_tva)."";
+ $sql.= ",total_ttc=".price2num($this->total_ttc)."";
$sql.= " WHERE rowid = ".$this->rowid;
dolibarr_syslog("PropaleLigne::update_total sql=$sql");
diff --git a/mysql/migration/2.1.0-2.2.0.sql b/mysql/migration/2.1.0-2.2.0.sql
index aa889bc0ac0..9df0a753c8c 100644
--- a/mysql/migration/2.1.0-2.2.0.sql
+++ b/mysql/migration/2.1.0-2.2.0.sql
@@ -599,6 +599,18 @@ ALTER TABLE llx_facture_fourn_det MODIFY tva_taux double(16,8) DEFAULT
ALTER TABLE llx_facture_fourn_det MODIFY tva double(16,8) DEFAULT 0;
ALTER TABLE llx_facture_fourn_det MODIFY total_ttc double(16,8) DEFAULT 0;
+ALTER TABLE llx_propal ADD total_ht double(16,8) DEFAULT 0 after remise;
+
+ALTER TABLE llx_propal MODIFY tva double(16,8) DEFAULT 0;
+ALTER TABLE llx_propal MODIFY total_ht double(16,8) DEFAULT 0;
+ALTER TABLE llx_propal MODIFY total double(16,8) DEFAULT 0;
+
+ALTER TABLE llx_propaldet MODIFY tva_tx double(6,3) DEFAULT 0;
+ALTER TABLE llx_propaldet MODIFY total_ht double(16,8) DEFAULT 0;
+ALTER TABLE llx_propaldet MODIFY total_tva double(16,8) DEFAULT 0;
+ALTER TABLE llx_propaldet MODIFY total_ttc double(16,8) DEFAULT 0;
+ALTER TABLE llx_propaldet MODIFY subprice double(16,8) DEFAULT 0;
+
ALTER TABLE llx_societe_remise_except MODIFY amount_ht double(16,8) DEFAULT 0;
ALTER TABLE llx_societe_remise_except MODIFY amount_tva double(16,8) DEFAULT 0;
ALTER TABLE llx_societe_remise_except MODIFY amount_ttc double(16,8) DEFAULT 0;
diff --git a/mysql/tables/llx_propal.sql b/mysql/tables/llx_propal.sql
index e2f9b04d17f..47601a2fe1e 100644
--- a/mysql/tables/llx_propal.sql
+++ b/mysql/tables/llx_propal.sql
@@ -37,13 +37,13 @@ create table llx_propal
fk_user_valid integer, -- valideur de la propale
fk_user_cloture integer, -- cloture de la propale signee ou non signee
fk_statut smallint DEFAULT 0 NOT NULL,
- price real DEFAULT 0,
- remise_percent real DEFAULT 0, -- remise globale relative en pourcent
- remise_absolue real DEFAULT 0, -- remise globale absolue
- remise real DEFAULT 0, -- remise calculee
- tva real DEFAULT 0, -- montant tva apres remise globale
- total_ht real DEFAULT 0, -- montant total ht apres remise globale
- total real DEFAULT 0, -- montant total ttc apres remise globale
+ price real DEFAULT 0, -- (obsolete)
+ remise_percent real DEFAULT 0, -- remise globale relative en pourcent (obsolete)
+ remise_absolue real DEFAULT 0, -- remise globale absolue (obsolete)
+ remise real DEFAULT 0, -- remise calculee (obsolete)
+ total_ht double(16,8) DEFAULT 0, -- montant total ht apres remise globale
+ tva double(16,8) DEFAULT 0, -- montant total tva apres remise globale
+ total double(16,8) DEFAULT 0, -- montant total ttc apres remise globale
fk_cond_reglement integer, -- condition de reglement (30 jours, fin de mois ...)
fk_mode_reglement integer, -- mode de reglement (Virement, Prélèvement)
diff --git a/mysql/tables/llx_propaldet.sql b/mysql/tables/llx_propaldet.sql
index af98c82ef12..2016377996a 100644
--- a/mysql/tables/llx_propaldet.sql
+++ b/mysql/tables/llx_propaldet.sql
@@ -25,17 +25,17 @@ create table llx_propaldet
fk_propal integer,
fk_product integer,
description text,
- tva_tx real, -- taux tva
+ fk_remise_except integer NULL, -- Lien vers table des remises fixes
+ tva_tx double(6,3), -- taux tva
qty real, -- quantité
remise_percent real DEFAULT 0, -- pourcentage de remise
- remise real DEFAULT 0, -- montant de la remise
- fk_remise_except integer NULL, -- Lien vers table des remises fixes
- subprice real, -- prix avant remise
- price real, -- prix final
- total_ht real, -- Total HT de la ligne toute quantité et incluant remise ligne et globale
- total_tva real, -- Total TVA de la ligne toute quantité et incluant remise ligne et globale
- total_ttc real, -- Total TTC de la ligne toute quantité et incluant remise ligne et globale
- info_bits integer DEFAULT 0, -- TVA NPR ou non
+ remise real DEFAULT 0, -- montant de la remise (obsolete)
+ price real, -- prix final (obsolete)
+ subprice double(16,8), -- prix unitaire article
+ total_ht double(16,8), -- Total HT de la ligne toute quantité et incluant remise ligne et globale
+ total_tva double(16,8), -- Total TVA de la ligne toute quantité et incluant remise ligne et globale
+ total_ttc double(16,8), -- Total TTC de la ligne toute quantité et incluant remise ligne et globale
+ info_bits integer DEFAULT 0, -- TVA NPR ou non
coef real, -- coefficient de marge
- rang integer DEFAULT 0
+ rang integer DEFAULT 0 -- ordre affichage sur la propal
)type=innodb;