';
- if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
- $selected = 0;
- if (in_array($object->id, $arrayofselected)) {
- $selected = 1;
- }
- print '';
- }
- print '
';
+ if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
+ $selected = 0;
+ if (in_array($object->id, $arrayofselected)) {
+ $selected = 1;
+ }
+ print '';
}
print '
';
if (!$i) {
- $totalarray['pos'][$totalarray['nbfield']] = 't.'.$key;
+ $totalarray['nbfield']++;
}
- if (!isset($totalarray['val'])) {
- $totalarray['val'] = array();
+ if (!empty($val['isameasure']) && $val['isameasure'] == 1) {
+ if (!$i) {
+ $totalarray['pos'][$totalarray['nbfield']] = 't.'.$key;
+ }
+ if (!isset($totalarray['val'])) {
+ $totalarray['val'] = array();
+ }
+ if (!isset($totalarray['val']['t.'.$key])) {
+ $totalarray['val']['t.'.$key] = 0;
+ }
+ $totalarray['val']['t.'.$key] += $object->$key;
}
- if (!isset($totalarray['val']['t.'.$key])) {
- $totalarray['val']['t.'.$key] = 0;
- }
- $totalarray['val']['t.'.$key] += $object->$key;
}
}
- }
- // Extra fields
- include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
- // Fields from hook
- $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray);
- $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook
- print $hookmanager->resPrint;
- // Action column
- if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
- print '
';
- if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
- $selected = 0;
- if (in_array($object->id, $arrayofselected)) {
- $selected = 1;
+ // Extra fields
+ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
+ // Fields from hook
+ $parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray);
+ $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook
+ print $hookmanager->resPrint;
+ // Action column
+ if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
+ print '
';
+ if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
+ $selected = 0;
+ if (in_array($object->id, $arrayofselected)) {
+ $selected = 1;
+ }
+ print '';
}
- print '';
+ print '
';
+ return $return;
+ }
}
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index 6dcab968074..3af565a1baf 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -10737,21 +10737,21 @@ function dolGetStatus($statusLabel = '', $statusLabelShort = '', $html = '', $st
* @param int|boolean $userRight User action right
* // phpcs:disable
* @param array $params = [ // Various params for future : recommended rather than adding more function arguments
- * 'attr' => [ // to add or override button attributes
- * 'xxxxx' => '', // your xxxxx attribute you want
- * 'class' => 'reposition', // to add more css class to the button class attribute
- * 'classOverride' => '' // to replace class attribute of the button
- * ],
- * 'confirm' => [
- * 'url' => 'http://', // Overide Url to go when user click on action btn, if empty default url is $url.?confirm=yes, for no js compatibility use $url for fallback confirm.
- * 'title' => '', // Overide title of modal, if empty default title use "ConfirmBtnCommonTitle" lang key
- * 'action-btn-label' => '', // Overide label of action button, if empty default label use "Confirm" lang key
- * 'cancel-btn-label' => '', // Overide label of cancel button, if empty default label use "CloseDialog" lang key
- * 'content' => '', // Overide text of content, if empty default content use "ConfirmBtnCommonContent" lang key
- * 'modal' => true, // true|false to display dialog as a modal (with dark background)
- * 'isDropDrown' => false, // true|false to display dialog as a dropdown (with dark background)
- * ],
- * ]
+ * 'attr' => [ // to add or override button attributes
+ * 'xxxxx' => '', // your xxxxx attribute you want
+ * 'class' => 'reposition', // to add more css class to the button class attribute
+ * 'classOverride' => '' // to replace class attribute of the button
+ * ],
+ * 'confirm' => [
+ * 'url' => 'http://', // Overide Url to go when user click on action btn, if empty default url is $url.?confirm=yes, for no js compatibility use $url for fallback confirm.
+ * 'title' => '', // Overide title of modal, if empty default title use "ConfirmBtnCommonTitle" lang key
+ * 'action-btn-label' => '', // Overide label of action button, if empty default label use "Confirm" lang key
+ * 'cancel-btn-label' => '', // Overide label of cancel button, if empty default label use "CloseDialog" lang key
+ * 'content' => '', // Overide text of content, if empty default content use "ConfirmBtnCommonContent" lang key
+ * 'modal' => true, // true|false to display dialog as a modal (with dark background)
+ * 'isDropDrown' => false, // true|false to display dialog as a dropdown (with dark background)
+ * ],
+ * ]
* // phpcs:enable
* @return string html button
*/
diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php
index f8e998101bc..3c7e7303581 100644
--- a/htdocs/core/lib/project.lib.php
+++ b/htdocs/core/lib/project.lib.php
@@ -1064,6 +1064,239 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t
}
+/**
+ * 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 <<<<<<<<< Temporary merge branch 1
+ * @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, $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;
+ $projectstatic->status = $lines[$i]->project->status;
+
+ $taskstatic->id = $lines[$i]->fk_statut;
+ $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 '
';
+
+ $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 '