diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index ee4ff76a0081107a7982ef5239eab6ef1d54fad6..5224fa2d72e97aa48202003c710ad6f3fdac9680 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -28,6 +28,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php'; +require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; /** @@ -333,6 +334,17 @@ class Categorie $error++; } } + if (! $error) + { + $sql = "DELETE FROM ".MAIN_DB_PREFIX."categorie_contact"; + $sql .= " WHERE fk_categorie = ".$this->id; + if (!$this->db->query($sql)) + { + $this->error=$this->db->lasterror(); + dol_syslog("Error sql=".$sql." ".$this->error, LOG_ERR); + $error++; + } + } // Delete category if (! $error) diff --git a/htdocs/categories/index.php b/htdocs/categories/index.php index bd293f9febb0a12054910ca02387fb8a707e3951..0e512cdfcf70a302f5d568bb74f817ae69d02e21 100644 --- a/htdocs/categories/index.php +++ b/htdocs/categories/index.php @@ -50,6 +50,7 @@ if ($type == 0) $title=$langs->trans("ProductsCategoriesArea"); elseif ($type == 1) $title=$langs->trans("SuppliersCategoriesArea"); elseif ($type == 2) $title=$langs->trans("CustomersCategoriesArea"); elseif ($type == 3) $title=$langs->trans("MembersCategoriesArea"); +elseif ($type == 4) $title=$langs->trans("ContactsCategoriesArea"); else $title=$langs->trans("CategoriesArea"); $arrayofjs=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.js', '/includes/jquery/plugins/jquerytreeview/lib/jquery.cookie.js'); diff --git a/htdocs/categories/photos.php b/htdocs/categories/photos.php index 8a98ff44c01a519991694cb5b930f735aaad39d0..06345dfb4cb1c80db4efbac3a96e49da6ac7b6ef 100644 --- a/htdocs/categories/photos.php +++ b/htdocs/categories/photos.php @@ -94,6 +94,7 @@ if ($object->id) elseif ($type == 1) $title=$langs->trans("SuppliersCategoryShort"); elseif ($type == 2) $title=$langs->trans("CustomersCategoryShort"); elseif ($type == 3) $title=$langs->trans("MembersCategoryShort"); + elseif ($type == 4) $title=$langs->trans("ContactCategoriesShort"); $head = categories_prepare_head($object,$type); dol_fiche_head($head, 'photos', $title, 0, 'category'); diff --git a/htdocs/categories/viewcat.php b/htdocs/categories/viewcat.php index 3cdb5d516f122c56ba9589fe610fd77bc1faf9c5..da18c5eba76f01a692a4029e443198523113c122 100644 --- a/htdocs/categories/viewcat.php +++ b/htdocs/categories/viewcat.php @@ -72,25 +72,32 @@ if ($id > 0 && $removeelem > 0) $result = $tmpobject->fetch($removeelem); $elementtype = 'product'; } - if ($type==1 && $user->rights->societe->creer) + else if ($type==1 && $user->rights->societe->creer) { $tmpobject = new Societe($db); $result = $tmpobject->fetch($removeelem); $elementtype = 'fournisseur'; } - if ($type==2 && $user->rights->societe->creer) + else if ($type==2 && $user->rights->societe->creer) { $tmpobject = new Societe($db); $result = $tmpobject->fetch($removeelem); $elementtype = 'societe'; } - if ($type == 3 && $user->rights->adherent->creer) + else if ($type == 3 && $user->rights->adherent->creer) { require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; $tmpobject = new Adherent($db); $result = $tmpobject->fetch($removeelem); $elementtype = 'member'; } + else if ($type == 4 && $user->rights->societe->creer) { + + require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; + $tmpobject = new Contact($db); + $result = $tmpobject->fetch($removeelem); + $elementtype = 'contact'; + } $result=$object->del_type($tmpobject,$elementtype); if ($result < 0) dol_print_error('',$object->error); @@ -125,6 +132,7 @@ if ($type == 0) $title=$langs->trans("ProductsCategoryShort"); elseif ($type == 1) $title=$langs->trans("SuppliersCategoryShort"); elseif ($type == 2) $title=$langs->trans("CustomersCategoryShort"); elseif ($type == 3) $title=$langs->trans("MembersCategoryShort"); +elseif ($type == 4) $title=$langs->trans("ContactCategoriesShort"); else $title=$langs->trans("Category"); $head = categories_prepare_head($object,$type); @@ -444,6 +452,59 @@ if ($object->type == 3) } } +//Categorie contact +if($object->type == 4) +{ + $contacts = $object->get_type("socpeople","Contact",'contact',"socpeople"); + if ($contacts < 0) + { + dol_print_error(); + } + else + { + print "<br>"; + print '<table class="noborder" width="100%">'."\n"; + print '<tr class="liste_titre"><td colspan="2">'.$langs->trans("Contact")."</td></tr>\n"; + + if (count($contacts) > 0) + { + $i = 0; + $var=true; + foreach ($contacts as $key => $contact) + { + $i++; + $var=!$var; + print "\t<tr ".$bc[$var].">\n"; + print '<td class="nowrap" valign="top">'; + print $contact->getNomUrl(1,'category'); + print "</td>\n"; + // Link to delete from category + print '<td align="right">'; + $typeid=$object->type; + $permission=0; + if ($typeid == 0) $permission=($user->rights->produit->creer || $user->rights->service->creer); + if ($typeid == 1) $permission=$user->rights->societe->creer; + if ($typeid == 2) $permission=$user->rights->societe->creer; + if ($typeid == 3) $permission=$user->rights->adherent->creer; + if ($typeid == 4) $permission=$user->rights->societe->creer; + if ($permission) + { + print "<a href= '".$_SERVER['PHP_SELF']."?".(empty($socid)?'id':'socid')."=".$object->id."&type=".$typeid."&removeelem=".$contact->id."'>"; + print img_delete($langs->trans("DeleteFromCat")).' '; + print $langs->trans("DeleteFromCat")."</a>"; + } + print '</td>'; + print "</tr>\n"; + } + } + else + { + print "<tr ".$bc[false]."><td>".$langs->trans("ThisCategoryHasNoContact")."</td></tr>"; + } + print "</table>\n"; + } +} + llxFooter(); $db->close(); diff --git a/htdocs/compta/facture/impayees.php b/htdocs/compta/facture/impayees.php index b334053c5b451e92026a826b81e53ad795f3113f..5603bd6417d72a88dcc9811642adf741d32677c9 100644 --- a/htdocs/compta/facture/impayees.php +++ b/htdocs/compta/facture/impayees.php @@ -416,6 +416,7 @@ if ($resql) print '<td align="right"><b>'.price($total_paid).'</b></td>'; print '<td align="right"><b>'.price($total_ttc - $total_paid).'</b></td>'; print '<td align="center"> </td>'; + print '<td align="center"> </td>'; print "</tr>\n"; } diff --git a/htdocs/core/tpl/contacts.tpl.php b/htdocs/core/tpl/contacts.tpl.php index dc97d84e9b647ebf966e450fd2896f7edcfb559a..33b98d56f48a7f98e727cc3987770f80b3be554e 100644 --- a/htdocs/core/tpl/contacts.tpl.php +++ b/htdocs/core/tpl/contacts.tpl.php @@ -14,6 +14,9 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * This template needs: + * $object */ if (! class_exists('Contact')) { @@ -30,6 +33,7 @@ if ($module == 'propal') { $permission=$user->rights->propale->creer; } elseif ($module == 'fichinter') { $permission=$user->rights->ficheinter->creer; } elseif ($module == 'invoice_supplier') { $permission=$user->rights->fournisseur->facture->creer; } elseif ($module == 'order_supplier') { $permission=$user->rights->fournisseur->commande->creer; } +elseif ($module == 'project') { $permission=$user->rights->projet->creer; } elseif (! isset($permission)) { $permission=$user->rights->$module->creer; } // If already defined by caller page $formcompany= new FormCompany($db); diff --git a/htdocs/langs/en_US/categories.lang b/htdocs/langs/en_US/categories.lang index bddaf125aec287990f06523d3bd94db0740aae63..e883ab24ed0d716274c4c3b9f2c9a2060adb72b7 100644 --- a/htdocs/langs/en_US/categories.lang +++ b/htdocs/langs/en_US/categories.lang @@ -17,6 +17,7 @@ SuppliersCategoriesArea=Suppliers categories area CustomersCategoriesArea=Customers categories area ThirdPartyCategoriesArea=Third parties categories area MembersCategoriesArea=Members categories area +ContactsCategoriesArea=Contacts categories area MainCats=Main categories SubCats=Subcategories CatStatistics=Statistics @@ -86,6 +87,7 @@ ThisCategoryHasNoProduct=This category does not contain any product. ThisCategoryHasNoSupplier=This category does not contain any supplier. ThisCategoryHasNoCustomer=This category does not contain any customer. ThisCategoryHasNoMember=This category does not contain any member. +ThisCategoryHasNoContact=This category does not contain any contact. AssignedToCustomer=Assigned to a customer AssignedToTheCustomer=Assigned to the customer InternalCategory=Internal category diff --git a/htdocs/langs/fr_FR/categories.lang b/htdocs/langs/fr_FR/categories.lang index c14906dd2fb9f2dcd9fa65b7a9a4647e24b8373f..bf0c646c034e78aa9bc778a2c24e81d0b9252341 100644 --- a/htdocs/langs/fr_FR/categories.lang +++ b/htdocs/langs/fr_FR/categories.lang @@ -17,6 +17,7 @@ SuppliersCategoriesArea=Espace des catégories de tiers fournisseurs CustomersCategoriesArea=Espace des catégories de tiers clients ou prospects ThirdPartyCategoriesArea=Espace des catégories de tiers MembersCategoriesArea=Espace des catégories d'adhérents +ContactsCategoriesArea=Espace des catégories des contacts MainCats=Catégories principales SubCats=Sous-catégories CatStatistics=Statistiques @@ -86,6 +87,7 @@ ThisCategoryHasNoProduct=Cette catégorie ne contient aucun produit. ThisCategoryHasNoSupplier=Cette catégorie ne contient aucun fournisseur. ThisCategoryHasNoCustomer=Cette catégorie ne contient aucun client. ThisCategoryHasNoMember=Cette catégorie ne contient aucun adhérent. +ThisCategoryHasNoContact=Cette catégorie ne contient aucun contact. AssignedToCustomer=Attribuer à un client AssignedToTheCustomer=Attribué au client InternalCategory=Catégorie interne diff --git a/htdocs/projet/contact.php b/htdocs/projet/contact.php index 2f253112cdff81ab3a31c495597cd62b79b045c2..0674bcaf24b45687c7d4634185174d5138db0a83 100644 --- a/htdocs/projet/contact.php +++ b/htdocs/projet/contact.php @@ -31,17 +31,20 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; $langs->load("projects"); $langs->load("companies"); -$id = GETPOST('id','int'); -$ref= GETPOST('ref','alpha'); +$id = GETPOST('id','int'); +$ref = GETPOST('ref','alpha'); +$lineid = GETPOST('lineid','int'); +$socid = GETPOST('socid','int'); +$action = GETPOST('action','alpha'); -$mine = $_REQUEST['mode']=='mine' ? 1 : 0; +$mine = GETPOST('mode')=='mine' ? 1 : 0; //if (! $user->rights->projet->all->lire) $mine=1; // Special for projects -$project = new Project($db); +$object = new Project($db); if ($ref) { - $project->fetch(0,$ref); - $id=$project->id; + $object->fetch(0,$ref); + $id=$object->id; } // Security check @@ -55,41 +58,42 @@ $result = restrictedArea($user, 'projet', $id); */ // Add new contact -if ($_POST["action"] == 'addcontact' && $user->rights->projet->creer) +if ($action == 'addcontact' && $user->rights->projet->creer) { $result = 0; - $result = $project->fetch($id); + $result = $object->fetch($id); if ($result > 0 && $id > 0) { - $result = $project->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + $contactid = (GETPOST('userid') ? GETPOST('userid','int') : GETPOST('contactid','int')); + $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) { - header("Location: contact.php?id=".$project->id); + header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); exit; } else { - if ($project->error == 'DB_ERROR_RECORD_ALREADY_EXISTS') + if ($object->error == 'DB_ERROR_RECORD_ALREADY_EXISTS') { $langs->load("errors"); $mesg = '<div class="error">'.$langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType").'</div>'; } else { - $mesg = '<div class="error">'.$project->error.'</div>'; + $mesg = '<div class="error">'.$object->error.'</div>'; } } } // bascule du statut d'un contact -if ($_GET["action"] == 'swapstatut' && $user->rights->projet->creer) +if ($action == 'swapstatut' && $user->rights->projet->creer) { - if ($project->fetch($id)) + if ($object->fetch($id)) { - $result=$project->swapContactStatus(GETPOST('ligne')); + $result=$object->swapContactStatus(GETPOST('ligne')); } else { @@ -98,14 +102,14 @@ if ($_GET["action"] == 'swapstatut' && $user->rights->projet->creer) } // Efface un contact -if ($_GET["action"] == 'deleteline' && $user->rights->projet->creer) +if (($action == 'deleteline' || $action == 'deletecontact') && $user->rights->projet->creer) { - $project->fetch($id); - $result = $project->delete_contact($_GET["lineid"]); + $object->fetch($id); + $result = $object->delete_contact($_GET["lineid"]); if ($result >= 0) { - header("Location: contact.php?id=".$project->id); + header("Location: contact.php?id=".$object->id); exit; } else @@ -137,18 +141,18 @@ dol_htmloutput_mesg($mesg); if ($id > 0 || ! empty($ref)) { - if ( $project->fetch($id,$ref) > 0) + if ( $object->fetch($id,$ref) > 0) { - if ($project->societe->id > 0) $result=$project->societe->fetch($project->societe->id); + if ($object->societe->id > 0) $result=$object->societe->fetch($object->societe->id); // To verify role of users - //$userAccess = $project->restrictedProjectArea($user,'read'); - $userWrite = $project->restrictedProjectArea($user,'write'); - //$userDelete = $project->restrictedProjectArea($user,'delete'); + //$userAccess = $object->restrictedProjectArea($user,'read'); + $userWrite = $object->restrictedProjectArea($user,'write'); + //$userDelete = $object->restrictedProjectArea($user,'delete'); //print "userAccess=".$userAccess." userWrite=".$userWrite." userDelete=".$userDelete; - $head = project_prepare_head($project); - dol_fiche_head($head, 'contact', $langs->trans("Project"), 0, ($project->public?'projectpub':'project')); + $head = project_prepare_head($object); + dol_fiche_head($head, 'contact', $langs->trans("Project"), 0, ($object->public?'projectpub':'project')); /* @@ -163,231 +167,42 @@ if ($id > 0 || ! empty($ref)) // Define a complementary filter for search of next/prev ref. if (! $user->rights->projet->all->lire) { - $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,0); - $project->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")"; + $objectsListId = $object->getProjectsAuthorizedForUser($user,$mine,0); + $object->next_prev_filter=" rowid in (".(count($objectsListId)?join(',',array_keys($objectsListId)):'0').")"; } - print $form->showrefnav($project, 'ref', $linkback, 1, 'ref', 'ref', ''); + print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref', ''); print '</td></tr>'; // Label - print '<tr><td>'.$langs->trans("Label").'</td><td>'.$project->title.'</td></tr>'; + print '<tr><td>'.$langs->trans("Label").'</td><td>'.$object->title.'</td></tr>'; // Customer print "<tr><td>".$langs->trans("Company")."</td>"; print '<td colspan="3">'; - if ($project->societe->id > 0) print $project->societe->getNomUrl(1); + if ($object->societe->id > 0) print $object->societe->getNomUrl(1); else print ' '; print '</td></tr>'; // Visibility print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; - if ($project->public) print $langs->trans('SharedProject'); + if ($object->public) print $langs->trans('SharedProject'); else print $langs->trans('PrivateProject'); print '</td></tr>'; // Statut - print '<tr><td>'.$langs->trans("Status").'</td><td>'.$project->getLibStatut(4).'</td></tr>'; + print '<tr><td>'.$langs->trans("Status").'</td><td>'.$object->getLibStatut(4).'</td></tr>'; print "</table>"; print '</div>'; - /* - * Lignes de contacts - */ - print '<br><table class="noborder" width="100%">'; - - /* - * Ajouter une ligne de contact - * Non affiche en mode modification de ligne - */ - if ($_GET["action"] != 'editline') - { - print '<tr class="liste_titre">'; - print '<td>'.$langs->trans("Source").'</td>'; - print '<td>'.$langs->trans("Company").'</td>'; - print '<td>'.$langs->trans("Contacts").'</td>'; - print '<td>'.$langs->trans("ContactType").'</td>'; - print '<td colspan="3"> </td>'; - print "</tr>\n"; - - $var = false; - - print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$project->id.'" method="POST">'; - print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; - print '<input type="hidden" name="action" value="addcontact">'; - print '<input type="hidden" name="source" value="internal">'; - print '<input type="hidden" name="id" value="'.$project->id.'">'; - - // Ligne ajout pour contact interne - print "<tr ".$bc[$var].">"; - - print '<td class="nowrap">'; - print img_object('','user').' '.$langs->trans("Users"); - print '</td>'; - - print '<td colspan="1">'; - print $conf->global->MAIN_INFO_SOCIETE_NOM; - print '</td>'; - - print '<td colspan="1">'; - // On recupere les id des users deja selectionnes - $form->select_users($user->id,'contactid',0); - print '</td>'; - print '<td>'; - $formcompany->selectTypeContact($project, '', 'type','internal','rowid'); - print '</td>'; - print '<td align="right" colspan="3" >'; - if ($userWrite > 0 || $user->admin) - { - print '<input type="submit" class="button" value="'.$langs->trans("Add").'"'; - if (! ($userWrite > 0 || $user->admin)) print ' disabled="disabled"'; - print '>'; - } - print '</td>'; - print '</tr>'; - - print '</form>'; - - // Line to add external contact. Only if project is linked to a third party. - //if ($project->societe->id) - //{ - print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$id.'" method="POST">'; - print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; - print '<input type="hidden" name="action" value="addcontact">'; - print '<input type="hidden" name="source" value="external">'; - print '<input type="hidden" name="id" value="'.$id.'">'; - - $var=!$var; - print "<tr ".$bc[$var].">"; - - print '<td class="nowrap">'; - print img_object('','contact').' '.$langs->trans("ThirdPartyContacts"); - print '</td>'; - - print '<td colspan="1">'; - $selectedCompany = isset($_GET["newcompany"])?$_GET["newcompany"]:$project->societe->id; - $selectedCompany = $formcompany->selectCompaniesForNewContact($project, 'id', $selectedCompany, 'newcompany', (empty($project->societe->id)?array():array($project->societe->id))); - print '</td>'; - - print '<td colspan="1">'; - $nbofcontacts=$form->select_contacts($selectedCompany, '', 'contactid'); - //if ($nbofcontacts == 0) print $langs->trans("NoContactDefined"); - print '</td>'; - print '<td>'; - $formcompany->selectTypeContact($project, '', 'type','external','rowid'); - print '</td>'; - - print '<td align="right" colspan="3" >'; - if ($userWrite > 0 || $user->admin) - { - print '<input type="submit" class="button" value="'.$langs->trans("Add").'"'; - if (! $nbofcontacts || ! ($userWrite > 0 || $user->admin)) print ' disabled="disabled"'; - print '>'; - } - print '</td>'; - print '</tr>'; - - print "</form>"; - //} - - print '<tr><td colspan="6"> </td></tr>'; - } - - // Liste des contacts lies - print '<tr class="liste_titre">'; - print '<td>'.$langs->trans("Source").'</td>'; - print '<td>'.$langs->trans("Company").'</td>'; - print '<td>'.$langs->trans("Contacts").'</td>'; - print '<td>'.$langs->trans("ContactType").'</td>'; - print '<td align="center">'.$langs->trans("Status").'</td>'; - print '<td colspan="2"> </td>'; - print "</tr>\n"; - - $companystatic = new Societe($db); - $var = true; - - foreach(array('internal','external') as $source) + // Contacts lines (modules that overwrite templates must declare this into descriptor) + $dirtpls=array_merge($conf->modules_parts['tpl'],array('/core/tpl')); + foreach($dirtpls as $reldir) { - $tab = $project->liste_contact(-1,$source); - $num=count($tab); - - $i = 0; - while ($i < $num) - { - $var = !$var; - - print '<tr '.$bc[$var].' valign="top">'; - - // Source - print '<td align="left">'; - if ($tab[$i]['source']=='internal') print $langs->trans("User"); - if ($tab[$i]['source']=='external') print $langs->trans("ThirdPartyContact"); - print '</td>'; - - // Societe - print '<td align="left">'; - if ($tab[$i]['socid'] > 0) - { - $companystatic->fetch($tab[$i]['socid']); - print $companystatic->getNomUrl(1); - } - if ($tab[$i]['socid'] < 0) - { - print $conf->global->MAIN_INFO_SOCIETE_NOM; - } - if (! $tab[$i]['socid']) - { - print ' '; - } - print '</td>'; - - // Contact - print '<td>'; - if ($tab[$i]['source']=='internal') - { - $userstatic->id=$tab[$i]['id']; - $userstatic->lastname=$tab[$i]['nom']; - $userstatic->firstname=$tab[$i]['firstname']; - print $userstatic->getNomUrl(1); - } - if ($tab[$i]['source']=='external') - { - $contactstatic->id=$tab[$i]['id']; - $contactstatic->lastname=$tab[$i]['nom']; - $contactstatic->firstname=$tab[$i]['firstname']; - print $contactstatic->getNomUrl(1); - } - print '</td>'; - - // Type de contact - print '<td>'.$tab[$i]['libelle'].'</td>'; - - // Statut - print '<td align="center">'; - // Activation desativation du contact - if ($project->statut >= 0 && $userWrite > 0) print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$project->id.'&action=swapstatut&ligne='.$tab[$i]['rowid'].'">'; - print $contactstatic->LibStatut($tab[$i]['status'],3); - if ($project->statut >= 0 && $userWrite > 0) print '</a>'; - print '</td>'; - - // Icon update et delete - print '<td align="center" nowrap>'; - if ($user->rights->projet->creer && $userWrite > 0) - { - print ' '; - print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$project->id.'&action=deleteline&lineid='.$tab[$i]['rowid'].'">'; - print img_delete(); - print '</a>'; - } - print '</td>'; - - print "</tr>\n"; - - $i ++; - } - } - print "</table>"; + $res=@include dol_buildpath($reldir.'/contacts.tpl.php'); + if ($res) break; + } } else {