2006-09-23 02:27:47 +02:00
< ? php
2015-02-02 13:27:55 +01:00
/* Copyright ( C ) 2006 - 2015 Laurent Destailleur < eldy @ users . sourceforge . net >
2012-12-30 15:13:49 +01:00
* Copyright ( C ) 2010 Regis Houssin < regis . houssin @ capnetworks . com >
2013-11-05 11:17:54 +01:00
* Copyright ( C ) 2011 Juanjo Menent < jmenent @ 2 byte . es >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
* or see http :// www . gnu . org /
*/
2006-09-23 02:27:47 +02:00
/**
2011-10-24 12:59:44 +02:00
* \file htdocs / core / lib / project . lib . php
2010-11-11 13:21:15 +01:00
* \brief Functions used by project module
* \ingroup project
2013-11-05 11:17:54 +01:00
*/
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php' ;
2010-06-01 17:33:27 +02:00
2010-11-11 13:21:15 +01:00
2012-02-04 10:48:47 +01:00
/**
* Prepare array with list of tabs
*
* @ param Object $object Object related to tabs
2014-08-30 05:30:37 +02:00
* @ return array Array of tabs to show
2012-02-04 10:48:47 +01:00
*/
2010-01-12 19:02:23 +01:00
function project_prepare_head ( $object )
2006-09-23 02:27:47 +02:00
{
2016-01-23 17:19:34 +01:00
global $db , $langs , $conf , $user ;
2017-06-02 12:27:46 +02:00
2013-04-12 11:09:53 +02:00
$h = 0 ;
$head = array ();
2014-09-18 21:18:25 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/card.php?id=' . $object -> id ;
2013-04-12 11:09:53 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " Project " );
$head [ $h ][ 2 ] = 'project' ;
$h ++ ;
2017-10-07 13:09:31 +02:00
$nbContact = count ( $object -> liste_contact ( - 1 , 'internal' )) + count ( $object -> liste_contact ( - 1 , 'external' ));
2013-04-12 11:09:53 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/contact.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " ProjectContact " );
2016-06-20 10:22:08 +02:00
if ( $nbContact > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">' . $nbContact . '</span>' ;
2013-04-12 11:09:53 +02:00
$head [ $h ][ 2 ] = 'contact' ;
$h ++ ;
if ( ! empty ( $conf -> fournisseur -> enabled ) || ! empty ( $conf -> propal -> enabled ) || ! empty ( $conf -> commande -> enabled )
2013-05-14 20:30:18 +02:00
|| ! empty ( $conf -> facture -> enabled ) || ! empty ( $conf -> contrat -> enabled )
|| ! empty ( $conf -> ficheinter -> enabled ) || ! empty ( $conf -> agenda -> enabled ) || ! empty ( $conf -> deplacement -> enabled ))
2013-04-12 11:09:53 +02:00
{
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/element.php?id=' . $object -> id ;
2015-10-06 16:03:47 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " ProjectOverview " );
2013-04-12 11:09:53 +02:00
$head [ $h ][ 2 ] = 'element' ;
$h ++ ;
}
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
// $this->tabs = array('entity:-tabname); to remove a tab
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'project' );
2017-10-04 13:17:16 +02:00
2013-07-20 10:54:38 +02:00
if ( empty ( $conf -> global -> MAIN_DISABLE_NOTES_TAB ))
2017-10-07 13:09:31 +02:00
{
$nbNote = 0 ;
if ( ! empty ( $object -> note_private )) $nbNote ++ ;
2013-07-20 10:54:38 +02:00
if ( ! empty ( $object -> note_public )) $nbNote ++ ;
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/note.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( 'Notes' );
2014-10-19 19:57:42 +02:00
if ( $nbNote > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">' . $nbNote . '</span>' ;
2013-07-20 10:54:38 +02:00
$head [ $h ][ 2 ] = 'notes' ;
$h ++ ;
2017-10-07 13:09:31 +02:00
}
2013-10-30 11:57:32 +01:00
2013-07-20 10:54:38 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2017-10-07 13:09:31 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php' ;
2013-07-20 10:54:38 +02:00
$upload_dir = $conf -> projet -> dir_output . " / " . dol_sanitizeFileName ( $object -> ref );
2017-04-12 11:30:33 +02:00
$nbFiles = count ( dol_dir_list ( $upload_dir , 'files' , 0 , '' , '(\.meta|_preview.*\.png)$' ));
2017-10-07 13:09:31 +02:00
$nbLinks = Link :: count ( $db , $object -> element , $object -> id );
2013-04-12 11:09:53 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/document.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( 'Documents' );
2016-01-23 17:23:00 +01:00
if (( $nbFiles + $nbLinks ) > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">' . ( $nbFiles + $nbLinks ) . '</span>' ;
2013-04-12 11:09:53 +02:00
$head [ $h ][ 2 ] = 'document' ;
$h ++ ;
2013-10-30 11:57:32 +01:00
2015-02-02 13:27:55 +01:00
if ( empty ( $conf -> global -> PROJECT_HIDE_TASKS ))
{
// Then tab for sub level of projet, i mean tasks
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Tasks " );
2016-03-29 20:06:01 +02:00
require_once DOL_DOCUMENT_ROOT . '/projet/class/task.class.php' ;
$taskstatic = new Task ( $db );
$nbTasks = count ( $taskstatic -> getTasksArray ( 0 , 0 , $object -> id , 0 , 0 ));
if ( $nbTasks > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">' . ( $nbTasks ) . '</span>' ;
2015-02-02 13:27:55 +01:00
$head [ $h ][ 2 ] = 'tasks' ;
$h ++ ;
2013-04-12 11:09:53 +02:00
2015-02-02 13:27:55 +01:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/ganttview.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Gantt " );
2016-03-29 20:06:01 +02:00
if ( $nbTasks > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">' . ( $nbTasks ) . '</span>' ;
2015-02-02 13:27:55 +01:00
$head [ $h ][ 2 ] = 'gantt' ;
$h ++ ;
}
2013-04-12 11:09:53 +02:00
2017-10-04 13:17:16 +02:00
// Manage discussion
if ( ! empty ( $conf -> global -> PROJECT_ALLOW_COMMENT_ON_PROJECT ))
{
$nbComments = $object -> getNbComments ();
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/comment.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " CommentLink " );
if ( $nbComments > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">' . $nbComments . '</span>' ;
$head [ $h ][ 2 ] = 'project_comment' ;
$h ++ ;
}
2016-07-09 15:30:42 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/info.php?id=' . $object -> id ;
2017-10-07 13:09:31 +02:00
$head [ $h ][ 1 ] .= $langs -> trans ( " Events " );
if ( ! empty ( $conf -> agenda -> enabled ) && ( ! empty ( $user -> rights -> agenda -> myactions -> read ) || ! empty ( $user -> rights -> agenda -> allactions -> read ) ))
{
$head [ $h ][ 1 ] .= '/' ;
$head [ $h ][ 1 ] .= $langs -> trans ( " Agenda " );
}
2016-10-17 17:52:58 +02:00
$head [ $h ][ 2 ] = 'agenda' ;
2016-07-09 15:30:42 +02:00
$h ++ ;
2017-06-02 12:27:46 +02:00
2013-04-12 11:09:53 +02:00
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'project' , 'remove' );
return $head ;
2006-09-23 02:27:47 +02:00
}
2008-01-11 11:25:26 +01:00
/**
2012-02-04 10:48:47 +01:00
* Prepare array with list of tabs
*
* @ param Object $object Object related to tabs
2014-08-30 05:30:37 +02:00
* @ return array Array of tabs to show
2009-01-15 00:36:51 +01:00
*/
function task_prepare_head ( $object )
{
2016-03-29 20:06:01 +02:00
global $db , $langs , $conf , $user ;
2013-04-12 11:09:53 +02:00
$h = 0 ;
$head = array ();
2015-04-18 18:07:41 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks/task.php?id=' . $object -> id . ( GETPOST ( 'withproject' ) ? '&withproject=1' : '' );
2013-04-12 11:09:53 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " Card " );
$head [ $h ][ 2 ] = 'task_task' ;
$h ++ ;
2016-06-20 10:22:08 +02:00
$nbContact = count ( $object -> liste_contact ( - 1 , 'internal' )) + count ( $object -> liste_contact ( - 1 , 'external' ));
2015-04-18 18:07:41 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks/contact.php?id=' . $object -> id . ( GETPOST ( 'withproject' ) ? '&withproject=1' : '' );
2013-04-12 11:09:53 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " TaskRessourceLinks " );
2016-06-20 10:22:08 +02:00
if ( $nbContact > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">' . $nbContact . '</span>' ;
2013-04-12 11:09:53 +02:00
$head [ $h ][ 2 ] = 'task_contact' ;
$h ++ ;
2017-04-11 02:48:16 +02:00
// Is there timespent ?
$nbTimeSpent = 0 ;
$sql = " SELECT t.rowid " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " projet_task_time as t, " . MAIN_DB_PREFIX . " projet_task as pt, " . MAIN_DB_PREFIX . " user as u " ;
$sql .= " WHERE t.fk_user = u.rowid AND t.fk_task = pt.rowid " ;
$sql .= " AND t.fk_task = " . $object -> id ;
$resql = $db -> query ( $sql );
if ( $resql )
{
2017-10-07 13:09:31 +02:00
$obj = $db -> fetch_object ( $resql );
if ( $obj ) $nbTimeSpent = 1 ;
2017-04-11 02:48:16 +02:00
}
else dol_print_error ( $db );
2017-06-02 12:27:46 +02:00
2015-04-18 18:07:41 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks/time.php?id=' . $object -> id . ( GETPOST ( 'withproject' ) ? '&withproject=1' : '' );
2013-04-12 11:09:53 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " TimeSpent " );
2017-04-11 02:48:16 +02:00
if ( $nbTimeSpent > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">...</span>' ;
2013-04-12 11:09:53 +02:00
$head [ $h ][ 2 ] = 'task_time' ;
$h ++ ;
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
// $this->tabs = array('entity:-tabname); to remove a tab
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'task' );
2017-09-18 13:15:24 +02:00
2014-05-10 16:43:47 +02:00
if ( empty ( $conf -> global -> MAIN_DISABLE_NOTES_TAB ))
2017-10-07 13:09:31 +02:00
{
$nbNote = 0 ;
if ( ! empty ( $object -> note_private )) $nbNote ++ ;
2014-05-10 16:43:47 +02:00
if ( ! empty ( $object -> note_public )) $nbNote ++ ;
2015-04-18 18:07:41 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks/note.php?id=' . $object -> id . ( GETPOST ( 'withproject' ) ? '&withproject=1' : '' );
2014-05-10 16:43:47 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( 'Notes' );
2014-10-19 19:57:42 +02:00
if ( $nbNote > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">' . $nbNote . '</span>' ;
2014-05-10 16:43:47 +02:00
$head [ $h ][ 2 ] = 'task_notes' ;
$h ++ ;
2017-10-07 13:09:31 +02:00
}
2017-09-18 13:15:24 +02:00
2015-04-18 18:07:41 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks/document.php?id=' . $object -> id . ( GETPOST ( 'withproject' ) ? '&withproject=1' : '' );
2014-05-10 16:43:47 +02:00
$filesdir = $conf -> projet -> dir_output . " / " . dol_sanitizeFileName ( $object -> project -> ref ) . '/' . dol_sanitizeFileName ( $object -> ref );
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2016-06-16 14:08:14 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php' ;
2017-04-12 11:30:33 +02:00
$nbFiles = count ( dol_dir_list ( $filesdir , 'files' , 0 , '' , '(\.meta|_preview.*\.png)$' ));
2017-10-07 13:09:31 +02:00
$nbLinks = Link :: count ( $db , $object -> element , $object -> id );
2016-03-29 20:06:01 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( 'Documents' );
if (( $nbFiles + $nbLinks ) > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">' . ( $nbFiles + $nbLinks ) . '</span>' ;
2013-04-12 11:09:53 +02:00
$head [ $h ][ 2 ] = 'task_document' ;
$h ++ ;
2017-10-04 13:17:16 +02:00
// Manage discussion
if ( ! empty ( $conf -> global -> PROJECT_ALLOW_COMMENT_ON_TASK ))
{
$nbComments = $object -> getNbComments ();
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks/comment.php?id=' . $object -> id . ( GETPOST ( 'withproject' ) ? '&withproject=1' : '' );
$head [ $h ][ 1 ] = $langs -> trans ( " CommentLink " );
if ( $nbComments > 0 ) $head [ $h ][ 1 ] .= ' <span class="badge">' . $nbComments . '</span>' ;
$head [ $h ][ 2 ] = 'task_comment' ;
$h ++ ;
}
2013-04-12 11:09:53 +02:00
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'task' , 'remove' );
return $head ;
}
2015-03-01 17:45:36 +01:00
/**
* Prepare array with list of tabs
*
* @ param string $mode Mode
2017-06-02 12:27:46 +02:00
* @ param string $fuser Filter on user
2015-03-01 17:45:36 +01:00
* @ return array Array of tabs to show
*/
2017-06-02 12:27:46 +02:00
function project_timesheet_prepare_head ( $mode , $fuser = null )
2015-03-01 17:45:36 +01:00
{
global $langs , $conf , $user ;
$h = 0 ;
$head = array ();
$h = 0 ;
2017-06-02 12:27:46 +02:00
$param = '' ;
$param .= ( $mode ? '&mode=' . $mode : '' );
if ( is_object ( $fuser ) && $fuser -> id > 0 && $fuser -> id != $user -> id ) $param .= '&search_usertoprocessid=' . $fuser -> id ;
2015-03-18 11:04:50 +01:00
if ( empty ( $conf -> global -> PROJECT_DISABLE_TIMESHEET_PERWEEK ))
{
2017-06-02 12:27:46 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . " /projet/activity/perweek.php " . ( $param ? '?' . $param : '' );
2015-03-18 11:04:50 +01:00
$head [ $h ][ 1 ] = $langs -> trans ( " InputPerWeek " );
$head [ $h ][ 2 ] = 'inputperweek' ;
$h ++ ;
}
if ( empty ( $conf -> global -> PROJECT_DISABLE_TIMESHEET_PERTIME ))
2015-03-05 13:48:57 +01:00
{
2017-06-02 12:27:46 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . " /projet/activity/perday.php " . ( $param ? '?' . $param : '' );
2015-03-05 13:48:57 +01:00
$head [ $h ][ 1 ] = $langs -> trans ( " InputPerDay " );
$head [ $h ][ 2 ] = 'inputperday' ;
$h ++ ;
}
2015-03-01 17:45:36 +01:00
2017-11-22 21:26:24 +01:00
/* if ( $conf -> global -> MAIN_FEATURES_LEVEL >= 2 )
2015-03-05 13:48:57 +01:00
{
2017-11-22 21:19:40 +01:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . " /projet/activity/perline.php " . ( $param ? '?' . $param : '' );
$head [ $h ][ 1 ] = $langs -> trans ( " InputDetail " );
$head [ $h ][ 2 ] = 'inputperline' ;
2015-03-05 13:48:57 +01:00
$h ++ ;
2017-11-22 21:26:24 +01:00
} */
2015-03-01 17:45:36 +01:00
complete_head_from_modules ( $conf , $langs , null , $head , $h , 'project_timesheet' );
complete_head_from_modules ( $conf , $langs , null , $head , $h , 'project_timesheet' , 'remove' );
return $head ;
}
2013-04-12 11:09:53 +02:00
/**
* Prepare array with list of tabs
*
2014-08-30 05:30:37 +02:00
* @ return array Array of tabs to show
2013-04-12 11:09:53 +02:00
*/
function project_admin_prepare_head ()
{
global $langs , $conf , $user ;
$h = 0 ;
$head = array ();
$h = 0 ;
$head [ $h ][ 0 ] = DOL_URL_ROOT . " /projet/admin/project.php " ;
$head [ $h ][ 1 ] = $langs -> trans ( " Projects " );
$head [ $h ][ 2 ] = 'project' ;
$h ++ ;
2014-04-23 16:12:45 +02:00
complete_head_from_modules ( $conf , $langs , null , $head , $h , 'project_admin' );
2013-04-12 11:09:53 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . " /projet/admin/project_extrafields.php " ;
$head [ $h ][ 1 ] = $langs -> trans ( " ExtraFieldsProject " );
$head [ $h ][ 2 ] = 'attributes' ;
$h ++ ;
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/admin/project_task_extrafields.php' ;
$head [ $h ][ 1 ] = $langs -> trans ( " ExtraFieldsProjectTask " );
$head [ $h ][ 2 ] = 'attributes_task' ;
$h ++ ;
2014-04-23 16:12:45 +02:00
complete_head_from_modules ( $conf , $langs , null , $head , $h , 'project_admin' , 'remove' );
2013-04-12 11:09:53 +02:00
return $head ;
2009-01-15 00:36:51 +01:00
}
/**
2009-07-28 02:52:34 +02:00
* Show task lines with a particular parent
2011-12-04 15:26:32 +01:00
*
2015-03-05 11:13:44 +01:00
* @ param string $inc Line number ( start to 0 , then increased by recursive call )
* @ param string $parent Id of parent project to show ( 0 to show all )
* @ param Task [] $lines Array of lines
2016-01-19 23:45:03 +01:00
* @ param int $level Level ( start to 0 , then increased / decrease by recursive call ), or - 1 to show all level in order of $lines without the recursive groupment feature .
2012-02-04 14:39:47 +01:00
* @ param string $var Color
* @ param int $showproject Show project columns
2014-09-27 16:00:11 +02:00
* @ param int $taskrole Array of roles of user for each tasks
2014-01-06 13:02:20 +01:00
* @ param int $projectsListId List of id of project allowed to user ( string separated with comma )
2012-09-07 00:14:50 +02:00
* @ param int $addordertick Add a tick to move task
2016-02-28 00:00:08 +01:00
* @ param int $projectidfortotallink 0 or Id of project to use on total line ( link to see all time consumed for project )
2012-03-18 19:23:01 +01:00
* @ return void
2009-01-15 00:36:51 +01:00
*/
2016-02-28 00:00:08 +01:00
function projectLinesa ( & $inc , $parent , & $lines , & $level , $var , $showproject , & $taskrole , $projectsListId = '' , $addordertick = 0 , $projectidfortotallink = 0 )
2009-01-15 00:36:51 +01:00
{
2013-04-12 11:09:53 +02:00
global $user , $bc , $langs ;
2011-12-05 19:03:36 +01:00
global $projectstatic , $taskstatic ;
2012-02-04 14:39:47 +01:00
2013-04-12 11:09:53 +02:00
$lastprojectid = 0 ;
$projectsArrayId = explode ( ',' , $projectsListId );
$numlines = count ( $lines );
2014-03-17 15:13:24 +01:00
// We declare counter as global because we want to edit them into recursive call
global $total_projectlinesa_spent , $total_projectlinesa_planned , $total_projectlinesa_spent_if_planned ;
if ( $level == 0 )
{
$total_projectlinesa_spent = 0 ;
$total_projectlinesa_planned = 0 ;
$total_projectlinesa_spent_if_planned = 0 ;
}
2013-04-12 11:09:53 +02:00
for ( $i = 0 ; $i < $numlines ; $i ++ )
{
2016-01-19 23:45:03 +01:00
if ( $parent == 0 && $level >= 0 ) $level = 0 ; // if $level = -1, we dont' use sublevel recursion, we show all lines
2013-04-12 11:09:53 +02:00
// Process line
// print "i:".$i."-".$lines[$i]->fk_project.'<br>';
2016-01-19 23:45:03 +01:00
if ( $lines [ $i ] -> fk_parent == $parent || $level < 0 ) // if $level = -1, we dont' use sublevel recursion, we show all lines
2013-04-12 11:09:53 +02:00
{
// Show task line.
$showline = 1 ;
$showlineingray = 0 ;
// If there is filters to use
if ( is_array ( $taskrole ))
{
// If task not legitimate to show, search if a legitimate task exists later in tree
if ( ! isset ( $taskrole [ $lines [ $i ] -> id ]) && $lines [ $i ] -> id != $lines [ $i ] -> fk_parent )
{
// So search if task has a subtask legitimate to show
$foundtaskforuserdeeper = 0 ;
searchTaskInChild ( $foundtaskforuserdeeper , $lines [ $i ] -> id , $lines , $taskrole );
//print '$foundtaskforuserpeeper='.$foundtaskforuserdeeper.'<br>';
if ( $foundtaskforuserdeeper > 0 )
{
$showlineingray = 1 ; // We will show line but in gray
}
else
{
$showline = 0 ; // No reason to show line
}
}
}
2014-01-06 12:42:50 +01:00
else
{
// Caller did not ask to filter on tasks of a specific user (this probably means he want also tasks of all users, into public project
// or into all other projects if user has permission to).
2014-01-06 13:02:20 +01:00
if ( empty ( $user -> rights -> projet -> all -> lire ))
2014-01-06 12:42:50 +01:00
{
// User is not allowed on this project and project is not public, so we hide line
if ( ! in_array ( $lines [ $i ] -> fk_project , $projectsArrayId ))
{
2014-01-06 13:02:20 +01:00
// Note that having a user assigned to a task into a project user has no permission on, should not be possible
// because assignement on task can be done only on contact of project.
2014-03-11 09:43:26 +01:00
// If assignement was done and after, was removed from contact of project, then we can hide the line.
$showline = 0 ;
2014-01-06 12:42:50 +01:00
}
}
}
2013-04-12 11:09:53 +02:00
if ( $showline )
{
// Break on a new project
if ( $parent == 0 && $lines [ $i ] -> fk_project != $lastprojectid )
{
$var = ! $var ;
$lastprojectid = $lines [ $i ] -> fk_project ;
}
print '<tr ' . $bc [ $var ] . ' id="row-' . $lines [ $i ] -> id . '">' . " \n " ;
if ( $showproject )
{
2014-03-11 09:43:26 +01:00
// Project ref
2013-04-12 11:09:53 +02:00
print " <td> " ;
2015-12-04 18:33:57 +01:00
//if ($showlineingray) print '<i>';
2013-04-12 11:09:53 +02:00
$projectstatic -> id = $lines [ $i ] -> fk_project ;
$projectstatic -> ref = $lines [ $i ] -> projectref ;
$projectstatic -> public = $lines [ $i ] -> public ;
2016-01-18 16:43:15 +01:00
$projectstatic -> title = $lines [ $i ] -> projectlabel ;
2015-10-06 00:46:26 +02:00
if ( $lines [ $i ] -> public || in_array ( $lines [ $i ] -> fk_project , $projectsArrayId ) || ! empty ( $user -> rights -> projet -> all -> lire )) print $projectstatic -> getNomUrl ( 1 );
2013-04-12 11:09:53 +02:00
else print $projectstatic -> getNomUrl ( 1 , 'nolink' );
2015-12-04 18:33:57 +01:00
//if ($showlineingray) print '</i>';
2013-04-12 11:09:53 +02:00
print " </td> " ;
2014-03-11 09:43:26 +01:00
2014-03-11 20:38:29 +01:00
// Project status
2014-03-11 09:43:26 +01:00
print '<td>' ;
$projectstatic -> statut = $lines [ $i ] -> projectstatus ;
print $projectstatic -> getLibStatut ( 2 );
print " </td> " ;
2013-04-12 11:09:53 +02:00
}
// Ref of task
print '<td>' ;
if ( $showlineingray )
{
2013-07-18 10:24:45 +02:00
print '<i>' . img_object ( '' , 'projecttask' ) . ' ' . $lines [ $i ] -> ref . '</i>' ;
2013-04-12 11:09:53 +02:00
}
else
{
$taskstatic -> id = $lines [ $i ] -> id ;
2013-07-18 10:24:45 +02:00
$taskstatic -> ref = $lines [ $i ] -> ref ;
2013-04-12 11:09:53 +02:00
$taskstatic -> label = ( $taskrole [ $lines [ $i ] -> id ] ? $langs -> trans ( " YourRole " ) . ': ' . $taskrole [ $lines [ $i ] -> id ] : '' );
2015-04-09 16:26:21 +02:00
print $taskstatic -> getNomUrl ( 1 , 'withproject' );
2013-04-12 11:09:53 +02:00
}
print '</td>' ;
// Title of task
print " <td> " ;
if ( $showlineingray ) print '<i>' ;
2016-10-24 18:43:17 +02:00
//else print '<a href="'.DOL_URL_ROOT.'/projet/tasks/task.php?id='.$lines[$i]->id.'&withproject=1">';
2013-04-12 11:09:53 +02:00
for ( $k = 0 ; $k < $level ; $k ++ )
{
print " " ;
}
print $lines [ $i ] -> label ;
if ( $showlineingray ) print '</i>' ;
2016-10-24 18:43:17 +02:00
//else print '</a>';
2013-04-12 11:09:53 +02:00
print " </td> \n " ;
// Date start
print '<td align="center">' ;
2014-03-24 15:22:35 +01:00
print dol_print_date ( $lines [ $i ] -> date_start , 'dayhour' );
2013-04-12 11:09:53 +02:00
print '</td>' ;
// Date end
print '<td align="center">' ;
2016-01-18 15:56:51 +01:00
$taskstatic -> projectstatus = $lines [ $i ] -> projectstatus ;
2017-10-07 13:09:31 +02:00
$taskstatic -> progress = $lines [ $i ] -> progress ;
$taskstatic -> fk_statut = $lines [ $i ] -> status ;
$taskstatic -> datee = $lines [ $i ] -> date_end ;
print dol_print_date ( $lines [ $i ] -> date_end , 'dayhour' );
if ( $taskstatic -> hasDelay ()) print img_warning ( $langs -> trans ( " Late " ));
2013-04-12 11:09:53 +02:00
print '</td>' ;
2015-02-28 19:02:03 +01:00
$plannedworkloadoutputformat = 'allhourmin' ;
$timespentoutputformat = 'allhourmin' ;
if ( ! empty ( $conf -> global -> PROJECT_PLANNED_WORKLOAD_FORMAT )) $plannedworkloadoutputformat = $conf -> global -> PROJECT_PLANNED_WORKLOAD_FORMAT ;
2015-07-28 12:49:29 +02:00
if ( ! empty ( $conf -> global -> PROJECT_TIMES_SPENT_FORMAT )) $timespentoutputformat = $conf -> global -> PROJECT_TIME_SPENT_FORMAT ;
2015-02-28 19:02:03 +01:00
2013-10-30 21:44:04 +01:00
// Planned Workload (in working hours)
2014-12-04 11:03:48 +01:00
print '<td align="right">' ;
2015-02-28 19:02:03 +01:00
$fullhour = convertSecondToTime ( $lines [ $i ] -> planned_workload , $plannedworkloadoutputformat );
2013-10-30 21:44:04 +01:00
$workingdelay = convertSecondToTime ( $lines [ $i ] -> planned_workload , 'all' , 86400 , 7 ); // TODO Replace 86400 and 7 to take account working hours per day and working day per weeks
2015-02-28 19:02:03 +01:00
if ( $lines [ $i ] -> planned_workload != '' )
2013-10-30 21:44:04 +01:00
{
print $fullhour ;
// TODO Add delay taking account of working hours per day and working day per week
//if ($workingdelay != $fullhour) print '<br>('.$workingdelay.')';
}
//else print '--:--';
2013-05-14 20:30:18 +02:00
print '</td>' ;
2013-05-13 17:08:36 +02:00
2013-04-12 11:09:53 +02:00
// Time spent
print '<td align="right">' ;
if ( $showlineingray ) print '<i>' ;
else print '<a href="' . DOL_URL_ROOT . '/projet/tasks/time.php?id=' . $lines [ $i ] -> id . ( $showproject ? '' : '&withproject=1' ) . '">' ;
2015-02-28 19:02:03 +01:00
if ( $lines [ $i ] -> duration ) print convertSecondToTime ( $lines [ $i ] -> duration , $timespentoutputformat );
2013-04-12 11:09:53 +02:00
else print '--:--' ;
if ( $showlineingray ) print '</i>' ;
else print '</a>' ;
print '</td>' ;
2014-12-21 14:58:18 +01:00
// Progress calculated (Note: ->duration is time spent)
2013-10-30 21:44:04 +01:00
print '<td align="right">' ;
2014-12-21 14:58:18 +01:00
if ( $lines [ $i ] -> planned_workload || $lines [ $i ] -> duration )
{
if ( $lines [ $i ] -> planned_workload ) print round ( 100 * $lines [ $i ] -> duration / $lines [ $i ] -> planned_workload , 2 ) . ' %' ;
2017-05-18 12:12:36 +02:00
else print '<span class="opacitymedium">' . $langs -> trans ( 'WorkloadNotDefined' ) . '</span>' ;
2014-12-21 14:58:18 +01:00
}
2013-10-30 21:44:04 +01:00
print '</td>' ;
2016-01-18 15:56:51 +01:00
// Progress declared
print '<td align="right">' ;
if ( $lines [ $i ] -> progress != '' )
{
print $lines [ $i ] -> progress . ' %' ;
}
print '</td>' ;
2013-04-12 11:09:53 +02:00
// Tick to drag and drop
if ( $addordertick )
{
2013-05-14 20:30:18 +02:00
print '<td align="center" class="tdlineupdown hideonsmartphone"> </td>' ;
2013-04-12 11:09:53 +02:00
}
print " </tr> \n " ;
if ( ! $showlineingray ) $inc ++ ;
2016-01-19 23:45:03 +01:00
if ( $level >= 0 ) // Call sublevels
{
2017-10-07 13:09:31 +02:00
$level ++ ;
if ( $lines [ $i ] -> id ) projectLinesa ( $inc , $lines [ $i ] -> id , $lines , $level , $var , $showproject , $taskrole , $projectsListId , $addordertick );
$level -- ;
2016-01-19 23:45:03 +01:00
}
2017-06-02 12:27:46 +02:00
2014-03-17 15:13:24 +01:00
$total_projectlinesa_spent += $lines [ $i ] -> duration ;
$total_projectlinesa_planned += $lines [ $i ] -> planned_workload ;
if ( $lines [ $i ] -> planned_workload ) $total_projectlinesa_spent_if_planned += $lines [ $i ] -> duration ;
2013-04-12 11:09:53 +02:00
}
}
else
{
//$level--;
}
}
2016-01-19 23:45:03 +01:00
if (( $total_projectlinesa_planned > 0 || $total_projectlinesa_spent > 0 ) && $level <= 0 )
2013-04-12 11:09:53 +02:00
{
2015-04-09 10:37:54 +02:00
print '<tr class="liste_total nodrag nodrop">' ;
2013-04-16 01:13:20 +02:00
print '<td class="liste_total">' . $langs -> trans ( " Total " ) . '</td>' ;
2014-03-11 09:43:26 +01:00
if ( $showproject ) print '<td></td><td></td>' ;
2013-04-12 11:09:53 +02:00
print '<td></td>' ;
print '<td></td>' ;
print '<td></td>' ;
2014-12-04 11:03:48 +01:00
print '<td align="right" class="nowrap liste_total">' ;
2014-03-17 15:13:24 +01:00
print convertSecondToTime ( $total_projectlinesa_planned , 'allhourmin' );
print '</td>' ;
2014-03-16 09:49:53 +01:00
print '<td align="right" class="nowrap liste_total">' ;
2016-02-28 00:00:08 +01:00
if ( $projectidfortotallink > 0 ) print '<a href="' . DOL_URL_ROOT . '/projet/tasks/time.php?projectid=' . $projectidfortotallink . ( $showproject ? '' : '&withproject=1' ) . '">' ;
2014-03-17 15:13:24 +01:00
print convertSecondToTime ( $total_projectlinesa_spent , 'allhourmin' );
2016-02-28 00:00:08 +01:00
if ( $projectidfortotallink > 0 ) print '</a>' ;
2014-03-17 15:13:24 +01:00
print '</td>' ;
print '<td align="right" class="nowrap liste_total">' ;
2014-12-21 14:58:18 +01:00
if ( $total_projectlinesa_planned ) print round ( 100 * $total_projectlinesa_spent / $total_projectlinesa_planned , 2 ) . ' %' ;
2014-03-16 09:49:53 +01:00
print '</td>' ;
2016-01-18 15:56:51 +01:00
print '<td></td>' ;
2014-03-11 20:38:29 +01:00
if ( $addordertick ) print '<td class="hideonsmartphone"></td>' ;
2013-04-16 01:13:20 +02:00
print '</tr>' ;
2013-04-12 11:09:53 +02:00
}
return $inc ;
2009-01-15 00:36:51 +01:00
}
2009-07-28 15:37:28 +02:00
2017-11-22 21:19:40 +01:00
/**
* Output a task line into a pertime intput mode
*
* @ param string $inc Line number ( start to 0 , then increased by recursive call )
* @ param string $parent Id of parent task to show ( 0 to show all )
* @ param User | null $fuser Restrict list to user if defined
* @ param Task [] $lines Array of lines
* @ param int $level Level ( start to 0 , then increased / decrease by recursive call )
* @ param string $projectsrole Array of roles user has on project
* @ param string $tasksrole Array of roles user has on task
* @ param string $mine Show only task lines I am assigned to
* @ param int $restricteditformytask 0 = No restriction , 1 = Enable add time only if task is a task i am affected to
* @ param int $preselectedday Preselected day
* @ param array $isavailable Array with data that say if user is available for several days for morning and afternoon
* @ param int $oldprojectforbreak Old project id of last project break
* @ return array Array with time spent for $fuser for each day of week on tasks in $lines and substasks
*/
function projectLinesPerAction ( & $inc , $parent , $fuser , $lines , & $level , & $projectsrole , & $tasksrole , $mine , $restricteditformytask , $preselectedday , & $isavailable , $oldprojectforbreak = 0 )
{
global $conf , $db , $user , $bc , $langs ;
global $form , $formother , $projectstatic , $taskstatic , $thirdpartystatic ;
$lastprojectid = 0 ;
$totalforeachline = array ();
$workloadforid = array ();
$lineswithoutlevel0 = array ();
$numlines = count ( $lines );
// Create a smaller array with sublevels only to be used later. This increase dramatically performances.
if ( $parent == 0 ) // Always and only if at first level
{
for ( $i = 0 ; $i < $numlines ; $i ++ )
{
if ( $lines [ $i ] -> fk_task_parent ) $lineswithoutlevel0 [] = $lines [ $i ];
}
}
if ( empty ( $oldprojectforbreak ))
{
$oldprojectforbreak = ( empty ( $conf -> global -> PROJECT_TIMESHEET_DISABLEBREAK_ON_PROJECT ) ? 0 :- 1 ); // 0 to start break , -1 no break
}
//dol_syslog('projectLinesPerDay inc='.$inc.' preselectedday='.$preselectedday.' task parent id='.$parent.' level='.$level." count(lines)=".$numlines." count(lineswithoutlevel0)=".count($lineswithoutlevel0));
for ( $i = 0 ; $i < $numlines ; $i ++ )
{
if ( $parent == 0 ) $level = 0 ;
//if ($lines[$i]->fk_task_parent == $parent)
//{
// If we want all or we have a role on task, we show it
if ( empty ( $mine ) || ! empty ( $tasksrole [ $lines [ $i ] -> id ]))
{
//dol_syslog("projectLinesPerWeek Found line ".$i.", a qualified task (i have role or want to show all tasks) with id=".$lines[$i]->id." project id=".$lines[$i]->fk_project);
// Break on a new project
if ( $parent == 0 && $lines [ $i ] -> fk_project != $lastprojectid )
{
$lastprojectid = $lines [ $i ] -> fk_project ;
if ( $preselectedday )
{
$projectstatic -> id = $lines [ $i ] -> fk_project ;
}
}
if ( empty ( $workloadforid [ $projectstatic -> id ]))
{
if ( $preselectedday )
{
$projectstatic -> loadTimeSpent ( $preselectedday , 0 , $fuser -> id ); // Load time spent from table projet_task_time for the project into this->weekWorkLoad and this->weekWorkLoadPerTask for all days of a week
$workloadforid [ $projectstatic -> id ] = 1 ;
}
}
$projectstatic -> id = $lines [ $i ] -> fk_project ;
$projectstatic -> ref = $lines [ $i ] -> project_ref ;
$projectstatic -> title = $lines [ $i ] -> project_label ;
$projectstatic -> public = $lines [ $i ] -> public ;
$taskstatic -> id = $lines [ $i ] -> task_id ;
$taskstatic -> ref = ( $lines [ $i ] -> task_ref ? $lines [ $i ] -> task_ref : $lines [ $i ] -> task_id );
$taskstatic -> label = $lines [ $i ] -> task_label ;
$taskstatic -> date_start = $lines [ $i ] -> date_start ;
$taskstatic -> date_end = $lines [ $i ] -> date_end ;
$thirdpartystatic -> id = $lines [ $i ] -> socid ;
$thirdpartystatic -> name = $lines [ $i ] -> thirdparty_name ;
$thirdpartystatic -> email = $lines [ $i ] -> thirdparty_email ;
if ( empty ( $oldprojectforbreak ) || ( $oldprojectforbreak != - 1 && $oldprojectforbreak != $projectstatic -> id ))
{
print '<tr class="oddeven trforbreak">' . " \n " ;
print '<td colspan="11">' ;
print $projectstatic -> getNomUrl ( 1 , '' , 0 , $langs -> transnoentitiesnoconv ( " YourRole " ) . ': ' . $projectsrole [ $lines [ $i ] -> fk_project ]);
if ( $projectstatic -> title )
{
print ' - ' ;
print $projectstatic -> title ;
}
print '</td>' ;
print '</tr>' ;
}
if ( $oldprojectforbreak != - 1 ) $oldprojectforbreak = $projectstatic -> id ;
print '<tr class="oddeven">' . " \n " ;
// User
/*
print '<td class="nowrap">' ;
print $fuser -> getNomUrl ( 1 , 'withproject' , 'time' );
print '</td>' ;
*/
// Project
print " <td> " ;
if ( $oldprojectforbreak == - 1 )
{
print $projectstatic -> getNomUrl ( 1 , '' , 0 , $langs -> transnoentitiesnoconv ( " YourRole " ) . ': ' . $projectsrole [ $lines [ $i ] -> fk_project ]);
print '<br>' . $projectstatic -> title ;
}
print " </td> " ;
// Thirdparty
print '<td class="tdoverflowmax100">' ;
if ( $thirdpartystatic -> id > 0 ) print $thirdpartystatic -> getNomUrl ( 1 , 'project' , 10 );
print '</td>' ;
// Ref
print '<td>' ;
print '<!-- Task id = ' . $lines [ $i ] -> id . ' -->' ;
for ( $k = 0 ; $k < $level ; $k ++ ) print " " ;
print $taskstatic -> getNomUrl ( 1 , 'withproject' , 'time' );
// Label task
print '<br>' ;
for ( $k = 0 ; $k < $level ; $k ++ ) print " " ;
print $taskstatic -> label ;
//print "<br>";
//for ($k = 0 ; $k < $level ; $k++) print " ";
//print get_date_range($lines[$i]->date_start,$lines[$i]->date_end,'',$langs,0);
print " </td> \n " ;
// Date
print '<td align="center">' ;
print dol_print_date ( $lines [ $i ] -> timespent_datehour , 'day' );
print '</td>' ;
$disabledproject = 1 ; $disabledtask = 1 ;
//print "x".$lines[$i]->fk_project;
//var_dump($lines[$i]);
//var_dump($projectsrole[$lines[$i]->fk_project]);
// If at least one role for project
if ( $lines [ $i ] -> public || ! empty ( $projectsrole [ $lines [ $i ] -> fk_project ]) || $user -> rights -> projet -> all -> creer )
{
$disabledproject = 0 ;
$disabledtask = 0 ;
}
// If $restricteditformytask is on and I have no role on task, i disable edit
if ( $restricteditformytask && empty ( $tasksrole [ $lines [ $i ] -> id ]))
{
$disabledtask = 1 ;
}
// Hour
print '<td class="nowrap" align="center">' ;
print dol_print_date ( $lines [ $i ] -> timespent_datehour , 'hour' );
print '</td>' ;
$cssonholiday = '' ;
if ( ! $isavailable [ $preselectedday ][ 'morning' ] && ! $isavailable [ $preselectedday ][ 'afternoon' ]) $cssonholiday .= 'onholidayallday ' ;
elseif ( ! $isavailable [ $preselectedday ][ 'morning' ]) $cssonholiday .= 'onholidaymorning ' ;
elseif ( ! $isavailable [ $preselectedday ][ 'afternoon' ]) $cssonholiday .= 'onholidayafternoon ' ;
// Duration
print '<td align="center" class="duration' . ( $cssonholiday ? ' ' . $cssonholiday : '' ) . '">' ;
$dayWorkLoad = $lines [ $i ] -> timespent_duration ;
$totalforeachline [ $preselectedday ] += $lines [ $i ] -> timespent_duration ;
$alreadyspent = '' ;
if ( $dayWorkLoad > 0 ) $alreadyspent = convertSecondToTime ( $lines [ $i ] -> timespent_duration , 'allhourmin' );
print convertSecondToTime ( $lines [ $i ] -> timespent_duration , 'allhourmin' );
$modeinput = 'hours' ;
print '<script type="text/javascript">' ;
print " jQuery(document).ready(function () { \n " ;
print " jQuery('.inputhour, .inputminute').bind('keyup', function(e) { updateTotal(0, ' " . $modeinput . " ') }); " ;
print " }) \n " ;
print '</script>' ;
print '</td>' ;
// Note
print '<td align="center">' ;
print '<textarea name="' . $lines [ $i ] -> id . 'note" rows="' . ROWS_2 . '" id="' . $lines [ $i ] -> id . 'note"' . ( $disabledtask ? ' disabled="disabled"' : '' ) . '>' ;
print $lines [ $i ] -> timespent_note ;
print '</textarea>' ;
print '</td>' ;
// Warning
print '<td align="right">' ;
/* if (( ! $lines [ $i ] -> public ) && $disabledproject ) print $form -> textwithpicto ( '' , $langs -> trans ( " UserIsNotContactOfProject " ));
else if ( $disabledtask )
{
$titleassigntask = $langs -> trans ( " AssignTaskToMe " );
if ( $fuser -> id != $user -> id ) $titleassigntask = $langs -> trans ( " AssignTaskToUser " , '...' );
print $form -> textwithpicto ( '' , $langs -> trans ( " TaskIsNotAssignedToUser " , $titleassigntask ));
} */
print '</td>' ;
print " </tr> \n " ;
}
//}
//else
//{
//$level--;
//}
}
return $totalforeachline ;
}
2012-02-15 23:08:20 +01:00
/**
2015-03-01 17:45:36 +01:00
* Output a task line into a pertime intput mode
2012-02-15 23:08:20 +01:00
*
2015-03-05 11:13:44 +01:00
* @ param string $inc Line number ( start to 0 , then increased by recursive call )
2016-07-08 17:06:12 +02:00
* @ param string $parent Id of parent task to show ( 0 to show all )
2016-07-09 13:58:46 +02:00
* @ param User | null $fuser Restrict list to user if defined
2015-03-05 11:13:44 +01:00
* @ param Task [] $lines Array of lines
* @ param int $level Level ( start to 0 , then increased / decrease by recursive call )
* @ param string $projectsrole Array of roles user has on project
* @ param string $tasksrole Array of roles user has on task
2014-08-07 11:48:19 +02:00
* @ param string $mine Show only task lines I am assigned to
* @ param int $restricteditformytask 0 = No restriction , 1 = Enable add time only if task is a task i am affected to
2015-04-09 20:40:49 +02:00
* @ param int $preselectedday Preselected day
2017-09-19 16:40:55 +02:00
* @ param array $isavailable Array with data that say if user is available for several days for morning and afternoon
2017-11-02 15:33:04 +01:00
* @ param int $oldprojectforbreak Old project id of last project break
2017-11-16 22:55:04 +01:00
* @ return array Array with time spent for $fuser for each day of week on tasks in $lines and substasks
2012-02-15 23:08:20 +01:00
*/
2017-11-02 15:33:04 +01:00
function projectLinesPerDay ( & $inc , $parent , $fuser , $lines , & $level , & $projectsrole , & $tasksrole , $mine , $restricteditformytask , $preselectedday , & $isavailable , $oldprojectforbreak = 0 )
2012-02-15 23:08:20 +01:00
{
2016-10-18 12:16:12 +02:00
global $conf , $db , $user , $bc , $langs ;
global $form , $formother , $projectstatic , $taskstatic , $thirdpartystatic ;
2013-04-12 11:09:53 +02:00
$lastprojectid = 0 ;
2017-11-16 22:55:04 +01:00
$totalforeachday = array ();
2016-07-09 13:58:46 +02:00
$workloadforid = array ();
2016-07-08 17:06:12 +02:00
$lineswithoutlevel0 = array ();
2017-06-02 12:27:46 +02:00
2013-04-12 11:09:53 +02:00
$numlines = count ( $lines );
2017-06-02 12:27:46 +02:00
2016-07-08 17:06:12 +02:00
// Create a smaller array with sublevels only to be used later. This increase dramatically performances.
if ( $parent == 0 ) // Always and only if at first level
{
2017-10-07 13:09:31 +02:00
for ( $i = 0 ; $i < $numlines ; $i ++ )
{
if ( $lines [ $i ] -> fk_task_parent ) $lineswithoutlevel0 [] = $lines [ $i ];
}
2017-06-02 12:27:46 +02:00
}
2016-07-08 17:06:12 +02:00
2017-11-02 15:33:04 +01:00
if ( empty ( $oldprojectforbreak ))
{
$oldprojectforbreak = ( empty ( $conf -> global -> PROJECT_TIMESHEET_DISABLEBREAK_ON_PROJECT ) ? 0 :- 1 ); // 0 to start break , -1 no break
}
2017-10-12 13:03:45 +02:00
2017-10-07 13:09:31 +02:00
//dol_syslog('projectLinesPerDay inc='.$inc.' preselectedday='.$preselectedday.' task parent id='.$parent.' level='.$level." count(lines)=".$numlines." count(lineswithoutlevel0)=".count($lineswithoutlevel0));
2013-04-12 11:09:53 +02:00
for ( $i = 0 ; $i < $numlines ; $i ++ )
{
if ( $parent == 0 ) $level = 0 ;
2016-07-08 17:06:12 +02:00
if ( $lines [ $i ] -> fk_task_parent == $parent )
2013-04-12 11:09:53 +02:00
{
2014-08-07 11:48:19 +02:00
// If we want all or we have a role on task, we show it
if ( empty ( $mine ) || ! empty ( $tasksrole [ $lines [ $i ] -> id ]))
2013-04-12 11:09:53 +02:00
{
2017-10-07 13:09:31 +02:00
//dol_syslog("projectLinesPerWeek Found line ".$i.", a qualified task (i have role or want to show all tasks) with id=".$lines[$i]->id." project id=".$lines[$i]->fk_project);
2017-06-02 12:27:46 +02:00
2016-07-08 17:06:12 +02:00
// Break on a new project
2017-10-07 13:09:31 +02:00
if ( $parent == 0 && $lines [ $i ] -> fk_project != $lastprojectid )
{
$lastprojectid = $lines [ $i ] -> fk_project ;
if ( $preselectedday )
{
$projectstatic -> id = $lines [ $i ] -> fk_project ;
}
}
if ( empty ( $workloadforid [ $projectstatic -> id ]))
{
if ( $preselectedday )
{
$projectstatic -> loadTimeSpent ( $preselectedday , 0 , $fuser -> id ); // Load time spent from table projet_task_time for the project into this->weekWorkLoad and this->weekWorkLoadPerTask for all days of a week
$workloadforid [ $projectstatic -> id ] = 1 ;
}
}
2017-06-02 12:27:46 +02:00
2014-08-07 11:48:19 +02:00
$projectstatic -> id = $lines [ $i ] -> fk_project ;
$projectstatic -> ref = $lines [ $i ] -> projectref ;
2015-06-03 16:59:48 +02:00
$projectstatic -> title = $lines [ $i ] -> projectlabel ;
2014-08-07 11:48:19 +02:00
$projectstatic -> public = $lines [ $i ] -> public ;
2015-03-05 13:48:57 +01:00
$taskstatic -> id = $lines [ $i ] -> id ;
2017-10-12 13:03:45 +02:00
$taskstatic -> ref = ( $lines [ $i ] -> ref ? $lines [ $i ] -> ref : $lines [ $i ] -> id );
$taskstatic -> label = $lines [ $i ] -> label ;
$taskstatic -> date_start = $lines [ $i ] -> date_start ;
$taskstatic -> date_end = $lines [ $i ] -> date_end ;
$thirdpartystatic -> id = $lines [ $i ] -> socid ;
$thirdpartystatic -> name = $lines [ $i ] -> thirdparty_name ;
$thirdpartystatic -> email = $lines [ $i ] -> thirdparty_email ;
if ( empty ( $oldprojectforbreak ) || ( $oldprojectforbreak != - 1 && $oldprojectforbreak != $projectstatic -> id ))
{
print '<tr class="oddeven trforbreak">' . " \n " ;
print '<td colspan="11">' ;
print $projectstatic -> getNomUrl ( 1 , '' , 0 , $langs -> transnoentitiesnoconv ( " YourRole " ) . ': ' . $projectsrole [ $lines [ $i ] -> fk_project ]);
if ( $projectstatic -> title )
{
print ' - ' ;
print $projectstatic -> title ;
}
print '</td>' ;
print '</tr>' ;
}
if ( $oldprojectforbreak != - 1 ) $oldprojectforbreak = $projectstatic -> id ;
2015-03-05 13:48:57 +01:00
2017-06-02 12:27:46 +02:00
print '<tr class="oddeven">' . " \n " ;
// User
2017-07-28 23:32:55 +02:00
/*
2017-06-02 12:27:46 +02:00
print '<td class="nowrap">' ;
print $fuser -> getNomUrl ( 1 , 'withproject' , 'time' );
print '</td>' ;
2017-07-28 23:32:55 +02:00
*/
2015-03-05 13:48:57 +01:00
2017-08-24 17:59:20 +02:00
// Project
print " <td> " ;
2017-10-12 13:03:45 +02:00
if ( $oldprojectforbreak == - 1 ) print $projectstatic -> getNomUrl ( 1 , '' , 0 , $langs -> transnoentitiesnoconv ( " YourRole " ) . ': ' . $projectsrole [ $lines [ $i ] -> fk_project ]);
2017-08-24 17:59:20 +02:00
print " </td> " ;
2017-10-09 18:18:34 +02:00
// Thirdparty
print '<td class="tdoverflowmax100">' ;
2017-10-12 13:03:45 +02:00
if ( $thirdpartystatic -> id > 0 ) print $thirdpartystatic -> getNomUrl ( 1 , 'project' , 10 );
2017-10-09 18:18:34 +02:00
print '</td>' ;
2017-08-24 17:59:20 +02:00
2017-10-06 14:38:33 +02:00
// Ref
print '<td>' ;
2017-10-12 13:03:45 +02:00
print '<!-- Task id = ' . $lines [ $i ] -> id . ' -->' ;
for ( $k = 0 ; $k < $level ; $k ++ ) print " " ;
2017-10-06 14:38:33 +02:00
print $taskstatic -> getNomUrl ( 1 , 'withproject' , 'time' );
2014-08-07 11:48:19 +02:00
// Label task
2017-10-12 13:03:45 +02:00
print '<br>' ;
2015-03-01 17:45:36 +01:00
for ( $k = 0 ; $k < $level ; $k ++ ) print " " ;
2017-10-12 13:03:45 +02:00
print $taskstatic -> label ;
2015-03-05 21:47:50 +01:00
//print "<br>";
//for ($k = 0 ; $k < $level ; $k++) print " ";
//print get_date_range($lines[$i]->date_start,$lines[$i]->date_end,'',$langs,0);
2014-08-07 11:48:19 +02:00
print " </td> \n " ;
2014-08-08 01:19:03 +02:00
2015-03-01 17:45:36 +01:00
// Planned Workload
print '<td align="right">' ;
if ( $lines [ $i ] -> planned_workload ) print convertSecondToTime ( $lines [ $i ] -> planned_workload , 'allhourmin' );
else print '--:--' ;
2014-08-07 11:48:19 +02:00
print '</td>' ;
2014-08-08 01:19:03 +02:00
2015-03-01 17:45:36 +01:00
// Progress declared %
print '<td align="right">' ;
print $formother -> select_percent ( $lines [ $i ] -> progress , $lines [ $i ] -> id . 'progress' );
2014-08-07 11:48:19 +02:00
print '</td>' ;
2014-08-08 01:19:03 +02:00
2015-03-05 13:48:57 +01:00
// Time spent by everybody
2015-03-01 17:45:36 +01:00
print '<td align="right">' ;
2015-03-05 13:48:57 +01:00
// $lines[$i]->duration is a denormalised field = summ of time spent by everybody for task. What we need is time consummed by user
2015-03-01 17:45:36 +01:00
if ( $lines [ $i ] -> duration )
{
print '<a href="' . DOL_URL_ROOT . '/projet/tasks/time.php?id=' . $lines [ $i ] -> id . '">' ;
print convertSecondToTime ( $lines [ $i ] -> duration , 'allhourmin' );
print '</a>' ;
}
else print '--:--' ;
print " </td> \n " ;
2015-03-05 13:48:57 +01:00
// Time spent by user
print '<td align="right">' ;
2016-07-09 13:58:46 +02:00
$tmptimespent = $taskstatic -> getSummaryOfTimeSpent ( $fuser -> id );
2015-03-05 13:48:57 +01:00
if ( $tmptimespent [ 'total_duration' ]) print convertSecondToTime ( $tmptimespent [ 'total_duration' ], 'allhourmin' );
else print '--:--' ;
print " </td> \n " ;
2015-03-01 17:45:36 +01:00
$disabledproject = 1 ; $disabledtask = 1 ;
//print "x".$lines[$i]->fk_project;
//var_dump($lines[$i]);
//var_dump($projectsrole[$lines[$i]->fk_project]);
// If at least one role for project
if ( $lines [ $i ] -> public || ! empty ( $projectsrole [ $lines [ $i ] -> fk_project ]) || $user -> rights -> projet -> all -> creer )
{
$disabledproject = 0 ;
$disabledtask = 0 ;
}
// If $restricteditformytask is on and I have no role on task, i disable edit
if ( $restricteditformytask && empty ( $tasksrole [ $lines [ $i ] -> id ]))
{
$disabledtask = 1 ;
}
// Form to add new time
2015-03-05 13:48:57 +01:00
print '<td class="nowrap" align="center">' ;
2016-03-25 15:53:44 +01:00
$tableCell = $form -> select_date ( $preselectedday , $lines [ $i ] -> id , 1 , 1 , 2 , " addtime " , 0 , 0 , 1 , $disabledtask );
2015-04-09 20:40:49 +02:00
print $tableCell ;
2017-06-02 12:27:46 +02:00
print '</td>' ;
2017-09-19 16:40:55 +02:00
$cssonholiday = '' ;
2017-09-19 17:07:39 +02:00
if ( ! $isavailable [ $preselectedday ][ 'morning' ] && ! $isavailable [ $preselectedday ][ 'afternoon' ]) $cssonholiday .= 'onholidayallday ' ;
elseif ( ! $isavailable [ $preselectedday ][ 'morning' ]) $cssonholiday .= 'onholidaymorning ' ;
elseif ( ! $isavailable [ $preselectedday ][ 'afternoon' ]) $cssonholiday .= 'onholidayafternoon ' ;
2017-09-19 16:40:55 +02:00
2017-06-02 12:27:46 +02:00
// Duration
2017-09-19 17:31:37 +02:00
print '<td align="center" class="duration' . ( $cssonholiday ? ' ' . $cssonholiday : '' ) . '">' ;
2015-04-09 20:40:49 +02:00
$dayWorkLoad = $projectstatic -> weekWorkLoadPerTask [ $preselectedday ][ $lines [ $i ] -> id ];
2017-11-16 22:55:04 +01:00
$totalforeachday [ $preselectedday ] += $dayWorkLoad ;
2017-10-07 13:09:31 +02:00
$alreadyspent = '' ;
if ( $dayWorkLoad > 0 ) $alreadyspent = convertSecondToTime ( $dayWorkLoad , 'allhourmin' );
2015-04-09 20:40:49 +02:00
2017-10-07 13:09:31 +02:00
$idw = 0 ;
2017-09-18 14:18:34 +02:00
2015-04-09 20:40:49 +02:00
$tableCell = '' ;
2017-10-22 21:15:08 +02:00
$tableCell .= '<span class="timesheetalreadyrecorded" title="texttoreplace"><input type="text" class="center" size="2" disabled id="timespent[' . $inc . '][' . $idw . ']" name="task[' . $lines [ $i ] -> id . '][' . $idw . ']" value="' . $alreadyspent . '"></span>' ;
2017-10-07 13:09:31 +02:00
$tableCell .= '<span class="hideonsmartphone"> + </span>' ;
2015-04-09 20:40:49 +02:00
//$tableCell.=' ';
$tableCell .= $form -> select_duration ( $lines [ $i ] -> id . 'duration' , '' , $disabledtask , 'text' , 0 , 1 );
2015-05-07 11:57:23 +02:00
//$tableCell.=' <input type="submit" class="button"'.($disabledtask?' disabled':'').' value="'.$langs->trans("Add").'">';
2015-04-09 20:40:49 +02:00
print $tableCell ;
2017-09-18 14:18:34 +02:00
$modeinput = 'hours' ;
print '<script type="text/javascript">' ;
print " jQuery(document).ready(function () { \n " ;
print " jQuery('.inputhour, .inputminute').bind('keyup', function(e) { updateTotal(0, ' " . $modeinput . " ') }); " ;
print " }) \n " ;
print '</script>' ;
2015-03-01 17:45:36 +01:00
print '</td>' ;
2017-10-12 13:03:45 +02:00
// Note
print '<td align="center">' ;
2017-06-02 12:27:46 +02:00
print '<textarea name="' . $lines [ $i ] -> id . 'note" rows="' . ROWS_2 . '" id="' . $lines [ $i ] -> id . 'note"' . ( $disabledtask ? ' disabled="disabled"' : '' ) . '>' ;
print '</textarea>' ;
2015-03-01 17:45:36 +01:00
print '</td>' ;
2017-06-02 12:27:46 +02:00
// Warning
2016-05-04 12:24:15 +02:00
print '<td align="right">' ;
2017-06-02 12:27:46 +02:00
if (( ! $lines [ $i ] -> public ) && $disabledproject ) print $form -> textwithpicto ( '' , $langs -> trans ( " UserIsNotContactOfProject " ));
2017-08-24 17:59:20 +02:00
else if ( $disabledtask )
{
$titleassigntask = $langs -> trans ( " AssignTaskToMe " );
if ( $fuser -> id != $user -> id ) $titleassigntask = $langs -> trans ( " AssignTaskToUser " , '...' );
print $form -> textwithpicto ( '' , $langs -> trans ( " TaskIsNotAssignedToUser " , $titleassigntask ));
}
2016-05-04 12:24:15 +02:00
print '</td>' ;
2017-06-02 12:27:46 +02:00
2015-03-01 17:45:36 +01:00
print " </tr> \n " ;
}
$inc ++ ;
$level ++ ;
2017-06-02 12:27:46 +02:00
if ( $lines [ $i ] -> id > 0 )
2016-07-08 17:06:12 +02:00
{
2017-11-16 22:55:04 +01:00
//var_dump('totalforeachday after taskid='.$lines[$i]->id.' and previous one on level '.$level);
//var_dump($totalforeachday);
$ret = projectLinesPerDay ( $inc , $lines [ $i ] -> id , $fuser , ( $parent == 0 ? $lineswithoutlevel0 : $lines ), $level , $projectsrole , $tasksrole , $mine , $restricteditformytask , $preselectedday , $isavailable , $oldprojectforbreak );
//var_dump('ret with parent='.$lines[$i]->id.' level='.$level);
//var_dump($ret);
foreach ( $ret as $key => $val )
{
$totalforeachday [ $key ] += $val ;
}
//var_dump('totalforeachday after taskid='.$lines[$i]->id.' and previous one on level '.$level.' + subtasks');
//var_dump($totalforeachday);
2016-07-08 17:06:12 +02:00
}
2015-03-01 17:45:36 +01:00
$level -- ;
}
else
{
//$level--;
}
}
2017-11-16 22:55:04 +01:00
return $totalforeachday ;
2015-03-01 17:45:36 +01:00
}
/**
* Output a task line into a perday intput mode
*
2016-07-08 17:06:12 +02:00
* @ param string $inc Line output identificator ( start to 0 , then increased by recursive call )
2015-03-18 11:04:50 +01:00
* @ param int $firstdaytoshow First day to show
* @ param User | null $fuser Restrict list to user if defined
2016-07-08 17:06:12 +02:00
* @ param string $parent Id of parent task to show ( 0 to show all )
2016-07-08 12:02:09 +02:00
* @ param Task [] $lines Array of lines ( list of tasks but we will show only if we have a specific role on task )
2015-03-05 11:13:44 +01:00
* @ param int $level Level ( start to 0 , then increased / decrease by recursive call )
* @ param string $projectsrole Array of roles user has on project
* @ param string $tasksrole Array of roles user has on task
2015-03-01 17:45:36 +01:00
* @ param string $mine Show only task lines I am assigned to
* @ param int $restricteditformytask 0 = No restriction , 1 = Enable add time only if task is a task i am affected to
2017-09-19 16:40:55 +02:00
* @ param array $isavailable Array with data that say if user is available for several days for morning and afternoon
2017-11-02 15:33:04 +01:00
* @ param int $oldprojectforbreak Old project id of last project break
2017-11-16 22:55:04 +01:00
* @ return array Array with time spent for $fuser for each day of week on tasks in $lines and substasks
2015-03-01 17:45:36 +01:00
*/
2017-11-02 15:33:04 +01:00
function projectLinesPerWeek ( & $inc , $firstdaytoshow , $fuser , $parent , $lines , & $level , & $projectsrole , & $tasksrole , $mine , $restricteditformytask , & $isavailable , $oldprojectforbreak = 0 )
2015-03-01 17:45:36 +01:00
{
2016-07-20 18:02:33 +02:00
global $conf , $db , $user , $bc , $langs ;
global $form , $formother , $projectstatic , $taskstatic , $thirdpartystatic ;
2015-03-01 17:45:36 +01:00
$numlines = count ( $lines );
2016-07-08 12:02:09 +02:00
$lastprojectid = 0 ;
2016-07-09 13:58:46 +02:00
$workloadforid = array ();
2017-11-16 22:55:04 +01:00
$totalforeachday = array ();
2016-07-08 17:06:12 +02:00
$lineswithoutlevel0 = array ();
2017-06-02 12:27:46 +02:00
2016-07-08 17:06:12 +02:00
// Create a smaller array with sublevels only to be used later. This increase dramatically performances.
if ( $parent == 0 ) // Always and only if at first level
{
2017-10-07 13:09:31 +02:00
for ( $i = 0 ; $i < $numlines ; $i ++ )
{
if ( $lines [ $i ] -> fk_task_parent ) $lineswithoutlevel0 [] = $lines [ $i ];
}
2016-07-08 17:06:12 +02:00
}
2017-10-07 13:09:31 +02:00
//dol_syslog('projectLinesPerWeek inc='.$inc.' firstdaytoshow='.$firstdaytoshow.' task parent id='.$parent.' level='.$level." count(lines)=".$numlines." count(lineswithoutlevel0)=".count($lineswithoutlevel0));
2017-06-02 12:27:46 +02:00
2017-11-02 15:33:04 +01:00
if ( empty ( $oldprojectforbreak ))
{
$oldprojectforbreak = ( empty ( $conf -> global -> PROJECT_TIMESHEET_DISABLEBREAK_ON_PROJECT ) ? 0 :- 1 ); // 0 = start break, -1 = never break
}
2017-10-12 13:03:45 +02:00
2015-03-01 17:45:36 +01:00
for ( $i = 0 ; $i < $numlines ; $i ++ )
{
if ( $parent == 0 ) $level = 0 ;
2017-06-02 12:27:46 +02:00
2016-07-08 17:06:12 +02:00
if ( $lines [ $i ] -> fk_task_parent == $parent )
2015-03-01 17:45:36 +01:00
{
// If we want all or we have a role on task, we show it
if ( empty ( $mine ) || ! empty ( $tasksrole [ $lines [ $i ] -> id ]))
{
2017-10-07 13:09:31 +02:00
//dol_syslog("projectLinesPerWeek Found line ".$i.", a qualified task (i have role or want to show all tasks) with id=".$lines[$i]->id." project id=".$lines[$i]->fk_project);
2017-06-02 12:27:46 +02:00
2017-10-07 13:09:31 +02:00
// Break on a new project
if ( $parent == 0 && $lines [ $i ] -> fk_project != $lastprojectid )
{
$lastprojectid = $lines [ $i ] -> fk_project ;
$projectstatic -> id = $lines [ $i ] -> fk_project ;
}
2017-06-02 12:27:46 +02:00
2017-11-16 19:41:31 +01:00
//var_dump('--- '.$level.' '.$firstdaytoshow.' '.$fuser->id.' '.$projectstatic->id.' '.$workloadforid[$projectstatic->id]);
//var_dump($projectstatic->weekWorkLoadPerTask);
2017-10-07 13:09:31 +02:00
if ( empty ( $workloadforid [ $projectstatic -> id ]))
{
$projectstatic -> loadTimeSpent ( $firstdaytoshow , 0 , $fuser -> id ); // Load time spent from table projet_task_time for the project into this->weekWorkLoad and this->weekWorkLoadPerTask for all days of a week
$workloadforid [ $projectstatic -> id ] = 1 ;
}
2017-11-16 19:41:31 +01:00
//var_dump($projectstatic->weekWorkLoadPerTask);
//var_dump('--- '.$projectstatic->id.' '.$workloadforid[$projectstatic->id]);
2017-06-02 12:27:46 +02:00
2017-08-24 17:59:20 +02:00
$projectstatic -> id = $lines [ $i ] -> fk_project ;
$projectstatic -> ref = $lines [ $i ] -> projectref ;
$projectstatic -> title = $lines [ $i ] -> projectlabel ;
$projectstatic -> public = $lines [ $i ] -> public ;
$projectstatic -> thirdparty_name = $lines [ $i ] -> thirdparty_name ;
2017-10-12 13:03:45 +02:00
$taskstatic -> id = $lines [ $i ] -> id ;
$taskstatic -> ref = ( $lines [ $i ] -> ref ? $lines [ $i ] -> ref : $lines [ $i ] -> id );
$taskstatic -> label = $lines [ $i ] -> label ;
$taskstatic -> date_start = $lines [ $i ] -> date_start ;
$taskstatic -> date_end = $lines [ $i ] -> date_end ;
$thirdpartystatic -> id = $lines [ $i ] -> thirdparty_id ;
$thirdpartystatic -> name = $lines [ $i ] -> thirdparty_name ;
$thirdpartystatic -> email = $lines [ $i ] -> thirdparty_email ;
if ( empty ( $oldprojectforbreak ) || ( $oldprojectforbreak != - 1 && $oldprojectforbreak != $projectstatic -> id ))
{
print '<tr class="oddeven trforbreak">' . " \n " ;
print '<td colspan="15">' ;
print $projectstatic -> getNomUrl ( 1 , '' , 0 , $langs -> transnoentitiesnoconv ( " YourRole " ) . ': ' . $projectsrole [ $lines [ $i ] -> fk_project ]);
if ( $projectstatic -> title )
{
print ' - ' ;
print $projectstatic -> title ;
}
print '</td>' ;
print '</tr>' ;
}
if ( $oldprojectforbreak != - 1 ) $oldprojectforbreak = $projectstatic -> id ;
2017-06-02 12:27:46 +02:00
print '<tr class="oddeven">' . " \n " ;
// User
2017-07-28 23:32:55 +02:00
/*
2017-06-02 12:27:46 +02:00
print '<td class="nowrap">' ;
print $fuser -> getNomUrl ( 1 , 'withproject' , 'time' );
print '</td>' ;
2017-07-28 23:32:55 +02:00
*/
2015-03-01 17:45:36 +01:00
2017-08-24 17:59:20 +02:00
// Project
print '<td class="nowrap">' ;
2017-10-12 13:03:45 +02:00
if ( $oldprojectforbreak == - 1 ) print $projectstatic -> getNomUrl ( 1 , '' , 0 , $langs -> transnoentitiesnoconv ( " YourRole " ) . ': ' . $projectsrole [ $lines [ $i ] -> fk_project ]);
2017-08-24 17:59:20 +02:00
print " </td> " ;
2017-10-09 18:18:34 +02:00
// Thirdparty
print '<td class="tdoverflowmax100">' ;
2017-10-12 13:03:45 +02:00
if ( $thirdpartystatic -> id > 0 ) print $thirdpartystatic -> getNomUrl ( 1 , 'project' );
2017-10-09 18:18:34 +02:00
print '</td>' ;
2017-08-24 17:59:20 +02:00
2015-03-01 17:45:36 +01:00
// Ref
2015-03-04 00:53:35 +01:00
print '<td class="nowrap">' ;
2017-10-12 13:03:45 +02:00
print '<!-- Task id = ' . $lines [ $i ] -> id . ' -->' ;
for ( $k = 0 ; $k < $level ; $k ++ ) print " " ;
2015-03-18 11:04:50 +01:00
print $taskstatic -> getNomUrl ( 1 , 'withproject' , 'time' );
2015-03-01 17:45:36 +01:00
// Label task
2017-10-12 13:03:45 +02:00
print '<br>' ;
2015-03-01 17:45:36 +01:00
for ( $k = 0 ; $k < $level ; $k ++ ) print " " ;
2017-10-12 13:03:45 +02:00
//print $taskstatic->getNomUrl(0, 'withproject', 'time');
print $taskstatic -> label ;
2015-03-05 21:47:50 +01:00
//print "<br>";
//for ($k = 0 ; $k < $level ; $k++) print " ";
//print get_date_range($lines[$i]->date_start,$lines[$i]->date_end,'',$langs,0);
2015-03-01 17:45:36 +01:00
print " </td> \n " ;
2014-08-07 11:48:19 +02:00
// Planned Workload
print '<td align="right">' ;
if ( $lines [ $i ] -> planned_workload ) print convertSecondToTime ( $lines [ $i ] -> planned_workload , 'allhourmin' );
else print '--:--' ;
print '</td>' ;
2014-08-08 01:19:03 +02:00
2014-08-07 11:48:19 +02:00
// Progress declared %
print '<td align="right">' ;
2014-09-29 16:25:18 +02:00
print $formother -> select_percent ( $lines [ $i ] -> progress , $lines [ $i ] -> id . 'progress' );
2014-08-07 11:48:19 +02:00
print '</td>' ;
2014-08-08 01:19:03 +02:00
2015-03-05 13:48:57 +01:00
// Time spent by everybody
2014-08-07 11:48:19 +02:00
print '<td align="right">' ;
2015-03-05 13:48:57 +01:00
// $lines[$i]->duration is a denormalised field = summ of time spent by everybody for task. What we need is time consummed by user
2014-08-07 11:48:19 +02:00
if ( $lines [ $i ] -> duration )
{
print '<a href="' . DOL_URL_ROOT . '/projet/tasks/time.php?id=' . $lines [ $i ] -> id . '">' ;
print convertSecondToTime ( $lines [ $i ] -> duration , 'allhourmin' );
print '</a>' ;
}
else print '--:--' ;
print " </td> \n " ;
2015-03-05 13:48:57 +01:00
// Time spent by user
print '<td align="right">' ;
2016-07-09 13:58:46 +02:00
$tmptimespent = $taskstatic -> getSummaryOfTimeSpent ( $fuser -> id );
2015-03-05 13:48:57 +01:00
if ( $tmptimespent [ 'total_duration' ]) print convertSecondToTime ( $tmptimespent [ 'total_duration' ], 'allhourmin' );
else print '--:--' ;
print " </td> \n " ;
2014-08-08 01:19:03 +02:00
2014-08-07 11:48:19 +02:00
$disabledproject = 1 ; $disabledtask = 1 ;
//print "x".$lines[$i]->fk_project;
//var_dump($lines[$i]);
//var_dump($projectsrole[$lines[$i]->fk_project]);
// If at least one role for project
if ( $lines [ $i ] -> public || ! empty ( $projectsrole [ $lines [ $i ] -> fk_project ]) || $user -> rights -> projet -> all -> creer )
{
$disabledproject = 0 ;
$disabledtask = 0 ;
}
// If $restricteditformytask is on and I have no role on task, i disable edit
if ( $restricteditformytask && empty ( $tasksrole [ $lines [ $i ] -> id ]))
{
$disabledtask = 1 ;
}
2014-08-08 01:19:03 +02:00
2015-03-18 11:04:50 +01:00
//var_dump($projectstatic->weekWorkLoadPerTask);
2017-06-02 12:27:46 +02:00
2015-03-04 00:53:35 +01:00
// Fields to show current time
$tableCell = '' ; $modeinput = 'hours' ;
for ( $idw = 0 ; $idw < 7 ; $idw ++ )
2017-10-07 13:09:31 +02:00
{
2015-03-18 11:04:50 +01:00
$tmpday = dol_time_plus_duree ( $firstdaytoshow , $idw , 'd' );
2017-09-19 16:40:55 +02:00
$cssonholiday = '' ;
2017-09-19 17:07:39 +02:00
if ( ! $isavailable [ $tmpday ][ 'morning' ] && ! $isavailable [ $tmpday ][ 'afternoon' ]) $cssonholiday .= 'onholidayallday ' ;
elseif ( ! $isavailable [ $tmpday ][ 'morning' ]) $cssonholiday .= 'onholidaymorning ' ;
elseif ( ! $isavailable [ $tmpday ][ 'afternoon' ]) $cssonholiday .= 'onholidayafternoon ' ;
2017-09-19 16:40:55 +02:00
2015-04-09 20:40:49 +02:00
$tmparray = dol_getdate ( $tmpday );
2017-10-07 13:09:31 +02:00
$dayWorkLoad = $projectstatic -> weekWorkLoadPerTask [ $tmpday ][ $lines [ $i ] -> id ];
2017-11-16 22:55:04 +01:00
$totalforeachday [ $tmpday ] += $dayWorkLoad ;
2017-11-16 19:41:31 +01:00
2017-10-07 13:09:31 +02:00
$alreadyspent = '' ;
if ( $dayWorkLoad > 0 ) $alreadyspent = convertSecondToTime ( $dayWorkLoad , 'allhourmin' );
$alttitle = $langs -> trans ( " AddHereTimeSpentForDay " , $tmparray [ 'day' ], $tmparray [ 'mon' ]);
$tableCell = '<td align="center" class="hide' . $idw . ( $cssonholiday ? ' ' . $cssonholiday : '' ) . '">' ;
if ( $alreadyspent )
{
2017-10-22 21:15:08 +02:00
$tableCell .= '<span class="timesheetalreadyrecorded" title="texttoreplace"><input type="text" class="center smallpadd" size="2" disabled id="timespent[' . $inc . '][' . $idw . ']" name="task[' . $lines [ $i ] -> id . '][' . $idw . ']" value="' . $alreadyspent . '"></span>' ;
2017-10-07 13:09:31 +02:00
//$placeholder=' placeholder="00:00"';
$placeholder = '' ;
//$tableCell.='+';
}
$tableCell .= '<input type="text" alt="' . ( $disabledtask ? '' : $alttitle ) . '" title="' . ( $disabledtask ? '' : $alttitle ) . '" ' . ( $disabledtask ? 'disabled' : $placeholder ) . ' class="center smallpadd" 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 .= ' onkeyup="updateTotal(' . $idw . ',\'' . $modeinput . '\')"' ;
$tableCell .= ' onblur="regexEvent(this,event,\'' . $modeinput . '\'); updateTotal(' . $idw . ',\'' . $modeinput . '\')" />' ;
$tableCell .= '</td>' ;
print $tableCell ;
}
// Warning
2015-04-09 20:40:49 +02:00
print '<td align="right">' ;
2017-06-02 12:27:46 +02:00
if (( ! $lines [ $i ] -> public ) && $disabledproject ) print $form -> textwithpicto ( '' , $langs -> trans ( " UserIsNotContactOfProject " ));
2017-08-24 17:59:20 +02:00
else if ( $disabledtask )
{
$titleassigntask = $langs -> trans ( " AssignTaskToMe " );
if ( $fuser -> id != $user -> id ) $titleassigntask = $langs -> trans ( " AssignTaskToUser " , '...' );
print $form -> textwithpicto ( '' , $langs -> trans ( " TaskIsNotAssignedToUser " , $titleassigntask ));
}
2015-04-09 20:40:49 +02:00
print '</td>' ;
2017-10-07 13:09:31 +02:00
print " </tr> \n " ;
2013-04-12 11:09:53 +02:00
}
2016-07-08 17:06:12 +02:00
// Call to show task with a lower level (task under the current task)
2013-04-12 11:09:53 +02:00
$inc ++ ;
$level ++ ;
2017-06-02 12:27:46 +02:00
if ( $lines [ $i ] -> id > 0 )
2016-07-08 17:06:12 +02:00
{
2017-11-16 22:55:04 +01:00
//var_dump('totalforeachday after taskid='.$lines[$i]->id.' and previous one on level '.$level);
//var_dump($totalforeachday);
$ret = projectLinesPerWeek ( $inc , $firstdaytoshow , $fuser , $lines [ $i ] -> id , ( $parent == 0 ? $lineswithoutlevel0 : $lines ), $level , $projectsrole , $tasksrole , $mine , $restricteditformytask , $isavailable , $oldprojectforbreak );
//var_dump('ret with parent='.$lines[$i]->id.' level='.$level);
//var_dump($ret);
foreach ( $ret as $key => $val )
{
$totalforeachday [ $key ] += $val ;
}
//var_dump('totalforeachday after taskid='.$lines[$i]->id.' and previous one on level '.$level.' + subtasks');
//var_dump($totalforeachday);
2016-07-08 17:06:12 +02:00
}
2013-04-12 11:09:53 +02:00
$level -- ;
}
else
{
//$level--;
}
}
2017-11-16 22:55:04 +01:00
return $totalforeachday ;
2012-02-15 23:08:20 +01:00
}
2009-07-28 15:37:28 +02:00
/**
* Search in task lines with a particular parent if there is a task for a particular user ( in taskrole )
2012-02-04 14:39:47 +01:00
*
2014-09-27 16:00:11 +02:00
* @ param string $inc Counter that count number of lines legitimate to show ( for return )
2012-02-04 14:39:47 +01:00
* @ param int $parent Id of parent task to start
2014-09-27 16:00:11 +02:00
* @ param array $lines Array of all tasks
* @ param string $taskrole Array of task filtered on a particular user
2012-02-04 14:39:47 +01:00
* @ return int 1 if there is
2009-07-28 15:37:28 +02:00
*/
2012-02-04 15:20:32 +01:00
function searchTaskInChild ( & $inc , $parent , & $lines , & $taskrole )
2009-07-28 15:37:28 +02:00
{
2013-04-12 11:09:53 +02:00
//print 'Search in line with parent id = '.$parent.'<br>';
$numlines = count ( $lines );
for ( $i = 0 ; $i < $numlines ; $i ++ )
{
// Process line $lines[$i]
if ( $lines [ $i ] -> fk_parent == $parent && $lines [ $i ] -> id != $lines [ $i ] -> fk_parent )
{
// If task is legitimate to show, no more need to search deeper
if ( isset ( $taskrole [ $lines [ $i ] -> id ]))
{
//print 'Found a legitimate task id='.$lines[$i]->id.'<br>';
$inc ++ ;
return $inc ;
}
searchTaskInChild ( $inc , $lines [ $i ] -> id , $lines , $taskrole );
//print 'Found inc='.$inc.'<br>';
if ( $inc > 0 ) return $inc ;
}
}
return $inc ;
2009-07-28 15:37:28 +02:00
}
2010-02-20 21:24:09 +01:00
/**
* Return HTML table with list of projects and number of opened tasks
*
2012-02-04 14:39:47 +01:00
* @ param DoliDB $db Database handler
2015-07-04 18:20:17 +02:00
* @ param Form $form Object form
2012-02-04 14:39:47 +01:00
* @ param int $socid Id thirdparty
2015-12-04 12:12:12 +01:00
* @ param int $projectsListId Id of project I have permission on
* @ param int $mytasks Limited to task I am contact to
2014-07-17 01:28:01 +02:00
* @ param int $statut - 1 = No filter on statut , 0 or 1 = Filter on status
2015-07-04 18:20:17 +02:00
* @ param array $listofoppstatus List of opportunity status
2015-12-04 12:12:12 +01:00
* @ param array $hiddenfields List of info to not show ( 'projectlabel' , 'declaredprogress' , '...' , )
2012-02-04 14:39:47 +01:00
* @ return void
2010-02-20 21:24:09 +01:00
*/
2015-11-21 20:25:28 +01:00
function print_projecttasks_array ( $db , $form , $socid , $projectsListId , $mytasks = 0 , $statut =- 1 , $listofoppstatus = array (), $hiddenfields = array ())
2010-02-20 21:24:09 +01:00
{
2013-04-12 11:09:53 +02:00
global $langs , $conf , $user , $bc ;
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php' ;
$projectstatic = new Project ( $db );
2017-10-07 13:09:31 +02:00
$thirdpartystatic = new Societe ( $db );
2017-06-02 12:27:46 +02:00
2013-04-12 11:09:53 +02:00
$sortfield = '' ;
$sortorder = '' ;
2014-09-12 05:30:17 +02:00
$project_year_filter = 0 ;
2013-04-12 11:09:53 +02:00
2015-07-04 18:20:17 +02:00
$title = $langs -> trans ( " Projects " );
if ( strcmp ( $statut , '' ) && $statut >= 0 ) $title = $langs -> trans ( " Projects " ) . ' ' . $langs -> trans ( $projectstatic -> statuts_long [ $statut ]);
2014-07-17 01:28:01 +02:00
2015-11-21 20:00:38 +01:00
$arrayidtypeofcontact = array ();
2017-06-02 12:27:46 +02:00
2017-10-19 19:53:29 +02:00
print '<div class="div-table-responsive-no-min">' ;
2013-04-12 11:09:53 +02:00
print '<table class="noborder" width="100%">' ;
$sql .= " FROM " . MAIN_DB_PREFIX . " projet as p " ;
if ( $mytasks )
{
$sql .= " , " . MAIN_DB_PREFIX . " projet_task as t " ;
$sql .= " , " . MAIN_DB_PREFIX . " element_contact as ec " ;
$sql .= " , " . MAIN_DB_PREFIX . " c_type_contact as ctc " ;
}
else
{
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " projet_task as t ON p.rowid = t.fk_projet " ;
}
2018-02-06 10:57:53 +01:00
$sql .= " WHERE p.entity IN ( " . getEntity ( 'project' ) . " ) " ;
2013-04-12 11:09:53 +02:00
$sql .= " AND p.rowid IN ( " . $projectsListId . " ) " ;
if ( $socid ) $sql .= " AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = " . $socid . " ) " ;
if ( $mytasks )
{
$sql .= " AND p.rowid = t.fk_projet " ;
$sql .= " AND ec.element_id = t.rowid " ;
$sql .= " AND ec.fk_socpeople = " . $user -> id ;
2015-11-21 20:00:38 +01:00
$sql .= " AND ec.fk_c_type_contact = ctc.rowid " ; // Replace the 2 lines with ec.fk_c_type_contact in $arrayidtypeofcontact
$sql .= " AND ctc.element = 'project_task' " ;
2013-04-12 11:09:53 +02:00
}
2014-07-17 01:28:01 +02:00
if ( $statut >= 0 )
{
$sql .= " AND p.fk_statut = " . $statut ;
}
2015-07-04 18:20:17 +02:00
if ( ! empty ( $conf -> global -> PROJECT_LIMIT_YEAR_RANGE ))
{
2014-09-12 05:30:17 +02:00
$project_year_filter = GETPOST ( " project_year_filter " );
//Check if empty or invalid year. Wildcard ignores the sql check
2015-07-04 18:20:17 +02:00
if ( $project_year_filter != " * " )
{
if ( empty ( $project_year_filter ) || ! ctype_digit ( $project_year_filter ))
{
2014-09-12 05:30:17 +02:00
$project_year_filter = date ( " Y " );
}
2014-09-16 15:27:04 +02:00
$sql .= " AND (p.dateo IS NULL OR p.dateo <= " . $db -> idate ( dol_get_last_day ( $project_year_filter , 12 , false )) . " ) " ;
$sql .= " AND (p.datee IS NULL OR p.datee >= " . $db -> idate ( dol_get_first_day ( $project_year_filter , 1 , false )) . " ) " ;
2014-09-12 05:30:17 +02:00
}
}
2017-06-02 12:27:46 +02:00
2015-11-21 20:00:38 +01:00
// Get id of project we must show tasks
$arrayidofprojects = array ();
$sql1 = " SELECT p.rowid as projectid " ;
2017-06-02 12:27:46 +02:00
$sql1 .= $sql ;
2015-11-21 20:00:38 +01:00
$resql = $db -> query ( $sql1 );
if ( $resql )
{
2017-10-07 13:09:31 +02:00
$i = 0 ;
2015-11-21 20:00:38 +01:00
$num = $db -> num_rows ( $resql );
while ( $i < $num )
{
$objp = $db -> fetch_object ( $resql );
2017-10-07 13:09:31 +02:00
$arrayidofprojects [ $objp -> projectid ] = $objp -> projectid ;
2015-11-21 20:00:38 +01:00
$i ++ ;
}
}
else dol_print_error ( $db );
if ( empty ( $arrayidofprojects )) $arrayidofprojects [ 0 ] =- 1 ;
2017-06-02 12:27:46 +02:00
2015-11-21 20:00:38 +01:00
// Get list of project with calculation on tasks
2015-11-21 20:25:28 +01:00
$sql2 = " SELECT p.rowid as projectid, p.ref, p.title, p.fk_soc, s.nom as socname, p.fk_user_creat, p.public, p.fk_statut as status, p.fk_opp_status as opp_status, p.opp_amount, " ;
2016-01-18 15:56:51 +01:00
$sql2 .= " p.dateo, p.datee, " ;
2015-11-21 20:00:38 +01:00
$sql2 .= " COUNT(t.rowid) as nb, SUM(t.planned_workload) as planned_workload, SUM(t.planned_workload * t.progress / 100) as declared_progess_workload " ;
$sql2 .= " FROM " . MAIN_DB_PREFIX . " projet as p " ;
2015-11-21 20:25:28 +01:00
$sql2 .= " LEFT JOIN " . MAIN_DB_PREFIX . " societe as s ON s.rowid = p.fk_soc " ;
2015-11-21 20:00:38 +01:00
$sql2 .= " LEFT JOIN " . MAIN_DB_PREFIX . " projet_task as t ON p.rowid = t.fk_projet " ;
$sql2 .= " WHERE p.rowid IN ( " . join ( ',' , $arrayidofprojects ) . " ) " ;
2016-06-15 18:31:43 +02:00
$sql2 .= " GROUP BY p.rowid, p.ref, p.title, p.fk_soc, s.nom, p.fk_user_creat, p.public, p.fk_statut, p.fk_opp_status, p.opp_amount, p.dateo, p.datee " ;
2015-11-21 20:00:38 +01:00
$sql2 .= " ORDER BY p.title, p.ref " ;
2013-04-12 11:09:53 +02:00
2015-11-21 20:00:38 +01:00
$resql = $db -> query ( $sql2 );
if ( $resql )
2013-04-12 11:09:53 +02:00
{
2015-11-21 20:00:38 +01:00
$total_task = 0 ;
2015-07-04 18:20:17 +02:00
$total_opp_amount = 0 ;
$ponderated_opp_amount = 0 ;
2013-04-12 11:09:53 +02:00
$num = $db -> num_rows ( $resql );
$i = 0 ;
2017-10-07 13:09:31 +02:00
print '<tr class="liste_titre">' ;
print_liste_field_titre ( $title . ' <span class="badge">' . $num . '</span>' , $_SERVER [ " PHP_SELF " ], " " , " " , " " , " " , $sortfield , $sortorder );
print_liste_field_titre ( " ThirdParty " , $_SERVER [ " PHP_SELF " ], " " , " " , " " , " " , $sortfield , $sortorder );
if ( ! empty ( $conf -> global -> PROJECT_USE_OPPORTUNITIES ))
{
print_liste_field_titre ( " OpportunityAmount " , " " , " " , " " , " " , 'align="right"' , $sortfield , $sortorder );
print_liste_field_titre ( " OpportunityStatus " , " " , " " , " " , " " , 'align="right"' , $sortfield , $sortorder );
}
if ( empty ( $conf -> global -> PROJECT_HIDE_TASKS ))
{
print_liste_field_titre ( " Tasks " , " " , " " , " " , " " , 'align="right"' , $sortfield , $sortorder );
if ( ! in_array ( 'plannedworkload' , $hiddenfields )) print_liste_field_titre ( " PlannedWorkload " , " " , " " , " " , " " , 'align="right"' , $sortfield , $sortorder );
if ( ! in_array ( 'declaredprogress' , $hiddenfields )) print_liste_field_titre ( " ProgressDeclared " , " " , " " , " " , " " , 'align="right"' , $sortfield , $sortorder );
}
print_liste_field_titre ( " Status " , " " , " " , " " , " " , 'align="right"' , $sortfield , $sortorder );
print " </tr> \n " ;
2017-06-02 12:27:46 +02:00
2013-04-12 11:09:53 +02:00
while ( $i < $num )
{
$objp = $db -> fetch_object ( $resql );
$projectstatic -> id = $objp -> projectid ;
$projectstatic -> user_author_id = $objp -> fk_user_creat ;
$projectstatic -> public = $objp -> public ;
// Check is user has read permission on project
$userAccess = $projectstatic -> restrictedProjectArea ( $user );
if ( $userAccess >= 0 )
{
2017-10-07 13:09:31 +02:00
$projectstatic -> ref = $objp -> ref ;
$projectstatic -> statut = $objp -> status ;
$projectstatic -> title = $objp -> title ;
$projectstatic -> datee = $db -> jdate ( $objp -> datee );
$projectstatic -> dateo = $db -> jdate ( $objp -> dateo );
2017-06-02 12:27:46 +02:00
2017-04-14 11:22:48 +02:00
print '<tr class="oddeven">' ;
2015-10-30 20:04:03 +01:00
print '<td>' ;
2013-04-12 11:09:53 +02:00
print $projectstatic -> getNomUrl ( 1 );
2016-01-18 15:56:51 +01:00
if ( ! in_array ( 'projectlabel' , $hiddenfields )) print '<br>' . dol_trunc ( $objp -> title , 24 );
2015-11-21 15:31:27 +01:00
print '</td>' ;
2015-11-21 20:25:28 +01:00
print '<td>' ;
if ( $objp -> fk_soc > 0 )
{
2017-10-07 13:09:31 +02:00
$thirdpartystatic -> id = $objp -> fk_soc ;
$thirdpartystatic -> ref = $objp -> socname ;
$thirdpartystatic -> name = $objp -> socname ;
print $thirdpartystatic -> getNomUrl ( 1 );
2015-11-21 20:25:28 +01:00
}
print '</td>' ;
2015-07-04 18:20:17 +02:00
if ( ! empty ( $conf -> global -> PROJECT_USE_OPPORTUNITIES ))
2015-06-30 01:34:17 +02:00
{
print '<td align="right">' ;
2017-10-07 13:09:31 +02:00
if ( $objp -> opp_amount ) print price ( $objp -> opp_amount , 0 , '' , 1 , - 1 , - 1 , $conf -> currency );
2015-07-04 18:20:17 +02:00
print '</td>' ;
print '<td align="right">' ;
2015-06-30 01:34:17 +02:00
$code = dol_getIdFromCode ( $db , $objp -> opp_status , 'c_lead_status' , 'rowid' , 'code' );
2017-10-07 13:09:31 +02:00
if ( $code ) print $langs -> trans ( " OppStatus " . $code );
2015-06-30 01:34:17 +02:00
print '</td>' ;
2015-07-04 18:20:17 +02:00
}
2017-06-02 12:27:46 +02:00
if ( empty ( $conf -> global -> PROJECT_HIDE_TASKS ))
2015-11-21 20:00:38 +01:00
{
2017-10-07 13:09:31 +02:00
print '<td align="right">' . $objp -> nb . '</td>' ;
$plannedworkload = $objp -> planned_workload ;
$total_plannedworkload += $plannedworkload ;
if ( ! in_array ( 'plannedworkload' , $hiddenfields ))
{
print '<td align="right">' . ( $plannedworkload ? convertSecondToTime ( $plannedworkload ) : '' ) . '</td>' ;
}
if ( ! in_array ( 'declaredprogress' , $hiddenfields ))
{
$declaredprogressworkload = $objp -> declared_progess_workload ;
$total_declaredprogressworkload += $declaredprogressworkload ;
print '<td align="right">' ;
//print $objp->planned_workload.'-'.$objp->declared_progess_workload."<br>";
print ( $plannedworkload ? round ( 100 * $declaredprogressworkload / $plannedworkload , 0 ) . '%' : '' );
print '</td>' ;
}
2015-11-21 20:00:38 +01:00
}
2017-06-02 12:27:46 +02:00
2013-04-12 11:09:53 +02:00
print '<td align="right">' . $projectstatic -> getLibStatut ( 3 ) . '</td>' ;
print " </tr> \n " ;
2015-07-04 18:20:17 +02:00
$total_task = $total_task + $objp -> nb ;
$total_opp_amount = $total_opp_amount + $objp -> opp_amount ;
$ponderated_opp_amount = $ponderated_opp_amount + price2num ( $listofoppstatus [ $objp -> opp_status ] * $objp -> opp_amount / 100 );
2013-04-12 11:09:53 +02:00
}
$i ++ ;
}
2015-11-21 15:31:27 +01:00
print '<tr class="liste_total">' ;
2015-11-21 20:25:28 +01:00
print '<td colspan="2">' . $langs -> trans ( " Total " ) . " </td> " ;
2015-07-10 10:42:42 +02:00
if ( ! empty ( $conf -> global -> PROJECT_USE_OPPORTUNITIES ))
{
2015-11-21 15:31:27 +01:00
print '<td class="liste_total" align="right">' . price ( $total_opp_amount , 0 , '' , 1 , - 1 , - 1 , $conf -> currency ) . '</td>' ;
2016-03-25 15:24:57 +01:00
print '<td class="liste_total" align="right">' . $form -> textwithpicto ( price ( $ponderated_opp_amount , 0 , '' , 1 , - 1 , - 1 , $conf -> currency ), $langs -> trans ( " OpportunityPonderatedAmountDesc " ), 1 ) . '</td>' ;
2015-07-10 10:42:42 +02:00
}
2017-06-02 12:27:46 +02:00
if ( empty ( $conf -> global -> PROJECT_HIDE_TASKS ))
2015-11-21 20:00:38 +01:00
{
2017-10-07 13:09:31 +02:00
print '<td class="liste_total" align="right">' . $total_task . '</td>' ;
if ( ! in_array ( 'plannedworkload' , $hiddenfields )) print '<td class="liste_total" align="right">' . ( $total_plannedworkload ? convertSecondToTime ( $total_plannedworkload ) : '' ) . '</td>' ;
if ( ! in_array ( 'declaredprogress' , $hiddenfields )) print '<td class="liste_total" align="right">' . ( $total_plannedworkload ? round ( 100 * $total_declaredprogressworkload / $total_plannedworkload , 0 ) . '%' : '' ) . '</td>' ;
2015-11-21 20:00:38 +01:00
}
2015-11-21 15:31:27 +01:00
print '<td class="liste_total"></td>' ;
2017-10-07 13:09:31 +02:00
print '</tr>' ;
2017-06-02 12:27:46 +02:00
2013-04-12 11:09:53 +02:00
$db -> free ( $resql );
}
else
{
dol_print_error ( $db );
}
2014-09-12 05:30:17 +02:00
2013-04-12 11:09:53 +02:00
print " </table> " ;
2017-10-19 19:53:29 +02:00
print '</div>' ;
2014-09-12 05:30:17 +02:00
2015-03-05 11:13:44 +01:00
if ( ! empty ( $conf -> global -> PROJECT_LIMIT_YEAR_RANGE ))
{
2014-09-12 05:30:17 +02:00
//Add the year filter input
2015-08-15 16:07:59 +02:00
print '<form method="get" action="' . $_SERVER [ " PHP_SELF " ] . '">' ;
2014-09-12 05:30:17 +02:00
print '<table width="100%">' ;
print '<tr>' ;
print '<td>' . $langs -> trans ( " Year " ) . '</td>' ;
print '<td style="text-align:right"><input type="text" size="4" class="flat" name="project_year_filter" value="' . $project_year_filter . '"/>' ;
print " </tr> \n " ;
2015-08-15 16:07:59 +02:00
print '</table></form>' ;
2014-09-12 05:30:17 +02:00
}
2009-01-15 00:36:51 +01:00
}