New: Support the Non Percu Recuperable vat in invoice form

This commit is contained in:
Laurent Destailleur 2008-02-21 23:15:55 +00:00
parent 074937aeb7
commit 520717cbbf
12 changed files with 232 additions and 180 deletions

View File

@ -656,7 +656,7 @@ class Commande extends CommonObject
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];
@ -1827,9 +1827,10 @@ class Commande extends CommonObject
* \param qty Quantité * \param qty Quantité
* \param remise_percent Pourcentage de remise de la ligne * \param remise_percent Pourcentage de remise de la ligne
* \param tva_tx Taux TVA * \param tva_tx Taux TVA
* \param info_bits Miscellanous informations on line
* \return int < 0 si erreur, > 0 si ok * \return int < 0 si erreur, > 0 si ok
*/ */
function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $price_base_type='HT') function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $price_base_type='HT', $info_bits=0)
{ {
dolibarr_syslog("Commande::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $txtva"); dolibarr_syslog("Commande::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $txtva");
include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
@ -1849,7 +1850,7 @@ class Commande extends CommonObject
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];

View File

@ -798,6 +798,7 @@ if (($_POST['action'] == 'addligne' || $_POST['action'] == 'addligne_predef') &&
$prod->fetch($_POST['idprod']); $prod->fetch($_POST['idprod']);
$tva_tx = get_default_tva($mysoc,$fac->client,$prod->tva_tx); $tva_tx = get_default_tva($mysoc,$fac->client,$prod->tva_tx);
$tva_npr = get_default_npr($mysoc,$fac->client,$prod->tva_tx);
// On defini prix unitaire // On defini prix unitaire
if ($conf->global->PRODUIT_MULTIPRICES == 1) if ($conf->global->PRODUIT_MULTIPRICES == 1)
@ -834,10 +835,14 @@ if (($_POST['action'] == 'addligne' || $_POST['action'] == 'addligne_predef') &&
else else
{ {
$pu_ht=$_POST['pu']; $pu_ht=$_POST['pu'];
$tva_tx=$_POST['tva_tx']; $tva_tx=eregi_replace('\*','',$_POST['tva_tx']);
$tva_npr=eregi('\*',$_POST['tva_tx'])?1:0;
$desc=$_POST['dp_desc']; $desc=$_POST['dp_desc'];
} }
$info_bit=0;
if ($tva_npr) $info_bit |= 0x01;
// Insere ligne // Insere ligne
$result = $fac->addline( $result = $fac->addline(
$_POST['facid'], $_POST['facid'],
@ -850,7 +855,7 @@ if (($_POST['action'] == 'addligne' || $_POST['action'] == 'addligne_predef') &&
$date_start, $date_start,
$date_end, $date_end,
0, 0,
'', $info_bit,
'', '',
$price_base_type, $price_base_type,
$pu_ttc $pu_ttc
@ -888,6 +893,14 @@ if ($_POST['action'] == 'updateligne' && $user->rights->facture->creer && $_POST
$date_end=$_POST['date_endyear'].'-'.$_POST['date_endmonth'].'-'.$_POST['date_endday']; $date_end=$_POST['date_endyear'].'-'.$_POST['date_endmonth'].'-'.$_POST['date_endday'];
} }
// Define info_bits
$info_bits=0;
if (eregi('\*',$_POST['tva_tx'])) $info_bits |= 0x01;
// Define vat_rate
$vat_rate=$_POST['tva_tx'];
$vat_rate=eregi_replace('\*','',$vat_rate);
$result = $fac->updateline($_POST['rowid'], $result = $fac->updateline($_POST['rowid'],
$_POST['desc'], $_POST['desc'],
$_POST['price'], $_POST['price'],
@ -895,7 +908,9 @@ if ($_POST['action'] == 'updateligne' && $user->rights->facture->creer && $_POST
$_POST['remise_percent'], $_POST['remise_percent'],
$date_start, $date_start,
$date_end, $date_end,
$_POST['tva_tx'] $vat_rate,
'HT',
$info_bits
); );
if ($_REQUEST['lang_id']) if ($_REQUEST['lang_id'])
@ -2405,7 +2420,7 @@ else
} }
print "</td>\n"; print "</td>\n";
} }
print '<td align="right">'.vatrate($objp->tva_taux).'%</td>'; print '<td align="right">'.vatrate($objp->tva_taux).'%'.($objp->info_bits & 1?' *':'').'</td>';
print '<td align="right">'.price($objp->subprice)."</td>\n"; print '<td align="right">'.price($objp->subprice)."</td>\n";
print '<td align="right">'; print '<td align="right">';
if (($objp->info_bits & 2) != 2) if (($objp->info_bits & 2) != 2)
@ -2507,10 +2522,7 @@ else
} }
print '</td>'; print '</td>';
print '<td align="right">'; print '<td align="right">';
if(! $soc->tva_assuj) print $html->select_tva('tva_tx',$objp->tva_taux,$mysoc,$soc,'',$objp->info_bits);
print '<input type="hidden" name="tva_tx" value="0">0%';
else
print $html->select_tva('tva_tx',$objp->tva_taux,$mysoc,$soc);
print '</td>'; print '</td>';
print '<td align="right"><input size="6" type="text" class="flat" name="price" value="'.price($objp->subprice,0,'',0).'"></td>'; print '<td align="right"><input size="6" type="text" class="flat" name="price" value="'.price($objp->subprice,0,'',0).'"></td>';
print '<td align="right">'; print '<td align="right">';
@ -2591,9 +2603,7 @@ else
} }
print '</td>'; print '</td>';
print '<td align="right">'; print '<td align="right">';
if (! $soc->tva_assuj)
print '<input type="hidden" name="tva_tx" value="0">0%';
else
$html->select_tva('tva_tx',$conf->defaulttx,$mysoc,$soc); $html->select_tva('tva_tx',$conf->defaulttx,$mysoc,$soc);
print '</td>'; print '</td>';
print '<td align="right"><input type="text" name="pu" size="6"></td>'; print '<td align="right"><input type="text" name="pu" size="6"></td>';

View File

@ -358,7 +358,7 @@ class FactureRec extends Facture
/** /**
* \brief Ajoute une ligne de facture * \brief Ajoute une ligne de facture
*/ */
function addline($facid, $desc, $pu, $qty, $txtva, $fk_product='NULL', $remise_percent=0, $price_base_type='HT') function addline($facid, $desc, $pu, $qty, $txtva, $fk_product='NULL', $remise_percent=0, $price_base_type='HT', $info_bits=0)
{ {
include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
@ -376,7 +376,7 @@ class FactureRec extends Facture
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];

View File

@ -670,7 +670,7 @@ class Contrat extends CommonObject
$pu = price2num($pu,'MU'); $pu = price2num($pu,'MU');
$txtva = price2num($txtva,'MU'); $txtva = price2num($txtva,'MU');
dolibarr_syslog("Contrat::addline $desc, $pu, $qty, $txtva, $fk_product, $remise_percent, $date_start, $date_end, $price_base_type"); dolibarr_syslog("Contrat::addline $desc, $pu, $qty, $txtva, $fk_product, $remise_percent, $date_start, $date_end, $price_base_type, $info_bits");
if ($this->statut == 0) if ($this->statut == 0)
{ {
@ -693,7 +693,7 @@ class Contrat extends CommonObject
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];

View File

@ -96,6 +96,7 @@ class Facture extends CommonObject
var $specimen; var $specimen;
//! Numero d'erreur de 512 à 1023 //! Numero d'erreur de 512 à 1023
var $errno = 0; var $errno = 0;
/** /**
\brief Constructeur de la classe \brief Constructeur de la classe
\param DB handler accès base de données \param DB handler accès base de données
@ -1337,7 +1338,7 @@ class Facture extends CommonObject
* par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,taux_produit) * par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,taux_produit)
* et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue) * et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue)
*/ */
function addline($facid, $desc, $pu_ht, $qty, $txtva, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits='', $fk_remise_except='', $price_base_type='HT', $pu_ttc=0) function addline($facid, $desc, $pu_ht, $qty, $txtva, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits=0, $fk_remise_except='', $price_base_type='HT', $pu_ttc=0)
{ {
dolibarr_syslog("Facture::Addline facid=$facid,desc=$desc,pu_ht=$pu_ht,qty=$qty,txtva=$txtva,fk_product=$fk_product,remise_percent=$remise_percent,date_start=$date_start,date_end=$date_end,ventil=$ventil,info_bits=$info_bits,fk_remise_except=$fk_remise_except,price_base_type=$price_base_type,pu_ttc=$pu_ttc", LOG_DEBUG); dolibarr_syslog("Facture::Addline facid=$facid,desc=$desc,pu_ht=$pu_ht,qty=$qty,txtva=$txtva,fk_product=$fk_product,remise_percent=$remise_percent,date_start=$date_start,date_end=$date_end,ventil=$ventil,info_bits=$info_bits,fk_remise_except=$fk_remise_except,price_base_type=$price_base_type,pu_ttc=$pu_ttc", LOG_DEBUG);
include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
@ -1369,7 +1370,7 @@ class Facture extends CommonObject
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];
@ -1454,13 +1455,15 @@ class Facture extends CommonObject
* \param date_end Date de fin de validité du service * \param date_end Date de fin de validité du service
* \param tva_tx Taux TVA * \param tva_tx Taux TVA
* \param price_base_type HT ou TTC * \param price_base_type HT ou TTC
* \param info_bits Miscellanous informations
* \return int < 0 si erreur, > 0 si ok * \return int < 0 si erreur, > 0 si ok
*/ */
function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $date_start, $date_end, $txtva, $price_base_type='HT') function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $date_start, $date_end, $txtva, $price_base_type='HT', $info_bits=0)
{ {
dolibarr_syslog("Facture::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $date_start, $date_end, $txtva", LOG_DEBUG);
include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
dolibarr_syslog("Facture::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $date_start, $date_end, $txtva, $price_base_type, $info_bits", LOG_DEBUG);
if ($this->brouillon) if ($this->brouillon)
{ {
$this->db->begin(); $this->db->begin();
@ -1476,7 +1479,7 @@ class Facture extends CommonObject
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];
@ -1509,6 +1512,7 @@ class Facture extends CommonObject
$ligne->total_ht=$total_ht; $ligne->total_ht=$total_ht;
$ligne->total_tva=$total_tva; $ligne->total_tva=$total_tva;
$ligne->total_ttc=$total_ttc; $ligne->total_ttc=$total_ttc;
$ligne->info_bits=$info_bits;
// A ne plus utiliser // A ne plus utiliser
$ligne->price=$price; $ligne->price=$price;
@ -3108,7 +3112,7 @@ class FactureLigne
$sql.= ",total_ttc=".price2num($this->total_ttc).""; $sql.= ",total_ttc=".price2num($this->total_ttc)."";
$sql.= " WHERE rowid = ".$this->rowid; $sql.= " WHERE rowid = ".$this->rowid;
dolibarr_syslog("FactureLigne::update sql=$sql"); dolibarr_syslog("FactureLigne::update sql=".$sql);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
if ($resql) if ($resql)
@ -3119,7 +3123,7 @@ class FactureLigne
else else
{ {
$this->error=$this->db->error(); $this->error=$this->db->error();
dolibarr_syslog("FactureLigne::update Error ".$this->error); dolibarr_syslog("FactureLigne::update Error ".$this->error, LOG_ERR);
$this->db->rollback(); $this->db->rollback();
return -2; return -2;
} }

View File

@ -1244,9 +1244,10 @@ class CommandeFournisseur extends Commande
* \param qty Quantité * \param qty Quantité
* \param remise_percent Pourcentage de remise de la ligne * \param remise_percent Pourcentage de remise de la ligne
* \param tva_tx Taux TVA * \param tva_tx Taux TVA
* \param info_bits Miscellanous informations
* \return int < 0 si erreur, > 0 si ok * \return int < 0 si erreur, > 0 si ok
*/ */
function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $price_base_type='HT') function updateline($rowid, $desc, $pu, $qty, $remise_percent=0, $txtva, $price_base_type='HT', $info_bits=0)
{ {
dolibarr_syslog("CommandeFournisseur::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $txtva"); dolibarr_syslog("CommandeFournisseur::UpdateLine $rowid, $desc, $pu, $qty, $remise_percent, $txtva");
include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
@ -1266,7 +1267,7 @@ class CommandeFournisseur extends Commande
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $price_base_type); $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $price_base_type, $info_bits);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];

View File

@ -458,9 +458,10 @@ class FactureFournisseur extends Facture
* \param qty Quantité * \param qty Quantité
* \param idproduct Id produit * \param idproduct Id produit
* \param price_base_type HT ou TTC * \param price_base_type HT ou TTC
* \param info_bits Miscellanous informations of line
* \return int <0 si ko, >0 si ok * \return int <0 si ko, >0 si ok
*/ */
function updateline($id, $label, $pu, $tauxtva, $qty=1, $idproduct=0, $price_base_type='HT') function updateline($id, $label, $pu, $tauxtva, $qty=1, $idproduct=0, $price_base_type='HT', $info_bits=0)
{ {
include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
@ -474,7 +475,7 @@ class FactureFournisseur extends Facture
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice = calcul_price_total($qty, $pu, 0, $tauxtva, 0, $price_base_type); $tabprice = calcul_price_total($qty, $pu, 0, $tauxtva, 0, $price_base_type, $info_bits);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];

View File

@ -2176,22 +2176,29 @@ class Form
/** /**
* \brief Selection du taux de tva à appliquer * \brief Selection du taux de tva à appliquer
* \param name Nom champ html * \param name Nom champ html
* \param defaulttx Forçage du taux tva pré-sélectionné. Mettre '' pour aucun forcage. * \param selectedrate Forçage du taux tva pré-sélectionné. Mettre '' pour aucun forcage.
* \param societe_vendeuse Objet société vendeuse * \param societe_vendeuse Objet société vendeuse
* \param societe_acheteuse Objet société acheteuse * \param societe_acheteuse Objet société acheteuse
* \param taux_produit Taux par defaut du produit vendu * \param taux_produit Taux par defaut du produit vendu
* \param info_bits Miscellanous information on line
* \remarks Si vendeur non assujeti à TVA, TVA par défaut=0. Fin de règle. * \remarks Si vendeur non assujeti à TVA, TVA par défaut=0. Fin de règle.
* Si le (pays vendeur = pays acheteur) alors la TVA par défaut=TVA du produit vendu. Fin de règle. * Si le (pays vendeur = pays acheteur) alors la TVA par défaut=TVA du produit vendu. Fin de règle.
* Si (vendeur et acheteur dans Communauté européenne) et bien vendu = moyen de transports neuf (auto, bateau, avion), TVA par défaut=0 (La TVA doit être payé par l'acheteur au centre d'impots de son pays et non au vendeur). Fin de règle. * Si (vendeur et acheteur dans Communauté européenne) et bien vendu = moyen de transports neuf (auto, bateau, avion), TVA par défaut=0 (La TVA doit être payé par l'acheteur au centre d'impots de son pays et non au vendeur). Fin de règle.
* Si (vendeur et acheteur dans Communauté européenne) et bien vendu autre que transport neuf alors la TVA par défaut=TVA du produit vendu. Fin de règle. * Si (vendeur et acheteur dans Communauté européenne) et bien vendu autre que transport neuf alors la TVA par défaut=TVA du produit vendu. Fin de règle.
* Sinon la TVA proposée par défaut=0. Fin de règle. * Sinon la TVA proposée par défaut=0. Fin de règle.
*/ */
function select_tva($name='tauxtva', $defaulttx='', $societe_vendeuse='', $societe_acheteuse='', $taux_produit='') function select_tva($name='tauxtva', $selectedrate='', $societe_vendeuse='', $societe_acheteuse='', $taux_produit='', $info_bits=0)
{ {
global $langs,$conf,$mysoc; global $langs,$conf,$mysoc;
$txtva=array(); $txtva=array();
$libtva=array(); $libtva=array();
$nprtva=array();
// Define defaultnpr and defaultttx
$defaultnpr=($info_bits & 0x01);
$defaultnpr=(eregi('\*',$selectedrate) ? 1 : $defaultnpr);
$defaulttx=eregi_replace('\*','',$selectedrate);
//print $societe_vendeuse."-".$societe_acheteuse; //print $societe_vendeuse."-".$societe_acheteuse;
if (is_object($societe_vendeuse) && ! $societe_vendeuse->pays_code) if (is_object($societe_vendeuse) && ! $societe_vendeuse->pays_code)
@ -2233,7 +2240,8 @@ class Form
{ {
$obj = $this->db->fetch_object($resql); $obj = $this->db->fetch_object($resql);
$txtva[$i] = $obj->taux; $txtva[$i] = $obj->taux;
$libtva[$i] = $obj->taux.'%'.($obj->recuperableonly ? ' *':''); $libtva[$i] = $obj->taux.'%';
$nprtva[$i] = $obj->recuperableonly;
} }
} }
else else
@ -2250,6 +2258,7 @@ class Form
if ($defaulttx < 0 || strlen($defaulttx) == 0) if ($defaulttx < 0 || strlen($defaulttx) == 0)
{ {
$defaulttx=get_default_tva($societe_vendeuse,$societe_acheteuse,$taux_produit); $defaulttx=get_default_tva($societe_vendeuse,$societe_acheteuse,$taux_produit);
$defaultnpr=get_default_npr($societe_vendeuse,$societe_acheteuse,$taux_produit);
} }
// Si taux par defaut n'a pu etre déterminé, on prend dernier de la liste. // Si taux par defaut n'a pu etre déterminé, on prend dernier de la liste.
// Comme ils sont triés par ordre croissant, dernier = plus élevé = taux courant // Comme ils sont triés par ordre croissant, dernier = plus élevé = taux courant
@ -2267,16 +2276,21 @@ class Form
for ($i = 0 ; $i < $nbdetaux ; $i++) for ($i = 0 ; $i < $nbdetaux ; $i++)
{ {
print '<option value="'.$txtva[$i].'"'; //print "xxxxx".$txtva[$i]."-".$nprtva[$i];
if ($txtva[$i] == $defaulttx) print '<option value="'.$txtva[$i];
print $nprtva[$i] ? '*': '';
print '"';
if ($txtva[$i] == $defaulttx && $nprtva[$i] == $defaultnpr)
{ {
print ' selected="true"'; print ' selected="true"';
} }
print '>'.vatrate($libtva[$i]).'</option>'; print '>'.vatrate($libtva[$i]);
print $nprtva[$i] ? ' *': '';
print '</option>';
$this->tva_taux_value[$i] = $txtva[$i]; $this->tva_taux_value[$i] = $txtva[$i];
$this->tva_taux_libelle[$i] = $libtva[$i]; $this->tva_taux_libelle[$i] = $libtva[$i];
$this->tva_taux_npr[$i] = $nprtva[$i];
} }
print '</select>'; print '</select>';
} }

View File

@ -988,7 +988,7 @@ function migrate_price_facture($db,$langs,$conf)
$facligne= new FactureLigne($db); $facligne= new FactureLigne($db);
$facligne->fetch($rowid); $facligne->fetch($rowid);
$result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT'); $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT',$info_bits);
$total_ht = $result[0]; $total_ht = $result[0];
$total_tva = $result[1]; $total_tva = $result[1];
$total_ttc = $result[2]; $total_ttc = $result[2];
@ -1094,7 +1094,7 @@ function migrate_price_propal($db,$langs,$conf)
$propalligne= new PropaleLigne($db); $propalligne= new PropaleLigne($db);
$propalligne->fetch($rowid); $propalligne->fetch($rowid);
$result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT'); $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT',$info_bits);
$total_ht = $result[0]; $total_ht = $result[0];
$total_tva = $result[1]; $total_tva = $result[1];
$total_ttc = $result[2]; $total_ttc = $result[2];
@ -1199,7 +1199,7 @@ function migrate_price_contrat($db,$langs,$conf)
//$contratligne->fetch($rowid); Non requis car le update_total ne met a jour que chp redefinis //$contratligne->fetch($rowid); Non requis car le update_total ne met a jour que chp redefinis
$contratligne->rowid=$rowid; $contratligne->rowid=$rowid;
$result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT'); $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT',$info_bits);
$total_ht = $result[0]; $total_ht = $result[0];
$total_tva = $result[1]; $total_tva = $result[1];
$total_ttc = $result[2]; $total_ttc = $result[2];
@ -1302,7 +1302,7 @@ function migrate_price_commande($db,$langs,$conf)
$commandeligne= new CommandeLigne($db); $commandeligne= new CommandeLigne($db);
$commandeligne->fetch($rowid); $commandeligne->fetch($rowid);
$result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT'); $result=calcul_price_total($qty,$pu,$remise_percent,$txtva,$remise_percent_global,'HT',$info_bits);
$total_ht = $result[0]; $total_ht = $result[0];
$total_tva = $result[1]; $total_tva = $result[1];
$total_ttc = $result[2]; $total_ttc = $result[2];

View File

@ -1893,6 +1893,26 @@ function get_default_tva($societe_vendeuse, $societe_acheteuse, $taux_produit)
} }
/**
\brief Fonction qui renvoie si tva doit etre tva percue récupérable
\remarks Si vendeur non assujeti a TVA, TVA par défaut=0. Fin de régle.
Si le (pays vendeur = pays acheteur) alors TVA par défaut=TVA du produit vendu. Fin de régle.
Si (vendeur et acheteur dans Communauté européenne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par défaut=0 (La TVA doit étre payé par acheteur au centre d'impots de son pays et non au vendeur). Fin de régle.
Si (vendeur et acheteur dans Communauté européenne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par défaut=TVA du produit vendu. Fin de régle.
Si (vendeur et acheteur dans Communauté européenne) et (acheteur = entreprise avec num TVA) intra alors TVA par défaut=0. Fin de régle.
Sinon TVA proposée par défaut=0. Fin de régle.
\param societe_vendeuse Objet société vendeuse
\param societe_acheteuse Objet société acheteuse
\param taux_produit Taux par defaut du produit vendu
\return float 0 or 1
*/
function get_default_npr($societe_vendeuse, $societe_acheteuse, $taux_produit)
{
return 0;
}
/** /**
\brief Renvoie oui ou non dans la langue choisie \brief Renvoie oui ou non dans la langue choisie
\param yesno Variable pour test si oui ou non \param yesno Variable pour test si oui ou non

View File

@ -35,15 +35,16 @@
\param txtva Taux tva \param txtva Taux tva
\param remise_percent_global 0 \param remise_percent_global 0
\param price_base_type HT=on calcule sur le HT, TTC=on calcule sur le TTC \param price_base_type HT=on calcule sur le HT, TTC=on calcule sur le TTC
\param info_bits Miscellanous informations on line
\return result[0,1,2,3,4,5] (total_ht, total_tva, total_ttc, pu_ht, pu_tva, pu_ttc) \return result[0,1,2,3,4,5] (total_ht, total_tva, total_ttc, pu_ht, pu_tva, pu_ttc)
*/ */
function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_percent_global=0, $price_base_type='HT') function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $remise_percent_global=0, $price_base_type='HT', $info_bits=0)
{ {
global $conf; global $conf;
$result=array(); $result=array();
//dolibarr_syslog("price.lib::calcul_price_total $qty, $pu, $remise_percent_ligne, $txtva, $price_base_type"); //dolibarr_syslog("price.lib::calcul_price_total $qty, $pu, $remise_percent_ligne, $txtva, $price_base_type $info_bits");
if ($price_base_type == 'HT') if ($price_base_type == 'HT')
{ {
// On travaille par defaut en partant du prix HT // On travaille par defaut en partant du prix HT

View File

@ -296,7 +296,7 @@ class Propal extends CommonObject
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];
@ -375,11 +375,11 @@ class Propal extends CommonObject
* \param price_base_type HT ou TTC * \param price_base_type HT ou TTC
* \return int 0 en cas de succ<EFBFBD>s * \return int 0 en cas de succ<EFBFBD>s
*/ */
function updateline($rowid, $pu, $qty, $remise_percent=0, $txtva, $desc='', $price_base_type='HT') function updateline($rowid, $pu, $qty, $remise_percent=0, $txtva, $desc='', $price_base_type='HT', $info_bits=0)
{ {
global $conf; global $conf;
dolibarr_syslog("Propal::UpdateLine $rowid, $pu, $qty, $remise_percent, $txtva, $desc, $price_base_type"); dolibarr_syslog("Propal::UpdateLine $rowid, $pu, $qty, $remise_percent, $txtva, $desc, $price_base_type, $info_bits");
include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php'); include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
if ($this->statut == 0) if ($this->statut == 0)
@ -405,7 +405,7 @@ class Propal extends CommonObject
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type); $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, $price_base_type, $info_bits);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];