Fix: management of time spent in task card
This commit is contained in:
parent
84a6def3b0
commit
da2e8dd348
@ -268,7 +268,7 @@ function PLinesb(&$inc, $parent, $lines, &$level, &$projectsrole)
|
|||||||
//var_dump($lines[$i]);
|
//var_dump($lines[$i]);
|
||||||
//var_dump($projectsrole[$lines[$i]->projectid]);
|
//var_dump($projectsrole[$lines[$i]->projectid]);
|
||||||
// If at least one role for project
|
// If at least one role for project
|
||||||
if ($lines[$i]->public || ! empty($projectsrole[$lines[$i]->projectid])) $disabled=0;
|
if ($lines[$i]->public || ! empty($projectsrole[$lines[$i]->projectid]) || $user->rights->projet->all->creer) $disabled=0;
|
||||||
|
|
||||||
print '<td nowrap="nowrap">';
|
print '<td nowrap="nowrap">';
|
||||||
print $form->select_date('',$lines[$i]->id,'','','',"addtime");
|
print $form->select_date('',$lines[$i]->id,'','','',"addtime");
|
||||||
|
|||||||
@ -60,27 +60,28 @@ if ($_POST["action"] == 'createtask' && $user->rights->projet->creer)
|
|||||||
|
|
||||||
if ($_POST["action"] == 'addtime' && $user->rights->projet->creer)
|
if ($_POST["action"] == 'addtime' && $user->rights->projet->creer)
|
||||||
{
|
{
|
||||||
foreach ($_POST as $key => $post)
|
foreach ($_POST as $key => $time)
|
||||||
{
|
{
|
||||||
//$pro->CreateTask($user, $_POST["task_name"]);
|
|
||||||
if (substr($key,0,4) == 'task')
|
if (substr($key,0,4) == 'task')
|
||||||
{
|
{
|
||||||
if ($post > 0)
|
if ($time > 0)
|
||||||
{
|
{
|
||||||
$post=intval($post)+(($post-intval($post))*(1+2/3));
|
$time = intval($time)+(($time-intval($time))*(1+2/3));
|
||||||
$post=price2num($post);
|
$time = price2num($time);
|
||||||
|
|
||||||
$id = str_replace("task","",$key);
|
$id = str_replace("task","",$key);
|
||||||
|
|
||||||
$task=new Task($db);
|
$task = new Task($db);
|
||||||
$task->fetch($id);
|
$task->fetch($id);
|
||||||
|
|
||||||
$date = dol_mktime(12,0,0,$_POST["$id"."month"],$_POST["$id"."day"],$_POST["$id"."year"]);
|
$task->timespent_duration = $time;
|
||||||
$task->addTimeSpent($user, $post, $date);
|
$task->timespent_date = dol_mktime(12,0,0,$_POST["$id"."month"],$_POST["$id"."day"],$_POST["$id"."year"]);
|
||||||
|
|
||||||
|
$task->addTimeSpent($user);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ($post != '') $mesg='<div class="error">'.$langs->trans("ErrorBadValue").'</div>';
|
if ($time != '') $mesg='<div class="error">'.$langs->trans("ErrorBadValue").'</div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,6 +56,12 @@ class Task extends CommonObject
|
|||||||
var $statut;
|
var $statut;
|
||||||
var $note_private;
|
var $note_private;
|
||||||
var $note_public;
|
var $note_public;
|
||||||
|
|
||||||
|
var $timespent_id;
|
||||||
|
var $timespent_duration;
|
||||||
|
var $timespent_date;
|
||||||
|
var $timespent_user;
|
||||||
|
var $timespent_note;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -299,6 +305,7 @@ class Task extends CommonObject
|
|||||||
function delete($user, $notrigger=0)
|
function delete($user, $notrigger=0)
|
||||||
{
|
{
|
||||||
global $conf, $langs;
|
global $conf, $langs;
|
||||||
|
|
||||||
$error=0;
|
$error=0;
|
||||||
|
|
||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
@ -586,7 +593,7 @@ class Task extends CommonObject
|
|||||||
* \param time Time spent
|
* \param time Time spent
|
||||||
* \param date date
|
* \param date date
|
||||||
*/
|
*/
|
||||||
function addTimeSpent($user, $time, $date, $notrigger=0)
|
function addTimeSpent($user, $notrigger=0)
|
||||||
{
|
{
|
||||||
$result = 0;
|
$result = 0;
|
||||||
|
|
||||||
@ -597,12 +604,12 @@ class Task extends CommonObject
|
|||||||
$sql.= ", fk_user";
|
$sql.= ", fk_user";
|
||||||
$sql.= ") VALUES (";
|
$sql.= ") VALUES (";
|
||||||
$sql.= $this->id;
|
$sql.= $this->id;
|
||||||
$sql.= ", '".$this->db->idate($date)."'";
|
$sql.= ", '".$this->db->idate($this->timespent_date)."'";
|
||||||
$sql.= ", ".$time;
|
$sql.= ", ".$this->timespent_duration;
|
||||||
$sql.= ", ".$user->id;
|
$sql.= ", ".$user->id;
|
||||||
$sql.= ")";
|
$sql.= ")";
|
||||||
|
|
||||||
dol_syslog("Task::addTimeSpent sql=".$sql, LOG_DEBUG);
|
dol_syslog(get_class($this)."::addTimeSpent sql=".$sql, LOG_DEBUG);
|
||||||
if ($this->db->query($sql) )
|
if ($this->db->query($sql) )
|
||||||
{
|
{
|
||||||
$task_id = $this->db->last_insert_id(MAIN_DB_PREFIX."projet_task");
|
$task_id = $this->db->last_insert_id(MAIN_DB_PREFIX."projet_task");
|
||||||
@ -621,17 +628,17 @@ class Task extends CommonObject
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$this->error=$this->db->lasterror();
|
$this->error=$this->db->lasterror();
|
||||||
dol_syslog("Task::addTimeSpent error -2 ".$this->error,LOG_ERR);
|
dol_syslog(get_class($this)."::addTimeSpent error -2 ".$this->error,LOG_ERR);
|
||||||
$result = -2;
|
$result = -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result == 0)
|
if ($result == 0)
|
||||||
{
|
{
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task";
|
||||||
$sql.= " SET duration_effective = duration_effective + '".price2num($time)."'";
|
$sql.= " SET duration_effective = duration_effective + '".price2num($this->timespent_duration)."'";
|
||||||
$sql.= " WHERE rowid = ".$this->id;
|
$sql.= " WHERE rowid = ".$this->id;
|
||||||
|
|
||||||
dol_syslog("Project::addTimeSpent sql=".$sql, LOG_DEBUG);
|
dol_syslog(get_class($this)."::addTimeSpent sql=".$sql, LOG_DEBUG);
|
||||||
if ($this->db->query($sql) )
|
if ($this->db->query($sql) )
|
||||||
{
|
{
|
||||||
$result = 0;
|
$result = 0;
|
||||||
@ -639,13 +646,131 @@ class Task extends CommonObject
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$this->error=$this->db->lasterror();
|
$this->error=$this->db->lasterror();
|
||||||
dol_syslog("Task::addTimeSpent error -3 ".$this->error, LOG_ERR);
|
dol_syslog(get_class($this)."::addTimeSpent error -3 ".$this->error, LOG_ERR);
|
||||||
$result = -2;
|
$result = -2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Load object in memory from database
|
||||||
|
* \param id id object
|
||||||
|
* \return int <0 if KO, >0 if OK
|
||||||
|
*/
|
||||||
|
function fetchTimeSpent($id)
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
|
||||||
|
$sql = "SELECT";
|
||||||
|
$sql.= " t.rowid,";
|
||||||
|
$sql.= " t.fk_task,";
|
||||||
|
$sql.= " t.task_date,";
|
||||||
|
$sql.= " t.task_duration,";
|
||||||
|
$sql.= " t.fk_user,";
|
||||||
|
$sql.= " t.note";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
|
||||||
|
$sql.= " WHERE t.rowid = ".$id;
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::fetchTimeSpent sql=".$sql, LOG_DEBUG);
|
||||||
|
$resql=$this->db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
if ($this->db->num_rows($resql))
|
||||||
|
{
|
||||||
|
$obj = $this->db->fetch_object($resql);
|
||||||
|
|
||||||
|
$this->timespent_id = $obj->rowid;
|
||||||
|
$this->id = $obj->fk_task;
|
||||||
|
$this->timespent_date = $obj->task_date;
|
||||||
|
$this->timespent_duration = $obj->task_duration;
|
||||||
|
$this->timespent_user = $obj->fk_user;
|
||||||
|
$this->timespent_note = $obj->note;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->db->free($resql);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error="Error ".$this->db->lasterror();
|
||||||
|
dol_syslog(get_class($this)."::fetchTimeSpent ".$this->error, LOG_ERR);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Delete time spent
|
||||||
|
* \param user User that delete
|
||||||
|
* \param notrigger 0=launch triggers after, 1=disable triggers
|
||||||
|
* \return int <0 if KO, >0 if OK
|
||||||
|
*/
|
||||||
|
function delTimeSpent($user, $notrigger=0)
|
||||||
|
{
|
||||||
|
global $conf, $langs;
|
||||||
|
|
||||||
|
$error=0;
|
||||||
|
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
$sql = "DELETE FROM ".MAIN_DB_PREFIX."projet_task_time";
|
||||||
|
$sql.= " WHERE rowid = ".$this->timespent_id;
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::delTimeSpent sql=".$sql);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
if (! $notrigger)
|
||||||
|
{
|
||||||
|
// Call triggers
|
||||||
|
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
|
||||||
|
$interface=new Interfaces($this->db);
|
||||||
|
$result=$interface->run_triggers('TASK_TIMESPENT_DELETE',$this,$user,$langs,$conf);
|
||||||
|
if ($result < 0) { $error++; $this->errors=$interface->errors; }
|
||||||
|
// End call triggers
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task";
|
||||||
|
$sql.= " SET duration_effective = duration_effective - '".price2num($this->timespent_duration)."'";
|
||||||
|
$sql.= " WHERE rowid = ".$this->id;
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::delTimeSpent sql=".$sql, LOG_DEBUG);
|
||||||
|
if ($this->db->query($sql) )
|
||||||
|
{
|
||||||
|
$result = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error=$this->db->lasterror();
|
||||||
|
dol_syslog(get_class($this)."::addTimeSpent error -3 ".$this->error, LOG_ERR);
|
||||||
|
$result = -2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Commit or rollback
|
||||||
|
if ($error)
|
||||||
|
{
|
||||||
|
foreach($this->errors as $errmsg)
|
||||||
|
{
|
||||||
|
dol_syslog(get_class($this)."::delTimeSpent ".$errmsg, LOG_ERR);
|
||||||
|
$this->error.=($this->error?', '.$errmsg:$errmsg);
|
||||||
|
}
|
||||||
|
$this->db->rollback();
|
||||||
|
return -1*$error;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->commit();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
@ -38,9 +38,18 @@ if ($_POST["action"] == 'updateline' && ! $_POST["cancel"] && $user->rights->pro
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == "yes" && $user->rights->projet->creer)
|
if ($_REQUEST["action"] == 'confirm_delete' && $_REQUEST["confirm"] == "yes" && $user->rights->projet->creer)
|
||||||
{
|
{
|
||||||
|
$task = new Task($db);
|
||||||
|
$task->fetchTimeSpent($_GET['lineid']);
|
||||||
|
$result = $task->delTimeSpent($user);
|
||||||
|
|
||||||
|
if (!$result)
|
||||||
|
{
|
||||||
|
$langs->load("errors");
|
||||||
|
$mesg='<div class="error">'.$langs->trans($task->error).'</div>';
|
||||||
|
$_POST["action"]='';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -78,7 +87,7 @@ if ($_GET["id"] > 0)
|
|||||||
|
|
||||||
if ($_GET["action"] == 'deleteline')
|
if ($_GET["action"] == 'deleteline')
|
||||||
{
|
{
|
||||||
$ret=$html->form_confirm($_SERVER["PHP_SELF"]."?id=".$_GET["id"],$langs->trans("DeleteATimeSpent"),$langs->trans("ConfirmDeleteATimeSpent"),"confirm_delete",'','',1);
|
$ret=$html->form_confirm($_SERVER["PHP_SELF"]."?id=".$_GET["id"].'&lineid='.$_GET["lineid"],$langs->trans("DeleteATimeSpent"),$langs->trans("ConfirmDeleteATimeSpent"),"confirm_delete",'','',1);
|
||||||
if ($ret == 'html') print '<br>';
|
if ($ret == 'html') print '<br>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,8 +140,8 @@ if ($_GET["id"] > 0)
|
|||||||
/*
|
/*
|
||||||
* List of time spent
|
* List of time spent
|
||||||
*/
|
*/
|
||||||
$sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user";
|
$sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user, t.note";
|
||||||
$sql.= ", u.rowid as userid, u.name, u.firstname";
|
$sql.= ", u.name, 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 =".$task->id;
|
$sql .= " WHERE t.fk_task =".$task->id;
|
||||||
@ -163,6 +172,7 @@ if ($_GET["id"] > 0)
|
|||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
print '<td>'.$langs->trans("By").'</td>';
|
print '<td>'.$langs->trans("By").'</td>';
|
||||||
print '<td>'.$langs->trans("Date").'</td>';
|
print '<td>'.$langs->trans("Date").'</td>';
|
||||||
|
print '<td>'.$langs->trans("Note").'</td>';
|
||||||
print '<td align="right">'.$langs->trans("TimeSpent").'</td>';
|
print '<td align="right">'.$langs->trans("TimeSpent").'</td>';
|
||||||
print '<td colspan="2"> </td>';
|
print '<td colspan="2"> </td>';
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
@ -173,7 +183,7 @@ if ($_GET["id"] > 0)
|
|||||||
print "<tr ".$bc[$var].">";
|
print "<tr ".$bc[$var].">";
|
||||||
|
|
||||||
// User
|
// User
|
||||||
$user->id = $task_time->userid;
|
$user->id = $task_time->fk_user;
|
||||||
$user->nom = $task_time->name;
|
$user->nom = $task_time->name;
|
||||||
$user->prenom = $task_time->firstname;
|
$user->prenom = $task_time->firstname;
|
||||||
print '<td>'.$user->getNomUrl(1).'</td>';
|
print '<td>'.$user->getNomUrl(1).'</td>';
|
||||||
@ -181,7 +191,10 @@ if ($_GET["id"] > 0)
|
|||||||
// Date
|
// Date
|
||||||
print '<td>'.dol_print_date($db->jdate($task_time->task_date),'%A').' '.dol_print_date($db->jdate($task_time->task_date),'daytext').'</td>';
|
print '<td>'.dol_print_date($db->jdate($task_time->task_date),'%A').' '.dol_print_date($db->jdate($task_time->task_date),'daytext').'</td>';
|
||||||
|
|
||||||
// Time spent
|
// Note
|
||||||
|
print '<td>'.dol_nl2br($task_time->note).'</td>';
|
||||||
|
|
||||||
|
// Time spent
|
||||||
$heure = intval($task_time->task_duration);
|
$heure = intval($task_time->task_duration);
|
||||||
$minutes = round((($task_time->task_duration - $heure) * 60),0);
|
$minutes = round((($task_time->task_duration - $heure) * 60),0);
|
||||||
$minutes = substr("00"."$minutes", -2);
|
$minutes = substr("00"."$minutes", -2);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user