29 define(
'CSRFCHECK_WITH_TOKEN', 1);
31 require
'main.inc.php';
32 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
35 $_GET[
'mainmenu'] =
GETPOST(
'mainmenu',
'aZ09') ?
GETPOST(
'mainmenu',
'aZ09') :
'home';
36 $action =
GETPOST(
'action',
'aZ09');
38 $hookmanager->initHooks(array(
'index'));
45 $nbmodulesnotautoenabled = count($conf->modules);
46 if (in_array(
'fckeditor', $conf->modules)) $nbmodulesnotautoenabled--;
47 if (in_array(
'export', $conf->modules)) $nbmodulesnotautoenabled--;
48 if (in_array(
'import', $conf->modules)) $nbmodulesnotautoenabled--;
51 if (!isset($conf->global->MAIN_INFO_SOCIETE_NOM) || empty($conf->global->MAIN_INFO_SOCIETE_NOM)) {
52 header(
"Location: ".DOL_URL_ROOT.
"/admin/index.php?mainmenu=home&leftmenu=setup&mesg=setupnotcomplete");
55 if ($nbmodulesnotautoenabled <=
getDolGlobalString(
'MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING', 1)) {
56 header(
"Location: ".DOL_URL_ROOT.
"/admin/index.php?mainmenu=home&leftmenu=setup&mesg=setupnotcomplete");
60 require_once DOL_DOCUMENT_ROOT.
'/core/class/infobox.class.php';
61 $zone =
GETPOST(
'areacode',
'int');
62 $userid =
GETPOST(
'userid',
'int');
63 $boxorder =
GETPOST(
'boxorder',
'aZ09');
64 $boxorder .=
GETPOST(
'boxcombo',
'aZ09');
82 $title = $langs->trans(
"HomeArea").
' - Dolibarr '.DOL_VERSION;
83 if (!empty($conf->global->MAIN_APPLICATION_TITLE)) {
84 $title = $langs->trans(
"HomeArea").
' - '.$conf->global->MAIN_APPLICATION_TITLE;
93 print
load_fiche_titre(
' ', $resultboxes[
'selectboxlist'],
'', 0,
'',
'titleforhome');
95 if (!empty($conf->global->MAIN_MOTD)) {
96 $conf->global->MAIN_MOTD = preg_replace(
'/<br(\s[\sa-zA-Z_="]*)?\/?>/i',
'<br>', $conf->global->MAIN_MOTD);
97 if (!empty($conf->global->MAIN_MOTD)) {
100 $texttoshow =
make_substitutions($conf->global->MAIN_MOTD, $substitutionarray, $langs);
102 print
"\n<!-- Start of welcome text -->\n";
103 print
'<table width="100%" class="notopnoleftnoright"><tr><td>';
105 print
'</td></tr></table><br>';
106 print
"\n<!-- End of welcome text -->\n";
115 if (empty($conf->global->MAIN_REMOVE_INSTALL_WARNING)) {
119 $lockfile = DOL_DATA_ROOT.
'/install.lock';
120 if (!empty($lockfile) && !file_exists($lockfile) && is_dir(DOL_DOCUMENT_ROOT.
"/install")) {
121 $langs->load(
"errors");
123 $message .=
info_admin($langs->trans(
"WarningLockFileDoesNotExists", DOL_DATA_ROOT).
' '.$langs->trans(
"WarningUntilDirRemoved", DOL_DOCUMENT_ROOT.
"/install"), 0, 0,
'1',
'clearboth');
127 if (is_writable($conffile)) {
128 $langs->load(
"errors");
131 $message .=
info_admin($langs->transnoentities(
"WarningConfFileMustBeReadOnly").
' '.$langs->trans(
"WarningUntilDirRemoved", DOL_DOCUMENT_ROOT.
"/install"), 0, 0,
'1',
'clearboth');
134 $object =
new stdClass();
135 $parameters = array();
136 $reshook = $hookmanager->executeHooks(
'infoadmin', $parameters, $object, $action);
138 $message .= $hookmanager->resPrint;
141 print $message.
'<br>';
152 $boxstatItems = array();
153 $boxstatFromHook =
'';
156 $langs->loadLangs(array(
'commercial',
'bills',
'orders',
'contracts'));
159 if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) {
160 $showweather = (empty($conf->global->MAIN_DISABLE_METEO) || $conf->global->MAIN_DISABLE_METEO == 2) ? 1 : 0;
163 $dashboardlines = array();
166 require_once DOL_DOCUMENT_ROOT.
'/core/class/workboardresponse.class.php';
169 if (
isModEnabled(
'agenda') && empty($conf->global->MAIN_DISABLE_BLOCK_AGENDA) && $user->hasRight(
'agenda',
'myactions',
'read')) {
170 include_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
172 $dashboardlines[$board->element] = $board->load_board($user);
176 if (
isModEnabled(
'project') && empty($conf->global->MAIN_DISABLE_BLOCK_PROJECT) && $user->hasRight(
'projet',
'lire')) {
177 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
179 $dashboardlines[$board->element] = $board->load_board($user);
183 if (
isModEnabled(
'project') && empty($conf->global->MAIN_DISABLE_BLOCK_PROJECT) && empty($conf->global->PROJECT_HIDE_TASKS) && $user->hasRight(
'projet',
'lire')) {
184 include_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
185 $board =
new Task($db);
186 $dashboardlines[$board->element] = $board->load_board($user);
190 if (
isModEnabled(
'propal') && empty($conf->global->MAIN_DISABLE_BLOCK_CUSTOMER) && $user->hasRight(
'propal',
'read')) {
191 include_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
193 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
195 $dashboardlines[$board->element.
'_signed'] = $board->load_board($user,
"signed");
199 if (
isModEnabled(
'supplier_proposal') && empty($conf->global->MAIN_DISABLE_BLOCK_SUPPLIER) && $user->hasRight(
'supplier_proposal',
'lire')) {
200 $langs->load(
"supplier_proposal");
201 include_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
203 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
205 $dashboardlines[$board->element.
'_signed'] = $board->load_board($user,
"signed");
209 if (
isModEnabled(
'commande') && empty($conf->global->MAIN_DISABLE_BLOCK_CUSTOMER) && $user->hasRight(
'commande',
'lire')) {
210 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
213 $dashboardlines[$board->element.
'_toship'] = $board->load_board($user,
'toship');
216 $dashboardlines[$board->element.
'_tobill'] = $board->load_board($user,
'tobill');
219 $dashboardlines[$board->element.
'_shippedtobill'] = $board->load_board($user,
'shippedtobill');
223 if (
isModEnabled(
'supplier_order') && empty($conf->global->MAIN_DISABLE_BLOCK_SUPPLIER) && $user->hasRight(
'fournisseur',
'commande',
'lire')) {
224 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
226 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
227 $dashboardlines[$board->element.
'_awaiting'] = $board->load_board($user,
'awaiting');
231 if (
isModEnabled(
'contrat') && empty($conf->global->MAIN_DISABLE_BLOCK_CONTRACT) && $user->hasRight(
'contrat',
'lire')) {
232 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
234 $dashboardlines[$board->element.
'_inactive'] = $board->load_board($user,
"inactive");
236 $dashboardlines[$board->element.
'_active'] = $board->load_board($user,
"active");
240 if (
isModEnabled(
'ticket') && empty($conf->global->MAIN_DISABLE_BLOCK_TICKET) && $user->hasRight(
'ticket',
'read')) {
241 include_once DOL_DOCUMENT_ROOT.
'/ticket/class/ticket.class.php';
243 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
249 if (
isModEnabled(
'facture') && empty($conf->global->MAIN_DISABLE_BLOCK_CUSTOMER) && $user->hasRight(
'facture',
'lire')) {
250 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
252 $dashboardlines[$board->element] = $board->load_board($user);
256 if (
isModEnabled(
'supplier_invoice') && empty($conf->global->MAIN_DISABLE_BLOCK_SUPPLIER) && $user->hasRight(
'fournisseur',
'facture',
'lire')) {
257 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
259 $dashboardlines[$board->element] = $board->load_board($user);
263 if (
isModEnabled(
'banque') && empty($conf->global->MAIN_DISABLE_BLOCK_BANK) && $user->hasRight(
'banque',
'lire') && !$user->socid) {
264 include_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
266 $nb = $board->countAccountToReconcile();
268 $dashboardlines[$board->element] = $board->load_board($user);
274 if (
isModEnabled(
'banque') && empty($conf->global->MAIN_DISABLE_BLOCK_BANK) && $user->hasRight(
'banque',
'lire') && !$user->socid) {
275 if (empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT)) {
276 include_once DOL_DOCUMENT_ROOT .
'/compta/paiement/cheque/class/remisecheque.class.php';
278 $dashboardlines[$board->element] = $board->load_board($user);
281 include_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
283 $dashboardlines[$board->element .
'_direct_debit'] = $board->load_board($user,
'direct_debit');
286 include_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
288 $dashboardlines[$board->element .
'_credit_transfer'] = $board->load_board($user,
'credit_transfer');
293 if (
isModEnabled(
'adherent') && empty($conf->global->MAIN_DISABLE_BLOCK_ADHERENT) && $user->hasRight(
'adherent',
'lire') && !$user->socid) {
294 include_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
296 $dashboardlines[$board->element.
'_shift'] = $board->load_board($user,
'shift');
297 $dashboardlines[$board->element.
'_expired'] = $board->load_board($user,
'expired');
301 if (
isModEnabled(
'expensereport') && empty($conf->global->MAIN_DISABLE_BLOCK_EXPENSEREPORT) && $user->hasRight(
'expensereport',
'approve')) {
302 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
304 $dashboardlines[$board->element.
'_toapprove'] = $board->load_board($user,
'toapprove');
308 if (
isModEnabled(
'expensereport') && empty($conf->global->MAIN_DISABLE_BLOCK_EXPENSEREPORT) && $user->hasRight(
'expensereport',
'to_paid')) {
309 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
311 $dashboardlines[$board->element.
'_topay'] = $board->load_board($user,
'topay');
315 if (
isModEnabled(
'holiday') && empty($conf->global->MAIN_DISABLE_BLOCK_HOLIDAY) && $user->hasRight(
'holiday',
'approve')) {
316 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
318 $dashboardlines[$board->element] = $board->load_board($user);
321 $object =
new stdClass();
322 $parameters = array();
324 $reshook = $hookmanager->executeHooks(
325 'addOpenElementsDashboardLine',
331 $dashboardlines = array_merge($dashboardlines, $hookmanager->resArray);
335 $dashboardgroup = array(
338 'groupName' =>
'Agenda',
339 'stats' => array(
'action'),
343 'groupName' =>
'Projects',
344 'globalStatsKey' =>
'projects',
345 'stats' => array(
'project',
'project_task'),
349 'groupName' =>
'Proposals',
350 'globalStatsKey' =>
'proposals',
352 array(
'propal_opened',
'propal_signed'),
356 'groupName' =>
'Orders',
357 'globalStatsKey' =>
'orders',
359 array(
'commande_toship',
'commande_tobill',
'commande_shippedtobill'),
363 'groupName' =>
'Invoices',
364 'globalStatsKey' =>
'invoices',
368 'supplier_proposal' =>
370 'lang' =>
'supplier_proposal',
371 'groupName' =>
'SupplierProposals',
372 'globalStatsKey' =>
'askprice',
374 array(
'supplier_proposal_opened',
'supplier_proposal_signed'),
378 'groupName' =>
'SuppliersOrders',
379 'globalStatsKey' =>
'supplier_orders',
381 array(
'order_supplier_opened',
'order_supplier_awaiting'),
383 'invoice_supplier' =>
385 'groupName' =>
'BillsSuppliers',
386 'globalStatsKey' =>
'supplier_invoices',
388 array(
'invoice_supplier'),
392 'groupName' =>
'Contracts',
393 'globalStatsKey' =>
'Contracts',
395 array(
'contrat_inactive',
'contrat_active'),
399 'groupName' =>
'Tickets',
400 'globalStatsKey' =>
'ticket',
402 array(
'ticket_opened'),
406 'groupName' =>
'BankAccount',
408 array(
'bank_account',
'chequereceipt',
'widthdraw_direct_debit',
'widthdraw_credit_transfer'),
412 'groupName' =>
'Members',
413 'globalStatsKey' =>
'members',
415 array(
'member_shift',
'member_expired'),
419 'groupName' =>
'ExpenseReport',
420 'globalStatsKey' =>
'expensereports',
422 array(
'expensereport_toapprove',
'expensereport_topay'),
426 'groupName' =>
'Holidays',
427 'globalStatsKey' =>
'holidays',
433 $object =
new stdClass();
435 'dashboardgroup' => $dashboardgroup
437 $reshook = $hookmanager->executeHooks(
'addOpenElementsDashboardGroup', $parameters, $object, $action);
439 $dashboardgroup = array_merge($dashboardgroup, $hookmanager->resArray);
444 $totallate = $totaltodo = 0;
448 $valid_dashboardlines = array();
449 foreach ($dashboardlines as $workboardid => $tmp) {
451 $tmp->id = $workboardid;
452 $valid_dashboardlines[$workboardid] = $tmp;
457 foreach ($valid_dashboardlines as $board) {
458 if ($board->nbtodolate > 0) {
459 $totaltodo += $board->nbtodo;
460 $totallate += $board->nbtodolate;
464 $openedDashBoardSize =
'info-box-sm';
465 foreach ($dashboardgroup as $dashbordelement) {
466 if (is_array($dashbordelement[
'stats']) && count($dashbordelement[
'stats']) > 2) {
467 $openedDashBoardSize =
'';
472 $totalLateNumber = $totallate;
473 $totallatePercentage = ((!empty($totaltodo)) ? round($totallate / $totaltodo * 100, 2) : 0);
474 if (!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) {
475 $totallate = $totallatePercentage;
479 $boxwork .=
'<div class="box">';
480 $boxwork .=
'<table summary="'.dol_escape_htmltag($langs->trans(
"WorkingBoard")).
'" class="noborder boxtable boxtablenobottom boxworkingboard centpercent">'.
"\n";
481 $boxwork .=
'<tr class="liste_titre">';
482 $boxwork .=
'<th class="liste_titre"><div class="inline-block valignmiddle">'.$langs->trans(
"DolibarrWorkBoard").
'</div>';
484 if ($totallate > 0) {
485 $text = $langs->transnoentitiesnoconv(
"WarningYouHaveAtLeastOneTaskLate").
' ('.$langs->transnoentitiesnoconv(
487 $totallate.(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ?
'%' :
'')
490 $text = $langs->transnoentitiesnoconv(
"NoItemLate");
492 $text .=
'. '.$langs->transnoentitiesnoconv(
"LateDesc");
494 $options =
'height="24px" style="float: right"';
495 $boxwork .=
showWeather($totallate, $text, $options,
'inline-block valignmiddle');
498 $boxwork .=
'</tr>'.
"\n";
501 $nbworkboardempty = 0;
502 $isIntopOpenedDashBoard = $globalStatInTopOpenedDashBoard = array();
503 if (!empty($valid_dashboardlines)) {
504 $openedDashBoard =
'';
506 $boxwork .=
'<tr class="nobottom nohover"><td class="tdboxstats nohover flexcontainer centpercent"><div style="display: flex: flex-wrap: wrap">';
508 foreach ($dashboardgroup as $groupKey => $groupElement) {
512 if (empty($conf->global->MAIN_DISABLE_NEW_OPENED_DASH_BOARD)) {
513 foreach ($groupElement[
'stats'] as $infoKey) {
514 if (!empty($valid_dashboardlines[$infoKey])) {
515 $boards[] = $valid_dashboardlines[$infoKey];
516 $isIntopOpenedDashBoard[] = $infoKey;
521 if (!empty($boards)) {
522 if (!empty($groupElement[
'lang'])) {
523 $langs->load($groupElement[
'lang']);
525 $groupName = $langs->trans($groupElement[
'groupName']);
526 $groupKeyLowerCase = strtolower($groupKey);
529 $globalStatsKey =
false;
530 if (!empty($groupElement[
'globalStatsKey']) && empty($groupElement[
'globalStats'])) {
531 $globalStatsKey = $groupElement[
'globalStatsKey'];
532 $groupElement[
'globalStats'] = array();
535 $openedDashBoard .=
'<div class="box-flex-item"><div class="box-flex-item-with-margin">'.
"\n";
536 $openedDashBoard .=
' <div class="info-box '.$openedDashBoardSize.
'">'.
"\n";
537 $openedDashBoard .=
' <span class="info-box-icon bg-infobox-'.$groupKeyLowerCase.
'">'.
"\n";
538 $openedDashBoard .=
' <i class="fa fa-dol-'.$groupKeyLowerCase.
'"></i>'.
"\n";
541 if (!empty($groupElement[
'globalStats'])) {
542 $globalStatInTopOpenedDashBoard[] = $globalStatsKey;
543 $openedDashBoard .=
'<span class="info-box-icon-text" title="'.$groupElement[
'globalStats'][
'text'].
'">'.$groupElement[
'globalStats'][
'nbTotal'].
'</span>';
546 $openedDashBoard .=
'</span>'.
"\n";
547 $openedDashBoard .=
'<div class="info-box-content">'.
"\n";
549 $openedDashBoard .=
'<div class="info-box-title" title="'.strip_tags($groupName).
'">'.$groupName.
'</div>'.
"\n";
550 $openedDashBoard .=
'<div class="info-box-lines">'.
"\n";
552 foreach ($boards as $board) {
553 $openedDashBoard .=
'<div class="info-box-line spanoverflow nowrap">';
555 if (!empty($board->labelShort)) {
556 $infoName =
'<span class="marginrightonly" title="'.$board->label.
'">'.$board->labelShort.
'</span>';
558 $infoName =
'<span class="marginrightonly">'.$board->label.
'</span>';
561 $textLateTitle = $langs->trans(
"NActionsLate", $board->nbtodolate);
562 $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").
')';
564 if ($board->id ==
'bank_account') {
565 $textLateTitle .=
'<br><span class="opacitymedium">'.$langs->trans(
"IfYouDontReconcileDisableProperty", $langs->transnoentitiesnoconv(
"Conciliable")).
'</span>';
569 if ($board->nbtodolate > 0) {
570 $textLate .=
'<span title="'.dol_escape_htmltag($textLateTitle).
'" class="classfortooltip badge badge-warning">';
571 $textLate .=
'<i class="fa fa-exclamation-triangle"></i> '.$board->nbtodolate;
572 $textLate .=
'</span>';
576 if ($board->nbtodo > 0) {
577 $nbtodClass =
'badge badge-info';
579 $nbtodClass =
'opacitymedium';
583 $labeltoshow = $board->label.
' ('.$board->nbtodo.
')';
584 if ($board->total > 0) {
585 $labeltoshow .=
' - '.price($board->total, 0, $langs, 1, -1, -1, $conf->currency);
587 $openedDashBoard .=
'<a href="'.$board->url.
'" class="info-box-text info-box-text-a">'.$infoName.
'<span class="classfortooltip'.($nbtodClass ?
' '.$nbtodClass :
'').
'" title="'.$labeltoshow.
'" >';
588 $openedDashBoard .= $board->nbtodo;
589 if ($board->total > 0 && !empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)) {
590 $openedDashBoard .=
' : '.price($board->total, 0, $langs, 1, -1, -1, $conf->currency);
592 $openedDashBoard .=
'</span>';
594 if ($board->url_late) {
595 $openedDashBoard .=
'</a>';
596 $openedDashBoard .=
' <a href="'.$board->url_late.
'" class="info-box-text info-box-text-a paddingleft">';
598 $openedDashBoard .=
' ';
600 $openedDashBoard .= $textLate;
602 $openedDashBoard .=
'</a>'.
"\n";
603 $openedDashBoard .=
'</div>'.
"\n";
608 $openedDashBoard .=
' </div><!-- /.info-box-lines --></div><!-- /.info-box-content -->'.
"\n";
609 $openedDashBoard .=
' </div><!-- /.info-box -->'.
"\n";
610 $openedDashBoard .=
'</div><!-- /.box-flex-item-with-margin -->'.
"\n";
611 $openedDashBoard .=
'</div><!-- /.box-flex-item -->'.
"\n";
612 $openedDashBoard .=
"\n";
616 if ($showweather && !empty($isIntopOpenedDashBoard)) {
617 $appendClass = (!empty($conf->global->MAIN_DISABLE_METEO) && $conf->global->MAIN_DISABLE_METEO == 2 ?
' hideonsmartphone' :
'');
621 if ($totallate > 0) {
622 $text = $langs->transnoentitiesnoconv(
"WarningYouHaveAtLeastOneTaskLate").
' ('.$langs->transnoentitiesnoconv(
624 $totallate.(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ?
'%' :
'')
627 $text = $langs->transnoentitiesnoconv(
"NoItemLate");
629 $text .=
'. '.$langs->transnoentitiesnoconv(
"LateDesc");
631 $weatherDashBoard =
'<div class="box-flex-item '.$appendClass.
'"><div class="box-flex-item-with-margin">'.
"\n";
632 $weatherDashBoard .=
' <div class="info-box '.$openedDashBoardSize.
' info-box-weather info-box-weather-level'.$weather->level.
'">'.
"\n";
633 $weatherDashBoard .=
' <span class="info-box-icon">';
634 $weatherDashBoard .=
img_weather(
'', $weather->level,
'', 0,
'valignmiddle width50');
635 $weatherDashBoard .=
' </span>'.
"\n";
636 $weatherDashBoard .=
' <div class="info-box-content">'.
"\n";
637 $weatherDashBoard .=
' <div class="info-box-title">'.$langs->trans(
'GlobalOpenedElemView').
'</div>'.
"\n";
639 if ($totallatePercentage > 0 && !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) {
640 $weatherDashBoard .=
' <span class="info-box-number">'.$langs->transnoentitiesnoconv(
642 price($totallatePercentage).
'%'
644 $weatherDashBoard .=
' <span class="progress-description">'.$langs->trans(
649 $weatherDashBoard .=
' <span class="info-box-number">'.$langs->transnoentitiesnoconv(
653 if ($totallatePercentage > 0) {
654 $weatherDashBoard .=
' <span class="progress-description">'.$langs->trans(
656 price($totallatePercentage).
'%'
661 $weatherDashBoard .=
' </div><!-- /.info-box-content -->'.
"\n";
662 $weatherDashBoard .=
' </div><!-- /.info-box -->'.
"\n";
663 $weatherDashBoard .=
'</div><!-- /.box-flex-item-with-margin -->'.
"\n";
664 $weatherDashBoard .=
'</div><!-- /.box-flex-item -->'.
"\n";
665 $weatherDashBoard .=
"\n";
667 $openedDashBoard = $weatherDashBoard.$openedDashBoard;
670 if (!empty($isIntopOpenedDashBoard)) {
671 for ($i = 1; $i <= 10; $i++) {
672 $openedDashBoard .=
'<div class="box-flex-item filler"></div>';
676 $nbworkboardcount = 0;
677 foreach ($valid_dashboardlines as $infoKey => $board) {
678 if (in_array($infoKey, $isIntopOpenedDashBoard)) {
683 if (empty($board->nbtodo)) {
689 $textlate = $langs->trans(
"NActionsLate", $board->nbtodolate);
690 $textlate .=
' ('.$langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($board->warning_delay) >= 0 ?
'+' :
'').ceil($board->warning_delay).
' '.$langs->trans(
"days").
')';
693 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats130 boxstatsborder">';
694 $boxwork .=
'<div class="boxstatscontent">';
695 $boxwork .=
'<span class="boxstatstext" title="'.dol_escape_htmltag($board->label).
'">'.$board->img.
' <span>'.$board->label.
'</span></span><br>';
696 $boxwork .=
'<a class="valignmiddle dashboardlineindicator" href="'.$board->url.
'"><span class="dashboardlineindicator'.(($board->nbtodo == 0) ?
' dashboardlineok' :
'').
'">'.$board->nbtodo.
'</span></a>';
697 if ($board->total > 0 && !empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)) {
698 $boxwork .=
' / <a class="valignmiddle dashboardlineindicator" href="'.$board->url.
'"><span class="dashboardlineindicator'.(($board->nbtodo == 0) ?
' dashboardlineok' :
'').
'">'.
price($board->total).
'</span></a>';
700 $boxwork .=
'</div>';
701 if ($board->nbtodolate > 0) {
702 $boxwork .=
'<div class="dashboardlinelatecoin nowrap">';
703 $boxwork .=
'<a title="'.dol_escape_htmltag($textlate).
'" class="valignmiddle dashboardlineindicatorlate'.($board->nbtodolate > 0 ?
' dashboardlineko' :
' dashboardlineok').
'" href="'.((!$board->url_late) ? $board->url : $board->url_late).
'">';
708 'class="inline-block hideonsmartphone valigntextbottom"'
710 $boxwork .=
'<span class="dashboardlineindicatorlate'.($board->nbtodolate > 0 ?
' dashboardlineko' :
' dashboardlineok').
'">';
711 $boxwork .= $board->nbtodolate;
712 $boxwork .=
'</span>';
714 $boxwork .=
'</div>';
716 $boxwork .=
'</div></div>';
720 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
721 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
722 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
723 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
725 $boxwork .=
'</div>';
726 $boxwork .=
'</td></tr>';
728 $boxwork .=
'<tr class="nohover">';
729 $boxwork .=
'<td class="nohover valignmiddle opacitymedium">';
730 $boxwork .= $langs->trans(
"NoOpenedElementToProcess");
735 $boxwork .=
'</td></tr>';
737 $boxwork .=
'</table>';
738 $boxwork .=
'</div>';
740 if (!empty($isIntopOpenedDashBoard)) {
741 print
'<div class="fichecenter">';
742 print
'<div class="opened-dash-board-wrap"><div class="box-flex-container">'.$openedDashBoard.
'</div></div>';
748 print
'<div class="clearboth"></div>';
750 print
'<div class="fichecenter fichecenterbis">';
757 $boxlist =
'<div class="twocolumns">';
759 $boxlist .=
'<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">';
760 if (!empty($nbworkboardcount)) {
761 $boxlist .= $boxwork;
764 $boxlist .= $resultboxes[
'boxlista'];
766 $boxlist .=
'</div>';
768 $boxlist .=
'<div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">';
770 $boxlist .= $resultboxes[
'boxlistb'];
772 $boxlist .=
'</div>';
775 $boxlist .=
'</div>';
804 return img_weather($text, $weather->picto, $options, 0, $morecss);
819 $weather =
new stdClass();
820 $weather->picto =
'';
825 $used_conf = empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ?
'MAIN_METEO_LEVEL' :
'MAIN_METEO_PERCENTAGE_LEVEL';
830 $level1 = $offset + $factor;
832 $level2 = $offset + 2 * $factor;
834 $level3 = $offset + 3 * $factor;
837 if ($totallate <= $level0) {
838 $weather->picto =
'weather-clear.png';
840 } elseif ($totallate <= $level1) {
841 $weather->picto =
'weather-few-clouds.png';
843 } elseif ($totallate <= $level2) {
844 $weather->picto =
'weather-clouds.png';
846 } elseif ($totallate <= $level3) {
847 $weather->picto =
'weather-many-clouds.png';
850 $weather->picto =
'weather-storm.png';