diff --git a/htdocs/html.formother.class.php b/htdocs/html.formother.class.php index f1c032f45fb..23fca351263 100644 --- a/htdocs/html.formother.class.php +++ b/htdocs/html.formother.class.php @@ -213,11 +213,11 @@ class FormOther { global $user, $langs; - require_once(DOL_DOCUMENT_ROOT."/projet/project.class.php"); + require_once(DOL_DOCUMENT_ROOT."/projet/tasks/task.class.php"); //print $modeproject.'-'.$modetask; - $project=new Project($this->db); - $tasksarray=$project->getTasksArray($modetask?$user:0, $modeproject?$user:0, $mode); + $task=new Task($this->db); + $tasksarray=$task->getTasksArray($modetask?$user:0, $modeproject?$user:0, $mode); if ($tasksarray) { print ''; print ''; if ($_GET['id']) print ''; @@ -151,20 +157,36 @@ if ($_GET["action"] == 'create' && $user->rights->projet->creer) print ''; - print ''; print ''; print ''; + + // Date start + print ''; + + // Date end + print ''; + + // Description + print ''; + print ''; + + $tasksarray=$task->getTasksArray(0, $user, 1); - $project=new Project($db); - $tasksarray=$project->getTasksArray(0, $user, 1); print ''; // Label - print ''; + print ''; - print ''; - print ''; + + // Description + print ''; /* List of time spent */ diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index e5d138f818b..e62e824f784 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -81,7 +81,7 @@ if ($_GET["id"] > 0) print ''; // Label - print ''; + print ''; print ''; // Label - print ''; + print ''; print '
'.$langs->trans("NewTask").''; - print ''; + print '
'.$langs->trans("Label").''; + print ''; print '
'.$langs->trans("ChildOfTask").''; - print $htmlother->selectProjectTasks($projet->id, 'task_parent', $user->admin?0:1, 0, 1); + print $htmlother->selectProjectTasks($project->id, 'task_parent', $user->admin?0:1, 0, 1); print '
'.$langs->trans("AffectedTo").''; print $form->select_users($user->id,'userid',1); print '
'.$langs->trans("DateStart").''; + print $form->select_date('','dateo'); + print '
'.$langs->trans("DateEnd").''; + print $form->select_date(-1,'datee'); + print '
'.$langs->trans("Description").''; + print ''; + print '
'; if (sizeof($tasksarray)) { @@ -187,12 +209,12 @@ else $tab='tasks'; if ($_REQUEST["mode"]=='mine') $tab='mytasks'; - $head=project_prepare_head($projet); + $head=project_prepare_head($project); dol_fiche_head($head, $tab, $langs->trans("Project"),0,'project'); $param=($_REQUEST["mode"]=='mine'?'&mode=mine':''); - print '
'; + print ''; print ''; print ''; @@ -201,25 +223,25 @@ else print ''; - print ''; + print ''; print ''; print ''; // Project leader print ''; // Statut - print ''; + print ''; print '
'; print $langs->trans("Ref"); print ''; - print $form->showrefnav($projet,'ref','',1,'ref','ref','',$param); + print $form->showrefnav($project,'ref','',1,'ref','ref','',$param); print '
'.$langs->trans("Label").''.$projet->title.'
'.$langs->trans("Label").''.$project->title.'
'.$langs->trans("Company").''; - if (! empty($projet->societe->id)) print $projet->societe->getNomUrl(1); + if (! empty($project->societe->id)) print $project->societe->getNomUrl(1); else print ' '; print '
'.$langs->trans("OfficerProject").''; - if ($projet->user->id) print $projet->user->getNomUrl(1); + if ($project->user->id) print $project->user->getNomUrl(1); else print $langs->trans('SharedProject'); print '
'.$langs->trans("Status").''.$projet->getLibStatut(4).'
'.$langs->trans("Status").''.$project->getLibStatut(4).'
'; @@ -235,9 +257,9 @@ else if ($user->rights->projet->creer) { - if (empty($projet->user_resp_id) || $projet->user_resp_id == -1 || $projet->user_resp_id == $user->id) + if (empty($project->user_resp_id) || $project->user_resp_id == -1 || $project->user_resp_id == $user->id) { - print ''.$langs->trans('AddTask').''; + print ''.$langs->trans('AddTask').''; } else { @@ -252,9 +274,9 @@ else // Get list of tasks in tasksarray and taskarrayfiltered // We need all tasks (even not limited to a user because a task to user // can have a parent that is not affected to him). - $tasksarray=$projet->getTasksArray(0, 0, 0); + $tasksarray=$task->getTasksArray(0, 0, 0); // We load also tasks limited to a particular user - $tasksrole=($_REQUEST["mode"]=='mine' ? $projet->getTasksRoleForUser($user) : ''); + $tasksrole=($_REQUEST["mode"]=='mine' ? $project->getTasksRoleForUser($user) : ''); print ''; print ''; @@ -263,7 +285,7 @@ else print ''; print ''; print "\n"; - // Show all lines in taskarray (recusrive function to go down on tree) + // Show all lines in taskarray (recursive function to go down on tree) $j=0; $nboftaskshown=PLines($j, 0, $tasksarray, $level, true, 0, $tasksrole); print "
'.$langs->trans("LabelTask").''.$langs->trans("TimeSpent").'
"; diff --git a/htdocs/projet/tasks/task.class.php b/htdocs/projet/tasks/task.class.php index bdee60bbb76..9587fa2cf16 100644 --- a/htdocs/projet/tasks/task.class.php +++ b/htdocs/projet/tasks/task.class.php @@ -90,16 +90,12 @@ class Task extends CommonObject $sql.= "fk_projet"; $sql.= ", fk_task_parent"; $sql.= ", label"; - $sql.= ", duration_effective"; $sql.= ", fk_user_creat"; - $sql.= ", note_private"; $sql.= ") VALUES ("; $sql.= $this->fk_projet; $sql.= ", ".$this->fk_task_parent; $sql.= ", '".addslashes($this->label)."'"; - $sql.= ", ".(! isset($this->duration_effective)?'NULL':"'".$this->duration_effective."'").","; $sql.= ", ".$user->id; - $sql.= ", '".addslashes($this->note_private)."'"; $sql.= ")"; $this->db->begin(); @@ -409,6 +405,98 @@ class Task extends CommonObject $this->statut=''; $this->note=''; } + + /** + * Return list of task for all projects or a particular project + * Sort order is on project, TODO then of position of task, and last on title of first level task + * @param usert Object user to limit task affected to a particular user + * @param userp Object user to limit projects of a particular user + * @param mode 0=Return list of tasks and their projects, 1=Return projects and tasks if exists + * @return array Array of tasks + */ + function getTasksArray($usert=0, $userp=0, $mode=0, $socid=0) + { + global $conf; + + $tasks = array(); + + //print $usert.'-'.$userp.'
'; + + // List of tasks + $sql = "SELECT p.rowid as projectid, p.ref, p.title as plabel,"; + $sql.= " t.rowid, t.label, t.description, t.fk_task_parent, t.duration_effective,"; + $sql.= " up.name, up.firstname"; + if ($mode == 0) + { + $sql.= " FROM (".MAIN_DB_PREFIX."projet as p, ".MAIN_DB_PREFIX."projet_task as t"; + if (is_object($usert)) // Limit to task affected to a user + { + $sql.= ", ".MAIN_DB_PREFIX."projet_task_actors as ta"; + } + $sql.= ")"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on p.fk_soc = s.rowid"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as up on p.fk_user_resp = up.rowid"; + $sql.= " WHERE t.fk_projet = p.rowid"; + $sql.= " AND p.entity = ".$conf->entity; + if ($socid) $sql.= " AND p.fk_soc = ".$socid; + if ($this->id) $sql .= " AND t.fk_projet =".$this->id; + if (is_object($usert)) $sql .= " AND ta.fk_projet_task = t.rowid AND ta.fk_user = ".$usert->id; + if (is_object($userp)) $sql .= " AND (p.fk_user_resp = ".$userp->id." OR p.fk_user_resp IS NULL OR p.fk_user_resp = -1)"; + } + if ($mode == 1) + { + $sql.= " FROM (".MAIN_DB_PREFIX."projet as p"; + if (is_object($usert)) // Limit to task affected to a user + { + $sql.= ", ".MAIN_DB_PREFIX."projet_task as t"; + $sql.= ", ".MAIN_DB_PREFIX."projet_task_actors as ta)"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on p.fk_soc = s.rowid"; + } + else + { + $sql.= ")"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on p.fk_soc = s.rowid"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task as t on t.fk_projet = p.rowid"; + } + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as up on p.fk_user_resp = up.rowid"; + $sql.= " WHERE p.entity = ".$conf->entity; + if ($socid) $sql.= " AND p.fk_soc = ".$socid; + if ($this->id) $sql .= " AND t.fk_projet =".$this->id; + if (is_object($usert)) $sql .= " AND t.fk_projet = p.rowid AND ta.fk_projet_task = t.rowid AND ta.fk_user = ".$usert->id; + if (is_object($userp)) $sql .= " AND (p.fk_user_resp = ".$userp->id." OR p.fk_user_resp IS NULL OR p.fk_user_resp = -1)"; + } + $sql.= " ORDER BY p.ref, t.label"; + + dol_syslog("Project::getTasksArray sql=".$sql, LOG_DEBUG); + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); + $tasks[$i]->id = $obj->rowid; + $tasks[$i]->projectid = $obj->projectid; + $tasks[$i]->projectref = $obj->ref; + $tasks[$i]->projectlabel = $obj->plabel; + $tasks[$i]->label = $obj->label; + $tasks[$i]->description = $obj->description; + $tasks[$i]->fk_parent = $obj->fk_task_parent; + $tasks[$i]->duration = $obj->duration_effective; + $tasks[$i]->name = $obj->name; // Name of project leader + $tasks[$i]->firstname = $obj->firstname; // Firstname of project leader + $i++; + } + $this->db->free(); + } + else + { + dol_print_error($this->db); + } + + return $tasks; + } } ?> \ No newline at end of file diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index dc90ce17f91..bfbccacdd23 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -111,16 +111,21 @@ if ($_GET["id"] > 0) print '
'.$langs->trans("Label").''.$task->title.'
'.$langs->trans("Label").''.$task->label.'
'.$langs->trans("Project").''; + print '
'.$langs->trans("Project").''; print $projet->getNomUrl(1); print '
'.$langs->trans("Company").''; + print ''.$langs->trans("Company").''; if ($projet->societe->id) print $projet->societe->getNomUrl(1); else print ' '; print '
'.$langs->trans("Description").''; + print nl2br($task->description); + print '
'.$langs->trans("Label").''.$task->title.'
'.$langs->trans("Label").''.$task->label.'
'.$langs->trans("Project").''; print $projet->getNomUrl(1); diff --git a/htdocs/projet/tasks/who.php b/htdocs/projet/tasks/who.php index 36d20f02e4b..51489ff55c8 100644 --- a/htdocs/projet/tasks/who.php +++ b/htdocs/projet/tasks/who.php @@ -1,6 +1,7 @@ * Copyright (C) 2006-2009 Laurent Destailleur + * Copyright (C) 2010 Regis Houssin * * 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 @@ -18,9 +19,9 @@ */ /** - * \file htdocs/projet/tasks/task.php - * \ingroup projet - * \brief Fiche t�ches d'un projet + * \file htdocs/projet/tasks/who.php + * \ingroup project + * \brief Fiche taches d'un projet * \version $Id$ */ @@ -79,7 +80,7 @@ if ($_GET["id"] > 0) print '
'.$langs->trans("Label").''.$task->title.'
'.$langs->trans("Label").''.$task->label.'
'.$langs->trans("Project").''; print $projet->getNomUrl(1); @@ -93,13 +94,14 @@ if ($_GET["id"] > 0) /* Liste des affectations */ - $sql = "SELECT t.title, t.duration_effective, t.fk_task_parent, t.statut,"; + $sql = "SELECT t.label, t.duration_effective, t.fk_task_parent, t.fk_statut,"; $sql.= " u.login, u.rowid"; $sql.= " FROM ".MAIN_DB_PREFIX."projet_task as t,"; $sql.= " ".MAIN_DB_PREFIX."projet_task_actors as ta,"; $sql.= " ".MAIN_DB_PREFIX."user as u"; $sql.= " WHERE t.rowid =".$task->id; - $sql.= " AND t.rowid = ta.fk_projet_task AND ta.fk_user = u.rowid"; + $sql.= " AND t.rowid = ta.fk_projet_task"; + $sql.= " AND ta.fk_user = u.rowid"; $lines=array(); $var=true;