NEW: Show difference between timespent by everybody and time spent by

user making timesheet into timesheet pages.
NEW: Can enter start hours of task when creating timesheet
This commit is contained in:
Laurent Destailleur 2015-03-05 13:48:57 +01:00
parent 8b5dd4910f
commit d7ab3f112c
9 changed files with 140 additions and 54 deletions

View File

@ -177,15 +177,21 @@ function project_timesheet_prepare_head($mode)
$h = 0; $h = 0;
$head[$h][0] = DOL_URL_ROOT."/projet/activity/perday.php".($mode?'?mode='.$mode:''); if (empty($conf->global->PROJECT_DISABLE_TIMESHEET_PERDAY))
$head[$h][1] = $langs->trans("InputPerDay"); {
$head[$h][2] = 'inputperday'; $head[$h][0] = DOL_URL_ROOT."/projet/activity/perday.php".($mode?'?mode='.$mode:'');
$h++; $head[$h][1] = $langs->trans("InputPerDay");
$head[$h][2] = 'inputperday';
$h++;
}
$head[$h][0] = DOL_URL_ROOT."/projet/activity/pertime.php".($mode?'?mode='.$mode:''); if (empty($conf->global->PROJECT_DISABLE_TIMESHEET_PERTIME))
$head[$h][1] = $langs->trans("InputPerTime"); {
$head[$h][2] = 'inputpertime'; $head[$h][0] = DOL_URL_ROOT."/projet/activity/pertime.php".($mode?'?mode='.$mode:'');
$h++; $head[$h][1] = $langs->trans("InputPerTime");
$head[$h][2] = 'inputpertime';
$h++;
}
complete_head_from_modules($conf,$langs,null,$head,$h,'project_timesheet'); complete_head_from_modules($conf,$langs,null,$head,$h,'project_timesheet');
@ -524,20 +530,22 @@ function projectLinesPerTime(&$inc, $parent, $lines, &$level, &$projectsrole, &$
// If we want all or we have a role on task, we show it // If we want all or we have a role on task, we show it
if (empty($mine) || ! empty($tasksrole[$lines[$i]->id])) if (empty($mine) || ! empty($tasksrole[$lines[$i]->id]))
{ {
print "<tr ".$bc[$var].">\n";
// Project
print "<td>";
$projectstatic->id=$lines[$i]->fk_project; $projectstatic->id=$lines[$i]->fk_project;
$projectstatic->ref=$lines[$i]->projectref; $projectstatic->ref=$lines[$i]->projectref;
$projectstatic->public=$lines[$i]->public; $projectstatic->public=$lines[$i]->public;
$projectstatic->label=$langs->transnoentitiesnoconv("YourRole").': '.$projectsrole[$lines[$i]->fk_project]; $projectstatic->label=$langs->transnoentitiesnoconv("YourRole").': '.$projectsrole[$lines[$i]->fk_project];
$taskstatic->id=$lines[$i]->id;
print "<tr ".$bc[$var].">\n";
// Project
print "<td>";
print $projectstatic->getNomUrl(1); print $projectstatic->getNomUrl(1);
print "</td>"; print "</td>";
// Ref // Ref
print '<td>'; print '<td>';
$taskstatic->id=$lines[$i]->id;
$taskstatic->ref=($lines[$i]->ref?$lines[$i]->ref:$lines[$i]->id); $taskstatic->ref=($lines[$i]->ref?$lines[$i]->ref:$lines[$i]->id);
print $taskstatic->getNomUrl(1); print $taskstatic->getNomUrl(1);
print '</td>'; print '</td>';
@ -564,8 +572,9 @@ function projectLinesPerTime(&$inc, $parent, $lines, &$level, &$projectsrole, &$
print $formother->select_percent($lines[$i]->progress, $lines[$i]->id . 'progress'); print $formother->select_percent($lines[$i]->progress, $lines[$i]->id . 'progress');
print '</td>'; print '</td>';
// Time spent // Time spent by everybody
print '<td align="right">'; print '<td align="right">';
// $lines[$i]->duration is a denormalised field = summ of time spent by everybody for task. What we need is time consummed by user
if ($lines[$i]->duration) if ($lines[$i]->duration)
{ {
print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.'">'; print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.'">';
@ -575,6 +584,13 @@ function projectLinesPerTime(&$inc, $parent, $lines, &$level, &$projectsrole, &$
else print '--:--'; else print '--:--';
print "</td>\n"; print "</td>\n";
// Time spent by user
print '<td align="right">';
$tmptimespent=$taskstatic->getSummaryOfTimeSpent();
if ($tmptimespent['total_duration']) print convertSecondToTime($tmptimespent['total_duration'],'allhourmin');
else print '--:--';
print "</td>\n";
$disabledproject=1;$disabledtask=1; $disabledproject=1;$disabledtask=1;
//print "x".$lines[$i]->fk_project; //print "x".$lines[$i]->fk_project;
//var_dump($lines[$i]); //var_dump($lines[$i]);
@ -592,11 +608,13 @@ function projectLinesPerTime(&$inc, $parent, $lines, &$level, &$projectsrole, &$
} }
// Form to add new time // Form to add new time
print '<td class="nowrap" align="right">'; print '<td class="nowrap" align="center">';
$s=''; $s='';
$s.=$form->select_date('',$lines[$i]->id,0,0,2,"addtime",1,0,1,$disabledtask); $s.=$form->select_date('',$lines[$i]->id,1,1,2,"addtime",1,0,1,$disabledtask);
$s.='&nbsp;&nbsp;&nbsp;'; print $s;
$s.=$form->select_duration($lines[$i]->id,'',$disabledtask,'text',0,1); print '</td><td align="right">';
//$s.='&nbsp;&nbsp;&nbsp;';
$s=$form->select_duration($lines[$i]->id.'duration','',$disabledtask,'text',0,1);
$s.='&nbsp;<input type="submit" class="button"'.($disabledtask?' disabled="disabled"':'').' value="'.$langs->trans("Add").'">'; $s.='&nbsp;<input type="submit" class="button"'.($disabledtask?' disabled="disabled"':'').' value="'.$langs->trans("Add").'">';
print $s; print $s;
print '</td>'; print '</td>';
@ -713,9 +731,9 @@ function projectLinesPerDay(&$inc, $parent, $lines, &$level, &$projectsrole, &$t
print $formother->select_percent($lines[$i]->progress, $lines[$i]->id . 'progress'); print $formother->select_percent($lines[$i]->progress, $lines[$i]->id . 'progress');
print '</td>'; print '</td>';
// Time spent // Time spent by everybody
/*
print '<td align="right">'; print '<td align="right">';
// $lines[$i]->duration is a denormalised field = summ of time spent by everybody for task. What we need is time consummed by user
if ($lines[$i]->duration) if ($lines[$i]->duration)
{ {
print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.'">'; print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.'">';
@ -724,7 +742,13 @@ function projectLinesPerDay(&$inc, $parent, $lines, &$level, &$projectsrole, &$t
} }
else print '--:--'; else print '--:--';
print "</td>\n"; print "</td>\n";
*/
// Time spent by user
print '<td align="right">';
$tmptimespent=$taskstatic->getSummaryOfTimeSpent();
if ($tmptimespent['total_duration']) print convertSecondToTime($tmptimespent['total_duration'],'allhourmin');
else print '--:--';
print "</td>\n";
$disabledproject=1;$disabledtask=1; $disabledproject=1;$disabledtask=1;
//print "x".$lines[$i]->fk_project; //print "x".$lines[$i]->fk_project;

View File

@ -19,6 +19,10 @@
-- -- VMYSQL4.1 DELETE FROM llx_usergroup_user WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup); -- -- VMYSQL4.1 DELETE FROM llx_usergroup_user WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup);
UPDATE llx_projet_task_time SET task_datehour = task_date where task_datehour IS NULL;
ALTER TABLE llx_projet_task_time ADD COLUMN task_date_withhour integer DEFAULT 0 after task_datehour;
ALTER TABLE llx_commande_fournisseur MODIFY COLUMN date_livraison datetime; ALTER TABLE llx_commande_fournisseur MODIFY COLUMN date_livraison datetime;
-- Add id commandefourndet in llx_commande_fournisseur_dispatch to correct /fourn/commande/dispatch.php display when several times same product in supplier order -- Add id commandefourndet in llx_commande_fournisseur_dispatch to correct /fourn/commande/dispatch.php display when several times same product in supplier order

View File

@ -20,8 +20,9 @@ create table llx_projet_task_time
( (
rowid integer AUTO_INCREMENT PRIMARY KEY, rowid integer AUTO_INCREMENT PRIMARY KEY,
fk_task integer NOT NULL, fk_task integer NOT NULL,
task_date date, -- only the day task_date date, -- only the day
task_datehour datetime, -- day + hour task_datehour datetime, -- day + hour
task_date_withhour integer DEFAULT 0; -- 0 by default, 1 if date was entered with start hour
task_duration double, task_duration double,
fk_user integer, fk_user integer,
thm double(24,8), thm double(24,8),

View File

@ -220,6 +220,7 @@ Cards=Cards
Card=Card Card=Card
Now=Now Now=Now
Date=Date Date=Date
DateAndHour=Date and hour
DateStart=Date start DateStart=Date start
DateEnd=Date end DateEnd=Date end
DateCreation=Creation date DateCreation=Creation date

View File

@ -31,6 +31,8 @@ NoProject=No project defined or owned
NbOpenTasks=Nb of opened tasks NbOpenTasks=Nb of opened tasks
NbOfProjects=Nb of projects NbOfProjects=Nb of projects
TimeSpent=Time spent TimeSpent=Time spent
TimeSpentByYou=Time spent by you
TimeSpentByUser=Time spent by user
TimesSpent=Time spent TimesSpent=Time spent
RefTask=Ref. task RefTask=Ref. task
LabelTask=Label task LabelTask=Label task

View File

@ -83,8 +83,10 @@ $taskstatic = new Task($db);
$title=$langs->trans("TimeSpent"); $title=$langs->trans("TimeSpent");
if ($mine) $title=$langs->trans("MyTimeSpent"); if ($mine) $title=$langs->trans("MyTimeSpent");
$usertoprocess=$user;
//$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1); //$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1);
$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1); // Return all project i have permission on. I want my tasks and some of my task may be on a public projet that is not my project $projectsListId = $projectstatic->getProjectsAuthorizedForUser($usertoprocess,0,1); // Return all project i have permission on. I want my tasks and some of my task may be on a public projet that is not my project
if ($id) if ($id)
{ {
@ -94,8 +96,8 @@ if ($id)
$onlyopened=1; // or -1 $onlyopened=1; // or -1
$tasksarray=$taskstatic->getTasksArray(0,0,($project->id?$project->id:$projectsListId),$socid,0,'',$onlyopened); // We want to see all task of opened project i am allowed to see, not only mine. Later only mine will be editable later. $tasksarray=$taskstatic->getTasksArray(0,0,($project->id?$project->id:$projectsListId),$socid,0,'',$onlyopened); // We want to see all task of opened project i am allowed to see, not only mine. Later only mine will be editable later.
$projectsrole=$taskstatic->getUserRolesForProjectsOrTasks($user,0,($project->id?$project->id:$projectsListId),0); $projectsrole=$taskstatic->getUserRolesForProjectsOrTasks($usertoprocess,0,($project->id?$project->id:$projectsListId),0);
$tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0,$user,($project->id?$project->id:$projectsListId),0); $tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0,$usertoprocess,($project->id?$project->id:$projectsListId),0);
//var_dump($tasksarray); //var_dump($tasksarray);
//var_dump($projectsrole); //var_dump($projectsrole);
//var_dump($taskrole); //var_dump($taskrole);
@ -184,7 +186,9 @@ print '<td>'.$langs->trans("RefTask").'</td>';
print '<td>'.$langs->trans("LabelTask").'</td>'; print '<td>'.$langs->trans("LabelTask").'</td>';
print '<td align="right">'.$langs->trans("PlannedWorkload").'</td>'; print '<td align="right">'.$langs->trans("PlannedWorkload").'</td>';
print '<td align="right">'.$langs->trans("ProgressDeclared").'</td>'; print '<td align="right">'.$langs->trans("ProgressDeclared").'</td>';
//print '<td align="right">'.$langs->trans("TimeSpent").'</td>'; print '<td align="right">'.$langs->trans("TimeSpent").'</td>';
if ($usertoprocess->id == $user->id) print '<td align="right">'.$langs->trans("TimeSpentByYou").'</td>';
else print '<td align="right">'.$langs->trans("TimeSpentByUser").'</td>';
$startday=dol_mktime(12, 0, 0, $startdayarray['first_month'], $startdayarray['first_day'], $startdayarray['first_year']); $startday=dol_mktime(12, 0, 0, $startdayarray['first_month'], $startdayarray['first_day'], $startdayarray['first_year']);
@ -204,7 +208,7 @@ if (count($tasksarray) > 0)
projectLinesPerDay($j, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask); projectLinesPerDay($j, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask);
print '<tr class="liste_total"> print '<tr class="liste_total">
<td class="liste_total" colspan="5" align="right">'.$langs->trans("Total").'</td> <td class="liste_total" colspan="7" align="right">'.$langs->trans("Total").'</td>
<td class="liste_total" width="7%" align="center"><div id="totalDay[0]">&nbsp;</div></td> <td class="liste_total" width="7%" align="center"><div id="totalDay[0]">&nbsp;</div></td>
<td class="liste_total" width="7%" align="center"><div id="totalDay[1]">&nbsp;</div></td> <td class="liste_total" width="7%" align="center"><div id="totalDay[1]">&nbsp;</div></td>
<td class="liste_total" width="7%" align="center"><div id="totalDay[2]">&nbsp;</div></td> <td class="liste_total" width="7%" align="center"><div id="totalDay[2]">&nbsp;</div></td>

View File

@ -62,8 +62,8 @@ if ($action == 'addtime' && $user->rights->projet->creer)
{ {
if (intval($time) > 0) if (intval($time) > 0)
{ {
// Hours or minutes // Hours or minutes of duration
if (preg_match("/([0-9]+)(hour|min)/",$key,$matches)) if (preg_match("/([0-9]+)duration(hour|min)/",$key,$matches))
{ {
$id = $matches[1]; $id = $matches[1];
if ($id > 0) if ($id > 0)
@ -86,15 +86,33 @@ if ($action == 'addtime' && $user->rights->projet->creer)
$task->progress = GETPOST($key . 'progress', 'int'); $task->progress = GETPOST($key . 'progress', 'int');
$task->timespent_duration = $val; $task->timespent_duration = $val;
$task->timespent_fk_user = $user->id; $task->timespent_fk_user = $user->id;
$task->timespent_date = dol_mktime(12,0,0,$_POST["{$key}month"],$_POST["{$key}day"],$_POST["{$key}year"]); if (GETPOST($key."hour") != '' && GETPOST($key."hour") >= 0) // If hour was entered
$task->addTimeSpent($user); {
$task->timespent_date = dol_mktime(GETPOST($key."hour"),GETPOST($key."min"),0,GETPOST($key."month"),GETPOST($key."day"),GETPOST($key."year"));
$task->timespent_withhour = 1;
}
else
{
$task->timespent_date = dol_mktime(12,0,0,GETPOST($key."month"),GETPOST($key."day"),GETPOST($key."year"));
}
$result=$task->addTimeSpent($user);
if ($result < 0)
{
setEventMessages($task->error, $task->errors, 'errors');
$error++;
break;
}
} }
setEventMessage($langs->trans("RecordSaved")); if (! $error)
{
setEventMessage($langs->trans("RecordSaved"));
// Redirect to avoid submit twice on back // Redirect to avoid submit twice on back
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$projectid.($mode?'&mode='.$mode:'')); header('Location: '.$_SERVER["PHP_SELF"].($projectid?'?id='.$projectid:'?').($mode?'&mode='.$mode:''));
exit; exit;
}
} }
else else
{ {
@ -116,8 +134,9 @@ $taskstatic = new Task($db);
$title=$langs->trans("TimeSpent"); $title=$langs->trans("TimeSpent");
if ($mine) $title=$langs->trans("MyTimeSpent"); if ($mine) $title=$langs->trans("MyTimeSpent");
//$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1); $usertoprocess = $user;
$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1); // Return all project i have permission on. I want my tasks and some of my task may be on a public projet that is not my project
$projectsListId = $projectstatic->getProjectsAuthorizedForUser($usertoprocess,0,1); // Return all project i have permission on. I want my tasks and some of my task may be on a public projet that is not my project
if ($id) if ($id)
{ {
@ -127,8 +146,8 @@ if ($id)
$onlyopened=1; // or -1 $onlyopened=1; // or -1
$tasksarray=$taskstatic->getTasksArray(0,0,($project->id?$project->id:$projectsListId),$socid,0,'',$onlyopened); // We want to see all task of opened project i am allowed to see, not only mine. Later only mine will be editable later. $tasksarray=$taskstatic->getTasksArray(0,0,($project->id?$project->id:$projectsListId),$socid,0,'',$onlyopened); // We want to see all task of opened project i am allowed to see, not only mine. Later only mine will be editable later.
$projectsrole=$taskstatic->getUserRolesForProjectsOrTasks($user,0,($project->id?$project->id:$projectsListId),0); $projectsrole=$taskstatic->getUserRolesForProjectsOrTasks($usertoprocess,0,($project->id?$project->id:$projectsListId),0);
$tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0,$user,($project->id?$project->id:$projectsListId),0); $tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0,$usertoprocess,($project->id?$project->id:$projectsListId),0);
//var_dump($tasksarray); //var_dump($tasksarray);
//var_dump($projectsrole); //var_dump($projectsrole);
//var_dump($taskrole); //var_dump($taskrole);
@ -184,7 +203,10 @@ print '<td>'.$langs->trans("LabelTask").'</td>';
print '<td align="right">'.$langs->trans("PlannedWorkload").'</td>'; print '<td align="right">'.$langs->trans("PlannedWorkload").'</td>';
print '<td align="right">'.$langs->trans("ProgressDeclared").'</td>'; print '<td align="right">'.$langs->trans("ProgressDeclared").'</td>';
print '<td align="right">'.$langs->trans("TimeSpent").'</td>'; print '<td align="right">'.$langs->trans("TimeSpent").'</td>';
print '<td colspan="2" align="right">'.$langs->trans("NewTimeSpent").'</td>'; if ($usertoprocess->id == $user->id) print '<td align="right">'.$langs->trans("TimeSpentByYou").'</td>';
else print '<td align="right">'.$langs->trans("TimeSpentByUser").'</td>';
print '<td align="center">'.$langs->trans("DateAndHour").'</td>';
print '<td align="center" colspan="2">'.$langs->trans("Duration").'</td>';
print "</tr>\n"; print "</tr>\n";
// By default, we can edit only tasks we are assigned to // By default, we can edit only tasks we are assigned to

View File

@ -61,6 +61,7 @@ class Task extends CommonObject
var $timespent_old_duration; var $timespent_old_duration;
var $timespent_date; var $timespent_date;
var $timespent_datehour; // More accurate start date (same than timespent_date but includes hours, minutes and seconds) var $timespent_datehour; // More accurate start date (same than timespent_date but includes hours, minutes and seconds)
var $timespent_withhour; // 1 = we entered also start hours for timesheet line
var $timespent_fk_user; var $timespent_fk_user;
var $timespent_note; var $timespent_note;
@ -780,6 +781,7 @@ class Task extends CommonObject
$sql.= "fk_task"; $sql.= "fk_task";
$sql.= ", task_date"; $sql.= ", task_date";
$sql.= ", task_datehour"; $sql.= ", task_datehour";
$sql.= ", task_date_withhour";
$sql.= ", task_duration"; $sql.= ", task_duration";
$sql.= ", fk_user"; $sql.= ", fk_user";
$sql.= ", note"; $sql.= ", note";
@ -787,6 +789,7 @@ class Task extends CommonObject
$sql.= $this->id; $sql.= $this->id;
$sql.= ", '".$this->db->idate($this->timespent_date)."'"; $sql.= ", '".$this->db->idate($this->timespent_date)."'";
$sql.= ", '".$this->db->idate($this->timespent_datehour)."'"; $sql.= ", '".$this->db->idate($this->timespent_datehour)."'";
$sql.= ", ".(empty($this->timespent_withhour)?0:1);
$sql.= ", ".$this->timespent_duration; $sql.= ", ".$this->timespent_duration;
$sql.= ", ".$this->timespent_fk_user; $sql.= ", ".$this->timespent_fk_user;
$sql.= ", ".(isset($this->timespent_note)?"'".$this->db->escape($this->timespent_note)."'":"null"); $sql.= ", ".(isset($this->timespent_note)?"'".$this->db->escape($this->timespent_note)."'":"null");
@ -816,7 +819,6 @@ class Task extends CommonObject
{ {
// Recalculate amount of time spent for task and update denormalized field // Recalculate amount of time spent for task and update denormalized field
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task"; $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task";
//$sql.= " SET duration_effective = (".$this->db->ifsql('duration_effective IS NULL', 0, 'duration_effective').") + ".price2num($this->timespent_duration);
$sql.= " SET duration_effective = (SELECT SUM(task_duration) FROM ".MAIN_DB_PREFIX."projet_task_time as ptt where ptt.fk_task = ".$this->id.")"; $sql.= " SET duration_effective = (SELECT SUM(task_duration) FROM ".MAIN_DB_PREFIX."projet_task_time as ptt where ptt.fk_task = ".$this->id.")";
if (isset($this->progress)) $sql.= ", progress = " . $this->progress; // Do not overwrite value if not provided if (isset($this->progress)) $sql.= ", progress = " . $this->progress; // Do not overwrite value if not provided
$sql.= " WHERE rowid = ".$this->id; $sql.= " WHERE rowid = ".$this->id;
@ -906,6 +908,8 @@ class Task extends CommonObject
$sql.= " t.rowid,"; $sql.= " t.rowid,";
$sql.= " t.fk_task,"; $sql.= " t.fk_task,";
$sql.= " t.task_date,"; $sql.= " t.task_date,";
$sql.= " t.task_datehour,";
$sql.= " t.task_date_withhour,";
$sql.= " t.task_duration,"; $sql.= " t.task_duration,";
$sql.= " t.fk_user,"; $sql.= " t.fk_user,";
$sql.= " t.note"; $sql.= " t.note";
@ -922,7 +926,9 @@ class Task extends CommonObject
$this->timespent_id = $obj->rowid; $this->timespent_id = $obj->rowid;
$this->id = $obj->fk_task; $this->id = $obj->fk_task;
$this->timespent_date = $obj->task_date; $this->timespent_date = $this->db->jdate($obj->task_date);
$this->timespent_datehour = $this->db->jdate($obj->task_datehour);
$this->timespent_withhour = $obj->task_date_withhour;
$this->timespent_duration = $obj->task_duration; $this->timespent_duration = $obj->task_duration;
$this->timespent_fk_user = $obj->fk_user; $this->timespent_fk_user = $obj->fk_user;
$this->timespent_note = $obj->note; $this->timespent_note = $obj->note;
@ -961,6 +967,7 @@ class Task extends CommonObject
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task_time SET"; $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task_time SET";
$sql.= " task_date = '".$this->db->idate($this->timespent_date)."',"; $sql.= " task_date = '".$this->db->idate($this->timespent_date)."',";
$sql.= " task_datehour = '".$this->db->idate($this->timespent_datehour)."',"; $sql.= " task_datehour = '".$this->db->idate($this->timespent_datehour)."',";
$sql.= " task_date_withhour = ".(empty($this->timespent_withhour)?0:1);
$sql.= " task_duration = ".$this->timespent_duration.","; $sql.= " task_duration = ".$this->timespent_duration.",";
$sql.= " fk_user = ".$this->timespent_fk_user.","; $sql.= " fk_user = ".$this->timespent_fk_user.",";
$sql.= " note = ".(isset($this->timespent_note)?"'".$this->db->escape($this->timespent_note)."'":"null"); $sql.= " note = ".(isset($this->timespent_note)?"'".$this->db->escape($this->timespent_note)."'":"null");
@ -995,7 +1002,7 @@ class Task extends CommonObject
$newDuration = $this->timespent_duration - $this->timespent_old_duration; $newDuration = $this->timespent_duration - $this->timespent_old_duration;
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task"; $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task";
$sql.= " SET duration_effective = duration_effective + '".$newDuration."'"; $sql.= " SET duration_effective = (SELECT SUM(task_duration) FROM ".MAIN_DB_PREFIX."projet_task_time as ptt where ptt.fk_task = ".$this->id.")";
$sql.= " WHERE rowid = ".$this->id; $sql.= " WHERE rowid = ".$this->id;
dol_syslog(get_class($this)."::updateTimeSpent", LOG_DEBUG); dol_syslog(get_class($this)."::updateTimeSpent", LOG_DEBUG);

View File

@ -87,7 +87,15 @@ if ($action == 'addtimespent' && $user->rights->projet->creer)
$object->progress = GETPOST('progress', 'int'); $object->progress = GETPOST('progress', 'int');
$object->timespent_duration = $_POST["timespent_durationhour"]*60*60; // We store duration in seconds $object->timespent_duration = $_POST["timespent_durationhour"]*60*60; // We store duration in seconds
$object->timespent_duration+= $_POST["timespent_durationmin"]*60; // We store duration in seconds $object->timespent_duration+= $_POST["timespent_durationmin"]*60; // We store duration in seconds
$object->timespent_date = dol_mktime(12,0,0,$_POST["timemonth"],$_POST["timeday"],$_POST["timeyear"]); if (GETPOST("timehour") != '' && GETPOST("timehour") >= 0) // If hour was entered
{
$object->timespent_date = dol_mktime(GETPOST("timehour"),GETPOST("timemin"),0,GETPOST("timemonth"),GETPOST("timeday"),GETPOST("timeyear"));
$object->timespent_withhour = 1;
}
else
{
$object->timespent_date = dol_mktime(12,0,0,GETPOST("timemonth"),GETPOST("timeday"),GETPOST("timeyear"));
}
$object->timespent_fk_user = $_POST["userid"]; $object->timespent_fk_user = $_POST["userid"];
$result=$object->addTimeSpent($user); $result=$object->addTimeSpent($user);
if ($result >= 0) if ($result >= 0)
@ -126,7 +134,15 @@ if ($action == 'updateline' && ! $_POST["cancel"] && $user->rights->projet->cree
$object->timespent_old_duration = $_POST["old_duration"]; $object->timespent_old_duration = $_POST["old_duration"];
$object->timespent_duration = $_POST["new_durationhour"]*60*60; // We store duration in seconds $object->timespent_duration = $_POST["new_durationhour"]*60*60; // We store duration in seconds
$object->timespent_duration+= $_POST["new_durationmin"]*60; // We store duration in seconds $object->timespent_duration+= $_POST["new_durationmin"]*60; // We store duration in seconds
$object->timespent_date = dol_mktime(12,0,0,$_POST["timelinemonth"],$_POST["timelineday"],$_POST["timelineyear"]); if (GETPOST("timelinehour") != '' && GETPOST("timelinehour") >= 0) // If hour was entered
{
$object->timespent_date = dol_mktime(GETPOST("timelinehour"),GETPOST("timelinemin"),0,GETPOST("timelinemonth"),GETPOST("timelineday"),GETPOST("timelineyear"));
$object->timespent_withhour = 1;
}
else
{
$object->timespent_date = dol_mktime(12,0,0,GETPOST("timelinemonth"),GETPOST("timelineday"),GETPOST("timelineyear"));
}
$object->timespent_fk_user = $_POST["userid_line"]; $object->timespent_fk_user = $_POST["userid_line"];
$result=$object->updateTimeSpent($user); $result=$object->updateTimeSpent($user);
@ -341,7 +357,7 @@ if ($id > 0 || ! empty($ref))
/* /*
* Add time spent * Form to add time spent
*/ */
if ($user->rights->projet->creer) if ($user->rights->projet->creer)
{ {
@ -367,8 +383,9 @@ if ($id > 0 || ! empty($ref))
// Date // Date
print '<td class="nowrap">'; print '<td class="nowrap">';
$newdate=dol_mktime(12,0,0,$_POST["timemonth"],$_POST["timeday"],$_POST["timeyear"]); //$newdate=dol_mktime(12,0,0,$_POST["timemonth"],$_POST["timeday"],$_POST["timeyear"]);
print $form->select_date($newdate,'time','','','',"timespent_date"); $newdate='';
print $form->select_date($newdate,'time',1,1,2,"timespent_date");
print '</td>'; print '</td>';
// Contributor // Contributor
@ -410,13 +427,13 @@ if ($id > 0 || ! empty($ref))
/* /*
* List of time spent * List of time spent
*/ */
$sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user, t.note"; $sql = "SELECT t.rowid, t.task_date, t.task_datehour, t.task_date_withhour, t.task_duration, t.fk_user, t.note";
$sql.= ", u.lastname, u.firstname"; $sql.= ", u.lastname, u.firstname";
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t"; $sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
$sql .= " , ".MAIN_DB_PREFIX."user as u"; $sql .= " , ".MAIN_DB_PREFIX."user as u";
$sql .= " WHERE t.fk_task =".$object->id; $sql .= " WHERE t.fk_task =".$object->id;
$sql .= " AND t.fk_user = u.rowid"; $sql .= " AND t.fk_user = u.rowid";
$sql .= " ORDER BY t.task_date DESC"; $sql .= " ORDER BY t.task_date DESC, t.task_datehour DESC, t.rowid DESC";
$var=true; $var=true;
$resql = $db->query($sql); $resql = $db->query($sql);
@ -459,15 +476,18 @@ if ($id > 0 || ! empty($ref))
$var=!$var; $var=!$var;
print "<tr ".$bc[$var].">"; print "<tr ".$bc[$var].">";
$date1=$db->jdate($task_time->task_date);
$date2=$db->jdate($task_time->task_datehour);
// Date // Date
print '<td>'; print '<td class="nowrap">';
if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid) if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid)
{ {
print $form->select_date($db->jdate($task_time->task_date),'timeline','','','',"timespent_date"); print $form->select_date($db->jdate($date2?$date2:$date1),'timeline',1,1,2,"timespent_date");
} }
else else
{ {
print dol_print_date($db->jdate($task_time->task_date),'day'); print dol_print_date($date2?$date2:$date1,($task_time->task_date_withhour?'dayhour':'day'));
} }
print '</td>'; print '</td>';
@ -480,6 +500,7 @@ if ($id > 0 || ! empty($ref))
$contactsoftask[]=$task_time->fk_user; $contactsoftask[]=$task_time->fk_user;
} }
if (count($contactsoftask)>0) { if (count($contactsoftask)>0) {
print img_object('','user','class="hideonsmartphone"');
print $form->select_dolusers($task_time->fk_user,'userid_line',0,'',0,'',$contactsoftask); print $form->select_dolusers($task_time->fk_user,'userid_line',0,'',0,'',$contactsoftask);
}else { }else {
print img_error($langs->trans('FirstAddRessourceToAllocateTime')).$langs->trans('FirstAddRessourceToAllocateTime'); print img_error($langs->trans('FirstAddRessourceToAllocateTime')).$langs->trans('FirstAddRessourceToAllocateTime');