30require
'../main.inc.php';
31require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
32require_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/lib/project.lib.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
46$langs->loadLangs(array(
'projects',
'companies'));
51$hookmanager->initHooks(array(
'projectsindex'));
53$action =
GETPOST(
'action',
'aZ09');
54$search_project_user =
GETPOST(
'search_project_user');
55$mine = (
GETPOST(
'mode',
'aZ09') ==
'mine' || $search_project_user == $user->id) ? 1 : 0;
56if ($mine == 0 && $search_project_user ===
'') {
59if ($search_project_user == $user->id) {
63$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
64$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
71if (!$user->hasRight(
'projet',
'lire')) {
81$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
86 if ($action ==
'refresh_search_project_user' && $user->hasRight(
'projet',
'lire')) {
87 $search_project_user =
GETPOSTINT(
'search_project_user');
88 $tabparam = array(
"MAIN_SEARCH_PROJECT_USER_PROJECTSINDEX" => $search_project_user);
90 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
100$companystatic =
new Societe($db);
101$projectstatic =
new Project($db);
102$form =
new Form($db);
105$projectset = ($mine ? $mine : (!$user->hasRight(
'projet',
'all',
'lire') ? 0 : 2));
106$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user, $projectset, 1);
110$title = $langs->trans(
'ProjectsArea');
112$help_url =
'EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos|DE:Modul_Projekte';
114llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-project page-dashboard');
121$titleall = $langs->trans(
"AllAllowedProjects");
122if ($user->hasRight(
'projet',
'all',
'lire') && !$socid) {
123 $titleall = $langs->trans(
"AllProjects");
125 $titleall = $langs->trans(
"AllAllowedProjects").
'<br><br>';
129$morehtml .=
'<form name="projectform" method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
130$morehtml .=
'<input type="hidden" name="token" value="'.newToken().
'">';
131$morehtml .=
'<input type="hidden" name="action" value="refresh_search_project_user">';
133$morehtml .=
'<SELECT name="search_project_user" id="search_project_user">';
134$morehtml .=
'<option name="all" value="0"'.($mine ?
'' :
' selected').
'>'.$titleall.
'</option>';
135$morehtml .=
'<option name="mine" value="'.$user->id.
'"'.(($search_project_user == $user->id) ?
' selected' :
'').
'>'.$langs->trans(
"ProjectsImContactFor").
'</option>';
136$morehtml .=
'</SELECT>';
137$morehtml .=
ajax_combobox(
"search_project_user", array(), 0, 0,
'resolve',
'-1',
'small');
138$morehtml .=
'<input type="submit" class="button smallpaddingimp" name="refresh" value="'.$langs->trans(
"Refresh").
'">';
139$morehtml .=
'</form>';
142 $htmltooltip = $langs->trans(
"MyProjectsDesc");
144 if ($user->hasRight(
'projet',
'all',
'lire') && !$socid) {
145 $htmltooltip = $langs->trans(
"ProjectsDesc");
147 $htmltooltip = $langs->trans(
"ProjectsPublicDesc");
151print_barre_liste($form->textwithpicto($title, $htmltooltip), 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', 0, -1,
'project', 0, $morehtml);
155include DOL_DOCUMENT_ROOT.
'/theme/'.
$conf->theme.
'/theme_vars.inc.php';
158@phan-var-force string $badgeStatus0
159@phan-var-force string $badgeStatus1
160@phan-var-force string $badgeStatus2
161@phan-var-force string $badgeStatus3
162@phan-var-force string $badgeStatus4
163@phan-var-force string $badgeStatus5
164@phan-var-force string $badgeStatus6
165@phan-var-force string $badgeStatus7
166@phan-var-force string $badgeStatus8
167@phan-var-force string $badgeStatus9
169$listofoppstatus = array();
170$listofopplabel = array();
171$listofoppcode = array();
172$colorseries = array();
173$sql =
"SELECT cls.rowid, cls.code, cls.percent, cls.label";
174$sql .=
" FROM ".MAIN_DB_PREFIX.
"c_lead_status as cls";
175$sql .=
" WHERE active=1";
176$resql = $db->query($sql);
178 $num = $db->num_rows($resql);
182 $objp = $db->fetch_object($resql);
183 $listofoppstatus[$objp->rowid] = $objp->percent;
184 $listofopplabel[$objp->rowid] = $objp->label;
185 $listofoppcode[$objp->rowid] = $objp->code;
186 switch ($objp->code) {
188 $colorseries[$objp->rowid] =
"-".$badgeStatus0;
191 $colorseries[$objp->rowid] =
"-".$badgeStatus1;
194 $colorseries[$objp->rowid] = $badgeStatus1;
197 $colorseries[$objp->rowid] = $badgeStatus4;
200 $colorseries[$objp->rowid] = $badgeStatus9;
203 $colorseries[$objp->rowid] = $badgeStatus6;
206 $colorseries[$objp->rowid] = $badgeStatus2;
217print
'<div class="fichecenter">';
219print
'<div class="twocolumns">';
221print
'<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">';
225include DOL_DOCUMENT_ROOT.
'/projet/graph_opportunities.inc.php';
228print_projecttasks_array($db, $form, $socid, $projectsListId, 0, 0, $listofoppstatus, array(
'projectlabel',
'plannedworkload',
'declaredprogress',
'prospectionstatus',
'projectstatus'), $max);
231print
'</div><div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">';
235$sql =
"SELECT p.rowid, p.ref, p.title, p.dateo as date_start, p.datee as date_end, p.fk_statut as status, p.tms as datem";
236$sql .=
", s.rowid as socid, s.nom as name, s.name_alias";
237$sql .=
", s.code_client, s.code_compta, s.client";
238$sql .=
", s.code_fournisseur, s.code_compta_fournisseur, s.fournisseur";
239$sql .=
", s.logo, s.email, s.entity";
240$sql .=
", s.canvas, s.status as thirdpartystatus";
241$sql .=
" FROM ".MAIN_DB_PREFIX.
"projet as p";
242$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe as s on p.fk_soc = s.rowid";
243$sql .=
" WHERE p.entity IN (".getEntity(
'project').
")";
244if ($mine || !$user->hasRight(
'projet',
'all',
'lire')) {
245 $sql .=
" AND p.rowid IN (".$db->sanitize($projectsListId).
")";
248 $sql .=
" AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".((int) $socid).
")";
250$sql .=
" ORDER BY p.tms DESC";
251$sql .= $db->plimit($max, 0);
253$resql = $db->query($sql);
255 startSimpleTable($langs->trans(
"LatestModifiedProjects", $max),
"projet/list.php",
"sortfield=p.tms&sortorder=DESC", 3, -1,
'project');
257 $num = $db->num_rows($resql);
262 $obj = $db->fetch_object($resql);
264 print
'<tr class="oddeven">';
265 print
'<td class="nowrap">';
267 $projectstatic->id = $obj->rowid;
268 $projectstatic->ref = $obj->ref;
269 $projectstatic->title = $obj->title;
270 $projectstatic->thirdparty_name = $obj->name;
271 $projectstatic->status = $obj->status;
272 $projectstatic->date_start = $db->jdate($obj->date_start);
273 $projectstatic->date_end = $db->jdate($obj->date_end);
275 $companystatic->id = $obj->socid;
276 $companystatic->name = $obj->name;
277 $companystatic->name_alias = $obj->name_alias;
279 $companystatic->code_compta = $obj->code_compta;
280 $companystatic->code_compta_client = $obj->code_compta;
281 $companystatic->client = $obj->client;
283 $companystatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
284 $companystatic->fournisseur = $obj->fournisseur;
285 $companystatic->logo = $obj->logo;
286 $companystatic->email = $obj->email;
287 $companystatic->entity = $obj->entity;
288 $companystatic->canvas = $obj->canvas;
289 $companystatic->status = $obj->thirdpartystatus;
291 print
'<table class="nobordernopadding"><tr class="nocellnopadd">';
292 print
'<td width="96" class="nobordernopadding nowraponall">';
293 print $projectstatic->getNomUrl(1);
296 print
'<td width="16" class="nobordernopadding nowrap">';
300 print
'<td width="16" class="right nobordernopadding hideonsmartphone">';
303 $urlsource = $_SERVER[
'PHP_SELF'].
'?id='.$obj->rowid;
304 print $formfile->getDocumentsLink($projectstatic->element, $filename, $filedir);
305 print
'</td></tr></table>';
310 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($obj->title).
'">';
315 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($companystatic->name).
'">';
316 if ($companystatic->id > 0) {
317 print $companystatic->getNomUrl(1,
'company', 16);
322 $datem = $db->jdate($obj->datem);
323 print
'<td class="center" title="'.dol_escape_htmltag($langs->trans(
"DateModification").
': '.
dol_print_date($datem,
'dayhour',
'tzuserrel')).
'">';
328 print
'<td class="right">'.$projectstatic->LibStatut($obj->status, 3).
'</td>';
333 print
'<tr><td colspan="4"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
342$companystatic =
new Societe($db);
344if (empty($sortfield)) {
350$sql =
"SELECT COUNT(p.rowid) as nb, SUM(p.opp_amount)";
351$sql .=
", s.rowid as socid, s.nom as name, s.name_alias";
352$sql .=
", s.code_client, s.code_compta, s.client";
353$sql .=
", s.code_fournisseur, s.code_compta_fournisseur, s.fournisseur";
354$sql .=
", s.logo, s.email, s.entity";
355$sql .=
", s.canvas, s.status";
356$sql .=
" FROM ".MAIN_DB_PREFIX.
"projet as p";
357$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe as s on p.fk_soc = s.rowid";
358$sql .=
" WHERE p.entity IN (".getEntity(
'project').
")";
359$sql .=
" AND p.fk_statut = 1";
360if ($mine || !$user->hasRight(
'projet',
'all',
'lire')) {
361 $sql .=
" AND p.rowid IN (".$db->sanitize($projectsListId).
")";
364 $sql .=
" AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".((int) $socid).
")";
366$sql .=
" GROUP BY s.rowid, s.nom, s.name_alias, s.code_client, s.code_compta, s.client, s.code_fournisseur, s.code_compta_fournisseur, s.fournisseur, s.logo, s.email, s.entity, s.canvas, s.status";
367$sql .= $db->order($sortfield, $sortorder);
370$resql = $db->query($sql);
372 $num = $db->num_rows($resql);
378 print
'<div class="div-table-responsive-no-min">';
379 print
'<table class="noborder centpercent">';
380 print
'<tr class="liste_titre">';
381 print_liste_field_titre(
"OpenedProjectsByThirdparties", $_SERVER[
"PHP_SELF"],
"",
"",
"",
'', $sortfield, $sortorder);
387 $obj = $db->fetch_object($resql);
390 $othernb += $obj->nb;
395 print
'<tr class="oddeven">';
396 print
'<td class="nowraponall tdoverflowmax100">';
397 if ($obj->socid > 0) {
398 $companystatic->id = $obj->socid;
399 $companystatic->name = $obj->name;
400 $companystatic->name_alias = $obj->name_alias;
401 $companystatic->code_client = $obj->code_client;
402 $companystatic->code_compta = $obj->code_compta;
403 $companystatic->code_compta_client = $obj->code_compta;
404 $companystatic->client = $obj->client;
405 $companystatic->code_fournisseur = $obj->code_fournisseur;
406 $companystatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
407 $companystatic->fournisseur = $obj->fournisseur;
408 $companystatic->logo = $obj->logo;
409 $companystatic->email = $obj->email;
410 $companystatic->entity = $obj->entity;
411 $companystatic->canvas = $obj->canvas;
412 $companystatic->status = $obj->status;
414 print $companystatic->getNomUrl(1);
416 print $langs->trans(
"OthersNotLinkedToThirdParty");
419 print
'<td class="right">';
421 print
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?socid='.$obj->socid.
'&search_status=1">'.$obj->nb.
'</a>';
423 print
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?search_societe='.urlencode(
'^$').
'&search_status=1">'.$obj->nb.
'</a>';
431 print
'<tr class="oddeven">';
432 print
'<td class="nowrap">';
433 print
'<span class="opacitymedium">'.$langs->trans(
"More").
'...</span>';
435 print
'<td class="nowrap right">';
459print
'</div></div></div>';
461$parameters = array(
'user' => $user);
462$reshook = $hookmanager->executeHooks(
'dashboardProjects', $parameters, $projectstatic);
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
dol_set_user_param($db, $conf, &$user, $tab)
Save personal parameter.
finishSimpleTable($addLineBreak=false)
Add the correct HTML close tags for "startSimpleTable(...)" (use after the last table line)
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
startSimpleTable($header, $link="", $arguments="", $emptyColumns=0, $number=-1, $pictofulllist='')
Start a table with headers and a optional clickable number (don't forget to use "finishSimpleTable()"...
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks=0, $status=-1, $listofoppstatus=array(), $hiddenfields=array(), $max=0)
Return HTML table with list of projects and number of opened tasks.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.