31define(
'CSRFCHECK_WITH_TOKEN', 1);
33require
'main.inc.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
47$_GET[
'mainmenu'] =
GETPOST(
'mainmenu',
'aZ09') ?
GETPOST(
'mainmenu',
'aZ09') :
'home';
48$action =
GETPOST(
'action',
'aZ09');
50$hookmanager->initHooks(array(
'index'));
52require_once DOL_DOCUMENT_ROOT.
'/core/redirect_if_setup_not_complete.inc.php';
60include DOL_DOCUMENT_ROOT.
'/core/actions_addbox.inc.php';
67if (!isset($form) || !is_object($form)) {
68 $form =
new Form($db);
71$appli = constant(
'DOL_APPLICATION_TITLE');
74 $appli = (preg_match(
'/^\+/', $applicustom) ? $appli :
'').$applicustom;
76 $appli .=
" ".DOL_VERSION;
80$title = $langs->trans(
"HomeArea").
' - '.$appli;
91 $motd = preg_replace(
'/<br(\s[\sa-zA-Z_="]*)?\/?>/i',
'<br>',
getDolGlobalString(
'MAIN_MOTD'));
93 $substitutionarray = getCommonSubstitutionArray($langs);
97 print
"\n<!-- Start of welcome text -->\n";
98 print
'<table class="centpercent notopnoleftnoright"><tr><td>';
100 print
'</td></tr></table><br>';
101 print
"\n<!-- End of welcome text -->\n";
110 $langs->loadLangs(array(
"other"));
112 $messagetoshow =
info_admin($messagetoshow, 0, 0,
'warning',
'clearboth');
115 $parameters = array(
'type' =>
'MAIN_FORCE_SYSTEM_MESSAGE');
116 $reshook = $hookmanager->executeHooks(
'messageOfTheDay', $parameters, $tmpobject, $action);
118 $messagetoshow .= $hookmanager->resPrint;
120 if ($messagetoshow) {
121 print
'<!-- show system message -->';
128 $langs->loadLangs(array(
"other"));
130 $messagetoshow = $langs->trans(
"YourInstallIsOldThanksToUpgrade");
132 $messagetoshow = $langs->trans(
getDolGlobalString(
'MAIN_FORCE_UPGRADE_MESSAGE',
"YourInstallIsOldThanksToUpgrade"));
135 $messagetoshow .=
'<br><a href="'.getDolGlobalString(
'MAIN_FORCE_UPGRADE_URL').
'" target="_blank">'.
getDolGlobalString(
'MAIN_FORCE_UPGRADE_URL').
'</a>';
137 $messagetoshow =
info_admin($messagetoshow, 0, 0,
'warning',
'clearboth');
160 $lockfile = DOL_DATA_ROOT.
'/install.lock';
161 if (!empty($lockfile) && !file_exists($lockfile) && is_dir(DOL_DOCUMENT_ROOT.
"/install")) {
162 $langs->load(
"errors");
164 $messagetoshow .=
info_admin($langs->transnoentities(
"WarningLockFileDoesNotExists", DOL_DATA_ROOT).
' '.$langs->transnoentities(
"WarningUntilDirRemoved", DOL_DOCUMENT_ROOT.
"/install"), 0, 0,
'warning',
'clearboth');
171 $newPerm = $currentPerm & ~0222;
177 $langs->load(
"errors");
178 $messagetoshow .=
info_admin($langs->transnoentities(
"WarningConfFileMustBeReadOnly").
' '.$langs->transnoentities(
"WarningUntilDirRemoved", DOL_DOCUMENT_ROOT.
"/install"), 0, 0,
'warning',
'clearboth');
183 $parameters = array(
'type' =>
'MAIN_REMOVE_INSTALL_WARNING');
184 $reshook = $hookmanager->executeHooks(
'messageOfTheDay', $parameters, $tmpobject, $action);
186 $messagetoshow .= $hookmanager->resPrint;
188 if ($messagetoshow) {
189 print
'<!-- show security warning -->';
199print
load_fiche_titre(
' ', $resultboxes[
'selectboxlist'],
'', 0,
'',
'titleforhome');
202$langs->loadLangs(array(
'commercial',
'bills',
'orders',
'contracts'));
209 $dashboardlines = array();
212 require_once DOL_DOCUMENT_ROOT.
'/core/class/workboardresponse.class.php';
216 include_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
218 $dashboardlines[$board->element] = $board->load_board($user);
223 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
225 $dashboardlines[$board->element] = $board->load_board($user);
230 include_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
231 $board =
new Task($db);
232 $dashboardlines[$board->element] = $board->load_board($user);
237 include_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
239 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
241 $dashboardlines[$board->element.
'_signed'] = $board->load_board($user,
"signed");
246 $langs->load(
"supplier_proposal");
247 include_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
249 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
251 $dashboardlines[$board->element.
'_signed'] = $board->load_board($user,
"signed");
256 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
259 $dashboardlines[$board->element.
'_toship'] = $board->load_board($user,
'toship');
262 $dashboardlines[$board->element.
'_tobill'] = $board->load_board($user,
'tobill');
265 $dashboardlines[$board->element.
'_shippedtobill'] = $board->load_board($user,
'shippedtobill');
270 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
272 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
273 $dashboardlines[$board->element.
'_awaiting'] = $board->load_board($user,
'awaiting');
278 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
280 $dashboardlines[$board->element.
'_inactive'] = $board->load_board($user,
"inactive");
282 $dashboardlines[$board->element.
'_active'] = $board->load_board($user,
"active");
287 include_once DOL_DOCUMENT_ROOT.
'/ticket/class/ticket.class.php';
289 $dashboardlines[$board->element.
'_opened'] = $board->load_board($user,
"opened");
296 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
298 $dashboardlines[$board->element] = $board->load_board($user);
302 if (
isModEnabled(
'supplier_invoice') && !
getDolGlobalString(
'MAIN_DISABLE_BLOCK_SUPPLIER') && $user->hasRight(
'fournisseur',
'facture',
'lire')) {
303 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
305 $dashboardlines[$board->element] = $board->load_board($user);
310 include_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
312 $nb = $board->countAccountToReconcile();
314 $dashboardlines[$board->element] = $board->load_board($user);
321 include_once DOL_DOCUMENT_ROOT .
'/compta/paiement/cheque/class/remisecheque.class.php';
323 $dashboardlines[$board->element] = $board->load_board($user);
326 include_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
328 $dashboardlines[$board->element .
'_direct_debit'] = $board->load_board($user,
'direct-debit');
331 include_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
333 $dashboardlines[$board->element .
'_credit_transfer'] = $board->load_board($user,
'credit-transfer');
339 include_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
341 $dashboardlines[$board->element.
'_shift'] = $board->load_board($user,
'shift');
342 $dashboardlines[$board->element.
'_expired'] = $board->load_board($user,
'expired');
347 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
349 $dashboardlines[$board->element.
'_toapprove'] = $board->load_board($user,
'toapprove');
354 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
356 $dashboardlines[$board->element.
'_topay'] = $board->load_board($user,
'topay');
361 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
363 $dashboardlines[$board->element] = $board->load_board($user);
367 include_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
368 $board =
new Mo($db);
369 $dashboardlines[$board->element] = $board->load_board($user);
373 $parameters = array();
375 $reshook = $hookmanager->executeHooks(
376 'addOpenElementsDashboardLine',
382 $dashboardlines = array_merge($dashboardlines, $hookmanager->resArray);
385 $dashboardgroup = array(
388 'groupName' =>
'Agenda',
389 'stats' => array(
'action'),
393 'groupName' =>
'Projects',
394 'globalStatsKey' =>
'projects',
395 'stats' => array(
'project',
'project_task'),
399 'groupName' =>
'Proposals',
400 'globalStatsKey' =>
'proposals',
402 array(
'propal_opened',
'propal_signed'),
406 'groupName' =>
'Orders',
407 'globalStatsKey' =>
'orders',
409 array(
'commande_toship',
'commande_tobill',
'commande_shippedtobill'),
413 'groupName' =>
'Invoices',
414 'globalStatsKey' =>
'invoices',
418 'supplier_proposal' =>
420 'lang' =>
'supplier_proposal',
421 'groupName' =>
'SupplierProposals',
422 'globalStatsKey' =>
'askprice',
424 array(
'supplier_proposal_opened',
'supplier_proposal_signed'),
428 'groupName' =>
'SuppliersOrders',
429 'globalStatsKey' =>
'supplier_orders',
431 array(
'order_supplier_opened',
'order_supplier_awaiting'),
433 'invoice_supplier' =>
435 'groupName' =>
'BillsSuppliers',
436 'globalStatsKey' =>
'supplier_invoices',
438 array(
'invoice_supplier'),
442 'groupName' =>
'Contracts',
443 'globalStatsKey' =>
'Contracts',
445 array(
'contrat_inactive',
'contrat_active'),
449 'groupName' =>
'Tickets',
450 'globalStatsKey' =>
'ticket',
452 array(
'ticket_opened'),
456 'groupName' =>
'BankAccount',
458 array(
'bank_account',
'chequereceipt',
'widthdraw_direct_debit',
'widthdraw_credit_transfer'),
462 'groupName' =>
'Members',
463 'globalStatsKey' =>
'members',
465 array(
'member_shift',
'member_expired'),
469 'groupName' =>
'ExpenseReport',
470 'globalStatsKey' =>
'expensereports',
472 array(
'expensereport_toapprove',
'expensereport_topay'),
476 'groupName' =>
'Holidays',
477 'globalStatsKey' =>
'holidays',
484 'globalStatsKey' =>
'mrp',
491 'dashboardgroup' => $dashboardgroup
493 $reshook = $hookmanager->executeHooks(
'addOpenElementsDashboardGroup', $parameters, $object, $action);
495 $dashboardgroup = array_merge($dashboardgroup, $hookmanager->resArray);
500 $totallate = $totaltodo = 0;
504 $valid_dashboardlines = array();
505 foreach ($dashboardlines as $workboardid => $tmp) {
507 $tmp->id = (string) $workboardid;
508 $valid_dashboardlines[$workboardid] = $tmp;
512 foreach ($valid_dashboardlines as $board) {
513 if (is_numeric($board->nbtodo) && is_numeric($board->nbtodolate) && $board->nbtodolate > 0) {
514 $totaltodo += $board->nbtodo;
515 $totallate += $board->nbtodolate;
519 $openedDashBoardSize =
'info-box-sm';
520 foreach ($dashboardgroup as $dashbordelement) {
521 if (is_array($dashbordelement[
'stats']) && count($dashbordelement[
'stats']) > 2) {
522 $openedDashBoardSize =
'';
527 $totalLateNumber = $totallate;
528 $totallatePercentage = ((!empty($totaltodo)) ? round($totallate / $totaltodo * 100, 2) : 0);
530 $totallate = $totallatePercentage;
535 $boxwork .=
'<div class="box">';
536 $boxwork .=
'<table summary="'.dol_escape_htmltag($langs->trans(
"WorkingBoard")).
'" class="noborder boxtable boxtablenobottom boxworkingboard centpercent">'.
"\n";
537 $boxwork .=
'<tr class="liste_titre">';
538 $boxwork .=
'<th class="liste_titre"><div class="inline-block valignmiddle">'.$langs->trans(
"DolibarrWorkBoard").
'</div>';
540 if ($totallate > 0) {
541 $text = $langs->transnoentitiesnoconv(
"WarningYouHaveAtLeastOneTaskLate").
' ('.$langs->transnoentitiesnoconv(
543 $totallate.(getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE') ?
'%' :
'')
546 $text = $langs->transnoentitiesnoconv(
"NoItemLate");
548 $text .=
'. '.$langs->transnoentitiesnoconv(
"LateDesc");
550 $options =
'height="24px" style="float: right"';
551 $boxwork .=
showWeather($totallate, $text, $options,
'inline-block valignmiddle');
554 $boxwork .=
'</tr>'.
"\n";
557 $nbworkboardempty = 0;
558 $isIntopOpenedDashBoard = array();
559 $openedDashBoard =
'';
560 if (!empty($valid_dashboardlines)) {
561 $boxwork .=
'<tr class="nobottom nohover"><td class="tdboxstats nohover flexcontainer centpercent"><div style="display: flex: flex-wrap: wrap">';
562 foreach ($dashboardgroup as $groupKey => $groupElement) {
567 foreach ($groupElement[
'stats'] as $infoKey) {
568 if (!empty($valid_dashboardlines[$infoKey])) {
569 $boards[] = $valid_dashboardlines[$infoKey];
570 $isIntopOpenedDashBoard[] = $infoKey;
576 if (!empty($boards)) {
577 if (!empty($groupElement[
'lang'])) {
578 $langs->load($groupElement[
'lang']);
581 $groupName = $langs->trans($groupElement[
'groupName']);
582 $groupKeyLowerCase = strtolower($groupKey);
585 $globalStatsKey =
false;
586 if (!empty($groupElement[
'globalStatsKey']) && empty($groupElement[
'globalStats'])) {
587 $globalStatsKey = $groupElement[
'globalStatsKey'];
588 $groupElement[
'globalStats'] = array();
593 'action' =>
dol_buildpath(
'/comm/action/card.php?action=create', 1),
594 'project' =>
dol_buildpath(
'/projet/card.php?action=create', 1),
595 'propal' =>
dol_buildpath(
'/comm/propal/card.php?action=create', 1),
596 'commande' =>
dol_buildpath(
'/commande/card.php?action=create', 1),
597 'facture' =>
dol_buildpath(
'/compta/facture/card.php?action=create', 1),
598 'supplier_proposal' =>
dol_buildpath(
'/supplier_proposal/card.php?action=create', 1),
599 'order_supplier' =>
dol_buildpath(
'/fourn/commande/card.php?action=create', 1),
600 'invoice_supplier' =>
dol_buildpath(
'/fourn/facture/card.php?action=create', 1),
601 'contrat' =>
dol_buildpath(
'/contrat/card.php?action=create', 1),
602 'ticket' =>
dol_buildpath(
'/ticket/card.php?action=create', 1),
603 'bank_account' =>
dol_buildpath(
'/compta/bank/card.php?action=create', 1),
604 'member' =>
dol_buildpath(
'/adherents/card.php?action=create', 1),
605 'expensereport' =>
dol_buildpath(
'/expensereport/card.php?action=create', 1),
606 'holiday' =>
dol_buildpath(
'/holiday/card.php?action=create', 1),
607 'cubes' =>
dol_buildpath(
'/mrp/mo_card.php?action=create', 1),
610 $infoboxMoreCss =
'';
611 if (array_key_exists($groupKey, $arrayLinks)) {
612 $infoboxMoreCss =
'infobox-haslink';
615 $openedDashBoard .=
'<div class="box-flex-item"><div class="box-flex-item-with-margin">'.
"\n";
616 $openedDashBoard .=
' <div class="info-box '.$openedDashBoardSize.
' '.$infoboxMoreCss.
'">'.
"\n";
617 $openedDashBoard .=
' <span class="info-box-icon bg-infobox-'.$groupKeyLowerCase.
'">'.
"\n";
618 $openedDashBoard .=
' <i class="fa fa-dol-'.$groupKeyLowerCase.
'"></i>'.
"\n";
621 if (!empty($groupElement[
'globalStats'])) {
622 $openedDashBoard .=
'<span class="info-box-icon-text" title="'.$groupElement[
'globalStats'][
'text'].
'">'.$groupElement[
'globalStats'][
'nbTotal'].
'</span>';
625 if (array_key_exists($groupKey, $arrayLinks)) {
626 $openedDashBoard .=
' <a href="'.$arrayLinks[$groupKey].
'" class="info-box-createlink"><span class="fas fa-plus-circle"></span></a>'.
"\n";
629 $openedDashBoard .=
'</span>'.
"\n";
630 $openedDashBoard .=
'<div class="info-box-content">'.
"\n";
632 $openedDashBoard .=
'<div class="info-box-title" title="'.dolPrintHTMLForAttribute($groupName).
'">'.$groupName.
'</div>'.
"\n";
633 $openedDashBoard .=
'<div class="info-box-lines">'.
"\n";
635 foreach ($boards as $board) {
636 $openedDashBoard .=
'<div class="info-box-line spanoverflow nowrap">';
638 if (!empty($board->labelShort)) {
639 $infoName =
'<div class="marginrightonly inline-block valignmiddle info-box-line-text" title="'.$board->label.
'">'.$board->labelShort.
'</div>';
641 $infoName =
'<div class="marginrightonly inline-block valignmiddle info-box-line-text">'.$board->label.
'</div>';
644 $textLateTitle = $langs->trans(
"NActionsLate", $board->nbtodolate);
647 if ($board->id ==
'mo') {
648 $dateOrder = $langs->trans(
"DateToday") .
" > " . $langs->trans(
"DateReference");
650 $dateOrder = $langs->trans(
"DateReference") .
" > " . $langs->trans(
"DateToday");
652 $warningDelay = ceil(empty($board->warning_delay) ? 0 : $board->warning_delay);
654 if ($warningDelay >= 0) {
658 $textLateTitle .=
" (" . $langs->trans(
"Late") .
" = $dateOrder $sign$warningDelay " . $langs->trans(
"days") .
")";
660 if ($board->id ==
'bank_account') {
661 $textLateTitle .=
'<br><span class="opacitymedium">'.$langs->trans(
"IfYouDontReconcileDisableProperty", $langs->transnoentitiesnoconv(
"Conciliable")).
'</span>';
665 if ($board->nbtodolate > 0) {
666 $textLate .=
'<span title="'.dol_escape_htmltag($textLateTitle).
'" class="classfortooltip badge badge-warning">';
667 $textLate .=
'<i class="fa fa-exclamation-triangle hideonsmartphone"></i> '.$board->nbtodolate;
668 $textLate .=
'</span>';
672 if ($board->nbtodo > 0) {
673 $nbtodClass =
'badge badge-info';
675 $nbtodClass =
'opacitymedium';
679 $labeltoshow = $board->label.
' ('.$board->nbtodo.
')';
680 if ($board->total > 0) {
681 $labeltoshow .=
' - '.price($board->total, 0, $langs, 1, -1, -1,
getDolCurrency());
683 $openedDashBoard .=
'<a href="'.$board->url.
'" class="info-box-text info-box-text-a">';
684 $openedDashBoard .= $infoName;
685 $openedDashBoard .=
'</a>';
686 $openedDashBoard .=
'<div class="inline-block nowraponall">';
687 $openedDashBoard .=
'<a href="'.$board->url.
'" class="info-box-text info-box-text-a">';
688 $openedDashBoard .=
'<span class="classfortooltip'.($nbtodClass ?
' '.$nbtodClass :
'').
'" title="'.$labeltoshow.
'">';
689 $openedDashBoard .= $board->nbtodo;
691 $openedDashBoard .=
' : '.price($board->total, 0, $langs, 1, -1, -1,
getDolCurrency());
693 $openedDashBoard .=
'</span>';
694 $openedDashBoard .=
'</a>';
697 if ($board->url_late) {
698 $openedDashBoard .=
'</div>';
699 $openedDashBoard .=
' <div class="inline-block"><a href="'.$board->url_late.
'" class="info-box-text info-box-text-a paddingleft">';
701 $openedDashBoard .=
' <span class="info-box-text info-box-text-a displaycontents">';
703 $openedDashBoard .= $textLate;
704 if ($board->url_late) {
705 $openedDashBoard .=
'</a>';
707 $openedDashBoard .=
'</span>';
710 $openedDashBoard .=
'</div>'.
"\n";
712 $openedDashBoard .=
'</div>'.
"\n";
717 $openedDashBoard .=
' </div><!-- /.info-box-lines --></div><!-- /.info-box-content -->'.
"\n";
718 $openedDashBoard .=
' </div><!-- /.info-box -->'.
"\n";
719 $openedDashBoard .=
'</div><!-- /.box-flex-item-with-margin -->'.
"\n";
720 $openedDashBoard .=
'</div><!-- /.box-flex-item -->'.
"\n";
721 $openedDashBoard .=
"\n";
725 if ($showweather && !empty($isIntopOpenedDashBoard)) {
726 $appendClass = (
getDolGlobalInt(
'MAIN_DISABLE_METEO') == 2 ?
' hideonsmartphone' :
'');
730 if ($totallate > 0) {
731 $text = $langs->transnoentitiesnoconv(
"WarningYouHaveAtLeastOneTaskLate").
' ('.$langs->transnoentitiesnoconv(
733 $totallate.(getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE') ?
'%' :
'')
736 $text = $langs->transnoentitiesnoconv(
"NoItemLate");
738 $text .=
'. '.$langs->transnoentitiesnoconv(
"LateDesc");
740 $weatherDashBoard =
'<div class="box-flex-item '.$appendClass.
'"><div class="box-flex-item-with-margin">'.
"\n";
741 $weatherDashBoard .=
' <div class="info-box '.$openedDashBoardSize.
' info-box-weather info-box-weather-level'.$weather->level.
'">'.
"\n";
742 $weatherDashBoard .=
' <span class="info-box-icon">';
743 $weatherDashBoard .=
img_weather(
'', $weather->level,
'', 0,
'valignmiddle width50');
744 $weatherDashBoard .=
' </span>'.
"\n";
745 $weatherDashBoard .=
' <div class="info-box-content">'.
"\n";
746 $weatherDashBoard .=
' <div class="info-box-title">'.$langs->trans(
'GlobalOpenedElemView').
'</div>'.
"\n";
748 if ($totallatePercentage > 0 &&
getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE')) {
749 $weatherDashBoard .=
' <span class="info-box-number">'.$langs->transnoentitiesnoconv(
751 price($totallatePercentage).
'%'
753 $weatherDashBoard .=
' <span class="progress-description">'.$langs->trans(
758 $weatherDashBoard .=
' <span class="info-box-number">'.$langs->transnoentitiesnoconv(
760 (
string) $totalLateNumber
762 if ($totallatePercentage > 0) {
763 $weatherDashBoard .=
' <span class="progress-description">'.$langs->trans(
765 price($totallatePercentage).
'%'
770 $weatherDashBoard .=
' </div><!-- /.info-box-content -->'.
"\n";
771 $weatherDashBoard .=
' </div><!-- /.info-box -->'.
"\n";
772 $weatherDashBoard .=
'</div><!-- /.box-flex-item-with-margin -->'.
"\n";
773 $weatherDashBoard .=
'</div><!-- /.box-flex-item -->'.
"\n";
774 $weatherDashBoard .=
"\n";
776 $openedDashBoard = $weatherDashBoard.$openedDashBoard;
779 if (!empty($isIntopOpenedDashBoard)) {
780 for ($i = 1; $i <= 10; $i++) {
781 $openedDashBoard .=
'<div class="box-flex-item filler"></div>';
785 $nbworkboardcount = 0;
786 foreach ($valid_dashboardlines as $infoKey => $board) {
787 if (in_array($infoKey, $isIntopOpenedDashBoard)) {
792 if (empty($board->nbtodo)) {
798 $textlate = $langs->trans(
"NActionsLate", $board->nbtodolate);
799 $textlate .=
' ('.$langs->trans(
"Late").
' = '.$langs->trans(
"DateReference").
' > '.$langs->trans(
"DateToday").
' '.(ceil($board->warning_delay) >= 0 ?
'+' :
'').ceil($board->warning_delay).
' '.$langs->trans(
"days").
')';
802 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats130 boxstatsborder">';
803 $boxwork .=
'<div class="boxstatscontent">';
804 $boxwork .=
'<span class="boxstatstext" title="'.dol_escape_htmltag($board->label).
'">'.$board->img.
' <span>'.$board->label.
'</span></span><br>';
805 $boxwork .=
'<a class="valignmiddle dashboardlineindicator" href="'.$board->url.
'"><span class="dashboardlineindicator'.(($board->nbtodo == 0) ?
' dashboardlineok' :
'').
'">'.$board->nbtodo.
'</span></a>';
807 $boxwork .=
' / <a class="valignmiddle dashboardlineindicator" href="'.$board->url.
'"><span class="dashboardlineindicator'.(($board->nbtodo == 0) ?
' dashboardlineok' :
'').
'">'.
price($board->total).
'</span></a>';
809 $boxwork .=
'</div>';
810 if ($board->nbtodolate > 0) {
811 $boxwork .=
'<div class="dashboardlinelatecoin nowrap">';
812 $boxwork .=
'<a title="'.dol_escape_htmltag($textlate).
'" class="valignmiddle dashboardlineindicatorlate'.($board->nbtodolate > 0 ?
' dashboardlineko' :
' dashboardlineok').
'" href="'.((!$board->url_late) ? $board->url : $board->url_late).
'">';
814 $boxwork .= img_picto(
817 'class="inline-block hideonsmartphone valigntextbottom"'
819 $boxwork .=
'<span class="dashboardlineindicatorlate'.($board->nbtodolate > 0 ?
' dashboardlineko' :
' dashboardlineok').
'">';
820 $boxwork .= $board->nbtodolate;
821 $boxwork .=
'</span>';
823 $boxwork .=
'</div>';
825 $boxwork .=
'</div></div>';
829 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
830 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
831 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
832 $boxwork .=
'<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
834 $boxwork .=
'</div>';
835 $boxwork .=
'</td></tr>';
837 $boxwork .=
'<tr class="nohover">';
838 $boxwork .=
'<td class="nohover valignmiddle opacitymedium">';
839 $boxwork .= $langs->trans(
"NoOpenedElementToProcess");
844 $boxwork .=
'</td></tr>';
846 $boxwork .=
'</table>';
847 $boxwork .=
'</div>';
849 if (!empty($isIntopOpenedDashBoard)) {
850 print
'<div class="fichecenter">';
851 print
'<div class="opened-dash-board-wrap"><div class="box-flex-container">'.$openedDashBoard.
'</div></div>';
857print
'<div class="clearboth"></div>';
859print
'<div class="fichecenter fichecenterbis">';
866$boxlist =
'<div class="twocolumns">';
868$boxlist .=
'<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">';
869if (!empty($nbworkboardcount)) {
870 $boxlist .= $boxwork;
873$boxlist .= $resultboxes[
'boxlista'];
877$boxlist .=
'<div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">';
879$boxlist .= $resultboxes[
'boxlistb'];
914 return img_weather($text, $weather->picto, $options, 0, $morecss);
927 $weather->picto =
'';
932 $used_conf = (
getDolGlobalString(
'MAIN_USE_METEO_WITH_PERCENTAGE') ?
'MAIN_METEO_PERCENTAGE_LEVEL' :
'MAIN_METEO_LEVEL');
937 $level1 = $offset + $factor;
939 $level2 = $offset + 2 * $factor;
941 $level3 = $offset + 3 * $factor;
944 if ($totallate <= $level0) {
945 $weather->picto =
'weather-clear.png';
947 } elseif ($totallate <= $level1) {
948 $weather->picto =
'weather-few-clouds.png';
950 } elseif ($totallate <= $level2) {
951 $weather->picto =
'weather-clouds.png';
953 } elseif ($totallate <= $level3) {
954 $weather->picto =
'weather-many-clouds.png';
957 $weather->picto =
'weather-storm.png';
if(! $sortfield) if(! $sortorder) $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.
Class to manage projects.
Class to manage proposals.
Class to manage cheque delivery receipts.
Class to manage price ask supplier.
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.
dolChmod($filepath, $newmask='')
Change mod of a file.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
getDolCurrency()
Return the main currency ('EUR', 'USD', ...)
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...
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
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...
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.
isModEnabled($module)
Is Dolibarr module enabled.
img_weather($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $morecss='')
Show weather picto.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='', $cssfordropdown='info_admin')
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'
Class to generate the form for creating a new ticket.