Work on new timesheet input pages.
This commit is contained in:
parent
c700d8a8ec
commit
5d4d8151c1
@ -122,7 +122,28 @@ function updateTotal(days,mode)
|
|||||||
var nbline = document.getElementById('numberOfLines').value;
|
var nbline = document.getElementById('numberOfLines').value;
|
||||||
for (var i=0;i<nbline;i++)
|
for (var i=0;i<nbline;i++)
|
||||||
{
|
{
|
||||||
var id='task['+i+']['+days+']';
|
var id='timespent['+i+']['+days+']';
|
||||||
|
var taskTime= new Date(0);
|
||||||
|
var element=document.getElementById(id);
|
||||||
|
if(element)
|
||||||
|
{
|
||||||
|
/* alert(element.value);*/
|
||||||
|
if (element.value)
|
||||||
|
{
|
||||||
|
result=parseTime(element.value,taskTime);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result=parseTime(element.innerHTML,taskTime);
|
||||||
|
}
|
||||||
|
if (result >= 0)
|
||||||
|
{
|
||||||
|
total.setHours(total.getHours()+taskTime.getHours());
|
||||||
|
total.setMinutes(total.getMinutes()+taskTime.getMinutes());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var id='timeadded['+i+']['+days+']';
|
||||||
var taskTime= new Date(0);
|
var taskTime= new Date(0);
|
||||||
var element=document.getElementById(id);
|
var element=document.getElementById(id);
|
||||||
if(element)
|
if(element)
|
||||||
@ -152,7 +173,23 @@ function updateTotal(days,mode)
|
|||||||
var nbline = document.getElementById('numberOfLines').value;
|
var nbline = document.getElementById('numberOfLines').value;
|
||||||
for (var i=0;i<nbline;i++)
|
for (var i=0;i<nbline;i++)
|
||||||
{
|
{
|
||||||
var id='task['+i+']['+days+']';
|
var id='timespent['+i+']['+days+']';
|
||||||
|
var taskTime= new Date(0);
|
||||||
|
var element=document.getElementById(id);
|
||||||
|
if(element)
|
||||||
|
{
|
||||||
|
if (element.value)
|
||||||
|
{
|
||||||
|
total+=parseInt(element.value);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
total+=parseInt(element.innerHTML);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var id='timeadded['+i+']['+days+']';
|
||||||
var taskTime= new Date(0);
|
var taskTime= new Date(0);
|
||||||
var element=document.getElementById(id);
|
var element=document.getElementById(id);
|
||||||
if(element)
|
if(element)
|
||||||
|
|||||||
@ -177,7 +177,15 @@ function project_timesheet_prepare_head($mode)
|
|||||||
|
|
||||||
$h = 0;
|
$h = 0;
|
||||||
|
|
||||||
if (empty($conf->global->PROJECT_DISABLE_TIMESHEET_PERDAY))
|
if (empty($conf->global->PROJECT_DISABLE_TIMESHEET_PERWEEK))
|
||||||
|
{
|
||||||
|
$head[$h][0] = DOL_URL_ROOT."/projet/activity/perweek.php".($mode?'?mode='.$mode:'');
|
||||||
|
$head[$h][1] = $langs->trans("InputPerWeek");
|
||||||
|
$head[$h][2] = 'inputperweek';
|
||||||
|
$h++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($conf->global->PROJECT_DISABLE_TIMESHEET_PERTIME))
|
||||||
{
|
{
|
||||||
$head[$h][0] = DOL_URL_ROOT."/projet/activity/perday.php".($mode?'?mode='.$mode:'');
|
$head[$h][0] = DOL_URL_ROOT."/projet/activity/perday.php".($mode?'?mode='.$mode:'');
|
||||||
$head[$h][1] = $langs->trans("InputPerDay");
|
$head[$h][1] = $langs->trans("InputPerDay");
|
||||||
@ -185,11 +193,11 @@ function project_timesheet_prepare_head($mode)
|
|||||||
$h++;
|
$h++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($conf->global->PROJECT_DISABLE_TIMESHEET_PERTIME))
|
if (empty($conf->global->PROJECT_DISABLE_TIMESHEET_PERACTION))
|
||||||
{
|
{
|
||||||
$head[$h][0] = DOL_URL_ROOT."/projet/activity/pertime.php".($mode?'?mode='.$mode:'');
|
$head[$h][0] = DOL_URL_ROOT."/projet/activity/peraction.php".($mode?'?mode='.$mode:'');
|
||||||
$head[$h][1] = $langs->trans("InputPerTime");
|
$head[$h][1] = $langs->trans("InputPerAction");
|
||||||
$head[$h][2] = 'inputpertime';
|
$head[$h][2] = 'inputperaction';
|
||||||
$h++;
|
$h++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -649,6 +657,8 @@ function projectLinesPerTime(&$inc, $parent, $lines, &$level, &$projectsrole, &$
|
|||||||
* Output a task line into a perday intput mode
|
* Output a task line into a perday intput mode
|
||||||
*
|
*
|
||||||
* @param string $inc Line number (start to 0, then increased by recursive call)
|
* @param string $inc Line number (start to 0, then increased by recursive call)
|
||||||
|
* @param int $firstdaytoshow First day to show
|
||||||
|
* @param User|null $fuser Restrict list to user if defined
|
||||||
* @param string $parent Id of parent project to show (0 to show all)
|
* @param string $parent Id of parent project to show (0 to show all)
|
||||||
* @param Task[] $lines Array of lines
|
* @param Task[] $lines Array of lines
|
||||||
* @param int $level Level (start to 0, then increased/decrease by recursive call)
|
* @param int $level Level (start to 0, then increased/decrease by recursive call)
|
||||||
@ -658,7 +668,7 @@ function projectLinesPerTime(&$inc, $parent, $lines, &$level, &$projectsrole, &$
|
|||||||
* @param int $restricteditformytask 0=No restriction, 1=Enable add time only if task is a task i am affected to
|
* @param int $restricteditformytask 0=No restriction, 1=Enable add time only if task is a task i am affected to
|
||||||
* @return $inc
|
* @return $inc
|
||||||
*/
|
*/
|
||||||
function projectLinesPerDay(&$inc, $parent, $lines, &$level, &$projectsrole, &$tasksrole, $mine, $restricteditformytask=0)
|
function projectLinesPerDay(&$inc, $firstdaytoshow, $fuser, $parent, $lines, &$level, &$projectsrole, &$tasksrole, $mine, $restricteditformytask=0)
|
||||||
{
|
{
|
||||||
global $db, $user, $bc, $langs;
|
global $db, $user, $bc, $langs;
|
||||||
global $form, $formother, $projectstatic, $taskstatic;
|
global $form, $formother, $projectstatic, $taskstatic;
|
||||||
@ -687,7 +697,7 @@ function projectLinesPerDay(&$inc, $parent, $lines, &$level, &$projectsrole, &$t
|
|||||||
$lastprojectid=$lines[$i]->fk_project;
|
$lastprojectid=$lines[$i]->fk_project;
|
||||||
|
|
||||||
$projectstatic->id = $lines[$i]->fk_project;
|
$projectstatic->id = $lines[$i]->fk_project;
|
||||||
$projectstatic->loadTimeSpent($datestart, $lines[$i]->id, $fuser->id);
|
$projectstatic->loadTimeSpent($firstdaytoshow, 0, $fuser->id); // Load time spent into this->weekWorkLoad and this->weekWorkLoadPerTaks for all day of a week
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
||||||
@ -708,17 +718,18 @@ function projectLinesPerDay(&$inc, $parent, $lines, &$level, &$projectsrole, &$t
|
|||||||
print '<td class="nowrap">';
|
print '<td class="nowrap">';
|
||||||
$taskstatic->id=$lines[$i]->id;
|
$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, 'withproject', 'time');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
// Label task
|
// Label task
|
||||||
print "<td>";
|
print "<td>";
|
||||||
|
print '<!-- Task id = '.$lines[$i]->id.' -->';
|
||||||
for ($k = 0 ; $k < $level ; $k++) print " ";
|
for ($k = 0 ; $k < $level ; $k++) print " ";
|
||||||
$taskstatic->id=$lines[$i]->id;
|
$taskstatic->id=$lines[$i]->id;
|
||||||
$taskstatic->ref=$lines[$i]->label;
|
$taskstatic->ref=$lines[$i]->label;
|
||||||
$taskstatic->date_start=$lines[$i]->date_start;
|
$taskstatic->date_start=$lines[$i]->date_start;
|
||||||
$taskstatic->date_end=$lines[$i]->date_end;
|
$taskstatic->date_end=$lines[$i]->date_end;
|
||||||
print $taskstatic->getNomUrl(0);
|
print $taskstatic->getNomUrl(0, 'withproject', 'time');
|
||||||
//print "<br>";
|
//print "<br>";
|
||||||
//for ($k = 0 ; $k < $level ; $k++) print " ";
|
//for ($k = 0 ; $k < $level ; $k++) print " ";
|
||||||
//print get_date_range($lines[$i]->date_start,$lines[$i]->date_end,'',$langs,0);
|
//print get_date_range($lines[$i]->date_start,$lines[$i]->date_end,'',$langs,0);
|
||||||
@ -770,18 +781,22 @@ function projectLinesPerDay(&$inc, $parent, $lines, &$level, &$projectsrole, &$t
|
|||||||
$disabledtask=1;
|
$disabledtask=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//var_dump($projectstatic->weekWorkLoad);
|
//var_dump($projectstatic->weekWorkLoadPerTask);
|
||||||
|
|
||||||
// Fields to show current time
|
// Fields to show current time
|
||||||
$tableCell=''; $modeinput='hours';
|
$tableCell=''; $modeinput='hours';
|
||||||
for ($idw = 0; $idw < 7; $idw++)
|
for ($idw = 0; $idw < 7; $idw++)
|
||||||
{
|
{
|
||||||
$dayWorkLoad = 0;
|
$tmpday=dol_time_plus_duree($firstdaytoshow, $idw, 'd');
|
||||||
|
$dayWorkLoad = $projectstatic->weekWorkLoadPerTask[$tmpday][$lines[$i]->id];
|
||||||
|
$alreadyspent='';
|
||||||
|
if ($dayWorkLoad > 0) $alreadyspent=convertSecondToTime($dayWorkLoad,'allhourmin');
|
||||||
$tableCell ='<td align="center">';
|
$tableCell ='<td align="center">';
|
||||||
$tableCell.='<span class="timesheetalreadyrecorded"><input type="text" class="center" size="2" disabled="disabled" value="'.convertSecondToTime($dayWorkLoad,'allhourmin').'"></span>+';
|
$tableCell.='<span class="timesheetalreadyrecorded"><input type="text" class="center" size="2" disabled="disabled" id="timespent['.$inc.']['.$idw.']" name="task['.$lines[$i]->id.']['.$idw.']" value="'.$alreadyspent.'"></span>';
|
||||||
$tableCell.='<input type="text" class="center" size="2" id="task['.$inc.']['.$idw.']" name="task['.$lines[$i]->id.']['.$idw.']" value="" cols="2" maxlength="5"';
|
$tableCell.='+';
|
||||||
|
$tableCell.='<input type="text" class="center" size="2" id="timeadded['.$inc.']['.$idw.']" name="task['.$lines[$i]->id.']['.$idw.']" value="" cols="2" maxlength="5"';
|
||||||
$tableCell.=' onkeypress="return regexEvent(this,event,\'timeChar\')"';
|
$tableCell.=' onkeypress="return regexEvent(this,event,\'timeChar\')"';
|
||||||
$tableCell.= 'onblur="regexEvent(this,event,\''.$modeinput.'\');updateTotal('.$idw.',\''.$modeinput.'\')" />';
|
$tableCell.= 'onblur="regexEvent(this,event,\''.$modeinput.'\'); updateTotal('.$idw.',\''.$modeinput.'\')" />';
|
||||||
$tableCell.='</td>';
|
$tableCell.='</td>';
|
||||||
print $tableCell;
|
print $tableCell;
|
||||||
}
|
}
|
||||||
@ -790,7 +805,7 @@ function projectLinesPerDay(&$inc, $parent, $lines, &$level, &$projectsrole, &$t
|
|||||||
|
|
||||||
$inc++;
|
$inc++;
|
||||||
$level++;
|
$level++;
|
||||||
if ($lines[$i]->id) projectLinesPerDay($inc, $lines[$i]->id, $lines, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask);
|
if ($lines[$i]->id) projectLinesPerDay($inc, $firstdaytoshow, $lines[$i]->id, $lines, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask);
|
||||||
$level--;
|
$level--;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -244,12 +244,12 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left
|
|||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3700__+MAX_llx_menu__, 'project', '', 7__+MAX_llx_menu__, '/projet/activity/index.php?leftmenu=projects', 'Activities', 0, 'projects', '$user->rights->projet->lire', '', 2, 0, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3700__+MAX_llx_menu__, 'project', '', 7__+MAX_llx_menu__, '/projet/activity/index.php?leftmenu=projects', 'Activities', 0, 'projects', '$user->rights->projet->lire', '', 2, 0, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3701__+MAX_llx_menu__, 'project', '', 3700__+MAX_llx_menu__, '/projet/tasks.php?leftmenu=projects&action=create', 'NewTask', 1, 'projects', '$user->rights->projet->creer', '', 2, 1, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3701__+MAX_llx_menu__, 'project', '', 3700__+MAX_llx_menu__, '/projet/tasks.php?leftmenu=projects&action=create', 'NewTask', 1, 'projects', '$user->rights->projet->creer', '', 2, 1, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3702__+MAX_llx_menu__, 'project', '', 3700__+MAX_llx_menu__, '/projet/tasks/index.php?leftmenu=projects', 'List', 1, 'projects', '$user->rights->projet->lire', '', 2, 2, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3702__+MAX_llx_menu__, 'project', '', 3700__+MAX_llx_menu__, '/projet/tasks/index.php?leftmenu=projects', 'List', 1, 'projects', '$user->rights->projet->lire', '', 2, 2, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3703__+MAX_llx_menu__, 'project', '', 3700__+MAX_llx_menu__, '/projet/activity/perday.php?leftmenu=projects', 'NewTimeSpent', 1, 'projects', '$user->rights->projet->lire', '', 2, 3, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3703__+MAX_llx_menu__, 'project', '', 3700__+MAX_llx_menu__, '/projet/activity/perweek.php?leftmenu=projects', 'NewTimeSpent', 1, 'projects', '$user->rights->projet->lire', '', 2, 3, __ENTITY__);
|
||||||
|
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3800__+MAX_llx_menu__, 'project', '', 7__+MAX_llx_menu__, '/projet/activity/index.php?leftmenu=projects&mode=mine', 'MyActivities', 0, 'projects', '$user->rights->projet->lire', '', 2, 0, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3800__+MAX_llx_menu__, 'project', '', 7__+MAX_llx_menu__, '/projet/activity/index.php?leftmenu=projects&mode=mine', 'MyActivities', 0, 'projects', '$user->rights->projet->lire', '', 2, 0, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3801__+MAX_llx_menu__, 'project', '', 3800__+MAX_llx_menu__, '/projet/tasks.php?leftmenu=projects&action=create&mode=mine', 'NewTask', 1, 'projects', '$user->rights->projet->creer', '', 2, 1, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3801__+MAX_llx_menu__, 'project', '', 3800__+MAX_llx_menu__, '/projet/tasks.php?leftmenu=projects&action=create&mode=mine', 'NewTask', 1, 'projects', '$user->rights->projet->creer', '', 2, 1, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3802__+MAX_llx_menu__, 'project', '', 3800__+MAX_llx_menu__, '/projet/tasks/index.php?leftmenu=projects&mode=mine', 'List', 1, 'projects', '$user->rights->projet->lire', '', 2, 2, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3802__+MAX_llx_menu__, 'project', '', 3800__+MAX_llx_menu__, '/projet/tasks/index.php?leftmenu=projects&mode=mine', 'List', 1, 'projects', '$user->rights->projet->lire', '', 2, 2, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3803__+MAX_llx_menu__, 'project', '', 3800__+MAX_llx_menu__, '/projet/activity/perday.php?leftmenu=projects&mode=mine', 'NewTimeSpent', 1, 'projects', '$user->rights->projet->lire', '', 2, 3, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3803__+MAX_llx_menu__, 'project', '', 3800__+MAX_llx_menu__, '/projet/activity/perweek.php?leftmenu=projects&mode=mine', 'NewTimeSpent', 1, 'projects', '$user->rights->projet->lire', '', 2, 3, __ENTITY__);
|
||||||
-- Tools
|
-- Tools
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->mailing->enabled', __HANDLER__, 'left', 3900__+MAX_llx_menu__, 'tools', 'mailing', 8__+MAX_llx_menu__, '/comm/mailing/index.php?leftmenu=mailing', 'EMailings', 0, 'mails', '$user->rights->mailing->lire', '', 0, 0, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->mailing->enabled', __HANDLER__, 'left', 3900__+MAX_llx_menu__, 'tools', 'mailing', 8__+MAX_llx_menu__, '/comm/mailing/index.php?leftmenu=mailing', 'EMailings', 0, 'mails', '$user->rights->mailing->lire', '', 0, 0, __ENTITY__);
|
||||||
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->mailing->enabled', __HANDLER__, 'left', 3901__+MAX_llx_menu__, 'tools', '', 3900__+MAX_llx_menu__, '/comm/mailing/card.php?leftmenu=mailing&action=create', 'NewMailing', 1, 'mails', '$user->rights->mailing->creer', '', 0, 0, __ENTITY__);
|
insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->mailing->enabled', __HANDLER__, 'left', 3901__+MAX_llx_menu__, 'tools', '', 3900__+MAX_llx_menu__, '/comm/mailing/card.php?leftmenu=mailing&action=create', 'NewMailing', 1, 'mails', '$user->rights->mailing->creer', '', 0, 0, __ENTITY__);
|
||||||
|
|||||||
@ -1148,13 +1148,13 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
|
|||||||
$newmenu->add("/projet/activity/index.php?mode=mine", $langs->trans("MyActivities"), 0, $user->rights->projet->lire);
|
$newmenu->add("/projet/activity/index.php?mode=mine", $langs->trans("MyActivities"), 0, $user->rights->projet->lire);
|
||||||
$newmenu->add("/projet/tasks.php?action=create&mode=mine", $langs->trans("NewTask"), 1, $user->rights->projet->creer);
|
$newmenu->add("/projet/tasks.php?action=create&mode=mine", $langs->trans("NewTask"), 1, $user->rights->projet->creer);
|
||||||
$newmenu->add("/projet/tasks/index.php?mode=mine", $langs->trans("List"), 1, $user->rights->projet->lire);
|
$newmenu->add("/projet/tasks/index.php?mode=mine", $langs->trans("List"), 1, $user->rights->projet->lire);
|
||||||
$newmenu->add("/projet/activity/perday.php?mode=mine", $langs->trans("NewTimeSpent"), 1, $user->rights->projet->creer);
|
$newmenu->add("/projet/activity/perweek.php?mode=mine", $langs->trans("NewTimeSpent"), 1, $user->rights->projet->creer);
|
||||||
|
|
||||||
// All project i have permission on
|
// All project i have permission on
|
||||||
$newmenu->add("/projet/activity/index.php", $langs->trans("Activities"), 0, $user->rights->projet->lire && $user->rights->projet->lire);
|
$newmenu->add("/projet/activity/index.php", $langs->trans("Activities"), 0, $user->rights->projet->lire && $user->rights->projet->lire);
|
||||||
$newmenu->add("/projet/tasks.php?action=create", $langs->trans("NewTask"), 1, $user->rights->projet->creer && $user->rights->projet->creer);
|
$newmenu->add("/projet/tasks.php?action=create", $langs->trans("NewTask"), 1, $user->rights->projet->creer && $user->rights->projet->creer);
|
||||||
$newmenu->add("/projet/tasks/index.php", $langs->trans("List"), 1, $user->rights->projet->lire && $user->rights->projet->lire);
|
$newmenu->add("/projet/tasks/index.php", $langs->trans("List"), 1, $user->rights->projet->lire && $user->rights->projet->lire);
|
||||||
$newmenu->add("/projet/activity/perday.php", $langs->trans("NewTimeSpent"), 1, $user->rights->projet->creer && $user->rights->projet->creer);
|
$newmenu->add("/projet/activity/perweek.php", $langs->trans("NewTimeSpent"), 1, $user->rights->projet->creer && $user->rights->projet->creer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,6 +27,9 @@ ALTER TABLE llx_payment_salary ADD COLUMN salary real after datev;
|
|||||||
UPDATE llx_projet_task_time SET task_datehour = task_date where task_datehour IS NULL;
|
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_projet_task_time ADD COLUMN task_date_withhour integer DEFAULT 0 after task_datehour;
|
||||||
|
|
||||||
|
ALTER TABLE llx_projet_task MODIFY COLUMN duration_effective real DEFAULT 0 NULL;
|
||||||
|
ALTER TABLE llx_projet_task MODIFY COLUMN planned_workload real DEFAULT 0 NULL;
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE llx_commande_fournisseur MODIFY COLUMN date_livraison datetime;
|
ALTER TABLE llx_commande_fournisseur MODIFY COLUMN date_livraison datetime;
|
||||||
|
|
||||||
|
|||||||
@ -138,6 +138,7 @@ SearchAProject=Search a project
|
|||||||
ProjectMustBeValidatedFirst=Project must be validated first
|
ProjectMustBeValidatedFirst=Project must be validated first
|
||||||
ProjectDraft=Draft projects
|
ProjectDraft=Draft projects
|
||||||
FirstAddRessourceToAllocateTime=Associate a ressource to allocate time
|
FirstAddRessourceToAllocateTime=Associate a ressource to allocate time
|
||||||
InputPerTime=Input per time
|
|
||||||
InputPerDay=Input per day
|
InputPerDay=Input per day
|
||||||
|
InputPerWeek=Input per week
|
||||||
|
InputPerAction=Input per action
|
||||||
TimeAlreadyRecorded=Time spent already recorded for this task/day and user %s
|
TimeAlreadyRecorded=Time spent already recorded for this task/day and user %s
|
||||||
|
|||||||
@ -19,9 +19,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file htdocs/projet/activity/pertime.php
|
* \file htdocs/projet/activity/perday.php
|
||||||
* \ingroup projet
|
* \ingroup projet
|
||||||
* \brief List activities of tasks (per time entry)
|
* \brief List activities of tasks (per day entry)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require ("../../main.inc.php");
|
require ("../../main.inc.php");
|
||||||
@ -29,7 +29,6 @@ require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
|
|
||||||
|
|
||||||
$langs->load('projects');
|
$langs->load('projects');
|
||||||
|
|
||||||
@ -48,13 +47,6 @@ $socid=0;
|
|||||||
if ($user->societe_id > 0) $socid=$user->societe_id;
|
if ($user->societe_id > 0) $socid=$user->societe_id;
|
||||||
$result = restrictedArea($user, 'projet', $projectid);
|
$result = restrictedArea($user, 'projet', $projectid);
|
||||||
|
|
||||||
$now=dol_now();
|
|
||||||
|
|
||||||
$year=GETPOST("year","int")?GETPOST("year","int"):date("Y");
|
|
||||||
$month=GETPOST("month","int")?GETPOST("month","int"):date("m");
|
|
||||||
$week=GETPOST("week","int")?GETPOST("week","int"):date("W");
|
|
||||||
$day=GETPOST("day","int")?GETPOST("day","int"):date("d");
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
@ -64,8 +56,68 @@ if ($action == 'addtime' && $user->rights->projet->creer)
|
|||||||
{
|
{
|
||||||
$task = new Task($db);
|
$task = new Task($db);
|
||||||
|
|
||||||
|
$timespent_duration=array();
|
||||||
|
|
||||||
|
foreach($_POST as $key => $time)
|
||||||
|
{
|
||||||
|
if (intval($time) > 0)
|
||||||
|
{
|
||||||
|
// Hours or minutes of duration
|
||||||
|
if (preg_match("/([0-9]+)duration(hour|min)/",$key,$matches))
|
||||||
|
{
|
||||||
|
$id = $matches[1];
|
||||||
|
if ($id > 0)
|
||||||
|
{
|
||||||
|
// We store HOURS in seconds
|
||||||
|
if($matches[2]=='hour') $timespent_duration[$id] += $time*60*60;
|
||||||
|
|
||||||
|
// We store MINUTES in seconds
|
||||||
|
if($matches[2]=='min') $timespent_duration[$id] += $time*60;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($timespent_duration) > 0)
|
||||||
|
{
|
||||||
|
foreach($timespent_duration as $key => $val)
|
||||||
|
{
|
||||||
|
$task->fetch($key);
|
||||||
|
$task->progress = GETPOST($key . 'progress', 'int');
|
||||||
|
$task->timespent_duration = $val;
|
||||||
|
$task->timespent_fk_user = $user->id;
|
||||||
|
if (GETPOST($key."hour") != '' && GETPOST($key."hour") >= 0) // If hour was entered
|
||||||
|
{
|
||||||
|
$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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
setEventMessage($langs->trans("RecordSaved"));
|
||||||
|
|
||||||
|
// Redirect to avoid submit twice on back
|
||||||
|
header('Location: '.$_SERVER["PHP_SELF"].($projectid?'?id='.$projectid:'?').($mode?'&mode='.$mode:''));
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setEventMessage($langs->trans("ErrorTimeSpentIsEmpty"), 'errors');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -75,7 +127,6 @@ if ($action == 'addtime' && $user->rights->projet->creer)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
$form=new Form($db);
|
$form=new Form($db);
|
||||||
$formother=new FormOther($db);
|
|
||||||
$projectstatic=new Project($db);
|
$projectstatic=new Project($db);
|
||||||
$project = new Project($db);
|
$project = new Project($db);
|
||||||
$taskstatic = new Task($db);
|
$taskstatic = new Task($db);
|
||||||
@ -83,9 +134,8 @@ $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;
|
$usertoprocess = $user;
|
||||||
|
|
||||||
//$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1);
|
|
||||||
$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
|
$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)
|
||||||
@ -103,50 +153,15 @@ $tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0,$usertoprocess,($projec
|
|||||||
//var_dump($taskrole);
|
//var_dump($taskrole);
|
||||||
|
|
||||||
|
|
||||||
llxHeader("",$title,"",'','','',array('/core/js/timesheet.js'));
|
llxHeader("",$title,"");
|
||||||
|
|
||||||
print_barre_liste($title, $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, "", $num);
|
print_barre_liste($title, $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, "", $num);
|
||||||
|
|
||||||
|
|
||||||
$startdayarray=dol_get_first_day_week($day, $month, $year);
|
print '<form name="addtime" method="POST" action="'.$_SERVER["PHP_SELF"].'?id='.$project->id.'">';
|
||||||
|
|
||||||
$prev = $startdayarray;
|
|
||||||
$prev_year = $prev['prev_year'];
|
|
||||||
$prev_month = $prev['prev_month'];
|
|
||||||
$prev_day = $prev['prev_day'];
|
|
||||||
$first_day = $prev['first_day'];
|
|
||||||
$first_month= $prev['first_month'];
|
|
||||||
$first_year = $prev['first_year'];
|
|
||||||
$week = $prev['week'];
|
|
||||||
|
|
||||||
$day = (int) $day;
|
|
||||||
$next = dol_get_next_week($first_day, $week, $first_month, $first_year);
|
|
||||||
$next_year = $next['year'];
|
|
||||||
$next_month = $next['month'];
|
|
||||||
$next_day = $next['day'];
|
|
||||||
|
|
||||||
// Define firstdaytoshow and lastdaytoshow (warning: lastdaytoshow is last second to show + 1)
|
|
||||||
$firstdaytoshow=dol_mktime(0,0,0,$first_month,$first_day,$first_year);
|
|
||||||
$lastdaytoshow=dol_time_plus_duree($firstdaytoshow, 7, 'd');
|
|
||||||
|
|
||||||
$tmpday = $first_day;
|
|
||||||
|
|
||||||
// Show navigation bar
|
|
||||||
$nav ="<a href=\"?year=".$prev_year."&month=".$prev_month."&day=".$prev_day.$param."\">".img_previous($langs->trans("Previous"))."</a>\n";
|
|
||||||
$nav.=" <span id=\"month_name\">".dol_print_date(dol_mktime(0,0,0,$first_month,$first_day,$first_year),"%Y").", ".$langs->trans("Week")." ".$week;
|
|
||||||
$nav.=" </span>\n";
|
|
||||||
$nav.="<a href=\"?year=".$next_year."&month=".$next_month."&day=".$next_day.$param."\">".img_next($langs->trans("Next"))."</a>\n";
|
|
||||||
$nav.=" (<a href=\"?year=".$nowyear."&month=".$nowmonth."&day=".$nowday.$param."\">".$langs->trans("Today")."</a>)";
|
|
||||||
$picto='calendarweek';
|
|
||||||
|
|
||||||
|
|
||||||
print '<form name="addtime" method="POST" action="'.$_SERVER["PHP_SELF"].'">';
|
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
print '<input type="hidden" name="action" value="addtime">';
|
print '<input type="hidden" name="action" value="addtime">';
|
||||||
print '<input type="hidden" name="mode" value="'.$mode.'">';
|
print '<input type="hidden" name="mode" value="'.$mode.'">';
|
||||||
print '<input type="hidden" name="day" value="'.$day.'">';
|
|
||||||
print '<input type="hidden" name="month" value="'.$month.'">';
|
|
||||||
print '<input type="hidden" name="year" value="'.$year.'">';
|
|
||||||
|
|
||||||
$head=project_timesheet_prepare_head($mode);
|
$head=project_timesheet_prepare_head($mode);
|
||||||
dol_fiche_head($head, 'inputperday', '', 0, 'task');
|
dol_fiche_head($head, 'inputperday', '', 0, 'task');
|
||||||
@ -158,7 +173,7 @@ else
|
|||||||
if ($user->rights->projet->all->lire && ! $socid) print $langs->trans("ProjectsDesc").($onlyopened?' '.$langs->trans("OnlyOpenedProject"):'').'<br><br>';
|
if ($user->rights->projet->all->lire && ! $socid) print $langs->trans("ProjectsDesc").($onlyopened?' '.$langs->trans("OnlyOpenedProject"):'').'<br><br>';
|
||||||
else print $langs->trans("ProjectsPublicTaskDesc").($onlyopened?' '.$langs->trans("AlsoOnlyOpenedProject"):'').'<br><br>';
|
else print $langs->trans("ProjectsPublicTaskDesc").($onlyopened?' '.$langs->trans("AlsoOnlyOpenedProject"):'').'<br><br>';
|
||||||
}
|
}
|
||||||
print "\n";
|
|
||||||
|
|
||||||
// Filter on user
|
// Filter on user
|
||||||
/* dol_fiche_head('');
|
/* dol_fiche_head('');
|
||||||
@ -180,10 +195,6 @@ print "\n";
|
|||||||
dol_fiche_end();
|
dol_fiche_end();
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
print '<div align="right">'.$nav.'</div>';
|
|
||||||
|
|
||||||
|
|
||||||
print '<table class="noborder" width="100%">';
|
print '<table class="noborder" width="100%">';
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
print '<td>'.$langs->trans("Project").'</td>';
|
print '<td>'.$langs->trans("Project").'</td>';
|
||||||
@ -194,14 +205,8 @@ 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>';
|
if ($usertoprocess->id == $user->id) print '<td align="right">'.$langs->trans("TimeSpentByYou").'</td>';
|
||||||
else print '<td align="right">'.$langs->trans("TimeSpentByUser").'</td>';
|
else print '<td align="right">'.$langs->trans("TimeSpentByUser").'</td>';
|
||||||
|
print '<td align="center">'.$langs->trans("DateAndHour").'</td>';
|
||||||
$startday=dol_mktime(12, 0, 0, $startdayarray['first_month'], $startdayarray['first_day'], $startdayarray['first_year']);
|
print '<td align="center" colspan="2">'.$langs->trans("Duration").'</td>';
|
||||||
|
|
||||||
for($i=0;$i<7;$i++)
|
|
||||||
{
|
|
||||||
print '<td width="7%" align="center">'.dol_print_date($startday + ($i * 3600 * 24), '%a').'<br>'.dol_print_date($startday + ($i * 3600 * 24), 'day').'</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
|
||||||
@ -210,18 +215,7 @@ $restricteditformytask=(empty($conf->global->PROJECT_TIME_ON_ALL_TASKS_MY_PROJEC
|
|||||||
if (count($tasksarray) > 0)
|
if (count($tasksarray) > 0)
|
||||||
{
|
{
|
||||||
$j=0;
|
$j=0;
|
||||||
projectLinesPerDay($j, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask);
|
projectLinesPerTime($j, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask);
|
||||||
|
|
||||||
print '<tr class="liste_total">
|
|
||||||
<td class="liste_total" colspan="7" align="right">'.$langs->trans("Total").'</td>
|
|
||||||
<td class="liste_total" width="7%" align="center"><div id="totalDay[0]"> </div></td>
|
|
||||||
<td class="liste_total" width="7%" align="center"><div id="totalDay[1]"> </div></td>
|
|
||||||
<td class="liste_total" width="7%" align="center"><div id="totalDay[2]"> </div></td>
|
|
||||||
<td class="liste_total" width="7%" align="center"><div id="totalDay[3]"> </div></td>
|
|
||||||
<td class="liste_total" width="7%" align="center"><div id="totalDay[4]"> </div></td>
|
|
||||||
<td class="liste_total" width="7%" align="center"><div id="totalDay[5]"> </div></td>
|
|
||||||
<td class="liste_total" width="7%" align="center"><div id="totalDay[6]"> </div></td>
|
|
||||||
</tr>';
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -229,23 +223,9 @@ else
|
|||||||
}
|
}
|
||||||
print "</table>";
|
print "</table>";
|
||||||
|
|
||||||
print '<input type="hidden" name="timestamp" value="1425423513"/>'."\n";
|
|
||||||
print '<input type="hidden" id="numberOfLines" name="numberOfLines" value="'.count($tasksarray).'"/>'."\n";
|
|
||||||
|
|
||||||
dol_fiche_end();
|
dol_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '</form>';
|
||||||
print '<input type="submit" class="button" name="save" value="'.dol_escape_htmltag($langs->trans("Save")).'">';
|
|
||||||
print '</div>';
|
|
||||||
|
|
||||||
print '</form>'."\n\n";
|
|
||||||
|
|
||||||
|
|
||||||
print '<script type="text/javascript">';
|
|
||||||
print "jQuery(document).ready(function () {\n";
|
|
||||||
print ' jQuery(".timesheetalreadyrecorded").tipTip({ maxWidth: "600px", edgeOffset: 10, delay: 50, fadeIn: 50, fadeOut: 50, content: \''.dol_escape_js($langs->trans("TimeAlreadyRecorded", $user->getFullName($langs))).'\'});';
|
|
||||||
print "});";
|
|
||||||
print '</script>';
|
|
||||||
|
|
||||||
|
|
||||||
llxFooter();
|
llxFooter();
|
||||||
|
|||||||
@ -19,9 +19,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file htdocs/projet/activity/perday.php
|
* \file htdocs/projet/activity/perweek.php
|
||||||
* \ingroup projet
|
* \ingroup projet
|
||||||
* \brief List activities of tasks (per day entry)
|
* \brief List activities of tasks (per week entry)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require ("../../main.inc.php");
|
require ("../../main.inc.php");
|
||||||
@ -29,6 +29,7 @@ require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
|
||||||
|
|
||||||
$langs->load('projects');
|
$langs->load('projects');
|
||||||
|
|
||||||
@ -47,6 +48,13 @@ $socid=0;
|
|||||||
if ($user->societe_id > 0) $socid=$user->societe_id;
|
if ($user->societe_id > 0) $socid=$user->societe_id;
|
||||||
$result = restrictedArea($user, 'projet', $projectid);
|
$result = restrictedArea($user, 'projet', $projectid);
|
||||||
|
|
||||||
|
$now=dol_now();
|
||||||
|
|
||||||
|
$year=GETPOST("year","int")?GETPOST("year","int"):date("Y");
|
||||||
|
$month=GETPOST("month","int")?GETPOST("month","int"):date("m");
|
||||||
|
$week=GETPOST("week","int")?GETPOST("week","int"):date("W");
|
||||||
|
$day=GETPOST("day","int")?GETPOST("day","int"):date("d");
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
@ -56,68 +64,8 @@ if ($action == 'addtime' && $user->rights->projet->creer)
|
|||||||
{
|
{
|
||||||
$task = new Task($db);
|
$task = new Task($db);
|
||||||
|
|
||||||
$timespent_duration=array();
|
|
||||||
|
|
||||||
foreach($_POST as $key => $time)
|
|
||||||
{
|
|
||||||
if (intval($time) > 0)
|
|
||||||
{
|
|
||||||
// Hours or minutes of duration
|
|
||||||
if (preg_match("/([0-9]+)duration(hour|min)/",$key,$matches))
|
|
||||||
{
|
|
||||||
$id = $matches[1];
|
|
||||||
if ($id > 0)
|
|
||||||
{
|
|
||||||
// We store HOURS in seconds
|
|
||||||
if($matches[2]=='hour') $timespent_duration[$id] += $time*60*60;
|
|
||||||
|
|
||||||
// We store MINUTES in seconds
|
|
||||||
if($matches[2]=='min') $timespent_duration[$id] += $time*60;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count($timespent_duration) > 0)
|
|
||||||
{
|
|
||||||
foreach($timespent_duration as $key => $val)
|
|
||||||
{
|
|
||||||
$task->fetch($key);
|
|
||||||
$task->progress = GETPOST($key . 'progress', 'int');
|
|
||||||
$task->timespent_duration = $val;
|
|
||||||
$task->timespent_fk_user = $user->id;
|
|
||||||
if (GETPOST($key."hour") != '' && GETPOST($key."hour") >= 0) // If hour was entered
|
|
||||||
{
|
|
||||||
$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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! $error)
|
|
||||||
{
|
|
||||||
setEventMessage($langs->trans("RecordSaved"));
|
|
||||||
|
|
||||||
// Redirect to avoid submit twice on back
|
|
||||||
header('Location: '.$_SERVER["PHP_SELF"].($projectid?'?id='.$projectid:'?').($mode?'&mode='.$mode:''));
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setEventMessage($langs->trans("ErrorTimeSpentIsEmpty"), 'errors');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -127,6 +75,7 @@ if ($action == 'addtime' && $user->rights->projet->creer)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
$form=new Form($db);
|
$form=new Form($db);
|
||||||
|
$formother=new FormOther($db);
|
||||||
$projectstatic=new Project($db);
|
$projectstatic=new Project($db);
|
||||||
$project = new Project($db);
|
$project = new Project($db);
|
||||||
$taskstatic = new Task($db);
|
$taskstatic = new Task($db);
|
||||||
@ -134,8 +83,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");
|
||||||
|
|
||||||
$usertoprocess = $user;
|
$usertoprocess=$user;
|
||||||
|
|
||||||
|
//$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1);
|
||||||
$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
|
$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)
|
||||||
@ -153,18 +103,53 @@ $tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0,$usertoprocess,($projec
|
|||||||
//var_dump($taskrole);
|
//var_dump($taskrole);
|
||||||
|
|
||||||
|
|
||||||
llxHeader("",$title,"");
|
llxHeader("",$title,"",'','','',array('/core/js/timesheet.js'));
|
||||||
|
|
||||||
print_barre_liste($title, $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, "", $num);
|
print_barre_liste($title, $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, "", $num);
|
||||||
|
|
||||||
|
|
||||||
print '<form name="addtime" method="POST" action="'.$_SERVER["PHP_SELF"].'?id='.$project->id.'">';
|
$startdayarray=dol_get_first_day_week($day, $month, $year);
|
||||||
|
|
||||||
|
$prev = $startdayarray;
|
||||||
|
$prev_year = $prev['prev_year'];
|
||||||
|
$prev_month = $prev['prev_month'];
|
||||||
|
$prev_day = $prev['prev_day'];
|
||||||
|
$first_day = $prev['first_day'];
|
||||||
|
$first_month= $prev['first_month'];
|
||||||
|
$first_year = $prev['first_year'];
|
||||||
|
$week = $prev['week'];
|
||||||
|
|
||||||
|
$day = (int) $day;
|
||||||
|
$next = dol_get_next_week($first_day, $week, $first_month, $first_year);
|
||||||
|
$next_year = $next['year'];
|
||||||
|
$next_month = $next['month'];
|
||||||
|
$next_day = $next['day'];
|
||||||
|
|
||||||
|
// Define firstdaytoshow and lastdaytoshow (warning: lastdaytoshow is last second to show + 1)
|
||||||
|
$firstdaytoshow=dol_mktime(0,0,0,$first_month,$first_day,$first_year);
|
||||||
|
$lastdaytoshow=dol_time_plus_duree($firstdaytoshow, 7, 'd');
|
||||||
|
|
||||||
|
$tmpday = $first_day;
|
||||||
|
|
||||||
|
// Show navigation bar
|
||||||
|
$nav ="<a href=\"?year=".$prev_year."&month=".$prev_month."&day=".$prev_day.$param."\">".img_previous($langs->trans("Previous"))."</a>\n";
|
||||||
|
$nav.=" <span id=\"month_name\">".dol_print_date(dol_mktime(0,0,0,$first_month,$first_day,$first_year),"%Y").", ".$langs->trans("Week")." ".$week;
|
||||||
|
$nav.=" </span>\n";
|
||||||
|
$nav.="<a href=\"?year=".$next_year."&month=".$next_month."&day=".$next_day.$param."\">".img_next($langs->trans("Next"))."</a>\n";
|
||||||
|
$nav.=" (<a href=\"?year=".$nowyear."&month=".$nowmonth."&day=".$nowday.$param."\">".$langs->trans("Today")."</a>)";
|
||||||
|
$picto='calendarweek';
|
||||||
|
|
||||||
|
|
||||||
|
print '<form name="addtime" method="POST" action="'.$_SERVER["PHP_SELF"].'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
print '<input type="hidden" name="action" value="addtime">';
|
print '<input type="hidden" name="action" value="addtime">';
|
||||||
print '<input type="hidden" name="mode" value="'.$mode.'">';
|
print '<input type="hidden" name="mode" value="'.$mode.'">';
|
||||||
|
print '<input type="hidden" name="day" value="'.$day.'">';
|
||||||
|
print '<input type="hidden" name="month" value="'.$month.'">';
|
||||||
|
print '<input type="hidden" name="year" value="'.$year.'">';
|
||||||
|
|
||||||
$head=project_timesheet_prepare_head($mode);
|
$head=project_timesheet_prepare_head($mode);
|
||||||
dol_fiche_head($head, 'inputpertime', '', 0, 'task');
|
dol_fiche_head($head, 'inputperweek', '', 0, 'task');
|
||||||
|
|
||||||
// Show description of content
|
// Show description of content
|
||||||
if ($mine) print $langs->trans("MyTasksDesc").($onlyopened?' '.$langs->trans("OnlyOpenedProject"):'').'<br><br>';
|
if ($mine) print $langs->trans("MyTasksDesc").($onlyopened?' '.$langs->trans("OnlyOpenedProject"):'').'<br><br>';
|
||||||
@ -173,7 +158,7 @@ else
|
|||||||
if ($user->rights->projet->all->lire && ! $socid) print $langs->trans("ProjectsDesc").($onlyopened?' '.$langs->trans("OnlyOpenedProject"):'').'<br><br>';
|
if ($user->rights->projet->all->lire && ! $socid) print $langs->trans("ProjectsDesc").($onlyopened?' '.$langs->trans("OnlyOpenedProject"):'').'<br><br>';
|
||||||
else print $langs->trans("ProjectsPublicTaskDesc").($onlyopened?' '.$langs->trans("AlsoOnlyOpenedProject"):'').'<br><br>';
|
else print $langs->trans("ProjectsPublicTaskDesc").($onlyopened?' '.$langs->trans("AlsoOnlyOpenedProject"):'').'<br><br>';
|
||||||
}
|
}
|
||||||
|
print "\n";
|
||||||
|
|
||||||
// Filter on user
|
// Filter on user
|
||||||
/* dol_fiche_head('');
|
/* dol_fiche_head('');
|
||||||
@ -195,6 +180,10 @@ else
|
|||||||
dol_fiche_end();
|
dol_fiche_end();
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
print '<div align="right">'.$nav.'</div>';
|
||||||
|
|
||||||
|
|
||||||
print '<table class="noborder" width="100%">';
|
print '<table class="noborder" width="100%">';
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
print '<td>'.$langs->trans("Project").'</td>';
|
print '<td>'.$langs->trans("Project").'</td>';
|
||||||
@ -205,8 +194,14 @@ 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>';
|
if ($usertoprocess->id == $user->id) print '<td align="right">'.$langs->trans("TimeSpentByYou").'</td>';
|
||||||
else print '<td align="right">'.$langs->trans("TimeSpentByUser").'</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>';
|
$startday=dol_mktime(12, 0, 0, $startdayarray['first_month'], $startdayarray['first_day'], $startdayarray['first_year']);
|
||||||
|
|
||||||
|
for($i=0;$i<7;$i++)
|
||||||
|
{
|
||||||
|
print '<td width="7%" align="center">'.dol_print_date($startday + ($i * 3600 * 24), '%a').'<br>'.dol_print_date($startday + ($i * 3600 * 24), 'day').'</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
|
||||||
@ -215,7 +210,18 @@ $restricteditformytask=(empty($conf->global->PROJECT_TIME_ON_ALL_TASKS_MY_PROJEC
|
|||||||
if (count($tasksarray) > 0)
|
if (count($tasksarray) > 0)
|
||||||
{
|
{
|
||||||
$j=0;
|
$j=0;
|
||||||
projectLinesPerTime($j, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask);
|
projectLinesPerDay($j, $firstdaytoshow, $usertoprocess, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask);
|
||||||
|
|
||||||
|
print '<tr class="liste_total">
|
||||||
|
<td class="liste_total" colspan="7" align="right">'.$langs->trans("Total").'</td>
|
||||||
|
<td class="liste_total" width="7%" align="center"><div id="totalDay[0]"> </div></td>
|
||||||
|
<td class="liste_total" width="7%" align="center"><div id="totalDay[1]"> </div></td>
|
||||||
|
<td class="liste_total" width="7%" align="center"><div id="totalDay[2]"> </div></td>
|
||||||
|
<td class="liste_total" width="7%" align="center"><div id="totalDay[3]"> </div></td>
|
||||||
|
<td class="liste_total" width="7%" align="center"><div id="totalDay[4]"> </div></td>
|
||||||
|
<td class="liste_total" width="7%" align="center"><div id="totalDay[5]"> </div></td>
|
||||||
|
<td class="liste_total" width="7%" align="center"><div id="totalDay[6]"> </div></td>
|
||||||
|
</tr>';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -223,9 +229,30 @@ else
|
|||||||
}
|
}
|
||||||
print "</table>";
|
print "</table>";
|
||||||
|
|
||||||
|
print '<input type="hidden" name="timestamp" value="1425423513"/>'."\n";
|
||||||
|
print '<input type="hidden" id="numberOfLines" name="numberOfLines" value="'.count($tasksarray).'"/>'."\n";
|
||||||
|
|
||||||
dol_fiche_end();
|
dol_fiche_end();
|
||||||
|
|
||||||
print '</form>';
|
print '<div class="center">';
|
||||||
|
print '<input type="submit" class="button" name="save" value="'.dol_escape_htmltag($langs->trans("Save")).'">';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print '</form>'."\n\n";
|
||||||
|
|
||||||
|
$modeinput='hours';
|
||||||
|
|
||||||
|
print '<script type="text/javascript">';
|
||||||
|
print "jQuery(document).ready(function () {\n";
|
||||||
|
print ' jQuery(".timesheetalreadyrecorded").tipTip({ maxWidth: "600px", edgeOffset: 10, delay: 50, fadeIn: 50, fadeOut: 50, content: \''.dol_escape_js($langs->trans("TimeAlreadyRecorded", $user->getFullName($langs))).'\'});';
|
||||||
|
$i=0;
|
||||||
|
while ($i < 7)
|
||||||
|
{
|
||||||
|
print ' updateTotal('.$i.',\''.$modeinput.'\');';
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
print "});";
|
||||||
|
print '</script>';
|
||||||
|
|
||||||
|
|
||||||
llxFooter();
|
llxFooter();
|
||||||
@ -63,6 +63,9 @@ class Project extends CommonObject
|
|||||||
|
|
||||||
var $oldcopy;
|
var $oldcopy;
|
||||||
|
|
||||||
|
var $weekWorkLoad; // Used to store workload details of a projet
|
||||||
|
var $weekWorkLoadPerTask; // Used to store workload details of tasks of a projet
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
@ -1442,23 +1445,29 @@ class Project extends CommonObject
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* load time spent into this->weekWorkLoad for all day of a week and task id
|
* Load time spent into this->weekWorkLoad and this->weekWorkLoadPerTask for all day of a week of project
|
||||||
*
|
*
|
||||||
* @param int $datestart First day of week (use dol_get_first_day to find this date)
|
* @param int $datestart First day of week (use dol_get_first_day to find this date)
|
||||||
* @param int $taskid Task id
|
* @param int $taskid Filter on a task id
|
||||||
* @param int $userid Time consumed per a particular user
|
* @param int $userid Time spent by a particular user
|
||||||
* @return int <0 if OK, >0 if KO
|
* @return int <0 if OK, >0 if KO
|
||||||
*/
|
*/
|
||||||
public function loadTimeSpent($datestart,$taskid,$userid=0)
|
public function loadTimeSpent($datestart,$taskid=0,$userid=0)
|
||||||
{
|
{
|
||||||
$error=0;
|
$error=0;
|
||||||
|
|
||||||
$sql = "SELECT ptt.rowid, ptt.task_duration, ptt.task_date";
|
if (empty($datestart)) dol_print_error('','Error datestart parameter is empty');
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX."projet_task_time AS ptt";
|
|
||||||
$sql.= " WHERE ptt.fk_task='".$taskid."'";
|
$sql = "SELECT ptt.rowid as taskid, ptt.task_duration, ptt.task_date, ptt.fk_task";
|
||||||
$sql.= " AND ptt.fk_user='".$userid."'";
|
$sql.= " FROM ".MAIN_DB_PREFIX."projet_task_time AS ptt, ".MAIN_DB_PREFIX."projet_task as pt";
|
||||||
$sql .= "AND (ptt.task_date >= '".$this->db->idate($datestart)."' ";
|
$sql.= " WHERE ptt.fk_task = pt.rowid";
|
||||||
$sql .= "AND (ptt.task_date < '".$this->db->idate($datestart + 7 * 24 * 3600)."' ";
|
$sql.= " AND pt.fk_projet = ".$this->id;
|
||||||
|
$sql.= " AND (ptt.task_date >= '".$this->db->idate($datestart)."' ";
|
||||||
|
$sql.= " AND ptt.task_date <= '".$this->db->idate($datestart + (7 * 24 * 3600) - 1)."')";
|
||||||
|
if ($task_id) $sql.= " AND ptt.fk_task=".$taskid;
|
||||||
|
if (is_numeric($userid)) $sql.= " AND ptt.fk_user=".$userid;
|
||||||
|
|
||||||
|
//print $sql;
|
||||||
$resql=$this->db->query($sql);
|
$resql=$this->db->query($sql);
|
||||||
if ($resql)
|
if ($resql)
|
||||||
{
|
{
|
||||||
@ -1470,10 +1479,8 @@ class Project extends CommonObject
|
|||||||
{
|
{
|
||||||
$obj=$this->db->fetch_object($resql);
|
$obj=$this->db->fetch_object($resql);
|
||||||
$day=$this->db->jdate($obj->task_date);
|
$day=$this->db->jdate($obj->task_date);
|
||||||
//$day=(intval(date('w',strtotime($obj->task_date)))+1)%6;
|
|
||||||
// if several tasktime in one day then only the last is used
|
|
||||||
$this->weekWorkLoad[$day] += $obj->task_duration;
|
$this->weekWorkLoad[$day] += $obj->task_duration;
|
||||||
$this->taskTimeId[$day]= ($obj->rowid)?($obj->rowid):0;
|
$this->weekWorkLoadPerTask[$day][$obj->fk_task] += $obj->task_duration;
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
$this->db->free($resql);
|
$this->db->free($resql);
|
||||||
|
|||||||
@ -287,7 +287,7 @@ class Task extends CommonObject
|
|||||||
$sql.= " label=".(isset($this->label)?"'".$this->db->escape($this->label)."'":"null").",";
|
$sql.= " label=".(isset($this->label)?"'".$this->db->escape($this->label)."'":"null").",";
|
||||||
$sql.= " description=".(isset($this->description)?"'".$this->db->escape($this->description)."'":"null").",";
|
$sql.= " description=".(isset($this->description)?"'".$this->db->escape($this->description)."'":"null").",";
|
||||||
$sql.= " duration_effective=".(isset($this->duration_effective)?$this->duration_effective:"null").",";
|
$sql.= " duration_effective=".(isset($this->duration_effective)?$this->duration_effective:"null").",";
|
||||||
$sql.= " planned_workload=".(isset($this->planned_workload)?$this->planned_workload:"0").",";
|
$sql.= " planned_workload=".((isset($this->planned_workload) && $this->planned_workload != '')?$this->planned_workload:"null").",";
|
||||||
$sql.= " dateo=".($this->date_start!=''?"'".$this->db->idate($this->date_start)."'":'null').",";
|
$sql.= " dateo=".($this->date_start!=''?"'".$this->db->idate($this->date_start)."'":'null').",";
|
||||||
$sql.= " datee=".($this->date_end!=''?"'".$this->db->idate($this->date_end)."'":'null').",";
|
$sql.= " datee=".($this->date_end!=''?"'".$this->db->idate($this->date_end)."'":'null').",";
|
||||||
$sql.= " progress=".$this->progress.",";
|
$sql.= " progress=".$this->progress.",";
|
||||||
@ -497,8 +497,8 @@ class Task extends CommonObject
|
|||||||
* Return clicable name (with picto eventually)
|
* Return clicable name (with picto eventually)
|
||||||
*
|
*
|
||||||
* @param int $withpicto 0=No picto, 1=Include picto into link, 2=Only picto
|
* @param int $withpicto 0=No picto, 1=Include picto into link, 2=Only picto
|
||||||
* @param int $option Sur quoi pointe le lien
|
* @param string $option 'withproject' or ''
|
||||||
* @param int $mode Mode 'task', 'time', 'contact', 'note', document' define page to link to.
|
* @param string $mode Mode 'task', 'time', 'contact', 'note', document' define page to link to.
|
||||||
* @return string Chaine avec URL
|
* @return string Chaine avec URL
|
||||||
*/
|
*/
|
||||||
function getNomUrl($withpicto=0,$option='',$mode='task')
|
function getNomUrl($withpicto=0,$option='',$mode='task')
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
* Copyright (C) 2006-2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2006-2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -42,7 +42,7 @@ $action=GETPOST('action','alpha');
|
|||||||
$confirm=GETPOST('confirm','alpha');
|
$confirm=GETPOST('confirm','alpha');
|
||||||
$withproject=GETPOST('withproject','int');
|
$withproject=GETPOST('withproject','int');
|
||||||
$project_ref=GETPOST('project_ref','alpha');
|
$project_ref=GETPOST('project_ref','alpha');
|
||||||
$planned_workload=GETPOST('planned_workloadhour')*3600+GETPOST('planned_workloadmin')*60;
|
$planned_workload=((GETPOST('planned_workloadhour')!='' && GETPOST('planned_workloadmin')!='')?GETPOST('planned_workloadhour')*3600+GETPOST('planned_workloadmin')*60:'');
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
$socid=0;
|
$socid=0;
|
||||||
@ -457,7 +457,7 @@ if ($id > 0 || ! empty($ref))
|
|||||||
if ($object->planned_workload != '')
|
if ($object->planned_workload != '')
|
||||||
{
|
{
|
||||||
$tmparray=$object->getSummaryOfTimeSpent();
|
$tmparray=$object->getSummaryOfTimeSpent();
|
||||||
if ($tmparray['total_duration'] > 0) print round($tmparray['total_duration'] / $object->planned_workload * 100, 2).' %';
|
if ($tmparray['total_duration'] > 0 && ! empty($object->planned_workload)) print round($tmparray['total_duration'] / $object->planned_workload * 100, 2).' %';
|
||||||
else print '0 %';
|
else print '0 %';
|
||||||
}
|
}
|
||||||
else print '';
|
else print '';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user