diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 5b383ac5fd9..20597666966 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -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']) { diff --git a/htdocs/commande/commande.class.php b/htdocs/commande/commande.class.php index 0b8a83e244c..277456c369a 100644 --- a/htdocs/commande/commande.class.php +++ b/htdocs/commande/commande.class.php @@ -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 � 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� - * \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 diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index 3af370fb4e1..38d477ad6dd 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -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 ''; } - print ''.vatrate($objp->tva_tx).'%'; + print ''.vatrate($objp->tva_tx,'%',$objp->info_bits).''; print ''.price($objp->subprice).''; print ''; if (($objp->info_bits & 2) != 2) diff --git a/htdocs/commonobject.class.php b/htdocs/commonobject.class.php index b62f0506e4d..6ab078ac61b 100644 --- a/htdocs/commonobject.class.php +++ b/htdocs/commonobject.class.php @@ -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) diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 3a77fedcffc..d68d846ce33 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -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 diff --git a/htdocs/contrat/contrat.class.php b/htdocs/contrat/contrat.class.php index ae0a3f0ffec..8e5e7ca81ff 100644 --- a/htdocs/contrat/contrat.class.php +++ b/htdocs/contrat/contrat.class.php @@ -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�s base de donn�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� $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 � activer * \param date Date d'ouverture - * \param date_end Date fin prévue + * \param date_end Date fin pr�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 � 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�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�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�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�es du contrat + * \param id Id du contrat � charger + * \return int <0 si ko, id du contrat charg� 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� 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�es � 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�es aux produits"); return -3; } - // Selectionne les lignes contrat liées à aucun produit + // Selectionne les lignes contrat li�es � 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� pour compatibilit� $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�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�e un contrat vierge en base + * \param user Utilisateur qui cr�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�ration + * \return int <0 si erreur, id contrat cr�� sinon */ function create($user,$langs='',$conf='') { - // Controle validité des paramètres + // Controle validit� des param�tres $paramsok=1; if ($this->commercial_signature_id <= 0) { @@ -479,7 +481,7 @@ class Contrat extends CommonObject $this->db->begin(); - // Insère contrat + // Ins�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�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�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�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� * \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�vue + * \param date_end Date de fin pr�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 � 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� * \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�vue + * \param date_end Date de fin pr�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�elle + * \param date_fin_reel Date de fin r�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� 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� */ function getLibStatut($mode) { @@ -924,10 +898,10 @@ class Contrat extends CommonObject } /** - * \brief Renvoi le libellé d'un statut donné + * \brief Renvoi le libell� d'un statut donn� * \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� long, 1=libell� court, 2=Picto + Libell� court, 3=Picto, 4=Picto + Libell� long, 5=Libell� court + Picto + * \return string Libell� */ 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�cup�re les lignes de detail du contrat + * \param statut Statut des lignes detail � r�cup�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 � activer, "expired" pour services expir�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�s base de donn�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� du statut du contrat + * \param mode 0=libell� long, 1=libell� court, 2=Picto + Libell� court, 3=Picto + * \return string Libell� */ function getLibStatut($mode) { @@ -1189,10 +1163,10 @@ class ContratLigne } /** - * \brief Renvoi le libellé d'un statut donné + * \brief Renvoi le libell� d'un statut donn� * \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� long, 1=libell� court, 2=Picto + Libell� court, 3=Picto, 4=Picto + Libell� long, 5=Libell� court + Picto + * \return string Libell� */ 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�es du contrat + * \param id Id du contrat � charger + * \return int <0 si ko, id du contrat charg� 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() diff --git a/htdocs/contrat/fiche.php b/htdocs/contrat/fiche.php index 31abb5b506b..005b94e5336 100644 --- a/htdocs/contrat/fiche.php +++ b/htdocs/contrat/fiche.php @@ -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 ''; - $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 "\n"; } // TVA - print ''; + print ''; // Prix print '\n"; // Quantite diff --git a/htdocs/facture.class.php b/htdocs/facture.class.php index 9b99eca5e58..5ef43549d67 100644 --- a/htdocs/facture.class.php +++ b/htdocs/facture.class.php @@ -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; } diff --git a/htdocs/propal.class.php b/htdocs/propal.class.php index fed5636fdf7..582bd0cd924 100644 --- a/htdocs/propal.class.php +++ b/htdocs/propal.class.php @@ -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 � 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�re de la base les caract�ristiques d'une propale - * \param rowid id de la propal � r�cup�rer - * \return int <0 si ko, 0 si non trouv�, >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) {
".nl2br($objp->description)."'.vatrate($objp->tva_tx).'%'.vatrate($objp->tva_tx,'%',$objp->info_bits).''.price($objp->subprice)."