31define(
'CSRFCHECK_WITH_TOKEN', 1);
33require
'main.inc.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
45$_GET[
'mainmenu'] =
GETPOST(
'mainmenu',
'aZ09') ?
GETPOST(
'mainmenu',
'aZ09') :
'home';
46$action =
GETPOST(
'action',
'aZ09');
48$hookmanager->initHooks(array(
'index'));
56$nbmodulesnotautoenabled = count(
$conf->modules);
57$listofmodulesautoenabled = array(
'agenda',
'fckeditor',
'export',
'import');
58foreach ($listofmodulesautoenabled as $moduleautoenable) {
59 if (in_array($moduleautoenable,
$conf->modules)) {
60 $nbmodulesnotautoenabled--;
66 header(
"Location: ".DOL_URL_ROOT.
"/admin/index.php?mainmenu=home&leftmenu=setup&mesg=setupnotcomplete");
69if ($nbmodulesnotautoenabled <=
getDolGlobalInt(
'MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING', 1)) {
70 header(
"Location: ".DOL_URL_ROOT.
"/admin/index.php?mainmenu=home&leftmenu=setup&mesg=setupnotcomplete");
74 require_once DOL_DOCUMENT_ROOT.
'/core/class/infobox.class.php';
77 $boxorder =
GETPOST(
'boxorder',
'aZ09');
78 $boxorder .=
GETPOST(
'boxcombo',
'aZ09');
91if (!isset($form) || !is_object($form)) {
92 $form =
new Form($db);
95$appli = constant(
'DOL_APPLICATION_TITLE');
98 $appli = (preg_match(
'/^\+/', $applicustom) ? $appli :
'').$applicustom;
100 $appli .=
" ".DOL_VERSION;
104$title = $langs->trans(
"HomeArea").
' - '.$appli;
113 $conf->global->MAIN_MOTD = preg_replace(
'/<br(\s[\sa-zA-Z_="]*)?\/?>/i',
'<br>',
getDolGlobalString(
'MAIN_MOTD'));
119 print
"\n<!-- Start of welcome text -->\n";
120 print
'<table class="centpercent notopnoleftnoright"><tr><td>';
122 print
'</td></tr></table><br>';
123 print
"\n<!-- End of welcome text -->\n";
133 $langs->loadLangs(array(
"admin"));
134 print
info_admin($langs->trans(
"WarningExperimentalFeatureInvoiceSituationNeedToUpgradeToProgressiveMode",
'https://partners.dolibarr.org'));
147 $lockfile = DOL_DATA_ROOT.
'/install.lock';
148 if (!empty($lockfile) && !file_exists($lockfile) && is_dir(DOL_DOCUMENT_ROOT.
"/install")) {
149 $langs->load(
"errors");
151 $message .=
info_admin($langs->transnoentities(
"WarningLockFileDoesNotExists", DOL_DATA_ROOT).
' '.$langs->transnoentities(
"WarningUntilDirRemoved", DOL_DOCUMENT_ROOT.
"/install"), 0, 0,
'1',
'clearboth');
155 if (is_writable($conffile)) {
156 $langs->load(
"errors");
159 $message .=
info_admin($langs->transnoentities(
"WarningConfFileMustBeReadOnly").
' '.$langs->transnoentities(
"WarningUntilDirRemoved", DOL_DOCUMENT_ROOT.
"/install"), 0, 0,
'1',
'clearboth');
163 $parameters = array();
164 $reshook = $hookmanager->executeHooks(
'infoadmin', $parameters, $object, $action);
166 $message .= $hookmanager->resPrint;
169 print
'<!-- show security warning -->';
181print
load_fiche_titre(
' ', $resultboxes[
'selectboxlist'],
'', 0,
'',
'titleforhome');
184$langs->loadLangs(array(
'commercial',
'bills',
'orders',
'contracts'));
191 $dashboardlines = array();
194 require_once DOL_DOCUMENT_ROOT.
'/core/class/workboardresponse.class.php';
197 if (isModEnabled(
'agenda') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_AGENDA') && $user->hasRight(
'agenda',
'myactions',
'read')) {
198 include_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
200 $dashboardlines[$board->element] = $board->load_board($user);
204 if (isModEnabled(
'project') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_PROJECT') && $user->hasRight(
'projet',
'lire')) {
205 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
207 $dashboardlines[$board->element] = $board->load_board($user);
212 include_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
213 $board =
new Task($db);
214 $dashboardlines[$board->element] = $board->load_board($user);
218 if (isModEnabled(
'propal') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_CUSTOMER') && $user->hasRight(
'propal',
'read')) {
219 include_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
221 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
223 $dashboardlines[$board->element.
'_signed'] = $board->load_board($user,
"signed");
227 if (isModEnabled(
'supplier_proposal') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_SUPPLIER') && $user->hasRight(
'supplier_proposal',
'lire')) {
228 $langs->load(
"supplier_proposal");
229 include_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
231 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
233 $dashboardlines[$board->element.
'_signed'] = $board->load_board($user,
"signed");
237 if (isModEnabled(
'order') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_CUSTOMER') && $user->hasRight(
'commande',
'lire')) {
238 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
241 $dashboardlines[$board->element.
'_toship'] = $board->load_board($user,
'toship');
244 $dashboardlines[$board->element.
'_tobill'] = $board->load_board($user,
'tobill');
247 $dashboardlines[$board->element.
'_shippedtobill'] = $board->load_board($user,
'shippedtobill');
251 if (isModEnabled(
'supplier_order') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_SUPPLIER') && $user->hasRight(
'fournisseur',
'commande',
'lire')) {
252 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
254 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
255 $dashboardlines[$board->element.
'_awaiting'] = $board->load_board($user,
'awaiting');
259 if (isModEnabled(
'contract') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_CONTRACT') && $user->hasRight(
'contrat',
'lire')) {
260 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
262 $dashboardlines[$board->element.
'_inactive'] = $board->load_board($user,
"inactive");
264 $dashboardlines[$board->element.
'_active'] = $board->load_board($user,
"active");
268 if (isModEnabled(
'ticket') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_TICKET') && $user->hasRight(
'ticket',
'read')) {
269 include_once DOL_DOCUMENT_ROOT.
'/ticket/class/ticket.class.php';
271 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
277 if (isModEnabled(
'invoice') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_CUSTOMER') && $user->hasRight(
'facture',
'lire')) {
278 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
280 $dashboardlines[$board->element] = $board->load_board($user);
284 if (isModEnabled(
'supplier_invoice') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_SUPPLIER') && $user->hasRight(
'fournisseur',
'facture',
'lire')) {
285 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
287 $dashboardlines[$board->element] = $board->load_board($user);
291 if (isModEnabled(
'bank') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_BANK') && $user->hasRight(
'banque',
'lire') && !$user->socid) {
292 include_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
294 $nb = $board->countAccountToReconcile();
296 $dashboardlines[$board->element] = $board->load_board($user);
302 if (isModEnabled(
'bank') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_BANK') && $user->hasRight(
'banque',
'lire') && !$user->socid) {
304 include_once DOL_DOCUMENT_ROOT .
'/compta/paiement/cheque/class/remisecheque.class.php';
306 $dashboardlines[$board->element] = $board->load_board($user);
308 if (isModEnabled(
'prelevement')) {
309 include_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
311 $dashboardlines[$board->element .
'_direct_debit'] = $board->load_board($user,
'direct_debit');
313 if (isModEnabled(
'paymentbybanktransfer')) {
314 include_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
316 $dashboardlines[$board->element .
'_credit_transfer'] = $board->load_board($user,
'credit_transfer');
321 if (isModEnabled(
'member') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_ADHERENT') && $user->hasRight(
'adherent',
'lire') && !$user->socid) {
322 include_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
324 $dashboardlines[$board->element.
'_shift'] = $board->load_board($user,
'shift');
325 $dashboardlines[$board->element.
'_expired'] = $board->load_board($user,
'expired');
329 if (isModEnabled(
'expensereport') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_EXPENSEREPORT') && $user->hasRight(
'expensereport',
'approve')) {
330 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
332 $dashboardlines[$board->element.
'_toapprove'] = $board->load_board($user,
'toapprove');
336 if (isModEnabled(
'expensereport') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_EXPENSEREPORT') && $user->hasRight(
'expensereport',
'to_paid')) {
337 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
339 $dashboardlines[$board->element.
'_topay'] = $board->load_board($user,
'topay');
343 if (isModEnabled(
'holiday') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_HOLIDAY') && $user->hasRight(
'holiday',
'approve')) {
344 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
346 $dashboardlines[$board->element] = $board->load_board($user);
350 $parameters = array();
352 $reshook = $hookmanager->executeHooks(
353 'addOpenElementsDashboardLine',
359 $dashboardlines = array_merge($dashboardlines, $hookmanager->resArray);
363 $dashboardgroup = array(
366 'groupName' =>
'Agenda',
367 'stats' => array(
'action'),
371 'groupName' =>
'Projects',
372 'globalStatsKey' =>
'projects',
373 'stats' => array(
'project',
'project_task'),
377 'groupName' =>
'Proposals',
378 'globalStatsKey' =>
'proposals',
380 array(
'propal_opened',
'propal_signed'),
384 'groupName' =>
'Orders',
385 'globalStatsKey' =>
'orders',
387 array(
'commande_toship',
'commande_tobill',
'commande_shippedtobill'),
391 'groupName' =>
'Invoices',
392 'globalStatsKey' =>
'invoices',
396 'supplier_proposal' =>
398 'lang' =>
'supplier_proposal',
399 'groupName' =>
'SupplierProposals',
400 'globalStatsKey' =>
'askprice',
402 array(
'supplier_proposal_opened',
'supplier_proposal_signed'),
406 'groupName' =>
'SuppliersOrders',
407 'globalStatsKey' =>
'supplier_orders',
409 array(
'order_supplier_opened',
'order_supplier_awaiting'),
411 'invoice_supplier' =>
413 'groupName' =>
'BillsSuppliers',
414 'globalStatsKey' =>
'supplier_invoices',
416 array(
'invoice_supplier'),
420 'groupName' =>
'Contracts',
421 'globalStatsKey' =>
'Contracts',
423 array(
'contrat_inactive',
'contrat_active'),
427 'groupName' =>
'Tickets',
428 'globalStatsKey' =>
'ticket',
430 array(
'ticket_opened'),
434 'groupName' =>
'BankAccount',
436 array(
'bank_account',
'chequereceipt',
'widthdraw_direct_debit',
'widthdraw_credit_transfer'),
440 'groupName' =>
'Members',
441 'globalStatsKey' =>
'members',
443 array(
'member_shift',
'member_expired'),
447 'groupName' =>
'ExpenseReport',
448 'globalStatsKey' =>
'expensereports',
450 array(
'expensereport_toapprove',
'expensereport_topay'),
454 'groupName' =>
'Holidays',
455 'globalStatsKey' =>
'holidays',
463 'dashboardgroup' => $dashboardgroup
465 $reshook = $hookmanager->executeHooks(
'addOpenElementsDashboardGroup', $parameters, $object, $action);
467 $dashboardgroup = array_merge($dashboardgroup, $hookmanager->resArray);
472 $totallate = $totaltodo = 0;
476 $valid_dashboardlines = array();
477 foreach ($dashboardlines as $workboardid => $tmp) {
479 $tmp->id = $workboardid;
480 $valid_dashboardlines[$workboardid] = $tmp;
485 foreach ($valid_dashboardlines as $board) {
486 if (is_numeric($board->nbtodo) && is_numeric($board->nbtodolate) && $board->nbtodolate > 0) {
487 $totaltodo += $board->nbtodo;
488 $totallate += $board->nbtodolate;
492 $openedDashBoardSize =
'info-box-sm';
493 foreach ($dashboardgroup as $dashbordelement) {
494 if (is_array($dashbordelement[
'stats']) && count($dashbordelement[
'stats']) > 2) {
495 $openedDashBoardSize =
'';
500 $totalLateNumber = $totallate;
501 $totallatePercentage = ((!empty($totaltodo)) ? round($totallate / $totaltodo * 100, 2) : 0);
503 $totallate = $totallatePercentage;
508 $boxwork .=
'<div class="box">';
509 $boxwork .=
'<table summary="'.dol_escape_htmltag($langs->trans(
"WorkingBoard")).
'" class="noborder boxtable boxtablenobottom boxworkingboard centpercent">'.
"\n";
510 $boxwork .=
'<tr class="liste_titre">';
511 $boxwork .=
'<th class="liste_titre"><div class="inline-block valignmiddle">'.$langs->trans(
"DolibarrWorkBoard").
'</div>';
513 if ($totallate > 0) {
514 $text = $langs->transnoentitiesnoconv(
"WarningYouHaveAtLeastOneTaskLate").
' ('.$langs->transnoentitiesnoconv(
516 $totallate.(getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE') ?
'%' :
'')
519 $text = $langs->transnoentitiesnoconv(
"NoItemLate");
521 $text .=
'. '.$langs->transnoentitiesnoconv(
"LateDesc");
523 $options =
'height="24px" style="float: right"';
524 $boxwork .=
showWeather($totallate, $text, $options,
'inline-block valignmiddle');
527 $boxwork .=
'</tr>'.
"\n";
530 $nbworkboardempty = 0;
531 $isIntopOpenedDashBoard = $globalStatInTopOpenedDashBoard = array();
532 $openedDashBoard =
'';
533 if (!empty($valid_dashboardlines)) {
534 $boxwork .=
'<tr class="nobottom nohover"><td class="tdboxstats nohover flexcontainer centpercent"><div style="display: flex: flex-wrap: wrap">';
536 foreach ($dashboardgroup as $groupKey => $groupElement) {
541 foreach ($groupElement[
'stats'] as $infoKey) {
542 if (!empty($valid_dashboardlines[$infoKey])) {
543 $boards[] = $valid_dashboardlines[$infoKey];
544 $isIntopOpenedDashBoard[] = $infoKey;
549 if (!empty($boards)) {
550 if (!empty($groupElement[
'lang'])) {
551 $langs->load($groupElement[
'lang']);
554 $groupName = $langs->trans($groupElement[
'groupName']);
555 $groupKeyLowerCase = strtolower($groupKey);
558 $globalStatsKey =
false;
559 if (!empty($groupElement[
'globalStatsKey']) && empty($groupElement[
'globalStats'])) {
560 $globalStatsKey = $groupElement[
'globalStatsKey'];
561 $groupElement[
'globalStats'] = array();
564 $openedDashBoard .=
'<div class="box-flex-item"><div class="box-flex-item-with-margin">'.
"\n";
565 $openedDashBoard .=
' <div class="info-box '.$openedDashBoardSize.
'">'.
"\n";
566 $openedDashBoard .=
' <span class="info-box-icon bg-infobox-'.$groupKeyLowerCase.
'">'.
"\n";
567 $openedDashBoard .=
' <i class="fa fa-dol-'.$groupKeyLowerCase.
'"></i>'.
"\n";
570 if (!empty($groupElement[
'globalStats'])) {
571 $globalStatInTopOpenedDashBoard[] = $globalStatsKey;
572 $openedDashBoard .=
'<span class="info-box-icon-text" title="'.$groupElement[
'globalStats'][
'text'].
'">'.$groupElement[
'globalStats'][
'nbTotal'].
'</span>';
575 $openedDashBoard .=
'</span>'.
"\n";
576 $openedDashBoard .=
'<div class="info-box-content">'.
"\n";
578 $openedDashBoard .=
'<div class="info-box-title" title="'.dolPrintHTMLForAttribute($groupName).
'">'.$groupName.
'</div>'.
"\n";
579 $openedDashBoard .=
'<div class="info-box-lines">'.
"\n";
581 foreach ($boards as $board) {
582 $openedDashBoard .=
'<div class="info-box-line spanoverflow nowrap">';
584 if (!empty($board->labelShort)) {
585 $infoName =
'<div class="marginrightonly inline-block valignmiddle info-box-line-text" title="'.$board->label.
'">'.$board->labelShort.
'</div>';
587 $infoName =
'<div class="marginrightonly inline-block valignmiddle info-box-line-text">'.$board->label.
'</div>';
590 $textLateTitle = $langs->trans(
"NActionsLate", $board->nbtodolate);
591 $textLateTitle .=
' ('.$langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil(empty($board->warning_delay) ? 0 : $board->warning_delay) >= 0 ?
'+' :
'').ceil(empty($board->warning_delay) ? 0 : $board->warning_delay).
' '.$langs->trans(
"days").
')';
593 if ($board->id ==
'bank_account') {
594 $textLateTitle .=
'<br><span class="opacitymedium">'.$langs->trans(
"IfYouDontReconcileDisableProperty", $langs->transnoentitiesnoconv(
"Conciliable")).
'</span>';
598 if ($board->nbtodolate > 0) {
599 $textLate .=
'<span title="'.dol_escape_htmltag($textLateTitle).
'" class="classfortooltip badge badge-warning">';
600 $textLate .=
'<i class="fa fa-exclamation-triangle hideonsmartphone"></i> '.$board->nbtodolate;
601 $textLate .=
'</span>';
605 if ($board->nbtodo > 0) {
606 $nbtodClass =
'badge badge-info';
608 $nbtodClass =
'opacitymedium';
612 $labeltoshow = $board->label.
' ('.$board->nbtodo.
')';
613 if ($board->total > 0) {
614 $labeltoshow .=
' - '.price($board->total, 0, $langs, 1, -1, -1,
$conf->currency);
616 $openedDashBoard .=
'<a href="'.$board->url.
'" class="info-box-text info-box-text-a">';
617 $openedDashBoard .= $infoName;
618 $openedDashBoard .=
'<div class="inline-block nowraponall">';
619 $openedDashBoard .=
'<span class="classfortooltip'.($nbtodClass ?
' '.$nbtodClass :
'').
'" title="'.$labeltoshow.
'">';
620 $openedDashBoard .= $board->nbtodo;
622 $openedDashBoard .=
' : '.price($board->total, 0, $langs, 1, -1, -1,
$conf->currency);
624 $openedDashBoard .=
'</span>';
627 if ($board->url_late) {
628 $openedDashBoard .=
'</div></a>';
629 $openedDashBoard .=
' <div class="inline-block"><a href="'.$board->url_late.
'" class="info-box-text info-box-text-a paddingleft">';
631 $openedDashBoard .=
' ';
633 $openedDashBoard .= $textLate;
635 $openedDashBoard .=
'</a>'.
"\n";
636 $openedDashBoard .=
'</div>';
637 $openedDashBoard .=
'</div>'.
"\n";
642 $openedDashBoard .=
' </div><!-- /.info-box-lines --></div><!-- /.info-box-content -->'.
"\n";
643 $openedDashBoard .=
' </div><!-- /.info-box -->'.
"\n";
644 $openedDashBoard .=
'</div><!-- /.box-flex-item-with-margin -->'.
"\n";
645 $openedDashBoard .=
'</div><!-- /.box-flex-item -->'.
"\n";
646 $openedDashBoard .=
"\n";
650 if ($showweather && !empty($isIntopOpenedDashBoard)) {
651 $appendClass = (
getDolGlobalInt(
'MAIN_DISABLE_METEO') == 2 ?
' hideonsmartphone' :
'');
655 if ($totallate > 0) {
656 $text = $langs->transnoentitiesnoconv(
"WarningYouHaveAtLeastOneTaskLate").
' ('.$langs->transnoentitiesnoconv(
658 $totallate.(getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE') ?
'%' :
'')
661 $text = $langs->transnoentitiesnoconv(
"NoItemLate");
663 $text .=
'. '.$langs->transnoentitiesnoconv(
"LateDesc");
665 $weatherDashBoard =
'<div class="box-flex-item '.$appendClass.
'"><div class="box-flex-item-with-margin">'.
"\n";
666 $weatherDashBoard .=
' <div class="info-box '.$openedDashBoardSize.
' info-box-weather info-box-weather-level'.$weather->level.
'">'.
"\n";
667 $weatherDashBoard .=
' <span class="info-box-icon">';
668 $weatherDashBoard .=
img_weather(
'', $weather->level,
'', 0,
'valignmiddle width50');
669 $weatherDashBoard .=
' </span>'.
"\n";
670 $weatherDashBoard .=
' <div class="info-box-content">'.
"\n";
671 $weatherDashBoard .=
' <div class="info-box-title">'.$langs->trans(
'GlobalOpenedElemView').
'</div>'.
"\n";
673 if ($totallatePercentage > 0 &&
getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE')) {
674 $weatherDashBoard .=
' <span class="info-box-number">'.$langs->transnoentitiesnoconv(
676 price($totallatePercentage).
'%'
678 $weatherDashBoard .=
' <span class="progress-description">'.$langs->trans(
683 $weatherDashBoard .=
' <span class="info-box-number">'.$langs->transnoentitiesnoconv(
687 if ($totallatePercentage > 0) {
688 $weatherDashBoard .=
' <span class="progress-description">'.$langs->trans(
690 price($totallatePercentage).
'%'
695 $weatherDashBoard .=
' </div><!-- /.info-box-content -->'.
"\n";
696 $weatherDashBoard .=
' </div><!-- /.info-box -->'.
"\n";
697 $weatherDashBoard .=
'</div><!-- /.box-flex-item-with-margin -->'.
"\n";
698 $weatherDashBoard .=
'</div><!-- /.box-flex-item -->'.
"\n";
699 $weatherDashBoard .=
"\n";
701 $openedDashBoard = $weatherDashBoard.$openedDashBoard;
704 if (!empty($isIntopOpenedDashBoard)) {
705 for ($i = 1; $i <= 10; $i++) {
706 $openedDashBoard .=
'<div class="box-flex-item filler"></div>';
710 $nbworkboardcount = 0;
711 foreach ($valid_dashboardlines as $infoKey => $board) {
712 if (in_array($infoKey, $isIntopOpenedDashBoard)) {
717 if (empty($board->nbtodo)) {
723 $textlate = $langs->trans(
"NActionsLate", $board->nbtodolate);
724 $textlate .=
' ('.$langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($board->warning_delay) >= 0 ?
'+' :
'').ceil($board->warning_delay).
' '.$langs->trans(
"days").
')';
727 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats130 boxstatsborder">';
728 $boxwork .=
'<div class="boxstatscontent">';
729 $boxwork .=
'<span class="boxstatstext" title="'.dol_escape_htmltag($board->label).
'">'.$board->img.
' <span>'.$board->label.
'</span></span><br>';
730 $boxwork .=
'<a class="valignmiddle dashboardlineindicator" href="'.$board->url.
'"><span class="dashboardlineindicator'.(($board->nbtodo == 0) ?
' dashboardlineok' :
'').
'">'.$board->nbtodo.
'</span></a>';
732 $boxwork .=
' / <a class="valignmiddle dashboardlineindicator" href="'.$board->url.
'"><span class="dashboardlineindicator'.(($board->nbtodo == 0) ?
' dashboardlineok' :
'').
'">'.
price($board->total).
'</span></a>';
734 $boxwork .=
'</div>';
735 if ($board->nbtodolate > 0) {
736 $boxwork .=
'<div class="dashboardlinelatecoin nowrap">';
737 $boxwork .=
'<a title="'.dol_escape_htmltag($textlate).
'" class="valignmiddle dashboardlineindicatorlate'.($board->nbtodolate > 0 ?
' dashboardlineko' :
' dashboardlineok').
'" href="'.((!$board->url_late) ? $board->url : $board->url_late).
'">';
742 'class="inline-block hideonsmartphone valigntextbottom"'
744 $boxwork .=
'<span class="dashboardlineindicatorlate'.($board->nbtodolate > 0 ?
' dashboardlineko' :
' dashboardlineok').
'">';
745 $boxwork .= $board->nbtodolate;
746 $boxwork .=
'</span>';
748 $boxwork .=
'</div>';
750 $boxwork .=
'</div></div>';
754 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
755 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
756 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
757 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
759 $boxwork .=
'</div>';
760 $boxwork .=
'</td></tr>';
762 $boxwork .=
'<tr class="nohover">';
763 $boxwork .=
'<td class="nohover valignmiddle opacitymedium">';
764 $boxwork .= $langs->trans(
"NoOpenedElementToProcess");
769 $boxwork .=
'</td></tr>';
771 $boxwork .=
'</table>';
772 $boxwork .=
'</div>';
774 if (!empty($isIntopOpenedDashBoard)) {
775 print
'<div class="fichecenter">';
776 print
'<div class="opened-dash-board-wrap"><div class="box-flex-container">'.$openedDashBoard.
'</div></div>';
782print
'<div class="clearboth"></div>';
784print
'<div class="fichecenter fichecenterbis">';
791$boxlist =
'<div class="twocolumns">';
793$boxlist .=
'<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">';
794if (!empty($nbworkboardcount)) {
795 $boxlist .= $boxwork;
798$boxlist .= $resultboxes[
'boxlista'];
802$boxlist .=
'<div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">';
804$boxlist .= $resultboxes[
'boxlistb'];
838 return img_weather($text, $weather->picto, $options, 0, $morecss);
851 $weather->picto =
'';
856 $used_conf = (
getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE') ?
'MAIN_METEO_PERCENTAGE_LEVEL' :
'MAIN_METEO_LEVEL');
861 $level1 = $offset + $factor;
863 $level2 = $offset + 2 * $factor;
865 $level3 = $offset + 3 * $factor;
868 if ($totallate <= $level0) {
869 $weather->picto =
'weather-clear.png';
871 } elseif ($totallate <= $level1) {
872 $weather->picto =
'weather-few-clouds.png';
874 } elseif ($totallate <= $level2) {
875 $weather->picto =
'weather-clouds.png';
877 } elseif ($totallate <= $level3) {
878 $weather->picto =
'weather-many-clouds.png';
881 $weather->picto =
'weather-storm.png';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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 bank accounts.
Class to manage agenda events (actions)
Class to manage members of a foundation.
Class to manage withdrawal receipts.
Class to manage predefined suppliers products.
Class to manage customers orders.
Class to manage Trips and Expenses.
Class to manage suppliers invoices.
Class to manage invoices.
Class of the module paid holiday.
static saveboxorder($dbs, $zone, $boxorder, $userid=0)
Save order of boxes for area and user.
Class to manage projects.
Class to manage proposals.
Class to manage cheque delivery receipts.
Class to manage price ask supplier.
img_weather($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $morecss='')
Show weather picto.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
make_substitutions($text, $substitutionarray, $outputlangs=null, $converttextinhtmlifnecessary=0)
Make substitution into a text string, replacing keys with vals from $substitutionarray (oldval=>newva...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles=1, $removeclassattribute=1, $cleanalsojavascript=0, $allowiframe=0, $allowed_tags=array(), $allowlink=0, $allowscript=0, $allowstyle=0, $allowphp=0)
Clean a string to keep only desirable HTML tags.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
showWeather($totallate, $text, $options, $morecss='')
Show weather logo.
getWeatherStatus($totallate)
get weather status for conf 'MAIN_METEO_LEVELx'
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Class to generate the form for creating a new ticket.