* Copyright (C) 2004-2006 Laurent Destailleur * Copyright (C) 2004 Benoit Mortier * * 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/admin/dict.php \ingroup setup \brief Page d'administration des dictionnaires de données \version $Revision$ */ require("./pre.inc.php"); $langs->load("main"); $langs->load("other"); $langs->load("admin"); $langs->load("companies"); if (!$user->admin) accessforbidden(); $acts[0] = "activate"; $acts[1] = "disable"; $actl[0] = $langs->trans("Activate"); $actl[1] = $langs->trans("Disable"); $active = 1; // Cette page est une page d'édition générique des dictionnaires de données // Mettre ici tous les caractéristiques des dictionnaires // Ordres d'affichage des dictionnaires (0 pour espace) $taborder=array(9,0,4,3,2,0,1,8,0,5,11,0,6,0,10,12,13,0,7); // Nom des tables des dictionnaires $tabname[1] = MAIN_DB_PREFIX."c_forme_juridique"; $tabname[2] = MAIN_DB_PREFIX."c_departements"; $tabname[3] = MAIN_DB_PREFIX."c_regions"; $tabname[4] = MAIN_DB_PREFIX."c_pays"; $tabname[5] = MAIN_DB_PREFIX."c_civilite"; $tabname[6] = MAIN_DB_PREFIX."c_actioncomm"; $tabname[7] = MAIN_DB_PREFIX."c_chargesociales"; $tabname[8] = MAIN_DB_PREFIX."c_typent"; $tabname[9] = MAIN_DB_PREFIX."c_currencies"; $tabname[10]= MAIN_DB_PREFIX."c_tva"; $tabname[11]= MAIN_DB_PREFIX."c_type_contact"; $tabname[12]= MAIN_DB_PREFIX."cond_reglement"; $tabname[13]= MAIN_DB_PREFIX."c_paiement"; // Libellé des dictionnaires $tablib[1] = $langs->trans("DictionnaryCompanyJuridicalType"); $tablib[2] = $langs->trans("DictionnaryCanton"); $tablib[3] = $langs->trans("DictionnaryRegion"); $tablib[4] = $langs->trans("DictionnaryCountry"); $tablib[5] = $langs->trans("DictionnaryCivility"); $tablib[6] = $langs->trans("DictionnaryActions"); $tablib[7] = $langs->trans("DictionnarySocialContributions"); $tablib[8] = $langs->trans("DictionnaryCompanyType"); $tablib[9] = $langs->trans("DictionnaryCurrency"); $tablib[10]= $langs->trans("DictionnaryVAT"); $tablib[11]= $langs->trans("DictionnaryTypeContact"); $tablib[12]= $langs->trans("DictionnaryPaymentConditions"); $tablib[13]= $langs->trans("DictionnaryPaymentModes"); // Requete pour extraction des données des dictionnaires $tabsql[1] = "SELECT f.rowid as rowid, f.code, f.libelle, p.libelle as pays, f.active FROM ".MAIN_DB_PREFIX."c_forme_juridique as f, ".MAIN_DB_PREFIX."c_pays as p WHERE f.fk_pays=p.rowid"; $tabsql[2] = "SELECT d.rowid as rowid, d.code_departement as code , d.nom as libelle, r.nom as region, p.libelle as pays, d.active FROM ".MAIN_DB_PREFIX."c_departements as d, ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_pays as p WHERE d.fk_region=r.code_region and r.fk_pays=p.rowid and r.active=1 and p.active=1"; $tabsql[3] = "SELECT r.rowid as rowid, code_region as code , nom as libelle, p.libelle as pays, r.active FROM ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_pays as p WHERE r.fk_pays=p.rowid and p.active=1"; $tabsql[4] = "SELECT rowid as rowid, code, libelle, active FROM ".MAIN_DB_PREFIX."c_pays"; $tabsql[5] = "SELECT c.rowid as rowid, c.code as code, c.civilite AS libelle, c.active FROM ".MAIN_DB_PREFIX."c_civilite AS c"; $tabsql[6] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.type, a.active FROM ".MAIN_DB_PREFIX."c_actioncomm AS a"; $tabsql[7] = "SELECT a.id as rowid, a.id as code, a.libelle AS libelle, a.deductible, a.active FROM ".MAIN_DB_PREFIX."c_chargesociales AS a"; $tabsql[8] = "SELECT id as rowid, code, libelle, active FROM ".MAIN_DB_PREFIX."c_typent"; $tabsql[9] = "SELECT code, code_iso, label as libelle, active FROM ".MAIN_DB_PREFIX."c_currencies"; $tabsql[10]= "SELECT t.rowid, t.taux, p.libelle as pays, t.recuperableonly, t.note, t.active FROM ".MAIN_DB_PREFIX."c_tva as t, llx_c_pays as p WHERE t.fk_pays=p.rowid"; $tabsql[11]= "SELECT t.rowid as rowid, element, source, code, libelle, active FROM ".MAIN_DB_PREFIX."c_type_contact AS t"; $tabsql[12]= "SELECT rowid as rowid, code, sortorder, c.libelle, c.libelle_facture, nbjour, fdm, decalage, active FROM ".MAIN_DB_PREFIX."cond_reglement AS c"; $tabsql[13]= "SELECT id as rowid, code, c.libelle, type, active FROM ".MAIN_DB_PREFIX."c_paiement AS c"; // Tri par defaut $tabsqlsort[1] ="pays, code ASC"; $tabsqlsort[2] ="pays, code ASC"; $tabsqlsort[3] ="pays, code ASC"; $tabsqlsort[4] ="libelle ASC"; $tabsqlsort[5] ="libelle ASC"; $tabsqlsort[6] ="a.type ASC, a.code ASC"; $tabsqlsort[7] ="a.libelle ASC"; $tabsqlsort[8] ="libelle ASC"; $tabsqlsort[9] ="code ASC"; $tabsqlsort[10]="pays ASC, taux ASC, recuperableonly ASC"; $tabsqlsort[11]="element ASC, source ASC, code ASC"; $tabsqlsort[12]="sortorder ASC, code ASC"; $tabsqlsort[13]="code ASC"; // Nom des champs en resultat de select pour affichage du dictionnaire $tabfield[1] = "code,libelle,pays"; $tabfield[2] = "code,libelle,region"; // "code,libelle,region" $tabfield[3] = "code,libelle,pays"; $tabfield[4] = "code,libelle"; $tabfield[5] = "code,libelle"; $tabfield[6] = "code,libelle,type"; $tabfield[7] = "libelle,deductible"; $tabfield[8] = "code,libelle"; $tabfield[9] = "code,code_iso,libelle"; $tabfield[10]= "pays,taux,recuperableonly,note"; $tabfield[11]= "element,source,code,libelle"; $tabfield[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage"; $tabfield[13]= "code,libelle,type"; // Nom des champs dans la table pour insertion d'un enregistrement $tabfieldinsert[1] = "code,libelle,fk_pays"; $tabfieldinsert[2] = "code_departement,nom,fk_region"; $tabfieldinsert[3] = "code_region,nom,fk_pays"; $tabfieldinsert[4] = "code,libelle"; $tabfieldinsert[5] = "code,civilite"; $tabfieldinsert[6] = "code,libelle,type"; $tabfieldinsert[7] = "libelle,deductible"; $tabfieldinsert[8] = "code,libelle"; $tabfieldinsert[9] = "code_iso,label"; $tabfieldinsert[10]= "fk_pays,taux,recuperableonly,note"; $tabfieldinsert[11]= "element,source,code,libelle"; $tabfieldinsert[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage"; $tabfieldinsert[13]= "code,libelle,type"; // Nom du rowid si le champ n'est pas de type autoincrément $tabrowid[1] = ""; $tabrowid[2] = ""; $tabrowid[3] = ""; $tabrowid[4] = "rowid"; $tabrowid[5] = "rowid"; $tabrowid[6] = "id"; $tabrowid[7] = "id"; $tabrowid[8] = "id"; $tabrowid[9] = "code"; $tabrowid[10]= ""; $tabrowid[11]= "rowid"; $tabrowid[12]= "rowid"; $tabrowid[13]= "id"; $msg=''; $sortfield=$_GET["sortfield"]; /* * Actions ajout d'une entrée dans un dictionnaire de donnée */ if ($_POST["actionadd"]) { $listfield=split(',',$tabfield[$_POST["id"]]); // Verifie que tous les champs sont renseignés $ok=1; foreach ($listfield as $f => $value) { if (! isset($_POST[$value]) || $_POST[$value]=='') { $ok=0; $msg.=$langs->trans("ErrorFieldRequired",$listfield[$f]).'
'; } } // Autres verif if (isset($_POST["code"]) && $_POST["code"]=='0') { $ok=0; $msg.="Le Code ne peut avoir la valeur 0
"; } if (isset($_POST["pays"]) && $_POST["pays"]=='0') { $ok=0; $msg.=$langs->trans("ErrorFieldRequired",$langs->trans("Country")).'
'; } // Si verif ok, on ajoute la ligne if ($ok) { if ($tabrowid[$_POST["id"]]) { // Recupere id libre pour insertion $newid=0; $sql = "SELECT max(".$tabrowid[$_POST["id"]].") newid from ".$tabname[$_POST["id"]]; $result = $db->query($sql); if ($result) { $obj = $db->fetch_object($result); $newid=($obj->newid + 1); } else { dolibarr_print_error($db); } } // Add new entry $sql = "INSERT INTO ".$tabname[$_POST["id"]]." ("; if ($tabrowid[$_POST["id"]]) $sql.= $tabrowid[$_POST["id"]].","; $sql.= $tabfieldinsert[$_POST["id"]]; $sql.=",active)"; $sql.= " VALUES("; // Ajoute valeur des champs if ($tabrowid[$_POST["id"]] && ! in_array($tabrowid[$_POST["id"]],$listfield)) $sql.= $newid.","; $i=0; foreach ($listfield as $f => $value) { if ($i) $sql.=","; $sql.="'".addslashes($_POST[$value])."'"; $i++; } $sql.=",1)"; $result = $db->query($sql); if (!$result) { if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { $msg=$langs->trans("ErrorRecordAlreadyExists").'
'; } else { dolibarr_print_error($db); } } } if ($msg) $msg='
'.$msg.'
'; $_GET["id"]=$_POST["id"]; // Force affichage dictionnaire en cours d'edition } if ($_GET["action"] == 'delete') // delete { if ($tabrowid[$_GET["id"]]) { $rowidcol=$tabrowid[$_GET["id"]]; } else { $rowidcol="rowid"; } $sql = "DELETE from ".$tabname[$_GET["id"]]." WHERE $rowidcol='".$_GET["rowid"]."'"; $result = $db->query($sql); if (! $result) { if ($db->errno() == 'DB_ERROR_CHILD_EXISTS') { $msg='
'.$langs->trans("ErrorRecordIsUsedByChild").'
'; } else { dolibarr_print_error($db); } } } if ($_GET["action"] == $acts[0]) // activate { if ($tabrowid[$_GET["id"]]) { $rowidcol=$tabrowid[$_GET["id"]]; } else { $rowidcol="rowid"; } if ($_GET["rowid"]) { $sql = "UPDATE ".$tabname[$_GET["id"]]." SET active = 1 WHERE $rowidcol='".$_GET["rowid"]."'"; } elseif ($_GET["code"]) { $sql = "UPDATE ".$tabname[$_GET["id"]]." SET active = 1 WHERE code='".$_GET["code"]."'"; } $result = $db->query($sql); if (!$result) { dolibarr_print_error($db); } } if ($_GET["action"] == $acts[1]) // disable { if ($tabrowid[$_GET["id"]]) { $rowidcol=$tabrowid[$_GET["id"]]; } else { $rowidcol="rowid"; } if ($_GET["rowid"]) { $sql = "UPDATE ".$tabname[$_GET["id"]]." SET active = 0 WHERE $rowidcol='".$_GET["rowid"]."'"; } elseif ($_GET["code"]) { $sql = "UPDATE ".$tabname[$_GET["id"]]." SET active = 0 WHERE code='".$_GET["code"]."'"; } $result = $db->query($sql); if (!$result) { dolibarr_print_error($db); } } llxHeader(); /* * Affichage d'un dictionnaire particulier */ if ($_GET["id"]) { print_fiche_titre($langs->trans("DictionnarySetup").' - '.$tablib[$_GET["id"]]); if ($msg) { print $msg.'
'; } // Complète requete recherche valeurs avec critere de tri $sql=$tabsql[$_GET["id"]]; if ($_GET["sortfield"]) { $sql .= " ORDER BY ".$_GET["sortfield"]; if ($_GET["sortorder"]) { $sql.=" ".$_GET["sortorder"]; } $sql.=", "; } else { $sql.=" ORDER BY "; } $sql.=$tabsqlsort[$_GET["id"]]; $fieldlist=split(',',$tabfield[$_GET["id"]]); print ''; // Ligne d'ajout if ($tabname[$_GET["id"]]) { $alabelisused=0; $var=false; $fieldlist=split(',',$tabfield[$_GET["id"]]); print '
'; print ''; print ''; // Ligne de titre d'ajout print ''; foreach ($fieldlist as $field => $value) { // Determine le nom du champ par rapport aux noms possibles // dans les dictionnaires de données $valuetoshow=ucfirst($fieldlist[$field]); // Par defaut if ($fieldlist[$field]=='source') $valuetoshow=$langs->trans("Contact"); if ($fieldlist[$field]=='lang') $valuetoshow=$langs->trans("Language"); if ($fieldlist[$field]=='type') $valuetoshow=$langs->trans("Type"); if ($fieldlist[$field]=='code') $valuetoshow=$langs->trans("Code"); if ($fieldlist[$field]=='libelle') $valuetoshow=$langs->trans("Label")."*"; if ($fieldlist[$field]=='libelle_facture') $valuetoshow=$langs->trans("LabelOnDocuments")."*"; if ($fieldlist[$field]=='pays') $valuetoshow=$langs->trans("Country"); if ($fieldlist[$field]=='recuperableonly') $valuetoshow=MENTION_NPR; if ($fieldlist[$field]=='nbjour') $valuetoshow=$langs->trans("NbOfDays"); if ($fieldlist[$field]=='fdm') $valuetoshow=$langs->trans("AtEndOfMonth"); if ($fieldlist[$field]=='decalage') $valuetoshow=$langs->trans("Offset"); print ''; if ($fieldlist[$field]=='libelle') $alabelisused=1; } print ''; print ''; print ''; // Ligne d'ajout print ""; $html = new Form($db); foreach ($fieldlist as $field => $value) { if ($fieldlist[$field] == 'pays') { print ''; } elseif ($fieldlist[$field] == 'region') { print ''; } elseif ($fieldlist[$field] == 'lang') { print ''; } // Le type de l'element (pour les type de contact).' elseif ($fieldlist[$field] == 'element') { $langs->load("orders"); $langs->load("contracts"); $langs->load("project"); $langs->load("propal"); $langs->load("bills"); print ''; } // La source de l'element (pour les type de contact).' elseif ($fieldlist[$field] == 'source') { print ''; } elseif ($fieldlist[$field] == 'type' && $tabname[$_GET["id"]] == MAIN_DB_PREFIX."c_actioncomm") { print ''; } elseif ($fieldlist[$field] == 'recuperableonly') { print ''; } elseif ($fieldlist[$field] == 'nbjour') { print ''; } elseif ($fieldlist[$field] == 'decalage') { print ''; } elseif ($fieldlist[$field] == 'fdm') { print ''; } else { print ''; } } print ''; print ""; if ($alabelisused) // Si un des champs est un libellé { print ''; } print ''; print ''; } // Affiche table des valeurs if ($db->query($sql)) { $num = $db->num_rows(); $i = 0; $var=true; if ($num) { // Ligne de titre print ''; foreach ($fieldlist as $field => $value) { // Determine le nom du champ par rapport aux noms possibles // dans les dictionnaires de données $valuetoshow=ucfirst($fieldlist[$field]); // Par defaut if ($fieldlist[$field]=='source') $valuetoshow=$langs->trans("Contact"); if ($fieldlist[$field]=='lang') $valuetoshow=$langs->trans("Language"); if ($fieldlist[$field]=='type') $valuetoshow=$langs->trans("Type"); if ($fieldlist[$field]=='code') $valuetoshow=$langs->trans("Code"); if ($fieldlist[$field]=='libelle') $valuetoshow=$langs->trans("Label")."*"; if ($fieldlist[$field]=='libelle_facture') $valuetoshow=$langs->trans("LabelOnDocuments")."*"; if ($fieldlist[$field]=='pays') $valuetoshow=$langs->trans("Country"); if ($fieldlist[$field]=='recuperableonly') $valuetoshow=MENTION_NPR; if ($fieldlist[$field]=='nbjour') $valuetoshow=$langs->trans("NbOfDays"); if ($fieldlist[$field]=='fdm') $valuetoshow=$langs->trans("AtEndOfMonth"); if ($fieldlist[$field]=='decalage') $valuetoshow=$langs->trans("Offset"); // Affiche nom du champ print_liste_field_titre($valuetoshow,"dict.php",$fieldlist[$field],"&id=".$_GET["id"],"","",$sortfield); } print_liste_field_titre($langs->trans("Action"),"dict.php","active","&id=".$_GET["id"],"",'align="center"',$sortfield); print ''; print ''; // Lignes de valeurs while ($i < $num) { $obj = $db->fetch_object(); $var=!$var; print ""; foreach ($fieldlist as $field => $value) { $valuetoshow=$obj->$fieldlist[$field]; if ($valuetoshow=='all') { $valuetoshow=$langs->trans('All'); } if ($fieldlist[$field]=='recuperableonly') { $valuetoshow=yn($valuetoshow); } if ($fieldlist[$field]=='fdm') { $valuetoshow=yn($valuetoshow); } print ''; } print '"; if ($iserasable) { print ''; } else { print ''; } print "\n"; $i++; } } } else { dolibarr_print_error($db); } print '
'; print $valuetoshow; print '  
'; $html->select_pays('','pays'); print ''; $html->select_region('','region'); print ''; $html->select_lang($conf->global->MAIN_LANG_DEFAULT,'lang'); print ''; $elementList = array("commande"=>$langs->trans("Order"), "contrat"=>$langs->trans("Contract"), "projet"=>$langs->trans("Project"), "propal"=>$langs->trans("Propal"), "facture"=>$langs->trans("Bill")); $html->select_array('element', $elementList); print ''; $elementList = array("internal"=>$langs->trans("Internal"), "external"=>$langs->trans("External")); $html->select_array('source', $elementList); print ''; print 'user'; print ''; $html->selectyesno('recuperableonly','',1); print ''; $html->selectyesno('fdm','',1); print '
* '.$langs->trans("LabelUsedByDefault").'.
 
 
'.$valuetoshow.''; // Est-ce une entrée du dictionnaire qui peut etre désactivée ? $iserasable=1; // Oui par defaut if (isset($obj->code) && ($obj->code == '0' || $obj->code == '' || eregi('unknown',$obj->code))) $iserasable=0; if ($obj->type && $obj->type == 'system') $iserasable=0; if ($iserasable) { print ''.$actl[$obj->active].''; } else { print $langs->trans("AlwaysActive"); } print " 
'; } else { /* * Affichage de la liste des dictionnaires */ print_fiche_titre($langs->trans("DictionnarySetup")); $var=true; print ''; print ''; foreach ($taborder as $i) { $var=!$var; if ($i) { $value=$tabname[$i]; print ''; } else { print ''; } } print '
'.$langs->trans("Dictionnary").''.$langs->trans("Table").'
'.$tablib[$i].''.$tabname[$i].'
  
'; } print '
'; $db->close(); llxFooter('$Date$ - $Revision$'); ?>