From 064f38b89e65048de2ef94427c7d9b4273f465c1 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Mon, 2 Jan 2017 12:17:27 +0100
Subject: [PATCH] Fix condition to show time spent on project overview

---
 htdocs/langs/en_US/projects.lang   |  1 +
 htdocs/projet/class/task.class.php |  6 +++--
 htdocs/projet/element.php          | 43 +++++++++++++++++-------------
 3 files changed, 30 insertions(+), 20 deletions(-)

diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang
index ecf61d17d36..392e20697aa 100644
--- a/htdocs/langs/en_US/projects.lang
+++ b/htdocs/langs/en_US/projects.lang
@@ -58,6 +58,7 @@ TaskDateEnd=Task end date
 TaskDescription=Task description
 NewTask=New task
 AddTask=Create task
+AddTimeSpent=Create time spent
 Activity=Activity
 Activities=Tasks/activities
 MyActivities=My tasks/activities
diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php
index 15e3b154b20..ec180704563 100644
--- a/htdocs/projet/class/task.class.php
+++ b/htdocs/projet/class/task.class.php
@@ -1039,12 +1039,12 @@ class Task extends CommonObject
     }
 
     /**
-     *  Calculate value of time consumed using the thm (hourly amount value of work for user entering time)
+     *  Calculate quantity and value of time consumed using the thm (hourly amount value of work for user entering time)
      *
      *	@param		User		$fuser		Filter on a dedicated user
      *  @param		string		$dates		Start date (ex 00:00:00)
      *  @param		string		$datee		End date (ex 23:59:59)
-     *  @return 	array	        		Array of info for task array('amount')
+     *  @return 	array	        		Array of info for task array('amount','nbseconds','nblinesnull')
      */
     function getSumOfAmount($fuser='', $dates='', $datee='')
     {
@@ -1055,6 +1055,7 @@ class Task extends CommonObject
         $result=array();
 
         $sql = "SELECT";
+        $sql.= " SUM(t.task_duration) as nbseconds,";
         $sql.= " SUM(t.task_duration / 3600 * ".$this->db->ifsql("t.thm IS NULL", 0, "t.thm").") as amount, SUM(".$this->db->ifsql("t.thm IS NULL", 1, 0).") as nblinesnull";
         $sql.= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
         $sql.= " WHERE t.fk_task = ".$id;
@@ -1081,6 +1082,7 @@ class Task extends CommonObject
             $obj = $this->db->fetch_object($resql);
 
             $result['amount'] = $obj->amount;
+            $result['nbseconds'] = $obj->nbseconds;
             $result['nblinesnull'] = $obj->nblinesnull;
 
             $this->db->free($resql);
diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php
index 710807dcdec..1916405fde4 100644
--- a/htdocs/projet/element.php
+++ b/htdocs/projet/element.php
@@ -370,6 +370,18 @@ $listofreferent=array(
     'buttonnew'=>'AddDonation',
     'testnew'=>$user->rights->don->creer,
     'test'=>$conf->don->enabled && $user->rights->don->lire),
+'project_task'=>array(
+	'name'=>"TaskTimeValorised",
+	'title'=>"ListTaskTimeUserProject",
+	'class'=>'Task',
+	'margin'=>'minus',
+	'table'=>'projet_task',
+	'datefieldname'=>'task_date',
+	'disableamount'=>0,
+    'urlnew'=>DOL_URL_ROOT.'/projet/tasks.php?id='.$id,
+    'buttonnew'=>'AddTimeSpent',
+    'testnew'=>$user->rights->projet->creer,
+    'test'=>($conf->projet->enabled && $user->rights->projet->lire && empty($conf->global->PROJECT_HIDE_TASKS))),
 'agenda'=>array(
 	'name'=>"Agenda",
 	'title'=>"ListActionsAssociatedProject",
@@ -382,15 +394,6 @@ $listofreferent=array(
     'buttonnew'=>'AddEvent',
     'testnew'=>$user->rights->agenda->myactions->create,
     'test'=>$conf->agenda->enabled && $user->rights->agenda->myactions->read),
-'project_task'=>array(
-	'name'=>"TaskTimeValorised",
-	'title'=>"ListTaskTimeUserProject",
-	'class'=>'Task',
-	'margin'=>'minus',
-	'table'=>'projet_task',
-	'datefieldname'=>'task_date',
-	'disableamount'=>0,
-	'test'=>$conf->projet->enabled && $user->rights->projet->lire && empty($conf->global->PROJECT_HIDE_TASKS)),
 );
 
 $parameters=array('listofreferent'=>$listofreferent);
@@ -691,6 +694,7 @@ foreach ($listofreferent as $key => $value)
 		print '<td'.(($tablename != 'actioncomm' && $tablename != 'projet_task') ? ' style="width: 200px"':'').'>'.$langs->trans("Ref").'</td>';
 		// Date
 		print '<td'.(($tablename != 'actioncomm' && $tablename != 'projet_task') ? ' style="width: 200px"':'').' align="center">';
+		if (in_array($tablename, array('projet_task'))) print $langs->trans("TimeSpent");
 		if (! in_array($tablename, array('projet_task'))) print $langs->trans("Date");
 		print '</td>';
 		// Thirdparty or user
@@ -784,9 +788,9 @@ foreach ($listofreferent as $key => $value)
 					print '<a href="' . $_SERVER["PHP_SELF"] . '?id=' . $projectid . '&action=unlink&tablename=' . $tablename . '&elementselect=' . $element->id . '">' . img_picto($langs->trans('Unlink'), 'editdelete') . '</a>';
 				}
 				print "</td>\n";
+				
 				// Ref
 				print '<td align="left">';
-
 				if ($tablename == 'expensereport_det')
 				{
 					print $expensereport->getNomUrl(1);
@@ -822,10 +826,9 @@ foreach ($listofreferent as $key => $value)
 					// Show customer ref
 					if (! empty($element->ref_customer)) print ' - '.$element->ref_customer;
 				}
-
 				print "</td>\n";
 
-				// Date
+				// Date or TimeSpent
 				$date='';
 				if ($tablename == 'expensereport_det') $date = $element->date;      // No draft status on lines
 				elseif (! empty($element->status) || ! empty($element->statut) || ! empty($element->fk_status))
@@ -851,7 +854,12 @@ foreach ($listofreferent as $key => $value)
 				    print dol_print_date($element->datep,'dayhour');
 				    if ($element->datef && $element->datef > $element->datep) print " - ".dol_print_date($element->datef,'dayhour');
 				}
-				else print dol_print_date($date,'day');
+				else if (in_array($tablename, array('projet_task'))) 
+				{
+				    $tmpprojtime = $element->getSumOfAmount($elementuser, $dates, $datee);	// $element is a task. $elementuser may be empty
+				    print convertSecondToTime($tmpprojtime['nbseconds'], 'allhourmin');
+				}
+				else print 'e'.dol_print_date($date,'day');
 				print '</td>';
 
 				// Third party or user
@@ -885,14 +893,13 @@ foreach ($listofreferent as $key => $value)
 				    $total_ht_by_line=null;
 				    $othermessage='';
 					if ($tablename == 'don') $total_ht_by_line=$element->amount;
-					elseif ($tablename == 'projet_task')
+					elseif (in_array($tablename, array('projet_task')))
 					{
 					    if (! empty($conf->salaries->enabled))
 					    {
-					        // TODO Permission to read daily rate
-    					    $tmp = $element->getSumOfAmount($elementuser, $dates, $datee);	// $element is a task. $elementuser may be empty
-    						$total_ht_by_line = price2num($tmp['amount'],'MT');
-    						if ($tmp['nblinesnull'] > 0)
+        				    // TODO Permission to read daily rate to show value
+					        $total_ht_by_line = price2num($tmpprojtime['amount'],'MT');
+    						if ($tmpprojtime['nblinesnull'] > 0)
     						{
     							$langs->load("errors");
     							$warning=$langs->trans("WarningSomeLinesWithNullHourlyRate", $conf->currency);
-- 
GitLab