New: Support save of NPR vat in customer element (invoice, order, proposal, contract)
This commit is contained in:
parent
71186b44dc
commit
7b8a92b863
@ -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'])
|
||||
{
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user