use formintervention

This commit is contained in:
Christophe Battarel 2021-06-30 10:56:09 +02:00
parent 27e2c62cab
commit 3b4ea5c5af
3 changed files with 12 additions and 147 deletions

View File

@ -8746,147 +8746,6 @@ class Form
return $out;
}
/**
* Output a combo list with interventions 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 intervention 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
* @param User $usertofilter User object to use for filtering
* @return int Nbr of project if OK, <0 if KO
*/
public function selectIntervention($socid = -1, $selected = '', $htmlname = 'interid', $maxlength = 24, $option_only = 0, $show_empty = '1', $discard_closed = 0, $forcefocus = 0, $disabled = 0, $morecss = 'maxwidth500', $projectsListId = '', $showproject = 'all', $usertofilter = null)
{
global $user, $conf, $langs;
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
if (is_null($usertofilter)) {
$usertofilter = $user;
}
$out = '';
$hideunselectables = false;
if (!empty($conf->global->PROJECT_HIDE_UNSELECTABLES)) $hideunselectables = true;
if (empty($projectsListId)) {
if (empty($usertofilter->rights->projet->all->lire)) {
$projectstatic = new Project($this->db);
$projectsListId = $projectstatic->getProjectsAuthorizedForUser($usertofilter, 0, 1);
}
}
// Search all projects
$sql = 'SELECT i.rowid, i.ref as ref, 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.'fichinter as i';
$sql .= " WHERE p.entity IN (".getEntity('project').")";
$sql .= " AND i.fk_projet = p.rowid AND i.fk_statut=0"; //Brouillons seulement
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 .= " GROUP BY i.ref ORDER BY p.ref, i.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 = 'minwidth200imp 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 .= '&nbsp;';
$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($usertofilter->rights->societe->lire)) {
// Do nothing
} else {
if ($discard_closed == 1 && $obj->fk_statut == Project::STATUS_CLOSED) {
$i++;
continue;
}
$labeltoshow = '';
if ($showproject == 'all') {
$labeltoshow .= dol_trunc($obj->ref, 18); // Intervention ref
if ($obj->name) $labeltoshow .= ' - '.$obj->name; // Soc name
$disabled = 0;
if ($obj->fk_statut == Project::STATUS_DRAFT) {
$disabled = 1;
$labeltoshow .= ' - '.$langs->trans("Draft");
} elseif ($obj->fk_statut == Project::STATUS_CLOSED) {
if ($discard_closed == 2) $disabled = 1;
$labeltoshow .= ' - '.$langs->trans("Closed");
} elseif ($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;
}
}
$i++;
}
}
if (empty($option_only)) {
$out .= '</select>';
}
print $out;
$this->db->free($resql);
return $num;
} else {
dol_print_error($this->db);
return -1;
}
}
/**
* Output a combo list with invoices qualified for a third party
*

View File

@ -57,10 +57,11 @@ class FormIntervention
* @param int $selected Id intervention preselected
* @param string $htmlname Nom de la zone html
* @param int $maxlength Maximum length of label
* @param int $showempty Show empty line
* @param int $showempty Show empty line ('1' or string to show for empty line)
* @param int $draftonly Show only drafts intervention
* @return int Nbre of project if OK, <0 if KO
*/
public function select_interventions($socid = -1, $selected = '', $htmlname = 'interventionid', $maxlength = 16, $showempty = 1)
public function select_interventions($socid = -1, $selected = '', $htmlname = 'interventionid', $maxlength = 16, $showempty = 1, $draftonly = false)
{
// phpcs:enable
global $db, $user, $conf, $langs;
@ -80,13 +81,17 @@ class FormIntervention
$sql .= " AND f.fk_soc = ".((int) $socid);
}
}
if ($draftonly) $sql .= " AND f.fk_statut = 0";
dol_syslog(get_class($this)."::select_intervention", LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql) {
$out .= '<select id="interventionid" class="flat" name="'.dol_escape_htmltag($htmlname).'">';
if ($showempty) {
$out .= '<option value="0">&nbsp;</option>';
$out .= '<option value="0">';
if (!is_numeric($showempty)) $out .= $showempty;
else $out .= '&nbsp;';
$out .= '</option>';
}
$num = $this->db->num_rows($resql);
$i = 0;
@ -102,7 +107,7 @@ class FormIntervention
$out .= '<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
} else {
$disabled = 0;
if (!$obj->fk_statut > 0) {
if (!$obj->fk_statut > 0 && ! $draftonly) {
$disabled = 1;
$labeltoshow .= ' ('.$langs->trans("Draft").')';
}

View File

@ -35,6 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formintervention.class.php';
// Load translation files required by the page
$langsLoad=array('projects', 'bills', 'orders');
@ -1118,8 +1119,8 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0) {
print $langs->trans('InterToUse');
print '</td>';
print '<td>';
$form->selectIntervention($projectstatic->thirdparty->id, '', 'interid', 24, 0, $langs->trans('NewInter'),
1, 0, 0, 'maxwidth500', '', 'all');
$forminter = new FormIntervention($db);
print $forminter->select_interventions($projectstatic->thirdparty->id, '', 'interid', 24, $langs->trans('NewInter'), true);
print '</td>';
print '</tr>';
print '</table>';