28 require
'../main.inc.php';
29 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
30 require_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
31 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/core/lib/project.lib.php';
33 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
38 $hookmanager->initHooks(array(
'projectsindex'));
41 $langs->loadLangs(array(
'projects',
'companies'));
43 $action =
GETPOST(
'action',
'aZ09');
44 $search_project_user =
GETPOST(
'search_project_user',
'int');
45 $mine =
GETPOST(
'mode',
'aZ09') ==
'mine' ? 1 : 0;
46 if ($mine == 0 && $search_project_user ===
'') {
47 $search_project_user = (empty($user->conf->MAIN_SEARCH_PROJECT_USER_PROJECTSINDEX) ?
'' : $user->conf->MAIN_SEARCH_PROJECT_USER_PROJECTSINDEX);
49 if ($search_project_user == $user->id) {
56 if (!$user->rights->projet->lire) {
60 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
61 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
63 $max = $conf->global->MAIN_SIZE_SHORTLIST_LIMIT;
70 $parameters = array();
71 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
75 if (empty($reshook)) {
76 if ($action ==
'refresh_search_project_user') {
77 $search_project_user =
GETPOST(
'search_project_user',
'int');
78 $tabparam = array(
"MAIN_SEARCH_PROJECT_USER_PROJECTSINDEX" => $search_project_user);
80 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
90 $companystatic =
new Societe($db);
91 $projectstatic =
new Project($db);
95 $projectset = ($mine ? $mine : (empty($user->rights->projet->all->lire) ? 0 : 2));
96 $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user, $projectset, 1);
100 $title = $langs->trans(
'ProjectsArea');
102 $help_url =
'EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos|DE:Modul_Projekte';
111 $titleall = $langs->trans(
"AllAllowedProjects");
112 if (!empty($user->rights->projet->all->lire) && !$socid) {
113 $titleall = $langs->trans(
"AllProjects");
115 $titleall = $langs->trans(
"AllAllowedProjects").
'<br><br>';
119 $morehtml .=
'<form name="projectform" method="POST">';
120 $morehtml .=
'<input type="hidden" name="token" value="'.newToken().
'">';
121 $morehtml .=
'<input type="hidden" name="action" value="refresh_search_project_user">';
122 $morehtml .=
'<SELECT name="search_project_user" id="search_project_user">';
123 $morehtml .=
'<option name="all" value="0"'.($mine ?
'' :
' selected').
'>'.$titleall.
'</option>';
124 $morehtml .=
'<option name="mine" value="'.$user->id.
'"'.(($search_project_user == $user->id) ?
' selected' :
'').
'>'.$langs->trans(
"ProjectsImContactFor").
'</option>';
125 $morehtml .=
'</SELECT>';
126 $morehtml .=
ajax_combobox(
"search_project_user", array(), 0, 0,
'resolve',
'-1',
'small');
127 $morehtml .=
'<input type="submit" class="button smallpaddingimp" name="refresh" value="'.$langs->trans(
"Refresh").
'">';
128 $morehtml .=
'</form>';
131 $tooltiphelp = $langs->trans(
"MyProjectsDesc");
133 if (!empty($user->rights->projet->all->lire) && !$socid) {
134 $tooltiphelp = $langs->trans(
"ProjectsDesc");
136 $tooltiphelp = $langs->trans(
"ProjectsPublicDesc");
140 print_barre_liste(
$form->textwithpicto($title, $tooltiphelp), 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', 0, -1,
'project', 0, $morehtml);
144 include DOL_DOCUMENT_ROOT.
'/theme/'.$conf->theme.
'/theme_vars.inc.php';
145 $listofoppstatus = array(); $listofopplabel = array(); $listofoppcode = array(); $colorseries = array();
146 $sql =
"SELECT cls.rowid, cls.code, cls.percent, cls.label";
147 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_lead_status as cls";
148 $sql .=
" WHERE active=1";
149 $resql = $db->query(
$sql);
151 $num = $db->num_rows($resql);
155 $objp = $db->fetch_object($resql);
156 $listofoppstatus[$objp->rowid] = $objp->percent;
157 $listofopplabel[$objp->rowid] = $objp->label;
158 $listofoppcode[$objp->rowid] = $objp->code;
159 switch ($objp->code) {
161 $colorseries[$objp->rowid] =
"-".$badgeStatus0;
164 $colorseries[$objp->rowid] =
"-".$badgeStatus1;
167 $colorseries[$objp->rowid] = $badgeStatus1;
170 $colorseries[$objp->rowid] = $badgeStatus4;
173 $colorseries[$objp->rowid] = $badgeStatus9;
176 $colorseries[$objp->rowid] = $badgeStatus6;
179 $colorseries[$objp->rowid] = $badgeStatus2;
190 print
'<div class="fichecenter"><div class="fichethirdleft">';
194 include DOL_DOCUMENT_ROOT.
'/projet/graph_opportunities.inc.php';
197 print_projecttasks_array($db,
$form, $socid, $projectsListId, 0, 0, $listofoppstatus, array(
'projectlabel',
'plannedworkload',
'declaredprogress',
'prospectionstatus',
'projectstatus'), $max);
200 print
'</div><div class="fichetwothirdright">';
203 $sql =
"SELECT p.rowid, p.ref, p.title, p.dateo, p.datee, p.fk_statut as status, p.tms as datem";
204 $sql .=
", s.rowid as socid, s.nom as name, s.name_alias";
205 $sql .=
", s.code_client, s.code_compta, s.client";
206 $sql .=
", s.code_fournisseur, s.code_compta_fournisseur, s.fournisseur";
207 $sql .=
", s.logo, s.email, s.entity";
208 $sql .=
", s.canvas, s.status as thirdpartystatus";
209 $sql .=
" FROM ".MAIN_DB_PREFIX.
"projet as p";
210 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe as s on p.fk_soc = s.rowid";
211 $sql .=
" WHERE p.entity IN (".getEntity(
'project').
")";
212 if ($mine || empty($user->rights->projet->all->lire)) {
213 $sql .=
" AND p.rowid IN (".$db->sanitize($projectsListId).
")";
216 $sql .=
" AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".((int) $socid).
")";
218 $sql .=
" ORDER BY p.tms DESC";
219 $sql .= $db->plimit($max, 0);
221 $resql = $db->query(
$sql);
223 print
'<div class="div-table-responsive-no-min">';
224 print
'<table class="noborder centpercent">';
225 print
'<tr class="liste_titre">';
226 print
'<th colspan="5">'.$langs->trans(
"LatestModifiedProjects", $max).
'</th>';
229 $num = $db->num_rows($resql);
234 $obj = $db->fetch_object($resql);
236 print
'<tr class="oddeven">';
237 print
'<td class="nowrap">';
239 $projectstatic->id = $obj->rowid;
240 $projectstatic->ref = $obj->ref;
241 $projectstatic->title = $obj->title;
242 $projectstatic->thirdparty_name = $obj->name;
243 $projectstatic->status = $obj->status;
245 $companystatic->id = $obj->socid;
246 $companystatic->name = $obj->name;
249 $companystatic->code_compta = $obj->code_compta;
250 $companystatic->client = $obj->client;
252 $companystatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
253 $companystatic->fournisseur = $obj->fournisseur;
254 $companystatic->logo = $obj->logo;
255 $companystatic->email = $obj->email;
256 $companystatic->entity = $obj->entity;
257 $companystatic->canvas = $obj->canvas;
258 $companystatic->status = $obj->thirdpartystatus;
260 print
'<table class="nobordernopadding"><tr class="nocellnopadd">';
261 print
'<td width="96" class="nobordernopadding nowraponall">';
262 print $projectstatic->getNomUrl(1);
265 print
'<td width="16" class="nobordernopadding nowrap">';
269 print
'<td width="16" class="right nobordernopadding hideonsmartphone">';
272 $urlsource = $_SERVER[
'PHP_SELF'].
'?id='.$obj->rowid;
273 print $formfile->getDocumentsLink($projectstatic->element, $filename, $filedir);
274 print
'</td></tr></table>';
279 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($obj->title).
'">';
280 print $projectstatic->title;
284 print
'<td class="nowrap">';
285 if ($companystatic->id > 0) {
286 print $companystatic->getNomUrl(1,
'company', 16);
291 $datem = $db->jdate($obj->datem);
292 print
'<td class="center" title="'.dol_escape_htmltag($langs->trans(
"DateModification").
': '.
dol_print_date($datem,
'dayhour',
'tzuserrel')).
'">';
297 print
'<td class="right">'.$projectstatic->LibStatut($obj->status, 3).
'</td>';
302 print
'<tr><td colspan="4"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
304 print
"</table></div>";
310 $companystatic =
new Societe($db);
313 $sql =
"SELECT COUNT(p.rowid) as nb, SUM(p.opp_amount)";
314 $sql .=
", s.rowid as socid, s.nom as name, s.name_alias";
315 $sql .=
", s.code_client, s.code_compta, s.client";
316 $sql .=
", s.code_fournisseur, s.code_compta_fournisseur, s.fournisseur";
317 $sql .=
", s.logo, s.email, s.entity";
318 $sql .=
", s.canvas, s.status";
319 $sql .=
" FROM ".MAIN_DB_PREFIX.
"projet as p";
320 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe as s on p.fk_soc = s.rowid";
321 $sql .=
" WHERE p.entity IN (".getEntity(
'project').
")";
322 $sql .=
" AND p.fk_statut = 1";
323 if ($mine || empty($user->rights->projet->all->lire)) {
324 $sql .=
" AND p.rowid IN (".$db->sanitize($projectsListId).
")";
327 $sql .=
" AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".((int) $socid).
")";
329 $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";
330 $sql .= $db->order($sortfield, $sortorder);
333 $resql = $db->query(
$sql);
335 $num = $db->num_rows($resql);
343 print
'<div class="div-table-responsive-no-min">';
344 print
'<table class="noborder centpercent">';
345 print
'<tr class="liste_titre">';
346 print_liste_field_titre(
"OpenedProjectsByThirdparties", $_SERVER[
"PHP_SELF"],
"",
"",
"",
'', $sortfield, $sortorder);
347 print_liste_field_titre(
"NbOfProjects", $_SERVER[
"PHP_SELF"],
"nb",
"",
"",
'', $sortfield, $sortorder,
'right ');
352 $obj = $db->fetch_object($resql);
355 $othernb += $obj->nb;
360 print
'<tr class="oddeven">';
361 print
'<td class="nowraponall tdoverflowmax100">';
362 if ($obj->socid > 0) {
363 $companystatic->id = $obj->socid;
364 $companystatic->name = $obj->name;
365 $companystatic->name_alias = $obj->name_alias;
366 $companystatic->code_client = $obj->code_client;
367 $companystatic->code_compta = $obj->code_compta;
368 $companystatic->client = $obj->client;
369 $companystatic->code_fournisseur = $obj->code_fournisseur;
370 $companystatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
371 $companystatic->fournisseur = $obj->fournisseur;
372 $companystatic->logo = $obj->logo;
373 $companystatic->email = $obj->email;
374 $companystatic->entity = $obj->entity;
375 $companystatic->canvas = $obj->canvas;
376 $companystatic->status = $obj->status;
378 print $companystatic->getNomUrl(1);
380 print $langs->trans(
"OthersNotLinkedToThirdParty");
383 print
'<td class="right">';
385 print
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?socid='.$obj->socid.
'&search_status=1">'.$obj->nb.
'</a>';
387 print
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?search_societe='.urlencode(
'^$').
'&search_status=1">'.$obj->nb.
'</a>';
395 print
'<tr class="oddeven">';
396 print
'<td class="nowrap">';
397 print
'<span class="opacitymedium">'.$langs->trans(
"More").
'...</span>';
399 print
'<td class="nowrap right">';
423 print
'</div></div>';
425 $parameters = array(
'user' => $user);
426 $reshook = $hookmanager->executeHooks(
'dashboardProjects', $parameters, $projectstatic);
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
dol_set_user_param($db, $conf, &$user, $tab)
Save personnal parameter.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
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.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
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.
if(!defined('NOTOKENRENEWAL')) if(!defined('NOLOGIN')) if(!defined('NOCSRFCHECK')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) if(!defined('NOIPCHECK')) if(!defined('NOBROWSERNOTIF')) llxHeader()
Header empty.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.