From 3f3c66ef72f078d0a25bd66012b1e57ec2c9b5fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Sep 2005 16:58:58 +0000 Subject: [PATCH] =?UTF-8?q?New:=20Gestion=20g=E9n=E9rique=20des=20contacts?= =?UTF-8?q?=20sur=20les=20contrats.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/contrat/contact.php | 256 +++++++++++------------ htdocs/contrat/contrat.class.php | 131 ++++++++---- htdocs/html.form.class.php | 135 ++++++++---- htdocs/langs/en_US/main.lang | 4 + htdocs/langs/fr_FR/main.lang | 4 + mysql/migration/1.1.0-2.0.0.sql | 45 ++-- mysql/tables/llx_c_type_contact.key.sql | 2 +- mysql/tables/llx_c_type_contact.sql | 3 +- mysql/tables/llx_element_contact.key.sql | 9 +- mysql/tables/llx_element_contact.sql | 8 +- 10 files changed, 342 insertions(+), 255 deletions(-) diff --git a/htdocs/contrat/contact.php b/htdocs/contrat/contact.php index 2f39b7d0d85..0ceeb82821e 100644 --- a/htdocs/contrat/contact.php +++ b/htdocs/contrat/contact.php @@ -1,5 +1,6 @@ +/* Copyright (C) 2005 Patrick Rouillon + * Copyright (C) 2005 Destailleur Laurent * * 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 @@ -52,8 +53,7 @@ function select_societes_for_newconcat($contrat, $selected = '', $htmlname = 'ne // On recherche les societes $sql = "SELECT s.idp, s.nom FROM"; $sql .= " ".MAIN_DB_PREFIX."societe as s"; - if ($filter) - $sql .= " WHERE $filter"; + if ($filter) $sql .= " WHERE $filter"; $sql .= " ORDER BY nom ASC"; $resql = $contrat->db->query($sql); @@ -72,11 +72,11 @@ function select_societes_for_newconcat($contrat, $selected = '', $htmlname = 'ne $firstCompany = $obj->idp; if ($selected > 0 && $selected == $obj->idp) { - print ''; + print ''; $firstCompany = $obj->idp; } else { - print ''; + print ''; } $i ++; } @@ -92,17 +92,18 @@ function select_societes_for_newconcat($contrat, $selected = '', $htmlname = 'ne /** * */ -function select_nature_contact($contrat, $defValue, $htmlname = 'nature') +function select_type_contact($contrat, $defValue, $htmlname = 'type', $source) { - $lesNatures = $contrat->liste_nature_contact(); - print ''; + foreach($lesTypes as $key=>$value) { print ''; } print "\n"; } + // Sécurité accés client if ($user->societe_id > 0) { @@ -119,11 +120,12 @@ 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["nature"]); - } + if ($result > 0 && $_POST["id"] > 0) + { + $result = $contrat->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + } + if ($result >= 0) { Header("Location: contact.php?id=".$contrat->id); @@ -133,17 +135,17 @@ if ($_POST["action"] == 'addcontact' && $user->rights->contrat->creer) $mesg = '
'.$contrat->error.'
'; } } -// modification d'un contact. On enregistre la nature +// modification d'un contact. On enregistre le type 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"]; + $type = $_POST["type"]; $statut = $contact->statut; - $result = $contrat->update_contact($_POST["elrowid"], $statut, $nature); + $result = $contrat->update_contact($_POST["elrowid"], $statut, $type); if ($result >= 0) { $db->commit(); @@ -157,6 +159,7 @@ if ($_POST["action"] == 'updateligne' && $user->rights->contrat->creer) dolibarr_print_error($db); } } + // bascule du statut d'un contact if ($_GET["action"] == 'swapstatut' && $user->rights->contrat->creer) { @@ -182,6 +185,7 @@ if ($_GET["action"] == 'swapstatut' && $user->rights->contrat->creer) } } +// Efface un contact if ($_GET["action"] == 'deleteline' && $user->rights->contrat->creer) { $contrat = new Contrat($db); @@ -264,6 +268,7 @@ if ($id > 0) if ($_GET["action"] != 'editline' && $user->rights->contrat->creer) { print ''; + print ''.$langs->trans("Source").''; print ''.$langs->trans("Societe").''; print ''.$langs->trans("Contacts").''; print ''.$langs->trans("ContactType").''; @@ -274,9 +279,44 @@ if ($id > 0) print '
'; print ''; + print ''; print ''; + // Ligne ajout pour contact interne print ""; + + print ''; + print $langs->trans("Internal"); + print ''; + + print ''; + print $conf->global->MAIN_INFO_SOCIETE_NOM; + print ''; + + print ''; + $html->select_users($user->id,'contactid'); + print ''; + print ''; + select_type_contact($contrat, '', 'type','internal'); + print ''; + print ''; + print ''; + + print '
'; + + print '
'; + print ''; + print ''; + print ''; + + // Ligne ajout pour contact externe + $var=!$var; + print ""; + + print ''; + print $langs->trans("External"); + print ''; + print ''; $selectedCompany = isset($_GET["newcompany"])?$_GET["newcompany"]:$contrat->societe->id; $selectedCompany = select_societes_for_newconcat($contrat, $selectedCompany, $htmlname = 'newcompany'); @@ -286,155 +326,115 @@ if ($id > 0) $html->select_contacts($selectedCompany, $selected = '', $htmlname = 'contactid'); print ''; print ''; - select_nature_contact($contrat, '', 'nature'); + select_type_contact($contrat, '', 'type','external'); print ''; print ''; print ''; - + print "
"; } print ' '; + // Liste des contacts liés print ''; - print ''.$langs->trans("Societe").''; + print ''.$langs->trans("Source").''; + print ''.$langs->trans("Company").''; print ''.$langs->trans("Contacts").''; print ''.$langs->trans("ContactType").''; print ''.$langs->trans("Status").''; print ' '; print "\n"; - $tab = $contrat->liste_contact(); + $societe = new Societe($db); + $var = true; - $num = ($tab == null) ? 0 : count($tab); - if ($tab != null && $num > 0) + foreach(array('internal','external') as $source) { + $tab = $contrat->liste_contact(-1,$source); + $num=sizeof($tab); + $i = 0; - $total = 0; - - $var = true; - $person = new Contact($db); - $societe = new Societe($db); - while ($i < $num) { - $objp = $contrat->detail_contact($tab[$i]); + $var = !$var; - // detail du contact - $person->fetch($objp->fk_socpeople); - $var = !$var; // flip flop lines + print ''; - if ($_GET["action"] != 'editline' || $_GET["rowid"] != $tab[$i]) + // Source + print ''; + if ($tab[$i]['source']=='internal') print $langs->trans("Internal"); + if ($tab[$i]['source']=='external') print $langs->trans("External"); + print ''; + + // Societe + print ''; + if ($tab[$i]['socid'] > 0) { - print ''; - - print ''; - if ($objp->fk_soc) - { - print ''; - print img_object($langs->trans("ShowCompany"),"company").' '.$societe->get_nom($person->socid); - print ''; - } - else - { - print ' '; - } - print ''; - - print ''; - print ''; - print img_object($langs->trans("ShowContact"),"contact").' '.$person->fullname.''; - print ''; - - // Description - print ''.$objp->libelle.''; - - // Statut - print ''; - // Activation desativation 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 le type - else + print ''; + print img_object($langs->trans("ShowCompany"),"company").' '.$societe->get_nom($tab[$i]['socid']); + print ''; + } + if ($tab[$i]['socid'] < 0) { + print $conf->global->MAIN_INFO_SOCIETE_NOM; + } + if (! $tab[$i]['socid']) + { + print ' '; + } + print ''; - print "
"; - print ''; - print ''; - // Ligne carac - print ""; + // Contact + print ''; + if ($tab[$i]['source']=='internal') + { + print ''; + print img_object($langs->trans("ShowUser"),"user").' '.$tab[$i]['nom'].''; + } + if ($tab[$i]['source']=='external') + { + print ''; + print img_object($langs->trans("ShowContact"),"contact").' '.$tab[$i]['nom'].''; + } + print ''; - print ''; - if ($objp->fk_soc) - { - print ''; - print img_object($langs->trans("ShowCompany"),"company").' '.$societe->get_nom($person->socid); - print ''; - } - else - { - print ' '; - } - print ''; + // Description + print ''.$tab[$i]['libelle'].''; - print ''; - print ''; - print img_object($langs->trans("ShowContact"),"contact").' '.$person->fullname.''; - print ''; + // Statut + print ''; + // Activation desativation du contact + if ($contrat->statut >= 0) + print ''; + print img_statut($tab[$i]['status']); + if ($contrat->statut >= 0) + print ''; + print ''; - // Description - print ''; - select_nature_contact($contrat, $objp->nature, 'nature'); - print ""; - - // Statut - print ''.img_statut($objp->statut).''; - - // Icon update et delete (statut contrat 0=brouillon,1=validé,2=fermé) - print ''; - - print ''."\n"; - print "
\n"; + // Icon update et delete (statut contrat 0=brouillon,1=validé,2=fermé) + print ''; + if ($contrat->statut == 0 && $user->rights->contrat->creer) + { + print ' '; + print ''; + print img_delete(); + print ''; } + print ''; + + print "\n"; + $i ++; } $db->free($result); } - print ""; - } else + } + else { // Contrat non trouvé print "Contrat inexistant ou accés refusé"; diff --git a/htdocs/contrat/contrat.class.php b/htdocs/contrat/contrat.class.php index 114dd33f5cc..1855710d961 100644 --- a/htdocs/contrat/contrat.class.php +++ b/htdocs/contrat/contrat.class.php @@ -420,25 +420,47 @@ class Contrat $this->db->begin(); // Insère contrat - $sql = "INSERT INTO ".MAIN_DB_PREFIX."contrat (datec, fk_soc, fk_user_author, fk_commercial_signature, fk_commercial_suivi, date_contrat)"; + $sql = "INSERT INTO ".MAIN_DB_PREFIX."contrat (datec, fk_soc, fk_user_author, date_contrat"; +// $sql.= ", fk_commercial_signature, fk_commercial_suivi"; + $sql.= ")"; $sql.= " VALUES (now(),".$this->soc_id.",".$user->id; - $sql.= ",".($this->commercial_signature_id>=0?$this->commercial_signature_id:"null"); - $sql.= ",".($this->commercial_suivi_id>=0?$this->commercial_suivi_id:"null"); - $sql.= ",".$this->db->idate($this->date_contrat) .")"; + $sql.= ",".$this->db->idate($this->date_contrat); +// $sql.= ",".($this->commercial_signature_id>=0?$this->commercial_signature_id:"null"); +// $sql.= ",".($this->commercial_suivi_id>=0?$this->commercial_suivi_id:"null"); + $sql.= ")"; $resql=$this->db->query($sql); if ($resql) { + $error=0; + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."contrat"); - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $interface->run_triggers('CONTRACT_CREATE',$this,$user,$lang,$conf); - // Fin appel triggers - - $this->db->commit(); + // Insère contacts commerciaux ('SALESREPSIGN','contrat') + $result=$this->add_contact($this->commercial_signature_id,'SALESREPSIGN','internal'); + if ($result < 0) $error++; + + // Insère contacts commerciaux ('SALESREPFOLL','contrat') + $result=$this->add_contact($this->commercial_suivi_id,'SALESREPFOLL','internal'); + if ($result < 0) $error++; - return $this->id; + if (! $error) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $interface->run_triggers('CONTRACT_CREATE',$this,$user,$lang,$conf); + // Fin appel triggers + + $this->db->commit(); + + return $this->id; + } + else + { + $this->db->rollback(); + + return -1; + } } else { @@ -905,31 +927,30 @@ class Contrat /* 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 + * \param fk_socpeople Id du contact a ajouter. + * \param type_contact Type de contact + * \param source extern=Contact externe (llx_socpeople), intern=Contact interne (llx_user) + * \return int <0 si erreur, >0 si ok */ - function add_contact($fk_socpeople, $nature) - { + function add_contact($fk_socpeople, $type_contact, $source='extern') + { + dolibarr_syslog("Contrat::add_contact $fk_socpeople, $type_contact, $source"); + + if ($fk_socpeople <= 0) return -1; + + // \todo si type_contact = texte, aller chercher code dans table llx_c_type_contact + if ($type_contact == 'SALESREPSIGN') $type_contact=11; + if ($type_contact == 'SALESREPFOLL') $type_contact=12; - 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(); + $datecreate = time(); // Insertion dans la base $sql = "INSERT INTO ".MAIN_DB_PREFIX."element_contact"; $sql.= " (element_id, fk_socpeople, datecreate, statut, fk_c_type_contact) "; $sql.= " VALUES (".$this->id.", ".$fk_socpeople." , " ; - $sql.= $this->db->idate(time()); - $sql.= ", 4, '". $lNature . "' "; + $sql.= $this->db->idate($datecreate); + $sql.= ", 4, '". $type_contact . "' "; $sql.= ");"; // Retour @@ -943,9 +964,9 @@ class Contrat $this->error=$this->db->error()." - $sql"; return -1; } - } - - /** + } + + /** * * \brief Misea jour du contact associé au contrat * \param rowid La reference du lien contant contact. @@ -953,8 +974,8 @@ class Contrat * \param nature Description du contact * \return int <0 si erreur, >0 si ok */ - function update_contact($rowid, $statut, $type_contact_id) - { + function update_contact($rowid, $statut, $type_contact_id) + { // Insertion dans la base $sql = "UPDATE ".MAIN_DB_PREFIX."element_contact set "; $sql.= " statut = $statut ,"; @@ -993,23 +1014,36 @@ class Contrat /** * \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 + * \param statut Statut des lignes detail à récupérer + * \param source Source du contact external (llx_socpeople) ou internal (llx_user) + * \return array Tableau des rowid des contacts */ - function liste_contact($statut=-1) + function liste_contact($statut=-1,$source='external') { + global $langs; + $tab=array(); - $sql = "SELECT ec.rowid, tc.code"; - $sql.= " FROM ".MAIN_DB_PREFIX."element_contact ec, ".MAIN_DB_PREFIX."socpeople sp,"; + $sql = "SELECT ec.rowid, ec.statut, ec.fk_socpeople as id,"; + if ($source == 'internal') $sql.=" '-1' as socid,"; + if ($source == 'external') $sql.=" t.fk_soc as socid,"; + if ($source == 'internal') $sql.=" t.name as nom,"; + if ($source == 'external') $sql.=" t.name as nom,"; + $sql.= "tc.code, tc.source, tc.libelle"; + $sql.= " FROM ".MAIN_DB_PREFIX."element_contact ec,"; + if ($source == 'internal') $sql.=" ".MAIN_DB_PREFIX."user t,"; + if ($source == 'external') $sql.=" ".MAIN_DB_PREFIX."socpeople t,"; $sql.= " ".MAIN_DB_PREFIX."c_type_contact tc"; $sql.= " WHERE element_id =".$this->id; $sql.= " AND ec.fk_c_type_contact=tc.rowid"; $sql.= " AND tc.element='contrat'"; + if ($source == 'internal') $sql.= " AND tc.source = 'internal'"; + if ($source == 'external') $sql.= " AND tc.source = 'external'"; $sql.= " AND tc.active=1"; - $sql.= " AND ec.fk_socpeople = sp.idp"; + if ($source == 'internal') $sql.= " AND ec.fk_socpeople = t.rowid"; + if ($source == 'external') $sql.= " AND ec.fk_socpeople = t.idp"; if ($statut >= 0) $sql.= " AND statut = '$statut'"; - $sql.=" order by sp.name asc ;"; + $sql.=" ORDER BY t.name ASC"; $resql=$this->db->query($sql); if ($resql) @@ -1019,7 +1053,10 @@ class Contrat while ($i < $num) { $obj = $this->db->fetch_object($resql); - $tab[$i]=$obj->rowid; + + $libelle_type=($langs->trans("TypeContact".$obj->code)!=$langs->trans("TypeContact".$obj->code) ? $langs->trans("TypeContact".$obj->code) : $obj->libelle); + $tab[$i]=array('source'=>$obj->source,'socid'=>$obj->socid,'id'=>$obj->id,'nom'=>$obj->nom, + 'rowid'=>$obj->rowid,'code'=>$obj->code,'libelle'=>$libelle_type,'status'=>$obj->statut); $i++; } return $tab; @@ -1027,7 +1064,7 @@ class Contrat else { $this->error=$this->db->error(); -// dolibarr_print_error($this->db); + dolibarr_print_error($this->db); return -1; } } @@ -1063,16 +1100,18 @@ class Contrat } /** - * \brief La liste des valeurs possibles de type de contats - * \return array La liste des natures + * \brief La liste des valeurs possibles de type de contacts + * \param source internal ou externam + * \return array La liste des natures */ - function liste_nature_contact() + function liste_type_contact($source) { $tab = array(); $sql = "SELECT distinct tc.rowid, tc.code, tc.libelle"; $sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc"; $sql.= " WHERE element='contrat'"; + $sql.= " AND source='".$source."'"; $sql.= " ORDER by tc.code"; $resql=$this->db->query($sql); diff --git a/htdocs/html.form.class.php b/htdocs/html.form.class.php index 1f90bf255d4..13d47d5226a 100644 --- a/htdocs/html.form.class.php +++ b/htdocs/html.form.class.php @@ -353,52 +353,95 @@ class Form } - /** - * \brief Retourne la liste déroulante des contacts d'une société donnée - * \param socid Id de la société - * \param selected Id contact pré-sélectionné - * \param htmlname Nom champ formulaire - */ - function select_contacts($socid,$selected='',$htmlname='contactid') - { - // On recherche les societes - $sql = "SELECT s.idp, s.name, s.firstname FROM "; - $sql .= MAIN_DB_PREFIX ."socpeople as s"; - $sql .= " WHERE fk_soc=".$socid; - $sql .= " ORDER BY s.name ASC"; - - if ($this->db->query($sql)) - { - print ''; - } - else - { - dolibarr_print_error($this->db); - } - } - - - /** + /** + * \brief Retourne la liste déroulante des contacts d'une société donnée + * \param socid Id de la société + * \param selected Id contact pré-sélectionn + * \param htmlname Nom champ formulaire + */ + function select_contacts($socid,$selected='',$htmlname='contactid') + { + // On recherche les societes + $sql = "SELECT s.idp, s.name, s.firstname FROM "; + $sql .= MAIN_DB_PREFIX ."socpeople as s"; + $sql .= " WHERE fk_soc=".$socid; + $sql .= " ORDER BY s.name ASC"; + + if ($this->db->query($sql)) + { + print ''; + } + else + { + dolibarr_print_error($this->db); + } + } + + + /** + * \brief Retourne la liste déroulante des utilisateurs + * \param selected Id contact pré-sélectionn + * \param htmlname Nom champ formulaire + */ + function select_users($selected='',$htmlname='userid') + { + // On recherche les societes + $sql = "SELECT u.rowid, u.name, u.firstname FROM "; + $sql .= MAIN_DB_PREFIX ."user as u"; + $sql .= " ORDER BY u.name ASC"; + + if ($this->db->query($sql)) + { + print ''; + } + else + { + dolibarr_print_error($this->db); + } + } + + + /** * \brief Affiche la liste déroulante des projets d'une société donnée * \param socid Id société * \param selected Id projet présélectionné diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 73d588bfdec..08867726310 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -280,6 +280,10 @@ DateFromTo=From %s to %s DateFrom=From %s DateUntil=Until %s Check=Check +Internal=Internal +External=External +Internals=Internal +Externals=External # Countries CountryFR=France CountryBE=Belgium diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index 0892516460b..0cae0246e13 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -280,6 +280,10 @@ DateFromTo=Du %s au %s DateFrom=A partir du %s DateUntil=Jusqu'au %s Check=Vérifier +Internal=Interne +External=Externe +Internals=Internes +Externals=Externes # Countries CountryFR=France CountryBE=Belgique diff --git a/mysql/migration/1.1.0-2.0.0.sql b/mysql/migration/1.1.0-2.0.0.sql index 00f0c28b091..dd5da37aa93 100644 --- a/mysql/migration/1.1.0-2.0.0.sql +++ b/mysql/migration/1.1.0-2.0.0.sql @@ -1789,52 +1789,57 @@ create table llx_societe_perms )type=innodb; +drop table if exists llx_element_contact; +drop table if exists llx_c_type_contact; + create table llx_c_type_contact ( rowid integer PRIMARY KEY, - code varchar(16) NOT NULL, element varchar(30) NOT NULL, + source varchar(8) DEFAULT 'external' NOT NULL, + code varchar(16) NOT NULL, libelle varchar(64) NOT NULL, active tinyint DEFAULT 1 NOT NULL )type=innodb; ALTER TABLE llx_c_type_contact - ADD UNIQUE INDEX idx_c_type_contact_uk (element, code); + ADD UNIQUE INDEX idx_c_type_contact_uk (element, source, code); create table llx_element_contact ( rowid integer AUTO_INCREMENT PRIMARY KEY, - datecreate datetime NULL, - statut smallint DEFAULT 5, + datecreate datetime NULL, -- date de creation de l'enregistrement + statut smallint DEFAULT 5, -- 5 inactif, 4 actif - fk_c_type_contact int NOT NULL, - element_id int NOT NULL, - - fk_socpeople integer NOT NULL + element_id int NOT NULL, -- la reference de l'element. + fk_c_type_contact int NOT NULL, -- nature du contact. + fk_socpeople integer NOT NULL )type=innodb; ALTER TABLE llx_element_contact - ADD INDEX idx_element_contact_idx1 (element_id, fk_socpeople); + ADD UNIQUE INDEX idx_element_contact_idx1 (element_id, fk_c_type_contact, fk_socpeople); ALTER TABLE llx_element_contact ADD CONSTRAINT idx_element_contact_fk_c_type_contact FOREIGN KEY (fk_c_type_contact) REFERENCES llx_c_type_contact(rowid); -insert into llx_c_type_contact(rowid, code, element, libelle, active ) values (10, 'BILLING', 'contrat', 'Contact facturation du contrat', 1); -insert into llx_c_type_contact(rowid, code, element, libelle, active ) values (11, 'SALESREPSIGN', 'contrat', 'Commercial signataire du contrat', 1); -insert into llx_c_type_contact(rowid, code, element, libelle, active ) values (12, 'SALESREPFOLL', 'contrat', 'Commercial suivi du contrat', 1); -insert into llx_c_type_contact(rowid, code, element, libelle, active ) values (13, 'CUSTOMER', 'contrat', 'Contact client pour le contrat', 1); - -insert into llx_c_type_contact(rowid, code, element, libelle, active ) values (20, 'BILLING', 'propal', 'Contact facturation de la propale', 1); -insert into llx_c_type_contact(rowid, code, element, libelle, active ) values (21, 'SALESREPSIGN', 'propal', 'Commercial signataire de la propale', 1); -insert into llx_c_type_contact(rowid, code, element, libelle, active ) values (22, 'SALESREPFOLL', 'propal', 'Commercial suivi de la propale', 1); -insert into llx_c_type_contact(rowid, code, element, libelle, active ) values (23, 'CUSTOMER', 'propal', 'Contact client pour la propale', 1); - -insert into llx_c_type_contact(rowid, code, element, libelle, active ) values (80, 'PROJECTLEADER', 'projet', 'Chef de Projet', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (10, 'contrat', 'external', 'BILLING', 'Contact facturation du contrat', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (11, 'contrat', 'internal', 'SALESREPSIGN', 'Commercial signataire du contrat', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (12, 'contrat', 'internal', 'SALESREPFOLL', 'Commercial suivi du contrat', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (13, 'contrat', 'external', 'CUSTOMER', 'Contact client pour le contrat', 1); + +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (20, 'propal', 'external', 'BILLING', 'Contact facturation de la propale', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (21, 'propal', 'internal', 'SALESREPSIGN', 'Commercial signataire de la propale', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (22, 'propal', 'internal', 'SALESREPFOLL', 'Commercial suivi de la propale', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (23, 'propal', 'external', 'CUSTOMER', 'Contact client pour la propale', 1); + +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (80, 'projet', 'internal', 'PROJECTLEADER', 'Chef de Projet', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (81, 'projet', 'external', 'PROJECTLEADER', 'Chef de Projet', 1); + alter table llx_commande add ref_client varchar(30); alter table llx_facture add ref_client varchar(30); diff --git a/mysql/tables/llx_c_type_contact.key.sql b/mysql/tables/llx_c_type_contact.key.sql index 3eb46b16148..4912726a424 100644 --- a/mysql/tables/llx_c_type_contact.key.sql +++ b/mysql/tables/llx_c_type_contact.key.sql @@ -31,5 +31,5 @@ ALTER TABLE llx_c_type_contact - ADD UNIQUE INDEX idx_c_type_contact_uk (element, code); + ADD UNIQUE INDEX idx_c_type_contact_uk (element, source, code); diff --git a/mysql/tables/llx_c_type_contact.sql b/mysql/tables/llx_c_type_contact.sql index c86aafa2b82..c8d7d711549 100644 --- a/mysql/tables/llx_c_type_contact.sql +++ b/mysql/tables/llx_c_type_contact.sql @@ -33,8 +33,9 @@ create table llx_c_type_contact ( rowid integer PRIMARY KEY, - code varchar(16) NOT NULL, element varchar(30) NOT NULL, + source varchar(8) DEFAULT 'external' NOT NULL, + code varchar(16) NOT NULL, libelle varchar(64) NOT NULL, active tinyint DEFAULT 1 NOT NULL )type=innodb; diff --git a/mysql/tables/llx_element_contact.key.sql b/mysql/tables/llx_element_contact.key.sql index 9d623e9d965..67f74c58b62 100644 --- a/mysql/tables/llx_element_contact.key.sql +++ b/mysql/tables/llx_element_contact.key.sql @@ -22,15 +22,8 @@ ALTER TABLE llx_element_contact - ADD INDEX idx_element_contact_idx1 (element_id, fk_socpeople); + ADD UNIQUE INDEX idx_element_contact_idx1 (element_id, fk_c_type_contact, fk_socpeople); ALTER TABLE llx_element_contact ADD CONSTRAINT idx_element_contact_fk_c_type_contact FOREIGN KEY (fk_c_type_contact) REFERENCES llx_c_type_contact(rowid); - --- Au cas ou ce serait necessaire. --- Abuser des foreign key et parfois plus genant que utile. --- ALTER TABLE llx_element_contact --- ADD CONSTRAINT idx_element_contact_fk_socpeople --- FOREIGN KEY (fk_socpeople) REFERENCES llx_socpeople(idp); - diff --git a/mysql/tables/llx_element_contact.sql b/mysql/tables/llx_element_contact.sql index 4b9807f0bf8..fb0fc06581e 100644 --- a/mysql/tables/llx_element_contact.sql +++ b/mysql/tables/llx_element_contact.sql @@ -29,10 +29,8 @@ create table llx_element_contact datecreate datetime NULL, -- date de creation de l'enregistrement statut smallint DEFAULT 5, -- 5 inactif, 4 actif - fk_c_type_contact int NOT NULL, -- nature du contact. - element_id int NOT NULL, -- la reference de l'element. - -- pour connaitre la table associée a ce contact regarder fk_element_contact->element - - fk_socpeople integer NOT NULL + element_id int NOT NULL, -- la reference de l'element. + fk_c_type_contact int NOT NULL, -- nature du contact. + fk_socpeople integer NOT NULL )type=innodb;