diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index e673b2d6a2fe456b0bb10d9ef73461aa0634e9d0..c9a70c425196b937a8e30f0c029ef251717275a6 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -422,7 +422,7 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t // Duration print '<td align="center">'; - print $lines[$i]->duration_planned.' '.$langs->trans('Hours'); + print $lines[$i]->planned_workload.' '.$langs->trans('Hours'); print '</td>'; // Progress @@ -557,7 +557,7 @@ function projectLinesb(&$inc, $parent, $lines, &$level, &$projectsrole, &$tasksr // Duration print '<td align="center">'; - print $lines[$i]->duration_planned.' '.$langs->trans('Hours'); + print $lines[$i]->planned_workload.' '.$langs->trans('Hours'); print '</td>'; // Progress diff --git a/htdocs/core/modules/modProjet.class.php b/htdocs/core/modules/modProjet.class.php index 9d75ffa62432fc477254a709a9dee59489a2bdb4..e5f956b09460406ab05ec4fbde0c0d0918967d2a 100644 --- a/htdocs/core/modules/modProjet.class.php +++ b/htdocs/core/modules/modProjet.class.php @@ -157,18 +157,18 @@ class modProjet extends DolibarrModules $this->export_fields_array[$r]=array('s.rowid'=>"IdCompany",'s.nom'=>'CompanyName','s.address'=>'Address','s.zip'=>'Zip','s.town'=>'Town','s.fk_pays'=>'Country', 's.phone'=>'Phone','s.siren'=>'ProfId1','s.siret'=>'ProfId2','s.ape'=>'ProfId3','s.idprof4'=>'ProfId4','s.code_compta'=>'CustomerAccountancyCode','s.code_compta_fournisseur'=>'SupplierAccountancyCode', 'p.rowid'=>"ProjectId",'p.ref'=>"ProjectRef",'p.datec'=>"DateCreation",'p.dateo'=>"DateDebutProjet",'p.datee'=>"DateFinProjet",'p.fk_statut'=>'ProjectStatus','p.description'=>"projectNote", - 'pt.rowid'=>'RefTask','pt.dateo'=>"TaskDateo",'pt.datee'=>"TaskDatee",'pt.duration_effective'=>"DurationEffective",'pt.duration_planned'=>"DurationPlanned",'pt.progress'=>"Progress",'pt.description'=>"TaskDesc"); + 'pt.rowid'=>'RefTask','pt.dateo'=>"TaskDateo",'pt.datee'=>"TaskDatee",'pt.duration_effective'=>"DurationEffective",'pt.planned_workload'=>"DurationPlanned",'pt.progress'=>"Progress",'pt.description'=>"TaskDesc"); //$this->export_TypeFields_array[$r]=array('s.rowid'=>"List:societe:nom",'s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','s.fk_pays'=>'List:c_pays:libelle', $this->export_TypeFields_array[$r]=array('s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','s.fk_pays'=>'List:c_pays:libelle', 's.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','s.code_compta'=>'Text','s.code_compta_fournisseur'=>'Text', 'p.rowid'=>"List:projet:ref",'p.ref'=>"Text",'p.datec'=>"Date",'p.dateo'=>"Date",'p.datee'=>"Date",'p.fk_statut'=>'Status','p.description'=>"Text", - 'pt.dateo'=>"Date",'pt.datee'=>"Date",'pt.duration_effective'=>"Duree",'pt.duration_planned'=>"Duree",'pt.progress'=>"Number",'pt.description'=>"Text"); + 'pt.dateo'=>"Date",'pt.datee'=>"Date",'pt.duration_effective'=>"Duree",'pt.planned_workload'=>"Duree",'pt.progress'=>"Number",'pt.description'=>"Text"); $this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','s.fk_pays'=>'company', 's.phone'=>'company','s.siren'=>'company','s.siret'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.code_compta'=>'company','s.code_compta_fournisseur'=>'company', 'f.rowid'=>"project",'f.ref'=>"project",'f.datec'=>"project",'f.duree'=>"project",'f.fk_statut'=>"project",'f.description'=>"project", - 'pt.rowid'=>'task','pt.dateo'=>"task",'pt.datee'=>"task",'pt.duration_effective'=>"task",'pt.duration_planned'=>"task",'pt.progress'=>"task",'pt.description'=>"task"); + 'pt.rowid'=>'task','pt.dateo'=>"task",'pt.datee'=>"task",'pt.duration_effective'=>"task",'pt.planned_workload'=>"task",'pt.progress'=>"task",'pt.description'=>"task"); $this->export_sql_start[$r]='SELECT DISTINCT '; $this->export_sql_end[$r] =' FROM ('.MAIN_DB_PREFIX.'projet as p, '.MAIN_DB_PREFIX.'projet_task as pt, '.MAIN_DB_PREFIX.'societe as s)'; diff --git a/htdocs/install/mysql/migration/3.4.0-3.5.0.sql b/htdocs/install/mysql/migration/3.4.0-3.5.0.sql index 8d6cc91d1d1fa50ba3a4fe070533a08240f98590..03babcae351d4fa6fcccc560c11233cf97cbe9df 100755 --- a/htdocs/install/mysql/migration/3.4.0-3.5.0.sql +++ b/htdocs/install/mysql/migration/3.4.0-3.5.0.sql @@ -20,6 +20,6 @@ DELETE FROM llx_menu where module='holiday'; -ALTER TABLE llx_projet_task ADD COLUMN duration_planned real DEFAULT 0 NOT NULL AFTER duration_effective; +ALTER TABLE llx_projet_task ADD COLUMN planned_workload real DEFAULT 0 NOT NULL AFTER duration_effective; diff --git a/htdocs/install/mysql/tables/llx_projet_task.sql b/htdocs/install/mysql/tables/llx_projet_task.sql index 8e12ec8f973897162d6dd810a9b6d230deb4ac19..1fc7325bea079941222c0252eef57712f9004484 100644 --- a/htdocs/install/mysql/tables/llx_projet_task.sql +++ b/htdocs/install/mysql/tables/llx_projet_task.sql @@ -30,7 +30,7 @@ create table llx_projet_task label varchar(255) NOT NULL, description text, duration_effective real DEFAULT 0 NOT NULL, - duration_planned real DEFAULT 0 NOT NULL, + planned_workload real DEFAULT 0 NOT NULL, progress integer DEFAULT 0, -- percentage increase priority integer DEFAULT 0, -- priority fk_user_creat integer, -- user who created the task diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index 3851d6b996736cab2b45c125cdf23794d82c42e9..f98b2d303f8ae6e78c00bbf2cd4447b664fe1753 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -105,3 +105,5 @@ TypeContact_project_task_internal_CONTRIBUTOR=Contributor TypeContact_project_task_external_CONTRIBUTOR=Contributor # Documents models DocumentModelBaleine=A complete project's report model (logo...) +PlannedWorkload = Planned workload +WorkloadOccupation= Workload affectation \ No newline at end of file diff --git a/htdocs/langs/fr_FR/projects.lang b/htdocs/langs/fr_FR/projects.lang index 7866141618084ee4710919e8ae4276457e8cabfa..1dd45218fc7c9794e06c5a49203de7e028b5f79b 100644 --- a/htdocs/langs/fr_FR/projects.lang +++ b/htdocs/langs/fr_FR/projects.lang @@ -107,3 +107,5 @@ TypeContact_project_task_external_CONTRIBUTOR=Intervenant DocumentModelBaleine=Modèle de rapport de projet complet (logo...) SelectElement=Eléments associable au projet : AddElement=Associer +PlannedWorkload = Charge de travail prévue +WorkloadOccupation= Pourcentage affectation \ No newline at end of file diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php index 18824f811404dde0c68473df86333cca8ffc58f4..57513250f0b55244fece3cf32f7f0ffadb3f1dc1 100644 --- a/htdocs/projet/class/task.class.php +++ b/htdocs/projet/class/task.class.php @@ -41,7 +41,7 @@ class Task extends CommonObject var $label; var $description; var $duration_effective; - var $duration_planned; + var $planned_workload; var $date_c; var $date_start; var $date_end; @@ -102,7 +102,7 @@ class Task extends CommonObject $sql.= ", fk_user_creat"; $sql.= ", dateo"; $sql.= ", datee"; - $sql.= ", duration_planned"; + $sql.= ", planned_workload"; $sql.= ", progress"; $sql.= ") VALUES ("; $sql.= $this->fk_project; @@ -113,7 +113,7 @@ class Task extends CommonObject $sql.= ", ".$user->id; $sql.= ", ".($this->date_start!=''?"'".$this->db->idate($this->date_start)."'":'null'); $sql.= ", ".($this->date_end!=''?"'".$this->db->idate($this->date_end)."'":'null'); - $sql.= ", ".($this->duration_planned!=''?$this->duration_planned:0); + $sql.= ", ".($this->planned_workload!=''?$this->planned_workload:0); $sql.= ", ".($this->progress!=''?$this->progress:0); $sql.= ")"; @@ -186,7 +186,7 @@ class Task extends CommonObject $sql.= " t.label,"; $sql.= " t.description,"; $sql.= " t.duration_effective,"; - $sql.= " t.duration_planned,"; + $sql.= " t.planned_workload,"; $sql.= " t.datec,"; $sql.= " t.dateo,"; $sql.= " t.datee,"; @@ -215,7 +215,7 @@ class Task extends CommonObject $this->label = $obj->label; $this->description = $obj->description; $this->duration_effective = $obj->duration_effective; - $this->duration_planned = $obj->duration_planned; + $this->planned_workload = $obj->planned_workload; $this->date_c = $this->db->jdate($obj->datec); $this->date_start = $this->db->jdate($obj->dateo); $this->date_end = $this->db->jdate($obj->datee); @@ -259,7 +259,7 @@ class Task extends CommonObject if (isset($this->label)) $this->label=trim($this->label); if (isset($this->description)) $this->description=trim($this->description); if (isset($this->duration_effective)) $this->duration_effective=trim($this->duration_effective); - if (isset($this->duration_planned)) $this->duration_planned=trim($this->duration_planned); + if (isset($this->planned_workload)) $this->planned_workload=trim($this->planned_workload); // Check parameters // Put here code to add control on parameters values @@ -271,7 +271,7 @@ class Task extends CommonObject $sql.= " label=".(isset($this->label)?"'".$this->db->escape($this->label)."'":"null").","; $sql.= " description=".(isset($this->description)?"'".$this->db->escape($this->description)."'":"null").","; $sql.= " duration_effective=".(isset($this->duration_effective)?$this->duration_effective:"null").","; - $sql.= " duration_planned=".(isset($this->duration_planned)?$this->duration_planned:"0").","; + $sql.= " planned_workload=".(isset($this->planned_workload)?$this->planned_workload:"0").","; $sql.= " dateo=".($this->date_start!=''?$this->db->idate($this->date_start):'null').","; $sql.= " datee=".($this->date_end!=''?$this->db->idate($this->date_end):'null').","; $sql.= " progress=".$this->progress; @@ -531,7 +531,7 @@ class Task extends CommonObject // List of tasks (does not care about permissions. Filtering will be done later) $sql = "SELECT p.rowid as projectid, p.ref, p.title as plabel, p.public,"; $sql.= " t.rowid as taskid, t.label, t.description, t.fk_task_parent, t.duration_effective, t.progress,"; - $sql.= " t.dateo as date_start, t.datee as date_end, t.duration_planned"; + $sql.= " t.dateo as date_start, t.datee as date_end, t.planned_workload"; if ($mode == 0) { $sql.= " FROM ".MAIN_DB_PREFIX."projet as p"; @@ -593,7 +593,7 @@ class Task extends CommonObject $tasks[$i]->description = $obj->description; $tasks[$i]->fk_parent = $obj->fk_task_parent; $tasks[$i]->duration = $obj->duration_effective; - $tasks[$i]->duration_planned= $obj->duration_planned; + $tasks[$i]->planned_workload= $obj->planned_workload; $tasks[$i]->progress = $obj->progress; $tasks[$i]->public = $obj->public; $tasks[$i]->date_start = $this->db->jdate($obj->date_start); @@ -1005,7 +1005,7 @@ class Task extends CommonObject $clone_task->fk_project = $project_id; $clone_task->fk_task_parent = $parent_task_id; $clone_task->date_c = $datec; - $clone_task->duration_planned = $clone_task->duration_planned; + $clone_task->planned_workload = $clone_task->planned_workload; //Manage Task Date if ($clone_change_dt) diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index fc17df207d5415807b328053bbe5a7277ae24abc..6ca7828f6c45ed637a5ed564fb8b45c494fccd4b 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -146,11 +146,11 @@ print '<th>'.$langs->trans('Projects').'</th>'; print '<th>'.$langs->trans('Task').'</th>'; print '<th>'.$langs->trans('DateStart').'</th>'; print '<th>'.$langs->trans('DateEnd').'</th>'; -print '<th>'.$langs->trans('TaskRessourceLinks').' %</th>'; +print '<th>'.$langs->trans('WorkloadOccupation').'</th>'; print '</tr>'; -$sql = "SELECT p.title, p.rowid as projectid, t.label, t.rowid as taskid, u.rowid as userid, t.duration_planned, t.dateo, t.datee, (tasktime.task_duration/3600) as totaltime"; +$sql = "SELECT p.title, p.rowid as projectid, t.label, t.rowid as taskid, u.rowid as userid, t.planned_workload, t.dateo, t.datee, tasktime.task_duration"; $sql.= " FROM ".MAIN_DB_PREFIX."projet as p"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on p.fk_soc = s.rowid"; $sql.= " INNER JOIN ".MAIN_DB_PREFIX."projet_task as t on t.fk_projet = p.rowid"; @@ -159,6 +159,7 @@ $sql.= " INNER JOIN ".MAIN_DB_PREFIX."user as u on tasktime.fk_user = u.rowid"; $sql.= " WHERE p.entity = ".$conf->entity; if ($mine || ! $user->rights->projet->all->lire) $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.")"; +$sql.= " AND p.fk_statut=1"; $sql.= " ORDER BY u.rowid, t.dateo, t.datee"; $userstatic=new User($db); @@ -186,10 +187,10 @@ if ( $resql ) print '<td><a href="'.DOL_URL_ROOT.'/projet/tasks/task.php?id='.$obj->taskid.'&withproject=1">'.$obj->label.'</a></td>'; print '<td>'.dol_print_date($db->jdate($obj->dateo)).'</td>'; print '<td>'.dol_print_date($db->jdate($obj->datee)).'</td>'; - if (empty($obj->duration_planned)) { + if (empty($obj->planned_workload)) { $percentcompletion = '0'; } else { - $percentcompletion = intval(($obj->totaltime*100)/$obj->duration_planned); + $percentcompletion = intval(($obj->task_duration*100)/$obj->planned_workload); } print '<td>'.$percentcompletion.' %</td>'; print "</tr>\n"; diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index ac41ebaa384e5a600b4f8d0c572b513d7cf72e1e..7e3a2afd2818d4678fb3d99afaffb42948b382c5 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -71,7 +71,7 @@ $hookmanager->initHooks(array('projecttaskcard')); $progress=GETPOST('progress', 'int'); $label=GETPOST('label', 'alpha'); $description=GETPOST('description'); -$duration_planned=GETPOST('duration_planned'); +$planned_workload=GETPOST('planned_workload'); $userAccess=0; @@ -116,7 +116,7 @@ if ($action == 'createtask' && $user->rights->projet->creer) $task->fk_project = $projectid; $task->label = $label; $task->description = $description; - $task->duration_planned = $duration_planned; + $task->planned_workload = $planned_workload * 3600;//We set the planned workload into minutes $task->fk_task_parent = $task_parent; $task->date_c = dol_now(); $task->date_start = $date_start; @@ -295,8 +295,13 @@ if ($action == 'create' && $user->rights->projet->creer && (empty($object->socie print '</td></tr>'; // Duration planned - print '<tr><td>'.$langs->trans("Duration").'</td><td>'; - print '<input type="text" size="7" name="duration_planned" class="flat" value="'.$duration_planned.'"> '.$langs->trans('Hours'); + print '<tr><td>'.$langs->trans("PlannedWorkload").'</td><td>'; + if (!empty($object->planned_workload)) { + $planned_workload_hours = intval($object->planned_workload / 3600); + }else { + $planned_workload_hours = 0; + } + print '<input type="text" size="7" name="planned_workload" class="flat" value="'.$planned_workload.'"> '.$langs->trans('Hours'); print '</td></tr>'; // Progress diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index 84479231daaa21a48cea645f53a6bcd819e6db1a..98a511b29295e9b2848a24a34eb974c1122f565d 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -36,7 +36,7 @@ $action=GETPOST('action','alpha'); $confirm=GETPOST('confirm','alpha'); $withproject=GETPOST('withproject','int'); $project_ref=GETPOST('project_ref','alpha'); -$duration_planned=GETPOST('duration_planned'); +$planned_workload=GETPOST('planned_workload'); // Security check $socid=0; @@ -76,7 +76,7 @@ if ($action == 'update' && ! $_POST["cancel"] && $user->rights->projet->creer) $object->label = $_POST["label"]; $object->description = $_POST['description']; $object->fk_task_parent = $task_parent; - $object->duration_planned = $duration_planned; + $object->planned_workload = $planned_workload*3600; //We set the planned workload into minutes $object->date_start = dol_mktime(0,0,0,$_POST['dateomonth'],$_POST['dateoday'],$_POST['dateoyear']); $object->date_end = dol_mktime(0,0,0,$_POST['dateemonth'],$_POST['dateeday'],$_POST['dateeyear']); $object->progress = $_POST['progress']; @@ -286,8 +286,13 @@ if ($id > 0 || ! empty($ref)) print '</td></tr>'; // Duration planned - print '<tr><td>'.$langs->trans("Duration").'</td><td>'; - print '<input type="text" size="7" name="duration_planned" class="flat" value="'.$object->duration_planned.'"> '.$langs->trans('Hours'); + print '<tr><td>'.$langs->trans("PlannedWorkload").'</td><td>'; + if (!empty($object->planned_workload)) { + $planned_workload_hours = intval($object->planned_workload / 3600); + }else { + $planned_workload_hours = 0; + } + print '<input type="text" size="7" name="planned_workload" class="flat" value="'.$planned_workload_hours.'"> '.$langs->trans('Hours'); print '</td></tr>'; // Progress @@ -376,8 +381,13 @@ if ($id > 0 || ! empty($ref)) print '</td></tr>'; // Duration planned - print '<tr><td>'.$langs->trans("Duration").'</td><td colspan="3">'; - print $object->duration_planned.' '.$langs->trans('Hours'); + print '<tr><td>'.$langs->trans("PlannedWorkload").'</td><td colspan="3">'; + if (!empty($object->planned_workload)) { + $planned_workload_hours = intval($object->planned_workload / 3600); + }else { + $planned_workload_hours = 0; + } + print $planned_workload_hours.' '.$langs->trans('Hours'); print '</td></tr>'; // Progress diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 5d789ee720e13a7230d17ce2630ad490019a2874..1c7cd1bc9cc17f5a550be16ae4a15577640bb339 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -1,28 +1,28 @@ <?php /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> * Copyright (C) 2006-2012 Laurent Destailleur <eldy@users.sourceforge.net> - * Copyright (C) 2010-2012 Regis Houssin <regis.houssin@capnetworks.com> - * Copyright (C) 2011 Juanjo Menent <jmenent@2byte.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/>. - */ +* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@capnetworks.com> +* Copyright (C) 2011 Juanjo Menent <jmenent@2byte.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/>. +*/ /** * \file htdocs/projet/tasks/time.php * \ingroup project * \brief Page to add new time spent on a task - */ +*/ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; @@ -50,7 +50,7 @@ $projectstatic = new Project($db); /* * Actions - */ +*/ if ($action == 'addtimespent' && $user->rights->projet->creer) { @@ -165,7 +165,7 @@ if (! empty($project_ref) && ! empty($withproject)) /* * View - */ +*/ llxHeader("",$langs->trans("Task")); @@ -176,7 +176,7 @@ if ($id > 0 || ! empty($ref)) { /* * Fiche projet en mode visu - */ + */ if ($object->fetch($id) >= 0) { $result=$projectstatic->fetch($object->fk_project); @@ -186,50 +186,50 @@ if ($id > 0 || ! empty($ref)) if ($withproject) { - // Tabs for project - $tab='tasks'; - $head=project_prepare_head($projectstatic); - dol_fiche_head($head, $tab, $langs->trans("Project"),0,($projectstatic->public?'projectpub':'project')); - - $param=($mode=='mine'?'&mode=mine':''); - - print '<table class="border" width="100%">'; - - // Ref - print '<tr><td width="30%">'; - print $langs->trans("Ref"); - print '</td><td>'; - // Define a complementary filter for search of next/prev ref. - if (! $user->rights->projet->all->lire) - { - $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,0); - $projectstatic->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")"; - } - print $form->showrefnav($projectstatic,'project_ref','',1,'ref','ref','',$param.'&withproject=1'); - print '</td></tr>'; - - print '<tr><td>'.$langs->trans("Label").'</td><td>'.$projectstatic->title.'</td></tr>'; - - print '<tr><td>'.$langs->trans("Company").'</td><td>'; - if (! empty($projectstatic->societe->id)) print $projectstatic->societe->getNomUrl(1); - else print ' '; - print '</td>'; - print '</tr>'; - - // Visibility - print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; - if ($projectstatic->public) print $langs->trans('SharedProject'); - else print $langs->trans('PrivateProject'); - print '</td></tr>'; - - // Statut - print '<tr><td>'.$langs->trans("Status").'</td><td>'.$projectstatic->getLibStatut(4).'</td></tr>'; - - print '</table>'; - - dol_fiche_end(); - - print '<br>'; + // Tabs for project + $tab='tasks'; + $head=project_prepare_head($projectstatic); + dol_fiche_head($head, $tab, $langs->trans("Project"),0,($projectstatic->public?'projectpub':'project')); + + $param=($mode=='mine'?'&mode=mine':''); + + print '<table class="border" width="100%">'; + + // Ref + print '<tr><td width="30%">'; + print $langs->trans("Ref"); + print '</td><td>'; + // Define a complementary filter for search of next/prev ref. + if (! $user->rights->projet->all->lire) + { + $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,0); + $projectstatic->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")"; + } + print $form->showrefnav($projectstatic,'project_ref','',1,'ref','ref','',$param.'&withproject=1'); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("Label").'</td><td>'.$projectstatic->title.'</td></tr>'; + + print '<tr><td>'.$langs->trans("Company").'</td><td>'; + if (! empty($projectstatic->societe->id)) print $projectstatic->societe->getNomUrl(1); + else print ' '; + print '</td>'; + print '</tr>'; + + // Visibility + print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; + if ($projectstatic->public) print $langs->trans('SharedProject'); + else print $langs->trans('PrivateProject'); + print '</td></tr>'; + + // Statut + print '<tr><td>'.$langs->trans("Status").'</td><td>'.$projectstatic->getLibStatut(4).'</td></tr>'; + + print '</table>'; + + dol_fiche_end(); + + print '<br>'; } $head=task_prepare_head($object); @@ -254,31 +254,36 @@ if ($id > 0 || ! empty($ref)) print '</td><td colspan="3">'; if (! GETPOST('withproject') || empty($projectstatic->id)) { - $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1); - $object->next_prev_filter=" fk_projet in (".$projectsListId.")"; + $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1); + $object->next_prev_filter=" fk_projet in (".$projectsListId.")"; } else $object->next_prev_filter=" fk_projet = ".$projectstatic->id; - print $form->showrefnav($object,'id',$linkback,1,'rowid','ref','',$param); + print $form->showrefnav($object,'id',$linkback,1,'rowid','ref','',$param); print '</td></tr>'; // Label print '<tr><td>'.$langs->trans("Label").'</td><td colspan="3">'.$object->label.'</td></tr>'; // Duration planned - print '<tr><td>'.$langs->trans("Duration").'</td><td colspan="3">'.$object->duration_planned.' '.$langs->trans('Hours').'</td></tr>'; - + if (!empty($object->planned_workload)) { + $planned_workload_hours = intval($object->planned_workload / 3600); + }else { + $planned_workload_hours = 0; + } + print '<tr><td>'.$langs->trans("PlannedWorkload").'</td><td colspan="3">'.$planned_workload_hours.' '.$langs->trans('Hours').'</td></tr>'; + // Project if (empty($withproject)) { - print '<tr><td>'.$langs->trans("Project").'</td><td>'; - print $projectstatic->getNomUrl(1); - print '</td></tr>'; - - // Third party - print '<td>'.$langs->trans("Company").'</td><td>'; - if ($projectstatic->societe->id) print $projectstatic->societe->getNomUrl(1); - else print ' '; - print '</td></tr>'; + print '<tr><td>'.$langs->trans("Project").'</td><td>'; + print $projectstatic->getNomUrl(1); + print '</td></tr>'; + + // Third party + print '<td>'.$langs->trans("Company").'</td><td>'; + if ($projectstatic->societe->id) print $projectstatic->societe->getNomUrl(1); + else print ' '; + print '</td></tr>'; } print '</table>'; @@ -288,7 +293,7 @@ if ($id > 0 || ! empty($ref)) /* * Add time spent - */ + */ if ($user->rights->projet->creer) { print '<br>'; @@ -345,7 +350,7 @@ if ($id > 0 || ! empty($ref)) /* * List of time spent - */ + */ $sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user, t.note"; $sql.= ", u.lastname, u.firstname"; $sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t"; @@ -392,21 +397,21 @@ if ($id > 0 || ! empty($ref)) foreach ($tasks as $task_time) { $var=!$var; - print "<tr ".$bc[$var].">"; - - // Date - print '<td>'; - if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid) - { - print $form->select_date($db->jdate($task_time->task_date),'timeline','','','',"timespent_date"); - } - else - { - print dol_print_date($db->jdate($task_time->task_date),'day'); - } - print '</td>'; - - // User + print "<tr ".$bc[$var].">"; + + // Date + print '<td>'; + if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid) + { + print $form->select_date($db->jdate($task_time->task_date),'timeline','','','',"timespent_date"); + } + else + { + print dol_print_date($db->jdate($task_time->task_date),'day'); + } + print '</td>'; + + // User print '<td>'; if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid) { @@ -419,43 +424,43 @@ if ($id > 0 || ! empty($ref)) $userstatic->firstname = $task_time->firstname; print $userstatic->getNomUrl(1); } - print '</td>'; - - // Note - print '<td align="left">'; - if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid) - { - print '<textarea name="timespent_note_line" cols="80" rows="'.ROWS_3.'">'.$task_time->note.'</textarea>'; - } - else - { - print dol_nl2br($task_time->note); - } - print '</td>'; - - // Time spent - print '<td align="right">'; - if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid) - { - print '<input type="hidden" name="old_duration" value="'.$task_time->task_duration.'">'; - print $form->select_duration('new_duration',$task_time->task_duration); - } - else - { + print '</td>'; + + // Note + print '<td align="left">'; + if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid) + { + print '<textarea name="timespent_note_line" cols="80" rows="'.ROWS_3.'">'.$task_time->note.'</textarea>'; + } + else + { + print dol_nl2br($task_time->note); + } + print '</td>'; + + // Time spent + print '<td align="right">'; + if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid) + { + print '<input type="hidden" name="old_duration" value="'.$task_time->task_duration.'">'; + print $form->select_duration('new_duration',$task_time->task_duration); + } + else + { print convertSecondToTime($task_time->task_duration,'all'); - } - print '</td>'; + } + print '</td>'; // Edit and delete icon print '<td align="center" valign="middle" width="80">'; if ($action == 'editline' && $_GET['lineid'] == $task_time->rowid) - { - print '<input type="hidden" name="lineid" value="'.$_GET['lineid'].'">'; - print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">'; - print '<br>'; - print '<input type="submit" class="button" name="cancel" value="'.$langs->trans('Cancel').'">'; - } - else if ($user->rights->projet->creer) + { + print '<input type="hidden" name="lineid" value="'.$_GET['lineid'].'">'; + print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">'; + print '<br>'; + print '<input type="submit" class="button" name="cancel" value="'.$langs->trans('Cancel').'">'; + } + else if ($user->rights->projet->creer) { print ' '; print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=editline&lineid='.$task_time->rowid.($withproject?'&withproject=1':'').'">';