diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index dc894663e4c..12825d9a780 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2315,6 +2315,7 @@ class Adherent extends CommonObject $response = new WorkboardResponse(); $response->warning_delay=$conf->adherent->subscription->warning_delay/60/60/24; $response->label=$langs->trans("MembersWithSubscriptionToReceive"); + $response->labelShort=$langs->trans("MembersWithSubscriptionToReceiveShort"); $response->url=DOL_URL_ROOT.'/adherents/list.php?mainmenu=members&statut=1&filter=outofdate'; $response->img=img_object('', "user"); diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 6e4e3fb941b..79ae09c1678 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1103,6 +1103,7 @@ class ActionComm extends CommonObject $response = new WorkboardResponse(); $response->warning_delay = $conf->agenda->warning_delay/60/60/24; $response->label = $langs->trans("ActionsToDo"); + $response->labelShort = $langs->trans("ActionsToDoShort"); $response->url = DOL_URL_ROOT.'/comm/action/list.php?actioncode=0&status=todo&mainmenu=agenda'; if ($user->rights->agenda->allactions->read) $response->url.='&filtert=-1'; $response->img = img_object('', "action", 'class="inline-block valigntextmiddle"'); diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index a4ff5cec29a..f1a6d4eb466 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -3268,21 +3268,24 @@ class Propal extends CommonObject $delay_warning = 0; $statut = 0; - $label = ''; + $label = $labelShort = ''; if ($mode == 'opened') { $delay_warning=$conf->propal->cloture->warning_delay; $statut = self::STATUS_VALIDATED; $label = $langs->trans("PropalsToClose"); + $labelShort = $langs->trans("ToClose"); } if ($mode == 'signed') { $delay_warning=$conf->propal->facturation->warning_delay; $statut = self::STATUS_SIGNED; $label = $langs->trans("PropalsToBill"); // We set here bill but may be billed or ordered + $labelShort = $langs->trans("ToBill"); } $response = new WorkboardResponse(); $response->warning_delay = $delay_warning/60/60/24; $response->label = $label; + $response->labelShort = $labelShort; $response->url = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut.'&mainmenu=commercial&leftmenu=propals'; $response->url_late = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut.'&mainmenu=commercial&leftmenu=propals&sortfield=p.datep&sortorder=asc'; $response->img = img_object('', "propal"); diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 01f41b7cdbc..f9662a562f2 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3412,6 +3412,7 @@ class Commande extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->client->warning_delay/60/60/24; $response->label=$langs->trans("OrdersToProcess"); + $response->labelShort = $langs->trans("ToProcess"); $response->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3&mainmenu=commercial&leftmenu=orders'; $response->img=img_object('', "order"); diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 1b9cc3db566..33de9d47e18 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3924,6 +3924,7 @@ class Facture extends CommonInvoice $response = new WorkboardResponse(); $response->warning_delay=$conf->facture->client->warning_delay/60/60/24; $response->label=$langs->trans("CustomerBillsUnpaid"); + $response->labelShort=$langs->trans("Unpaid"); $response->url=DOL_URL_ROOT.'/compta/facture/list.php?search_status=1&mainmenu=billing&leftmenu=customers_bills'; $response->img=img_object('', "bill"); diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index e6e9b7f2e4d..0a2c59ece2c 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -2186,23 +2186,27 @@ class Contrat extends CommonObject if ($mode == 'inactive') { $warning_delay = $conf->contrat->services->inactifs->warning_delay; $label = $langs->trans("BoardNotActivatedServices"); + $labelShort = $langs->trans("BoardNotActivatedServicesShort"); $url = DOL_URL_ROOT.'/contrat/services_list.php?mainmenu=commercial&leftmenu=contracts&mode=0&sortfield=cd.date_fin_validite&sortorder=asc'; } elseif ($mode == 'expired') { $warning_delay = $conf->contrat->services->expires->warning_delay; $url = DOL_URL_ROOT.'/contrat/services_list.php?mainmenu=commercial&leftmenu=contracts&mode=4&filter=expired&sortfield=cd.date_fin_validite&sortorder=asc'; $label = $langs->trans("BoardExpiredServices"); + $labelShort = $langs->trans("BoardExpiredServicesShort"); } else { $warning_delay = $conf->contrat->services->expires->warning_delay; $url = DOL_URL_ROOT.'/contrat/services_list.php?mainmenu=commercial&leftmenu=contracts&mode=4&sortfield=cd.date_fin_validite&sortorder=asc'; //$url.= '&op2day='.$arraydatetouse['mday'].'&op2month='.$arraydatetouse['mon'].'&op2year='.$arraydatetouse['year']; //if ($warning_delay >= 0) $url.='&filter=expired'; $label = $langs->trans("BoardRunningServices"); + $labelShort = $langs->trans("BoardRunningServicesShort"); } $response = new WorkboardResponse(); $response->warning_delay = $warning_delay/60/60/24; $response->label = $label; + $response->labelShort = $labelShort; $response->url = $url; $response->img = img_object('', "contract"); diff --git a/htdocs/core/class/workboardresponse.class.php b/htdocs/core/class/workboardresponse.class.php index 35449693599..3af5feaecbc 100644 --- a/htdocs/core/class/workboardresponse.class.php +++ b/htdocs/core/class/workboardresponse.class.php @@ -37,6 +37,18 @@ class WorkboardResponse */ public $label; + /** + * Short Label of the warning + * @var string + */ + public $labelShort; + + /** + * infoKey of the warning + * @var string + */ + public $infoKey = 'todo'; + /** * URL to list to do items * @var string diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index ae63a132965..9b1a62ed402 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2333,12 +2333,14 @@ class ExpenseReport extends CommonObject { $response->warning_delay=$conf->expensereport->approve->warning_delay/60/60/24; $response->label=$langs->trans("ExpenseReportsToApprove"); + $response->labelShort=$langs->trans("ToApprove"); $response->url=DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm&statut=2'; } else { $response->warning_delay=$conf->expensereport->payment->warning_delay/60/60/24; $response->label=$langs->trans("ExpenseReportsToPay"); + $response->labelShort=$langs->trans("ToPay"); $response->url=DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm&statut=5'; } $response->img=img_object('', "trip"); diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 9d5bfce0189..a77206d5f42 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -2835,6 +2835,7 @@ class CommandeFournisseur extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SuppliersOrdersToProcess"); + $response->labelShort=$langs->trans("ToProcess"); $response->url=DOL_URL_ROOT.'/fourn/commande/list.php?statut=1,2,3&mainmenu=commercial&leftmenu=orders_suppliers'; $response->img=img_object('', "order"); diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index fd1b98208aa..b1c623bb0f0 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -2203,6 +2203,7 @@ class FactureFournisseur extends CommonInvoice $response = new WorkboardResponse(); $response->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SupplierBillsToPay"); + $response->labelShort=$langs->trans("ToPay"); $response->url=DOL_URL_ROOT.'/fourn/facture/list.php?search_status=1&mainmenu=billing&leftmenu=suppliers_bills'; $response->img=img_object($langs->trans("Bills"), "bill"); diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 0245073a060..66c212ef4c7 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -2228,6 +2228,7 @@ class Holiday extends CommonObject $response = new WorkboardResponse(); $response->warning_delay=$conf->holiday->approve->warning_delay/60/60/24; $response->label=$langs->trans("HolidaysToApprove"); + $response->labelShort=$langs->trans("ToApprove"); $response->url=DOL_URL_ROOT.'/holiday/list.php?search_statut=2&mainmenu=hrm&leftmenu=holiday'; $response->img=img_object('', "holiday"); diff --git a/htdocs/index.php b/htdocs/index.php index d6ce8c90067..b7eebe24063 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -100,7 +100,7 @@ if (! empty($conf->global->MAIN_MOTD)) } -print '
'; + /* @@ -112,7 +112,7 @@ $boxstat=''; // Load translation files required by page $langs->loadLangs(array('commercial', 'bills', 'orders', 'contracts')); -if (empty($user->societe_id)) +if (empty($user->societe_id) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTATS)) { $boxstat.='
'; $boxstat.=''; @@ -313,6 +313,7 @@ if (empty($user->societe_id)) // Loop and displays each line of table + $boardloaded=array(); foreach ($keys as $key=>$val) { if ($conditions[$key]) @@ -359,9 +360,8 @@ if (empty($user->societe_id)) $boxstat.='
'; $boxstat.='
'; } -//print $boxstat; -print '
'; + /* @@ -380,8 +380,7 @@ if (! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->read) { include_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; $board=new ActionComm($db); - - $dashboardlines[] = $board->load_board($user); + $dashboardlines[$board->element] = $board->load_board($user); } // Number of project opened @@ -389,7 +388,7 @@ if (! empty($conf->projet->enabled) && $user->rights->projet->lire) { include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; $board=new Project($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines[$board->element] = $board->load_board($user); } // Number of tasks to do (late) @@ -397,7 +396,7 @@ if (! empty($conf->projet->enabled) && empty($conf->global->PROJECT_HIDE_TASKS) { include_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php'; $board=new Task($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines[$board->element] = $board->load_board($user); } // Number of commercial proposals opened (expired) @@ -405,9 +404,9 @@ if (! empty($conf->propal->enabled) && $user->rights->propale->lire) { include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; $board=new Propal($db); - $dashboardlines[] = $board->load_board($user, "opened"); + $dashboardlines[$board->element.'_opened'] = $board->load_board($user, "opened"); // Number of commercial proposals CLOSED signed (billed) - $dashboardlines[] = $board->load_board($user, "signed"); + $dashboardlines[$board->element.'_signed'] = $board->load_board($user, "signed"); } // Number of commercial proposals opened (expired) @@ -415,9 +414,9 @@ if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_propos { include_once DOL_DOCUMENT_ROOT.'/supplier_proposal/class/supplier_proposal.class.php'; $board=new SupplierProposal($db); - $dashboardlines[] = $board->load_board($user, "opened"); + $dashboardlines[$board->element.'_opened'] = $board->load_board($user, "opened"); // Number of commercial proposals CLOSED signed (billed) - $dashboardlines[] = $board->load_board($user, "signed"); + $dashboardlines[$board->element.'_signed'] = $board->load_board($user, "signed"); } // Number of customer orders a deal @@ -425,7 +424,7 @@ if (! empty($conf->commande->enabled) && $user->rights->commande->lire) { include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; $board=new Commande($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines[$board->element] = $board->load_board($user); } // Number of suppliers orders a deal @@ -433,7 +432,7 @@ if (! empty($conf->supplier_order->enabled) && $user->rights->fournisseur->comma { include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; $board=new CommandeFournisseur($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines[$board->element] = $board->load_board($user); } // Number of services enabled (delayed) @@ -441,16 +440,16 @@ if (! empty($conf->contrat->enabled) && $user->rights->contrat->lire) { include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; $board=new Contrat($db); - $dashboardlines[] = $board->load_board($user, "inactive"); + $dashboardlines[$board->element.'_inactive'] = $board->load_board($user, "inactive"); // Number of active services (expired) - $dashboardlines[] = $board->load_board($user, "active"); + $dashboardlines[$board->element.'_active'] = $board->load_board($user, "active"); } // Number of invoices customers (has paid) if (! empty($conf->facture->enabled) && $user->rights->facture->lire) { include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $board=new Facture($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines[$board->element] = $board->load_board($user); } // Number of supplier invoices (has paid) @@ -458,7 +457,7 @@ if (! empty($conf->supplier_invoice->enabled) && ! empty($user->rights->fourniss { include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; $board=new FactureFournisseur($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines[$board->element] = $board->load_board($user); } // Number of transactions to conciliate @@ -469,7 +468,7 @@ if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->s $nb = $board::countAccountToReconcile(); // Get nb of account to reconciliate if ($nb > 0) { - $dashboardlines[] = $board->load_board($user); + $dashboardlines[$board->element] = $board->load_board($user); } } @@ -478,7 +477,7 @@ if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->s { include_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php'; $board=new RemiseCheque($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines['RemiseCheque'] = $board->load_board($user); } // Number of foundation members @@ -486,7 +485,7 @@ if (! empty($conf->adherent->enabled) && $user->rights->adherent->lire && ! $use { include_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; $board=new Adherent($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines['Adherent'] = $board->load_board($user); } // Number of expense reports to approve @@ -494,7 +493,7 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->appr { include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; $board=new ExpenseReport($db); - $dashboardlines[] = $board->load_board($user, 'toapprove'); + $dashboardlines['ExpenseReport'] = $board->load_board($user, 'toapprove'); } // Number of expense reports to pay @@ -502,7 +501,7 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->to_p { include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; $board=new ExpenseReport($db); - $dashboardlines[] = $board->load_board($user, 'topay'); + $dashboardlines['ExpenseReport'] = $board->load_board($user, 'topay'); } // Number of holidays to approve @@ -510,7 +509,7 @@ if (! empty($conf->holiday->enabled) && $user->rights->holiday->approve) { include_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; $board=new Holiday($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines['Holiday'] = $board->load_board($user); } $object=new stdClass(); @@ -521,28 +520,134 @@ if ($reshook == 0) { $dashboardlines = array_merge($dashboardlines, $hookmanager->resArray); } +/* grouping dashboard stats */ +$dashboardgroup = array ( + 'action' => + array ( + 'groupName' => 'Agenda', + 'stats' => array ('action'), + ), + 'project' => + array ( + 'groupName' => 'Projects', + 'stats' => array ('project','project_task'), + ), + 'propal' => + array ( + 'groupName' => 'Proposals', + 'stats' => + array ('propal_opened','propal_signed'), + ), + 'supplier_proposal' => + array ( + 'groupName' => 'SupplierProposals', + 'stats' => + array ('supplier_proposal_opened','supplier_proposal_signed'), + ), + 'commande' => + array ( + 'groupName' => 'Orders', + 'stats' => + array ('commande'), + ), + 'order_supplier' => + array ( + 'groupName' => 'SuppliersOrders', + 'stats' => + array ('order_supplier'), + ), + 'contrat' => + array ( + 'groupName' => 'Contracts', + 'stats' => + array ('contrat_inactive','contrat_active'), + ), + 'facture' => + array ( + 'groupName' => 'Invoices', + 'stats' => + array ('facture'), + ), + 'invoice_supplier' => + array ( + 'groupName' => 'BillsSuppliers', + 'stats' => + array ('invoice_supplier'), + ), + 'bank_account' => + array ( + 'groupName' => 'BankAccount', + 'stats' => + array ('bank_account','RemiseCheque'), + ), + /*'RemiseCheque' => + array ( + 'groupName' => 'BankChecks', + 'stats' => + array ('RemiseCheque'), + ),*/ + 'Adherent' => + array ( + 'groupName' => 'Members', + 'stats' => + array ('Adherent'), + ), + 'ExpenseReport' => + array ( + 'groupName' => 'ExpenseReport', + 'stats' => + array ('ExpenseReport'), + ), + 'Holiday' => + array ( + 'groupName' => 'Holidays', + 'stats' => + array ('Holiday'), + ), +); + +$object=new stdClass(); +$parameters=array( + 'dashboardgroup' => $dashboardgroup +); +$reshook=$hookmanager->executeHooks('addOpenElementsDashboardGroup', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook == 0) { + $dashboardgroup = array_merge($dashboardgroup, $hookmanager->resArray); +} + + // Calculate total nb of late $totallate=$totaltodo=0; //Remove any invalid response //load_board can return an integer if failed or WorkboardResponse if OK $valid_dashboardlines=array(); -foreach($dashboardlines as $tmp) +foreach($dashboardlines as $infoKey => $tmp) { - if ($tmp instanceof WorkboardResponse) $valid_dashboardlines[] = $tmp; + if ($tmp instanceof WorkboardResponse) $valid_dashboardlines[$infoKey] = $tmp; } // We calculate $totallate. Must be defined before start of next loop because it is show in first fetch on next loop foreach($valid_dashboardlines as $board) { if ($board->nbtodolate > 0) { - if(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) $totaltodo += $board->nbtodo; + $totaltodo += $board->nbtodo; $totallate += $board->nbtodolate; } } -//var_dump($totallate, $totaltodo); -if(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) && !empty($totaltodo)) $totallate = round($totallate / $totaltodo * 100, 2); -//var_dump($totallate); + +$openedDashBoardSize = 'info-box-sm'; // use sm by default +foreach ($dashboardgroup as $dashbordelement){ + if(is_array($dashbordelement['stats']) && count($dashbordelement['stats'])>2){ + $openedDashBoardSize = ''; // use default info box size : big + break; + } +} + +$totalLateNumber = $totallate; +$totallatePercentage = !empty($totaltodo) ? round($totallate / $totaltodo * 100, 2) : 0; +if(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) $totallate = $totallatePercentage; + $boxwork=''; $boxwork.='
'; $boxwork.=''."\n"; @@ -577,23 +682,144 @@ $boxwork.=''."\n"; // Show dashboard $nbworkboardempty=0; -if (! empty($valid_dashboardlines)) +$isIntopOpenedDashBoard = array(); +if (!empty($valid_dashboardlines)) { + $openedDashBoard = ''; + $boxwork.=''; $boxwork.='
'; - foreach($valid_dashboardlines as $board) + foreach($dashboardgroup as $groupKey => $groupElement) { + $boards = array(); + + if(!empty($conf->global->MAIN_DISPLAY_NEW_OPENED_DASH_BOARD) || !empty($conf->global->MAIN_FEATURES_LEVEL)) + { + foreach ($groupElement['stats'] as $infoKey) + { + if(!empty($valid_dashboardlines[$infoKey])) + { + $boards[] = $valid_dashboardlines[$infoKey]; + $isIntopOpenedDashBoard[]=$infoKey; + } + } + } + + if(!empty($boards)) + { + $groupName = $langs->trans($groupElement['groupName']); + $groupKeyLowerCase = strtolower($groupKey); + + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= ' '."\n"; + $openedDashBoard.= '
'."\n"; + + $openedDashBoard .= ' '.$groupName.'' . "\n"; + + foreach($boards as $board) { + if(!empty($board->labelShort)){ + $infoName = ''.$board->labelShort.''; + } + else{ + $infoName = $board->label ; + } + + $textLateTitle = $langs->trans("NActionsLate", $board->nbtodolate); + $textLateTitle.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')'; + + $textLate = ''; + if($board->nbtodolate>0) + { + $textLate .= ' '; + $textLate .= ' '.$board->nbtodolate; + $textLate .= ''; + } + + $nbtodClass = ''; + if($board->nbtodo>0){ + $nbtodClass = 'badge badge-info'; + } + + $openedDashBoard .= ' '.$infoName.' : '.$board->nbtodo.''.$textLate.'' . "\n"; + + if ($board->total > 0 && ! empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)){ + $openedDashBoard .= ''.$langs->trans('Total').' : '.price($board->total) .''; + } + } + + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; + $openedDashBoard.="\n"; + } + } + + if ($showweather && !empty($isIntopOpenedDashBoard)) + { + $appendClass = $conf->global->MAIN_DISABLE_METEO == 2 ?' hideonsmartphone' : ''; + $weather = getWeatherStatus($totallate); + + $text=''; + if ($totallate > 0) $text=$langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate").' ('.$langs->transnoentitiesnoconv("NActionsLate", $totallate.(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')).')'; + else $text=$langs->transnoentitiesnoconv("NoItemLate"); + $text.='. '.$langs->transnoentitiesnoconv("LateDesc"); + + + + $weatherDashBoard= '
'."\n"; + $weatherDashBoard.= '
'."\n"; + $weatherDashBoard.= ' '."\n"; + $weatherDashBoard.= '
'."\n"; + $weatherDashBoard.= ' '.$langs->trans('GlobalOpenedElemView').'' . "\n"; + + if($totallatePercentage>0 && !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)){ + $weatherDashBoard.= ' '.$langs->transnoentitiesnoconv("NActionsLate", price($totallatePercentage).'%').'' . "\n"; + $weatherDashBoard.= ' '.$langs->trans('NActionsLate', $totalLateNumber).'' . "\n"; + } + else{ + $weatherDashBoard.= ' '.$langs->transnoentitiesnoconv("NActionsLate", $totalLateNumber).'' . "\n"; + if($totallatePercentage>0){ + $weatherDashBoard.= ' '.$langs->trans('NActionsLate', price($totallatePercentage).'%').'' . "\n"; + } + } + + $weatherDashBoard.= '
'."\n"; + $weatherDashBoard.= '
'."\n"; + $weatherDashBoard.= '
'."\n"; + $weatherDashBoard.="\n"; + + $openedDashBoard=$weatherDashBoard.$openedDashBoard; + } + + if(!empty($isIntopOpenedDashBoard)) + { + for ($i = 1; $i <= 10; $i++) { + $openedDashBoard .= '
'; + } + } + + $nbworkboardcount=0; + foreach($valid_dashboardlines as $infoKey => $board) { - if (empty($board->nbtodo)) $nbworkboardempty++; + if(in_array($infoKey, $isIntopOpenedDashBoard)) { + // skip if info is present on top + continue; + } - $textlate = $langs->trans("NActionsLate", $board->nbtodolate); - $textlate.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')'; + if (empty($board->nbtodo)) $nbworkboardempty++; + $nbworkboardcount++; - $boxwork .='
'; + + $textlate = $langs->trans("NActionsLate", $board->nbtodolate); + $textlate.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')'; + + + $boxwork .='
'; $boxwork .= '
'; $sep=($conf->dol_use_jmobile?'
':' '); $boxwork .= ''.$board->img.' '.$board->label.'
'; $boxwork .= ''.$board->nbtodo.''; - if ($board->total > 0 && ! empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)) + if ($board->total > 0 && !empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)) { $boxwork .= ' / '.price($board->total) .''; } @@ -636,7 +862,14 @@ $boxwork.='
'; // End table array of working board $boxwork.='
'; -print '
'; + +if(!empty($isIntopOpenedDashBoard)) { + print '
'; + print '
' . $openedDashBoard . '
'; + print '
'; +} + +print '
'; print '
'; @@ -648,8 +881,11 @@ print '
'; $boxlist.='
'; $boxlist.='
'; +if(!empty($nbworkboardcount)) +{ + $boxlist.=$boxwork; +} -$boxlist.=$boxwork; $boxlist.=$resultboxes['boxlista']; $boxlist.= '
'; @@ -726,33 +962,68 @@ function showWeather($totallate, $text, $options, $morecss = '') { global $conf; - $out=''; - $offset=0; - $factor=10; // By default - - $used_conf = !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? 'MAIN_METEO_PERCENTAGE_LEVEL' : 'MAIN_METEO_LEVEL'; - - $level0=$offset; - if (! empty($conf->global->{$used_conf.'0'})) { - $level0=$conf->global->{$used_conf.'0'}; - } - $level1=$offset+1*$factor; - if (! empty($conf->global->{$used_conf.'1'})) { - $level1=$conf->global->{$used_conf.'1'}; - } - $level2=$offset+2*$factor; - if (! empty($conf->global->{$used_conf.'2'})) { - $level2=$conf->global->{$used_conf.'2'}; - } - $level3=$offset+3*$factor; - if (! empty($conf->global->{$used_conf.'3'})) { - $level3=$conf->global->{$used_conf.'3'}; - } - - if ($totallate <= $level0) $out.=img_weather($text, 'weather-clear.png', $options, 0, $morecss); - elseif ($totallate > $level0 && $totallate <= $level1) $out.=img_weather($text, 'weather-few-clouds.png', $options, 0, $morecss); - elseif ($totallate > $level1 && $totallate <= $level2) $out.=img_weather($text, 'weather-clouds.png', $options, 0, $morecss); - elseif ($totallate > $level2 && $totallate <= $level3) $out.=img_weather($text, 'weather-many-clouds.png', $options, 0, $morecss); - elseif ($totallate > $level3) $out.=img_weather($text, 'weather-storm.png', $options, 0, $morecss); - return $out; + $weather = getWeatherStatus($totallate); + return img_weather($text, $weather->picto, $options, 0, $morecss); +} + + +/** + * get weather level + * $conf->global->MAIN_METEO_LEVELx + * + * @param int $totallate Nb of element late + * @return string Return img tag of weather + */ +function getWeatherStatus($totallate) +{ + global $conf; + + $weather = new stdClass(); + $weather->picto = ''; + + $offset=0; + $factor=10; // By default + + $used_conf = !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? 'MAIN_METEO_PERCENTAGE_LEVEL' : 'MAIN_METEO_LEVEL'; + + $level0=$offset; + $weather->level=0; + if (! empty($conf->global->{$used_conf.'0'})) { + $level0=$conf->global->{$used_conf.'0'}; + } + $level1=$offset+1*$factor; + if (! empty($conf->global->{$used_conf.'1'})) { + $level1=$conf->global->{$used_conf.'1'}; + } + $level2=$offset+2*$factor; + if (! empty($conf->global->{$used_conf.'2'})) { + $level2=$conf->global->{$used_conf.'2'}; + } + $level3=$offset+3*$factor; + if (! empty($conf->global->{$used_conf.'3'})) { + $level3=$conf->global->{$used_conf.'3'}; + } + + if ($totallate <= $level0){ + $weather->picto = 'weather-clear.png'; + $weather->level=0; + } + elseif ($totallate <= $level1){ + $weather->picto = 'weather-few-clouds.png'; + $weather->level=1; + } + elseif ($totallate <= $level2){ + $weather->picto = 'weather-clouds.png'; + $weather->level=2; + } + elseif ($totallate <= $level3){ + $weather->picto = 'weather-many-clouds.png'; + $weather->level=3; + } + else{ + $weather->picto = 'weather-storm.png'; + $weather->level=4; + } + + return $weather; } diff --git a/htdocs/langs/en_US/contracts.lang b/htdocs/langs/en_US/contracts.lang index 129b7d8416a..47572c355ab 100644 --- a/htdocs/langs/en_US/contracts.lang +++ b/htdocs/langs/en_US/contracts.lang @@ -51,6 +51,7 @@ ListOfClosedServices=List of closed services ListOfRunningServices=List of running services NotActivatedServices=Inactive services (among validated contracts) BoardNotActivatedServices=Services to activate among validated contracts +BoardNotActivatedServicesShort=Services to activate LastContracts=Latest %s contracts LastModifiedServices=Latest %s modified services ContractStartDate=Start date @@ -65,7 +66,9 @@ DateEndReal=Real end date DateEndRealShort=Real end date CloseService=Close service BoardRunningServices=Services running +BoardRunningServicesShort=Services running BoardExpiredServices=Services expired +BoardExpiredServicesShort=Services expired ServiceStatus=Status of service DraftContracts=Drafts contracts CloseRefusedBecauseOneServiceActive=Contract can't be closed as there is at least one open service on it diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 528e3ff79aa..099cc9a5a12 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -983,5 +983,9 @@ PaymentInformation=Payment information ValidFrom=Valid from ValidUntil=Valid until NoRecordedUsers=No users +ToClose=To close +ToProcess=To process +ToApprove=To approve +GlobalOpenedElemView=Global view NoArticlesFoundForTheKeyword=No article found for the keyword '%s' -NoArticlesFoundForTheCategory=No article found for the category \ No newline at end of file +NoArticlesFoundForTheCategory=No article found for the category diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index 9993e05428f..5886c598d52 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -29,6 +29,7 @@ MenuMembersUpToDate=Up to date members MenuMembersNotUpToDate=Out of date members MenuMembersResiliated=Terminated members MembersWithSubscriptionToReceive=Members with subscription to receive +MembersWithSubscriptionToReceiveShort=Subscription to receive DateSubscription=Subscription date DateEndSubscription=Subscription end date EndSubscription=End subscription diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index eecf314dbf6..6e2b0a73a5e 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -1796,6 +1796,7 @@ class Project extends CommonObject $response = new WorkboardResponse(); $response->warning_delay = $conf->projet->warning_delay/60/60/24; $response->label = $langs->trans("OpenedProjects"); + $response->labelShort = $langs->trans("Opened"); if ($user->rights->projet->all->lire) $response->url = DOL_URL_ROOT.'/projet/list.php?search_status=1&mainmenu=project'; else $response->url = DOL_URL_ROOT.'/projet/list.php?search_project_user=-1&search_status=1&mainmenu=project'; $response->img = img_object('', "projectpub"); diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index a6b240a4532..0cab8e5b995 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -2274,20 +2274,24 @@ class SupplierProposal extends CommonObject $resql=$this->db->query($sql); if ($resql) { + $label = $labelShort = ''; if ($mode == 'opened') { $delay_warning=$conf->supplier_proposal->cloture->warning_delay; $statut = self::STATUS_VALIDATED; $label = $langs->trans("SupplierProposalsToClose"); + $labelShort = $langs->trans("ToClose"); } if ($mode == 'signed') { $delay_warning=$conf->supplier_proposal->facturation->warning_delay; $statut = self::STATUS_SIGNED; $label = $langs->trans("SupplierProposalsToProcess"); // May be billed or ordered + $labelShort = $langs->trans("ToProcess"); } $response = new WorkboardResponse(); $response->warning_delay = $delay_warning/60/60/24; $response->label = $label; + $response->labelShort = $labelShort; $response->url = DOL_URL_ROOT.'/supplier_proposal/list.php?viewstatut='.$statut; $response->img = img_object('', "propal"); diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 23dc26604ac..1c49ab1053c 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3206,7 +3206,13 @@ span.boxstatsindicator { font-size: 130%; font-weight: normal; line-height: 29px; + flex-grow: 1; + } + + + + span.dashboardlineindicator, span.dashboardlineindicatorlate { font-size: 130%; font-weight: normal; @@ -5758,3 +5764,5 @@ div.tabsElem a.tab { +/*