Fix: We need to change the vatrate when changing the price

This commit is contained in:
Laurent Destailleur 2008-05-13 22:53:31 +00:00
parent b99c8621bf
commit 64c4df446a
4 changed files with 68 additions and 59 deletions

View File

@ -1903,13 +1903,13 @@ function print_fleche_navigation($page,$file,$options='',$nextpage,$betweenarrow
* \param info_bits Miscellanous information on vat * \param info_bits Miscellanous information on vat
* \return string Chaine avec montant formaté (19,6 ou 19,6% ou 8.5% *) * \return string Chaine avec montant formaté (19,6 ou 19,6% ou 8.5% *)
*/ */
function vatrate($rate,$foundpercent=false,$info_bits=0) function vatrate($rate,$addpercent=false,$info_bits=0)
{ {
// Test for compatibility // Test for compatibility
if (eregi('%',$rate)) if (eregi('%',$rate))
{ {
$rate=eregi_replace('%','',$rate); $rate=eregi_replace('%','',$rate);
$foundpercent=true; $addpercent=true;
} }
if (eregi('\*',$rate) || eregi(MAIN_LABEL_MENTION_NPR,$rate)) if (eregi('\*',$rate) || eregi(MAIN_LABEL_MENTION_NPR,$rate))
{ {
@ -1917,7 +1917,7 @@ function vatrate($rate,$foundpercent=false,$info_bits=0)
$info_bits |= 1; $info_bits |= 1;
} }
$ret=price($rate,0,'',0,0).($foundpercent?'%':''); $ret=price($rate,0,'',0,0).($addpercent?'%':'');
if ($info_bits & 1) $ret.=' '.MAIN_LABEL_MENTION_NPR; if ($info_bits & 1) $ret.=' '.MAIN_LABEL_MENTION_NPR;
return $ret; return $ret;
} }

View File

@ -43,7 +43,7 @@ class Product extends CommonObject
//! Identifiant unique //! Identifiant unique
var $id ; var $id ;
//! R<EFBFBD>f<EFBFBD>rence //! Ref
var $ref; var $ref;
var $libelle; var $libelle;
var $description; var $description;
@ -761,40 +761,45 @@ class Product extends CommonObject
/** /**
\brief Modifie le prix d'un produit/service * \brief Modifie le prix d'un produit/service
\param id Id du produit/service <EFBFBD> modifier * \param id Id du produit/service a modifier
\param newprice Nouveau prix * \param newprice Nouveau prix
\param newpricebase HT ou TTC * \param newpricebase HT ou TTC
\param user Objet utilisateur qui modifie le prix * \param user Objet utilisateur qui modifie le prix
* \param newvat New VAT Rate
* \return int <0 if KO, >0 if OK
*/ */
function update_price($id, $newprice, $newpricebase, $user) function update_price($id, $newprice, $newpricebase, $user, $newvat='')
{ {
//multiprix //multiprix
global $conf,$langs; global $conf,$langs;
dolibarr_syslog("Product::update_price id=".$id." newprice=".$newprice." newpricebase=".$newpricebase); dolibarr_syslog("Product::update_price id=".$id." newprice=".$newprice." newpricebase=".$newpricebase);
if ($newvat == '') $newvat=$this->tva_tx;
if ($newprice) if ($newprice)
{ {
if ($newpricebase == 'TTC') if ($newpricebase == 'TTC')
{ {
$price_ttc = price2num($newprice,'MU'); $price_ttc = price2num($newprice,'MU');
$price = price2num($newprice) / (1 + ($this->tva_tx / 100)); $price = price2num($newprice) / (1 + ($newvat / 100));
$price = price2num($price,'MU'); $price = price2num($price,'MU');
} }
else else
{ {
$price = price2num($newprice,'MU'); $price = price2num($newprice,'MU');
$price_ttc = price2num($newprice) * (1 + ($this->tva_tx / 100)); $price_ttc = price2num($newprice) * (1 + ($newvat / 100));
$price_ttc = price2num($price_ttc,'MU'); $price_ttc = price2num($price_ttc,'MU');
} }
// Ne pas mettre de quote sur le num<75>riques decimaux. // Ne pas mettre de quote sur le num<75>riques decimaux.
// Ceci provoque des sotckage avec arrondis en base au lieu des valeurs exactes. // Ceci provoque des sotckage avec arrondis en base au lieu des valeurs exactes.
$sql = "UPDATE ".MAIN_DB_PREFIX."product "; $sql = "UPDATE ".MAIN_DB_PREFIX."product SET";
$sql .= " SET price=".$price.""; $sql.= " price_base_type='".$newpricebase."',";
$sql .= " , price_base_type='".$newpricebase."'"; $sql.= " price=".$price.",";
$sql .= " , price_ttc=".$price_ttc.""; $sql.= " price_ttc=".$price_ttc.",";
$sql .= " WHERE rowid = " . $id; $sql.= " tva_tx='".price2num($newvat)."'";
$sql.= " WHERE rowid = " . $id;
dolibarr_syslog("Product::update_price sql=".$sql); dolibarr_syslog("Product::update_price sql=".$sql);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
@ -803,7 +808,8 @@ class Product extends CommonObject
$this->price = $price; $this->price = $price;
$this->price_ttc = $price_ttc; $this->price_ttc = $price_ttc;
$this->price_base_type = $newpricebase; $this->price_base_type = $newpricebase;
$this->tva_tx = $newvat;
$this->_log_price($user); $this->_log_price($user);
return 1; return 1;
} }

View File

@ -136,9 +136,6 @@ if ($_POST["action"] == 'update' &&
{ {
$product->ref = $_POST["ref"]; $product->ref = $_POST["ref"];
$product->libelle = $_POST["libelle"]; $product->libelle = $_POST["libelle"];
if ( isset( $_POST["price"] ) )
$product->price = $_POST["price"];
$product->tva_tx = $_POST["tva_tx"];
$product->description = $_POST["desc"]; $product->description = $_POST["desc"];
$product->note = $_POST["note"]; $product->note = $_POST["note"];
$product->status = $_POST["statut"]; $product->status = $_POST["statut"];
@ -572,34 +569,6 @@ if ($_GET["action"] == 'create' && $user->rights->produit->creer)
// Label // Label
print '<tr><td>'.$langs->trans("Label").'</td><td><input name="libelle" size="40" value="'.$product->libelle.'"></td></tr>'; print '<tr><td>'.$langs->trans("Label").'</td><td><input name="libelle" size="40" value="'.$product->libelle.'"></td></tr>';
if($conf->global->PRODUIT_MULTIPRICES == 1)
{
print '<tr><td>'.$langs->trans("SellingPrice").' 1</td>';
print '<td><input name="price" size="10" value="'.$product->price.'">';
print $html->select_PriceBaseType($product->price_base_type, "price_base_type");
print '</td></tr>';
for($i=2;$i<=$conf->global->PRODUIT_MULTIPRICES_LIMIT;$i++)
{
print '<tr><td>'.$langs->trans("SellingPrice").' '.$i.'</td>';
print '<td><input name="price_'.$i.'" size="10" value="'.$product->multiprices["$i"].'">';
print $html->select_PriceBaseType($product->multiprices_base_type["$i"], "multiprices_base_type_".$i);
print '</td></tr>';
}
}
// PRIX
else
{
print '<tr><td>'.$langs->trans("SellingPrice").'</td>';
print '<td><input name="price" size="10" value="'.$product->price.'">';
print $html->select_PriceBaseType($product->price_base_type, "price_base_type");
print '</td></tr>';
}
// VAT
print '<tr><td>'.$langs->trans("VATRate").'</td><td>';
print $html->select_tva("tva_tx",$conf->defaulttx,$mysoc,'');
print '</td></tr>';
// Status // Status
print '<tr><td>'.$langs->trans("Status").'</td><td>'; print '<tr><td>'.$langs->trans("Status").'</td><td>';
$statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSell")); $statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSell"));
@ -672,9 +641,47 @@ if ($_GET["action"] == 'create' && $user->rights->produit->creer)
print '</textarea>'; print '</textarea>';
} }
print "</td></tr>"; print "</td></tr>";
print '<tr><td colspan="3" align="center"><input type="submit" class="button" value="'.$langs->trans("Create").'"></td></tr>';
print '</table>'; print '</table>';
print '<br>';
print '<table class="border" width="100%">';
if($conf->global->PRODUIT_MULTIPRICES == 1)
{
print '<tr><td>'.$langs->trans("SellingPrice").' 1</td>';
print '<td><input name="price" size="10" value="'.$product->price.'">';
print $html->select_PriceBaseType($product->price_base_type, "price_base_type");
print '</td></tr>';
for($i=2;$i<=$conf->global->PRODUIT_MULTIPRICES_LIMIT;$i++)
{
print '<tr><td>'.$langs->trans("SellingPrice").' '.$i.'</td>';
print '<td><input name="price_'.$i.'" size="10" value="'.$product->multiprices["$i"].'">';
print $html->select_PriceBaseType($product->multiprices_base_type["$i"], "multiprices_base_type_".$i);
print '</td></tr>';
}
}
// PRIX
else
{
print '<tr><td>'.$langs->trans("SellingPrice").'</td>';
print '<td><input name="price" size="10" value="'.$product->price.'">';
print $html->select_PriceBaseType($product->price_base_type, "price_base_type");
print '</td></tr>';
}
// VAT
print '<tr><td width="20%">'.$langs->trans("VATRate").'</td><td>';
print $html->select_tva("tva_tx",$conf->defaulttx,$mysoc,'');
print '</td></tr>';
print '</table>';
print '<br>';
print '<table class="border" width="100%">';
print '<tr><td colspan="2" align="center"><input type="submit" class="button" value="'.$langs->trans("Create").'"></td></tr>';
print '</table>';
print '</form>'; print '</form>';
} }
else else
@ -846,14 +853,14 @@ if ($_GET["id"] || $_GET["ref"])
print '</td></tr>'; print '</td></tr>';
} }
// TVA
print '<tr><td>'.$langs->trans("VATRate").'</td><td>'.vatrate($product->tva_tx,true).'</td></tr>';
// Statut // Statut
print '<tr><td>'.$langs->trans("Status").'</td><td>'; print '<tr><td>'.$langs->trans("Status").'</td><td>';
print $product->getLibStatut(2); print $product->getLibStatut(2);
print '</td></tr>'; print '</td></tr>';
// TVA
print '<tr><td>'.$langs->trans("VATRate").'</td><td>'.price2num($product->tva_tx,'MU').'%</td></tr>';
// Description // Description
print '<tr><td valign="top">'.$langs->trans("Description").'</td><td>'.nl2br($product->description).'</td></tr>'; print '<tr><td valign="top">'.$langs->trans("Description").'</td><td>'.nl2br($product->description).'</td></tr>';
@ -930,10 +937,6 @@ if ($_GET["id"] || $_GET["ref"])
print '<tr><td width="15%">'.$langs->trans("Ref").'</td><td colspan="2"><input name="ref" size="40" maxlength="32" value="'.$product->ref.'"></td></tr>'; print '<tr><td width="15%">'.$langs->trans("Ref").'</td><td colspan="2"><input name="ref" size="40" maxlength="32" value="'.$product->ref.'"></td></tr>';
print '<tr><td>'.$langs->trans("Label").'</td><td><input name="libelle" size="40" value="'.$product->libelle.'"></td></tr>'; print '<tr><td>'.$langs->trans("Label").'</td><td><input name="libelle" size="40" value="'.$product->libelle.'"></td></tr>';
print '<tr><td>'.$langs->trans("VATRate").'</td><td colspan="2">';
print $html->select_tva("tva_tx", $product->tva_tx, $mysoc, '', $product->tva_tx);
print '</td></tr>';
// Status // Status
print '<tr><td>'.$langs->trans("Status").'</td><td colspan="2">'; print '<tr><td>'.$langs->trans("Status").'</td><td colspan="2">';
print '<select class="flat" name="statut">'; print '<select class="flat" name="statut">';

View File

@ -367,7 +367,7 @@ if ($result)
} }
print '<td align="center">'.$langs->trans($objp->price_base_type)."</td>"; print '<td align="center">'.$langs->trans($objp->price_base_type)."</td>";
print '<td align="right">'.vatrate($objp->tva_tx)."</td>"; print '<td align="right">'.vatrate($objp->tva_tx,true)."</td>";
print '<td align="right">'.price($objp->price)."</td>"; print '<td align="right">'.price($objp->price)."</td>";
print '<td align="right">'.price($objp->price_ttc)."</td>"; print '<td align="right">'.price($objp->price_ttc)."</td>";