Fix: Pb gestion erreur sur fiche intervention

Fix: Duree totale non mise a jour
This commit is contained in:
Laurent Destailleur 2007-11-04 21:21:33 +00:00
parent 791e616244
commit 15f6585fe9
3 changed files with 145 additions and 111 deletions

View File

@ -18,7 +18,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Id$
* $Source$
*/
/**
@ -75,7 +74,7 @@ if ($_POST["action"] == 'add')
{
$fichinter = new Fichinter($db);
$fichinter->date = dolibarr_mktime(12, 0 , 0, $_POST["pmonth"], $_POST["pday"], $_POST["pyear"]);
$fichinter->date = dolibarr_mktime($_POST["phour"], $_POST["pmin"] , $_POST["psec"], $_POST["pmonth"], $_POST["pday"], $_POST["pyear"]);
$fichinter->socid = $_POST["socid"];
$fichinter->duree = $_POST["duree"];
$fichinter->projet_id = $_POST["projetidp"];
@ -125,18 +124,21 @@ if ($_POST["action"] == 'update')
*/
if ($_REQUEST['action'] == 'builddoc') // En get ou en post
{
if ($_REQUEST['lang_id'])
{
$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
$outputlangs->setDefaultLang($_REQUEST['lang_id']);
}
$result=fichinter_pdf_create($db, $_REQUEST['id'], $_REQUEST['model'], $outputlangs);
if ($result <= 0)
{
dolibarr_print_error($db,$result);
exit;
}
if ($_REQUEST['lang_id'])
{
$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
$outputlangs->setDefaultLang($_REQUEST['lang_id']);
}
$fichinter = new Fichinter($db);
$fichinter->fetch($_GET['id']);
$result=fichinter_create($db, $fichinter, $_REQUEST['model'], $outputlangs);
if ($result <= 0)
{
dolibarr_print_error($db,$result);
exit;
}
}
/*
@ -164,7 +166,7 @@ if ($_REQUEST['action'] == 'confirm_delete' && $_REQUEST['confirm'] == 'yes')
if ($_POST['action'] == 'setdate_delivery')
{
$fichinter = new Fichinter($db);
$fichinter->fetch($_GET['id']);
$fichinter->fetch($_GET['id']);
$result=$fichinter->set_date_delivery($user,dolibarr_mktime(12, 0, 0, $_POST['liv_month'], $_POST['liv_day'], $_POST['liv_year']));
if ($result < 0) dolibarr_print_error($db,$fichinter->error);
}
@ -172,7 +174,7 @@ if ($_POST['action'] == 'setdate_delivery')
if ($_POST['action'] == 'setdescription')
{
$fichinter = new Fichinter($db);
$fichinter->fetch($_GET['id']);
$fichinter->fetch($_GET['id']);
$result=$fichinter->set_description($user,$_POST['description']);
if ($result < 0) dolibarr_print_error($db,$fichinter->error);
}
@ -185,7 +187,7 @@ if ($_POST['action'] == "addligne" && $user->rights->ficheinter->creer)
if ($_POST['np_desc'] && ($_POST['durationhour'] || $_POST['durationmin']))
{
$fichinter = new Fichinter($db);
$ret=$fichinter->fetch($_POST['fichinterid']);
$ret=$fichinter->fetch($_POST['fichinterid']);
$desc=$_POST['np_desc'];
$date_intervention = $db->idate(mktime(12, 1 , 1, $_POST["dimonth"], $_POST["diday"], $_POST["diyear"]));
@ -203,7 +205,7 @@ if ($_POST['action'] == "addligne" && $user->rights->ficheinter->creer)
$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
$outputlangs->setDefaultLang($_REQUEST['lang_id']);
}
fichinter_pdf_create($db, $fichinter->id, $fichinter->modelpdf, $outputlangs);
fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs);
}
}
@ -212,25 +214,34 @@ if ($_POST['action'] == "addligne" && $user->rights->ficheinter->creer)
*/
if ($_POST['action'] == 'updateligne' && $user->rights->ficheinter->creer && $_POST["save"] == $langs->trans("Save"))
{
$fichinter = new Fichinter($db);
if (! $fichinter->fetch($_POST['fichinterid']) > 0) dolibarr_print_error($db);
$fichinterline = new FichinterLigne($db);
if ($fichinterline->fetch($_POST['ligne']) <= 0)
{
dolibarr_print_error($db);
exit;
}
$fichinter = new Fichinter($db);
if ($fichinter->fetch($fichinterline->fk_fichinter) <= 0)
{
dolibarr_print_error($db);
exit;
}
$desc=$_POST['desc'];
$date_intervention = $db->idate(mktime(12, 1 , 1, $_POST["dimonth"], $_POST["diday"], $_POST["diyear"]));
$date_intervention = dolibarr_mktime(12, 1 , 1, $_POST["dimonth"], $_POST["diday"], $_POST["diyear"]);
$duration = ConvertTime2Seconds($_POST['durationhour'],$_POST['durationmin']);
$result = $fichinter->updateline($_POST['ligne'],
$desc,
$date_intervention,
$duration
);
$fichinterline->desc=$desc;
$fichinterline->datei=$date_intervention;
$fichinterline->duration=$duration;
$result = $fichinterline->update();
if ($_REQUEST['lang_id'])
{
$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
$outputlangs->setDefaultLang($_REQUEST['lang_id']);
}
fichinter_pdf_create($db, $fichinter->id, $fichinter->modelpdf, $outputlangs);
fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs);
}
/*
@ -246,7 +257,7 @@ if ($_GET['action'] == 'deleteline' && $user->rights->ficheinter->creer && !$con
$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
$outputlangs->setDefaultLang($_REQUEST['lang_id']);
}
fichinter_pdf_create($db, $fichinter->id, $fichinter->modelpdf, $outputlangs);
fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs);
}
/*
@ -264,7 +275,7 @@ if ($_REQUEST['action'] == 'confirm_deleteline' && $_REQUEST['confirm'] == 'yes'
$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
$outputlangs->setDefaultLang($_REQUEST['lang_id']);
}
fichinter_pdf_create($db, $fichinter->id, $fichinter->modelpdf, $outputlangs);
fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs);
}
Header('Location: '.$_SERVER["PHP_SELF"].'?id='.$_GET['id']);
exit;
@ -284,8 +295,9 @@ if ($_GET['action'] == 'up' && $user->rights->ficheinter->creer)
$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
$outputlangs->setDefaultLang($_REQUEST['lang_id']);
}
fichinter_pdf_create($db, $fichinter->id, $fichinter->modelpdf, $outputlangs);
fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs);
Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$_GET["id"].'#'.$_GET['rowid']);
exit;
}
if ($_GET['action'] == 'down' && $user->rights->ficheinter->creer)
@ -298,7 +310,7 @@ if ($_GET['action'] == 'down' && $user->rights->ficheinter->creer)
$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
$outputlangs->setDefaultLang($_REQUEST['lang_id']);
}
fichinter_pdf_create($db, $fichinter->id, $fichinter->modelpdf, $outputlangs);
fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs);
Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$_GET["id"].'#'.$_GET['rowid']);
exit;
}
@ -579,7 +591,7 @@ elseif ($_GET["id"] > 0)
}
// Durée
print '<tr><td>'.$langs->trans("TotalDuration").'</td><td>'.$fichinter->duree.'</td></tr>';
print '<tr><td>'.$langs->trans("TotalDuration").'</td><td>'.ConvertSecondToTime($fichinter->duree).'</td></tr>';
// Description
print '<tr><td>';
@ -658,7 +670,7 @@ elseif ($_GET["id"] > 0)
print '<a name="'.$objp->rowid.'"></a>'; // ancre pour retourner sur la ligne
print nl2br($objp->description);
print '<td width="150">'.dolibarr_print_date($objp->date_intervention,'%a %d %B %Y').'</td>';
print '<td width="150">'.dolibarr_print_date($objp->date_intervention,'day').'</td>';
print '<td width="150">'.ConvertSecondToTime($objp->duree).'</td>';
print "</td>\n";

View File

@ -169,8 +169,8 @@ class Fichinter extends CommonObject
*/
function fetch($rowid)
{
$sql = "SELECT ref, description, fk_soc, fk_statut";
$sql.= ", ".$this->db->pdate(datei)." as di, fk_projet, note_public, note_private, model_pdf";
$sql = "SELECT ref, description, fk_soc, fk_statut,";
$sql.= " ".$this->db->pdate(datei)." as di, duree, fk_projet, note_public, note_private, model_pdf";
$sql.= " FROM ".MAIN_DB_PREFIX."fichinter";
$sql.= " WHERE rowid=".$rowid;
@ -183,12 +183,13 @@ class Fichinter extends CommonObject
$obj = $this->db->fetch_object($resql);
$this->id = $rowid;
$this->date = $obj->di;
$this->ref = $obj->ref;
$this->description = $obj->description;
$this->socid = $obj->fk_soc;
$this->projetidp = $obj->fk_projet;
$this->statut = $obj->fk_statut;
$this->date = $obj->di;
$this->duree = $obj->duree;
$this->projetidp = $obj->fk_projet;
$this->note_public = $obj->note_public;
$this->note_private = $obj->note_private;
$this->modelpdf = $obj->model_pdf;
@ -612,8 +613,8 @@ class Fichinter extends CommonObject
$result=$ligne->insert();
if ($result > 0)
{
$this->db->commit();
return 1;
$this->db->commit();
return 1;
}
else
{
@ -625,50 +626,6 @@ class Fichinter extends CommonObject
}
}
/**
* \brief Mise à jour d'une ligne d'intervention
* \param fichinterid Id de la ligne
* \param desc Description
* \param date Date d'intervention
* \param duration Durée de l'intervention
* \return int 0 en cas de succès
*/
function updateline($fichinterid, $desc, $date_intervention, $duration)
{
dolibarr_syslog("Fichinter::UpdateLine $fichinterid, $desc, $date_intervention, $duration");
if ($this->statut == 0)
{
$this->db->begin();
$sql = "UPDATE ".MAIN_DB_PREFIX."fichinterdet ";
$sql.= " SET description='".addslashes($desc)."'";
$sql.= " , date=".$date_intervention;
$sql.= " , duree=".$duration;
$sql.= " WHERE rowid = '".$fichinterid."';";
$result=$this->db->query($sql);
if ($result > 0)
{
//Todo: mise à jour du total de la durée
//$this->update_price();
$this->db->commit();
return 0;
}
else
{
$this->error=$this->db->error();
$this->db->rollback();
dolibarr_syslog("Fichinter::UpdateLine Erreur sql=$sql, error=".$this->error);
return -1;
}
}
else
{
dolibarr_syslog("Fichinter::UpdateLigne Erreur -2 Fiche intervention en mode incompatible pour cette action");
return -2;
}
}
/**
* \brief Supprime une ligne d'intervention
@ -933,26 +890,31 @@ class FichinterLigne
*/
function fetch($rowid)
{
$sql = 'SELECT ft.rowid, ft.fk_fichinter, ft.description, ft.duree, ft.rang';
$sql.= ', '.$db->pdate('ft.date').' as date_intervention';
$sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pd';
$sql = 'SELECT ft.rowid, ft.fk_fichinter, ft.description, ft.duree, ft.rang,';
$sql.= ' '.$this->db->pdate('ft.date').' as datei';
$sql.= ' FROM '.MAIN_DB_PREFIX.'fichinterdet as ft';
$sql.= ' WHERE ft.rowid = '.$rowid;
dolibarr_syslog("FichinterLigne::fetch sql=".$sql);
$result = $this->db->query($sql);
if ($result)
{
$objp = $this->db->fetch_object($result);
$this->rowid = $objp->rowid;
$this->fk_fichinter = $objp->fk_fichinter;
$this->datei = $objp->date_intervention;
$this->desc = $objp->description;
$this->duration = $objp->duree;
$this->rang = $objp->rang;
$this->rowid = $objp->rowid;
$this->fk_fichinter = $objp->fk_fichinter;
$this->datei = $objp->datei;
$this->desc = $objp->description;
$this->duration = $objp->duree;
$this->rang = $objp->rang;
$this->db->free($result);
return 1;
}
else
{
dolibarr_print_error($this->db);
$this->error=$this->db->error().' sql='.$sql;
dolibarr_print_error($this->db,$this->error);
return -1;
}
}
@ -995,21 +957,29 @@ class FichinterLigne
$sql.= ' '.$rangToUse;
$sql.= ')';
dolibarr_syslog("fichinterLigne.class::insert sql=$sql");
dolibarr_syslog("FichinterLigne::insert sql=".$sql);
$resql=$this->db->query($sql);
if ($resql)
{
$this->rang=$rangToUse;
$this->db->commit();
return 1;
$result=$this->update_total();
if ($result > 0)
{
$this->rang=$rangToUse;
$this->db->commit();
return $result;
}
else
{
$this->db->rollback();
return -1;
}
}
else
{
$this->error=$this->db->error()." sql=".$sql;
dolibarr_syslog("FichinterLigne::insert Error ".$this->error);
dolibarr_syslog("FichinterLigne::insert Error ".$this->error);
$this->db->rollback();
return -1;
return -1;
}
}
@ -1025,25 +995,77 @@ class FichinterLigne
// Mise a jour ligne en base
$sql = "UPDATE ".MAIN_DB_PREFIX."fichinterdet SET";
$sql.= " description='".addslashes($this->desc)."'";
$sql.= ",date=".$this->datei;
$sql.= ",date=".$this->db->idate($this->datei);
$sql.= ",duree=".$this->duration;
$sql.= ",rang='".$this->rang."'";
$sql.= " WHERE rowid = ".$this->rowid;
dolibarr_syslog("FichinterLigne::update sql=".$sql);
dolibarr_syslog("FichinterLigne::update sql=".$sql);
$resql=$this->db->query($sql);
if ($resql)
{
$this->db->commit();
return 1;
$result=$this->update_total();
if ($result > 0)
{
$this->db->commit();
return $result;
}
else
{
$this->db->rollback();
return -1;
}
}
else
{
$this->error=$this->db->error();
dolibarr_syslog("FichinterLigne::update Error ".$this->error);
dolibarr_syslog("FichinterLigne::update Error ".$this->error);
$this->db->rollback();
return -2;
return -1;
}
}
function update_total()
{
// \TODO
// Mettre à jour duree total dans table llx_fichinter
$sql = "SELECT SUM(duree) as total_duration";
$sql.= " FROM ".MAIN_DB_PREFIX."fichinterdet";
$sql.= " WHERE fk_fichinter=".$this->fk_fichinter;
dolibarr_syslog("FichinterLigne::update_total sql=".$sql);
$resql=$this->db->query($sql);
if ($resql)
{
$obj=$this->db->fetch_object($resql);
$total_duration=0;
if ($obj) $total_duration = $obj->total_duration;
$sql = "UPDATE ".MAIN_DB_PREFIX."fichinter";
$sql.= " SET duree = ".$total_duration;
$sql.= " WHERE rowid = ".$this->fk_fichinter;
dolibarr_syslog("FichinterLigne::update_total sql=".$sql);
$resql=$this->db->query($sql);
if ($resql)
{
$this->db->commit();
return 1;
}
else
{
$this->error=$this->db->error();
dolibarr_syslog("FichinterLigne::update_total Error ".$this->error);
$this->db->rollback();
return -2;
}
}
else
{
$this->error=$this->db->error();
dolibarr_syslog("FichinterLigne::update Error ".$this->error);
$this->db->rollback();
return -1;
}
}

View File

@ -157,12 +157,12 @@ class ModeleNumRefFicheinter
/**
\brief Crée une fiche intervention sur disque en fonction du modèle de FICHEINTER_ADDON_PDF
\param db objet base de donnée
\param id id de la fiche à créer
\param object Object fichinter
\param modele force le modele à utiliser ('' par defaut)
\param outputlangs objet lang a utiliser pour traduction
\return int 0 si KO, 1 si OK
*/
function fichinter_pdf_create($db, $id, $modele='', $outputlangs='')
function fichinter_create($db, $object, $modele='', $outputlangs='')
{
global $conf,$langs;
$langs->load("ficheinter");
@ -192,7 +192,7 @@ function fichinter_pdf_create($db, $id, $modele='', $outputlangs='')
$obj = new $classname($db);
if ($obj->write_file($id,$outputlangs) > 0)
if ($obj->write_file($object,$outputlangs) > 0)
{
return 1;
}