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);
96$title = $langs->trans(
"HomeArea").
' - Dolibarr '.DOL_VERSION;
98 $title = $langs->trans(
"HomeArea").
' - ' .
getDolGlobalString(
'MAIN_APPLICATION_TITLE');
108 $conf->global->MAIN_MOTD = preg_replace(
'/<br(\s[\sa-zA-Z_="]*)?\/?>/i',
'<br>',
getDolGlobalString(
'MAIN_MOTD'));
114 print
"\n<!-- Start of welcome text -->\n";
115 print
'<table class="centpercent notopnoleftnoright"><tr><td>';
117 print
'</td></tr></table><br>';
118 print
"\n<!-- End of welcome text -->\n";
128 $langs->loadLangs(array(
"admin"));
129 print
info_admin($langs->trans(
"WarningExperimentalFeatureInvoiceSituationNeedToUpgradeToProgressiveMode",
'https://partners.dolibarr.org'));
142 $lockfile = DOL_DATA_ROOT.
'/install.lock';
143 if (!empty($lockfile) && !file_exists($lockfile) && is_dir(DOL_DOCUMENT_ROOT.
"/install")) {
144 $langs->load(
"errors");
146 $message .=
info_admin($langs->transnoentities(
"WarningLockFileDoesNotExists", DOL_DATA_ROOT).
' '.$langs->transnoentities(
"WarningUntilDirRemoved", DOL_DOCUMENT_ROOT.
"/install"), 0, 0,
'1',
'clearboth');
150 if (is_writable($conffile)) {
151 $langs->load(
"errors");
154 $message .=
info_admin($langs->transnoentities(
"WarningConfFileMustBeReadOnly").
' '.$langs->transnoentities(
"WarningUntilDirRemoved", DOL_DOCUMENT_ROOT.
"/install"), 0, 0,
'1',
'clearboth');
158 $parameters = array();
159 $reshook = $hookmanager->executeHooks(
'infoadmin', $parameters, $object, $action);
161 $message .= $hookmanager->resPrint;
164 print
'<!-- show security warning -->';
176print
load_fiche_titre(
' ', $resultboxes[
'selectboxlist'],
'', 0,
'',
'titleforhome');
179$langs->loadLangs(array(
'commercial',
'bills',
'orders',
'contracts'));
186 $dashboardlines = array();
189 require_once DOL_DOCUMENT_ROOT.
'/core/class/workboardresponse.class.php';
192 if (isModEnabled(
'agenda') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_AGENDA') && $user->hasRight(
'agenda',
'myactions',
'read')) {
193 include_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
195 $dashboardlines[$board->element] = $board->load_board($user);
199 if (isModEnabled(
'project') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_PROJECT') && $user->hasRight(
'projet',
'lire')) {
200 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
202 $dashboardlines[$board->element] = $board->load_board($user);
207 include_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
208 $board =
new Task($db);
209 $dashboardlines[$board->element] = $board->load_board($user);
213 if (isModEnabled(
'propal') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_CUSTOMER') && $user->hasRight(
'propal',
'read')) {
214 include_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
216 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
218 $dashboardlines[$board->element.
'_signed'] = $board->load_board($user,
"signed");
222 if (isModEnabled(
'supplier_proposal') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_SUPPLIER') && $user->hasRight(
'supplier_proposal',
'lire')) {
223 $langs->load(
"supplier_proposal");
224 include_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
226 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
228 $dashboardlines[$board->element.
'_signed'] = $board->load_board($user,
"signed");
232 if (isModEnabled(
'order') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_CUSTOMER') && $user->hasRight(
'commande',
'lire')) {
233 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
236 $dashboardlines[$board->element.
'_toship'] = $board->load_board($user,
'toship');
239 $dashboardlines[$board->element.
'_tobill'] = $board->load_board($user,
'tobill');
242 $dashboardlines[$board->element.
'_shippedtobill'] = $board->load_board($user,
'shippedtobill');
246 if (isModEnabled(
'supplier_order') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_SUPPLIER') && $user->hasRight(
'fournisseur',
'commande',
'lire')) {
247 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
249 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
250 $dashboardlines[$board->element.
'_awaiting'] = $board->load_board($user,
'awaiting');
254 if (isModEnabled(
'contract') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_CONTRACT') && $user->hasRight(
'contrat',
'lire')) {
255 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
257 $dashboardlines[$board->element.
'_inactive'] = $board->load_board($user,
"inactive");
259 $dashboardlines[$board->element.
'_active'] = $board->load_board($user,
"active");
263 if (isModEnabled(
'ticket') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_TICKET') && $user->hasRight(
'ticket',
'read')) {
264 include_once DOL_DOCUMENT_ROOT.
'/ticket/class/ticket.class.php';
266 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
272 if (isModEnabled(
'invoice') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_CUSTOMER') && $user->hasRight(
'facture',
'lire')) {
273 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
275 $dashboardlines[$board->element] = $board->load_board($user);
279 if (isModEnabled(
'supplier_invoice') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_SUPPLIER') && $user->hasRight(
'fournisseur',
'facture',
'lire')) {
280 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
282 $dashboardlines[$board->element] = $board->load_board($user);
286 if (isModEnabled(
'bank') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_BANK') && $user->hasRight(
'banque',
'lire') && !$user->socid) {
287 include_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
289 $nb = $board->countAccountToReconcile();
291 $dashboardlines[$board->element] = $board->load_board($user);
297 if (isModEnabled(
'bank') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_BANK') && $user->hasRight(
'banque',
'lire') && !$user->socid) {
299 include_once DOL_DOCUMENT_ROOT .
'/compta/paiement/cheque/class/remisecheque.class.php';
301 $dashboardlines[$board->element] = $board->load_board($user);
303 if (isModEnabled(
'prelevement')) {
304 include_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
306 $dashboardlines[$board->element .
'_direct_debit'] = $board->load_board($user,
'direct_debit');
308 if (isModEnabled(
'paymentbybanktransfer')) {
309 include_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
311 $dashboardlines[$board->element .
'_credit_transfer'] = $board->load_board($user,
'credit_transfer');
316 if (isModEnabled(
'member') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_ADHERENT') && $user->hasRight(
'adherent',
'lire') && !$user->socid) {
317 include_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
319 $dashboardlines[$board->element.
'_shift'] = $board->load_board($user,
'shift');
320 $dashboardlines[$board->element.
'_expired'] = $board->load_board($user,
'expired');
324 if (isModEnabled(
'expensereport') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_EXPENSEREPORT') && $user->hasRight(
'expensereport',
'approve')) {
325 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
327 $dashboardlines[$board->element.
'_toapprove'] = $board->load_board($user,
'toapprove');
331 if (isModEnabled(
'expensereport') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_EXPENSEREPORT') && $user->hasRight(
'expensereport',
'to_paid')) {
332 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
334 $dashboardlines[$board->element.
'_topay'] = $board->load_board($user,
'topay');
338 if (isModEnabled(
'holiday') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_HOLIDAY') && $user->hasRight(
'holiday',
'approve')) {
339 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
341 $dashboardlines[$board->element] = $board->load_board($user);
345 $parameters = array();
347 $reshook = $hookmanager->executeHooks(
348 'addOpenElementsDashboardLine',
354 $dashboardlines = array_merge($dashboardlines, $hookmanager->resArray);
358 $dashboardgroup = array(
361 'groupName' =>
'Agenda',
362 'stats' => array(
'action'),
366 'groupName' =>
'Projects',
367 'globalStatsKey' =>
'projects',
368 'stats' => array(
'project',
'project_task'),
372 'groupName' =>
'Proposals',
373 'globalStatsKey' =>
'proposals',
375 array(
'propal_opened',
'propal_signed'),
379 'groupName' =>
'Orders',
380 'globalStatsKey' =>
'orders',
382 array(
'commande_toship',
'commande_tobill',
'commande_shippedtobill'),
386 'groupName' =>
'Invoices',
387 'globalStatsKey' =>
'invoices',
391 'supplier_proposal' =>
393 'lang' =>
'supplier_proposal',
394 'groupName' =>
'SupplierProposals',
395 'globalStatsKey' =>
'askprice',
397 array(
'supplier_proposal_opened',
'supplier_proposal_signed'),
401 'groupName' =>
'SuppliersOrders',
402 'globalStatsKey' =>
'supplier_orders',
404 array(
'order_supplier_opened',
'order_supplier_awaiting'),
406 'invoice_supplier' =>
408 'groupName' =>
'BillsSuppliers',
409 'globalStatsKey' =>
'supplier_invoices',
411 array(
'invoice_supplier'),
415 'groupName' =>
'Contracts',
416 'globalStatsKey' =>
'Contracts',
418 array(
'contrat_inactive',
'contrat_active'),
422 'groupName' =>
'Tickets',
423 'globalStatsKey' =>
'ticket',
425 array(
'ticket_opened'),
429 'groupName' =>
'BankAccount',
431 array(
'bank_account',
'chequereceipt',
'widthdraw_direct_debit',
'widthdraw_credit_transfer'),
435 'groupName' =>
'Members',
436 'globalStatsKey' =>
'members',
438 array(
'member_shift',
'member_expired'),
442 'groupName' =>
'ExpenseReport',
443 'globalStatsKey' =>
'expensereports',
445 array(
'expensereport_toapprove',
'expensereport_topay'),
449 'groupName' =>
'Holidays',
450 'globalStatsKey' =>
'holidays',
458 'dashboardgroup' => $dashboardgroup
460 $reshook = $hookmanager->executeHooks(
'addOpenElementsDashboardGroup', $parameters, $object, $action);
462 $dashboardgroup = array_merge($dashboardgroup, $hookmanager->resArray);
467 $totallate = $totaltodo = 0;
471 $valid_dashboardlines = array();
472 foreach ($dashboardlines as $workboardid => $tmp) {
474 $tmp->id = $workboardid;
475 $valid_dashboardlines[$workboardid] = $tmp;
480 foreach ($valid_dashboardlines as $board) {
481 if (is_numeric($board->nbtodo) && is_numeric($board->nbtodolate) && $board->nbtodolate > 0) {
482 $totaltodo += $board->nbtodo;
483 $totallate += $board->nbtodolate;
487 $openedDashBoardSize =
'info-box-sm';
488 foreach ($dashboardgroup as $dashbordelement) {
489 if (is_array($dashbordelement[
'stats']) && count($dashbordelement[
'stats']) > 2) {
490 $openedDashBoardSize =
'';
495 $totalLateNumber = $totallate;
496 $totallatePercentage = ((!empty($totaltodo)) ? round($totallate / $totaltodo * 100, 2) : 0);
498 $totallate = $totallatePercentage;
503 $boxwork .=
'<div class="box">';
504 $boxwork .=
'<table summary="'.dol_escape_htmltag($langs->trans(
"WorkingBoard")).
'" class="noborder boxtable boxtablenobottom boxworkingboard centpercent">'.
"\n";
505 $boxwork .=
'<tr class="liste_titre">';
506 $boxwork .=
'<th class="liste_titre"><div class="inline-block valignmiddle">'.$langs->trans(
"DolibarrWorkBoard").
'</div>';
508 if ($totallate > 0) {
509 $text = $langs->transnoentitiesnoconv(
"WarningYouHaveAtLeastOneTaskLate").
' ('.$langs->transnoentitiesnoconv(
511 $totallate.(getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE') ?
'%' :
'')
514 $text = $langs->transnoentitiesnoconv(
"NoItemLate");
516 $text .=
'. '.$langs->transnoentitiesnoconv(
"LateDesc");
518 $options =
'height="24px" style="float: right"';
519 $boxwork .=
showWeather($totallate, $text, $options,
'inline-block valignmiddle');
522 $boxwork .=
'</tr>'.
"\n";
525 $nbworkboardempty = 0;
526 $isIntopOpenedDashBoard = $globalStatInTopOpenedDashBoard = array();
527 $openedDashBoard =
'';
528 if (!empty($valid_dashboardlines)) {
529 $boxwork .=
'<tr class="nobottom nohover"><td class="tdboxstats nohover flexcontainer centpercent"><div style="display: flex: flex-wrap: wrap">';
531 foreach ($dashboardgroup as $groupKey => $groupElement) {
536 foreach ($groupElement[
'stats'] as $infoKey) {
537 if (!empty($valid_dashboardlines[$infoKey])) {
538 $boards[] = $valid_dashboardlines[$infoKey];
539 $isIntopOpenedDashBoard[] = $infoKey;
544 if (!empty($boards)) {
545 if (!empty($groupElement[
'lang'])) {
546 $langs->load($groupElement[
'lang']);
549 $groupName = $langs->trans($groupElement[
'groupName']);
550 $groupKeyLowerCase = strtolower($groupKey);
553 $globalStatsKey =
false;
554 if (!empty($groupElement[
'globalStatsKey']) && empty($groupElement[
'globalStats'])) {
555 $globalStatsKey = $groupElement[
'globalStatsKey'];
556 $groupElement[
'globalStats'] = array();
559 $openedDashBoard .=
'<div class="box-flex-item"><div class="box-flex-item-with-margin">'.
"\n";
560 $openedDashBoard .=
' <div class="info-box '.$openedDashBoardSize.
'">'.
"\n";
561 $openedDashBoard .=
' <span class="info-box-icon bg-infobox-'.$groupKeyLowerCase.
'">'.
"\n";
562 $openedDashBoard .=
' <i class="fa fa-dol-'.$groupKeyLowerCase.
'"></i>'.
"\n";
565 if (!empty($groupElement[
'globalStats'])) {
566 $globalStatInTopOpenedDashBoard[] = $globalStatsKey;
567 $openedDashBoard .=
'<span class="info-box-icon-text" title="'.$groupElement[
'globalStats'][
'text'].
'">'.$groupElement[
'globalStats'][
'nbTotal'].
'</span>';
570 $openedDashBoard .=
'</span>'.
"\n";
571 $openedDashBoard .=
'<div class="info-box-content">'.
"\n";
573 $openedDashBoard .=
'<div class="info-box-title" title="'.strip_tags($groupName).
'">'.$groupName.
'</div>'.
"\n";
574 $openedDashBoard .=
'<div class="info-box-lines">'.
"\n";
576 foreach ($boards as $board) {
577 $openedDashBoard .=
'<div class="info-box-line spanoverflow nowrap">';
579 if (!empty($board->labelShort)) {
580 $infoName =
'<div class="marginrightonly inline-block valignmiddle info-box-line-text" title="'.$board->label.
'">'.$board->labelShort.
'</div>';
582 $infoName =
'<div class="marginrightonly inline-block valignmiddle info-box-line-text">'.$board->label.
'</div>';
585 $textLateTitle = $langs->trans(
"NActionsLate", $board->nbtodolate);
586 $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").
')';
588 if ($board->id ==
'bank_account') {
589 $textLateTitle .=
'<br><span class="opacitymedium">'.$langs->trans(
"IfYouDontReconcileDisableProperty", $langs->transnoentitiesnoconv(
"Conciliable")).
'</span>';
593 if ($board->nbtodolate > 0) {
594 $textLate .=
'<span title="'.dol_escape_htmltag($textLateTitle).
'" class="classfortooltip badge badge-warning">';
595 $textLate .=
'<i class="fa fa-exclamation-triangle"></i> '.$board->nbtodolate;
596 $textLate .=
'</span>';
600 if ($board->nbtodo > 0) {
601 $nbtodClass =
'badge badge-info';
603 $nbtodClass =
'opacitymedium';
607 $labeltoshow = $board->label.
' ('.$board->nbtodo.
')';
608 if ($board->total > 0) {
609 $labeltoshow .=
' - '.price($board->total, 0, $langs, 1, -1, -1,
$conf->currency);
611 $openedDashBoard .=
'<a href="'.$board->url.
'" class="info-box-text info-box-text-a">';
612 $openedDashBoard .= $infoName;
613 $openedDashBoard .=
'<div class="inline-block nowraponall">';
614 $openedDashBoard .=
'<span class="classfortooltip'.($nbtodClass ?
' '.$nbtodClass :
'').
'" title="'.$labeltoshow.
'">';
615 $openedDashBoard .= $board->nbtodo;
617 $openedDashBoard .=
' : '.price($board->total, 0, $langs, 1, -1, -1,
$conf->currency);
619 $openedDashBoard .=
'</span>';
622 if ($board->url_late) {
623 $openedDashBoard .=
'</div></a>';
624 $openedDashBoard .=
' <div class="inline-block"><a href="'.$board->url_late.
'" class="info-box-text info-box-text-a paddingleft">';
626 $openedDashBoard .=
' ';
628 $openedDashBoard .= $textLate;
630 $openedDashBoard .=
'</a>'.
"\n";
631 $openedDashBoard .=
'</div>';
632 $openedDashBoard .=
'</div>'.
"\n";
637 $openedDashBoard .=
' </div><!-- /.info-box-lines --></div><!-- /.info-box-content -->'.
"\n";
638 $openedDashBoard .=
' </div><!-- /.info-box -->'.
"\n";
639 $openedDashBoard .=
'</div><!-- /.box-flex-item-with-margin -->'.
"\n";
640 $openedDashBoard .=
'</div><!-- /.box-flex-item -->'.
"\n";
641 $openedDashBoard .=
"\n";
645 if ($showweather && !empty($isIntopOpenedDashBoard)) {
646 $appendClass = (
getDolGlobalInt(
'MAIN_DISABLE_METEO') == 2 ?
' hideonsmartphone' :
'');
650 if ($totallate > 0) {
651 $text = $langs->transnoentitiesnoconv(
"WarningYouHaveAtLeastOneTaskLate").
' ('.$langs->transnoentitiesnoconv(
653 $totallate.(getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE') ?
'%' :
'')
656 $text = $langs->transnoentitiesnoconv(
"NoItemLate");
658 $text .=
'. '.$langs->transnoentitiesnoconv(
"LateDesc");
660 $weatherDashBoard =
'<div class="box-flex-item '.$appendClass.
'"><div class="box-flex-item-with-margin">'.
"\n";
661 $weatherDashBoard .=
' <div class="info-box '.$openedDashBoardSize.
' info-box-weather info-box-weather-level'.$weather->level.
'">'.
"\n";
662 $weatherDashBoard .=
' <span class="info-box-icon">';
663 $weatherDashBoard .=
img_weather(
'', $weather->level,
'', 0,
'valignmiddle width50');
664 $weatherDashBoard .=
' </span>'.
"\n";
665 $weatherDashBoard .=
' <div class="info-box-content">'.
"\n";
666 $weatherDashBoard .=
' <div class="info-box-title">'.$langs->trans(
'GlobalOpenedElemView').
'</div>'.
"\n";
668 if ($totallatePercentage > 0 &&
getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE')) {
669 $weatherDashBoard .=
' <span class="info-box-number">'.$langs->transnoentitiesnoconv(
671 price($totallatePercentage).
'%'
673 $weatherDashBoard .=
' <span class="progress-description">'.$langs->trans(
678 $weatherDashBoard .=
' <span class="info-box-number">'.$langs->transnoentitiesnoconv(
682 if ($totallatePercentage > 0) {
683 $weatherDashBoard .=
' <span class="progress-description">'.$langs->trans(
685 price($totallatePercentage).
'%'
690 $weatherDashBoard .=
' </div><!-- /.info-box-content -->'.
"\n";
691 $weatherDashBoard .=
' </div><!-- /.info-box -->'.
"\n";
692 $weatherDashBoard .=
'</div><!-- /.box-flex-item-with-margin -->'.
"\n";
693 $weatherDashBoard .=
'</div><!-- /.box-flex-item -->'.
"\n";
694 $weatherDashBoard .=
"\n";
696 $openedDashBoard = $weatherDashBoard.$openedDashBoard;
699 if (!empty($isIntopOpenedDashBoard)) {
700 for ($i = 1; $i <= 10; $i++) {
701 $openedDashBoard .=
'<div class="box-flex-item filler"></div>';
705 $nbworkboardcount = 0;
706 foreach ($valid_dashboardlines as $infoKey => $board) {
707 if (in_array($infoKey, $isIntopOpenedDashBoard)) {
712 if (empty($board->nbtodo)) {
718 $textlate = $langs->trans(
"NActionsLate", $board->nbtodolate);
719 $textlate .=
' ('.$langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($board->warning_delay) >= 0 ?
'+' :
'').ceil($board->warning_delay).
' '.$langs->trans(
"days").
')';
722 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats130 boxstatsborder">';
723 $boxwork .=
'<div class="boxstatscontent">';
724 $boxwork .=
'<span class="boxstatstext" title="'.dol_escape_htmltag($board->label).
'">'.$board->img.
' <span>'.$board->label.
'</span></span><br>';
725 $boxwork .=
'<a class="valignmiddle dashboardlineindicator" href="'.$board->url.
'"><span class="dashboardlineindicator'.(($board->nbtodo == 0) ?
' dashboardlineok' :
'').
'">'.$board->nbtodo.
'</span></a>';
727 $boxwork .=
' / <a class="valignmiddle dashboardlineindicator" href="'.$board->url.
'"><span class="dashboardlineindicator'.(($board->nbtodo == 0) ?
' dashboardlineok' :
'').
'">'.
price($board->total).
'</span></a>';
729 $boxwork .=
'</div>';
730 if ($board->nbtodolate > 0) {
731 $boxwork .=
'<div class="dashboardlinelatecoin nowrap">';
732 $boxwork .=
'<a title="'.dol_escape_htmltag($textlate).
'" class="valignmiddle dashboardlineindicatorlate'.($board->nbtodolate > 0 ?
' dashboardlineko' :
' dashboardlineok').
'" href="'.((!$board->url_late) ? $board->url : $board->url_late).
'">';
737 'class="inline-block hideonsmartphone valigntextbottom"'
739 $boxwork .=
'<span class="dashboardlineindicatorlate'.($board->nbtodolate > 0 ?
' dashboardlineko' :
' dashboardlineok').
'">';
740 $boxwork .= $board->nbtodolate;
741 $boxwork .=
'</span>';
743 $boxwork .=
'</div>';
745 $boxwork .=
'</div></div>';
749 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
750 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
751 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
752 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
754 $boxwork .=
'</div>';
755 $boxwork .=
'</td></tr>';
757 $boxwork .=
'<tr class="nohover">';
758 $boxwork .=
'<td class="nohover valignmiddle opacitymedium">';
759 $boxwork .= $langs->trans(
"NoOpenedElementToProcess");
764 $boxwork .=
'</td></tr>';
766 $boxwork .=
'</table>';
767 $boxwork .=
'</div>';
769 if (!empty($isIntopOpenedDashBoard)) {
770 print
'<div class="fichecenter">';
771 print
'<div class="opened-dash-board-wrap"><div class="box-flex-container">'.$openedDashBoard.
'</div></div>';
777print
'<div class="clearboth"></div>';
779print
'<div class="fichecenter fichecenterbis">';
786$boxlist =
'<div class="twocolumns">';
788$boxlist .=
'<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">';
789if (!empty($nbworkboardcount)) {
790 $boxlist .= $boxwork;
793$boxlist .= $resultboxes[
'boxlista'];
797$boxlist .=
'<div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">';
799$boxlist .= $resultboxes[
'boxlistb'];
833 return img_weather($text, $weather->picto, $options, 0, $morecss);
846 $weather->picto =
'';
851 $used_conf = (
getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE') ?
'MAIN_METEO_PERCENTAGE_LEVEL' :
'MAIN_METEO_LEVEL');
856 $level1 = $offset + $factor;
858 $level2 = $offset + 2 * $factor;
860 $level3 = $offset + 3 * $factor;
863 if ($totallate <= $level0) {
864 $weather->picto =
'weather-clear.png';
866 } elseif ($totallate <= $level1) {
867 $weather->picto =
'weather-few-clouds.png';
869 } elseif ($totallate <= $level2) {
870 $weather->picto =
'weather-clouds.png';
872 } elseif ($totallate <= $level3) {
873 $weather->picto =
'weather-many-clouds.png';
876 $weather->picto =
'weather-storm.png';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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)
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.
dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles=1, $removeclassattribute=1, $cleanalsojavascript=0, $allowiframe=0, $allowed_tags=array(), $allowlink=0, $allowscript=0, $allowstyle=0)
Clean a string to keep only desirable HTML tags.
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.
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.