32 require
'../main.inc.php';
33 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
34 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
35 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
36 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
38 if (!empty($conf->categorie->enabled))
40 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcategory.class.php';
41 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
45 $langs->loadLangs(array(
'projects',
'companies',
'commercial'));
47 $action =
GETPOST(
'action',
'aZ09');
48 $massaction =
GETPOST(
'massaction',
'alpha');
49 $show_files =
GETPOST(
'show_files',
'int');
50 $confirm =
GETPOST(
'confirm',
'alpha');
51 $toselect =
GETPOST(
'toselect',
'array');
52 $contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'projectlist';
54 $title = $langs->trans(
"Projects");
57 $socid = (is_numeric($_GET[
"socid"]) ? $_GET[
"socid"] : 0);
63 $title .=
' (<a href="list.php">'.$soc->name.
'</a>)';
67 $diroutputmassaction = $conf->projet->dir_output.
'/temp/massgeneration/'.$user->id;
69 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : $conf->liste_limit;
70 $sortfield =
GETPOST(
"sortfield",
"aZ09comma");
71 $sortorder =
GETPOST(
"sortorder",
'aZ09comma');
73 if (empty($page) || $page < 0 ||
GETPOST(
'button_search',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) { $page = 0; }
74 if (!$sortfield) $sortfield =
"p.ref";
75 if (!$sortorder) $sortorder =
"ASC";
76 $offset = $limit * $page;
77 $pageprev = $page - 1;
78 $pagenext = $page + 1;
80 $search_all =
GETPOST(
'search_all',
'alphanohtml') ?
GETPOST(
'search_all',
'alphanohtml') :
GETPOST(
'sall',
'alphanohtml');
81 $search_ref =
GETPOST(
"search_ref",
'alpha');
82 $search_label =
GETPOST(
"search_label",
'alpha');
83 $search_societe =
GETPOST(
"search_societe",
'alpha');
84 $search_status =
GETPOST(
"search_status",
'int');
85 $search_opp_status =
GETPOST(
"search_opp_status",
'alpha');
86 $search_opp_percent =
GETPOST(
"search_opp_percent",
'alpha');
87 $search_opp_amount =
GETPOST(
"search_opp_amount",
'alpha');
88 $search_budget_amount =
GETPOST(
"search_budget_amount",
'alpha');
89 $search_public =
GETPOST(
"search_public",
'int');
90 $search_project_user =
GETPOST(
'search_project_user',
'int');
91 $search_sale =
GETPOST(
'search_sale',
'int');
92 $search_usage_opportunity =
GETPOST(
'search_usage_opportunity',
'int');
93 $search_usage_task =
GETPOST(
'search_usage_task',
'int');
94 $search_usage_bill_time =
GETPOST(
'search_usage_bill_time',
'int');
95 $optioncss =
GETPOST(
'optioncss',
'alpha');
97 $mine = $_REQUEST[
'mode'] ==
'mine' ? 1 : 0;
98 if ($mine) { $search_project_user = $user->id; $mine = 0; }
100 $search_sday =
GETPOST(
'search_sday',
'int');
101 $search_smonth =
GETPOST(
'search_smonth',
'int');
102 $search_syear =
GETPOST(
'search_syear',
'int');
103 $search_eday =
GETPOST(
'search_eday',
'int');
104 $search_emonth =
GETPOST(
'search_emonth',
'int');
105 $search_eyear =
GETPOST(
'search_eyear',
'int');
107 if ($search_status ==
'') $search_status = -1;
109 if (!empty($conf->categorie->enabled))
111 $search_category_array =
GETPOST(
"search_category_".Categorie::TYPE_PROJECT.
"_list",
"array");
116 $hookmanager->initHooks(array(
'projectlist'));
120 $extrafields->fetch_name_optionals_label($object->table_element);
122 $search_array_options = $extrafields->getOptionalsFromPost($object->table_element,
'',
'search_');
125 $fieldstosearchall = array();
126 foreach ($object->fields as $key => $val) {
127 if (empty($val[
'searchall'])) {
132 if (!empty($user->socid) && $key ==
"note_private") {
136 $fieldstosearchall[
'p.'.$key] = $val[
'label'];
140 $fieldstosearchall[
's.nom'] =
"ThirdPartyName";
143 $arrayfields = array();
144 foreach ($object->fields as $key => $val) {
146 if (!empty($val[
'visible'])) {
147 $visible =
dol_eval($val[
'visible'], 1);
148 $arrayfields[
'p.'.$key] = array(
149 'label'=>$val[
'label'],
150 'checked'=>(($visible < 0) ? 0 : 1),
151 'enabled'=>($visible != 3 &&
dol_eval($val[
'enabled'], 1)),
152 'position'=>$val[
'position'],
158 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_array_fields.tpl.php';
161 $arrayfields[
's.nom'] = array(
'label'=>$langs->trans(
"ThirdParty"),
'checked'=>1,
'position'=>21,
'enabled'=>(empty($conf->societe->enabled) ? 0 : 1));
162 $arrayfields[
'commercial'] = array(
'label'=>$langs->trans(
"SaleRepresentativesOfThirdParty"),
'checked'=>0,
'position'=>23);
163 $arrayfields[
'opp_weighted_amount'] = array(
'label'=>$langs->trans(
'OpportunityWeightedAmountShort'),
'checked'=>0,
'position'=> 116,
'enabled'=>(empty($conf->global->PROJECT_USE_OPPORTUNITIES) ? 0 : 1),
'position'=>106);
174 if (
GETPOST(
'cancel',
'alpha')) { $action =
'list'; $massaction =
''; }
175 if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend' && $massaction !=
'confirm_createbills') { $massaction =
''; }
177 $parameters = array(
'socid'=>$socid);
178 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
179 if ($reshook < 0)
setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
184 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
187 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha'))
192 $search_societe =
"";
194 $search_opp_status = -1;
195 $search_opp_amount =
'';
196 $search_opp_percent =
'';
197 $search_budget_amount =
'';
200 $search_project_user =
'';
207 $search_usage_opportunity =
'';
208 $search_usage_task =
'';
209 $search_usage_bill_time =
'';
211 $search_array_options = array();
212 $search_category_array = array();
217 $objectclass =
'Project';
218 $objectlabel =
'Project';
219 $permissiontoread = $user->rights->projet->lire;
220 $permissiontodelete = $user->rights->projet->supprimer;
221 $uploaddir = $conf->projet->dir_output;
222 include DOL_DOCUMENT_ROOT.
'/core/actions_massactions.inc.php';
225 if (!$error && $massaction ==
'close' && $user->rights->projet->creer)
229 $objecttmp =
new $objectclass($db);
231 foreach ($toselect as $toselectid)
233 $result = $objecttmp->fetch($toselectid);
236 $userWrite = $object->restrictedProjectArea($user,
'write');
237 if ($userWrite > 0 && $objecttmp->statut == 1) {
238 $result = $objecttmp->setClose($user);
244 } elseif ($userWrite <= 0) {
245 setEventMessages($langs->trans(
"DontHavePermissionForCloseProject", $objecttmp->ref), null,
'warnings');
247 setEventMessages($langs->trans(
"DontHaveTheValidateStatus", $objecttmp->ref), null,
'warnings');
258 if ($nbok > 1)
setEventMessages($langs->trans(
"RecordsClosed", $nbok), null,
'mesgs');
259 else setEventMessages($langs->trans(
"RecordsClosed", $nbok), null,
'mesgs');
273 $form =
new Form($db);
277 $help_url =
"EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos";
278 $title = $langs->trans(
"Projects");
282 $projectsListId =
'';
283 if (!$user->rights->projet->all->lire) $projectsListId = $object->getProjectsAuthorizedForUser($user, 0, 1, $socid);
286 $listofprojectcontacttype = array();
287 $sql =
"SELECT ctc.rowid, ctc.code FROM ".MAIN_DB_PREFIX.
"c_type_contact as ctc";
288 $sql .=
" WHERE ctc.element = '".$db->escape($object->element).
"'";
289 $sql .=
" AND ctc.source = 'internal'";
290 $resql = $db->query($sql);
293 while ($obj = $db->fetch_object(
$resql))
295 $listofprojectcontacttype[$obj->rowid] = $obj->code;
298 if (count($listofprojectcontacttype) == 0) $listofprojectcontacttype[0] =
'0';
300 $distinct =
'DISTINCT';
301 $sql =
"SELECT ".$distinct.
" p.rowid as id, p.ref, p.title, p.fk_statut as status, p.fk_opp_status, p.public, p.fk_user_creat";
302 $sql .=
", p.datec as date_creation, p.dateo as date_start, p.datee as date_end, p.opp_amount, p.opp_percent, (p.opp_amount*p.opp_percent/100) as opp_weighted_amount, p.tms as date_update, p.budget_amount, p.usage_opportunity, p.usage_task, p.usage_bill_time";
303 $sql .=
", s.rowid as socid, s.nom as name, s.email";
304 $sql .=
", cls.code as opp_status_code";
306 if (!empty($extrafields->attributes[$object->table_element][
'label'])) {
307 foreach ($extrafields->attributes[$object->table_element][
'label'] as $key => $val) $sql .= ($extrafields->attributes[$object->table_element][
'type'][$key] !=
'separate' ?
", ef.".$key.
' as options_'.$key :
'');
310 $parameters = array();
311 $reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters, $object);
312 $sql .= preg_replace(
'/^,/',
'', $hookmanager->resPrint);
313 $sql = preg_replace(
'/,\s*$/',
'', $sql);
314 $sql .=
" FROM ".MAIN_DB_PREFIX.$object->table_element.
" as p";
315 if (!empty($conf->categorie->enabled))
319 if (is_array($extrafields->attributes[$object->table_element][
'label']) && count($extrafields->attributes[$object->table_element][
'label'])) $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element.
"_extrafields as ef on (p.rowid = ef.fk_object)";
320 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe as s on p.fk_soc = s.rowid";
321 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_lead_status as cls on p.fk_opp_status = cls.rowid";
325 if ($search_sale > 0) $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_commerciaux as sc ON sc.fk_soc = s.rowid";
326 if ($search_project_user > 0)
328 $sql .=
", ".MAIN_DB_PREFIX.
"element_contact as ecp";
330 $sql .=
" WHERE p.entity IN (".getEntity(
'project').
')';
331 if (!empty($conf->categorie->enabled))
335 if (!$user->rights->projet->all->lire) $sql .=
" AND p.rowid IN (".$projectsListId.
")";
337 if ($socid > 0) $sql .=
" AND (p.fk_soc = ".$socid.
")";
339 if ($search_label) $sql .=
natural_search(
'p.title', $search_label);
340 if ($search_societe) $sql .=
natural_search(
's.nom', $search_societe);
341 if ($search_opp_amount) $sql .=
natural_search(
'p.opp_amount', $search_opp_amount, 1);
342 if ($search_opp_percent) $sql .=
natural_search(
'p.opp_percent', $search_opp_percent, 1);
343 $sql .=
dolSqlDateFilter(
'p.dateo', $search_sday, $search_smonth, $search_syear);
344 $sql .=
dolSqlDateFilter(
'p.datee', $search_eday, $search_emonth, $search_eyear);
345 if ($search_all) $sql .=
natural_search(array_keys($fieldstosearchall), $search_all);
346 if ($search_status >= 0)
348 if ($search_status == 99) $sql .=
" AND p.fk_statut <> 2";
349 else $sql .=
" AND p.fk_statut = ".$db->escape($search_status);
351 if ($search_opp_status)
353 if (is_numeric($search_opp_status) && $search_opp_status > 0) $sql .=
" AND p.fk_opp_status = ".$db->escape($search_opp_status);
354 if ($search_opp_status ==
'all') $sql .=
" AND (p.fk_opp_status IS NOT NULL AND p.fk_opp_status <> -1)";
355 if ($search_opp_status ==
'openedopp') $sql .=
" AND p.fk_opp_status IS NOT NULL AND p.fk_opp_status <> -1 AND p.fk_opp_status NOT IN (SELECT rowid FROM ".MAIN_DB_PREFIX.
"c_lead_status WHERE code IN ('WON','LOST'))";
356 if ($search_opp_status ==
'notopenedopp') $sql .=
" AND (p.fk_opp_status IS NULL OR p.fk_opp_status = -1 OR p.fk_opp_status IN (SELECT rowid FROM ".MAIN_DB_PREFIX.
"c_lead_status WHERE code IN ('WON')))";
357 if ($search_opp_status ==
'none') $sql .=
" AND (p.fk_opp_status IS NULL OR p.fk_opp_status = -1)";
359 if ($search_public !=
'') $sql .=
" AND p.public = ".$db->escape($search_public);
362 if ($search_sale > 0) $sql .=
" AND sc.fk_user = ".$search_sale;
365 if ($search_project_user > 0) $sql .=
" AND ecp.fk_c_type_contact IN (".join(
',', array_keys($listofprojectcontacttype)).
") AND ecp.element_id = p.rowid AND ecp.fk_socpeople = ".$search_project_user;
366 if ($search_opp_amount !=
'') $sql .=
natural_search(
'p.opp_amount', $search_opp_amount, 1);
367 if ($search_budget_amount !=
'') $sql .=
natural_search(
'p.budget_amount', $search_budget_amount, 1);
368 if ($search_usage_opportunity !=
'' && $search_usage_opportunity >= 0) $sql .=
natural_search(
'p.usage_opportunity', $search_usage_opportunity, 2);
369 if ($search_usage_task !=
'' && $search_usage_task >= 0) $sql .=
natural_search(
'p.usage_task', $search_usage_task, 2);
370 if ($search_usage_bill_time !=
'' && $search_usage_bill_time >= 0) $sql .=
natural_search(
'p.usage_bill_time', $search_usage_bill_time, 2);
372 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_sql.tpl.php';
374 $parameters = array();
375 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters, $object);
376 $sql .= $hookmanager->resPrint;
377 $sql .= $db->order($sortfield, $sortorder);
380 $nbtotalofrecords =
'';
381 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
382 $resql = $db->query($sql);
383 $nbtotalofrecords = $db->num_rows(
$resql);
384 if (($page * $limit) > $nbtotalofrecords) {
390 if (is_numeric($nbtotalofrecords) && ($limit > $nbtotalofrecords || empty($limit))) {
391 $num = $nbtotalofrecords;
393 if ($limit) $sql .= $db->plimit($limit + 1, $offset);
395 $resql = $db->query($sql);
401 $num = $db->num_rows(
$resql);
405 if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all)
407 $obj = $db->fetch_object(
$resql);
408 header(
"Location: ".DOL_URL_ROOT.
'/projet/card.php?id='.$obj->id);
416 dol_syslog(
"list allowed project", LOG_DEBUG);
420 $arrayofselected = is_array($toselect) ? $toselect : array();
423 if (!empty($contextpage) && $contextpage !=
$_SERVER[
"PHP_SELF"]) $param .=
'&contextpage='.urlencode($contextpage);
424 if ($limit > 0 && $limit != $conf->liste_limit) $param .=
'&limit='.urlencode($limit);
425 if ($search_all !=
'') $param .=
'&search_all='.urlencode($search_all);
426 if ($search_sday) $param .=
'&search_sday='.urlencode($search_sday);
427 if ($search_smonth) $param .=
'&search_smonth='.urlencode($search_smonth);
428 if ($search_syear) $param .=
'&search_syear='.urlencode($search_syear);
429 if ($search_eday) $param .=
'&search_eday='.urlencode($search_eday);
430 if ($search_emonth) $param .=
'&search_emonth='.urlencode($search_emonth);
431 if ($search_eyear) $param .=
'&search_eyear='.urlencode($search_eyear);
432 if ($socid) $param .=
'&socid='.urlencode($socid);
433 if ($search_categ) $param .=
'&search_categ='.urlencode($search_categ);
434 if ($search_ref !=
'') $param .=
'&search_ref='.urlencode($search_ref);
435 if ($search_label !=
'') $param .=
'&search_label='.urlencode($search_label);
436 if ($search_societe !=
'') $param .=
'&search_societe='.urlencode($search_societe);
437 if ($search_status >= 0) $param .=
'&search_status='.urlencode($search_status);
438 if ((is_numeric($search_opp_status) && $search_opp_status >= 0) || in_array($search_opp_status, array(
'all',
'openedopp',
'notopenedopp',
'none'))) $param .=
'&search_opp_status='.urlencode($search_opp_status);
439 if ($search_opp_percent !=
'') $param .=
'&search_opp_percent='.urlencode($search_opp_percent);
440 if ($search_public !=
'') $param .=
'&search_public='.urlencode($search_public);
441 if ($search_project_user !=
'') $param .=
'&search_project_user='.urlencode($search_project_user);
442 if ($search_sale > 0) $param .=
'&search_sale='.urlencode($search_sale);
443 if ($search_opp_amount !=
'') $param .=
'&search_opp_amount='.urlencode($search_opp_amount);
444 if ($search_budget_amount !=
'') $param .=
'&search_budget_amount='.urlencode($search_budget_amount);
445 if ($optioncss !=
'') $param .=
'&optioncss='.urlencode($optioncss);
447 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_param.tpl.php';
450 $arrayofmassactions = array(
451 'generate_doc'=>$langs->trans(
"ReGeneratePDF"),
456 if ($user->rights->projet->creer) $arrayofmassactions[
'close'] = $langs->trans(
"Close");
457 if ($user->rights->projet->supprimer) $arrayofmassactions[
'predelete'] =
'<span class="fa fa-trash paddingrightonly"></span>'.$langs->trans(
"Delete");
458 if (in_array($massaction, array(
'presend',
'predelete'))) $arrayofmassactions = array();
460 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
462 $url = DOL_URL_ROOT.
'/projet/card.php?action=create';
463 if (!empty($socid)) $url .=
'&socid='.$socid;
464 $newcardbutton =
dolGetButtonTitle($langs->trans(
'NewProject'),
'',
'fa fa-plus-circle', $url,
'', $user->rights->projet->creer);
466 print '<form method="POST" id="searchFormList" action="'.$_SERVER[
"PHP_SELF"].
'">';
467 if ($optioncss !=
'')
print '<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
468 print '<input type="hidden" name="token" value="'.newToken().
'">';
469 print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
470 print '<input type="hidden" name="action" value="list">';
471 print '<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
472 print '<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
473 print '<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
477 if ($search_project_user == $user->id) $texthelp .= $langs->trans(
"MyProjectsDesc");
479 if ($user->rights->projet->all->lire && !$socid) $texthelp .= $langs->trans(
"ProjectsDesc");
480 else $texthelp .= $langs->trans(
"ProjectsPublicDesc");
483 print_barre_liste($form->textwithpicto($title, $texthelp), $page,
$_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'project', 0, $newcardbutton,
'', $limit, 0, 0, 1);
486 $topicmail =
"Information";
487 $modelmail =
"project";
489 $trackid =
'proj'.$object->id;
490 include DOL_DOCUMENT_ROOT.
'/core/tpl/massactions_pre.tpl.php';
494 foreach ($fieldstosearchall as $key => $val) $fieldstosearchall[$key] = $langs->trans($val);
495 print '<div class="divsearchfieldfilter">'.$langs->trans(
"FilterOnInto", $search_all).join(
', ', $fieldstosearchall).
'</div>';
501 if (!empty($conf->categorie->enabled) && $user->rights->categorie->lire)
504 $moreforfilter .= $formcategory->getFilterBox(Categorie::TYPE_PROJECT, $search_category_array);
508 $moreforfilter .=
'<div class="divsearchfield">';
509 $moreforfilter .= $langs->trans(
'ProjectsWithThisUserAsContact').
': ';
512 if (empty($user->rights->user->user->lire)) $includeonly = array($user->id);
513 $moreforfilter .= $form->select_dolusers($search_project_user ? $search_project_user :
'',
'search_project_user', 1,
'', 0, $includeonly,
'', 0, 0, 0,
'', 0,
'',
'maxwidth200');
514 $moreforfilter .=
'</div>';
517 if ($user->rights->societe->client->voir || $socid)
519 $langs->load(
"commercial");
520 $moreforfilter .=
'<div class="divsearchfield">';
521 $moreforfilter .= $langs->trans(
'ThirdPartiesOfSaleRepresentative').
': ';
522 $moreforfilter .= $formother->select_salesrepresentatives($search_sale,
'search_sale', $user, 0, 1,
'maxwidth200');
523 $moreforfilter .=
'</div>';
526 if (!empty($moreforfilter))
528 print '<div class="liste_titre liste_titre_bydiv centpercent">';
529 print $moreforfilter;
530 $parameters = array();
531 $reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters);
532 print $hookmanager->resPrint;
536 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
537 $selectedfields = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage);
538 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
540 print '<div class="div-table-responsive">';
541 print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
545 print '<tr class="liste_titre_filter">';
547 if (!empty($arrayfields[
'p.ref'][
'checked']))
549 print
'<td class="liste_titre">';
550 print
'<input type="text" class="flat" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'" size="6">';
554 if (!empty($arrayfields[
'p.title'][
'checked']))
556 print
'<td class="liste_titre">';
557 print
'<input type="text" class="flat" name="search_label" size="8" value="'.dol_escape_htmltag($search_label).
'">';
561 if (!empty($arrayfields[
's.nom'][
'checked']))
563 print
'<td class="liste_titre">';
566 $tmpthirdparty =
new Societe($db);
567 $tmpthirdparty->fetch($socid);
568 $search_societe = $tmpthirdparty->nom;
570 print
'<input type="text" class="flat" name="search_societe" size="8" value="'.dol_escape_htmltag($search_societe).
'">';
574 if (!empty($arrayfields[
'commercial'][
'checked']))
576 print
'<td class="liste_titre"> </td>';
579 if (!empty($arrayfields[
'p.dateo'][
'checked']))
581 print
'<td class="liste_titre center nowraponall">';
582 if (!empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print
'<input class="flat valignmiddle" type="text" size="1" maxlength="2" name="search_sday" value="'.dol_escape_htmltag($search_sday).
'">';
583 print
'<input class="flat valignmiddle" type="text" size="1" maxlength="2" name="search_smonth" value="'.dol_escape_htmltag($search_smonth).
'">';
584 $formother->select_year($search_syear ? $search_syear : -1,
'search_syear', 1, 20, 5, 0, 0,
'',
'widthauto valignmiddle');
588 if (!empty($arrayfields[
'p.datee'][
'checked']))
590 print
'<td class="liste_titre center nowraponall">';
591 if (!empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print
'<input class="flat valignmiddle" type="text" size="1" maxlength="2" name="search_eday" value="'.dol_escape_htmltag($search_eday).
'">';
592 print
'<input class="flat valignmiddle" type="text" size="1" maxlength="2" name="search_emonth" value="'.dol_escape_htmltag($search_emonth).
'">';
593 $formother->select_year($search_eyear ? $search_eyear : -1,
'search_eyear', 1, 20, 5, 0, 0,
'',
'widthauto valignmiddle');
596 if (!empty($arrayfields[
'p.public'][
'checked']))
598 print
'<td class="liste_titre">';
599 $array = array(
''=>
'', 0 => $langs->trans(
"PrivateProject"), 1 => $langs->trans(
"SharedProject"));
600 print $form->selectarray(
'search_public', $array, $search_public);
604 if (!empty($arrayfields[
'p.fk_opp_status'][
'checked']))
606 print
'<td class="liste_titre nowrap center">';
607 print $formproject->selectOpportunityStatus(
'search_opp_status', $search_opp_status, 1, 0, 1, 0,
'maxwidth100');
610 if (!empty($arrayfields[
'p.opp_amount'][
'checked']))
612 print
'<td class="liste_titre nowrap right">';
613 print
'<input type="text" class="flat" name="search_opp_amount" size="3" value="'.$search_opp_amount.
'">';
616 if (!empty($arrayfields[
'p.opp_percent'][
'checked']))
618 print
'<td class="liste_titre nowrap right">';
619 print
'<input type="text" class="flat" name="search_opp_percent" size="2" value="'.$search_opp_percent.
'">';
622 if (!empty($arrayfields[
'opp_weighted_amount'][
'checked']))
624 print
'<td class="liste_titre nowrap right">';
627 if (!empty($arrayfields[
'p.budget_amount'][
'checked']))
629 print
'<td class="liste_titre nowrap right">';
630 print
'<input type="text" class="flat" name="search_budget_amount" size="4" value="'.$search_budget_amount.
'">';
633 if (!empty($arrayfields[
'p.usage_opportunity'][
'checked']))
635 print
'<td class="liste_titre nowrap right">';
636 print $form->selectyesno(
'search_usage_opportunity', $search_usage_opportunity, 1,
false, 1);
640 if (!empty($arrayfields[
'p.usage_task'][
'checked']))
642 print
'<td class="liste_titre nowrap right">';
643 print $form->selectyesno(
'search_usage_task', $search_usage_task, 1,
false, 1);
646 if (!empty($arrayfields[
'p.usage_bill_time'][
'checked']))
648 print
'<td class="liste_titre nowrap right">';
649 print $form->selectyesno(
'search_usage_bill_time', $search_usage_bill_time, 1,
false, 1);
653 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_input.tpl.php';
656 $parameters = array(
'arrayfields'=>$arrayfields);
657 $reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters);
658 print $hookmanager->resPrint;
659 if (!empty($arrayfields[
'p.datec'][
'checked']))
662 print
'<td class="liste_titre">';
665 if (!empty($arrayfields[
'p.tms'][
'checked']))
668 print
'<td class="liste_titre">';
671 if (!empty($arrayfields[
'p.fk_statut'][
'checked']))
673 print
'<td class="liste_titre nowrap right">';
674 $arrayofstatus = array();
675 foreach ($object->statuts_short as $key => $val) $arrayofstatus[$key] = $langs->trans($val);
676 $arrayofstatus[
'99'] = $langs->trans(
"NotClosed").
' ('.$langs->trans(
'Draft').
' + '.$langs->trans(
'Opened').
')';
677 print $form->selectarray(
'search_status', $arrayofstatus, $search_status, 1, 0, 0,
'', 0, 0, 0,
'',
'minwidth75imp maxwidth150 selectarrowonleft');
682 print
'<td class="liste_titre maxwidthsearch">';
683 $searchpicto = $form->showFilterButtons();
689 print
'<tr class="liste_titre">';
690 if (!empty($arrayfields[
'p.ref'][
'checked']))
print_liste_field_titre($arrayfields[
'p.ref'][
'label'], $_SERVER[
"PHP_SELF"],
"p.ref",
"", $param,
"", $sortfield, $sortorder);
691 if (!empty($arrayfields[
'p.title'][
'checked']))
print_liste_field_titre($arrayfields[
'p.title'][
'label'], $_SERVER[
"PHP_SELF"],
"p.title",
"", $param,
"", $sortfield, $sortorder);
692 if (!empty($arrayfields[
's.nom'][
'checked']))
print_liste_field_titre($arrayfields[
's.nom'][
'label'], $_SERVER[
"PHP_SELF"],
"s.nom",
"", $param,
"", $sortfield, $sortorder);
693 if (!empty($arrayfields[
'commercial'][
'checked']))
print_liste_field_titre($arrayfields[
'commercial'][
'label'], $_SERVER[
"PHP_SELF"],
"",
"", $param,
"", $sortfield, $sortorder,
'tdoverflowmax100imp ');
694 if (!empty($arrayfields[
'p.dateo'][
'checked']))
print_liste_field_titre($arrayfields[
'p.dateo'][
'label'], $_SERVER[
"PHP_SELF"],
"p.dateo",
"", $param,
'', $sortfield, $sortorder,
'center ');
695 if (!empty($arrayfields[
'p.datee'][
'checked']))
print_liste_field_titre($arrayfields[
'p.datee'][
'label'], $_SERVER[
"PHP_SELF"],
"p.datee",
"", $param,
'', $sortfield, $sortorder,
'center ');
696 if (!empty($arrayfields[
'p.public'][
'checked']))
print_liste_field_titre($arrayfields[
'p.public'][
'label'], $_SERVER[
"PHP_SELF"],
"p.public",
"", $param,
"", $sortfield, $sortorder);
697 if (!empty($arrayfields[
'p.fk_opp_status'][
'checked']))
print_liste_field_titre($arrayfields[
'p.fk_opp_status'][
'label'], $_SERVER[
"PHP_SELF"],
'p.fk_opp_status',
"", $param,
'', $sortfield, $sortorder,
'center ');
698 if (!empty($arrayfields[
'p.opp_amount'][
'checked']))
print_liste_field_titre($arrayfields[
'p.opp_amount'][
'label'], $_SERVER[
"PHP_SELF"],
'p.opp_amount',
"", $param,
'', $sortfield, $sortorder,
'right ');
699 if (!empty($arrayfields[
'p.opp_percent'][
'checked']))
print_liste_field_titre($arrayfields[
'p.opp_percent'][
'label'], $_SERVER[
'PHP_SELF'],
'p.opp_percent',
"", $param,
'', $sortfield, $sortorder,
'right ');
700 if (!empty($arrayfields[
'opp_weighted_amount'][
'checked']))
print_liste_field_titre($arrayfields[
'opp_weighted_amount'][
'label'], $_SERVER[
'PHP_SELF'],
'opp_weighted_amount',
'', $param,
'', $sortfield, $sortorder,
'right ');
701 if (!empty($arrayfields[
'p.budget_amount'][
'checked']))
print_liste_field_titre($arrayfields[
'p.budget_amount'][
'label'], $_SERVER[
"PHP_SELF"],
'p.budget_amount',
"", $param,
'', $sortfield, $sortorder,
'right ');
702 if (!empty($arrayfields[
'p.usage_opportunity'][
'checked']))
print_liste_field_titre($arrayfields[
'p.usage_opportunity'][
'label'], $_SERVER[
"PHP_SELF"],
'p.usage_opportunity',
"", $param,
'', $sortfield, $sortorder,
'right ');
703 if (!empty($arrayfields[
'p.usage_task'][
'checked']))
print_liste_field_titre($arrayfields[
'p.usage_task'][
'label'], $_SERVER[
"PHP_SELF"],
'p.usage_task',
"", $param,
'', $sortfield, $sortorder,
'right ');
704 if (!empty($arrayfields[
'p.usage_bill_time'][
'checked']))
print_liste_field_titre($arrayfields[
'p.usage_bill_time'][
'label'], $_SERVER[
"PHP_SELF"],
'p.usage_bill_time',
"", $param,
'', $sortfield, $sortorder,
'right ');
706 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_title.tpl.php';
708 $parameters = array(
'arrayfields'=>$arrayfields,
'param'=>$param,
'sortfield'=>$sortfield,
'sortorder'=>$sortorder);
709 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters);
710 print $hookmanager->resPrint;
711 if (!empty($arrayfields[
'p.datec'][
'checked']))
print_liste_field_titre($arrayfields[
'p.datec'][
'label'], $_SERVER[
"PHP_SELF"],
"p.datec",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
712 if (!empty($arrayfields[
'p.tms'][
'checked']))
print_liste_field_titre($arrayfields[
'p.tms'][
'label'], $_SERVER[
"PHP_SELF"],
"p.tms",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
713 if (!empty($arrayfields[
'p.fk_statut'][
'checked']))
print_liste_field_titre($arrayfields[
'p.fk_statut'][
'label'], $_SERVER[
"PHP_SELF"],
"p.fk_statut",
"", $param,
'', $sortfield, $sortorder,
'right ');
714 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ');
722 while ($i < min($num, $limit))
724 $obj = $db->fetch_object(
$resql);
726 $object->id = $obj->id;
727 $object->user_author_id = $obj->fk_user_creat;
728 $object->public = $obj->public;
729 $object->ref = $obj->ref;
730 $object->datee = $db->jdate($obj->date_end);
731 $object->statut = $obj->status;
732 $object->status = $obj->status;
733 $object->public = $obj->public;
734 $object->opp_status = $obj->fk_opp_status;
735 $object->title = $obj->title;
737 $userAccess = $object->restrictedProjectArea($user);
738 if ($userAccess >= 0)
740 $socstatic->id = $obj->socid;
741 $socstatic->name = $obj->name;
742 $socstatic->email = $obj->email;
744 print
'<tr class="oddeven">';
747 if (!empty($arrayfields[
'p.ref'][
'checked']))
749 print
'<td class="nowraponall">';
750 print $object->getNomUrl(1);
751 if ($object->hasDelay()) print
img_warning($langs->trans(
'Late'));
753 if (!$i) $totalarray[
'nbfield']++;
756 if (!empty($arrayfields[
'p.title'][
'checked']))
758 print
'<td class="tdoverflowmax200">';
761 if (!$i) $totalarray[
'nbfield']++;
764 if (!empty($arrayfields[
's.nom'][
'checked']))
766 print
'<td class="tdoverflowmax100">';
769 print $socstatic->getNomUrl(1);
774 if (!$i) $totalarray[
'nbfield']++;
777 if (!empty($arrayfields[
'commercial'][
'checked']))
782 $socstatic->id = $obj->socid;
783 $socstatic->name = $obj->name;
784 $listsalesrepresentatives = $socstatic->getSalesRepresentatives($user);
785 $nbofsalesrepresentative = count($listsalesrepresentatives);
786 if ($nbofsalesrepresentative > 3)
788 print $nbofsalesrepresentative;
789 } elseif ($nbofsalesrepresentative > 0)
791 $userstatic =
new User($db);
793 foreach ($listsalesrepresentatives as $val)
795 $userstatic->id = $val[
'id'];
796 $userstatic->lastname = $val[
'lastname'];
797 $userstatic->firstname = $val[
'firstname'];
798 $userstatic->email = $val[
'email'];
799 $userstatic->statut = $val[
'statut'];
800 $userstatic->entity = $val[
'entity'];
801 $userstatic->photo = $val[
'photo'];
802 print $userstatic->getNomUrl(1,
'', 0, 0, 12);
805 if ($j < $nbofsalesrepresentative) print
' ';
813 if (!$i) $totalarray[
'nbfield']++;
816 if (!empty($arrayfields[
'p.dateo'][
'checked']))
818 print
'<td class="center">';
821 if (!$i) $totalarray[
'nbfield']++;
824 if (!empty($arrayfields[
'p.datee'][
'checked']))
826 print
'<td class="center">';
829 if (!$i) $totalarray[
'nbfield']++;
832 if (!empty($arrayfields[
'p.public'][
'checked']))
834 print
'<td class="left">';
835 if ($obj->public) print $langs->trans(
'SharedProject');
836 else print $langs->trans(
'PrivateProject');
838 if (!$i) $totalarray[
'nbfield']++;
841 if (!empty($arrayfields[
'p.fk_opp_status'][
'checked']))
843 print
'<td class="center">';
844 if ($obj->opp_status_code) print $langs->trans(
"OppStatus".$obj->opp_status_code);
846 if (!$i) $totalarray[
'nbfield']++;
849 if (!empty($arrayfields[
'p.opp_amount'][
'checked']))
851 print
'<td class="right">';
853 if (strcmp($obj->opp_amount,
''))
855 print
price($obj->opp_amount, 1, $langs, 1, -1, -1,
'');
856 $totalarray[
'val'][
'p.opp_amount'] += $obj->opp_amount;
859 if (!$i) $totalarray[
'nbfield']++;
860 if (!$i) $totalarray[
'pos'][$totalarray[
'nbfield']] =
'p.opp_amount';
863 if (!empty($arrayfields[
'p.opp_percent'][
'checked']))
865 print
'<td class="right">';
866 if ($obj->opp_percent) print
price($obj->opp_percent, 1, $langs, 1, 0).
'%';
868 if (!$i) $totalarray[
'nbfield']++;
871 if (!empty($arrayfields[
'opp_weighted_amount'][
'checked']))
873 if (!isset($totalarray[
'val'][
'opp_weighted_amount'])) $totalarray[
'val'][
'opp_weighted_amount'] = 0;
874 print
'<td align="right">';
875 if ($obj->opp_weighted_amount) {
876 print
price($obj->opp_weighted_amount, 1, $langs, 1, -1, -1,
'');
877 $totalarray[
'val'][
'opp_weighted_amount'] += $obj->opp_weighted_amount;
880 if (!$i) $totalarray[
'nbfield']++;
881 if (!$i) $totalarray[
'pos'][$totalarray[
'nbfield']] =
'opp_weighted_amount';
884 if (!empty($arrayfields[
'p.budget_amount'][
'checked']))
886 print
'<td class="right">';
887 if ($obj->budget_amount !=
'')
889 print
price($obj->budget_amount, 1, $langs, 1, -1, -1);
890 $totalarray[
'val'][
'p.budget_amount'] += $obj->budget_amount;
893 if (!$i) $totalarray[
'nbfield']++;
894 if (!$i) $totalarray[
'pos'][$totalarray[
'nbfield']] =
'p.budget_amount';
897 if (!empty($arrayfields[
'p.usage_opportunity'][
'checked']))
899 print
'<td class="right">';
900 if ($obj->usage_opportunity)
902 print
yn($obj->usage_opportunity);
905 if (!$i) $totalarray[
'nbfield']++;
908 if (!empty($arrayfields[
'p.usage_task'][
'checked']))
910 print
'<td class="right">';
911 if ($obj->usage_task)
913 print
yn($obj->usage_task);
916 if (!$i) $totalarray[
'nbfield']++;
919 if (!empty($arrayfields[
'p.usage_bill_time'][
'checked']))
921 print
'<td class="right">';
922 if ($obj->usage_bill_time)
924 print
yn($obj->usage_bill_time);
927 if (!$i) $totalarray[
'nbfield']++;
930 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_print_fields.tpl.php';
932 $parameters = array(
'arrayfields'=>$arrayfields,
'obj'=>$obj,
'i'=>$i,
'totalarray'=>&$totalarray);
933 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters);
934 print $hookmanager->resPrint;
936 if (!empty($arrayfields[
'p.datec'][
'checked']))
938 print
'<td class="center">';
939 print
dol_print_date($db->jdate($obj->date_creation),
'dayhour',
'tzuser');
941 if (!$i) $totalarray[
'nbfield']++;
944 if (!empty($arrayfields[
'p.tms'][
'checked']))
946 print
'<td class="center">';
947 print
dol_print_date($db->jdate($obj->date_update),
'dayhour',
'tzuser');
949 if (!$i) $totalarray[
'nbfield']++;
952 if (!empty($arrayfields[
'p.fk_statut'][
'checked']))
954 print
'<td class="right">'.$object->getLibStatut(5).
'</td>';
955 if (!$i) $totalarray[
'nbfield']++;
958 print
'<td class="nowrap center">';
959 if ($massactionbutton || $massaction)
962 if (in_array($obj->id, $arrayofselected)) $selected = 1;
963 print
'<input id="cb'.$obj->id.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
966 if (!$i) $totalarray[
'nbfield']++;
975 include DOL_DOCUMENT_ROOT.
'/core/tpl/list_print_total.tpl.php';
979 $parameters = array(
'sql' => $sql);
980 $reshook = $hookmanager->executeHooks(
'printFieldListFooter', $parameters);
981 print $hookmanager->resPrint;
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
dol_eval($s, $returnvalue=0, $hideerrors=1)
Replace eval function to add more security.
dolGetButtonTitle($label, $helpText= '', $iconClass= 'fa fa-file', $url= '', $id= '', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
Class to manage Dolibarr users.
static getFilterSelectQuery($type, $rowIdName, $searchList)
Return the addtional SQL SELECT query for filtering a list by a category.
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete= 'resolve')
Convert a html select field into an ajax combobox.
static getFilterJoinQuery($type, $rowIdName)
Return the addtional SQL JOIN query for filtering a list by a category.
img_warning($titlealt= 'default', $moreatt= '', $morecss= 'pictowarning')
Show warning logo.
price($amount, $form=0, $outlangs= '', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code= '')
Function to format a value into an amount for visual output Function used into PDF and HTML pages...
setEventMessages($mesg, $mesgs, $style= 'mesgs', $messagekey= '')
Set event messages in dol_events session object.
print_barre_liste($titre, $page, $file, $options= '', $sortfield= '', $sortorder= '', $morehtmlcenter= '', $num=-1, $totalnboflines= '', $picto= 'generic', $pictoisfullpath=0, $morehtmlright= '', $morecss= '', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow= '')
Print a title with navigation controls for pagination.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname.
Class to manage third parties objects (customers, suppliers, prospects...)
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
Class to manage projects.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
accessforbidden($message= '', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
dolSqlDateFilter($datefield, $day_date, $month_date, $year_date, $excludefirstand=0)
Generate a SQL string to make a filter into a range (for second of date until last second of date) ...
print $_SERVER["PHP_SELF"]
Edit parameters.
dol_sort_array(&$array, $index, $order= 'asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by second index function, which produces ascending (default) or descending output...
print
Draft customers invoices.
dol_print_date($time, $format= '', $tzoutput= 'auto', $outputlangs= '', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) if(!empty($conf->don->enabled)&&$user->rights->don->lire) if(!empty($conf->tax->enabled)&&$user->rights->tax->charges->lire) if(!empty($conf->facture->enabled)&&!empty($conf->commande->enabled)&&$user->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) $resql
Social contributions to pay.
dol_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_trunc($string, $size=40, $trunc= 'right', $stringencoding= 'UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '...' if string larger than length.