diff --git a/htdocs/contrat/contact.php b/htdocs/contrat/contact.php new file mode 100644 index 00000000000..d598c761533 --- /dev/null +++ b/htdocs/contrat/contact.php @@ -0,0 +1,424 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id$ + * $Source$ + * + */ + +/** + \file htdocs/contrat/contact.php + \ingroup contrat + \brief Onglet de gestion des contacts des contrats + \version $Revision$ +*/ + +require ("./pre.inc.php"); +require_once (DOL_DOCUMENT_ROOT."/contrat/contrat.class.php"); +require_once (DOL_DOCUMENT_ROOT."/contact.class.php"); + + +$langs->load("contracts"); +// $langs->load("orders"); +$langs->load("companies"); + +$user->getrights('contrat'); + +if (!$user->rights->contrat->lire) + accessforbidden(); + + +// les methodes locales +/** + * \brief Retourne la liste déroulante des sociétés + * \param selected Societe présélectionnée + * \param htmlname Nom champ formulaire + */ +function select_societes_for_newconcat($contrat, $selected = '', $htmlname = 'newcompany') +{ + // On recherche les societes + $sql = "SELECT s.idp, s.nom FROM"; + $sql .= " ".MAIN_DB_PREFIX."societe as s"; + if ($filter) + $sql .= " WHERE $filter"; + $sql .= " ORDER BY nom ASC"; + + $resql = $contrat->db->query($sql); + if ($resql) + { + $javaScript = "window.location='./contact.php?id=".$contrat->id."&".$htmlname."=' + form.".$htmlname.".options[form.".$htmlname.".selectedIndex].value;"; + print '\n"; + return $firstCompany; + } else + { + dolibarr_print_error($contrat->db); + } +} + +/** + * + */ +function select_nature_contact($contrat, $defValue, $htmlname = 'nature') +{ + $lesNatures = $contrat->liste_nature_contact(); + print ' '; + print '\n"; +} + +// Sécurité accés client +if ($user->societe_id > 0) +{ + $action = ''; + $socidp = $user->societe_id; +} + + +/* + * Ajout d'un nouveau contact + */ + +if ($_POST["action"] == 'addcontact' && $user->rights->contrat->creer) +{ + $result = 0; + $contrat = new Contrat($db); + $result = $contrat->fetch($_GET["id"]); + if ($_POST["id"] > 0) + { + $result = $contrat->add_contact($_POST["contactid"], $_POST["newnature"]); + } + + if ($result >= 0) + { + Header("Location: contact.php?id=".$contrat->id); + exit; + } else + { + $mesg = '
'.$contrat->error.'
'; + } +} +// modification d'un contact. On enregistre la nature +if ($_POST["action"] == 'updateligne' && $user->rights->contrat->creer) +{ + $contrat = new Contrat($db); + if ($contrat->fetch($_GET["id"])) + { + $contact = $contrat->detail_contact($_POST["elrowid"]); + $nature = $_POST["nature"]; + $statut = $contact->statut; + + $result = $contrat->update_contact($_POST["elrowid"], $statut, $nature); + if ($result >= 0) + { + $db->commit(); + } else + { + dolibarr_print_error($db, "result=$result"); + $db->rollback(); + } + } else + { + dolibarr_print_error($db); + } +} +// bascule du statut d'un contact +if ($_GET["action"] == 'swapstatut' && $user->rights->contrat->creer) +{ + $contrat = new Contrat($db); + if ($contrat->fetch($_GET["id"])) + { + $contact = $contrat->detail_contact($_GET["ligne"]); + $nature = $contact->nature; + $statut = ($contact->statut == 4) ? 5 : 4; + + $result = $contrat->update_contact($_GET["ligne"], $statut, $nature); + if ($result >= 0) + { + $db->commit(); + } else + { + dolibarr_print_error($db, "result=$result"); + $db->rollback(); + } + } else + { + dolibarr_print_error($db); + } +} + +if ($_GET["action"] == 'deleteline' && $user->rights->contrat->creer) +{ + $contrat = new Contrat($db); + $contrat->fetch($_GET["id"]); + $result = $contrat->delete_contact($_GET["lineid"]); + + if ($result >= 0) + { + Header("Location: contact.php?id=".$contrat->id); + exit; + } +} + + + +llxHeader('', $langs->trans("ContractCard"), "Contrat"); + +$html = new Form($db); + +/* *************************************************************************** */ +/* */ +/* Mode vue et edition */ +/* */ +/* *************************************************************************** */ +$id = $_GET["id"]; +if ($id > 0) +{ + $contrat = New Contrat($db); + if ($contrat->fetch($id) > 0) + { + if ($mesg) + print $mesg; + + $h = 0; + $head[$h][0] = DOL_URL_ROOT.'/contrat/fiche.php?id='.$contrat->id; + $head[$h][1] = $langs->trans("ContractCard"); + $h ++; + + $head[$h][0] = DOL_URL_ROOT.'/contrat/contact.php?id='.$contrat->id; + $head[$h][1] = $langs->trans("ContractContacts"); + $hselected = $h; + $h ++; + + $head[$h][0] = DOL_URL_ROOT.'/contrat/info.php?id='.$contrat->id; + $head[$h][1] = $langs->trans("Info"); + $h ++; + + dolibarr_fiche_head($head, $hselected, $langs->trans("Contract").': '.$contrat->id); + + /* + * Contrat + */ + print ''; + + // Reference du contrat + print '"; + + // Customer + print ""; + print ''; + + print "
'.$langs->trans("Ref").''; + print $contrat->ref; + print "
".$langs->trans("Customer")."'; + print ''.$contrat->societe->nom.'
"; + + /* + * Lignes de contacts + */ + echo '
'; + + $tab = $contrat->liste_contact(); + + $num = ($tab == null) ? 0 : count($tab); + if ($tab != null && $num > 0) + { + $i = 0; + $total = 0; + + print ''; + print ''; + print ''; + + print ''; + print ''; + print ''; + print "\n"; + + $var = true; + $person = new Contact($db); + $societe = new Societe($db); + + while ($i < $num) + { + $objp = $contrat->detail_contact($tab[$i]); + + // detail du contact + $person->fetch($objp->fk_socpeople); + $var = !$var; // flip flop lines + + if ($_GET["action"] != 'editline' || $_GET["rowid"] != $tab[$i]) + { + print ''; + + print ''; + + print ''; + + // Description + print ''; + // Statut + print ''; + + // Icon update et delete (statut contrat 0=brouillon,1=validé,2=fermé) + print ''; + + print "\n"; + + } + // mode edition de une ligne ligne (editline) + // on ne change pas le contact. Seulement la nature + else + { + + print ""; + print ''; + print ''; + // Ligne carac + print ""; + + print ''; + print ''; + // Description + print '"; + // Statut + print ''; + + // Icon update et delete (statut contrat 0=brouillon,1=validé,2=fermé) + print ''; + + print ''."\n"; + print "\n"; + } + $i ++; + } + $db->free($result); + } + + /* + * Ajouter une ligne de contact + * uniquement sur les contats en creation. + * En pas en mode modification de ligne + */ + if ($_GET["action"] != 'editline' && $user->rights->contrat->creer && $contrat->statut == 0) + { + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $var = false; + + print ''; + print ''; + print ''; + + print ""; + print ''; + + print ''; + print ''; + print ''; + print ''; + + print ""; + + } + print "
'.$langs->trans("Societe").''.$langs->trans("Contacts").''.$langs->trans("ContactType").''.$langs->trans("Status").' 
'; + print ''; + print $person->fullname.''; + print ''.$societe->get_nom($person->socid).''.$objp->nature.''; + // Activation descativation du contact + if ($contrat->statut >= 0) + print ''; + print img_statut($objp->statut); + if ($contrat->statut > 0) + print ''; + print ''; + if ($contrat->statut != 2 && $user->rights->contrat->creer) + { + print ''; + print img_edit(); + print ''; + } else + { + print ' '; + } + if ($contrat->statut == 0 && $user->rights->contrat->creer) + { + print ' '; + print ''; + print img_delete(); + print ''; + } + print '
'; + print ''; + print $person->fullname.''; + print ''.$societe->get_nom($person->socid).''; + + select_nature_contact($contrat, $objp->nature, 'nature'); + print "'.img_statut($objp->statut).'
'.$langs->trans("Societe").''.$langs->trans("Contacts").''.$langs->trans("ContactType").' 
'; + $selectedCompany = $_GET["newcompany"]; // vide pour la premiere recherche + $selectedCompany = select_societes_for_newconcat($contrat, $selectedCompany, $htmlname = 'newcompany'); + print ''; + $html->select_contacts($selectedCompany, $selected = '', $htmlname = 'contactid'); + print ''; + select_nature_contact($contrat, "", 'newnature'); + print '
"; + /* + * Fin Ajout ligne + */ + + print ''; + + } else + { + // Contrat non trouvé + print "Contrat inexistant ou accés refusé"; + } +} + +$db->close(); + +llxFooter('$Date$'); +?> diff --git a/htdocs/contrat/contrat.class.php b/htdocs/contrat/contrat.class.php index 61efc118698..86d62b1a65f 100644 --- a/htdocs/contrat/contrat.class.php +++ b/htdocs/contrat/contrat.class.php @@ -690,6 +690,193 @@ class Contrat return -1; } } + + /* gestion des contacts d'un contrat */ + + /** + * + * \brief Ajoute un contact associé au contrat + * \param fk_socpeople Id du contact a ajouter. + * \param nature description du contact + * \return int <0 si erreur, >0 si ok + */ + function add_contact($fk_socpeople, $nature) + { + + if ($fk_socpeople <= 0 + || $this->societe->contact_get_email($fk_socpeople) == "" ) + { + // le contact n'existe pas ou est invalide + return -1; + } + + $lNature = addslashes(trim($nature)); + $datecreate = mktime(); + + // Insertion dans la base + $sql = "INSERT INTO ".MAIN_DB_PREFIX."contrat_contact"; + $sql.= " (fk_contrat, fk_socpeople, datecreate, statut, nature) "; + $sql.= " VALUES ($this->id, $fk_socpeople , " ; + $sql.= $this->db->pdate(time()); + $sql.= ", 5, '". $lNature . "' "; + $sql.= ");"; + + // Retour + if ( $this->db->query($sql) ) + { + return 0; + } + else + { + dolibarr_print_error($this->db); + return -1; + } + } + + /** + * + * \brief Misea jour du contact associé au contrat + * \param rowid La reference du lien contant contact. + * \param statut Le nouveau statut + * \param nature description du contact + * \return int <0 si erreur, >0 si ok + */ + function update_contact($rowid, $statut, $nature) + { + + $lNature = addslashes(trim($nature)); + + // Insertion dans la base + $sql = "UPDATE ".MAIN_DB_PREFIX."contrat_contact set "; + $sql.= " statut = $statut ,"; + $sql.= " nature = '" . $lNature ."'"; + $sql.= " where rowid = $rowid ;"; + // Retour + if ( $this->db->query($sql) ) + { + return 0; + } + else + { + dolibarr_print_error($this->db); + return -1; + } + } + + /** + * \brief Supprime une ligne de contact de contrat + * \param idligne La reference du contact + * \return statur 0 OK, -1 erreur + */ + function delete_contact($idligne) + { + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."contrat_contact WHERE rowid =".$idligne; + + if ($this->db->query($sql) ) { + + return 0; + } + else + { + return 1; + } + } + + /** + * \brief Récupère les lignes de contact du contrat + * \param statut Statut des lignes detail à récupérer + * \return array Tableau des rowid des contacts + */ + function liste_contact($statut=-1) + { + $tab=array(); + + $sql = "SELECT cd.rowid"; + $sql.= " FROM ".MAIN_DB_PREFIX."contrat_contact cd , ".MAIN_DB_PREFIX."socpeople sp"; + $sql.= " WHERE fk_contrat =".$this->id; + $sql.= " and cd.fk_socpeople = sp.idp"; + if ($statut >= 0) $sql.= " AND statut = '$statut'"; + $sql.=" order by sp.name asc ;"; + + $resql=$this->db->query($sql); + if ($resql) + { + $num=$this->db->num_rows($resql); + $i=0; + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); + $tab[$i]=$obj->rowid; + $i++; + } + return $tab; + } + else + { + $this->error=$this->db->error(); + return -1; + } + } + + /** + * \brief Le détail d'un contact + * \param rowid L'identifiant du contant de contrat + * \return object L'objet de construit par DoliDb.fetch_object + */ + function detail_contact($rowid) + { + + $sql = "SELECT datecreate, statut, nature, fk_socpeople"; + $sql.= " FROM ".MAIN_DB_PREFIX."contrat_contact"; + $sql.= " WHERE rowid =".$rowid.";"; + + $resql=$this->db->query($sql); + if ($resql) + { + $obj = $this->db->fetch_object($result); + + return $obj; + } + else + { + $this->error=$this->db->error(); + return null; + } + } + + /** + * \brief La liste des valeurs possibles de nature de contats + * + * \return array La liste des natures + */ + function liste_nature_contact() + { + $tab = array(); + + $sql = "SELECT distinct nature"; + $sql.= " FROM ".MAIN_DB_PREFIX."contrat_contact"; + $sql.= " order by nature;"; + + $resql=$this->db->query($sql); + if ($resql) + { + $num=$this->db->num_rows($result); + $i=0; + while ($i < $num) + { + $obj = $this->db->fetch_object($result); + $tab[$i]=$obj->nature; + $i++; + } + return $tab; + } + else + { + $this->error=$this->db->error(); + return null; + } + } } ?> diff --git a/htdocs/contrat/fiche.php b/htdocs/contrat/fiche.php index 5dc7298d733..6c696c2cb7d 100644 --- a/htdocs/contrat/fiche.php +++ b/htdocs/contrat/fiche.php @@ -462,11 +462,11 @@ else { if ($mesg) print $mesg; - + $author = new User($db); $author->id = $contrat->user_author_id; $author->fetch(); - + $commercial_signature = new User($db); $commercial_signature->id = $contrat->commercial_signature_id; $commercial_signature->fetch(); @@ -481,6 +481,10 @@ else $hselected = $h; $h++; + $head[$h][0] = DOL_URL_ROOT.'/contrat/contact.php?id='.$contrat->id; + $head[$h][1] = $langs->trans("ContractContacts"); + $h++; + $head[$h][0] = DOL_URL_ROOT.'/contrat/info.php?id='.$contrat->id; $head[$h][1] = $langs->trans("Info"); $h++; diff --git a/htdocs/contrat/info.php b/htdocs/contrat/info.php index 8cfa3e6fd18..e9a3a516ffe 100644 --- a/htdocs/contrat/info.php +++ b/htdocs/contrat/info.php @@ -17,7 +17,6 @@ * * $Id$ * $Source$ - * */ /** @@ -53,6 +52,10 @@ $head[$h][1] = $langs->trans("ContractCard"); $hselected = $h; $h++; +$head[$h][0] = DOL_URL_ROOT.'/contrat/contact.php?id='.$contrat->id; +$head[$h][1] = $langs->trans("ContractContacts"); +$h++; + $head[$h][0] = DOL_URL_ROOT.'/contrat/info.php?id='.$contrat->id; $head[$h][1] = $langs->trans("Info"); $hselected = $h;