2008-09-10 22:49:21 +02:00
< ? php
/* Copyright ( C ) 2005 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2015-03-01 17:45:36 +01:00
* Copyright ( C ) 2004 - 2015 Laurent Destailleur < eldy @ users . sourceforge . net >
2012-12-30 15:13:49 +01:00
* Copyright ( C ) 2005 - 2010 Regis Houssin < regis . houssin @ capnetworks . com >
2010-11-06 21:55:52 +01:00
* Copyright ( C ) 2010 François Legastelois < flegastelois @ teclib . com >
2008-09-10 22:49:21 +02:00
*
* 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
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2008-09-10 22:49:21 +02:00
* ( 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
2011-08-01 01:19:04 +02:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2008-09-10 22:49:21 +02:00
*/
/**
2015-03-18 11:04:50 +01:00
* \file htdocs / projet / activity / perday . php
2008-09-10 22:49:21 +02:00
* \ingroup projet
2015-03-18 11:04:50 +01:00
* \brief List activities of tasks ( per day entry )
2008-09-10 22:49:21 +02:00
*/
2010-03-01 09:42:10 +01:00
require ( " ../../main.inc.php " );
2012-08-22 23:11:24 +02:00
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 . '/core/lib/project.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php' ;
2015-03-18 11:20:08 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php' ;
2010-03-01 20:36:58 +01:00
$langs -> load ( 'projects' );
2008-09-10 22:49:21 +02:00
2012-02-15 23:08:20 +01:00
$action = GETPOST ( 'action' );
2011-12-04 15:26:32 +01:00
$mode = GETPOST ( " mode " );
2012-02-27 22:26:22 +01:00
$id = GETPOST ( 'id' , 'int' );
2008-09-10 22:49:21 +02:00
2010-09-18 15:38:43 +02:00
$mine = 0 ;
if ( $mode == 'mine' ) $mine = 1 ;
2010-01-22 21:20:41 +01:00
$projectid = '' ;
2010-01-27 08:58:31 +01:00
$projectid = isset ( $_GET [ " id " ]) ? $_GET [ " id " ] : $_POST [ " projectid " ];
2008-09-10 22:49:21 +02:00
// Security check
2010-02-14 16:43:37 +01:00
$socid = 0 ;
2010-05-30 14:21:32 +02:00
if ( $user -> societe_id > 0 ) $socid = $user -> societe_id ;
2010-01-22 21:20:41 +01:00
$result = restrictedArea ( $user , 'projet' , $projectid );
2008-09-10 22:49:21 +02:00
2015-04-09 20:40:49 +02:00
$now = dol_now ();
$nowtmp = dol_getdate ( $now );
$nowday = $nowtmp [ 'mday' ];
$nowmonth = $nowtmp [ 'mon' ];
$nowyear = $nowtmp [ 'year' ];
$year = GETPOST ( 'reyear' ) ? GETPOST ( 'reyear' ) : ( GETPOST ( " year " , " int " ) ? GETPOST ( " year " , " int " ) : date ( " Y " ));
$month = GETPOST ( 'remonth' ) ? GETPOST ( 'remonth' ) : ( GETPOST ( " month " , " int " ) ? GETPOST ( " month " , " int " ) : date ( " m " ));
$day = GETPOST ( 'reday' ) ? GETPOST ( 'reday' ) : ( GETPOST ( " day " , " int " ) ? GETPOST ( " day " , " int " ) : date ( " d " ));
$day = ( int ) $day ;
$week = GETPOST ( " week " , " int " ) ? GETPOST ( " week " , " int " ) : date ( " W " );
$daytoparse = $now ;
if ( $year && $month && $day ) $daytoparse = dol_mktime ( 0 , 0 , 0 , $month , $day , $year );
2011-12-04 15:26:32 +01:00
2008-09-10 22:49:21 +02:00
/*
* Actions
*/
2015-04-09 20:40:49 +02:00
if ( GETPOST ( 'submitdateselect' ))
{
$daytoparse = dol_mktime ( 0 , 0 , 0 , GETPOST ( 'remonth' ), GETPOST ( 'reday' ), GETPOST ( 'reyear' ));
$action = '' ;
}
2012-02-15 23:08:20 +01:00
if ( $action == 'addtime' && $user -> rights -> projet -> creer )
2008-09-10 22:49:21 +02:00
{
2011-09-20 17:59:46 +02:00
$task = new Task ( $db );
2015-03-18 11:04:50 +01:00
$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' );
}
2011-09-20 17:59:46 +02:00
}
2008-09-10 22:49:21 +02:00
2014-08-08 02:11:03 +02:00
2008-09-10 22:49:21 +02:00
/*
* View
*/
$form = new Form ( $db );
2015-03-18 11:20:08 +01:00
$formother = new FormOther ( $db );
2010-09-18 15:38:43 +02:00
$projectstatic = new Project ( $db );
$project = new Project ( $db );
$taskstatic = new Task ( $db );
2008-09-10 22:49:21 +02:00
2015-04-09 20:40:49 +02:00
$prev = dol_getdate ( $daytoparse - ( 24 * 3600 ));
$prev_year = $prev [ 'year' ];
$prev_month = $prev [ 'mon' ];
$prev_day = $prev [ 'mday' ];
$next = dol_getdate ( $daytoparse + ( 24 * 3600 ));
$next_year = $next [ 'year' ];
$next_month = $next [ 'mon' ];
$next_day = $next [ 'mday' ];
2008-09-10 22:49:21 +02:00
$title = $langs -> trans ( " TimeSpent " );
2010-09-18 15:38:43 +02:00
if ( $mine ) $title = $langs -> trans ( " MyTimeSpent " );
2015-03-18 11:04:50 +01:00
$usertoprocess = $user ;
2015-03-05 13:48:57 +01:00
$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
2010-01-27 08:58:31 +01:00
2012-02-15 23:08:20 +01:00
if ( $id )
2008-09-10 22:49:21 +02:00
{
2012-02-15 23:08:20 +01:00
$project -> fetch ( $id );
2014-08-21 23:43:11 +02:00
$project -> fetch_thirdparty ();
2008-09-10 22:49:21 +02:00
}
2015-02-23 00:57:48 +01:00
$onlyopened = 1 ; // or -1
$tasksarray = $taskstatic -> getTasksArray ( 0 , 0 ,( $project -> id ? $project -> id : $projectsListId ), $socid , 0 , '' , $onlyopened ); // We want to see all task of opened project i am allowed to see, not only mine. Later only mine will be editable later.
2015-03-05 13:48:57 +01:00
$projectsrole = $taskstatic -> getUserRolesForProjectsOrTasks ( $usertoprocess , 0 ,( $project -> id ? $project -> id : $projectsListId ), 0 );
$tasksrole = $taskstatic -> getUserRolesForProjectsOrTasks ( 0 , $usertoprocess ,( $project -> id ? $project -> id : $projectsListId ), 0 );
2010-09-18 15:38:43 +02:00
//var_dump($tasksarray);
//var_dump($projectsrole);
//var_dump($taskrole);
2014-08-07 11:08:36 +02:00
2015-03-18 11:04:50 +01:00
llxHeader ( " " , $title , " " );
2014-08-08 01:26:53 +02:00
2015-04-18 23:39:04 +02:00
print_barre_liste ( $title , $page , $_SERVER [ " PHP_SELF " ], " " , $sortfield , $sortorder , " " , $num , '' , 'title_project' );
2014-08-07 11:08:36 +02:00
2015-03-01 17:45:36 +01:00
2015-04-09 20:40:49 +02:00
// 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 , $month , $day , $year ), " day " ) . " </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>) " ;
$nav .= '<br>' . $form -> select_date ( - 1 , '' , 0 , 0 , 2 , " addtime " , 1 , 0 , 1 ) . ' ' ;
$nav .= ' <input type="submit" name="submitdateselect" class="button" value="' . $langs -> trans ( " Refresh " ) . '">' ;
$picto = 'calendarweek' ;
print '<form name="addtime" method="POST" action="' . $_SERVER [ " PHP_SELF " ] . ( $project -> id > 0 ? '?id=' . $project -> id : '' ) . '">' ;
2015-03-01 17:45:36 +01:00
print '<input type="hidden" name="token" value="' . $_SESSION [ 'newtoken' ] . '">' ;
print '<input type="hidden" name="action" value="addtime">' ;
print '<input type="hidden" name="mode" value="' . $mode . '">' ;
$head = project_timesheet_prepare_head ( $mode );
dol_fiche_head ( $head , 'inputperday' , '' , 0 , 'task' );
2014-08-08 02:11:03 +02:00
// Show description of content
2015-04-09 20:40:49 +02:00
if ( $mine ) print $langs -> trans ( " MyTasksDesc " ) . ( $onlyopened ? ' ' . $langs -> trans ( " OnlyOpenedProject " ) : '' ) . '<br>' ;
2014-08-08 02:11:03 +02:00
else
{
2015-04-09 20:40:49 +02:00
if ( $user -> rights -> projet -> all -> lire && ! $socid ) print $langs -> trans ( " ProjectsDesc " ) . ( $onlyopened ? ' ' . $langs -> trans ( " OnlyOpenedProject " ) : '' ) . '<br>' ;
else print $langs -> trans ( " ProjectsPublicTaskDesc " ) . ( $onlyopened ? ' ' . $langs -> trans ( " AlsoOnlyOpenedProject " ) : '' ) . '<br>' ;
2014-08-08 02:11:03 +02:00
}
2015-04-09 20:40:49 +02:00
print $langs -> trans ( " AllTaskVisibleButEditIfYouAreAssigned " ) . '<br>' ;
print '<br>' ;
print " \n " ;
2008-09-10 22:49:21 +02:00
2014-08-07 11:08:36 +02:00
// Filter on user
2014-08-07 11:48:19 +02:00
/* dol_fiche_head ( '' );
print '<table class="border" width="100%"><tr><td width="25%">' . $langs -> trans ( " User " ) . '</td>' ;
print '<td>' ;
if ( $mine ) print $user -> getLoginUrl ( 1 );
print '</td>' ;
print '</tr></table>' ;
dol_fiche_end ();
*/
2014-08-07 11:08:36 +02:00
2014-08-08 01:26:53 +02:00
// Filter on user
/* dol_fiche_head ( '' );
print '<table class="border" width="100%"><tr><td width="25%">' . $langs -> trans ( " User " ) . '</td>' ;
print '<td>' ;
if ( $mine ) print $user -> getLoginUrl ( 1 );
print '</td>' ;
print '</tr></table>' ;
dol_fiche_end ();
*/
2008-09-10 22:49:21 +02:00
2015-04-09 20:40:49 +02:00
print '<div align="right">' . $nav . '</div>' ;
2008-09-10 22:49:21 +02:00
print '<table class="noborder" width="100%">' ;
print '<tr class="liste_titre">' ;
2010-02-21 01:16:47 +01:00
print '<td>' . $langs -> trans ( " Project " ) . '</td>' ;
2008-09-10 22:49:21 +02:00
print '<td>' . $langs -> trans ( " RefTask " ) . '</td>' ;
print '<td>' . $langs -> trans ( " LabelTask " ) . '</td>' ;
2013-11-05 11:17:54 +01:00
print '<td align="right">' . $langs -> trans ( " PlannedWorkload " ) . '</td>' ;
2014-10-12 01:04:34 +02:00
print '<td align="right">' . $langs -> trans ( " ProgressDeclared " ) . '</td>' ;
2015-03-05 13:48:57 +01:00
print '<td align="right">' . $langs -> trans ( " TimeSpent " ) . '</td>' ;
if ( $usertoprocess -> id == $user -> id ) print '<td align="right">' . $langs -> trans ( " TimeSpentByYou " ) . '</td>' ;
else print '<td align="right">' . $langs -> trans ( " TimeSpentByUser " ) . '</td>' ;
2015-04-09 20:40:49 +02:00
print '<td align="center">' . $langs -> trans ( " HourStart " ) . '</td>' ;
2015-03-18 11:04:50 +01:00
print '<td align="center" colspan="2">' . $langs -> trans ( " Duration " ) . '</td>' ;
2008-09-10 22:49:21 +02:00
print " </tr> \n " ;
2014-08-07 11:48:19 +02:00
// By default, we can edit only tasks we are assigned to
2014-08-08 02:11:03 +02:00
$restricteditformytask = ( empty ( $conf -> global -> PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS ) ? 1 : 0 );
2014-08-07 11:48:19 +02:00
2014-08-07 11:08:36 +02:00
if ( count ( $tasksarray ) > 0 )
{
2015-03-01 17:45:36 +01:00
$j = 0 ;
2015-04-09 20:40:49 +02:00
projectLinesPerDay ( $j , 0 , $tasksarray , $level , $projectsrole , $tasksrole , $mine , $restricteditformytask , $daytoparse );
2014-08-07 11:08:36 +02:00
}
else
{
print '<tr><td colspan="10">' . $langs -> trans ( " NoTasks " ) . '</td></tr>' ;
}
2008-09-10 22:49:21 +02:00
print " </table> " ;
2015-03-01 17:45:36 +01:00
dol_fiche_end ();
2015-03-18 11:20:08 +01:00
print '<div class="center">' ;
print '<input type="submit" class="button"' . ( $disabledtask ? ' disabled="disabled"' : '' ) . ' value="' . $langs -> trans ( " Save " ) . '">' ;
print '</div>' ;
2015-03-18 11:04:50 +01:00
print '</form>' ;
2012-02-15 23:08:20 +01:00
2008-09-10 22:49:21 +02:00
2015-04-09 20:40:49 +02:00
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>' ;
2011-08-27 16:24:16 +02:00
llxFooter ();
2011-12-04 15:26:32 +01:00
$db -> close ();