diff --git a/htdocs/fichinter/fiche.php b/htdocs/fichinter/fiche.php index d432958f076..1d369b40c20 100644 --- a/htdocs/fichinter/fiche.php +++ b/htdocs/fichinter/fiche.php @@ -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 ''.$langs->trans("TotalDuration").''.$fichinter->duree.''; + print ''.$langs->trans("TotalDuration").''.ConvertSecondToTime($fichinter->duree).''; // Description print ''; @@ -658,7 +670,7 @@ elseif ($_GET["id"] > 0) print ''; // ancre pour retourner sur la ligne print nl2br($objp->description); - print ''.dolibarr_print_date($objp->date_intervention,'%a %d %B %Y').''; + print ''.dolibarr_print_date($objp->date_intervention,'day').''; print ''.ConvertSecondToTime($objp->duree).''; print "\n"; diff --git a/htdocs/fichinter/fichinter.class.php b/htdocs/fichinter/fichinter.class.php index 194c795557d..fd58a837dad 100644 --- a/htdocs/fichinter/fichinter.class.php +++ b/htdocs/fichinter/fichinter.class.php @@ -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; } } diff --git a/htdocs/includes/modules/fichinter/modules_fichinter.php b/htdocs/includes/modules/fichinter/modules_fichinter.php index 3f47b65b3be..5c2e43daedc 100644 --- a/htdocs/includes/modules/fichinter/modules_fichinter.php +++ b/htdocs/includes/modules/fichinter/modules_fichinter.php @@ -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; }