Qual: On supprime la methode de création des contrats depuis une facture car cette option avait été conservée pour un besoin perso et elle peut se réaliser maintenant avec le nouveau mécanisme des triggers.

This commit is contained in:
Laurent Destailleur 2005-04-27 00:32:23 +00:00
parent bb6209d3cb
commit b40cde5ab5
3 changed files with 1479 additions and 1553 deletions

View File

@ -267,59 +267,6 @@ class Contrat
} }
/**
* \brief Crée autant de contrats que de lignes de facture, pour une facture donnée
* \param factureid id de la facture
* \param user utilisateur qui crée
* \param socid id société
*/
function create_from_facture($factureid, $user, $socid)
{
$sql = "SELECT p.rowid as rowid, fd.rowid as fdrowid FROM ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."facturedet as fd";
$sql .= " WHERE p.rowid = fd.fk_product AND p.fk_product_type = 1 AND fd.fk_facture = ".$factureid;
if ($this->db->query($sql))
{
$num = $this->db->num_rows();
if ($num > 0)
{
$i = 0;
while ($i < $num)
{
$objp = $this->db->fetch_object();
$prowid[$i] = $objp->rowid;
$fdrowid[$i] = $objp->fdrowid;
$i++;
}
$this->db->free();
while (list($i, $value) = each ($prowid))
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."contrat (fk_product, fk_facture, fk_facturedet, fk_soc, fk_user_author)";
$sql .= " VALUES (".$prowid[$i].", $factureid, ".$fdrowid[$i].", $socid, $user->id)";
if (! $this->db->query($sql))
{
dolibarr_syslog("Contrat::create_from_facture - 10");
dolibarr_print_error($this->db,"Contrat::create_from_facture - 10");
}
}
}
else
{
$this->db->free();
}
}
else
{
dolibarr_syslog("Contrat::create_from_facture - 20");
dolibarr_print_error($this->db,"Contrat::create_from_facture - 20");
}
return $result;
}
/** /**
* \brief Ajoute une ligne de commande * \brief Ajoute une ligne de commande
* \return int <0 si KO, =0 si OK * \return int <0 si KO, =0 si OK

View File

@ -82,10 +82,11 @@ class Facture
/** /**
* \brief Création de la facture en base * \brief Création de la facture en base
* \param user object utilisateur qui crée * \param user object utilisateur qui crée
*
*/ */
function create($user) function create($user)
{ {
$this->db->begin();
/* On positionne en mode brouillon la facture */ /* On positionne en mode brouillon la facture */
$this->brouillon = 1; $this->brouillon = 1;
@ -104,7 +105,7 @@ class Facture
} }
$sql = "SELECT fdm,nbjour FROM ".MAIN_DB_PREFIX."cond_reglement WHERE rowid = $this->cond_reglement"; $sql = "SELECT fdm,nbjour FROM ".MAIN_DB_PREFIX."cond_reglement WHERE rowid = $this->cond_reglement";
if ($this->db->query($sql) ) if ($this->db->query($sql))
{ {
if ($this->db->num_rows()) if ($this->db->num_rows())
{ {
@ -132,18 +133,9 @@ class Facture
$amount = $this->amount; $amount = $this->amount;
$remise = $this->remise; $remise = $this->remise;
if (! $remise) if (! $remise) $remise = 0 ;
{
$remise = 0 ;
}
if (strlen($this->mode_reglement)==0) $this->mode_reglement = 0; if (strlen($this->mode_reglement)==0) $this->mode_reglement = 0;
if (! $this->projetid) $this->projetid = "NULL";
if (! $this->projetid)
{
$this->projetid = "NULL";
}
$totalht = ($amount - $remise); $totalht = ($amount - $remise);
$tva = tva($totalht); $tva = tva($totalht);
@ -152,7 +144,6 @@ class Facture
$sql = "INSERT INTO ".MAIN_DB_PREFIX."facture (facnumber, fk_soc, datec, amount, remise, remise_percent"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."facture (facnumber, fk_soc, datec, amount, remise, remise_percent";
$sql .= ", datef, note, fk_user_author,fk_projet"; $sql .= ", datef, note, fk_user_author,fk_projet";
$sql .= ", fk_cond_reglement, fk_mode_reglement, date_lim_reglement) "; $sql .= ", fk_cond_reglement, fk_mode_reglement, date_lim_reglement) ";
$sql .= " VALUES ('$number','$socid', now(), '$totalht', '$remise'"; $sql .= " VALUES ('$number','$socid', now(), '$totalht', '$remise'";
$sql .= ",'$this->remise_percent', ".$this->db->idate($this->date); $sql .= ",'$this->remise_percent', ".$this->db->idate($this->date);
$sql .= ",'".addslashes($this->note)."',$user->id, $this->projetid"; $sql .= ",'".addslashes($this->note)."',$user->id, $this->projetid";
@ -196,12 +187,12 @@ class Facture
$this->products_date_end[$i] $this->products_date_end[$i]
); );
if ( $result_insert < 0) if ( $result_insert < 0)
{ {
dolibarr_print_error($this->db); dolibarr_print_error($this->db);
} }
} }
/* /*
* Produits de la facture récurrente * Produits de la facture récurrente
* *
@ -224,7 +215,6 @@ class Facture
$_facrec->lignes[$i]->produit_id, $_facrec->lignes[$i]->produit_id,
$_facrec->lignes[$i]->remise_percent); $_facrec->lignes[$i]->remise_percent);
if ( $result_insert < 0) if ( $result_insert < 0)
{ {
dolibarr_print_error($this->db); dolibarr_print_error($this->db);
@ -232,26 +222,25 @@ class Facture
} }
} }
/*
*
*
*/
$this->updateprice($this->id); $this->updateprice($this->id);
$this->db->commit();
return $this->id; return $this->id;
} }
else else
{ {
$this->db->rollback();
dolibarr_print_error($this->db); dolibarr_print_error($this->db);
} }
} }
/*
* Affecte la remise exceptionnelle
*
*/
/*
* \brief Affecte la remise exceptionnelle
*/
function _affect_remise_exceptionnelle() function _affect_remise_exceptionnelle()
{ {
$error = 0; $error = 0;
@ -699,7 +688,7 @@ class Facture
$resql = $this->db->query($sql) ; $resql = $this->db->query($sql) ;
if ( $resql) if ($resql)
{ {
$nurmx = $this->db->num_rows($resql); $nurmx = $this->db->num_rows($resql);
@ -727,12 +716,10 @@ class Facture
} }
/* Validation de la facture */ /* Validation de la facture */
$sql = "UPDATE ".MAIN_DB_PREFIX."facture "; $sql = "UPDATE ".MAIN_DB_PREFIX."facture ";
$sql .= " SET facnumber='$numfa', fk_statut = 1, fk_user_valid = $user->id"; $sql .= " SET facnumber='$numfa', fk_statut = 1, fk_user_valid = $user->id";
/* Si l'option est activée on force la date de facture */ /* Si l'option est activée on force la date de facture */
if (defined("FAC_FORCE_DATE_VALIDATION") && FAC_FORCE_DATE_VALIDATION == "1") if (defined("FAC_FORCE_DATE_VALIDATION") && FAC_FORCE_DATE_VALIDATION == "1")
{ {
$sql .= ", datef=now()"; $sql .= ", datef=now()";
@ -740,60 +727,40 @@ class Facture
$sql .= " WHERE rowid = $rowid ;"; $sql .= " WHERE rowid = $rowid ;";
$result = $this->db->query( $sql); $result = $this->db->query( $sql);
if ($result)
if (! $result)
{ {
dolibarr_syslog("Facture::set_valid() - 10"); // Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
$interface=new Interfaces($this->db);
$ret=$interface->run_triggers('BILL_VALIDATE',$this,$user,$lang,$conf);
// Fin appel triggers
if ($ret < 0) $error++;
}
else
{
dolibarr_syslog("Facture::set_valid() Echec - 10");
dolibarr_print_error($this->db); dolibarr_print_error($this->db);
$error++; $error++;
} }
/*
* On crée les contrats de services automatiquement si
* l'option CONTRACT_AUTOCREATE_FROM_BILL est active
* (Cas ou les contrats sont implicites comme lors de ventes de services en lignes)
*/
if ($conf->contrat->enabled)
{
if (defined("CONTRACT_AUTOCREATE_FROM_BILL") && CONTRACT_AUTOCREATE_FROM_BILL == "1")
{
$contrat = new Contrat($this->db);
$contrat->create_from_facture($rowid, $user, $soc->id);
}
}
/*
* Notify
*
*/
$forbidden_chars=array("/","\\",":","*","?","\"","<",">","|","[","]",",",";","=");
$facref = str_replace($forbidden_chars,"_",$this->ref);
$filepdf = FAC_OUTPUTDIR . "/" . $facref . "/" . $facref . ".pdf";
$mesg = "La facture ".$this->ref." a été validée.\n";
$notify = New Notify($this->db);
$notify->send($action_notify, $this->socidp, $mesg, "facture", $rowid, $filepdf);
/* /*
* Update Stats * Update Stats
*
*/ */
$sql = "SELECT fk_product FROM ".MAIN_DB_PREFIX."facturedet WHERE fk_facture = ".$this->id; $sql = "SELECT fk_product FROM ".MAIN_DB_PREFIX."facturedet WHERE fk_facture = ".$this->id;
$sql .= " AND fk_product > 0"; $sql .= " AND fk_product > 0";
$result = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql)
if ($result)
{ {
$num = $this->db->num_rows(); $num = $this->db->num_rows($resql);
$i = 0; $i = 0;
while ($i < $num) while ($i < $num)
{ {
$obj = $this->db->fetch_object($result); $obj = $this->db->fetch_object($resql);
$sql = "UPDATE ".MAIN_DB_PREFIX."product SET nbvente=nbvente+1 WHERE rowid = ".$obj->fk_product; $sql = "UPDATE ".MAIN_DB_PREFIX."product SET nbvente=nbvente+1 WHERE rowid = ".$obj->fk_product;
$db2 = $this->db->dbclone(); $resql2 = $this->db->query($sql);
$result = $db2->query($sql);
$i++; $i++;
} }
@ -806,6 +773,18 @@ class Facture
if ($error == 0) if ($error == 0)
{ {
$this->db->commit(); $this->db->commit();
/*
* Notify
*/
$forbidden_chars=array("/","\\",":","*","?","\"","<",">","|","[","]",",",";","=");
$facref = str_replace($forbidden_chars,"_",$this->ref);
$filepdf = FAC_OUTPUTDIR . "/" . $facref . "/" . $facref . ".pdf";
$mesg = "La facture ".$this->ref." a été validée.\n";
$notify = New Notify($this->db);
$notify->send($action_notify, $this->socidp, $mesg, "facture", $rowid, $filepdf);
} }
else else
{ {
@ -854,7 +833,7 @@ class Facture
* \param facid id de la facture * \param facid id de la facture
* \param desc description de la ligne * \param desc description de la ligne
* \param pu prix unitaire * \param pu prix unitaire
* \param qty quantité * \param qty quantit
* \param txtva taux de tva * \param txtva taux de tva
* \param fk_product id du produit/service predéfini * \param fk_product id du produit/service predéfini
* \param remise_percent pourcentage de remise de la ligne * \param remise_percent pourcentage de remise de la ligne
@ -939,7 +918,7 @@ class Facture
* \param rowid id de la ligne de facture * \param rowid id de la ligne de facture
* \param desc description de la ligne * \param desc description de la ligne
* \param pu prix unitaire * \param pu prix unitaire
* \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 datestart date de debut de validité du service * \param datestart date de debut de validité du service
* \param dateend date de fin de validité du service * \param dateend date de fin de validité du service
@ -1080,7 +1059,7 @@ class Facture
$sql = "INSERT INTO ".MAIN_DB_PREFIX."facture_tva_sum (fk_facture,amount,tva_tx) values ($this->id,'".ereg_replace(",",".",$tvas[$key])."','".ereg_replace(",",".",$key)."');"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."facture_tva_sum (fk_facture,amount,tva_tx) values ($this->id,'".ereg_replace(",",".",$tvas[$key])."','".ereg_replace(",",".",$key)."');";
// $sql = "REPLACE INTO ".MAIN_DB_PREFIX."facture_tva_sum SET fk_facture=".$this->id; // $sql = "REPLACE INTO ".MAIN_DB_PREFIX."facture_tva_sum SET fk_facture=".$this->id;
// $sql .= ", amount = '".$tvas[$key]."'"; // $sql .= ", amount = '".$tvas[$key]."'";
// $sql .= ", tva_tx='".$key."'"; // $sql .= ", tva_tx='".$key."'";
if (! $this->db->query($sql) ) if (! $this->db->query($sql) )
@ -1246,7 +1225,7 @@ class Facture
/** /**
* \brief Retourne le libellé du statut d'une facture (brouillon, validée, abandonnée, payée) * \brief Retourne le libellé du statut d'une facture (brouillon, validée, abandonnée, payée)
* \return string Libellé * \return string Libell
*/ */
function getLibStatut() function getLibStatut()
{ {
@ -1254,7 +1233,7 @@ class Facture
} }
/** /**
* \brief Renvoi le libellé long d'un statut donné * \brief Renvoi le libellé long d'un statut donn
* \param paye etat paye * \param paye etat paye
* \param statut id statut * \param statut id statut
* \return string Libellé long du statut * \return string Libellé long du statut
@ -1276,7 +1255,7 @@ class Facture
} }
/** /**
* \brief Renvoi le libellé court d'un statut donné * \brief Renvoi le libellé court d'un statut donn
* \param paye etat paye * \param paye etat paye
* \param statut id statut * \param statut id statut
* \param amount amount already payed * \param amount amount already payed
@ -1635,8 +1614,8 @@ class Facture
/** /**
\class FactureLigne \class FactureLigne
\brief Classe permettant la gestion des lignes de factures \brief Classe permettant la gestion des lignes de factures
*/ */
class FactureLigne class FactureLigne

View File

@ -72,7 +72,7 @@ class Interfaces
if ($modName) if ($modName)
{ {
include_once($this->dir."/".$file); include_once($this->dir."/".$file);
$objMod = new $modName($db); $objMod = new $modName($this->db);
if ($objMod) if ($objMod)
{ {
if ($objMod->run_trigger($action,$object,$user,$lang,$conf) > 0) if ($objMod->run_trigger($action,$object,$user,$lang,$conf) > 0)