New: Support save of NPR vat in customer element (invoice, order, proposal, contract)

This commit is contained in:
Laurent Destailleur 2008-03-19 00:31:03 +00:00
parent 71186b44dc
commit 7b8a92b863
9 changed files with 183 additions and 246 deletions

View File

@ -566,8 +566,8 @@ if ($_POST['action'] == "addligne" && $user->rights->propale->creer)
$desc=$_POST['dp_desc'];
}
$info_bit=0;
if ($tva_npr) $info_bit |= 0x01;
$info_bits=0;
if ($tva_npr) $info_bits |= 0x01;
// Insert line
$result=$propal->addline(
@ -580,7 +580,7 @@ if ($_POST['action'] == "addligne" && $user->rights->propale->creer)
$_POST['remise_percent'],
$price_base_type,
$pu_ttc,
$info_bit
$info_bits
);
if ($result > 0)
@ -608,13 +608,22 @@ if ($_POST['action'] == 'updateligne' && $user->rights->propale->creer && $_POST
$propal = new Propal($db);
if (! $propal->fetch($_POST['propalid']) > 0) dolibarr_print_error($db);
$result = $propal->updateline($_POST['lineid'],
// 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 = $propal->updateline($_POST['lineid'],
$_POST['subprice'],
$_POST['qty'],
$_POST['remise_percent'],
$_POST['tva_tx'],
$vat_rate,
$_POST['desc'],
'HT');
'HT',
$info_bits);
if ($_REQUEST['lang_id'])
{

View File

@ -674,7 +674,7 @@ class Commande extends CommonObject
$price = $pu - $remise;
}
// Insertion ligne
// Insert line
$ligne=new CommandeLigne($this->db);
$ligne->fk_commande=$commandeid;
@ -1564,19 +1564,20 @@ class Commande extends CommonObject
/**
* \brief Mets <EFBFBD> jour une ligne de commande
* \param rowid Id de la ligne de facture
* \param desc Description de la ligne
* \param pu Prix unitaire
* \param qty Quantit<EFBFBD>
* \param remise_percent Pourcentage de remise de la ligne
* \param tva_tx Taux TVA
* \param info_bits Miscellanous informations on line
* \return int < 0 si erreur, > 0 si ok
* \brief Mets a jour une ligne de commande
* \param rowid Id de la ligne de facture
* \param desc Description de la ligne
* \param pu Prix unitaire
* \param qty Quantity
* \param remise_percent Pourcentage de remise de la ligne
* \param tva_tx Taux TVA
* \param price_base_type HT or TTC
* \param info_bits Miscellanous informations on line
* \return int < 0 si erreur, > 0 si ok
*/
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, $price_base_type, $info_bits");
include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
if ($this->brouillon)
@ -1628,13 +1629,13 @@ class Commande extends CommonObject
//else { $sql.=',date_start=null'; }
//if ($date_end) { $sql.= ",date_end='$date_end'"; }
//else { $sql.=',date_end=null'; }
//$sql.= " info_bits=".$info_bits.",";
$sql.= ",info_bits='".$info_bits."'";
$sql.= ",total_ht='".price2num($total_ht)."'";
$sql.= ",total_tva='".price2num($total_tva)."'";
$sql.= ",total_ttc='".price2num($total_ttc)."'";
$sql.= " WHERE rowid = ".$rowid;
$result = $this->db->query( $sql);
$result = $this->db->query($sql);
if ($result > 0)
{
// Mise a jour info denormalisees au niveau facture

View File

@ -353,10 +353,15 @@ if ($_POST['action'] == 'addligne' && $user->rights->commande->creer)
else
{
$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'];
}
$info_bits=0;
if ($tva_npr) $info_bits |= 0x01;
// Insert line
$result = $commande->addline(
$_POST['id'],
$desc,
@ -365,7 +370,7 @@ if ($_POST['action'] == 'addligne' && $user->rights->commande->creer)
$tva_tx,
$_POST['idprod'],
$_POST['remise_percent'],
'',
$info_bits,
'',
$price_base_type,
$pu_ttc
@ -395,12 +400,22 @@ if ($_POST['action'] == 'updateligne' && $user->rights->commande->creer && $_POS
$commande = new Commande($db,'',$_POST['id']);
if (! $commande->fetch($_POST['id']) > 0) dolibarr_print_error($db);
$result = $commande->updateline($_POST['elrowid'],
// 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 = $commande->updateline($_POST['elrowid'],
$_POST['eldesc'],
$_POST['pu'],
$_POST['qty'],
$_POST['elremise_percent'],
$_POST['tva_tx']
$vat_rate,
'HT',
$info_bits
);
if ($result >= 0)
@ -1391,7 +1406,7 @@ else
print '</td>';
}
print '<td align="right">'.vatrate($objp->tva_tx).'%</td>';
print '<td align="right">'.vatrate($objp->tva_tx,'%',$objp->info_bits).'</td>';
print '<td align="right">'.price($objp->subprice).'</td>';
print '<td align="right">';
if (($objp->info_bits & 2) != 2)

View File

@ -869,13 +869,16 @@ class CommonObject
if ($this->element == 'facture') $fieldht='total';
$fieldtva='tva';
if ($this->element == 'facture_fourn') $fieldtva='total_tva';
$fieldttc='total_ttc';
if ($this->element == 'propal') $fieldttc='total';
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' SET';
$sql .= " ".$fieldht."='".price2num($this->total_ht)."',";
$sql .= " ".$fieldtva."='".price2num($this->total_tva)."',";
$sql .= " total_ttc='".price2num($this->total_ttc)."'";
$sql .= " ".$fieldttc."='".price2num($this->total_ttc)."'";
$sql .= ' WHERE rowid = '.$this->id;
//print "xx".$sql;
dolibarr_syslog("CommonObject::update_price sql=".$sql);
$resql=$this->db->query($sql);
if ($resql)

View File

@ -825,8 +825,8 @@ if (($_POST['action'] == 'addligne' || $_POST['action'] == 'addligne_predef') &&
$desc=$_POST['dp_desc'];
}
$info_bit=0;
if ($tva_npr) $info_bit |= 0x01;
$info_bits=0;
if ($tva_npr) $info_bits |= 0x01;
// Insert line
$result = $fac->addline(
@ -840,7 +840,7 @@ if (($_POST['action'] == 'addligne' || $_POST['action'] == 'addligne_predef') &&
$date_start,
$date_end,
0,
$info_bit,
$info_bits,
'',
$price_base_type,
$pu_ttc

View File

@ -39,7 +39,9 @@ class Contrat extends CommonObject
var $error;
var $element='contrat';
var $table_element='contrat';
var $table_element_line='contratdet';
var $fk_element='fk_contrat';
var $id;
var $ref;
var $socid;
@ -69,7 +71,7 @@ class Contrat extends CommonObject
/**
* \brief Constructeur de la classe
* \param DB handler accès base de données
* \param DB handler acc<EFBFBD>s base de donn<EFBFBD>es
*/
function Contrat($DB)
{
@ -81,7 +83,7 @@ class Contrat extends CommonObject
$this->user_service = new User($DB);
$this->user_cloture = new User($DB);
// Statut 0=ouvert, 1=actif, 2=cloturé
// Statut 0=ouvert, 1=actif, 2=clotur<EFBFBD>
$this->statuts[0]=$langs->trans("Draft");
$this->statuts[1]=$langs->trans("Validated");
$this->statuts[2]=$langs->trans("Closed");
@ -90,9 +92,9 @@ class Contrat extends CommonObject
/**
* \brief Active une ligne detail d'un contrat
* \param user Objet User qui avtice le contrat
* \param line_id Id de la ligne de detail à activer
* \param line_id Id de la ligne de detail <EFBFBD> activer
* \param date Date d'ouverture
* \param date_end Date fin prévue
* \param date_end Date fin pr<EFBFBD>vue
* \return int < 0 si erreur, > 0 si ok
*/
function active_line($user, $line_id, $date, $date_end='')
@ -135,7 +137,7 @@ class Contrat extends CommonObject
/**
* \brief Active une ligne detail d'un contrat
* \param user Objet User qui avtice le contrat
* \param line_id Id de la ligne de detail à activer
* \param line_id Id de la ligne de detail <EFBFBD> activer
* \param date_end Date fin
* \return int <0 si erreur, >0 si ok
*/
@ -174,7 +176,7 @@ class Contrat extends CommonObject
* \brief Cloture un contrat
* \param user Objet User qui cloture
* \param langs Environnement langue de l'utilisateur
* \param conf Environnement de configuration lors de l'opération
* \param conf Environnement de configuration lors de l'op<EFBFBD>ration
*
*/
function cloture($user,$langs='',$conf='')
@ -208,7 +210,7 @@ class Contrat extends CommonObject
* \brief Valide un contrat
* \param user Objet User qui valide
* \param langs Environnement langue de l'utilisateur
* \param conf Environnement de configuration lors de l'opération
* \param conf Environnement de configuration lors de l'op<EFBFBD>ration
*/
function validate($user,$langs,$conf)
{
@ -240,7 +242,7 @@ class Contrat extends CommonObject
* \brief Annule un contrat
* \param user Objet User qui annule
* \param langs Environnement langue de l'utilisateur
* \param conf Environnement de configuration lors de l'opération
* \param conf Environnement de configuration lors de l'op<EFBFBD>ration
*/
function annule($user,$langs='',$conf='')
{
@ -270,9 +272,9 @@ class Contrat extends CommonObject
}
/**
* \brief Chargement depuis la base des données du contrat
* \param id Id du contrat à charger
* \return int <0 si ko, id du contrat chargé si ok
* \brief Chargement depuis la base des donn<EFBFBD>es du contrat
* \param id Id du contrat <EFBFBD> charger
* \return int <0 si ko, id du contrat charg<EFBFBD> si ok
*/
function fetch($id)
{
@ -315,7 +317,7 @@ class Contrat extends CommonObject
$this->fk_projet = $result["fk_projet"];
$this->socid = $result["fk_soc"];
$this->societe->fetch($result["fk_soc"]); // TODO A virer car la societe doit etre chargé par appel de fetch_client()
$this->societe->fetch($result["fk_soc"]); // TODO A virer car la societe doit etre charg<EFBFBD> par appel de fetch_client()
$this->db->free($resql);
@ -344,7 +346,7 @@ class Contrat extends CommonObject
{
$this->lignes = array();
// Selectionne les lignes contrats liées à un produit
// Selectionne les lignes contrats li<EFBFBD>es <20> un produit
$sql = "SELECT p.label, p.description as product_desc, p.ref,";
$sql.= " d.rowid, d.statut, d.description, d.price_ht, d.tva_tx, d.qty, d.remise_percent, d.subprice,";
$sql.= " d.info_bits, d.fk_product,";
@ -395,17 +397,17 @@ class Contrat extends CommonObject
}
else
{
dolibarr_syslog("Contrat::Fetch Erreur lecture des lignes de contrats liées aux produits");
dolibarr_syslog("Contrat::Fetch Erreur lecture des lignes de contrats li<EFBFBD>es aux produits");
return -3;
}
// Selectionne les lignes contrat liées à aucun produit
// Selectionne les lignes contrat li<EFBFBD>es <20> aucun produit
$sql = "SELECT d.rowid, d.statut, d.qty, d.description, d.price_ht, d.subprice, d.tva_tx, d.rowid, d.remise_percent,";
$sql.= " d.date_ouverture_prevue, d.date_ouverture,";
$sql.= " d.date_fin_validite, d.date_cloture";
$sql.= " FROM ".MAIN_DB_PREFIX."contratdet as d";
$sql.= " WHERE d.fk_contrat = ".$this->id;
$sql.= " AND (d.fk_product IS NULL OR d.fk_product = 0)"; // fk_product = 0 gardé pour compatibilité
$sql.= " AND (d.fk_product IS NULL OR d.fk_product = 0)"; // fk_product = 0 gard<EFBFBD> pour compatibilit<69>
$result = $this->db->query($sql);
if ($result)
@ -443,7 +445,7 @@ class Contrat extends CommonObject
}
else
{
dolibarr_syslog("Contrat::Fetch Erreur lecture des lignes de contrat non liées aux produits");
dolibarr_syslog("Contrat::Fetch Erreur lecture des lignes de contrat non li<EFBFBD>es aux produits");
$this->error=$this->db->error();
return -2;
}
@ -452,15 +454,15 @@ class Contrat extends CommonObject
}
/**
* \brief Crée un contrat vierge en base
* \param user Utilisateur qui crée
* \brief Cr<EFBFBD>e un contrat vierge en base
* \param user Utilisateur qui cr<EFBFBD>e
* \param langs Environnement langue de l'utilisateur
* \param conf Environnement de configuration lors de l'opération
* \return int <0 si erreur, id contrat créé sinon
* \param conf Environnement de configuration lors de l'op<EFBFBD>ration
* \return int <0 si erreur, id contrat cr<EFBFBD><EFBFBD> sinon
*/
function create($user,$langs='',$conf='')
{
// Controle validité des paramètres
// Controle validit<EFBFBD> des param<61>tres
$paramsok=1;
if ($this->commercial_signature_id <= 0)
{
@ -479,7 +481,7 @@ class Contrat extends CommonObject
$this->db->begin();
// Insère contrat
// Ins<EFBFBD>re contrat
$sql = "INSERT INTO ".MAIN_DB_PREFIX."contrat (datec, fk_soc, fk_user_author, date_contrat";
// $sql.= ", fk_commercial_signature, fk_commercial_suivi";
$sql.= " , ref)";
@ -496,11 +498,11 @@ class Contrat extends CommonObject
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."contrat");
// Insère contacts commerciaux ('SALESREPSIGN','contrat')
// Ins<EFBFBD>re contacts commerciaux ('SALESREPSIGN','contrat')
$result=$this->add_contact($this->commercial_signature_id,'SALESREPSIGN','internal');
if ($result < 0) $error++;
// Insère contacts commerciaux ('SALESREPFOLL','contrat')
// Ins<EFBFBD>re contacts commerciaux ('SALESREPFOLL','contrat')
$result=$this->add_contact($this->commercial_suivi_id,'SALESREPFOLL','internal');
if ($result < 0) $error++;
@ -551,7 +553,7 @@ class Contrat extends CommonObject
* \brief Supprime l'objet de la base
* \param user Utilisateur qui supprime
* \param langs Environnement langue de l'utilisateur
* \param conf Environnement de configuration lors de l'opération
* \param conf Environnement de configuration lors de l'op<EFBFBD>ration
* \return int < 0 si erreur, > 0 si ok
*/
function delete($user,$langs='',$conf='')
@ -649,47 +651,47 @@ class Contrat extends CommonObject
/**
* \brief Ajoute une ligne de contrat en base
* \param desc Description de la ligne
* \param pu Prix unitaire (HT ou TTC selon price_base_type
* \param qty Quantité
* \param pu_ht Prix unitaire HT
* \param qty Quantit<EFBFBD>
* \param txtva Taux tva
* \param fk_product Id produit
* \param remise_percent Pourcentage de remise de la ligne
* \param date_start Date de debut prévue
* \param date_end Date de fin prévue
* \param date_start Date de debut pr<EFBFBD>vue
* \param date_end Date de fin pr<EFBFBD>vue
* \param price_base_type HT ou TTC
* \param pu_ttc Prix unitaire TTC
* \param info_bits Bits de type de lignes
* \return int <0 si erreur, >0 si ok
*/
function addline($desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0, $date_start, $date_end, $price_base_type='HT')
function addline($desc, $pu_ht, $qty, $txtva, $fk_product=0, $remise_percent=0, $date_start, $date_end, $price_base_type='HT', $pu_ttc=0, $info_bits=0)
{
global $langs, $conf;
// Nettoyage parametres
if (! $txtva) $txtva=0;
$remise_percent=price2num($remise_percent);
$qty=price2num($qty);
if (! $qty) $qty=1;
$pu = price2num($pu,'MU');
$txtva = price2num($txtva,'MU');
dolibarr_syslog("Contrat::addline $desc, $pu, $qty, $txtva, $fk_product, $remise_percent, $date_start, $date_end, $price_base_type, $info_bits");
dolibarr_syslog("Contrat::addline $desc, $pu_ht, $qty, $txtva, $fk_product, $remise_percent, $date_start, $date_end, $price_base_type, $pu_ttc, $info_bits");
if ($this->statut == 0 || ($this->statut == 1 && $conf->global->CONTRAT_EDITWHENVALIDATED))
{
if ($fk_product > 0)
{
$prod = new Product($this->db, $fk_product);
if ($prod->fetch($fk_product) > 0)
{
$label = $prod->libelle;
// multiprix
if($conf->global->PRODUIT_MULTIPRICES == 1)
$pu = $prod->multiprices[$this ->societe->price_level];
else
$pu = $prod->price;
$txtva = $prod->tva_tx;
}
}
$this->db->begin();
// Clean parameters
$remise_percent=price2num($remise_percent);
$qty=price2num($qty);
if (! $qty) $qty=1;
if (! $ventil) $ventil=0;
if (! $info_bits) $info_bits=0;
$pu_ht=price2num($pu_ht);
$pu_ttc=price2num($pu_ttc);
$txtva=price2num($txtva);
if ($price_base_type=='HT')
{
$pu=$pu_ht;
}
else
{
$pu=$pu_ttc;
}
// Calcul du total TTC et de la TVA pour la ligne a partir de
// qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
@ -714,6 +716,7 @@ class Contrat extends CommonObject
$sql.= " (fk_contrat, label, description, fk_product, qty, tva_tx,";
$sql.= " remise_percent, subprice,";
$sql.= " total_ht, total_tva, total_ttc,";
$sql.= " info_bits,";
$sql.= " price_ht, remise"; // \TODO A virer
if ($date_start > 0) { $sql.= ",date_ouverture_prevue"; }
if ($date_end > 0) { $sql.= ",date_fin_validite"; }
@ -723,20 +726,35 @@ class Contrat extends CommonObject
$sql.= " ".$txtva.",";
$sql.= " ".price2num($remise_percent).",".price2num($pu).",";
$sql.= " ".price2num($total_ht).",".price2num($total_tva).",".price2num($total_ttc).",";
$sql.= " '".$info_bits."',";
$sql.= " ".price2num($price).",".price2num( $remise); // \TODO A virer
if ($date_start > 0) { $sql.= ",".$this->db->idate($date_start); }
if ($date_end > 0) { $sql.= ",".$this->db->idate($date_end); }
$sql.= ")";
if ( $this->db->query($sql) )
dolibarr_syslog("Contrat::addline sql=".$sql);
$resql=$this->db->query($sql);
if ($resql)
{
$this->update_price();
return 1;
$result=$this->update_price();
if ($result > 0)
{
$this->db->commit();
return 1;
}
else
{
dolibarr_syslog("Error sql=$sql, error=".$this->error,LOG_ERR);
$this->db->rollback();
return -1;
}
}
else
{
$this->error=$this->db->error()." sql=".$sql;
dolibarr_syslog("Contrat::addline ".$this->error);
$this->db->rollback();
$this->error=$this->db->error()." sql=".$sql;
dolibarr_syslog("Contrat::addline ".$this->error,LOG_ERR);
return -1;
}
}
@ -748,17 +766,17 @@ class Contrat extends CommonObject
}
/**
* \brief Mets à jour une ligne de contrat
* \brief Mets <EFBFBD> jour une ligne de contrat
* \param rowid Id de la ligne de facture
* \param desc Description de la ligne
* \param pu Prix unitaire
* \param qty Quantité
* \param qty Quantit<EFBFBD>
* \param remise_percent Pourcentage de remise de la ligne
* \param date_start Date de debut prévue
* \param date_end Date de fin prévue
* \param date_start Date de debut pr<EFBFBD>vue
* \param date_end Date de fin pr<EFBFBD>vue
* \param tvatx Taux TVA
* \param date_debut_reel Date de debut réelle
* \param date_fin_reel Date de fin réelle
* \param date_debut_reel Date de debut r<EFBFBD>elle
* \param date_fin_reel Date de fin r<EFBFBD>elle
* \return int < 0 si erreur, > 0 si ok
*/
function updateline($rowid, $desc, $pu, $qty, $remise_percent=0,
@ -859,64 +877,20 @@ class Contrat extends CommonObject
/**
* \brief Mets à jour le prix total du contrat
* \brief Mets a jour le prix total du contrat
* \return int <0 si ko, >0 si ok
*/
function update_price()
{
include_once DOL_DOCUMENT_ROOT . "/lib/price.lib.php";
/*
* Liste des produits a ajouter
*/
$sql = "SELECT total_ht, total_tva, total_ttc";
$sql.= " FROM ".MAIN_DB_PREFIX."contratdet";
$sql.= " WHERE fk_contrat = ".$this->id;
$resql=$this->db->query($sql);
if ($resql)
{
$num = $this->db->num_rows($resql);
$i = 0;
while ($i < $num)
{
$obj = $this->db->fetch_object($resql);
$this->total_ht += $obj->total_ht;
$this->total_tva += $obj->total_tva;
$this->total_ttc += $obj->total_ttc;
$i++;
}
// Met a jour en base
/*
$sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET";
$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->id;
if ( $this->db->query($sql) )
{
return 1;
}
else
{
$this->error=$this->db->error();
return -1;
}
*/
}
else
{
$this->error=$this->db->error();
return -1;
}
// Function empty because there is no total in contract parent table
return 1;
}
/**
* \brief Retourne le libellé du statut du contrat
* \param mode 0=libellé long, 1=libellé court, 2=Picto + Libellé court, 3=Picto, 4=Picto + Libellé long, 5=Libellé court + Picto
* \return string Libellé
* \brief Retourne le libell<EFBFBD> du statut du contrat
* \param mode 0=libell<EFBFBD> long, 1=libell<EFBFBD> court, 2=Picto + Libell<EFBFBD> court, 3=Picto, 4=Picto + Libell<EFBFBD> long, 5=Libell<EFBFBD> court + Picto
* \return string Libell<EFBFBD>
*/
function getLibStatut($mode)
{
@ -924,10 +898,10 @@ class Contrat extends CommonObject
}
/**
* \brief Renvoi le libellé d'un statut donné
* \brief Renvoi le libell<EFBFBD> d'un statut donn<EFBFBD>
* \param statut id statut
* \param mode 0=libellé long, 1=libellé court, 2=Picto + Libellé court, 3=Picto, 4=Picto + Libellé long, 5=Libellé court + Picto
* \return string Libellé
* \param mode 0=libell<EFBFBD> long, 1=libell<EFBFBD> court, 2=Picto + Libell<EFBFBD> court, 3=Picto, 4=Picto + Libell<EFBFBD> long, 5=Libell<EFBFBD> court + Picto
* \return string Libell<EFBFBD>
*/
function LibStatut($statut,$mode)
{
@ -1021,8 +995,8 @@ class Contrat extends CommonObject
/**
* \brief Récupère les lignes de detail du contrat
* \param statut Statut des lignes detail à récupérer
* \brief R<EFBFBD>cup<EFBFBD>re les lignes de detail du contrat
* \param statut Statut des lignes detail <EFBFBD> r<EFBFBD>cup<EFBFBD>rer
* \return array Tableau des lignes de details
*/
function array_detail($statut=-1)
@ -1058,7 +1032,7 @@ class Contrat extends CommonObject
/**
* \brief Charge indicateurs this->nbtodo et this->nbtodolate de tableau de bord
* \param user Objet user
* \param mode "inactive" pour services à activer, "expired" pour services expirés
* \param mode "inactive" pour services <EFBFBD> activer, "expired" pour services expir<EFBFBD>s
* \return int <0 si ko, >0 si ok
*/
function load_board($user,$mode)
@ -1165,7 +1139,7 @@ class ContratLigne
/**
* \brief Constructeur d'objets ligne de contrat
* \param DB handler d'accès base de donnée
* \param DB handler d'acc<EFBFBD>s base de donn<EFBFBD>e
*/
function ContratLigne($DB)
{
@ -1179,9 +1153,9 @@ class ContratLigne
}
/**
* \brief Retourne le libellé du statut du contrat
* \param mode 0=libellé long, 1=libellé court, 2=Picto + Libellé court, 3=Picto
* \return string Libellé
* \brief Retourne le libell<EFBFBD> du statut du contrat
* \param mode 0=libell<EFBFBD> long, 1=libell<EFBFBD> court, 2=Picto + Libell<EFBFBD> court, 3=Picto
* \return string Libell<EFBFBD>
*/
function getLibStatut($mode)
{
@ -1189,10 +1163,10 @@ class ContratLigne
}
/**
* \brief Renvoi le libellé d'un statut donné
* \brief Renvoi le libell<EFBFBD> d'un statut donn<EFBFBD>
* \param statut id statut
* \param mode 0=libellé long, 1=libellé court, 2=Picto + Libellé court, 3=Picto, 4=Picto + Libellé long, 5=Libellé court + Picto
* \return string Libellé
* \param mode 0=libell<EFBFBD> long, 1=libell<EFBFBD> court, 2=Picto + Libell<EFBFBD> court, 3=Picto, 4=Picto + Libell<EFBFBD> long, 5=Libell<EFBFBD> court + Picto
* \return string Libell<EFBFBD>
*/
function LibStatut($statut,$mode)
{
@ -1237,9 +1211,9 @@ class ContratLigne
}
/**
* \brief Chargement depuis la base des données du contrat
* \param id Id du contrat à charger
* \return int <0 si ko, id du contrat chargé si ok
* \brief Chargement depuis la base des donn<EFBFBD>es du contrat
* \param id Id du contrat <EFBFBD> charger
* \return int <0 si ko, id du contrat charg<EFBFBD> si ok
*/
function fetch($id)
{
@ -1285,7 +1259,7 @@ class ContratLigne
/**
* \brief Mise a jour en base des champs total_xxx de ligne
* \remarks Utilisé par migration
* \remarks Utilise par migration
* \return int <0 si ko, >0 si ok
*/
function update_total()

View File

@ -186,7 +186,7 @@ if ($_POST["action"] == 'addligne' && $user->rights->contrat->creer)
}
$ret=$contrat->fetch_client();
$date_start='';
$date_start='';
$date_end='';
// Si ajout champ produit libre
if ($_POST['mode'] == 'libre')
@ -261,10 +261,15 @@ if ($_POST["action"] == 'addligne' && $user->rights->contrat->creer)
else
{
$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['desc'];
}
$info_bits=0;
if ($tva_npr) $info_bits |= 0x01;
// Insert line
$result = $contrat->addline(
$desc,
$pu_ht,
@ -275,7 +280,8 @@ if ($_POST["action"] == 'addligne' && $user->rights->contrat->creer)
$date_start,
$date_end,
$price_base_type,
$pu_ttc
$pu_ttc,
$info_bits
);
if ($result > 0)
@ -717,7 +723,8 @@ else
// Area with common detail of line
print '<table class="noborder" width="100%">';
$sql = "SELECT cd.statut, cd.label as label_det, cd.fk_product, cd.description, cd.price_ht, cd.qty, cd.rowid, cd.tva_tx, cd.remise_percent, cd.subprice,";
$sql = "SELECT cd.statut, cd.label as label_det, cd.fk_product, cd.description, cd.price_ht, cd.qty, cd.rowid,";
$sql.= " cd.tva_tx, cd.remise_percent, cd.info_bits, cd.subprice,";
$sql.= " ".$db->pdate("cd.date_ouverture_prevue")." as date_debut, ".$db->pdate("cd.date_ouverture")." as date_debut_reelle,";
$sql.= " ".$db->pdate("cd.date_fin_validite")." as date_fin, ".$db->pdate("cd.date_cloture")." as date_fin_reelle,";
$sql.= " p.ref, p.label";
@ -763,7 +770,7 @@ else
print "<td>".nl2br($objp->description)."</td>\n";
}
// TVA
print '<td align="center">'.vatrate($objp->tva_tx).'%</td>';
print '<td align="center">'.vatrate($objp->tva_tx,'%',$objp->info_bits).'</td>';
// Prix
print '<td align="right">'.price($objp->subprice)."</td>\n";
// Quantite

View File

@ -1375,7 +1375,7 @@ class Facture extends CommonObject
else
{
$this->error=$this->db->error();
dolibarr_syslog("Error sql=$sql, error=".$this->error);
dolibarr_syslog("Error sql=$sql, error=".$this->error,LOG_ERR);
$this->db->rollback();
return -1;
}

View File

@ -352,7 +352,7 @@ class Propal extends CommonObject
else
{
$this->error=$this->db->error();
dolibarr_syslog("Error sql=$sql, error=".$this->error);
dolibarr_syslog("Error sql=$sql, error=".$this->error,LOG_ERR);
$this->db->rollback();
return -1;
}
@ -618,83 +618,11 @@ class Propal extends CommonObject
return $this->id;
}
/**
* \brief Mets <EFBFBD> jour le prix total de la proposition
* \return int <0 si ko, >0 si ok
*/
function update_price()
{
include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
$tvas=array();
$err=0;
// Liste des lignes a sommer
$sql = "SELECT qty, tva_tx, subprice, remise_percent,";
$sql.= " total_ht, total_tva, total_ttc, special_code";
$sql.= " FROM ".MAIN_DB_PREFIX."propaldet";
$sql.= " WHERE fk_propal = ".$this->id;
dolibarr_syslog("Propal::update_price sql=".$sql);
$result = $this->db->query($sql);
if ($result)
{
$this->total_ht = 0;
$this->total_tva = 0;
$this->total_ttc = 0;
$num = $this->db->num_rows($result);
$i = 0;
while ($i < $num)
{
$obj = $this->db->fetch_object($result);
if ($this->special_code != 3)
{
$this->total_ht += $obj->total_ht;
$this->total_tva += ($obj->total_ttc - $obj->total_ht);
$this->total_ttc += $obj->total_ttc;
$tvas[$obj->tva_taux] += ($obj->total_ttc - $obj->total_ht);
}
$i++;
}
$this->db->free($result);
// Met a jour indicateurs
$sql = "UPDATE ".MAIN_DB_PREFIX."propal SET";
$sql.= " total_ht=".price2num($this->total_ht).",";
$sql.= " tva=". price2num($this->total_tva).",";
$sql.= " total=". price2num($this->total_ttc);
$sql.= " WHERE rowid = ".$this->id;
dolibarr_syslog("Propal::update_price sql=".$sql);
if ( $this->db->query($sql) )
{
return 1;
}
else
{
$this->error=$this->db->error();
dolibarr_syslog("Propal::update_price error=".$this->error);
return -1;
}
}
else
{
$this->error=$this->db->error();
dolibarr_syslog("Propal::update_price error=".$this->error,LOG_ERR);
return -1;
}
}
/**
* \brief Recup<EFBFBD>re de la base les caract<EFBFBD>ristiques d'une propale
* \param rowid id de la propal <EFBFBD> r<EFBFBD>cup<EFBFBD>rer
* \return int <0 si ko, 0 si non trouv<EFBFBD>, >0 si ok
* \brief Recupere de la base les caracteristiques d'une propale
* \param rowid id de la propal a recuperer
* \return int <0 si ko, 0 si non trouve, >0 si ok
*/
function fetch($rowid)
{