* Copyright (C) 2004-2006 Laurent Destailleur * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2004 Sebastien Di Cintio * Copyright (C) 2004 Eric Seigne * Copyright (C) 2005-2007 Regis Houssin * Copyright (C) 2006 Andre Cianfarani * Copyright (C) 2006 Marc Barilley/Océbo * Copyright (C) 2007 Franky Van Liedekerke * Copyright (C) 2007 Patrick Raguin * * 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/html.form.class.php \brief Fichier de la classe des fonctions prédéfinie de composants html \version $Revision$ */ /** \class Form \brief Classe permettant la génération de composants html */ class Form { var $db; var $error; var $cache_types_paiements_code=array(); var $cache_types_paiements_libelle=array(); var $cache_conditions_paiements_code=array(); var $cache_conditions_paiements_libelle=array(); var $tva_taux; /** \brief Constructeur \param DB handler d'accès base de donnée */ function Form($DB) { $this->db = $DB; return 1; } /** \brief Affiche un texte+picto avec tooltip sur texte ou sur picto \param text Texte à afficher \param htmltext Contenu html du tooltip, codé en html \param tooltipon 1=tooltip sur texte, 2=tooltip sur picto, 3=tooltip sur les 2 \param direction -1=Le picto est avant, 0=pas de picto, 1=le picto est après \param img Code img du picto \return string Code html du texte,picto */ function textwithtooltip($text,$htmltext,$tooltipon=1,$direction=0,$img='') { global $conf; if (! $htmltext) return $text; $paramfortooltiptext =''; $paramfortooltippicto =''; if ($conf->use_javascript) { // Sanitize tooltip $htmltext=ereg_replace("'","\'",$htmltext); $htmltext=ereg_replace("'","\'",$htmltext); if ($tooltipon==1 || $tooltipon==3) { $paramfortooltiptext.=' onmouseover="showtip(\''.$htmltext.'\')"'; $paramfortooltiptext.=' onMouseout="hidetip()"'; } if ($tooltipon==2 || $tooltipon==3) { $paramfortooltippicto.=' onmouseover="showtip(\''.$htmltext.'\')"'; $paramfortooltippicto.=' onMouseout="hidetip()"'; } } $s=""; $s.=''; if ($direction > 0) { if ($text) { $s.=''.$text; if ($direction) $s.=' '; $s.=''; } if ($direction) $s.=''.$img.''; } else { if ($direction) $s.=''.$img.''; if ($text) { $s.=''; if ($direction) $s.=' '; $s.=$text.''; } } $s.='
'; return $s; } /** \brief Affiche un texte avec picto help qui affiche un tooltip \param text Texte à afficher \param htmltooltip Contenu html du tooltip \param direction 1=Le picto est après, -1=le picto est avant \param usehelpcursor 1=Utilise curseur help, 0=Curseur par defaut \return string Code html du texte,picto */ function textwithhelp($text,$htmltext,$direction=1,$usehelpcursor=1) { return $this->textwithtooltip($text,$htmltext,2,$direction,img_help($usehelpcursor,0)); } /** \brief Affiche un texte avec picto warning qui affiche un tooltip \param text Texte à afficher \param htmltooltip Contenu html du tooltip \param direction 1=Le picto est après, -1=le picto est avant \return string Code html du texte,picto */ function textwithwarning($text,$htmltext,$direction=1) { return $this->textwithtooltip($text,$htmltext,2,$direction,img_warning("")); } /** * \brief Retourne la liste déroulante des départements/province/cantons tout pays confondu ou pour un pays donné. * \remarks Dans le cas d'une liste tout pays confondus, l'affichage fait une rupture sur le pays. * \remarks La cle de la liste est le code (il peut y avoir plusieurs entrée pour * un code donnée mais dans ce cas, le champ pays diffère). * Ainsi les liens avec les départements se font sur un département indépendemment de nom som. * \param selected code forme juridique a présélectionné * \param pays_code 0=liste tous pays confondus, sinon code du pays à afficher */ function select_departement($selected='',$pays_code=0) { dolibarr_syslog("Form::select_departement selected=$selected, pays_code=$pays_code",LOG_DEBUG); global $conf,$langs; $langs->load("dict"); $htmlname='departement_id'; // On recherche les départements/cantons/province active d'une region et pays actif $sql = "SELECT d.rowid, d.code_departement as code , d.nom, d.active, p.libelle as libelle_pays, p.code as code_pays FROM"; $sql .= " ".MAIN_DB_PREFIX ."c_departements as d, ".MAIN_DB_PREFIX."c_regions as r,".MAIN_DB_PREFIX."c_pays as p"; $sql .= " WHERE d.fk_region=r.code_region and r.fk_pays=p.rowid"; $sql .= " AND d.active = 1 AND r.active = 1 AND p.active = 1"; if ($pays_code) $sql .= " AND p.code = '".$pays_code."'"; $sql .= " ORDER BY p.code, d.code_departement"; $result=$this->db->query($sql); if ($result) { print ''; } else { dolibarr_print_error($this->db); } } /** * \brief Retourne la liste déroulante des regions actives dont le pays est actif * \remarks La cle de la liste est le code (il peut y avoir plusieurs entrée pour * un code donnée mais dans ce cas, le champ pays et lang diffère). * Ainsi les liens avec les regions se font sur une region independemment * de nom som. */ function select_region($selected='',$htmlname='region_id') { global $conf,$langs; $langs->load("dict"); $sql = "SELECT r.rowid, r.code_region as code, r.nom as libelle, r.active, p.libelle as libelle_pays FROM ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_pays as p"; $sql .= " WHERE r.fk_pays=p.rowid AND r.active = 1 and p.active = 1 ORDER BY libelle_pays, libelle ASC"; if ($this->db->query($sql)) { print ''; } else { dolibarr_print_error($this->db); } } /** * \brief Renvoie la liste des sources de commandes * \param selected Id de la source pré-sélectionnée * \param htmlname Nom de la liste deroulante * \param addempty 0=liste sans valeur nulle, 1=ajoute valeur inconnue * \return array Tableau des sources de commandes */ function selectSourcesCommande($selected='',$htmlname='source_id',$addempty=0) { global $conf,$langs; print ''; } /** * * */ function select_methodes_commande($selected='',$htmlname='source_id',$addempty=0) { global $conf,$langs; $listemethodes=array(); $sql = "SELECT rowid, libelle "; $sql.= " FROM ".MAIN_DB_PREFIX."c_methode_commande_fournisseur"; $sql.= " WHERE active = 1"; $resql=$this->db->query($sql); if ($resql) { $i = 0; $num = $this->db->num_rows($resql); while ($i < $num) { $obj = $this->db->fetch_object($resql); $listemethodes[$obj->rowid] = $obj->libelle; $i++; } } else { dolibarr_print_error($this->db); return -1; } print $this->select_array($htmlname,$listemethodes,$selected,$addempty); return 1; } /** * \brief Retourne la liste déroulante des pays actifs, dans la langue de l'utilisateur * \param selected Id ou code pays pré-sélectionné * \param htmlname Nom de la liste deroulante * \param htmloption Options html sur le select * \todo trier liste sur noms après traduction plutot que avant */ function select_pays($selected='',$htmlname='pays_id',$htmloption='') { global $conf,$langs; $langs->load("dict"); $sql = "SELECT rowid, code, libelle, active"; $sql.= " FROM ".MAIN_DB_PREFIX."c_pays"; $sql.= " WHERE active = 1"; if ($conf->use_ajax && $conf->global->CODE_DE_TEST == 1) { if (is_numeric($selected)) { $sql.= " AND rowid = ".$selected; } else { $sql.= " AND code = '".$selected."'"; } } $sql.= " ORDER BY code ASC;"; $resql=$this->db->query($sql); if ($resql) { if ($conf->use_ajax && $conf->global->CODE_DE_TEST == 1) { $langs->load("companies"); $obj = $this->db->fetch_object($resql); $pays_id = $obj->rowid?$obj->rowid:''; // On applique un delai d'execution pour le bon fonctionnement $mode_create = substr($htmloption,-9,6); $mode_edit = substr($htmloption,-7,4); $mode_company = substr($htmloption,-10,7); if ($mode_create == 'create') { $htmloption = 'onChange="ac_delay(\'autofilltownfromzip_save_refresh_create()\',\'500\')"'; } else if ($mode_edit == 'edit') { $htmloption = 'onChange="ac_delay(\'autofilltownfromzip_save_refresh_edit()\',\'500\')"'; } else if ($mode_company == 'refresh') { $htmloption = 'onChange="ac_delay(\'company_save_refresh()\',\'500\')"'; } print '
'; if ($obj->rowid == 0) { print ''; } else { print ''; } print ajax_autocompleter($pays_id,'pays','/societe/ajaxcountries.php','working'); } else { print ''; return 0; } } else { dolibarr_print_error($this->db); return 1; } } /** * \brief Retourne la liste déroulante des langues disponibles * \param selected Langue présélectionnée * \param htmlname Nom de la zone select * \param showauto Affiche choix auto */ function select_lang($selected='',$htmlname='lang_id',$showauto=0) { global $langs; $langs_available=$langs->get_available_languages(); print ''; } /** * \brief Retourne la liste déroulante des menus disponibles * \param selected Menu pré-sélectionnée * \param htmlname Nom de la zone select * \param dirmenu Repértoire à scanner */ function select_menu($selected='',$htmlname,$dirmenu) { global $langs; if ($selected == 'eldy.php') $selected='eldy_backoffice.php'; // Pour compatibilité print ''; } /** * \brief Retourne la liste des types de comptes financiers * \param selected Type pré-sélectionné * \param htmlname Nom champ formulaire */ function select_type_comptes_financiers($selected=1,$htmlname='type') { global $langs; $langs->load("banks"); $type_available=array(0,1,2); print ''; } /** * \brief Retourne la liste déroulante des sociétés * \param selected Societe présélectionnée * \param htmlname Nom champ formulaire * \param filter Criteres optionnels de filtre */ function select_societes($selected='',$htmlname='socid',$filter='',$showempty=0) { // 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=$this->db->query($sql); if ($resql) { print ''; } else { dolibarr_print_error($this->db); } } /** * \brief Retourne la liste déroulante des remises fixes * \param selected Id remise fixe présélectionnée * \param htmlname Nom champ formulaire * \param filter Criteres optionnels de filtre */ function select_remises($selected='',$htmlname='remise_id',$filter='',$socid) { global $langs,$conf; // On recherche les societes $sql = "SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,"; $sql.= " re.description"; $sql.= " FROM ".MAIN_DB_PREFIX ."societe_remise_except as re"; $sql.= " WHERE fk_soc = ".$socid; if ($filter) $sql.= " AND ".$filter; $sql.= " ORDER BY re.description ASC"; $resql=$this->db->query($sql); if ($resql) { 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 ('none' pour champ non editable) * \return int <0 si ko, >=0 si ok */ function select_contacts($socid,$selected='',$htmlname='contactid',$showempty=0) { // 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"; $resql=$this->db->query($sql); if ($resql) { $num=$this->db->num_rows(); if ($num==0) return 0; if ($htmlname != 'none') print ''; return 1; } else { dolibarr_print_error($this->db); return -1; } } /** * \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',$show_empty=0) { // On recherche les utilisateurs $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é \param htmlname Nom de la zone html \return int Nbre de projet si ok, <0 si ko */ function select_projects($socid, $selected='', $htmlname='projectid') { // On recherche les projets $sql = 'SELECT p.rowid, p.title FROM '; $sql.= MAIN_DB_PREFIX .'projet as p'; $sql.= " WHERE fk_soc='".$socid."'"; $sql.= " ORDER BY p.title ASC"; $resql=$this->db->query($sql); if ($resql) { print ''; $this->db->free($resql); return $num; } else { dolibarr_print_error($this->db); return -1; } } /** \brief Retourne la liste des produits en Ajax si ajax activé ou renvoie à select_produits_do \param selected Produit présélectionné \param htmlname Nom de la zone select \param filtretype Pour filtre sur type de produit \param limit Limite sur le nombre de lignes retournées \param price_level Niveau de prix en fonction du client */ function select_produits($selected='',$htmlname='productid',$filtretype='',$limit=20,$price_level=0) { global $langs,$conf; if ($conf->global->PRODUIT_USE_SEARCH_TO_SELECT) { print ''; print ''; print ''; print ''; print ''; print ''; print ''; print '
'; print $langs->trans("RefOrLabel").':'; print ajax_updater_indicator($htmlname,'working'); print ' '; print '
'; print ajax_updater($htmlname,'keysearch','/product/ajaxproducts.php','&price_level='.$price_level.'&type=1',''); print '
'; } else { $this->select_produits_do($selected,$htmlname,$filtretype,$limit,$price_level); } } /** \brief Retourne la liste des produits \param selected Produit présélectionné \param htmlname Nom de la zone select \param filtretype Pour filtre sur type de produit \param limit Limite sur le nombre de lignes retournées \param price_level Niveau de prix en fonction du client \param ajaxkeysearch Filtre des produits si ajax est utilisé */ function select_produits_do($selected='',$htmlname='productid',$filtretype='',$limit=20,$price_level=0,$ajaxkeysearch='') { global $langs,$conf,$user; $user->getrights("categorie"); $sql = "SELECT "; if ($conf->categorie->enabled && ! $user->rights->categorie->voir) { $sql.="DISTINCT"; } $sql.= " p.rowid, p.label, p.ref, p.price, p.duration"; $sql.= " FROM ".MAIN_DB_PREFIX."product as p "; if ($conf->categorie->enabled && ! $user->rights->categorie->voir) { $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie_product as cp ON p.rowid = cp.fk_product"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie as c ON cp.fk_categorie = c.rowid"; } $sql.= " WHERE p.envente = 1"; if ($conf->categorie->enabled && ! $user->rights->categorie->voir) { $sql.= ' AND IFNULL(c.visible,1)=1'; } if ($filtretype && $filtretype != '') $sql.=" AND p.fk_product_type=".$filtretype; if ($ajaxkeysearch && $ajaxkeysearch != '') $sql.=" AND p.ref like '%".$ajaxkeysearch."%' OR p.label like '%".$ajaxkeysearch."%'"; $sql.= " ORDER BY p.nbvente DESC"; if ($limit) $sql.= " LIMIT $limit"; dolibarr_syslog("Form::select_produits_do sql=$sql",LOG_DEBUG); $result=$this->db->query($sql); if (! $result) dolibarr_print_error($this->db); // Multilang : on construit une liste des traductions des produits listés if ($conf->global->MAIN_MULTILANGS) { $sqld = "SELECT d.fk_product, d.label"; $sqld.= " FROM ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."product_det as d "; $sqld.= " WHERE d.fk_product=p.rowid AND p.envente=1 AND d.lang='". $langs->getDefaultLang() ."'"; $sqld.= " ORDER BY p.nbvente DESC"; $resultd = $this->db->query($sqld); if ( $resultd ) $objtp = $this->db->fetch_object($resultd); } if ($result) { $num = $this->db->num_rows($result); if ($conf->use_ajax) { if (! $num) { print ''; print ''; } } else { print ''; $this->db->free($result); } else { dolibarr_print_error($db); } } /** \brief Retourne la liste des produits fournisseurs en Ajax si ajax activé ou renvoie à select_produits_fournisseurs_do \param selected Produit présélectionné \param htmlname Nom de la zone select \param filtretype Pour filtre sur type de produit \param limit Limite sur le nombre de lignes retournées */ function select_produits_fournisseurs($socid,$selected='',$htmlname='productid',$filtretype='',$filtre='') { global $langs,$conf; if ($conf->global->PRODUIT_USE_SEARCH_TO_SELECT) { print $langs->trans("RefOrLabel").' : '; print ajax_updater($htmlname,'keysearch','/product/ajaxproducts.php','&socid='.$socid.'&type=2','working'); } else { $this->select_produits_fournisseurs_do($socid,$selected,$htmlname,$filtretype,$filtre); } } /** \brief Retourne la liste des produits de fournisseurs \param socid Id société (0 pour aucun filtre) \param selected Produit présélectionné \param htmlname Nom de la zone select \param filtretype Pour filtre sur type de produit \param filtre Pour filtre \param ajaxkeysearch Filtre des produits si ajax est utilisé */ function select_produits_fournisseurs_do($socid,$selected='',$htmlname='productid',$filtretype='',$filtre='',$ajaxkeysearch='') { global $langs,$conf; $sql = "SELECT p.rowid, p.label, p.ref, p.price, p.duration"; //$sql.= ", pf.ref_fourn"; $sql.= ", pfp.price as fprice, pfp.quantity"; $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; //$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur as pf ON p.rowid = pf.fk_product"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product"; $sql.= " WHERE p.envente = 1"; if ($socid) $sql.= " AND pfp.fk_soc = ".$socid; if ($filtretype && $filtretype != '') $sql.=" AND p.fk_product_type=".$filtretype; if ($filtre) $sql.="$filtre"; if ($ajaxkeysearch && $ajaxkeysearch != '') $sql.=" AND p.ref like '%".$ajaxkeysearch."%' OR p.label like '%".$ajaxkeysearch."%'"; $sql.= " ORDER BY p.ref DESC"; dolibarr_syslog("Form::select_produits_fournisseurs sql=$sql",LOG_DEBUG); $result=$this->db->query($sql); if ($result) { $num = $this->db->num_rows($result); if ($conf->use_ajax) { if (! $num) { print ''; print ''; } } else { print ''; $this->db->free($result); } else { dolibarr_print_error($db); } } /** * \brief Retourne la liste déroulante des adresses de livraison * \param selected Id contact pré-sélectionn * \param htmlname Nom champ formulaire */ function select_adresse_livraison($selected='', $socid, $htmlname='adresse_livraison_id',$showempty=0) { // On recherche les utilisateurs $sql = "SELECT a.rowid, a.label"; $sql .= " FROM ".MAIN_DB_PREFIX ."societe_adresse_livraison as a"; $sql .= " WHERE a.fk_societe = ".$socid; $sql .= " ORDER BY a.label ASC"; if ($this->db->query($sql)) { print ''; return $num; } else { dolibarr_print_error($this->db); } } /** * \brief Charge dans cache la liste des conditions de paiements possibles * \return int Nb lignes chargées, 0 si déjà chargées, <0 si ko */ function load_cache_conditions_paiements() { global $langs; if (sizeof($this->cache_conditions_paiements_code)) return 0; // Cache déja chargé dolibarr_syslog('Form::load_cache_conditions_paiements',LOG_DEBUG); $sql = "SELECT rowid, code, libelle"; $sql.= " FROM ".MAIN_DB_PREFIX."cond_reglement"; $sql.= " WHERE active=1"; $sql.= " ORDER BY sortorder"; $resql = $this->db->query($sql); if ($resql) { $num = $this->db->num_rows($result); $i = 0; while ($i < $num) { $obj = $this->db->fetch_object($resql); // Si traduction existe, on l'utilise, sinon on prend le libellé par défaut $libelle=($langs->trans("PaymentConditionShort".$obj->code)!=("PaymentConditionShort".$obj->code)?$langs->trans("PaymentConditionShort".$obj->code):($obj->libelle!='-'?$obj->libelle:'')); $this->cache_conditions_paiements_code[$obj->rowid]=$obj->code; $this->cache_conditions_paiements_libelle[$obj->rowid]=$libelle; $i++; } return 1; } else { dolibarr_print_error($this->db); return -1; } } /** * \brief Charge dans cache la liste des types de paiements possibles * \return int Nb lignes chargées, 0 si déjà chargées, <0 si ko */ function load_cache_types_paiements() { global $langs; if (sizeof($this->cache_types_paiements_code)) return 0; // Cache déja chargé dolibarr_syslog('Form::load_cache_types_paiements',LOG_DEBUG); $sql = "SELECT id, code, libelle, type"; $sql.= " FROM ".MAIN_DB_PREFIX."c_paiement"; $sql.= " WHERE active > 0"; $sql.= " ORDER BY id"; $resql = $this->db->query($sql); if ($resql) { $num = $this->db->num_rows($result); $i = 0; while ($i < $num) { $obj = $this->db->fetch_object($resql); // Si traduction existe, on l'utilise, sinon on prend le libellé par défaut $libelle=($langs->trans("PaymentTypeShort".$obj->code)!=("PaymentTypeShort".$obj->code)?$langs->trans("PaymentTypeShort".$obj->code):($obj->libelle!='-'?$obj->libelle:'')); $this->cache_types_paiements_code[$obj->id]=$obj->code; $this->cache_types_paiements_libelle[$obj->id]=$libelle; $this->cache_types_paiements_type[$obj->id]=$obj->type; $i++; } return $num; } else { dolibarr_print_error($this->db); return -1; } } /** * \brief Retourne la liste des types de paiements possibles * \param selected Id du type de paiement présélectionné * \param htmlname Nom de la zone select * \param filtertype Pour filtre * \param addempty Ajoute entrée vide */ function select_conditions_paiements($selected='',$htmlname='condid',$filtertype=-1,$addempty=0) { global $langs; $this->load_cache_conditions_paiements(); print ''; } /** * \brief Selection HT ou TTC * \param selected Id présélectionné * \param htmlname Nom de la zone select */ function select_PriceBaseType($selected='',$htmlname='price_base_type') { global $langs; print ''; } /** * \brief Retourne la liste des modes de paiements possibles * \param selected Id du mode de paiement présélectionné * \param htmlname Nom de la zone select * \param filtertype Pour filtre * \param format 0=id+libelle, 1=code+code, 2=code+libelle * \param empty 1=peut etre vide, 0 sinon */ function select_types_paiements($selected='',$htmlname='paiementtype',$filtertype='',$format=0, $empty=0) { global $langs; dolibarr_syslog("Form::select_type_paiements $selected, $htmlname, $filtertype, $format",LOG_DEBUG); $filterarray=array(); if ($filtertype == 'CRDT') $filterarray=array(0,2); elseif ($filtertype == 'DBIT') $filterarray=array(1,2); elseif ($filtertype != '' && $filtertype != '-1') $filterarray=split(',',$filtertype); $this->load_cache_types_paiements(); print ''; } /** * \brief Retourne la liste des comptes * \param selected Id compte présélectionné * \param htmlname Nom de la zone select * \param statut Statut des comptes recherchés * \param filtre Pour filtre sur la liste * \param useempty Affiche valeur vide dans liste */ function select_comptes($selected='',$htmlname='accountid',$statut=0,$filtre='',$useempty=0) { global $langs; $sql = "SELECT rowid, label, bank"; $sql.= " FROM ".MAIN_DB_PREFIX."bank_account"; $sql.= " WHERE clos = '".$statut."'"; if ($filtre) $sql.=" AND ".$filtre; $sql.= " ORDER BY rowid"; $result = $this->db->query($sql); if ($result) { print '"; } else { dolibarr_print_error($this->db); } } /** * \brief Retourne la ou les listes déroulante des catégories en fonction * du nombre choisi * \param selected nombre de catégorie à créer */ function select_all_categories($type,$selected='',$select_name="") { global $langs; $langs->load("categorie"); if ($select_name=="") $select_name="catMere"; $cat = new Categorie ($this -> db); $cate_arbo = $cat->get_full_arbo($type); $output = ''; $output.= "\n"; return $output; } /** * \brief Retourne la liste déroulante des civilite actives * \param selected civilite pré-sélectionnée */ function select_civilite($selected='') { global $conf,$langs; $langs->load("dict"); $sql = "SELECT rowid, code, civilite, active FROM ".MAIN_DB_PREFIX."c_civilite"; $sql .= " WHERE active = 1"; if ($this->db->query($sql)) { print ''; } else { dolibarr_print_error($this->db); } } /** * \brief Retourne le nom traduit de la civilité * \param code Code de la civilité * \return string Nom traduit de la civilité */ function civilite_name($code) { global $langs; $langs->load("dict"); return $langs->trans("Civility".$code)!="Civility".$code ? $langs->trans("Civility".$code) : $code; } /** * \brief Retourne la liste déroulante des formes juridiques tous pays confondus ou pour un pays donné. * \remarks Dans le cas d'une liste tous pays confondu, on affiche une rupture sur le pays * \param selected Code forme juridique a présélectionn * \param pays_code 0=liste tous pays confondus, sinon code du pays à afficher */ function select_forme_juridique($selected='',$pays_code=0) { global $conf,$langs; $langs->load("dict"); // On recherche les formes juridiques actives des pays actifs $sql = "SELECT f.rowid, f.code as code , f.libelle as nom, f.active, p.libelle as libelle_pays, p.code as code_pays"; $sql .= " FROM llx_c_forme_juridique as f, llx_c_pays as p"; $sql .= " WHERE f.fk_pays=p.rowid"; $sql .= " AND f.active = 1 AND p.active = 1"; if ($pays_code) $sql .= " AND p.code = '".$pays_code."'"; $sql .= " ORDER BY p.code, f.code"; $result=$this->db->query($sql); if ($result) { print '
'; print ''; print '
'; } else { dolibarr_print_error($this->db); } } /** * \brief Retourne le nom traduit de la forme juridique * \param code Code de la forme juridique * \return string Nom traduit du pays */ function forme_juridique_name($code) { global $langs; if (! $code) return ''; $sql = "SELECT libelle FROM ".MAIN_DB_PREFIX."c_forme_juridique"; $sql.= " WHERE code='$code';"; if ($this->db->query($sql)) { $num = $this->db->num_rows(); if ($num) { $obj = $this->db->fetch_object(); $label=($obj->libelle!='-' ? $obj->libelle : ''); return $label; } else { return $langs->trans("NotDefined"); } } } /** * \brief Retourne le formulaire de saisie d'un identifiant professionnel (siren, siret, etc...) * \param idprof 1,2,3,4 (Exemple: 1=siren,2=siret,3=naf,4=rcs/rm) * \param soc Objet societe * \param htmlname Nom de la zone input */ function id_prof($idprof,$soc,$htmlname,$selected='') { global $langs; $formlength=16; if ($idprof==1 && $soc->pays_code == 'FR') $formlength=9; if ($idprof==2 && $soc->pays_code == 'FR') $formlength=14; if ($idprof==3 && $soc->pays_code == 'FR') $formlength=4; if ($idprof==4 && $soc->pays_code == 'FR') $formlength=12; print ''; } /** * \brief Retourne le nom traduit ou code+nom d'un pays * \param id id du pays * \param withcode 1=affiche code + nom * \return string Nom traduit du pays */ function pays_name($id,$withcode=0) { global $langs; $sql = "SELECT rowid, code, libelle FROM ".MAIN_DB_PREFIX."c_pays"; $sql.= " WHERE rowid=$id;"; if ($this->db->query($sql)) { $num = $this->db->num_rows(); if ($num) { $obj = $this->db->fetch_object(); $label=$obj->code && $langs->trans("Country".$obj->code)!="Country".$obj->code?$langs->trans("Country".$obj->code):($obj->libelle!='-'?$obj->libelle:''); if ($withcode) return $label==$obj->code?"$obj->code":"$obj->code - $label"; else return $label; } else { return $langs->trans("NotDefined"); } } } /** * \brief Retourne le nom traduit ou code+nom d'une devise * \param code_iso Code iso de la devise * \param withcode 1=affiche code + nom * \return string Nom traduit de la devise */ function currency_name($code_iso,$withcode=0) { global $langs; // Si il existe une traduction, on peut renvoyer de suite le libellé if ($langs->trans("Currency".$code_iso)!="Currency".$code_iso) { return $langs->trans("Currency".$code_iso); } // Si pas de traduction, on consulte libellé par défaut en table $sql = "SELECT label FROM ".MAIN_DB_PREFIX."c_currencies"; $sql.= " WHERE code_iso='$code_iso';"; if ($this->db->query($sql)) { $num = $this->db->num_rows(); if ($num) { $obj = $this->db->fetch_object(); $label=($obj->label!='-'?$obj->label:''); if ($withcode) return $label==$code_iso?"$code_iso":"$code_iso - $label"; else return $label; } else { return $code_iso; } } } /** * \brief Affiche formulaire de demande de confirmation * \param page page * \param title title * \param question question * \param action action * \param formquestion an array with forms complementary inputs */ function form_confirm($page, $title, $question, $action, $formquestion='') { global $langs; print '
'; print ''; print ''; // Ligne titre print ''; // Ligne formulaire if ($formquestion) { print ''; } // Ligne message print ''; print ''; print ''; print ''; print ''; print '
'.img_picto('','recent').' '.$title.'
'; print ''; print ''; foreach ($formquestion as $key => $input) { if ($input['type'] == 'text') { print ''; } if ($input['type'] == 'select') { // TODO } if ($input['type'] == 'radio') { $i=0; foreach($input['values'] as $selkey => $selval) { print ''; if ($i==0) print ''; else print ''; print ''; print ''; $i++; } } } print '
'.$formquestion['text'].'
'.$input['label'].'
'.$input['label'].' '; print $selval; print '
'; print '
'.$question.''; print $this->selectyesno("confirm","no"); print '
'; if (is_array($formquestion)) { foreach ($formquestion as $key => $input) { if ($input['type'] == 'hidden') print ''; } } print "
\n"; } /** * \brief Affiche formulaire de selection de projet * \param page Page * \param socid Id societe * \param selected Id projet présélectionné * \param htmlname Nom du formulaire select */ function form_project($page, $socid, $selected='', $htmlname='projectid') { global $langs; $langs->load("project"); if ($htmlname != "none") { print '
'; print ''; print ''; print ''; print ''; print '
'; $this->select_projects($socid,$selected,$htmlname); print '
'; } else { if ($selected) { $projet = New Project($this->db); $projet->fetch($selected); print ''.$projet->title.''; } else { print " "; } } } /** * \brief Affiche formulaire de selection de conditions de paiement * \param page Page * \param selected Id condition présélectionnée * \param htmlname Nom du formulaire select * \param addempty Ajoute entrée vide */ function form_conditions_reglement($page, $selected='', $htmlname='cond_reglement_id', $addempty=0) { global $langs; if ($htmlname != "none") { print '
'; print ''; print ''; print ''; print ''; print '
'; $this->select_conditions_paiements($selected,$htmlname,-1,$addempty); print '
'; } else { if ($selected) { $this->load_cache_conditions_paiements(); print $this->cache_conditions_paiements_libelle[$selected]; } else { print " "; } } } /** * \brief Affiche formulaire de selection de l'assujétissement à la TVA * \param page Page * \param selected Id condition présélectionnée * \param htmlname Nom du formulaire select */ function form_assujetti_tva($page, $selected='', $htmlname='') { global $langs; $options = array(0=>"non",1=>"oui"); if ($htmlname != "none") { print '
'; print ''; print ''; print ''; print ''; print '
'; $this->select_assujetti_tva($selected,$htmlname); print '
'; } else { if ($selected != "") { print $options[$selected]; } else { print " "; } } } /** * \brief Affiche formulaire de selection des modes de reglement * \param page Page * \param selected Id mode présélectionné * \param htmlname Nom du formulaire select */ function form_modes_reglement($page, $selected='', $htmlname='mode_reglement_id') { global $langs; if ($htmlname != "none") { print '
'; print ''; print ''; print ''; print ''; print '
'; $this->select_types_paiements($selected,$htmlname); print '
'; } else { if ($selected) { $this->load_cache_types_paiements(); print $this->cache_types_paiements_libelle[$selected]; } else { print " "; } } } /** * \brief Affiche formulaire de selection de la remise relative * \param page Page * \param selected Valeur remise * \param htmlname Nom du formulaire select. Si none, non modifiable */ function form_remise_percent($page, $selected='', $htmlname='remise_percent') { global $langs; if ($htmlname != "none") { print '
'; print ''; print ''; print ''; print ''; print '
'; print '%'; print '
'; } else { if ($selected) { print $selected; } else { print "0%"; } } } /** * \brief Affiche formulaire ajout fichier * \param url Url * \param titre Titre zone * \param addcancel 1=Ajoute un bouton 'Annuler' * \return int <0 si ko, >0 si ok */ function form_attach_new_file($url,$titre='',$addcancel=0) { global $conf,$langs; if ($conf->upload != 0) { print "\n\n\n"; if (! $titre) $titre=$langs->trans("AttachANewFile"); print_titre($titre); print '
'; print ''; print '"; print "
'; $max=$conf->upload; // En Kb $maxphp=@ini_get('upload_max_filesize'); // En inconnu if (eregi('m$',$maxphp)) $maxphp=$maxphp*1024; if (eregi('k$',$maxphp)) $maxphp=$maxphp; // Now $max and $maxphp are in Kb if ($maxphp > 0) $max=min($max,$maxphp); if ($conf->upload > 0) { print ''; } print ''; print '   '; print ''; if ($addcancel) { print '   '; print ''; } print ' ('.$langs->trans("MaxSize").': '.$max.' '.$langs->trans("Kb").')'; print "
"; print '
'; print '
'; print "\n\n\n"; } return 1; } /** * \brief Affiche formulaire de selection de la remise fixe * \param page Page * \param selected Valeur à appliquer * \param htmlname Nom du formulaire select. Si none, non modifiable */ function form_remise_dispo($page, $selected='', $htmlname='remise_id',$socid, $absolute_discount) { global $conf,$langs; if ($htmlname != "none") { print '
'; print ''; print ''; print ''; print ''; print '
'; print $langs->trans("CompanyHasAbsoluteDiscount",$absolute_discount,$langs->trans("Currency".$conf->monnaie)).': '; // print $langs->trans("AvailableGlobalDiscounts").': '; print $this->select_remises('',$htmlname,'fk_facture IS NULL',$socid); print '
'; } else { if ($selected) { print $selected; } else { print "0"; } } } /** * \brief Affiche formulaire de selection des contacts * \param page Page * \param selected Id contact présélectionné * \param htmlname Nom du formulaire select */ function form_contacts($page, $societe, $selected='', $htmlname='contactidp') { global $langs; if ($htmlname != "none") { print '
'; print ''; print ''; print ''; print ''; print '
'; $num=$this->select_contacts($societe->id, $selected, $htmlname); if ($num==0) { print 'Cette societe n\'a pas de contact, veuillez en créer un avant de faire votre proposition commerciale
'; print ''.$langs->trans('AddContact').''; } print '
'; } else { if ($selected) { require_once(DOL_DOCUMENT_ROOT ."/contact.class.php"); //$this->load_cache_contacts(); //print $this->cache_contacts[$selected]; $contact=new Contact($this->db); $contact->fetch($selected); print $contact->nom.' '.$contact->prenom; } else { print " "; } } } /** * \brief Affiche formulaire de selection de l'adresse de livraison * \param page Page * \param selected Id condition présélectionnée * \param htmlname Nom du formulaire select * \param origin Origine de l'appel pour pouvoir créer un retour * \param originid Id de l'origine */ function form_adresse_livraison($page, $selected='', $socid, $htmlname='adresse_livraison_id', $origin='', $originid='') { global $langs,$conf; if ($htmlname != "none") { print '
'; print ''; print ''; print ''; print '
'; $this->select_adresse_livraison($selected, $socid, $htmlname, 1); print ''; $langs->load("companies"); print '   '.$langs->trans("AddAddress").''; print '
'; } else { if ($selected) { require_once(DOL_DOCUMENT_ROOT ."/comm/adresse_livraison.class.php"); $livraison=new AdresseLivraison($this->db); $livraison->fetch_adresse($selected); print ''.$livraison->label.''; } else { print " "; } } } /** * \brief Retourne la liste des devises, dans la langue de l'utilisateur * \param selected code devise pré-sélectionnée * \param htmlname nom de la liste deroulante * \todo trier liste sur noms après traduction plutot que avant */ function select_currency($selected='',$htmlname='currency_id') { global $conf,$langs; $langs->load("dict"); if ($selected=='euro' || $selected=='euros') $selected='EUR'; // Pour compatibilité $sql = "SELECT code_iso, label, active FROM ".MAIN_DB_PREFIX."c_currencies"; $sql .= " WHERE active = 1"; $sql .= " ORDER BY code_iso ASC;"; if ($this->db->query($sql)) { print ''; return 0; } else { dolibarr_print_error($this->db); return 1; } } /** * \brief Selection du taux de tva appliqué par vendeur * \param name Nom champ html * \param defaulttx Forçage du taux tva présélectionné. Mettre '' pour appliquer règle par défaut. * \param societe_vendeuse Objet société vendeuse * \param societe_acheteuse Objet société acheteuse * \param taux_produit Taux par defaut du produit vendu * \remarks Si vendeur non assujeti à TVA, TVA par défaut=0. Fin de règle. * Si le (pays vendeur = pays acheteur) alors la TVA par défaut=TVA du produit vendu. Fin de règle. * Si vendeur et acheteur dans Communauté européenne et bien vendu = moyen de transports neuf (auto, bateau, avion), TVA par défaut=0 (La TVA doit être payé par l'acheteur au centre d'impots de son pays et non au vendeur). Fin de règle. * Si vendeur et acheteur dans Communauté européenne et bien vendu autre que transport neuf alors la TVA par défaut=TVA du produit vendu. Fin de règle. * Sinon la TVA proposée par défaut=0. Fin de règle. */ function select_tva($name='tauxtva', $defaulttx='', $societe_vendeuse='', $societe_acheteuse='', $taux_produit='') { global $langs,$conf,$mysoc; //print $societe_vendeuse."-".$societe_acheteuse; if (is_object($societe_vendeuse) && ! $societe_vendeuse->pays_code) { if ($societe_vendeuse->id == $mysoc->id) { print ''.$langs->trans("ErrorYourCountryIsNotDefined").'
'; } else { print ''.$langs->trans("ErrorSupplierCountryIsNotDefined").''; } return; } if (is_object($societe_vendeuse)) { $code_pays=$societe_vendeuse->pays_code; } else { $code_pays=$mysoc->pays_code; // Pour compatibilite ascendente } // Recherche liste des codes TVA du pays vendeur $sql = "SELECT t.taux,t.recuperableonly"; $sql .= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_pays as p"; $sql .= " WHERE t.fk_pays = p.rowid AND p.code = '".$code_pays."'"; $sql .= " AND t.active = 1"; $sql .= " ORDER BY t.taux ASC, t.recuperableonly ASC"; $resql=$this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); for ($i = 0; $i < $num; $i++) { $obj = $this->db->fetch_object($resql); $txtva[ $i ] = $obj->taux; $libtva[ $i ] = $obj->taux.'%'.($obj->recuperableonly ? ' *':''); } } else { print ''.$langs->trans("ErrorNoVATRateDefinedForSellerCountry").''; } // Définition du taux à présélectionner if ($defaulttx == '') $defaulttx=get_default_tva($societe_vendeuse,$societe_acheteuse,$taux_produit); // Si taux par defaut n'a pu etre trouvé, on prend dernier. // Comme ils sont triés par ordre croissant, dernier = plus élevé = taux courant if ($defaulttx == '') $defaulttx = $txtva[sizeof($txtva)-1]; $nbdetaux = sizeof($txtva); print ''; } /** * \brief Selection des unites de mesure * \param name Nom champ html * \param measuring_style Le style de mesure : weight, volume,... * \param default Forçage de l'unite * \remarks pour l'instant on ne definit pas les unites dans la base */ function select_measuring_units($name='measuring_units', $measuring_style='', $default='0', $adddefault=0) { global $langs,$conf,$mysoc; $langs->load("other"); if ($measuring_style == 'weight') { $measuring_units[3] = $langs->trans("WeightUnitton"); $measuring_units[0] = $langs->trans("WeightUnitkg"); $measuring_units[-3] = $langs->trans("WeightUnitg"); $measuring_units[-6] = $langs->trans("WeightUnitmg"); } else if ($measuring_style == 'volume') { $measuring_units[0] = $langs->trans("VolumeUnitm3"); $measuring_units[-3] = $langs->trans("VolumeUnitcm3"); $measuring_units[-6] = $langs->trans("VolumeUnitmm3"); } print ''; } /** * * * * */ function load_tva($name='tauxtva', $defaulttx='', $societe_vendeuse='', $societe_acheteuse='', $taux_produit='') { global $langs,$conf,$mysoc; if (is_object($societe_vendeuse->pays_code)) { $code_pays=$societe_vendeuse->pays_code; } else { $code_pays=$mysoc->pays_code; // Pour compatibilite ascendente } // Recherche liste des codes TVA du pays vendeur $sql = "SELECT t.taux,t.recuperableonly"; $sql .= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_pays as p"; $sql .= " WHERE t.fk_pays = p.rowid AND p.code = '".$code_pays."'"; $sql .= " AND t.active = 1"; $sql .= " ORDER BY t.taux ASC, t.recuperableonly ASC"; $resql=$this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); for ($i = 0; $i < $num; $i++) { $obj = $this->db->fetch_object($resql); $txtva[ $i ] = $obj->taux; $libtva[ $i ] = $obj->taux.'%'.($obj->recuperableonly ? ' *':''); } } // Définition du taux à présélectionner if ($defaulttx == '') $defaulttx=get_default_tva($societe_vendeuse,$societe_acheteuse,$taux_produit); // Si taux par defaut n'a pu etre trouvé, on prend dernier. // Comme ils sont triés par ordre croissant, dernier = plus élevé = taux courant if ($defaulttx == '') $defaulttx = $txtva[sizeof($txtva)-1]; $nbdetaux = sizeof($txtva); for ($i = 0 ; $i < $nbdetaux ; $i++) { $this->tva_taux_value[$i] = $txtva[$i]; $this->tva_taux_libelle[$i] = $libtva[$i]; } } /** * \brief Affiche zone de selection de date * Liste deroulante pour les jours, mois, annee et eventuellement heurs et minutes * Les champs sont présélectionnées avec: * - La date set_time (timestamps ou date au format YYYY-MM-DD ou YYYY-MM-DD HH:MM) * - La date du jour si set_time vaut '' * - Aucune date (champs vides) si set_time vaut -1 (dans ce cas empty doit valoir 1) * \param set_time Date de pré-sélection * \param prefix Prefix pour nom champ * \param h 1=Affiche aussi les heures * \param m 1=Affiche aussi les minutes * \param empty 0=Champ obligatoire, 1=Permet une saisie vide * \param form_name Nom du formulaire de provenance. Utilisé pour les dates en popup style andre. * \param d 1=Affiche aussi les jours, mois, annees */ function select_date($set_time='', $prefix='re', $h=0, $m=0, $empty=0, $form_name="", $d=1) { global $conf,$langs; if($prefix=='') $prefix='re'; if($h == '') $h=0; if($m == '') $m=0; if($empty == '') $empty=0; if (! $set_time && $empty == 0) $set_time = time(); // Analyse de la date de préselection if (eregi('^([0-9]+)\-([0-9]+)\-([0-9]+)\s?([0-9]+)?:?([0-9]+)?',$set_time,$reg)) { // Date au format 'YYYY-MM-DD' ou 'YYYY-MM-DD HH:MM:SS' $syear = $reg[1]; $smonth = $reg[2]; $sday = $reg[3]; $shour = $reg[4]; $smin = $reg[5]; } elseif ($set_time > 0) { // Date est un timestamps $syear = date("Y", $set_time); $smonth = date("n", $set_time); $sday = date("d", $set_time); $shour = date("H", $set_time); $smin = date("i", $set_time); } else { // Date est vide ou vaut -1 $syear = ''; $smonth = ''; $sday = ''; $shour = ''; $smin = ''; } if ($d) { /* * Affiche date en popup */ if ($conf->use_javascript && $conf->use_popup_calendar) { //print "e".$set_time." t ".$conf->format_date_short; if ($set_time > 0) { $formated_date=dolibarr_print_date($set_time,$conf->format_date_short); } // Calendrier popup version eldy if ("$conf->use_popup_calendar" == "eldy") // Laisser conf->use_popup_calendar entre quote { // Zone de saisie manuelle de la date print ''; // Icone calendrier print ''; print ''."\n"; print ''."\n"; print ''."\n"; } else { // Calendrier popup version defaut if ($langs->defaultlang != "") { print ''; } print ''; print ' '; print ''."\n"; print ''."\n"; print ''."\n"; if($form_name =="") print ''.img_cal().''; else print ''.img_cal().''; } } /* * Affiche date en select */ if (! $conf->use_javascript || ! $conf->use_popup_calendar) { /* if ($set_time == -1) { $sday = 0; $smonth = 0; $syear = 0; $shour = 0; $smin = 0; } */ // Jour print '"; print '"; // Année if ($empty || $set_time == -1) { print ''; } else { print '\n"; } } } if ($d && $h) print ' '; if ($h) { /* * Affiche heure en select */ print '"; print "H\n"; } if ($m) { /* * Affiche min en select */ print '"; print "M\n"; } } /** \brief Fonction servant a afficher une durée dans une liste déroulante \param prefix prefix */ function select_duree($prefix) { print '"; print "H  "; print '"; print "M "; } /** \brief Affiche un select à partir d'un tableau \param htmlname Nom de la zone select \param array Tableau de key+valeur \param id Key pré-sélectionnée \param show_empty 1 si il faut ajouter une valeur vide dans la liste, 0 sinon \param key_in_label 1 pour afficher la key dans la valeur "[key] value" \param value_as_key 1 pour utiliser la valeur comme clé */ function select_array($htmlname, $array, $id='', $show_empty=0, $key_in_label=0, $value_as_key=0, $use_java=0, $fonction='') { if ($use_java == 1 && $fonction != '') { print ''; } if ($show_empty) { print ''."\n"; } while (list($key, $value) = each ($array)) { print '\n"; } else { if ($value == '' || $value == '-') { $value=' '; } print ">".$value."\n"; } } print "\n"; } /** * \brief Renvoie la chaîne de caractère décrivant l'erreur */ function error() { return $this->error; } /** * \brief Selection de oui/non en chaine (renvoie yes/no) * \param name Nom du select * \param value Valeur présélectionnée * \param option 0 retourne yes/no, 1 retourne 1/0 */ function selectyesno($name,$value='',$option=0) { global $langs; $yes="yes"; $no="no"; if ($option) { $yes="1"; $no="0"; } $resultyesno = ''."\n"; return $resultyesno; } /** * \brief Checkbox * */ function checkbox($name,$checked=0,$value=1) { if ($checked==1){ print "\n"; }else{ print "\n"; } } /** * \brief Affiche la cartouche générique d'un rapport * \param nom Valeur pour nom du rapport * \param variante Lien optionnel de variante du rapport * \param period Periode du reporting * \param periodlink Lien pour changer de période * \param description Description * \param builddate Date génération * \param exportlink Lien pour export */ function report_header($nom,$variante='',$period,$periodlink,$description,$builddate,$exportlink) { global $langs; print "\n\n\n"; $h=0; $head[$h][0] = $_SERVER["PHP_SELF"]; $head[$h][1] = $langs->trans("Report"); dolibarr_fiche_head($head, $hselected, $societe->nom); print ''; // Ligne de titre print ''; print ''; if (! $variante) print ''; print ''; // Ligne de la periode d'analyse du rapport print ''; print ''; if (! $periodlink) print ''; print ''; // Ligne de description print ''; print ''; print ''; print ''; // Ligne d'export print ''; print ''; if (! $exportlink) print ''; print '
'.$langs->trans("ReportName").''; else print ''; print $nom; if ($variante) print ''.$variante; print '
'.$langs->trans("ReportPeriod").''; else print ''; print $period; if ($periodlink) print ''.$periodlink; print '
'.$langs->trans("ReportDescription").''.$description.'
'.$langs->trans("GeneratedOn").''; else print ''; print dolibarr_print_date($builddate); if ($exportlink) print ''.$langs->trans("Export").''.$exportlink; print '
'; print ''; print "\n\n\n"; } /** * \brief Affiche la cartouche de la liste des documents d'une propale, facture... * \param modulepart propal=propal, facture=facture, ... * \param filename Sous rep à scanner (vide si filedir deja complet) * \param filedir Repertoire à scanner * \param urlsource Url page origine * \param genallowed Génération autorisée (1/0 ou array des formats) * \param delallowed Suppression autorisée (1/0) * \param modelselected Modele à présélectionner par défaut * \param modelliste Tableau des modeles possibles * \param forcenomultilang N'affiche pas option langue meme si MAIN_MULTILANGS défini * \remarks Le fichier de facture détaillée est de la forme * REFFACTURE-XXXXXX-detail.pdf ou XXXXX est une forme diverse * \return int <0 si ko, nbre de fichiers affichés si ok */ function show_documents($modulepart,$filename,$filedir,$urlsource,$genallowed,$delallowed=0,$modelselected='',$modelliste=array(),$forcenomultilang=0) { // filedir = conf->...dir_ouput."/".get_exdir(id) global $langs,$bc,$conf; $var=true; $filename = sanitize_string($filename); $headershown=0; $i=0; // Affiche en-tete tableau if ($genallowed) { $modellist=array(); if ($modulepart == 'propal') { if (is_array($genallowed)) $modellist=$genallowed; else { include_once(DOL_DOCUMENT_ROOT.'/includes/modules/propale/modules_propale.php'); $model=new ModelePDFPropales(); $modellist=$model->liste_modeles($this->db); } } else if ($modulepart == 'commande') { if (is_array($genallowed)) $modellist=$genallowed; else { include_once(DOL_DOCUMENT_ROOT.'/includes/modules/commande/modules_commande.php'); $model=new ModelePDFCommandes(); $modellist=$model->liste_modeles($this->db); } } elseif ($modulepart == 'expedition') { if (is_array($genallowed)) $modellist=$genallowed; else { include_once(DOL_DOCUMENT_ROOT.'/expedition/mods/pdf/ModelePdfExpedition.class.php'); $model=new ModelePDFExpedition(); $modellist=$model->liste_modeles($this->db); } } elseif ($modulepart == 'livraison') { if (is_array($genallowed)) $modellist=$genallowed; else { include_once(DOL_DOCUMENT_ROOT.'/livraison/mods/modules_livraison.php'); $model=new ModelePDFDeliveryOrder(); $modellist=$model->liste_modeles($this->db); } } else if ($modulepart == 'ficheinter') { if (is_array($genallowed)) $modellist=$genallowed; else { include_once(DOL_DOCUMENT_ROOT.'/includes/modules/fichinter/modules_fichinter.php'); $model=new ModelePDFFicheinter(); $modellist=$model->liste_modeles($this->db); } } elseif ($modulepart == 'facture') { if (is_array($genallowed)) $modellist=$genallowed; else { include_once(DOL_DOCUMENT_ROOT.'/includes/modules/facture/modules_facture.php'); $model=new ModelePDFFactures(); $modellist=$model->liste_modeles($this->db); } } elseif ($modulepart == 'export') { if (is_array($genallowed)) $modellist=$genallowed; else { include_once(DOL_DOCUMENT_ROOT.'/includes/modules/export/modules_export.php'); $model=new ModeleExports(); $modellist=$model->liste_modeles($this->db); } } else if ($modulepart == 'commande_fournisseur') { if (is_array($genallowed)) $modellist=$genallowed; else { include_once(DOL_DOCUMENT_ROOT.'/fourn/commande/modules/modules_commandefournisseur.php'); $model=new ModelePDFSuppliersOrders(); $modellist=$model->liste_modeles($this->db); } } else if ($modulepart == 'facture_fournisseur') { if (is_array($genallowed)) $modellist=$genallowed; else { include_once(DOL_DOCUMENT_ROOT.'/fourn/facture/modules/modules_facturefournisseur.php'); $model=new ModelePDFFacturesSuppliers(); $modellist=$model->liste_modeles($this->db); } } else if ($modulepart == 'remisecheque') { if (is_array($genallowed)) $modellist=$genallowed; else { // ?? } } else { dolibarr_print_error($this->db,'Bad value for modulepart'); return -1; } $headershown=1; print '
'; print ''; print_titre($langs->trans("Documents")); print ''; print ''; print ''; print ''; print ''; print ''; } // Recupe liste des fichiers $file_list=dolibarr_dir_list($filedir,'files',0,'','\.meta$','date',SORT_DESC); // Affiche en-tete tableau si non deja affiché if (sizeof($file_list) && ! $headershown) { $headershown=1; print_titre($langs->trans("Documents")); print '
'.$langs->trans('Model').''; $this->select_array('model',$modellist,$modelselected,0,0,1); $texte=$langs->trans('Generate'); print ''; if($conf->global->MAIN_MULTILANGS && ! $forcenomultilang) { $this->select_lang($langs->getDefaultLang()); } else { print ' '; } print ''; print ''; print '
'; } // Boucle sur chaque ligne trouvée foreach($file_list as $i => $file) { // Défini chemin relatif par rapport au module pour lien download $relativepath=$file["name"]; // Cas general if ($filename) $relativepath=$filename."/".$file["name"]; // Cas prpal, facture... // Autre cas if ($modulepart == 'don') { $relativepath = get_exdir($filename,2).$file["name"]; } if ($modulepart == 'export') { $relativepath = $file["name"]; } // Défini le type MIME du document if (eregi('\.([^\.]+)$',$file["name"],$reg)) $extension=$reg[1]; $mimetype=strtoupper($extension); if ($extension == 'pdf') $mimetype='PDF'; if ($extension == 'html') $mimetype='HTML'; if (eregi('\-detail\.pdf',$file["name"])) $mimetype='PDF Détaillé'; print ""; // Affiche colonne type MIME print ''; // Affiche nom fichier avec lien download print ''; // Affiche taille fichier print ''; // Affiche date fichier print ''; if ($delallowed) { print ''; } print ''; $i++; } if ($headershown) { // Affiche pied du tableau print "
'.$mimetype.''.$file["name"].''; print ''.filesize($filedir."/".$file["name"]). ' bytes'.dolibarr_print_date(filemtime($filedir."/".$file["name"]),'dayhour').''.img_delete().'
\n"; if ($genallowed) { print '
'; } } return $i; } function show_ldap_content($result,$level,$count,$var,$hide=0) { global $bc, $conf; $count++; if ($count > 1000) return -1; // To avoid infinite loop if (! is_array($result)) return -1; foreach($result as $key => $val) { if ("$key" == "objectclass") continue; if ("$key" == "count") continue; if ("$key" == "dn") continue; if ("$val" == "objectclass") continue; if ("$val" == $lastkey[$level]) continue; $lastkey[$level]=$key; if (is_array($val)) { $hide=0; if (! is_numeric($key)) { $var=!$var; print ''; print $key; print ''; if (strtolower($key) == 'userpassword') $hide=1; } $this->show_ldap_content($val,$level+1,$count,$var,$hide); } else { if ($hide) print eregi_replace('.','*',utf8_decode("$val")); else print utf8_decode($val); print ''; } } return 1; } /** * \brief Retourne la liste des modéles d'export * \param selected Id modéle présélectionné * \param htmlname Nom de la zone select * \param type Type des modéles recherchés * \param useempty Affiche valeur vide dans liste */ function select_export_model($selected='',$htmlname='exportmodelid',$type='',$useempty=0) { $sql = "SELECT rowid, label"; $sql.= " FROM ".MAIN_DB_PREFIX."export_model"; $sql.= " WHERE type = '".$type."'"; $sql.= " ORDER BY rowid"; $result = $this->db->query($sql); if ($result) { print '"; } else { dolibarr_print_error($this->db); } } /** * \brief Retourne la liste des mois * \param selected Id mois présélectionné * \param htmlname Nom de la zone select * \param useempty Affiche valeur vide dans liste */ function select_month($selected='',$htmlname='monthid',$useempty=0) { global $langs; $langs->load("main"); $month = array (1=>"January", 2=>"February", 3=>"March", 4=>"April", 5=>"May", 6=>"June", 7=>"July", 8=>"August", 9=>"September", 10=>"October", 11=>"November", 12=>"December" ); $select_month = ''; return $select_month; } } ?>