Works on enhancement of project tasks

This commit is contained in:
Regis Houssin 2010-01-28 11:08:11 +00:00
parent 354fa8a605
commit a71e75c7c7
8 changed files with 289 additions and 228 deletions

View File

@ -117,7 +117,8 @@ ALTER TABLE llx_projet_task ADD COLUMN dateo datetime AFTER tms;
ALTER TABLE llx_projet_task ADD COLUMN datee datetime AFTER dateo;
ALTER TABLE llx_projet_task ADD COLUMN datev datetime AFTER datee;
ALTER TABLE llx_projet_task CHANGE title label varchar(255) NOT NULL;
ALTER TABLE llx_projet_task ADD COLUMN description varchar(255) AFTER label;
ALTER TABLE llx_projet_task ADD COLUMN description text AFTER label;
ALTER TABLE llx_projet_task MODIFY description text;
ALTER TABLE llx_projet_task ADD COLUMN progress integer DEFAULT 0 AFTER duration_effective;
ALTER TABLE llx_projet_task ADD COLUMN priority integer DEFAULT 0 AFTER progress;
ALTER TABLE llx_projet_task ADD COLUMN fk_user_modif integer AFTER fk_user_creat;
@ -143,4 +144,7 @@ insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) v
insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (190, 'project_task', 'external', 'TASKEXECUTIVE', 'Responsable', 1);
insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (191, 'project_task', 'external', 'CONTRIBUTOR', 'Intervenant', 1);
ALTER TABLE llx_projet ADD COLUMN description text AFTER title;
ALTER TABLE llx_projet CHANGE note note_private text;
ALTER TABLE llx_projet ADD COLUMN note_public text AFTER note_private;
ALTER TABLE llx_projet CHANGE fk_statut smallint DEFAULT 0 NOT NULL;

View File

@ -24,26 +24,26 @@ create table llx_facturedet
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
fk_facture integer NOT NULL,
fk_product integer NULL, -- Doit pouvoir etre nul pour ligne detail sans produits
fk_product integer NULL, -- Doit pouvoir etre nul pour ligne detail sans produits
description text,
tva_taux real, -- Taux tva produit/service (exemple 19.6)
qty real, -- Quantity (exemple 2)
remise_percent real DEFAULT 0, -- % de la remise ligne (exemple 20%)
remise real DEFAULT 0, -- Montant calcul<75> de la remise % sur PU HT (exemple 20)
fk_remise_except integer NULL, -- Lien vers table des remises fixes
subprice real, -- P.U. HT (exemple 100)
price real, -- P.U. HT apres remise % de ligne
total_ht real, -- Total HT de la ligne toute quantit<69> et incluant remise ligne et globale
total_tva real, -- Total TVA de la ligne toute quantit<69> et incluant remise ligne et globale
total_ttc real, -- Total TTC de la ligne toute quantit<69> et incluant remise ligne et globale
tva_taux real, -- Taux tva produit/service (exemple 19.6)
qty real, -- Quantity (exemple 2)
remise_percent real DEFAULT 0, -- % de la remise ligne (exemple 20%)
remise real DEFAULT 0, -- Montant calcule de la remise % sur PU HT (exemple 20)
fk_remise_except integer NULL, -- Lien vers table des remises fixes
subprice real, -- P.U. HT (exemple 100)
price real, -- P.U. HT apres remise % de ligne
total_ht real, -- Total HT de la ligne toute quantite et incluant remise ligne et globale
total_tva real, -- Total TVA de la ligne toute quantite et incluant remise ligne et globale
total_ttc real, -- Total TTC de la ligne toute quantite et incluant remise ligne et globale
product_type integer DEFAULT 0,
date_start datetime DEFAULT NULL, -- date debut si service
date_end datetime DEFAULT NULL, -- date fin si service
info_bits integer DEFAULT 0, -- TVA NPR ou non
date_start datetime DEFAULT NULL, -- date debut si service
date_end datetime DEFAULT NULL, -- date fin si service
info_bits integer DEFAULT 0, -- TVA NPR ou non
fk_code_ventilation integer DEFAULT 0 NOT NULL,
fk_export_compta integer DEFAULT 0 NOT NULL,
special_code integer UNSIGNED DEFAULT 0, -- code pour les lignes speciales
rang integer DEFAULT 0, -- ordre d'affichage
special_code integer UNSIGNED DEFAULT 0, -- code pour les lignes speciales
rang integer DEFAULT 0, -- ordre d'affichage
import_key varchar(14)
)type=innodb;

View File

@ -1,5 +1,6 @@
-- ===========================================================================
-- Copyright (C) 2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
-- Copyright (C) 2010 Regis Houssin <regis@dolibarr.fr>
--
-- 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
@ -22,15 +23,17 @@ create table llx_projet
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
fk_soc integer,
fk_statut smallint NOT NULL,
datec date, -- date creation project
datec date, -- date creation project
tms timestamp,
dateo date, -- date start project
datee date, -- date end project
dateo date, -- date start project
datee date, -- date end project
ref varchar(50),
entity integer DEFAULT 1 NOT NULL, -- multi company id
title varchar(255),
fk_user_creat integer, -- createur du projet
note text,
entity integer DEFAULT 1 NOT NULL, -- multi company id
title varchar(255) NOT NULL,
description text,
fk_user_creat integer, -- createur du projet
fk_statut smallint DEFAULT 0 NOT NULL,
note_private text,
note_public text,
model_pdf varchar(50)
)type=innodb;

View File

@ -30,7 +30,7 @@ create table llx_projet_task
datee datetime, -- date end task
datev datetime, -- date validation
label varchar(255) NOT NULL,
description varchar(255),
description text,
duration_effective real NOT NULL,
progress integer DEFAULT 0, -- percentage increase
priority integer DEFAULT 0, -- priority

View File

@ -77,6 +77,7 @@ if ($_POST["action"] == 'add' && $user->rights->projet->creer)
$project->ref = $_POST["ref"];
$project->title = $_POST["title"];
$project->socid = $_POST["socid"];
$project->description = $_POST["description"];
$project->user_resp_id = $_POST["officer_project"];
$project->datec=dol_now('tzserver');
$project->dateo=dol_mktime(12,0,0,$_POST['projectmonth'],$_POST['projectday'],$_POST['projectyear']);
@ -125,7 +126,7 @@ if ($_POST["action"] == 'update' && ! $_POST["cancel"] && $user->rights->projet-
$project->ref = $_POST["ref"];
$project->title = $_POST["title"];
$project->socid = $_POST["socid"];
$project->user_resp_id = $_POST["officer_project"];
$project->description = $_POST["description"];
$project->date_start = dol_mktime(12,0,0,$_POST['projectmonth'],$_POST['projectday'],$_POST['projectyear']);
$project->date_end = dol_mktime(12,0,0,$_POST['projectendmonth'],$_POST['projectendday'],$_POST['projectendyear']);
@ -230,6 +231,8 @@ llxHeader("",$langs->trans("Projects"),$help_url);
$html = new Form($db);
$formfile = new FormFile($db);
$userstatic=new User($db);
if ($_GET["action"] == 'create' && $user->rights->projet->creer)
{
/*
@ -259,7 +262,7 @@ if ($_GET["action"] == 'create' && $user->rights->projet->creer)
}
// Ref
print '<tr><td>'.$langs->trans("Ref").'*</td><td><input size="8" type="text" name="ref" value="'.($_POST["ref"]?$_POST["ref"]:$defaultref).'"></td></tr>';
print '<tr><td>'.$langs->trans("Ref").'*</td><td><input size="12" type="text" name="ref" value="'.($_POST["ref"]?$_POST["ref"]:$defaultref).'"></td></tr>';
// Label
print '<tr><td>'.$langs->trans("Label").'*</td><td><input size="30" type="text" name="title" value="'.$_POST["title"].'"></td></tr>';
@ -291,6 +294,12 @@ if ($_GET["action"] == 'create' && $user->rights->projet->creer)
print '<tr><td>'.$langs->trans("DateEnd").'</td><td>';
print $html->select_date(-1,'projectend');
print '</td></tr>';
// Description
print '<tr><td valign="top">'.$langs->trans("Description").'</td>';
print '<td>';
print '<textarea name="description" wrap="soft" cols="80" rows="'.ROWS_3.'">'.$_POST["description"].'</textarea>';
print '</td></tr>';
print '<tr><td colspan="2" align="center"><input type="submit" class="button" value="'.$langs->trans("Create").'"></td></tr>';
print '</table>';
@ -349,19 +358,41 @@ else
print '<table class="border" width="100%">';
// Ref
print '<tr><td width="30%">'.$langs->trans("Ref").'</td><td><input size="8" name="ref" value="'.$project->ref.'"></td></tr>';
print '<tr><td width="30%">'.$langs->trans("Ref").'</td>';
print '<td><input size="12" name="ref" value="'.$project->ref.'"></td></tr>';
// Label
print '<tr><td>'.$langs->trans("Label").'</td><td><input size="30" name="title" value="'.$project->title.'"></td></tr>';
print '<tr><td>'.$langs->trans("Label").'</td>';
print '<td><input size="30" name="title" value="'.$project->title.'"></td></tr>';
// Customer
print '<tr><td>'.$langs->trans("Company").'</td><td>';
print $html->select_societes($project->societe->id,'socid','',1,1);
print '</td></tr>';
// Responsable du projet
// Project leader
print '<tr><td>'.$langs->trans("OfficerProject").'</td><td>';
$html->select_users($project->user_resp_id,'officer_project',1);
$contact = $project->liste_contact(4,'internal');
$num=sizeof($contact);
if ($num)
{
$i = 0;
while ($i < $num)
{
if ($contact[$i]['code'] == 'PROJECTLEADER')
{
$userstatic->id = $contact[$i]['id'];
$userstatic->fetch();
print $userstatic->getNomUrl(1);
print '<br>';
}
$i++;
}
}
else
{
print $langs->trans('SharedProject');
}
print '</td></tr>';
// Statut
@ -376,6 +407,12 @@ else
print '<tr><td>'.$langs->trans("DateEnd").'</td><td>';
print $html->select_date($project->date_end?$project->date_end:-1,'projectend');
print '</td></tr>';
// Description
print '<tr><td valign="top">'.$langs->trans("Description").'</td>';
print '<td>';
print '<textarea name="description" wrap="soft" cols="80" rows="'.ROWS_3.'">'.$project->description.'</textarea>';
print '</td></tr>';
print '<tr><td align="center" colspan="2">';
print '<input name="update" class="button" type="submit" value="'.$langs->trans("Modify").'"> &nbsp; ';
@ -385,8 +422,7 @@ else
}
else
{
$userstatic=new User($db);
print '<table class="border" width="100%">';
// Ref
@ -440,6 +476,11 @@ else
print '<tr><td>'.$langs->trans("DateEnd").'</td><td>';
print dol_print_date($project->date_end,'day');
print '</td></tr>';
// Description
print '<td valign="top">'.$langs->trans("Description").'</td><td>';
print nl2br($project->description);
print '</td></tr>';
print '</table>';
}

View File

@ -40,6 +40,7 @@ class Project extends CommonObject
var $id;
var $ref;
var $description;
var $statut;
var $title;
var $date_c;
@ -48,6 +49,8 @@ class Project extends CommonObject
var $date_end;
var $socid;
var $user_resp_id;
var $note_private;
var $note_public;
var $statuts_short;
var $statuts;
@ -80,15 +83,25 @@ class Project extends CommonObject
return -1;
}
$sql = "INSERT INTO ".MAIN_DB_PREFIX."projet (ref, title, fk_soc, fk_user_creat, fk_user_resp, datec, dateo, datee, fk_statut)";
$sql.= " VALUES ('".addslashes($this->ref)."', '".addslashes($this->title)."',";
$sql.= " ".($this->socid > 0?$this->socid:"null").",";
$sql.= " ".$user->id.",";
$sql.= " ".($this->user_resp_id>0?$this->user_resp_id:'null').",";
$sql.= " ".($this->datec!=''?$this->db->idate($this->datec):'null').",";
$sql.= " ".($this->dateo!=''?$this->db->idate($this->dateo):'null').",";
$sql.= " ".($this->datee!=''?$this->db->idate($this->datee):'null').",";
$sql.= " 0)";
$sql = "INSERT INTO ".MAIN_DB_PREFIX."projet (";
$sql.= "ref";
$sql.= ", title";
$sql.= ", description";
$sql.= ", fk_soc";
$sql.= ", fk_user_creat";
$sql.= ", datec";
$sql.= ", dateo";
$sql.= ", datee";
$sql.= ") VALUES (";
$sql.= "'".addslashes($this->ref)."'";
$sql.= ", '".addslashes($this->title)."'";
$sql.= ", '".addslashes($this->description)."'";
$sql.= ", ".($this->socid > 0?$this->socid:"null");
$sql.= ", ".($this->user_resp_id>0?$this->user_resp_id:'null');
$sql.= ", ".($this->datec!=''?$this->db->idate($this->datec):'null');
$sql.= ", ".($this->dateo!=''?$this->db->idate($this->dateo):'null');
$sql.= ", ".($this->datee!=''?$this->db->idate($this->datee):'null');
$sql.= ")";
dol_syslog("Project::create sql=".$sql,LOG_DEBUG);
$resql=$this->db->query($sql);
@ -116,13 +129,17 @@ class Project extends CommonObject
*/
function update($user)
{
// Clean parameters
$this->title = trim($this->title);
$this->description = trim($this->description);
if (strlen(trim($this->ref)) > 0)
{
$sql = "UPDATE ".MAIN_DB_PREFIX."projet";
$sql.= " SET ref='".$this->ref."'";
$sql.= ", title = '".$this->title."'";
$sql = "UPDATE ".MAIN_DB_PREFIX."projet SET";
$sql.= " ref='".$this->ref."'";
$sql.= ", title = '".addslashes($this->title)."'";
$sql.= ", description = '".addslashes($this->description)."'";
$sql.= ", fk_soc = ".($this->socid > 0?$this->socid:"null");
$sql.= ", fk_user_resp = ".$this->user_resp_id;
$sql.= ", fk_statut = ".$this->statut;
$sql.= ", datec=".($this->date_c!=''?$this->db->idate($this->date_c):'null');
$sql.= ", dateo=".($this->date_start!=''?$this->db->idate($this->date_start):'null');
@ -161,7 +178,8 @@ class Project extends CommonObject
{
if (empty($id) && empty($ref)) return -1;
$sql = "SELECT rowid, ref, title, datec, tms, dateo, datee, fk_soc, fk_user_creat, fk_statut, note";
$sql = "SELECT rowid, ref, title, description, datec";
$sql.= ", tms, dateo, datee, fk_soc, fk_user_creat, fk_statut, note_private, note_public";
$sql.= " FROM ".MAIN_DB_PREFIX."projet";
if ($ref) $sql.= " WHERE ref='".$ref."'";
else $sql.= " WHERE rowid=".$id;
@ -178,13 +196,15 @@ class Project extends CommonObject
$this->ref = $obj->ref;
$this->title = $obj->title;
$this->titre = $obj->title; // TODO deprecated
$this->description = $obj->description;
$this->date_c = $this->db->jdate($obj->datec);
$this->datec = $this->db->jdate($obj->datec); // TODO deprecated
$this->date_m = $this->db->jdate($obj->tms);
$this->datem = $this->db->jdate($obj->tms); // TODO deprecated
$this->date_start = $this->db->jdate($obj->dateo);
$this->date_end = $this->db->jdate($obj->datee);
$this->note = $obj->note;
$this->note_private = $obj->note_private;
$this->note_public = $obj->note_public;
$this->socid = $obj->fk_soc;
$this->societe->id = $obj->fk_soc; // TODO For backward compatibility
$this->user_author_id = $obj->fk_user_creat;
@ -218,7 +238,8 @@ class Project extends CommonObject
$projects = array();
$sql = "SELECT rowid, title FROM ".MAIN_DB_PREFIX."projet";
$sql = "SELECT rowid, title";
$sql.= " FROM ".MAIN_DB_PREFIX."projet";
$sql.= " WHERE entity = ".$conf->entity;
if (! empty($socid)) $sql.= " AND fk_soc = ".$socid;
@ -423,83 +444,6 @@ class Project extends CommonObject
}
}
/**
* \brief Create a task into project
* \param user Id user that create
* \param title Title of task
* \param parent Id task parent
* \param id_resp Id of responsible user
* \return int Task id if succes, <0 if KO
* @obsolete now use task.class.php
*/
function CreateTask($user, $title, $parent=0, $id_resp=0)
{
$result = 0;
$task_id = -1;
if (trim($title))
{
$this->db->begin();
$sql = "INSERT INTO ".MAIN_DB_PREFIX."projet_task (fk_projet, title, fk_user_creat, fk_task_parent, duration_effective)";
$sql.= " VALUES (".$this->id.",'".addslashes($title)."', ".$user->id.",".($parent>0?$parent:'0').", 0)";
dol_syslog("Project::CreateTask sql=".$sql, LOG_DEBUG);
if ($this->db->query($sql))
{
$task_id = $this->db->last_insert_id(MAIN_DB_PREFIX."projet_task");
$result = $task_id;
}
else
{
$this->error=$this->db->lasterror();
dol_syslog("Project::CreateTask error -1 ".$this->error, LOG_ERR);
$result = -1;
}
if ($result >= 0)
{
if ($id_resp > 0)
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."projet_task_actors (fk_projet_task, fk_user)";
$sql.= " VALUES (".$task_id.",".($id_resp>0?$id_resp:'null').")";
dol_syslog("Project::CreateTask sql=".$sql, LOG_DEBUG);
if ($this->db->query($sql) )
{
$this->db->commit();
return $task_id;
}
else
{
$this->error=$this->db->lasterror();
dol_syslog("Project::CreateTask error -3 ".$this->error, LOG_ERR);
$this->db->rollback();
return -3;
}
}
else
{
$this->db->commit();
return $task_id;
}
}
else
{
dol_syslog("Project::CreateTask error -2 ".$this->error,LOG_ERR);
$this->db->rollback();
return -2;
}
}
else
{
dol_syslog("Project::CreateTask error -1 ref null");
$result = -1;
}
return $result;
}
/**
* \brief Return status label of object
* \param mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto

View File

@ -82,8 +82,6 @@ class Task extends CommonObject
// Clean parameters
$this->label = trim($this->label);
$this->description = trim($this->description);
$this->note_private = trim($this->note_private);
$this->note_public = trim($this->note_public);
// Check parameters
// Put here code to add control on parameters values
@ -164,6 +162,8 @@ class Task extends CommonObject
$sql.= " t.fk_user_creat,";
$sql.= " t.fk_user_valid,";
$sql.= " t.fk_statut,";
$sql.= " t.progress,";
$sql.= " t.priority,";
$sql.= " t.note_private,";
$sql.= " t.note_public";
$sql.= " FROM ".MAIN_DB_PREFIX."projet_task as t";
@ -190,6 +190,8 @@ class Task extends CommonObject
$this->fk_user_creat = $obj->fk_user_creat;
$this->fk_user_valid = $obj->fk_user_valid;
$this->fk_statut = $obj->fk_statut;
$this->progress = $obj->progress;
$this->priority = $obj->priority;
$this->note_private = $obj->note_private;
$this->note_public = $obj->note_public;
}

View File

@ -27,6 +27,7 @@
require("./pre.inc.php");
require_once(DOL_DOCUMENT_ROOT."/lib/project.lib.php");
require_once(DOL_DOCUMENT_ROOT."/html.formother.class.php");
if (!$user->rights->projet->lire) accessforbidden();
@ -68,124 +69,190 @@ if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == "yes" && $user-
llxHeader("",$langs->trans("Task"));
$html = new Form($db);
$formother = new FormOther($db);
$projectstatic = new Project($db);
if ($_GET["id"] > 0)
{
/*
* Fiche projet en mode visu
*
*/
$task = new Task($db);
if ($task->fetch($_GET["id"]) >= 0 )
{
$projet = new Project($db);
$result=$projet->fetch($task->fk_project);
if (! empty($projet->socid)) $projet->societe->fetch($projet->socid);
$head=task_prepare_head($task);
dol_fiche_head($head, 'task', $langs->trans("Task"),0,'projecttask');
if ($mesg) print $mesg.'<br>';
if ($_GET["action"] == 'delete')
if ($_GET["action"] == 'edit' && $user->rights->projet->creer)
{
$ret=$html->form_confirm($_SERVER["PHP_SELF"]."?id=".$_GET["id"],$langs->trans("DeleteATask"),$langs->trans("ConfirmDeleteATask"),"confirm_delete");
if ($ret == 'html') print '<br>';
print '<form method="POST" action="fiche.php?id='.$projet->id.'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="createtask">';
print '<table class="border" width="100%">';
if ($mesg) print $mesg.'<br>';
// Ref
print '<tr><td width="30%">';
print $langs->trans("Ref");
print '</td><td colspan="3">';
print $html->showrefnav($task,'id','',1,'rowid','ref','','');
print '</td>';
print '</tr>';
// Label
print '<tr><td>'.$langs->trans("Label").'</td><td colspan="3">'.$task->label.'</td></tr>';
print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">';
print $projet->getNomUrl(1);
print '</td></tr>';
print '<td>'.$langs->trans("Company").'</td><td colspan="3">';
if ($projet->societe->id) print $projet->societe->getNomUrl(1);
else print '&nbsp;';
print '</td></tr>';
// Date start
print '<tr><td>'.$langs->trans("DateStart").'</td><td colspan="3">';
print dol_print_date($task->date_start,'day');
print '</td></tr>';
// Date end
print '<tr><td>'.$langs->trans("DateEnd").'</td><td colspan="3">';
print dol_print_date($task->date_end,'day');
print '</td></tr>';
// Progress
print '<tr><td>'.$langs->trans("Progress").'</td><td colspan="3">';
print $formother->select_percent($task->progress,'progress');
print '</td></tr>';
// Description
print '<td>'.$langs->trans("Description").'</td><td colspan="3">';
print nl2br($task->description);
print '</td></tr>';
print '</table></form>';
print '</div>';
}
print '<form method="POST" action="fiche.php?id='.$projet->id.'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="createtask">';
print '<table class="border" width="100%">';
// Ref
print '<tr><td width="30%">';
print $langs->trans("Ref");
print '</td><td colspan="3">';
print $html->showrefnav($task,'id','',1,'rowid','ref','','');
print '</td>';
print '</tr>';
// Label
print '<tr><td>'.$langs->trans("Label").'</td><td colspan="3">'.$task->label.'</td></tr>';
print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">';
print $projet->getNomUrl(1);
print '</td></tr>';
print '<td>'.$langs->trans("Company").'</td><td colspan="3">';
if ($projet->societe->id) print $projet->societe->getNomUrl(1);
else print '&nbsp;';
print '</td></tr>';
// Date start
print '<tr><td>'.$langs->trans("DateStart").'</td><td colspan="3">';
print dol_print_date($task->date_start,'day');
print '</td></tr>';
// Date end
print '<tr><td>'.$langs->trans("DateEnd").'</td><td colspan="3">';
print dol_print_date($task->date_end,'day');
print '</td></tr>';
// Description
print '<td>'.$langs->trans("Description").'</td><td colspan="3">';
print nl2br($task->description);
print '</td></tr>';
/* List of time spent */
$sql = "SELECT t.task_date, t.task_duration, t.fk_user, u.login, u.rowid";
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
$sql .= " , ".MAIN_DB_PREFIX."user as u";
$sql .= " WHERE t.fk_task =".$task->id;
$sql .= " AND t.fk_user = u.rowid";
$sql .= " ORDER BY t.task_date DESC";
$var=true;
$resql = $db->query($sql);
if ($resql)
else
{
$num = $db->num_rows($resql);
$i = 0;
$tasks = array();
while ($i < $num)
/*
* Fiche tache en mode visu
*/
if ($_GET["action"] == 'delete')
{
$row = $db->fetch_object($resql);
$tasks[$i] = $row;
$i++;
$ret=$html->form_confirm($_SERVER["PHP_SELF"]."?id=".$_GET["id"],$langs->trans("DeleteATask"),$langs->trans("ConfirmDeleteATask"),"confirm_delete");
if ($ret == 'html') print '<br>';
}
$db->free($resql);
print '<table class="border" width="100%">';
// Ref
print '<tr><td width="30%">';
print $langs->trans("Ref");
print '</td><td colspan="3">';
print $html->showrefnav($task,'id','',1,'rowid','ref','','');
print '</td>';
print '</tr>';
// Label
print '<tr><td>'.$langs->trans("Label").'</td><td colspan="3">'.$task->label.'</td></tr>';
print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">';
print $projet->getNomUrl(1);
print '</td></tr>';
print '<td>'.$langs->trans("Company").'</td><td colspan="3">';
if ($projet->societe->id) print $projet->societe->getNomUrl(1);
else print '&nbsp;';
print '</td></tr>';
// Date start
print '<tr><td>'.$langs->trans("DateStart").'</td><td colspan="3">';
print dol_print_date($task->date_start,'day');
print '</td></tr>';
// Date end
print '<tr><td>'.$langs->trans("DateEnd").'</td><td colspan="3">';
print dol_print_date($task->date_end,'day');
print '</td></tr>';
// Progress
print '<tr><td>'.$langs->trans("Progress").'</td><td colspan="3">';
print $task->progress.' %';
print '</td></tr>';
// Description
print '<td>'.$langs->trans("Description").'</td><td colspan="3">';
print nl2br($task->description);
print '</td></tr>';
/* List of time spent */
$sql = "SELECT t.task_date, t.task_duration, t.fk_user, u.login, u.rowid";
$sql.= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
$sql.= ", ".MAIN_DB_PREFIX."user as u";
$sql.= " WHERE t.fk_task =".$task->id;
$sql.= " AND t.fk_user = u.rowid";
$sql.= " ORDER BY t.task_date DESC";
$var=true;
$resql = $db->query($sql);
if ($resql)
{
$num = $db->num_rows($resql);
$i = 0;
$tasks = array();
while ($i < $num)
{
$row = $db->fetch_object($resql);
$tasks[$i] = $row;
$i++;
}
$db->free($resql);
}
else
{
dol_print_error($db);
}
print '</table></form>';
print '</div>';
/*
* Actions
*/
print '<div class="tabsAction">';
// Modify
if ($user->rights->projet->creer)
{
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$task->id.'&amp;action=edit">'.$langs->trans('Modify').'</a>';
}
else
{
print '<a class="butActionRefused" href="#" title="'.$langs->trans("NotAllowed").'">'.$langs->trans('Modify').'</a>';
}
// Delete
if ($user->rights->projet->supprimer)
{
print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?id='.$task->id.'&amp;action=delete">'.$langs->trans('Delete').'</a>';
}
else
{
print '<a class="butActionRefused" href="#" title="'.$langs->trans("NotAllowed").'">'.$langs->trans('Delete').'</a>';
}
print '</div>';
}
else
{
dol_print_error($db);
}
print '</table></form>';
print '</div>';
/*
* Actions
*/
print '<div class="tabsAction">';
if ($user->rights->projet->supprimer)
{
print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?id='.$task->id.'&amp;action=delete">'.$langs->trans('Delete').'</a>';
}
else
{
print '<a class="butActionRefused" href="#" title="'.$langs->trans("NotAllowed").'">'.$langs->trans('Delete').'</a>';
}
print '</div>';
}
}