Gestion de l'odonnancement des lignes

This commit is contained in:
Rodolphe Quiedeville 2005-04-22 15:14:42 +00:00
parent 4f8d294437
commit da2149cbe5

View File

@ -123,29 +123,7 @@ class Facture
$fins=array(31,28,31,30,31,30,31,31,30,31,30,31);
$datelim=mktime(0,0,0,$mois,$fins[$mois-1],$annee);
}
/*
* Lecture de la remise exceptionnelle
*
*/
$sql = "SELECT rowid, rc.amount_ht, fk_soc, fk_user";
$sql .= " FROM ".MAIN_DB_PREFIX."societe_remise_except as rc";
$sql .= " WHERE rc.fk_soc =". $this->socidp;
$sql .= " AND fk_facture IS NULL";
$resql = $this->db->query($sql) ;
if ( $resql)
{
$nurmx = $this->db->num_rows($resql);
if ($nurmx > 0)
{
$row = $this->db->fetch_row($resql);
$this->remise_exceptionnelle = $row;
}
$this->db->free($resql);
}
/*
* Insertion dans la base
*/
@ -261,13 +239,6 @@ class Facture
$this->updateprice($this->id);
/*
* Affectation de la remise exceptionnelle
*/
$this->_affect_remise_exceptionnelle();
$this->updateprice($this->id);
return $this->id;
}
else
@ -283,6 +254,8 @@ class Facture
function _affect_remise_exceptionnelle()
{
$error = 0;
if ($this->remise_exceptionnelle[1] > 0)
{
if ($this->remise_exceptionnelle[1] > ($this->total_ht * 0.9))
@ -303,7 +276,11 @@ class Facture
$sql .= " ,amount_ht = '".ereg_replace(",",".",$remise)."'";
$sql .= " WHERE rowid =".$this->remise_exceptionnelle[0];
$sql .= " AND fk_soc =". $this->socidp;
$this->db->query( $sql) ;
if (! $this->db->query( $sql))
{
$error++;
}
$sql = "INSERT INTO ".MAIN_DB_PREFIX."societe_remise_except";
@ -315,7 +292,10 @@ class Facture
$sql .= " ,".$this->remise_exceptionnelle[3];
$sql .= ")";
$this->db->query( $sql) ;
if (! $this->db->query( $sql) )
{
$error++;
}
}
else
@ -332,11 +312,16 @@ class Facture
$sql .= " SET fk_facture = ".$this->id;
$sql .= " WHERE rowid =".$this->remise_exceptionnelle[0];
$sql .= " AND fk_soc =". $this->socidp;
$this->db->query( $sql) ;
if (! $this->db->query( $sql) )
{
$error++;
}
}
}
}
return $error;
}
/**
@ -472,17 +457,81 @@ class Facture
*/
function valid($userid)
{
$sql = "UPDATE ".MAIN_DB_PREFIX."facture SET fk_statut = 1, date_valid=now(), fk_user_valid=$userid";
$error = 0;
$sql .= " WHERE rowid = $this->id AND fk_statut = 0 ;";
if ($this->db->query($sql) )
if ($this->db->begin())
{
return 1;
/*
* Lecture de la remise exceptionnelle
*
*/
$sql = "SELECT rowid, rc.amount_ht, fk_soc, fk_user";
$sql .= " FROM ".MAIN_DB_PREFIX."societe_remise_except as rc";
$sql .= " WHERE rc.fk_soc =". $this->socidp;
$sql .= " AND fk_facture IS NULL";
$resql = $this->db->query($sql) ;
if ( $resql)
{
$nurmx = $this->db->num_rows($resql);
if ($nurmx > 0)
{
$row = $this->db->fetch_row($resql);
$this->remise_exceptionnelle = $row;
}
$this->db->free($resql);
}
else
{
dolibarr_syslog("Facture::Valide Erreur lecture Remise");
$error++;
}
/*
* Affectation de la remise exceptionnelle
*/
if ( $this->_affect_remise_exceptionnelle() <> 0)
{
$error++;
}
else
{
$this->updateprice($this->id);
$sql = "UPDATE ".MAIN_DB_PREFIX."facture SET fk_statut = 1, date_valid=now(), fk_user_valid=$userid";
$sql .= " WHERE rowid = ".$this->id." AND fk_statut = 0 ;";
if (! $this->db->query($sql) )
{
$error++;
dolibarr_syslog("Facture::Valide Erreur ");
}
}
if ($error == 0)
{
$this->db->commit();
}
else
{
$this->db->rollback();
}
}
else
{
dolibarr_print_error($this->db);
$error++;
}
if ($error > 0)
{
return 0;
}
else
{
return 1;
}
}
@ -620,6 +669,7 @@ class Facture
function set_valid($rowid, $user, $soc, $force_number='')
{
global $conf;
$error = 0;
if ($this->brouillon)
{
@ -634,78 +684,141 @@ class Facture
$numfa = facture_get_num($soc, $this->prefixe_facture); // définit dans includes/modules/facture
}
$sql = "UPDATE ".MAIN_DB_PREFIX."facture set facnumber='$numfa', fk_statut = 1, fk_user_valid = $user->id";
/* Si l'option est activée on force la date de facture */
if (defined("FAC_FORCE_DATE_VALIDATION") && FAC_FORCE_DATE_VALIDATION == "1")
if ($this->db->begin())
{
$sql .= ", datef=now()";
}
$sql .= " WHERE rowid = $rowid ;";
$result = $this->db->query( $sql);
if (! $result)
{
dolibarr_syslog("Facture::set_valid() - 10");
dolibarr_print_error($this->db);
}
/*
* 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")
/*
* Lecture de la remise exceptionnelle
*
*/
$sql = "SELECT rowid, rc.amount_ht, fk_soc, fk_user";
$sql .= " FROM ".MAIN_DB_PREFIX."societe_remise_except as rc";
$sql .= " WHERE rc.fk_soc =". $this->socidp;
$sql .= " AND fk_facture IS NULL";
$resql = $this->db->query($sql) ;
if ( $resql)
{
$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
*
*/
$sql = "SELECT fk_product FROM ".MAIN_DB_PREFIX."facturedet WHERE fk_facture = ".$this->id;
$sql .= " AND fk_product > 0";
$result = $this->db->query($sql);
if ($result)
{
$num = $this->db->num_rows();
$i = 0;
while ($i < $num)
{
$obj = $this->db->fetch_object($result);
$nurmx = $this->db->num_rows($resql);
$sql = "UPDATE ".MAIN_DB_PREFIX."product SET nbvente=nbvente+1 WHERE rowid = ".$obj->fk_product;
$db2 = $this->db->dbclone();
$result = $db2->query($sql);
$i++;
if ($nurmx > 0)
{
$row = $this->db->fetch_row($resql);
$this->remise_exceptionnelle = $row;
}
$this->db->free($resql);
}
else
{
dolibarr_syslog("Facture::Valide Erreur lecture Remise");
$error++;
}
/* Affectation de la remise exceptionnelle */
if ( $this->_affect_remise_exceptionnelle() <> 0)
{
$error++;
}
else
{
$this->updateprice($this->id);
}
/* Validation de la facture */
$sql = "UPDATE ".MAIN_DB_PREFIX."facture ";
$sql .= " SET facnumber='$numfa', fk_statut = 1, fk_user_valid = $user->id";
/* Si l'option est activée on force la date de facture */
if (defined("FAC_FORCE_DATE_VALIDATION") && FAC_FORCE_DATE_VALIDATION == "1")
{
$sql .= ", datef=now()";
}
$sql .= " WHERE rowid = $rowid ;";
$result = $this->db->query( $sql);
if (! $result)
{
dolibarr_syslog("Facture::set_valid() - 10");
dolibarr_print_error($this->db);
$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
*
*/
$sql = "SELECT fk_product FROM ".MAIN_DB_PREFIX."facturedet WHERE fk_facture = ".$this->id;
$sql .= " AND fk_product > 0";
$result = $this->db->query($sql);
if ($result)
{
$num = $this->db->num_rows();
$i = 0;
while ($i < $num)
{
$obj = $this->db->fetch_object($result);
$sql = "UPDATE ".MAIN_DB_PREFIX."product SET nbvente=nbvente+1 WHERE rowid = ".$obj->fk_product;
$db2 = $this->db->dbclone();
$result = $db2->query($sql);
$i++;
}
}
else
{
$error++;
}
if ($error == 0)
{
$this->db->commit();
}
else
{
$this->db->rollback();
}
}
if ($error == 0)
{
return 1;
}
else
{
return 0;
}
return $result;
}
}
@ -1354,6 +1467,151 @@ class Facture
/*
*
*/
/**
* \brief Classe la facture
* \param cat_id id de la catégorie dans laquelle classer la facture
*
*/
function line_order()
{
$sql = "SELECT count(rowid) FROM ".MAIN_DB_PREFIX."facturedet";
$sql .= " WHERE fk_facture=".$this->id;
$sql .= " AND rang = 0";
$resql = $this->db->query($sql);
if ($resql)
{
$row = $this->db->fetch_row($resql);
$nl = $row[0];
}
if ($nl > 0)
{
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."facturedet";
$sql .= " WHERE fk_facture=".$this->id;
$sql .= " ORDER BY rang ASC, rowid ASC";
$resql = $this->db->query($sql);
if ($resql)
{
$num = $this->db->num_rows($resql);
$i = 0;
while ($i < $num)
{
$row = $this->db->fetch_row($resql);
$li[$i] = $row[0];
$i++;
}
}
for ($i = 0 ; $i < sizeof($li) ; $i++)
{
$sql = "UPDATE ".MAIN_DB_PREFIX."facturedet SET rang = ".($i+1);
$sql .= " WHERE rowid = ".$li[$i];
if (!$this->db->query($sql) )
{
dolibarr_syslog($this->db->error());
}
}
}
}
function line_up($rowid)
{
$this->line_order();
/* Lecture du rang de la ligne */
$sql = "SELECT rang FROM ".MAIN_DB_PREFIX."facturedet";
$sql .= " WHERE rowid =".$rowid;
$resql = $this->db->query($sql);
if ($resql)
{
$row = $this->db->fetch_row($resql);
$rang = $row[0];
}
if ($rang > 1 )
{
$sql = "UPDATE ".MAIN_DB_PREFIX."facturedet SET rang = ".$rang ;
$sql .= " WHERE fk_facture = ".$this->id;
$sql .= " AND rang = ".($rang - 1);
if ($this->db->query($sql) )
{
$sql = "UPDATE ".MAIN_DB_PREFIX."facturedet SET rang = ".($rang - 1);
$sql .= " WHERE rowid = ".$rowid;
if (! $this->db->query($sql) )
{
dolibarr_print_error($this->db);
}
}
else
{
dolibarr_print_error($this->db);
}
}
}
function line_down($rowid)
{
$this->line_order();
/* Lecture du rang de la ligne */
$sql = "SELECT rang FROM ".MAIN_DB_PREFIX."facturedet";
$sql .= " WHERE rowid =".$rowid;
$resql = $this->db->query($sql);
if ($resql)
{
$row = $this->db->fetch_row($resql);
$rang = $row[0];
}
/* Lecture du rang max de la facture */
$sql = "SELECT max(rang) FROM ".MAIN_DB_PREFIX."facturedet";
$sql .= " WHERE fk_facture =".$this->id;
$resql = $this->db->query($sql);
if ($resql)
{
$row = $this->db->fetch_row($resql);
$max = $row[0];
}
if ($rang < $max )
{
$sql = "UPDATE ".MAIN_DB_PREFIX."facturedet SET rang = ".$rang;
$sql .= " WHERE fk_facture = ".$this->id;
$sql .= " AND rang = ".($rang+1);
if ($this->db->query($sql) )
{
$sql = "UPDATE ".MAIN_DB_PREFIX."facturedet SET rang = ".($rang+1);
$sql .= " WHERE rowid = ".$rowid;
if (! $this->db->query($sql) )
{
dolibarr_print_error($this->db);
}
}
else
{
dolibarr_print_error($this->db);
}
}
}
}