diff --git a/ChangeLog b/ChangeLog index 18496304b2bc2564048c184e10c5f02fdbf428aa..9de89381ea0aca5de159a6e4439478eea3d92cec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ English Dolibarr ChangeLog ***** ChangeLog for 3.0 compared to 2.9 ***** For users: +- New: Add a weather on dashboard - New: Add a Paypal module - New: Can choose third party to use in point of sale module during logon. - New: A lot of enhancements into ECM module: diff --git a/htdocs/admin/delais.php b/htdocs/admin/delais.php index 7ce513d7797cbd8f40f1ea13c90a7d876f199a38..ba7a4ffba57e15e12a7b439eb33b1e9230c6a1ab 100644 --- a/htdocs/admin/delais.php +++ b/htdocs/admin/delais.php @@ -280,6 +280,36 @@ else } +// Show logo for weather +print $langs->trans("DescWeather").'<br>'; + +$offset=0; +$cursor=10; // By default +//if (! empty($conf->global->MAIN_METEO_OFFSET)) $offset=$conf->global->MAIN_METEO_OFFSET; +//if (! empty($conf->global->MAIN_METEO_GAP)) $cursor=$conf->global->MAIN_METEO_GAP; +$level0=$offset; if (! empty($conf->global->MAIN_METEO_LEVEL0)) $level0=$conf->global->MAIN_METEO_LEVEL0; +$level1=$offset+1*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL1)) $level1=$conf->global->MAIN_METEO_LEVEL1; +$level2=$offset+2*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL2)) $level2=$conf->global->MAIN_METEO_LEVEL2; +$level3=$offset+3*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL3)) $level3=$conf->global->MAIN_METEO_LEVEL3; +$text=''; $options='height="64px"'; +print '<table>'; +print '<tr><td>'; +print img_picto_common($text,'weather/weather-clear.png',$options); +print '</td><td><= '.$level0.'</td></tr>'; +print '<tr><td>'; +print img_picto_common($text,'weather/weather-few-clouds.png',$options); +print '</td><td><= '.$level1.'</td></tr>'; +print '<tr><td>'; +print img_picto_common($text,'weather/weather-clouds.png',$options); +print '</td><td><= '.$level2.'</td></tr>'; +print '<tr><td>'; +print img_picto_common($text,'weather/weather-many-clouds.png',$options); +print '</td><td><= '.$level3.'</td></tr>'; +print '<tr><td>'; +print img_picto_common($text,'weather/weather-storm.png',$options); +print '</td><td>> '.$level3.'</td></tr>'; + + $db->close(); diff --git a/htdocs/index.php b/htdocs/index.php index de0d06d0c358f2212fd968e9d1db53c5a3b339ad..ba4b40a0dcc87da1fa9ccb9d9b10d6e4ad93a51c 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -258,8 +258,12 @@ print '</td><td width="65%" valign="top" class="notopnoleftnoright">'; /* - * Dolibarr Working Board + * Dolibarr Working Board with weather */ +$showweather=1; +$rowspan=0; +$dashboardlines=array(); + print '<table class="noborder" width="100%">'; print '<tr class="liste_titre">'; print '<td colspan="2">'.$langs->trans("DolibarrWorkBoard").'</td>'; @@ -267,16 +271,15 @@ print '<td align="right">'.$langs->trans("Number").'</td>'; print '<td align="right">'.$langs->trans("Late").'</td>'; print '<td> </td>'; print '<td width="20"> </td>'; +if ($showweather) print '<td width="80"> </td>'; print '</tr>'; -$nboflate=0; -$var=true; // // Do not include sections without management permission // -// Number actions to do (late) +// Number of actions to do (late) if ($conf->agenda->enabled && $user->rights->agenda->myactions->read) { include_once(DOL_DOCUMENT_ROOT."/comm/action/class/actioncomm.class.php"); @@ -284,49 +287,27 @@ if ($conf->agenda->enabled && $user->rights->agenda->myactions->read) $board->load_board($user); $board->warning_delay=$conf->actions->warning_delay/60/60/24; $board->label=$langs->trans("ActionsToDo"); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Actions"),"task").'</td><td>'.$board->label.'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/comm/action/listactions.php?status=todo">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/comm/action/listactions.php?status=todo">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($board->warning_delay).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; - print "\n"; + $board->url=DOL_URL_ROOT.'/comm/action/listactions.php?status=todo&mainmenu=agenda'; + $board->img=img_object($langs->trans("Actions"),"task"); + $rowspan++; + $dashboardlines[]=$board; } -// Number customer orders a deal +// Number of customer orders a deal if ($conf->commande->enabled && $user->rights->commande->lire) { include_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php"); $board=new Commande($db); $board->load_board($user); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Orders"),"order").'</td><td>'.$langs->trans("OrdersToProcess").'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/commande/liste.php?viewstatut=-2">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/commande/liste.php?viewstatut=-2">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($conf->commande->traitement->warning_delay/60/60/24).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; - print "\n"; + $board->warning_delay=$conf->commande->traitement->warning_delay/60/60/24; + $board->label=$langs->trans("OrdersToProcess"); + $board->url=DOL_URL_ROOT.'/commande/liste.php?viewstatut=-2'; + $board->img=img_object($langs->trans("Orders"),"order"); + $rowspan++; + $dashboardlines[]=$board; } -// Number propale open (expired) +// Number of commercial proposals opened (expired) if ($conf->propal->enabled && $user->rights->propale->lire) { $langs->load("propal"); @@ -334,24 +315,15 @@ if ($conf->propal->enabled && $user->rights->propale->lire) include_once(DOL_DOCUMENT_ROOT."/comm/propal/class/propal.class.php"); $board=new Propal($db); $board->load_board($user,"opened"); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Propals"),"propal").'</td><td>'.$langs->trans("PropalsToClose").'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/comm/propal.php?viewstatut=1">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/comm/propal.php?viewstatut=1">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($conf->propal->cloture->warning_delay/60/60/24).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; + $board->warning_delay=$conf->propal->cloture->warning_delay/60/60/24; + $board->label=$langs->trans("PropalsToClose"); + $board->url=DOL_URL_ROOT.'/comm/propal.php?viewstatut=1'; + $board->img=img_object($langs->trans("Propals"),"propal"); + $rowspan++; + $dashboardlines[]=$board; } -// Number propale CLOSED signed (billed) +// Number of commercial proposals CLOSED signed (billed) if ($conf->propal->enabled && $user->rights->propale->lire) { $langs->load("propal"); @@ -359,25 +331,15 @@ if ($conf->propal->enabled && $user->rights->propale->lire) include_once(DOL_DOCUMENT_ROOT."/comm/propal/class/propal.class.php"); $board=new Propal($db); $board->load_board($user,"signed"); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Propals"),"propal").'</td><td>'.$langs->trans("PropalsToBill").'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/comm/propal.php?viewstatut=2">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/comm/propal.php?viewstatut=2">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($conf->propal->facturation->warning_delay/60/60/24).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; - print "\n"; + $board->warning_delay=$conf->propal->facturation->warning_delay/60/60/24; + $board->label=$langs->trans("PropalsToBill"); + $board->url=DOL_URL_ROOT.'/comm/propal.php?viewstatut=2'; + $board->img=img_object($langs->trans("Propals"),"propal"); + $rowspan++; + $dashboardlines[]=$board; } -// Number services is enabled (delayed) +// Number of services enabled (delayed) if ($conf->contrat->enabled && $user->rights->contrat->lire) { $langs->load("contracts"); @@ -385,22 +347,12 @@ if ($conf->contrat->enabled && $user->rights->contrat->lire) include_once(DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php"); $board=new Contrat($db); $board->load_board($user,"inactives"); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Contract"),"contract").'</td><td>'.$langs->trans("BoardNotActivatedServices").'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=0">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=0">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($conf->contrat->services->inactifs->warning_delay/60/60/24).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; - print "\n"; + $board->warning_delay=$conf->contrat->services->inactifs->warning_delay/60/60/24; + $board->label=$langs->trans("BoardNotActivatedServices"); + $board->url=DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=0'; + $board->img=img_object($langs->trans("Contract"),"contract"); + $rowspan++; + $dashboardlines[]=$board; } // Number of active services (expired) @@ -411,22 +363,12 @@ if ($conf->contrat->enabled && $user->rights->contrat->lire) include_once(DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php"); $board=new Contrat($db); $board->load_board($user,"expired"); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Contract"),"contract").'</td><td>'.$langs->trans("BoardRunningServices").'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=4&filter=expired">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=4&filter=expired">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($conf->contrat->services->expires->warning_delay/60/60/24).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; - print "\n"; + $board->warning_delay=$conf->contrat->services->expires->warning_delay/60/60/24; + $board->label=$langs->trans("BoardRunningServices"); + $board->url=DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=4&filter=expired'; + $board->img=img_object($langs->trans("Contract"),"contract"); + $rowspan++; + $dashboardlines[]=$board; } // Number of supplier invoices (has paid) @@ -437,25 +379,15 @@ if ($conf->fournisseur->enabled && $conf->facture->enabled && $user->rights->fac include_once(DOL_DOCUMENT_ROOT."/fourn/class/fournisseur.facture.class.php"); $board=new FactureFournisseur($db); $board->load_board($user); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Bills"),"bill").'</td><td>'.$langs->trans("SupplierBillsToPay").'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/fourn/facture/index.php?filtre=paye:0">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/fourn/facture/index.php?filtre=paye:0">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($conf->facture->fournisseur->warning_delay/60/60/24).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; - print "\n"; + $board->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24; + $board->label=$langs->trans("SupplierBillsToPay"); + $board->url=DOL_URL_ROOT.'/fourn/facture/index.php?filtre=paye:0'; + $board->img=img_object($langs->trans("Bills"),"bill"); + $rowspan++; + $dashboardlines[]=$board; } -// Number invoices customers (has paid) +// Number of invoices customers (has paid) if ($conf->facture->enabled && $user->rights->facture->lire) { $langs->load("bills"); @@ -463,25 +395,15 @@ if ($conf->facture->enabled && $user->rights->facture->lire) include_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php"); $board=new Facture($db); $board->load_board($user); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Bills"),"bill").'</td><td>'.$langs->trans("CustomerBillsUnpaid").'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/compta/facture/impayees.php">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/compta/facture/impayees.php">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($conf->facture->client->warning_delay/60/60/24).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; - print "\n"; + $board->warning_delay=$conf->facture->client->warning_delay/60/60/24; + $board->label=$langs->trans("CustomerBillsUnpaid"); + $board->url=DOL_URL_ROOT.'/compta/facture/impayees.php'; + $board->img=img_object($langs->trans("Bills"),"bill"); + $rowspan++; + $dashboardlines[]=$board; } -// Number Scripture closer +// Number of transactions to conciliate if ($conf->banque->enabled && $user->rights->banque->lire && ! $user->societe_id) { $langs->load("banks"); @@ -489,25 +411,15 @@ if ($conf->banque->enabled && $user->rights->banque->lire && ! $user->societe_id include_once(DOL_DOCUMENT_ROOT."/compta/bank/class/account.class.php"); $board=new Account($db); $board->load_board($user); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("TransactionsToConciliate"),"payment").'</td><td>'.$langs->trans("TransactionsToConciliate").'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/compta/bank/index.php?leftmenu=bank&mainmenu=bank">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/compta/bank/index.php?leftmenu=bank&mainmenu=bank">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($conf->bank->rappro->warning_delay/60/60/24).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; - print "\n"; + $board->warning_delay=$conf->bank->rappro->warning_delay/60/60/24; + $board->label=$langs->trans("TransactionsToConciliate"); + $board->url=DOL_URL_ROOT.'/compta/bank/index.php?leftmenu=bank&mainmenu=bank'; + $board->img=img_object($langs->trans("TransactionsToConciliate"),"payment"); + $rowspan++; + $dashboardlines[]=$board; } -// Number Scripture closer +// Number of cheque to send if ($conf->banque->enabled && $user->rights->banque->lire && ! $user->societe_id) { $langs->load("banks"); @@ -515,25 +427,15 @@ if ($conf->banque->enabled && $user->rights->banque->lire && ! $user->societe_id include_once(DOL_DOCUMENT_ROOT."/compta/paiement/cheque/class/remisecheque.class.php"); $board=new RemiseCheque($db); $board->load_board($user); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("BankChecksToReceipt"),"payment").'</td><td>'.$langs->trans("BankChecksToReceipt").'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=accountancy">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=accountancy">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($conf->bank->cheque->warning_delay/60/60/24).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; - print "\n"; + $board->warning_delay=$conf->bank->cheque->warning_delay/60/60/24; + $board->label=$langs->trans("BankChecksToReceipt"); + $board->url=DOL_URL_ROOT.'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=accountancy'; + $board->img=img_object($langs->trans("BankChecksToReceipt"),"payment"); + $rowspan++; + $dashboardlines[]=$board; } -// Participant Number valid (awaiting assessment) +// Number of foundation members if ($conf->adherent->enabled && $user->rights->adherent->lire && ! $user->societe_id) { $langs->load("members"); @@ -541,35 +443,63 @@ if ($conf->adherent->enabled && $user->rights->adherent->lire && ! $user->societ include_once(DOL_DOCUMENT_ROOT."/adherents/class/adherent.class.php"); $board=new Adherent($db); $board->load_board($user); - - $var=!$var; - print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Members"),"user").'</td><td>'.$langs->trans("Members").'</td>'; - print '<td align="right"><a href="'.DOL_URL_ROOT.'/adherents/liste.php?mainmenu=members&statut=1">'.$board->nbtodo.'</a></td>'; - print '<td align="right">'; - print '<a href="'.DOL_URL_ROOT.'/adherents/liste.php?mainmenu=members&statut=1">'; - print $board->nbtodolate; - print '</a></td><td nowrap align="right">'; - print ' (>'.ceil($conf->adherent->cotisation->warning_delay/60/60/24).' '.$langs->trans("days").')'; - print '</td>'; - print '<td>'; - if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; } - else print ' '; - print '</td>'; - print '</tr>'; - print "\n"; + $board->warning_delay=$conf->adherent->cotisation->warning_delay/60/60/24; + $board->label=$langs->trans("MembersWithSubscriptionToReceive"); + $board->url=DOL_URL_ROOT.'/adherents/liste.php?mainmenu=members&statut=1'; + $board->img=img_object($langs->trans("Members"),"user"); + $rowspan++; + $dashboardlines[]=$board; } -print '</table>'; +// Calculate total nb of late +$totallate=0; +foreach($dashboardlines as $key => $board) +{ + if ($board->nbtodolate > 0) $totallate+=$board->nbtodolate; +} -if ($nboflate > 0) +// Show dashboard +$var=true; +foreach($dashboardlines as $key => $board) { - print '<br>'; - //print '<table width="100%" class="border"><tr><td>'; - print '<div class="warning">'.img_picto($langs->trans("Alert"),'warning').' '.$langs->trans("WarningYouHaveAtLeastOneTaskLate").'</div>'; - //print '</td></tr></table>'; + $var=!$var; + print '<tr '.$bc[$var].'><td width="16">'.$board->img.'</td><td>'.$board->label.'</td>'; + print '<td align="right"><a href="'.$board->url.'">'.$board->nbtodo.'</a></td>'; + print '<td align="right">'; + print '<a href="'.$board->url.'">'; + print $board->nbtodolate; + print '</a></td>'; + print '<td align="left">'; + if ($board->nbtodolate > 0) print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); + else print ' '; + print '</td>'; + print '<td nowrap="nowrap" align="right">'; + print ' (>'.ceil($board->warning_delay).' '.$langs->trans("days").')'; + print '</td>'; + if ($showweather) + { + print '<td rowspan="'.$rowspan.'" width="80" style="border-left: 1px solid #DDDDDD" align="center">'; + $text=''; + if ($totallate > 0) $text=$langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate"); + $options='height="64px"'; + if ($rowspan <= 2) $options='height="24"'; // Weather logo is smaller if dashboard has few elements + else if ($rowspan <= 3) $options='height="48"'; // Weather logo is smaller if dashboard has few elements + print showWeather($totallate,$text,$options); + //print showWeather(0,''); + //print showWeather(40,$text); + print '</td>'; + $showweather=0; + } + print '</tr>'; + print "\n"; } -print '</td></tr></table>'; + +print '</table>'; // End table array + + +print '</td></tr></table>'; // End table left area + print '<br>'; @@ -619,4 +549,36 @@ if ($user->admin && empty($conf->global->MAIN_REMOVE_INSTALL_WARNING)) $db->close(); llxFooter('$Date$ - $Revision$'); + + +/** + * Show weather logo. Logo to show depends on $totallate and values for + * $conf->global->MAIN_METEO_OFFSET + * $conf->global->MAIN_METEO_GAP + * @param $totallate Nb of element late + * @param $text Text to show on logo + * @param $options More parameters on img tag + * @return string Return img tag of weather + */ +function showWeather($totallate,$text,$options) +{ + global $conf; + + $out=''; + $offset=0; + $cursor=10; // By default + //if (! empty($conf->global->MAIN_METEO_OFFSET)) $offset=$conf->global->MAIN_METEO_OFFSET; + //if (! empty($conf->global->MAIN_METEO_GAP)) $cursor=$conf->global->MAIN_METEO_GAP; + $level0=$offset; if (! empty($conf->global->MAIN_METEO_LEVEL0)) $level0=$conf->global->MAIN_METEO_LEVEL0; + $level1=$offset+1*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL1)) $level1=$conf->global->MAIN_METEO_LEVEL1; + $level2=$offset+2*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL2)) $level2=$conf->global->MAIN_METEO_LEVEL2; + $level3=$offset+3*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL3)) $level3=$conf->global->MAIN_METEO_LEVEL3; + + if ($totallate <= $level0) $out.=img_picto_common($text,'weather/weather-clear.png',$options); + if ($totallate > $level0 && $totallate <= $level1) $out.=img_picto_common($text,'weather/weather-few-clouds.png',$options); + if ($totallate > $level1 && $totallate <= $level2) $out.=img_picto_common($text,'weather/weather-clouds.png',$options); + if ($totallate > $level2 && $totallate <= $level3) $out.=img_picto_common($text,'weather/weather-many-clouds.png',$options); + if ($totallate > $level3) $out.=img_picto_common($text,'weather/weather-storm.png',$options); + return $out; +} ?> \ No newline at end of file diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 73b49cf36c9f8975ec411fed2a8c323bed0d4568..60229b25bc7ad22fc472b2d56a5e30dde343c2ea 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -283,6 +283,7 @@ ListOfDirectoriesForModelGenODT=List of directories containing templates files w NumberOfModelFilesFound=Number of ODT templates files found in those directories ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir FirstnameNamePosition=Position of firstname/name +DescWeather=The following pictures will be shown on dashboard when number of late actions reach the following values: # Modules Module0Name=Users & groups diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index 7b85de1e8f03f87993687d5430b2b37cb1a0fdb0..98ad76d1fe4875e603ff08e83267e0ea25655f29 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -1,163 +1,164 @@ -# Dolibarr language file - en_US - members -CHARSET=UTF-8 -MembersArea=Members area -PublicMembersArea=Public members area -MemberCard=Member card -SubscriptionCard=Subscription card -Member=Member -Members=Members -MemberAccount=Member login -ShowMember=Show member card -UserNotLinkedToMember=User not linked to a member -MembersTickets=Members Tickets -FundationMembers=Foundation members -Attributs=Attributes -ErrorMemberTypeNotDefined=Member type not defined -ListOfPublicMembers=List of public members -ListOfValidatedPublicMembers=List of validated public members -ErrorThisMemberIsNotPublic=This member is not public -ErrorMemberIsAlreadyLinkedToThisThirdParty=Another member (name: <b>%s</b>, login: <b>%s</b>) is already linked to a third party <b>%s</b>. Remove this link first because a third party can't be linked to only a member (and vice versa). -ErrorUserPermissionAllowsToLinksToItselfOnly=For security reasons, you must be granted permissions to edit all users to be able to link a member to a user that is not yours. -ThisIsContentOfYourCard=This is details of your card -CardContent=Content of your member card -SetLinkToUser=Link to a Dolibarr user -SetLinkToThirdParty=Link to a Dolibarr third party -MembersCards=Members business cards -MembersList=List of members -MembersListToValid=List of draft members (to be validated) -MembersListValid=List of valid members -MembersListUpToDate=List of valid members with up to date subscription -MembersListNotUpToDate=List of valid members with subscription out of date -MembersListResiliated=List of resiliated members -MembersListQualified=List of qualified members -MenuMembersToValidate=Draft members -MenuMembersValidated=Validated members -MenuMembersUpToDate=Up to date members -MenuMembersNotUpToDate=Out of date members -MenuMembersResiliated=Resiliated members -DateAbonment=Subscription date -DateSubscription=Subscription date -DateNextSubscription=Next subscription -DateEndSubscription=Subscription end date -EndSubscription=End subscription -SubscriptionId=Subscription id -MemberId=Member id -NewMember=New member -NewType=New member type -MemberType=Member type -MemberTypeId=Member type id -MemberTypeLabel=Member type label -MembersTypes=Members types -MembersAttributes=Members attributes -SearchAMember=Search a member -MemberStatusDraft=Draft (needs to be validated) -MemberStatusDraftShort=Draft -MemberStatusActive=Validated (waiting subscription) -MemberStatusActiveShort=Validated -MemberStatusActiveLate=subscription expired -MemberStatusActiveLateShort=Expired -MemberStatusPaid=Subscription up to date -MemberStatusPaidShort=Up to date -MemberStatusResiliated=Resiliated member -MemberStatusResiliatedShort=Resiliated -MembersStatusToValid=Draft members -MembersStatusToValidShort=Draft members -MembersStatusValidated=Validated members -MembersStatusPaid=Subscription up to date -MembersStatusPaidShort=Up to date -MembersStatusNotPaid=Subscription out of date -MembersStatusNotPaidShort=Out of date -MembersStatusResiliated=Resiliated members -MembersStatusResiliatedShort=Resiliated members -NewCotisation=New contribution -PaymentSubscription=New contribution payment -EditMember=Edit member -SubscriptionEndDate=Subscription's end date -NewAttribute=New attribute -AttributeCode=Attribute code -OptionalFieldsSetup=Optional fields setup -MembersTypeSetup=Members type setup -NewSubscription=New subscription -Subscription=Subscription -Subscriptions=Subscriptions -SubscriptionLate=Late -SubscriptionNotReceived=Subscription never received -SubscriptionLateShort=Late -SubscriptionNotReceivedShort=Never received -ListOfSubscriptions=List of subscriptions -SendCardByMail=Send card by Email -AddMember=Add member -MemberType=Member type -NoTypeDefinedGoToSetup=No member types defined. Go to setup - Members types -NewMemberType=New member type -WelcomeEMail=Welcome e-mail -SubscriptionRequired=Subscription required -EditType=Edit member type -DeleteType=Delete -VoteAllowed=Vote allowed -Physical=Physical -Moral=Moral -MorPhy=Moral/Physical -Reenable=Reenable -ResiliateMember=Resiliate a member -ConfirmResiliateMember=Are you sure you want to resiliate this member ? -DeleteMember=Delete a member -ConfirmDeleteMember=Are you sure you want to delete this member (Deleting a member will delete all his subscriptions) ? -DeleteSubscription=Delete a subscription -ConfirmDeleteSubscription=Are you sure you want to delete this subscription ? -Filehtpasswd=htpasswd file -ValidateMember=Validate a member -ConfirmValidateMember=Are you sure you want to validate this member ? -FollowingLinksArePublic=The following links are open pages not protected by any Dolibarr permission. They are not formated pages, provided as example to show how to list members database. -PublicMemberList=Public member list -BlankSubscriptionForm=Subscription form -MemberPublicLinks=Public links/pages -ExportDataset_member_1=Members and subscriptions -ImportDataset_member_1=Members -LastMembers=Last %s members -LastMembersModified=Last %s modified members -AttributeName=Attribute name -FieldEdition=% field edition -AlphaNumOnlyCharsAndNoSpace=only alphanumericals characters without space -String=String -Text=Text -Int=Int -Date=Date -DateAndTime=Date and time -PublicMemberCard=Member public card -MemberNotOrNoMoreExpectedToSubscribe=Member not or no more expected to subscribe -AddSubscription=Add subscription -ShowSubscription=Show subscription -MemberModifiedInDolibarr=Member modified in Dolibarr -SendAnEMailToMember=Send information email to member -DescADHERENT_AUTOREGISTER_MAIL_SUBJECT=EMail subject for member autosubscription -DescADHERENT_AUTOREGISTER_MAIL=EMail for member autosubscription -DescADHERENT_MAIL_VALID_SUBJECT=EMail subject for member validation -DescADHERENT_MAIL_VALID=EMail for member validation -DescADHERENT_MAIL_COTIS_SUBJECT=EMail subject for subscription -DescADHERENT_MAIL_COTIS=EMail for subscription -DescADHERENT_MAIL_RESIL_SUBJECT=EMail subject for member resiliation -DescADHERENT_MAIL_RESIL=EMail for member resiliation -DescADHERENT_MAIL_FROM=Sender EMail for automatic emails -DescADHERENT_ETIQUETTE_TYPE=Format of labels page -DescADHERENT_CARD_TYPE=Format of cards page -DescADHERENT_CARD_HEADER_TEXT=Text printed on top of member cards -DescADHERENT_CARD_TEXT=Text printed on member cards (align on left) -DescADHERENT_CARD_TEXT_RIGHT=Text printed on member cards (align on right) -DescADHERENT_CARD_FOOTER_TEXT=Text printed on bottom of member cards -DescADHERENT_MAILMAN_LISTS=List(s) for automatic insription of new members (separated by a comma) -ShowTypeCard=Show type '%s' -HTPasswordExport=htpassword file generation -NoThirdPartyAssociatedToMember=No third party associated to this member -ThirdPartyDolibarr=Dolibarr third party -MembersAndSubscriptions= Members and Suscriptions -MoreActions=Complementary action on recording -MoreActionBankDirect=Create a direct transaction record on account -MoreActionBankViaInvoice=Create an invoice and payment on account -MoreActionInvoiceOnly=Create an invoice with no payment -LinkToGeneratedPages=Generate visit cards -LinkToGeneratedPagesDesc=This screen allows you to generate PDF files with business cards for all your members or a particular member. -DocForAllMembersCards=Generate business cards for all members (Format for output actually setup : <b>%s</b>) -DocForOneMemberCards=Generate business cards for a particular member (Format for output actually setup: <b>%s</b>) -DocForLabels=Generate address sheets (Format for output actually setup: <b>%s</b>) +# Dolibarr language file - en_US - members +CHARSET=UTF-8 +MembersArea=Members area +PublicMembersArea=Public members area +MemberCard=Member card +SubscriptionCard=Subscription card +Member=Member +Members=Members +MemberAccount=Member login +ShowMember=Show member card +UserNotLinkedToMember=User not linked to a member +MembersTickets=Members Tickets +FundationMembers=Foundation members +Attributs=Attributes +ErrorMemberTypeNotDefined=Member type not defined +ListOfPublicMembers=List of public members +ListOfValidatedPublicMembers=List of validated public members +ErrorThisMemberIsNotPublic=This member is not public +ErrorMemberIsAlreadyLinkedToThisThirdParty=Another member (name: <b>%s</b>, login: <b>%s</b>) is already linked to a third party <b>%s</b>. Remove this link first because a third party can't be linked to only a member (and vice versa). +ErrorUserPermissionAllowsToLinksToItselfOnly=For security reasons, you must be granted permissions to edit all users to be able to link a member to a user that is not yours. +ThisIsContentOfYourCard=This is details of your card +CardContent=Content of your member card +SetLinkToUser=Link to a Dolibarr user +SetLinkToThirdParty=Link to a Dolibarr third party +MembersCards=Members business cards +MembersList=List of members +MembersListToValid=List of draft members (to be validated) +MembersListValid=List of valid members +MembersListUpToDate=List of valid members with up to date subscription +MembersListNotUpToDate=List of valid members with subscription out of date +MembersListResiliated=List of resiliated members +MembersListQualified=List of qualified members +MenuMembersToValidate=Draft members +MenuMembersValidated=Validated members +MenuMembersUpToDate=Up to date members +MenuMembersNotUpToDate=Out of date members +MenuMembersResiliated=Resiliated members +MembersWithSubscriptionToReceive=Members with subscription to receive +DateAbonment=Subscription date +DateSubscription=Subscription date +DateNextSubscription=Next subscription +DateEndSubscription=Subscription end date +EndSubscription=End subscription +SubscriptionId=Subscription id +MemberId=Member id +NewMember=New member +NewType=New member type +MemberType=Member type +MemberTypeId=Member type id +MemberTypeLabel=Member type label +MembersTypes=Members types +MembersAttributes=Members attributes +SearchAMember=Search a member +MemberStatusDraft=Draft (needs to be validated) +MemberStatusDraftShort=Draft +MemberStatusActive=Validated (waiting subscription) +MemberStatusActiveShort=Validated +MemberStatusActiveLate=subscription expired +MemberStatusActiveLateShort=Expired +MemberStatusPaid=Subscription up to date +MemberStatusPaidShort=Up to date +MemberStatusResiliated=Resiliated member +MemberStatusResiliatedShort=Resiliated +MembersStatusToValid=Draft members +MembersStatusToValidShort=Draft members +MembersStatusValidated=Validated members +MembersStatusPaid=Subscription up to date +MembersStatusPaidShort=Up to date +MembersStatusNotPaid=Subscription out of date +MembersStatusNotPaidShort=Out of date +MembersStatusResiliated=Resiliated members +MembersStatusResiliatedShort=Resiliated members +NewCotisation=New contribution +PaymentSubscription=New contribution payment +EditMember=Edit member +SubscriptionEndDate=Subscription's end date +NewAttribute=New attribute +AttributeCode=Attribute code +OptionalFieldsSetup=Optional fields setup +MembersTypeSetup=Members type setup +NewSubscription=New subscription +Subscription=Subscription +Subscriptions=Subscriptions +SubscriptionLate=Late +SubscriptionNotReceived=Subscription never received +SubscriptionLateShort=Late +SubscriptionNotReceivedShort=Never received +ListOfSubscriptions=List of subscriptions +SendCardByMail=Send card by Email +AddMember=Add member +MemberType=Member type +NoTypeDefinedGoToSetup=No member types defined. Go to setup - Members types +NewMemberType=New member type +WelcomeEMail=Welcome e-mail +SubscriptionRequired=Subscription required +EditType=Edit member type +DeleteType=Delete +VoteAllowed=Vote allowed +Physical=Physical +Moral=Moral +MorPhy=Moral/Physical +Reenable=Reenable +ResiliateMember=Resiliate a member +ConfirmResiliateMember=Are you sure you want to resiliate this member ? +DeleteMember=Delete a member +ConfirmDeleteMember=Are you sure you want to delete this member (Deleting a member will delete all his subscriptions) ? +DeleteSubscription=Delete a subscription +ConfirmDeleteSubscription=Are you sure you want to delete this subscription ? +Filehtpasswd=htpasswd file +ValidateMember=Validate a member +ConfirmValidateMember=Are you sure you want to validate this member ? +FollowingLinksArePublic=The following links are open pages not protected by any Dolibarr permission. They are not formated pages, provided as example to show how to list members database. +PublicMemberList=Public member list +BlankSubscriptionForm=Subscription form +MemberPublicLinks=Public links/pages +ExportDataset_member_1=Members and subscriptions +ImportDataset_member_1=Members +LastMembers=Last %s members +LastMembersModified=Last %s modified members +AttributeName=Attribute name +FieldEdition=% field edition +AlphaNumOnlyCharsAndNoSpace=only alphanumericals characters without space +String=String +Text=Text +Int=Int +Date=Date +DateAndTime=Date and time +PublicMemberCard=Member public card +MemberNotOrNoMoreExpectedToSubscribe=Member not or no more expected to subscribe +AddSubscription=Add subscription +ShowSubscription=Show subscription +MemberModifiedInDolibarr=Member modified in Dolibarr +SendAnEMailToMember=Send information email to member +DescADHERENT_AUTOREGISTER_MAIL_SUBJECT=EMail subject for member autosubscription +DescADHERENT_AUTOREGISTER_MAIL=EMail for member autosubscription +DescADHERENT_MAIL_VALID_SUBJECT=EMail subject for member validation +DescADHERENT_MAIL_VALID=EMail for member validation +DescADHERENT_MAIL_COTIS_SUBJECT=EMail subject for subscription +DescADHERENT_MAIL_COTIS=EMail for subscription +DescADHERENT_MAIL_RESIL_SUBJECT=EMail subject for member resiliation +DescADHERENT_MAIL_RESIL=EMail for member resiliation +DescADHERENT_MAIL_FROM=Sender EMail for automatic emails +DescADHERENT_ETIQUETTE_TYPE=Format of labels page +DescADHERENT_CARD_TYPE=Format of cards page +DescADHERENT_CARD_HEADER_TEXT=Text printed on top of member cards +DescADHERENT_CARD_TEXT=Text printed on member cards (align on left) +DescADHERENT_CARD_TEXT_RIGHT=Text printed on member cards (align on right) +DescADHERENT_CARD_FOOTER_TEXT=Text printed on bottom of member cards +DescADHERENT_MAILMAN_LISTS=List(s) for automatic insription of new members (separated by a comma) +ShowTypeCard=Show type '%s' +HTPasswordExport=htpassword file generation +NoThirdPartyAssociatedToMember=No third party associated to this member +ThirdPartyDolibarr=Dolibarr third party +MembersAndSubscriptions= Members and Suscriptions +MoreActions=Complementary action on recording +MoreActionBankDirect=Create a direct transaction record on account +MoreActionBankViaInvoice=Create an invoice and payment on account +MoreActionInvoiceOnly=Create an invoice with no payment +LinkToGeneratedPages=Generate visit cards +LinkToGeneratedPagesDesc=This screen allows you to generate PDF files with business cards for all your members or a particular member. +DocForAllMembersCards=Generate business cards for all members (Format for output actually setup : <b>%s</b>) +DocForOneMemberCards=Generate business cards for a particular member (Format for output actually setup: <b>%s</b>) +DocForLabels=Generate address sheets (Format for output actually setup: <b>%s</b>) SubscriptionPayment=Subscription payment \ No newline at end of file diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 644985ed8969e3dd885fff79420c6c8d50b1038e..0ee3099e98d85e3107f20315a9844e52e0894a62 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -285,6 +285,7 @@ ExampleOfDirectoriesForModelGen=Exemples de syntaxe:<br>c:\mydir<br>/home/mydir< FollowingSubstitutionKeysCanBeUsed=En plaçant les tags suivant dans le modèle, vous obtiendrez une subsitution avec la valeur personnalisée lors de la génération du document: FullListOnOnlineDocumentation=Liste complète des tags disponibles sur la documentation utilisateur du module Tiers sur le wiki http://wiki.dolibarr.org FirstnameNamePosition=Ordre affichage prénom/nom +DescWeather=Les graphiques suivant seront affichées sur le tableau de bord si le nombre d'éléments en retard atteints ces valeurs: # Modules= undefined Module0Name= Utilisateurs & groupes diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang index 3184c9da197a8eefdadbcf3a8fabd14a9a063864..9309c1cfbfeee3da2fb3dd807b15f62917f5e6be 100644 --- a/htdocs/langs/fr_FR/members.lang +++ b/htdocs/langs/fr_FR/members.lang @@ -35,6 +35,7 @@ MenuMembersValidated=Adhérents valides MenuMembersUpToDate=Adhérents à jour MenuMembersNotUpToDate=Adhérents non à jour MenuMembersResiliated=Adhérents résiliés +MembersWithSubscriptionToReceive=Adhérents avec cotisation à recevoir DateAbonment=Date adhésion DateSubscription=Date adhésion DateNextSubscription=Date prochaine adhésion diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php index c1ee0c141cc3df98754d41d63c73f528fb03c7c0..b3997d3c59b561d888d20fe7865cdc6e12c9ec6a 100644 --- a/htdocs/lib/functions.lib.php +++ b/htdocs/lib/functions.lib.php @@ -1110,12 +1110,15 @@ function img_object($alt, $object, $cssclass='') } /** - * \brief Show picto (generic function) - * \param alt Text on alt and title of image - * \param picto Name of image file to show (I no extension provided, we use '.png') - * \param options Attribut supplementaire a la balise img - * \param pictoisfullpath If 1, image path is a full path - * \return string Retourne tag img + * Show picto (generic function) + * @param alt Text on alt and title of image + * @param picto Name of image file to show (If no extension provided, we use '.png'). Image must be stored into img directory. + * Example: picto.png if picto.png is stored into htdocs/theme/mytheme/img + * Example: picto.png@mymodule if picto.png is stored into htdocs/mymodule/img + * Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1) + * @param options Add more attribute on img tag + * @param pictoisfullpath If 1, image path is a full path + * @return string Retourne tag img */ function img_picto($alt, $picto, $options='', $pictoisfullpath=0) { @@ -1135,12 +1138,12 @@ function img_picto($alt, $picto, $options='', $pictoisfullpath=0) } /** - * \brief Show picto (generic function) - * \param alt Text on alt and title of image - * \param picto Nom de l'image a afficher (Si pas d'extension, on met '.png') - * \param options Attribut supplementaire a la balise img - * \param pictoisfullpath If 1, image path is a full path - * \return string Retourne tag img + * Show picto (generic function) + * @param alt Text on alt and title of image + * @param picto Name of image file to show (If no extension provided, we use '.png'). Image must be stored into htdocs/theme/common directory. + * @param options Add more attribute on img tag + * @param pictoisfullpath If 1, image path is a full path + * @return string Retourne tag img */ function img_picto_common($alt, $picto, $options='', $pictoisfullpath=0) {