123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673 |
- <?php
- /* Copyright (c) 2013 Florian Henry <florian.henry@open-concept.pro>
- * Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
- * Copyright (C) 2018 Charlene Benke <charlie@patas-monkey.com>
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- */
- /**
- * \file htdocs/core/class/html.formprojet.class.php
- * \ingroup core
- * \brief Class file for html component project
- */
- /**
- * Class to manage building of HTML components
- */
- class FormProjets
- {
- /**
- * @var DoliDB Database handler.
- */
- public $db;
- /**
- * @var string Error code (or message)
- */
- public $error='';
- /**
- * Constructor
- *
- * @param DoliDB $db Database handler
- */
- function __construct($db)
- {
- $this->db = $db;
- }
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
- /**
- * Output a combo list with projects qualified for a third party / user
- *
- * @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
- * @param string $selected Id project preselected ('' or id of project)
- * @param string $htmlname Name of HTML field
- * @param int $maxlength Maximum length of label
- * @param int $option_only Return only html options lines without the select tag
- * @param int $show_empty Add an empty line
- * @param int $discard_closed Discard closed projects (0=Keep,1=hide completely,2=Disable)
- * @param int $forcefocus Force focus on field (works with javascript only)
- * @param int $disabled Disabled
- * @param int $mode 0 for HTML mode and 1 for JSON mode
- * @param string $filterkey Key to filter
- * @param int $nooutput No print output. Return it only.
- * @param int $forceaddid Force to add project id in list, event if not qualified
- * @param string $morecss More css
- * @param int $htmlid Html id to use instead of htmlname
- * @return string Return html content
- */
- function select_projects($socid=-1, $selected='', $htmlname='projectid', $maxlength=16, $option_only=0, $show_empty=1, $discard_closed=0, $forcefocus=0, $disabled=0, $mode = 0, $filterkey = '', $nooutput=0, $forceaddid=0, $morecss='', $htmlid='')
- {
- // phpcs:enable
- global $langs,$conf,$form;
- $out='';
- if (! empty($conf->use_javascript_ajax) && ! empty($conf->global->PROJECT_USE_SEARCH_TO_SELECT))
- {
- $placeholder='';
- if ($selected && empty($selected_input_value))
- {
- require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
- $project = new Project($this->db);
- $project->fetch($selected);
- $selected_input_value=$project->ref;
- }
- $urloption='socid='.$socid.'&htmlname='.$htmlname.'&discardclosed='.$discard_closed;
- $out.=ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/projet/ajax/projects.php', $urloption, $conf->global->PROJECT_USE_SEARCH_TO_SELECT, 0, array(
- // 'update' => array(
- // 'projectid' => 'id'
- // )
- ));
- $out.='<input type="text" class="minwidth200'.($morecss?' '.$morecss:'').'" name="search_'.$htmlname.'" id="search_'.$htmlname.'" value="'.$selected_input_value.'"'.$placeholder.' />';
- }
- else
- {
- $out.=$this->select_projects_list($socid, $selected, $htmlname, $maxlength, $option_only, $show_empty, $discard_closed, $forcefocus, $disabled, 0, $filterkey, 1, $forceaddid, $htmlid, $morecss);
- }
- if ($discard_closed)
- {
- if (class_exists('Form'))
- {
- if (empty($form)) $form=new Form($this->db);
- $out.=$form->textwithpicto('', $langs->trans("ClosedProjectsAreHidden"));
- }
- }
- if (empty($nooutput))
- {
- print $out;
- return '';
- }
- else return $out;
- }
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
- /**
- * Returns an array with projects qualified for a third party
- *
- * @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
- * @param int $selected Id project preselected
- * @param string $htmlname Nom de la zone html
- * @param int $maxlength Maximum length of label
- * @param int $option_only Return only html options lines without the select tag
- * @param int $show_empty Add an empty line
- * @param int $discard_closed Discard closed projects (0=Keep,1=hide completely,2=Disable)
- * @param int $forcefocus Force focus on field (works with javascript only)
- * @param int $disabled Disabled
- * @param int $mode 0 for HTML mode and 1 for array return (to be used by json_encode for example)
- * @param string $filterkey Key to filter
- * @param int $nooutput No print output. Return it only.
- * @param int $forceaddid Force to add project id in list, event if not qualified
- * @param int $htmlid Html id to use instead of htmlname
- * @param string $morecss More CSS
- * @return int Nb of project if OK, <0 if KO
- */
- function select_projects_list($socid=-1, $selected='', $htmlname='projectid', $maxlength=24, $option_only=0, $show_empty=1, $discard_closed=0, $forcefocus=0, $disabled=0, $mode=0, $filterkey = '', $nooutput=0, $forceaddid=0, $htmlid='', $morecss='maxwidth500')
- {
- // phpcs:enable
- global $user,$conf,$langs;
- require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
- if (empty($htmlid)) $htmlid = $htmlname;
- $out='';
- $outarray=array();
- $hideunselectables = false;
- if (! empty($conf->global->CONTRACT_HIDE_UNSELECTABLES)) $hideunselectables = true;
- $projectsListId = false;
- if (empty($user->rights->projet->all->lire))
- {
- $projectstatic=new Project($this->db);
- $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1);
- }
- // Search all projects
- $sql = 'SELECT p.rowid, p.ref, p.title, p.fk_soc, p.fk_statut, p.public, s.nom as name, s.name_alias';
- $sql.= ' FROM '.MAIN_DB_PREFIX .'projet as p LEFT JOIN '.MAIN_DB_PREFIX .'societe as s ON s.rowid = p.fk_soc';
- $sql.= " WHERE p.entity IN (".getEntity('project').")";
- if ($projectsListId !== false) $sql.= " AND p.rowid IN (".$projectsListId.")";
- if ($socid == 0) $sql.= " AND (p.fk_soc=0 OR p.fk_soc IS NULL)";
- if ($socid > 0)
- {
- if (empty($conf->global->PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY)) $sql.= " AND (p.fk_soc=".$socid." OR p.fk_soc IS NULL)";
- else if ($conf->global->PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY != 'all') // PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY is 'all' or a list of ids separated by coma.
- {
- $sql.= " AND (p.fk_soc IN (".$socid.", ".$conf->global->PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY.") OR p.fk_soc IS NULL)";
- }
- }
- if (!empty($filterkey)) $sql .= natural_search(array('p.title', 'p.ref'), $filterkey);
- $sql.= " ORDER BY p.ref ASC";
- $resql=$this->db->query($sql);
- if ($resql)
- {
- // Use select2 selector
- if (! empty($conf->use_javascript_ajax))
- {
- include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
- $comboenhancement = ajax_combobox($htmlid, array(), 0, $forcefocus);
- $out.=$comboenhancement;
- $morecss.=' minwidth100';
- }
- if (empty($option_only)) {
- $out.= '<select class="flat'.($morecss?' '.$morecss:'').'"'.($disabled?' disabled="disabled"':'').' id="'.$htmlid.'" name="'.$htmlname.'">';
- }
- if (!empty($show_empty)) {
- $out.= '<option value="0"> </option>';
- }
- $num = $this->db->num_rows($resql);
- $i = 0;
- if ($num)
- {
- while ($i < $num)
- {
- $obj = $this->db->fetch_object($resql);
- // If we ask to filter on a company and user has no permission to see all companies and project is linked to another company, we hide project.
- if ($socid > 0 && (empty($obj->fk_soc) || $obj->fk_soc == $socid) && ! $user->rights->societe->lire)
- {
- // Do nothing
- }
- else
- {
- if ($discard_closed == 1 && $obj->fk_statut == 2 && $obj->rowid != $selected) // We discard closed except if selected
- {
- $i++;
- continue;
- }
- $labeltoshow=dol_trunc($obj->ref,18);
- //if ($obj->public) $labeltoshow.=' ('.$langs->trans("SharedProject").')';
- //else $labeltoshow.=' ('.$langs->trans("Private").')';
- $labeltoshow.=', '.dol_trunc($obj->title, $maxlength);
- if ($obj->name)
- {
- $labeltoshow.=' - '.$obj->name;
- if ($obj->name_alias) $labeltoshow.=' ('.$obj->name_alias.')';
- }
- $disabled=0;
- if ($obj->fk_statut == 0)
- {
- $disabled=1;
- $labeltoshow.=' - '.$langs->trans("Draft");
- }
- else if ($obj->fk_statut == 2)
- {
- if ($discard_close == 2) $disabled=1;
- $labeltoshow.=' - '.$langs->trans("Closed");
- }
- else if ( empty($conf->global->PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY) && $socid > 0 && (! empty($obj->fk_soc) && $obj->fk_soc != $socid))
- {
- $disabled=1;
- $labeltoshow.=' - '.$langs->trans("LinkedToAnotherCompany");
- }
- if (!empty($selected) && $selected == $obj->rowid)
- {
- $out.= '<option value="'.$obj->rowid.'" selected';
- //if ($disabled) $out.=' disabled'; // with select2, field can't be preselected if disabled
- $out.= '>'.$labeltoshow.'</option>';
- }
- else
- {
- if ($hideunselectables && $disabled && ($selected != $obj->rowid))
- {
- $resultat='';
- }
- else
- {
- $resultat='<option value="'.$obj->rowid.'"';
- if ($disabled) $resultat.=' disabled';
- //if ($obj->public) $labeltoshow.=' ('.$langs->trans("Public").')';
- //else $labeltoshow.=' ('.$langs->trans("Private").')';
- $resultat.='>';
- $resultat.=$labeltoshow;
- $resultat.='</option>';
- }
- $out.= $resultat;
- $outarray[] = array(
- 'key' => (int) $obj->rowid,
- 'value' => $obj->ref,
- 'ref' => $obj->ref,
- 'label' => $labeltoshow,
- 'disabled' => (bool) $disabled
- );
- }
- }
- $i++;
- }
- }
- $this->db->free($resql);
- if (!$mode) {
- if (empty($option_only)) $out.= '</select>';
- if (empty($nooutput))
- {
- print $out;
- return '';
- }
- else return $out;
- } else {
- return $outarray;
- }
- }
- else
- {
- dol_print_error($this->db);
- return -1;
- }
- }
- /**
- * Output a combo list with tasks qualified for a third party
- *
- * @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
- * @param int $selected Id task preselected
- * @param string $htmlname Name of HTML select
- * @param int $maxlength Maximum length of label
- * @param int $option_only Return only html options lines without the select tag
- * @param string $show_empty Add an empty line ('1' or string to show for empty line)
- * @param int $discard_closed Discard closed projects (0=Keep,1=hide completely,2=Disable)
- * @param int $forcefocus Force focus on field (works with javascript only)
- * @param int $disabled Disabled
- * @param string $morecss More css added to the select component
- * @param string $projectsListId ''=Automatic filter on project allowed. List of id=Filter on project ids.
- * @param string $showproject 'all' = Show project info, ''=Hide project info
- * @return int Nbr of project if OK, <0 if KO
- */
- function selectTasks($socid=-1, $selected='', $htmlname='taskid', $maxlength=24, $option_only=0, $show_empty='1', $discard_closed=0, $forcefocus=0, $disabled=0, $morecss='maxwidth500', $projectsListId='', $showproject='all')
- {
- global $user,$conf,$langs;
- require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
- $out='';
- $hideunselectables = false;
- if (! empty($conf->global->CONTRACT_HIDE_UNSELECTABLES)) $hideunselectables = true;
- if (empty($projectsListId))
- {
- if (empty($user->rights->projet->all->lire))
- {
- $projectstatic=new Project($this->db);
- $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1);
- }
- }
- // Search all projects
- $sql = 'SELECT t.rowid, t.ref as tref, t.label as tlabel, p.ref, p.title, p.fk_soc, p.fk_statut, p.public,';
- $sql.= ' s.nom as name';
- $sql.= ' FROM '.MAIN_DB_PREFIX .'projet as p';
- $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe as s ON s.rowid = p.fk_soc';
- $sql.= ', '.MAIN_DB_PREFIX.'projet_task as t';
- $sql.= " WHERE p.entity IN (".getEntity('project').")";
- $sql.= " AND t.fk_projet = p.rowid";
- if ($projectsListId) $sql.= " AND p.rowid IN (".$projectsListId.")";
- if ($socid == 0) $sql.= " AND (p.fk_soc=0 OR p.fk_soc IS NULL)";
- if ($socid > 0) $sql.= " AND (p.fk_soc=".$socid." OR p.fk_soc IS NULL)";
- $sql.= " ORDER BY p.ref, t.ref ASC";
- $resql=$this->db->query($sql);
- if ($resql)
- {
- // Use select2 selector
- if (! empty($conf->use_javascript_ajax))
- {
- include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
- $comboenhancement = ajax_combobox($htmlname, '', 0, $forcefocus);
- $out.=$comboenhancement;
- $morecss='minwidth200 maxwidth500';
- }
- if (empty($option_only)) {
- $out.= '<select class="valignmiddle flat'.($morecss?' '.$morecss:'').'"'.($disabled?' disabled="disabled"':'').' id="'.$htmlname.'" name="'.$htmlname.'">';
- }
- if (! empty($show_empty)) {
- $out.= '<option value="0" class="optiongrey">';
- if (! is_numeric($show_empty)) $out.=$show_empty;
- else $out.=' ';
- $out.= '</option>';
- }
- $num = $this->db->num_rows($resql);
- $i = 0;
- if ($num)
- {
- while ($i < $num)
- {
- $obj = $this->db->fetch_object($resql);
- // If we ask to filter on a company and user has no permission to see all companies and project is linked to another company, we hide project.
- if ($socid > 0 && (empty($obj->fk_soc) || $obj->fk_soc == $socid) && empty($user->rights->societe->lire))
- {
- // Do nothing
- }
- else
- {
- if ($discard_closed == 1 && $obj->fk_statut == 2)
- {
- $i++;
- continue;
- }
- $labeltoshow = '';
- if ($showproject == 'all')
- {
- $labeltoshow.=dol_trunc($obj->ref,18); // Project ref
- //if ($obj->public) $labeltoshow.=' ('.$langs->trans("SharedProject").')';
- //else $labeltoshow.=' ('.$langs->trans("Private").')';
- $labeltoshow.=' '.dol_trunc($obj->title,$maxlength);
- if ($obj->name) $labeltoshow.=' ('.$obj->name.')';
- $disabled=0;
- if ($obj->fk_statut == 0)
- {
- $disabled=1;
- $labeltoshow.=' - '.$langs->trans("Draft");
- }
- else if ($obj->fk_statut == 2)
- {
- if ($discard_closed == 2) $disabled=1;
- $labeltoshow.=' - '.$langs->trans("Closed");
- }
- else if ($socid > 0 && (! empty($obj->fk_soc) && $obj->fk_soc != $socid))
- {
- $disabled=1;
- $labeltoshow.=' - '.$langs->trans("LinkedToAnotherCompany");
- }
- $labeltoshow.=' - ';
- }
- // Label for task
- $labeltoshow.=$obj->tref.' '.dol_trunc($obj->tlabel,$maxlength);
- if (!empty($selected) && $selected == $obj->rowid)
- {
- $out.= '<option value="'.$obj->rowid.'" selected';
- //if ($disabled) $out.=' disabled'; // with select2, field can't be preselected if disabled
- $out.= '>'.$labeltoshow.'</option>';
- }
- else
- {
- if ($hideunselectables && $disabled && ($selected != $obj->rowid))
- {
- $resultat='';
- }
- else
- {
- $resultat='<option value="'.$obj->rowid.'"';
- if ($disabled) $resultat.=' disabled';
- //if ($obj->public) $labeltoshow.=' ('.$langs->trans("Public").')';
- //else $labeltoshow.=' ('.$langs->trans("Private").')';
- $resultat.='>';
- $resultat.=$labeltoshow;
- $resultat.='</option>';
- }
- $out.= $resultat;
- }
- }
- $i++;
- }
- }
- if (empty($option_only)) {
- $out.= '</select>';
- }
- print $out;
- $this->db->free($resql);
- return $num;
- }
- else
- {
- dol_print_error($this->db);
- return -1;
- }
- }
- // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
- /**
- * Build a HTML select list of element of same thirdparty to suggest to link them to project
- *
- * @param string $table_element Table of the element to update
- * @param string $socid If of thirdparty to use as filter or 'id1,id2,...'
- * @param string $morecss More CSS
- * @param int $limitonstatus Add filters to limit length of list to opened status (for example to avoid ERR_RESPONSE_HEADERS_TOO_BIG on project/element.php page). TODO To implement
- * @param string $projectkey Equivalent key to fk_projet for actual table_element
- * @return int|string The HTML select list of element or '' if nothing or -1 if KO
- */
- function select_element($table_element, $socid=0, $morecss='', $limitonstatus=-2,$projectkey="fk_projet")
- {
- // phpcs:enable
- global $conf, $langs;
- if ($table_element == 'projet_task') return ''; // Special cas of element we never link to a project (already always done)
- $linkedtothirdparty=false;
- if (! in_array($table_element, array('don','expensereport_det','expensereport','loan','stock_mouvement','chargesociales'))) $linkedtothirdparty=true;
- $sqlfilter='';
- //print $table_element;
- switch ($table_element)
- {
- case "loan":
- $sql = "SELECT t.rowid, t.label as ref";
- break;
- case "facture":
- $sql = "SELECT t.rowid, t.facnumber as ref";
- break;
- case "facture_fourn":
- $sql = "SELECT t.rowid, t.ref, t.ref_supplier";
- break;
- case "commande_fourn":
- case "commande_fournisseur":
- $sql = "SELECT t.rowid, t.ref, t.ref_supplier";
- break;
- case "facture_rec":
- $sql = "SELECT t.rowid, t.titre as ref";
- break;
- case "actioncomm":
- $sql = "SELECT t.id as rowid, t.label as ref";
- $projectkey="fk_project";
- break;
- case "expensereport":
- return '';
- case "expensereport_det":
- /*$sql = "SELECT rowid, '' as ref"; // table is llx_expensereport_det
- $projectkey="fk_projet";
- break;*/
- return '';
- case "commande":
- case "contrat":
- case "fichinter":
- $sql = "SELECT t.rowid, t.ref";
- break;
- case 'stock_mouvement':
- $sql = 'SELECT t.rowid, t.label as ref';
- $projectkey='fk_origin';
- break;
- case "payment_various":
- $sql = "SELECT t.rowid, t.num_payment as ref";
- break;
- case "chargesociales":
- default:
- $sql = "SELECT t.rowid, t.ref";
- break;
- }
- if ($linkedtothirdparty) $sql.=", s.nom as name";
- $sql.= " FROM ".MAIN_DB_PREFIX.$table_element." as t";
- if ($linkedtothirdparty) $sql.=", ".MAIN_DB_PREFIX."societe as s";
- $sql.= " WHERE ".$projectkey." is null";
- if (! empty($socid) && $linkedtothirdparty)
- {
- if (is_numeric($socid)) $sql.= " AND t.fk_soc=".$socid;
- else $sql.= " AND t.fk_soc IN (".$socid.")";
- }
- if (! in_array($table_element, array('expensereport_det','stock_mouvement'))) $sql.= ' AND t.entity IN ('.getEntity('project').')';
- if ($linkedtothirdparty) $sql.=" AND s.rowid = t.fk_soc";
- if ($sqlfilter) $sql.= " AND ".$sqlfilter;
- $sql.= " ORDER BY ref DESC";
- dol_syslog(get_class($this).'::select_element', LOG_DEBUG);
- $resql=$this->db->query($sql);
- if ($resql)
- {
- $num = $this->db->num_rows($resql);
- $i = 0;
- if ($num > 0)
- {
- $sellist = '<select class="flat elementselect css'.$table_element.($morecss?' '.$morecss:'').'" name="elementselect">';
- $sellist .='<option value="-1"></option>';
- while ($i < $num)
- {
- $obj = $this->db->fetch_object($resql);
- $ref=$obj->ref?$obj->ref:$obj->rowid;
- if (! empty($obj->ref_supplier)) $ref.=' ('.$obj->ref_supplier.')';
- if (! empty($obj->name)) $ref.=' - '.$obj->name;
- $sellist .='<option value="'.$obj->rowid.'">'.$ref.'</option>';
- $i++;
- }
- $sellist .='</select>';
- }
- /*else
- {
- $sellist = '<select class="flat" name="elementselect">';
- $sellist.= '<option value="0" disabled>'.$langs->trans("None").'</option>';
- $sellist.= '</select>';
- }*/
- $this->db->free($resql);
- return $sellist;
- }
- else
- {
- dol_print_error($this->db);
- $this->error=$this->db->lasterror();
- $this->errors[]=$this->db->lasterror();
- dol_syslog(get_class($this) . "::select_element " . $this->error, LOG_ERR);
- return -1;
- }
- }
- /**
- * Build a HTML select list of element of same thirdparty to suggest to link them to project
- *
- * @param string $htmlname HTML name
- * @param string $preselected Preselected (int or 'all' or 'none')
- * @param int $showempty Add an empty line
- * @param int $useshortlabel Use short label
- * @param int $showallnone Add choice "All" and "None"
- * @param int $showpercent Show default probability for status
- * @param string $morecss Add more css
- * @return int|string The HTML select list of element or '' if nothing or -1 if KO
- */
- function selectOpportunityStatus($htmlname, $preselected='-1', $showempty=1, $useshortlabel=0, $showallnone=0, $showpercent=0, $morecss='')
- {
- global $conf, $langs;
- $sql = "SELECT rowid, code, label, percent";
- $sql.= " FROM ".MAIN_DB_PREFIX.'c_lead_status';
- $sql.= " WHERE active = 1";
- $sql.= " ORDER BY position";
- $resql=$this->db->query($sql);
- if ($resql)
- {
- $num = $this->db->num_rows($resql);
- $i = 0;
- if ($num > 0)
- {
- $sellist = '<select class="flat oppstatus'.($morecss?' '.$morecss:'').'" id="'.$htmlname.'" name="'.$htmlname.'">';
- if ($showempty) $sellist.= '<option value="-1"> </option>'; // Without  , strange move of screen when switching value
- if ($showallnone) $sellist.= '<option value="all"'.($preselected == 'all'?' selected="selected"':'').'>--'.$langs->trans("OnlyOpportunitiesShort").'--</option>';
- if ($showallnone) $sellist.= '<option value="openedopp"'.($preselected == 'openedopp'?' selected="selected"':'').'>--'.$langs->trans("OpenedOpportunitiesShort").'--</option>';
- if ($showallnone) $sellist.= '<option value="none"'.($preselected == 'none'?' selected="selected"':'').'>--'.$langs->trans("NotAnOpportunityShort").'--</option>';
- while ($i < $num)
- {
- $obj = $this->db->fetch_object($resql);
- $sellist .='<option value="'.$obj->rowid.'" defaultpercent="'.$obj->percent.'" elemcode="'.$obj->code.'"';
- if ($obj->rowid == $preselected) $sellist .= ' selected="selected"';
- $sellist .= '>';
- if ($useshortlabel)
- {
- $finallabel = ($langs->transnoentitiesnoconv("OppStatusShort".$obj->code) != "OppStatusShort".$obj->code ? $langs->transnoentitiesnoconv("OppStatusShort".$obj->code) : $obj->label);
- }
- else
- {
- $finallabel = ($langs->transnoentitiesnoconv("OppStatus".$obj->code) != "OppStatus".$obj->code ? $langs->transnoentitiesnoconv("OppStatus".$obj->code) : $obj->label);
- if ($showpercent) $finallabel.= ' ('.$obj->percent.'%)';
- }
- $sellist .= $finallabel;
- $sellist .='</option>';
- $i++;
- }
- $sellist .='</select>';
- }
- /*else
- {
- $sellist = '<select class="flat" name="elementselect">';
- $sellist.= '<option value="0" disabled>'.$langs->trans("None").'</option>';
- $sellist.= '</select>';
- }*/
- $this->db->free($resql);
- return $sellist;
- }
- else
- {
- $this->error=$this->db->lasterror();
- $this->errors[]=$this->db->lasterror();
- dol_syslog(get_class($this) . "::selectOpportunityStatus " . $this->error, LOG_ERR);
- return -1;
- }
- }
- }
|