From fb1322517381f4617c6cc7e88c461b99e7696f13 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Mon, 6 Jun 2016 16:31:50 +0200
Subject: [PATCH] Fix links on list from warnings dashboard

---
 htdocs/adherents/class/adherent.class.php     | 12 ++++++----
 htdocs/compta/bank/class/account.class.php    |  1 +
 htdocs/compta/bank/index.php                  |  4 ++--
 htdocs/contrat/services.php                   |  4 ++--
 htdocs/expensereport/card.php                 | 18 ++++++++++----
 .../class/expensereport.class.php             | 22 +++++++++++++++++
 htdocs/expensereport/list.php                 | 24 ++++++++++++-------
 htdocs/index.php                              |  2 +-
 htdocs/projet/list.php                        |  4 ++++
 htdocs/projet/tasks/list.php                  |  6 +++--
 10 files changed, 72 insertions(+), 25 deletions(-)

diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php
index 93b013cd29f..87ceb66f9d1 100644
--- a/htdocs/adherents/class/adherent.class.php
+++ b/htdocs/adherents/class/adherent.class.php
@@ -1737,7 +1737,7 @@ class Adherent extends CommonObject
 	        $response = new WorkboardResponse();
 	        $response->warning_delay=$conf->adherent->cotisation->warning_delay/60/60/24;
 	        $response->label=$langs->trans("MembersWithSubscriptionToReceive");
-	        $response->url=DOL_URL_ROOT.'/adherents/list.php?mainmenu=members&amp;statut=1';
+	        $response->url=DOL_URL_ROOT.'/adherents/list.php?mainmenu=members&amp;statut=1&amp;filter=outofdate';
 	        $response->img=img_object($langs->trans("Members"),"user");
 
             $adherentstatic = new Adherent($this->db);
@@ -2006,14 +2006,18 @@ class Adherent extends CommonObject
 		return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
 	}
 
+	/**
+	 * Return if a member is late (subscription late) or not
+	 * 
+	 * @return boolean     True if late, False if not late
+	 */
     public function hasDelay()
     {
         global $conf;
 
         //Only valid members
-        if ($this->statut <= 0) {
-            return false;
-        }
+        if ($this->statut <= 0) return false;
+        if (! $this->datefin) return false;
 
         $now = dol_now();
 
diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php
index 92c21742baa..f072a066ec0 100644
--- a/htdocs/compta/bank/class/account.class.php
+++ b/htdocs/compta/bank/class/account.class.php
@@ -1102,6 +1102,7 @@ class Account extends CommonObject
         $sql.= " AND b.fk_account = ba.rowid";
         $sql.= " AND ba.entity IN (".getEntity('bank_account', 1).")";
         $sql.= " AND (ba.rappro = 1 AND ba.courant != 2)";	// Compte rapprochable
+        $sql.= " AND clos = 0";
         if ($filteraccountid) $sql.=" AND ba.rowid = ".$filteraccountid;
 
         $resql=$this->db->query($sql);
diff --git a/htdocs/compta/bank/index.php b/htdocs/compta/bank/index.php
index 7ea3bf1be5a..380b8cff3e8 100644
--- a/htdocs/compta/bank/index.php
+++ b/htdocs/compta/bank/index.php
@@ -105,7 +105,7 @@ foreach ($accounts as $key=>$type)
 		$solde = $acc->solde(1);
 
 		print '<tr '.$bc[$var].'>';
-		print '<td width="30%">'.$acc->getNomUrl(1).'</td>';
+		print '<td class="titlefield">'.$acc->getNomUrl(1).'</td>';
 		print '<td>'.$acc->bank.'</td>';
 		print '<td>'.$acc->number.'</td>';
 		print '<td align="center">';
@@ -116,7 +116,7 @@ foreach ($accounts as $key=>$type)
                 setEventMessages($acc->error, $acc->errors, 'errors');
             } else {
                 print $result->nbtodo;
-                if ($result->nbtodolate) print ' ('.$result->nbtodolate.img_warning($langs->trans("Late")).')';
+                if ($result->nbtodolate) print ' &nbsp; ('.$result->nbtodolate.img_warning($langs->trans("Late")).')';
             }
 		}
 		else print $langs->trans("FeatureDisabled");
diff --git a/htdocs/contrat/services.php b/htdocs/contrat/services.php
index 2f1c3697058..e1616026cbc 100644
--- a/htdocs/contrat/services.php
+++ b/htdocs/contrat/services.php
@@ -1,6 +1,6 @@
 <?php
 /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
  * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
  *
@@ -291,7 +291,7 @@ if ($resql)
 			print '<td align="center">';
 			print ($obj->date_ouverture_prevue?dol_print_date($db->jdate($obj->date_ouverture_prevue)):'&nbsp;');
 			if ($db->jdate($obj->date_ouverture_prevue) && ($db->jdate($obj->date_ouverture_prevue) < ($now - $conf->contrat->services->inactifs->warning_delay)))
-			print img_picto($langs->trans("Late"),"warning");
+			print ' '.img_picto($langs->trans("Late"),"warning");
 			else print '&nbsp;&nbsp;&nbsp;&nbsp;';
 			print '</td>';
 		}
diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php
index ff6434154c6..f046b4ea61f 100644
--- a/htdocs/expensereport/card.php
+++ b/htdocs/expensereport/card.php
@@ -1401,6 +1401,7 @@ else
 				print '<td>'.$langs->trans("NotePrivate").'</td>';
 				print '<td colspan="2">'.$object->note_private.'</td>';
 				print '</tr>';
+				// Amount
 				print '<tr>';
 				print '<td>'.$langs->trans("AmountHT").'</td>';
 				print '<td>'.price($object->total_ht).'</td>';
@@ -1412,9 +1413,8 @@ else
 				if($object->fk_statut==6) $rowspan+=2;
 
 				print '<td rowspan="'.$rowspan.'" valign="top">';
-				/*
-				 * Payments
-				 */
+				
+				// List of payments
 				$sql = "SELECT p.rowid, p.num_payment, p.datep as dp, p.amount,";
 				$sql.= "c.code as type_code,c.libelle as payment_type";
 				$sql.= " FROM ".MAIN_DB_PREFIX."payment_expensereport as p";
@@ -1499,9 +1499,13 @@ else
 				}
 				print '</td></tr>';
 
+				// Validation date
 				print '<tr>';
 				print '<td>'.$langs->trans("DATE_SAVE").'</td>';
-				print '<td>'.dol_print_date($object->date_create,'dayhour').'</td></tr>';
+				print '<td>'.dol_print_date($object->date_create,'dayhour');
+				if ($object->status == 2 && $object->hasDelay('toapprove')) print ' '.img_warning($langs->trans("Late"));
+				if ($object->status == 5 && $object->hasDelay('topay')) print ' '.img_warning($langs->trans("Late"));
+				print '</td></tr>';
 				print '</tr>';
 
 				// User to inform
@@ -1515,7 +1519,11 @@ else
 						$userfee=new User($db);
 						$userfee->fetch($object->fk_user_validator);
 						print $userfee->getNomUrl(1);
-						if (empty($userfee->email) || ! isValidEmail($userfee->email)) print img_warning($langs->trans("EmailNotValid"));
+						if (empty($userfee->email) || ! isValidEmail($userfee->email)) 
+						{
+						    $langs->load("errors");
+						    print img_warning($langs->trans("ErrorBadEMail", $userfee->email));
+						}
 					}
 					print '</td></tr>';
 				}
diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php
index 6394b977908..f0467648af8 100644
--- a/htdocs/expensereport/class/expensereport.class.php
+++ b/htdocs/expensereport/class/expensereport.class.php
@@ -1613,6 +1613,28 @@ class ExpenseReport extends CommonObject
             return -1;
         }
     }
+    
+    /**
+     * Return if an expense report is late or not
+     *
+     * @param  string  $option          'topay' or 'toapprove'
+     * @return boolean                  True if late, False if not late
+     */
+    public function hasDelay($option)
+    {
+        global $conf;
+    
+        //Only valid members
+        if ($option == 'toapprove' && $this->status != 2) return false;
+        if ($option == 'topay' && $this->status != 5) return false;
+    
+        $now = dol_now();
+    
+        if ($option == 'toapprove')
+            return $this->datevalid < ($now - $conf->expensereport->approve->warning_delay);
+        else
+            return $this->datevalid < ($now - $conf->expensereport->payment->warning_delay);
+    }    
 }
 
 
diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php
index b7f5be64455..8175c130ef6 100644
--- a/htdocs/expensereport/list.php
+++ b/htdocs/expensereport/list.php
@@ -81,7 +81,6 @@ $fieldstosearchall = array(
 
 $form = new Form($db);
 $formother = new FormOther($db);
-$expensereporttmp=new ExpenseReport($db);
 
 llxHeader('', $langs->trans("ListOfTrips"));
 
@@ -104,7 +103,7 @@ $pageprev = $page - 1;
 $pagenext = $page + 1;
 
 $sql = "SELECT d.rowid, d.ref, d.fk_user_author, d.total_ht, d.total_tva, d.total_ttc, d.fk_statut as status,";
-$sql.= " d.date_debut, d.date_fin,";
+$sql.= " d.date_debut, d.date_fin, d.date_valid,";
 $sql.= " u.rowid as id_user, u.firstname, u.lastname";
 $sql.= " FROM ".MAIN_DB_PREFIX."expensereport as d";
 $sql.= " INNER JOIN ".MAIN_DB_PREFIX."user as u ON d.fk_user_author = u.rowid";
@@ -244,7 +243,8 @@ if ($resql)
 	print '</td>';
 
 	// User
-	if ($user->rights->expensereport->readall || $user->rights->expensereport->lire_tous){
+	if ($user->rights->expensereport->readall || $user->rights->expensereport->lire_tous)
+	{
 		print '<td class="liste_titre" align="left">';
 		print $form->select_dolusers($search_user, 'search_user', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300');
 		print '</td>';
@@ -280,7 +280,7 @@ if ($resql)
 	
 	$expensereportstatic=new ExpenseReport($db);
 
-	if($num > 0)
+	if ($num > 0)
 	{
 		while ($i < min($num,$limit))
 		{
@@ -288,21 +288,27 @@ if ($resql)
 			
 			$expensereportstatic->id=$objp->rowid;
 			$expensereportstatic->ref=$objp->ref;
+			$expensereportstatic->status=$objp->status;
+			$expensereportstatic->valid=$objp->date_valid;
+			$expensereportstatic->date_debut=$objp->date_debut;
+			$expensereportstatic->date_fin=$objp->date_fin;
 
 			$var=!$var;
 			print "<tr ".$bc[$var].">";
-			print '<td>'.$expensereportstatic->getNomUrl(1).'</td>';
+			print '<td>';
+			print $expensereportstatic->getNomUrl(1);
+			print $expensereportstatic->status;
+			if ($expensereportstatic->status == 2 && $expensereportstatic->hasDelay('toappove')) print img_warning($langs->trans("Late"));
+			if ($expensereportstatic->status == 5 && $expensereportstatic->hasDelay('topay')) print img_warning($langs->trans("Late"));
+			print '</td>';
 			print '<td align="center">'.($objp->date_debut > 0 ? dol_print_date($objp->date_debut, 'day') : '').'</td>';
 			print '<td align="center">'.($objp->date_fin > 0 ? dol_print_date($objp->date_fin, 'day') : '').'</td>';
 			print '<td align="left"><a href="'.DOL_URL_ROOT.'/user/card.php?id='.$objp->id_user.'">'.img_object($langs->trans("ShowUser"),"user").' '.dolGetFirstLastname($objp->firstname, $objp->lastname).'</a></td>';
 			print '<td align="right">'.price($objp->total_ht).'</td>';
 			print '<td align="right">'.price($objp->total_tva).'</td>';
 			print '<td align="right">'.price($objp->total_ttc).'</td>';
-
-			$expensereporttmp->status=$objp->status;
 			print '<td align="right">';
-			//print $objp->status;
-			print $expensereporttmp->getLibStatut(5);
+			print $expensereportstatic->getLibStatut(5);
 			print '</td>';
 
 			print '<td></td>';
diff --git a/htdocs/index.php b/htdocs/index.php
index b28038e63c9..2a524d56078 100644
--- a/htdocs/index.php
+++ b/htdocs/index.php
@@ -473,7 +473,7 @@ if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->s
 {
     include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     $board=new Account($db);
-    $nb = $board::countAccountToReconcile();
+    $nb = $board::countAccountToReconcile();    // Get nb of account to reconciliate
     if ($nb > 0)
     {
         $dashboardlines[] = $board->load_board($user);
diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php
index 2ad8d972638..2e78ea94bbf 100644
--- a/htdocs/projet/list.php
+++ b/htdocs/projet/list.php
@@ -558,6 +558,9 @@ if ($resql)
     	$projectstatic->user_author_id = $obj->fk_user_creat;
     	$projectstatic->public = $obj->public;
     	$projectstatic->ref = $obj->ref;
+    	$projectstatic->datee = $obj->date_end;
+    	$projectstatic->statut = $obj->fk_statut;
+    	$projectstatic->opp_status = $obj->fk_opp_status;
     	 
     	$userAccess = $projectstatic->restrictedProjectArea($user);    // why this ?
     	if ($userAccess >= 0)
@@ -570,6 +573,7 @@ if ($resql)
         	{
         		print '<td class="nowrap">';
         		print $projectstatic->getNomUrl(1);
+        		if ($projectstatic->hasDelay()) print img_warning($langs->trans('Late'));
         		print '</td>';
         	}
     		// Title
diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php
index c37812a511f..a1c7693b4b7 100644
--- a/htdocs/projet/tasks/list.php
+++ b/htdocs/projet/tasks/list.php
@@ -213,7 +213,7 @@ else dol_print_error($db);
 if (count($listoftaskcontacttype) == 0) $listoftaskcontacttype[0]='0';         // To avoid sql syntax error if not found
 
 $distinct='DISTINCT';   // We add distinct until we are added a protection to be sure a contact of a project and task is only once.
-$sql = "SELECT ".$distinct." p.rowid as projectid, p.ref as projectref, p.title as projecttitle, p.fk_statut as projectstatus, p.fk_opp_status, p.public, p.fk_user_creat as projectusercreate";
+$sql = "SELECT ".$distinct." p.rowid as projectid, p.ref as projectref, p.title as projecttitle, p.fk_statut as projectstatus, p.datee as projectdatee, p.fk_opp_status, p.public, p.fk_user_creat as projectusercreate";
 $sql.= ", s.nom as name, s.rowid as socid";
 $sql.= ", t.datec as date_creation, t.dateo as date_start, t.datee as date_end, t.tms as date_update";
 $sql.= ", t.rowid as id, t.ref, t.label, t.planned_workload, t.duration_effective, t.progress, t.fk_statut";
@@ -550,13 +550,14 @@ if ($resql)
     	$projectstatic->title = $obj->projecttitle;
     	$projectstatic->public = $obj->public;
     	$projectstatic->statut = $obj->projectstatus;
-    	$projectstatic->datee = $obj->date_end;
+    	$projectstatic->datee = $obj->projectdatee;
     	
     	$taskstatic->id = $obj->id;
     	$taskstatic->ref = $obj->ref;
     	$taskstatic->label = $obj->label;
     	$taskstatic->fk_statut = $obj->fk_statut;
     	$taskstatic->progress = $obj->progress;
+    	$taskstatic->datee = $obj->date_end;
     	
     	$userAccess = $projectstatic->restrictedProjectArea($user);    // why this ?
     	if ($userAccess >= 0)
@@ -607,6 +608,7 @@ if ($resql)
         	{
         	    print '<td>';
         	    print $taskstatic->getNomUrl(1,'withproject');
+        		if ($taskstatic->hasDelay()) print img_warning("Late");
         	    print '</td>';
         	}        	 
     	    // Label
-- 
GitLab