Fix: Close all services in contrat card

This commit is contained in:
Laurent Destailleur 2008-12-31 14:44:10 +00:00
parent 84926cef04
commit 836de30d6b
2 changed files with 111 additions and 84 deletions

View File

@ -86,11 +86,11 @@ class Contrat extends CommonObject
} }
/** /**
* \brief Active une ligne detail d'un contrat * \brief Activate a contract line
* \param user Objet User qui avtice le contrat * \param user Objet User qui avtice le contrat
* \param line_id Id de la ligne de detail <EFBFBD> activer * \param line_id Id de la ligne de detail <EFBFBD> activer
* \param date Date d'ouverture * \param date Date d'ouverture
* \param date_end Date fin pr<EFBFBD>vue * \param date_end Date fin prevue
* \return int < 0 si erreur, > 0 si ok * \return int < 0 si erreur, > 0 si ok
*/ */
function active_line($user, $line_id, $date, $date_end='') function active_line($user, $line_id, $date, $date_end='')
@ -131,9 +131,9 @@ class Contrat extends CommonObject
/** /**
* \brief Active une ligne detail d'un contrat * \brief Close a contract line
* \param user Objet User qui avtice le contrat * \param user Objet User qui avtice le contrat
* \param line_id Id de la ligne de detail <EFBFBD> activer * \param line_id Id de la ligne de detail a activer
* \param date_end Date fin * \param date_end Date fin
* \return int <0 si erreur, >0 si ok * \return int <0 si erreur, >0 si ok
*/ */
@ -169,36 +169,45 @@ class Contrat extends CommonObject
/** /**
* \brief Cloture un contrat * \brief Close all lines of a contract
* \param user Objet User qui cloture * \param user Object User making action
* \param langs Environnement langue de l'utilisateur * \param langs Object Lang
* \param conf Environnement de configuration lors de l'op<EFBFBD>ration * \param conf Object Conf
* *
*/ */
function cloture($user,$langs='',$conf='') function cloture($user,$langs='',$conf='')
{ {
$sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET statut = 2"; $this->db->begin();
$sql .= " , date_cloture = ".$this->db->idate(mktime()).", fk_user_cloture = ".$user->id;
$sql .= " WHERE rowid = ".$this->id . " AND statut = 1";
$resql = $this->db->query($sql) ; // Load lines
if ($resql) $this->fetch_lignes();
$ok=true;
foreach($this->lignes as $contratline)
{ {
$this->use_webcal=($conf->global->PHPWEBCALENDAR_CONTRACTSTATUS=='always'?1:0); // Close line not already closed
if ($contratline->statut != 5)
{
$contratline->date_cloture=mktime();
$contratline->fk_user_cloture=$user->id;
$contratline->statut='5';
$result=$contratline->update($user);
if ($result < 0)
{
$ok=false;
break;
}
}
}
// Appel des triggers if ($ok)
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); {
$interface=new Interfaces($this->db); $this->db->commit();
$result=$interface->run_triggers('CONTRACT_CLOSE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
return 1;
} }
else else
{ {
$this->error=$this->db->error(); dolibarr_print_error($db,'Failed to update contrat_det');
return -1; $this->db->rollback();
} }
} }
@ -234,38 +243,6 @@ 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<EFBFBD>ration
*/
function annule($user,$langs='',$conf='')
{
$sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET statut = 0";
$sql .= " , date_cloture = ".$this->db->idate(mktime()).", fk_user_cloture = ".$user->id;
$sql .= " WHERE rowid = ".$this->id . " AND statut = 1";
$resql = $this->db->query($sql) ;
if ($resql)
{
$this->use_webcal=($conf->global->PHPWEBCALENDAR_CONTRACTSTATUS=='always'?1:0);
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('CONTRACT_CANCEL',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
return 1;
}
else
{
$this->error=$this->db->error();
return -1;
}
}
/** /**
* \brief Chargement depuis la base des donnees du contrat * \brief Chargement depuis la base des donnees du contrat
@ -336,7 +313,7 @@ class Contrat extends CommonObject
} }
/** /**
* \brief Reinitialise le tableau lignes * \brief Load lignes array
*/ */
function fetch_lignes() function fetch_lignes()
{ {
@ -346,10 +323,16 @@ class Contrat extends CommonObject
// Selectionne les lignes contrats liees a un produit // Selectionne les lignes contrats liees a un produit
$sql = "SELECT p.label, p.description as product_desc, p.ref,"; $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.rowid, d.fk_contrat, d.statut, d.description, d.price_ht, d.tva_tx, d.qty, d.remise_percent, d.subprice,";
$sql.= " d.total_ht,";
$sql.= " d.total_tva,";
$sql.= " d.total_ttc,";
$sql.= " d.info_bits, d.fk_product,"; $sql.= " d.info_bits, d.fk_product,";
$sql.= " d.date_ouverture_prevue, d.date_ouverture,"; $sql.= " d.date_ouverture_prevue, d.date_ouverture,";
$sql.= " d.date_fin_validite, d.date_cloture"; $sql.= " d.date_fin_validite, d.date_cloture,";
$sql.= " d.fk_user_author,";
$sql.= " d.fk_user_ouverture,";
$sql.= " d.fk_user_cloture";
$sql.= " FROM ".MAIN_DB_PREFIX."contratdet as d, ".MAIN_DB_PREFIX."product as p"; $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as d, ".MAIN_DB_PREFIX."product as p";
$sql.= " WHERE d.fk_contrat = ".$this->id ." AND d.fk_product = p.rowid"; $sql.= " WHERE d.fk_contrat = ".$this->id ." AND d.fk_product = p.rowid";
$sql.= " ORDER by d.rowid ASC"; $sql.= " ORDER by d.rowid ASC";
@ -365,26 +348,43 @@ class Contrat extends CommonObject
{ {
$objp = $this->db->fetch_object($result); $objp = $this->db->fetch_object($result);
$ligne = new ContratLigne($db); $ligne = new ContratLigne($this->db);
$ligne->id = $objp->rowid; $ligne->id = $objp->rowid;
$ligne->fk_contrat = $objp->fk_contrat;
$ligne->desc = $objp->description; // Description ligne $ligne->desc = $objp->description; // Description ligne
$ligne->qty = $objp->qty; $ligne->qty = $objp->qty;
$ligne->tva_tx = $objp->tva_tx; $ligne->tva_tx = $objp->tva_tx;
$ligne->subprice = $objp->subprice; $ligne->subprice = $objp->subprice;
$ligne->statut = $objp->statut; $ligne->statut = $objp->statut;
$ligne->remise_percent = $objp->remise_percent; $ligne->remise_percent = $objp->remise_percent;
$ligne->price = $objp->price; $ligne->price_ht = $objp->price_ht;
$ligne->price = $objp->price; // For backward compatibility
$ligne->total_ht = $objp->total_ht;
$ligne->total_tva = $objp->total_tva;
$ligne->total_ttc = $objp->total_ttc;
$ligne->fk_product = $objp->fk_product; $ligne->fk_product = $objp->fk_product;
$ligne->info_bits = $objp->info_bits; $ligne->info_bits = $objp->info_bits;
$ligne->fk_user_author = $objp->fk_user_author;
$ligne->fk_user_ouverture= $objp->fk_user_ouverture;
$ligne->fk_user_cloture = $objp->fk_user_cloture;
$ligne->ref = $objp->ref; $ligne->ref = $objp->ref;
$ligne->libelle = $objp->label; // Label produit $ligne->libelle = $objp->label; // Label produit
$ligne->label = $objp->label; // For backward compatibility
$ligne->product_desc = $objp->product_desc; // Description produit $ligne->product_desc = $objp->product_desc; // Description produit
$ligne->date_debut_prevue = $objp->date_ouverture_prevue; $ligne->description = $objp->description;
$ligne->date_debut_reel = $objp->date_ouverture;
$ligne->date_fin_prevue = $objp->date_fin_validite; $ligne->date_ouverture_prevue = $this->db->jdate($objp->date_ouverture_prevue);
$ligne->date_fin_reel = $objp->date_cloture; $ligne->date_ouverture = $this->db->jdate($objp->date_ouverture);
$ligne->date_fin_validite = $this->db->jdate($objp->date_fin_validite);
$ligne->date_cloture = $this->db->jdate($objp->date_cloture);
// For backward compatibility
$ligne->date_debut_prevue = $this->db->jdate($objp->date_ouverture_prevue);
$ligne->date_debut_reel = $this->db->jdate($objp->date_ouverture);
$ligne->date_fin_prevue = $this->db->jdate($objp->date_fin_validite);
$ligne->date_fin_reel = $this->db->jdate($objp->date_cloture);
$this->lignes[] = $ligne; $this->lignes[] = $ligne;
//dolibarr_syslog("1 ".$ligne->desc); //dolibarr_syslog("1 ".$ligne->desc);
@ -400,17 +400,24 @@ class Contrat extends CommonObject
} }
else else
{ {
dolibarr_syslog("Contrat::Fetch Erreur lecture des lignes de contrats li<EFBFBD>es aux produits"); dolibarr_syslog("Contrat::Fetch Erreur lecture des lignes de contrats liees aux produits");
return -3; return -3;
} }
// Selectionne les lignes contrat liees a aucun produit // Selectionne les lignes contrat liees a 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 = "SELECT d.rowid, d.fk_contrat, d.statut, d.qty, d.description, d.price_ht, d.tva_tx, d.rowid, d.remise_percent, d.subprice,";
$sql.= " d.total_ht,";
$sql.= " d.total_tva,";
$sql.= " d.total_ttc,";
$sql.= " d.info_bits, d.fk_product,";
$sql.= " d.date_ouverture_prevue, d.date_ouverture,"; $sql.= " d.date_ouverture_prevue, d.date_ouverture,";
$sql.= " d.date_fin_validite, d.date_cloture"; $sql.= " d.date_fin_validite, d.date_cloture,";
$sql.= " d.fk_user_author,";
$sql.= " d.fk_user_ouverture,";
$sql.= " d.fk_user_cloture";
$sql.= " FROM ".MAIN_DB_PREFIX."contratdet as d"; $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as d";
$sql.= " WHERE d.fk_contrat = ".$this->id; $sql.= " WHERE d.fk_contrat = ".$this->id;
$sql.= " AND (d.fk_product IS NULL OR d.fk_product = 0)"; // fk_product = 0 gard<72> pour compatibilit<69> $sql.= " AND (d.fk_product IS NULL OR d.fk_product = 0)"; // fk_product = 0 gardee pour compatibilitee
$result = $this->db->query($sql); $result = $this->db->query($sql);
if ($result) if ($result)
@ -421,23 +428,41 @@ class Contrat extends CommonObject
while ($i < $num) while ($i < $num)
{ {
$objp = $this->db->fetch_object($result); $objp = $this->db->fetch_object($result);
$ligne = new ContratLigne($this->db); $ligne = new ContratLigne($this->db);
$ligne->id = $objp->rowid; $ligne->id = $objp->rowid;
$ligne->libelle = stripslashes($objp->description); $ligne->fk_contrat = $objp->fk_contrat;
$ligne->desc = stripslashes($objp->description); $ligne->libelle = $objp->description;
$ligne->desc = $objp->description;
$ligne->qty = $objp->qty; $ligne->qty = $objp->qty;
$ligne->statut = $objp->statut; $ligne->statut = $objp->statut;
$ligne->ref = $objp->ref; $ligne->ref = $objp->ref;
$ligne->tva_tx = $objp->tva_tx; $ligne->tva_tx = $objp->tva_tx;
$ligne->subprice = $objp->subprice; $ligne->subprice = $objp->subprice;
$ligne->remise_percent = $objp->remise_percent; $ligne->remise_percent = $objp->remise_percent;
$ligne->price = $objp->price; $ligne->price_ht = $objp->price_ht;
$ligne->price = $objp->price; // For backward compatibility
$ligne->total_ht = $objp->total_ht;
$ligne->total_tva = $objp->total_tva;
$ligne->total_ttc = $objp->total_ttc;
$ligne->fk_product = 0; $ligne->fk_product = 0;
$ligne->info_bits = $objp->info_bits;
$ligne->date_debut_prevue = $objp->date_ouverture_prevue; $ligne->fk_user_author = $objp->fk_user_author;
$ligne->date_debut_reel = $objp->date_ouverture; $ligne->fk_user_ouverture= $objp->fk_user_ouverture;
$ligne->date_fin_prevue = $objp->date_fin_validite; $ligne->fk_user_cloture = $objp->fk_user_cloture;
$ligne->date_fin_reel = $objp->date_cloture;
$ligne->description = $objp->description;
$ligne->date_ouverture_prevue = $this->db->jdate($objp->date_ouverture_prevue);
$ligne->date_ouverture = $this->db->jdate($objp->date_ouverture);
$ligne->date_fin_validite = $this->db->jdate($objp->date_fin_validite);
$ligne->date_cloture = $this->db->jdate($objp->date_cloture);
// For backward compatibility
$ligne->date_debut_prevue = $this->db->jdate($objp->date_ouverture_prevue);
$ligne->date_debut_reel = $this->db->jdate($objp->date_ouverture);
$ligne->date_fin_prevue = $this->db->jdate($objp->date_fin_validite);
$ligne->date_fin_reel = $this->db->jdate($objp->date_cloture);
if ($ligne->statut == 0) $this->nbofserviceswait++; if ($ligne->statut == 0) $this->nbofserviceswait++;
if ($ligne->statut == 4) $this->nbofservicesopened++; if ($ligne->statut == 4) $this->nbofservicesopened++;
@ -1581,7 +1606,7 @@ class ContratLigne
$sql.= " tva_tx='".$this->tva_tx."',"; $sql.= " tva_tx='".$this->tva_tx."',";
$sql.= " qty='".$this->qty."',"; $sql.= " qty='".$this->qty."',";
$sql.= " remise_percent='".$this->remise_percent."',"; $sql.= " remise_percent='".$this->remise_percent."',";
$sql.= " remise='".$this->remise."',"; $sql.= " remise=".($this->remise?"'".$this->remise."'":"null").",";
$sql.= " fk_remise_except=".($this->fk_remise_except?"'".$this->fk_remise_except."'":"null").","; $sql.= " fk_remise_except=".($this->fk_remise_except?"'".$this->fk_remise_except."'":"null").",";
$sql.= " subprice='".$this->subprice."',"; $sql.= " subprice='".$this->subprice."',";
$sql.= " price_ht='".$this->price_ht."',"; $sql.= " price_ht='".$this->price_ht."',";

View File

@ -317,11 +317,13 @@ if ($_POST["action"] == 'updateligne' && $user->rights->contrat->creer && ! $_PO
$contratline->subprice=$_POST["elprice"]; $contratline->subprice=$_POST["elprice"];
$contratline->qty=$_POST["elqty"]; $contratline->qty=$_POST["elqty"];
$contratline->remise_percent=$_POST["elremise_percent"]; $contratline->remise_percent=$_POST["elremise_percent"];
$contratline->tva_tx=$_POST["eltva_tx"];
$contratline->date_ouverture_prevue=$date_start_update; $contratline->date_ouverture_prevue=$date_start_update;
$contratline->date_ouverture=$date_start_real_update; $contratline->date_ouverture=$date_start_real_update;
$contratline->date_fin_validite=$date_end_update; $contratline->date_fin_validite=$date_end_update;
$contratline->date_cloture=$date_end_real_update; $contratline->date_cloture=$date_end_real_update;
$contratline->tva_tx=$_POST["eltva_tx"]; $contratline->fk_user_cloture=$user->id;
$result=$contratline->update($user); $result=$contratline->update($user);
if ($result > 0) if ($result > 0)