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 '';
+ $num = $contrat->db->num_rows($resql);
+ $i = 0;
+ if ($num)
+ {
+ while ($i < $num)
+ {
+ $obj = $contrat->db->fetch_object($resql);
+ if ($i == 0)
+ $firstCompany = $obj->idp;
+ if ($selected > 0 && $selected == $obj->idp)
+ {
+ print ''.$obj->nom.' ';
+ $firstCompany = $obj->idp;
+ } else
+ {
+ print ''.$obj->nom.' ';
+ }
+ $i ++;
+ }
+ }
+ 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 '';
+ for ($i = 0; $i < count($lesNatures); $i ++)
+ {
+ print ''.$lesNatures[$i].' ';
+ }
+ 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 ''.$langs->trans("Ref").' ';
+ print $contrat->ref;
+ print " ";
+
+ // Customer
+ print "".$langs->trans("Customer")." ";
+ print '';
+ print ''.$contrat->societe->nom.' ';
+
+ print "
";
+
+ /*
+ * 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 ''.$langs->trans("Societe").' ';
+ print ''.$langs->trans("Contacts").' ';
+
+ print ''.$langs->trans("ContactType").' ';
+ print ''.$langs->trans("Status").' ';
+ 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 '';
+ print $person->fullname.' ';
+ print ' ';
+
+ print ''.$societe->get_nom($person->socid).' ';
+
+ // Description
+ print ''.$objp->nature.' ';
+ // Statut
+ print '';
+ // Activation descativation du contact
+ if ($contrat->statut >= 0)
+ print '';
+ print img_statut($objp->statut);
+ if ($contrat->statut > 0)
+ print ' ';
+ print ' ';
+
+ // Icon update et delete (statut contrat 0=brouillon,1=validé,2=fermé)
+ 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 " \n";
+
+ }
+ // mode edition de une ligne ligne (editline)
+ // on ne change pas le contact. Seulement la nature
+ else
+ {
+
+ 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 ''.$langs->trans("Societe").' ';
+ print ''.$langs->trans("Contacts").' ';
+ print ''.$langs->trans("ContactType").' ';
+ print ' ';
+ print " \n";
+
+ $var = false;
+
+ print '";
+
+ }
+ 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;