diff --git a/ChangeLog b/ChangeLog
index 6a738760f86..66ff1ffd8e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,8 +4,10 @@ English Dolibarr ChangeLog
***** ChangeLog for 3.5 compared to 3.4 *****
For users:
-- New: [ task #877 ] Reorganize some menus.
-- New: [ task #858 ] Holiday module: note on manual holiday assignation.
+- New: [ task #877 ] Reorganize menus
+- New: [ task #858 ] Holiday module: note on manual holiday assignation
+- New: [ task #892 ] Add option in thridparty customer/supplier admin to hide non active in select_company method
+- New: [ task #531 ] Add a workload on tasks
- New: Add graph of bank account input/output into input-output report page.
- New: Add script export-bank-receipts.
- New: Add option "filter=bank" onto script rebuild_merge_pdf.php to merge
@@ -13,7 +15,6 @@ For users:
For developers:
- New: DolGraph can build graph with three lines.
-
***** ChangeLog for 3.4 compared to 3.3.2 *****
For users:
- New: Can use ODS templates as document templates.
@@ -103,32 +104,31 @@ WARNING: If you used external modules, some of them may need to be upgraded due
***** ChangeLog for 3.3.2 compared to 3.3.1 *****
-- Fix: Dutch (nl_NL) translation.
-- Generalize fix: file with a specific mask not found, again.
-- Fix: translations and BILL_SUPPLIER_BUILDDOC trigger.
-- Fix: Can't reset payment due date.
-- Fix: Orderstoinvoice didn't act as expected when no order was checked.
-- Fix: Bad link to all proposals into Third party card if customer is prospect.
-- Fix: Some bugs on withdrawal rejects.
-- Fix: [ bug #774 ] Bug on creating event with box "all day" crossed.
-- Fix: [ bug #787 ] Invoice supplier box incorrect tooltip when delay on payment.
-- Fix: [ bug #789 ] VAT not being calculated in POS.
-- Fix: [ bug #790 ] Spanish localtax RE not being correctly calculated.
-- Fix: [ bug #794 ] Lost filter on zipcode in prospect list.
-- Fix: [ bug #806 ] Margins module with orders2invoice does not respect cost price.
-- Fix: [ bug #810 ] Cannot update ODT template path.
-- Fix: [ bug #816 ] Sales journal does not reflect localtaxes.
-- Fix: [ bug #817 ] Purchases journal does not reflect localtaxes.
-- Fix: [ bug #824 ] MAIN_DB_PREFIX not use into dictionnary.
-- Fix: [ bug #828 ] Error when code_region is not a number in llx_c_regions (with postgres).
-- Fix: [ bug #855 ] Holiday approval email in French.
-- Fix: [ bug #856 ] (Holidays module) Mail error if destination user doesn't have an email.
-- Fix: [ bug #857 ] Invoice created from shipment does not have the order discount.
-- Fix: [ bug #861 ] Impossible to create a new event in agenda.
-- Fix: [ bug #827 ] AJAX search does not respect multiprice level.
-- Fix: [ bug #865 ] Dolibarr navigation array in project/task do not work.
-- Fix: [ bug #866 ] Standing order from an invoice suggests invoice total amount instead of remaining to pay.
-- Fix: [ bug #788 ] Date of linked interventions are not shown.
+- Fix: Dutch (nl_NL) translation
+- Generalize fix: file with a specific mask not found, again
+- Fix: translations and BILL_SUPPLIER_BUILDDOC trigger
+- Fix: Can't reset payment due date
+- Fix: Orderstoinvoice didn't act as expected when no order was checked
+- Fix: Bad link to all proposals into Third party card if customer is prospect
+- Fix: [ bug #774 ] Bug on creating event with box "all day" crossed
+- Fix: [ bug #787 ] Invoice supplier box incorrect tooltip when delay on payment
+- Fix: [ bug #789 ] VAT not being calculated in POS
+- Fix: [ bug #790 ] Spanish localtax RE not being correctly calculated
+- Fix: [ bug #794 ] Lost filter on zipcode in prospect list
+- Fix: [ bug #806 ] Margins module with orders2invoice does not respect cost price
+- Fix: [ bug #810 ] Cannot update ODT template path
+- Fix: [ bug #816 ] Sales journal does not reflect localtaxes
+- Fix: [ bug #817 ] Purchases journal does not reflect localtaxes
+- Fix: [ bug #824 ] MAIN_DB_PREFIX not use into dictionnary
+- Fix: [ bug #828 ] Error when code_region is not a number in llx_c_regions (with postgres)
+- Fix: [ bug #855 ] Holiday approval email in French
+- Fix: [ bug #856 ] (Holidays module) Mail error if destination user doesn't have an email
+- Fix: [ bug #857 ] Invoice created from shipment does not have the order discount
+- Fix: [ bug #861 ] Impossible to create a new event in agenda
+- Fix: [ bug #827 ] AJAX search does not respect multiprice level
+- Fix: [ bug #865 ] Dolibarr navigation array in project/task do not work
+- Fix: [ bug #866 ] Standing order from an invoice suggests invoice total amount instead of remaining to pay
+- Fix: [ bug #788 ] Date of linked interventions are not shown
***** ChangeLog for 3.3.1 compared to 3.3 *****
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index 000f14ee59f..b29e9da546d 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -681,6 +681,7 @@ class Form
if (! empty($user->societe_id)) $sql.= " AND s.rowid = ".$user->societe_id;
if ($filter) $sql.= " AND (".$filter.")";
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
+ if (! empty($conf->global->COMPANY_HIDE_INACTIVE_IN_COMBOBOX)) $sql.= " AND s.status<>0 ";
$sql.= " ORDER BY nom ASC";
dol_syslog(get_class($this)."::select_company sql=".$sql);
@@ -3517,10 +3518,13 @@ class Form
* @param string $prefix prefix
* @param int $iSecond Default preselected duration (number of seconds)
* @param int $disabled Disable the combo box
+ * @param string $typehour if select then hour in select if text input in text
* @return void
*/
- function select_duration($prefix,$iSecond='',$disabled=0)
+ function select_duration($prefix,$iSecond='',$disabled=0,$typehour='select')
{
+ global $langs;
+
if ($iSecond)
{
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
@@ -3528,19 +3532,27 @@ class Form
$hourSelected = convertSecondToTime($iSecond,'hour');
$minSelected = convertSecondToTime($iSecond,'min');
}
-
- print '";
- print "H ";
+ elseif ($typehour=='text')
+ {
+ $fullhours=convertSecondToTime($iSecond,'fullhour');
+ print '';
+ }
+ print $langs->trans('Hours'). " ";
print '';
for ($min = 0; $min <= 55; $min=$min+5)
{
@@ -3549,7 +3561,7 @@ class Form
print '>'.$min.'';
}
print "";
- print "M ";
+ print $langs->trans('Minutes'). " ";
}
diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php
index c7a7e1240dd..29870c1ce95 100644
--- a/htdocs/core/lib/date.lib.php
+++ b/htdocs/core/lib/date.lib.php
@@ -287,6 +287,16 @@ function convertSecondToTime($iSecond,$format='all',$lengthOfDay=86400,$lengthOf
{
$sTime=dol_print_date($iSecond,'%H',true);
}
+ else if ($format == 'fullhour')
+ {
+ if (!empty($iSecond)) {
+ $iSecond=$iSecond/3600;
+ }
+ else {
+ $iSecond=0;
+ }
+ $sTime=$iSecond;
+ }
else if ($format == 'min')
{
$sTime=dol_print_date($iSecond,'%M',true);
diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php
index 3a8bd016e21..5dfd111e288 100644
--- a/htdocs/core/lib/project.lib.php
+++ b/htdocs/core/lib/project.lib.php
@@ -49,8 +49,8 @@ function project_prepare_head($object)
$h++;
if (! empty($conf->fournisseur->enabled) || ! empty($conf->propal->enabled) || ! empty($conf->commande->enabled)
- || ! empty($conf->facture->enabled) || ! empty($conf->contrat->enabled)
- || ! empty($conf->ficheinter->enabled) || ! empty($conf->agenda->enabled) || ! empty($conf->deplacement->enabled))
+ || ! empty($conf->facture->enabled) || ! empty($conf->contrat->enabled)
+ || ! empty($conf->ficheinter->enabled) || ! empty($conf->agenda->enabled) || ! empty($conf->deplacement->enabled))
{
$head[$h][0] = DOL_URL_ROOT.'/projet/element.php?id='.$object->id;
$head[$h][1] = $langs->trans("Referers");
@@ -420,6 +420,12 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t
print dol_print_date($lines[$i]->date_end,'day');
print '';
+ // Planned Workload
+ print '
';
print $lines[$i]->progress.' %';
diff --git a/htdocs/core/modules/modProjet.class.php b/htdocs/core/modules/modProjet.class.php
index 9d75ffa6243..e5f956b0946 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/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php
index 6bb15f60a38..83e78cd0479 100644
--- a/htdocs/core/modules/modSociete.class.php
+++ b/htdocs/core/modules/modSociete.class.php
@@ -116,6 +116,15 @@ class modSociete extends DolibarrModules
$this->const[$r][4] = 0;
$r++;
+ /*
+ $this->const[$r][0] = "COMPANY_HIDE_INACTIVE_IN_COMBOBOX";
+ $this->const[$r][1] = "chaine";
+ $this->const[$r][2] = "0";
+ $this->const[$r][3] = "hide thirdparty customer inative in combobox";
+ $this->const[$r][4] = 1;
+ $r++;
+ */
+
// Boxes
$this->boxes = array();
$r=0;
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 5dd2ae69142..03babcae351 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
@@ -18,4 +18,8 @@
-- -- VMYSQL4.1 DELETE FROM llx_usergroup_user WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup);
-DELETE FROM llx_menu where module='holiday';
\ No newline at end of file
+DELETE FROM llx_menu where module='holiday';
+
+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 ff54d3cec21..1fc7325bea0 100644
--- a/htdocs/install/mysql/tables/llx_projet_task.sql
+++ b/htdocs/install/mysql/tables/llx_projet_task.sql
@@ -29,7 +29,8 @@ create table llx_projet_task
datev datetime, -- date validation
label varchar(255) NOT NULL,
description text,
- duration_effective real DEFAULT 0 NOT NULL,
+ duration_effective 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/admin.lang b/htdocs/langs/en_US/admin.lang
index 71dfebd5af5..2dca3cd266f 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -53,6 +53,7 @@ ConfirmAjax=Use Ajax confirmation popups
UseSearchToSelectCompany=Use autocompletion fields to choose third parties (instead of using a list box).
Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant SOCIETE_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
ActivityStateToSelectCompany= Add a filter option to show/hide thirdparties which are currently in activity or has ceased it
UseSearchToSelectContact=Use autocompletion fields to choose contact (instead of using a list box).
Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
+HideClosedThirdpartyComboBox=Hide Third party with Status to Closed into customer select list (or combobox)
SearchFilter=Search filters options
NumberOfKeyToSearch=Nbr of characters to trigger search: %s
ViewFullDateActions=Show full dates events in the third sheet
diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang
index 3851d6b9967..f98b2d303f8 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/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 4bb7b833596..29333762881 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -52,6 +52,7 @@ ConfirmAjax= Utiliser les popups de confirmation Ajax
UseSearchToSelectCompany= Utiliser un champ avec autocomplétion pour choisir un tiers (plutôt qu'une liste déroulante).
Notez que si vous avez un nombre important de tiers (> 100 000), vous pouvez améliorer les performances en définissant la constante SOCIETE_DONOTSEARCH_ANYWHERE à 1 dans Configuration->Divers. La recherche sera alors limitée au début de la chaine.
ActivityStateToSelectCompany= Ajouter une option de filtrage lors des recherches pour afficher/masquer les tiers en exercice ou ayant cessés d'exercer
UseSearchToSelectContact= Utiliser un champ avec autocomplétion pour choisir un contact (plutôt qu'une liste déroulante).
Notez que si vous avez un nombre important de contacts (> 100 000), vous pouvez améliorer les performances en définissant la constante CONTACT_DONOTSEARCH_ANYWHERE à 1 dans Configuration->Divers. La recherche sera alors limitée au début de la chaine.
+HideClosedThirdpartyComboBox=Ne pas afficher les clients à l'état "Clos" dans les listes déroulantes (ou champ avec autocomplétion)
SearchFilter=Options des filtres de recherche
NumberOfKeyToSearch=Nb carac. déclenchant recherche: %s
ViewFullDateActions= Visualiser les dates des actions en entier dans la fiche tiers
diff --git a/htdocs/langs/fr_FR/projects.lang b/htdocs/langs/fr_FR/projects.lang
index 78661416180..1dd45218fc7 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 a177ddf838b..57513250f0b 100644
--- a/htdocs/projet/class/task.class.php
+++ b/htdocs/projet/class/task.class.php
@@ -41,6 +41,7 @@ class Task extends CommonObject
var $label;
var $description;
var $duration_effective;
+ var $planned_workload;
var $date_c;
var $date_start;
var $date_end;
@@ -101,6 +102,7 @@ class Task extends CommonObject
$sql.= ", fk_user_creat";
$sql.= ", dateo";
$sql.= ", datee";
+ $sql.= ", planned_workload";
$sql.= ", progress";
$sql.= ") VALUES (";
$sql.= $this->fk_project;
@@ -111,6 +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->planned_workload!=''?$this->planned_workload:0);
$sql.= ", ".($this->progress!=''?$this->progress:0);
$sql.= ")";
@@ -183,6 +186,7 @@ class Task extends CommonObject
$sql.= " t.label,";
$sql.= " t.description,";
$sql.= " t.duration_effective,";
+ $sql.= " t.planned_workload,";
$sql.= " t.datec,";
$sql.= " t.dateo,";
$sql.= " t.datee,";
@@ -211,6 +215,7 @@ class Task extends CommonObject
$this->label = $obj->label;
$this->description = $obj->description;
$this->duration_effective = $obj->duration_effective;
+ $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);
@@ -254,6 +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->planned_workload)) $this->planned_workload=trim($this->planned_workload);
// Check parameters
// Put here code to add control on parameters values
@@ -265,6 +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.= " 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;
@@ -524,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";
+ $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";
@@ -586,6 +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]->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);
@@ -997,6 +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->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 0cd8fd9ca64..112816c9204 100644
--- a/htdocs/projet/index.php
+++ b/htdocs/projet/index.php
@@ -1,21 +1,21 @@
* Copyright (C) 2004-2010 Laurent Destailleur
- * Copyright (C) 2005-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
- * 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 .
- */
+* Copyright (C) 2005-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
+* 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 .
+*/
/**
* \file htdocs/projet/index.php
@@ -44,7 +44,7 @@ $sortorder = GETPOST("sortorder",'alpha');
/*
* View
- */
+*/
$socstatic=new Societe($db);
$projectstatic=new Project($db);
@@ -132,10 +132,84 @@ else
}
print "";
+print '
';
print '';
+print '
';
+print ' ';
+print '
';
+print '
';
+print '
'.$langs->trans('TaskRessourceLinks').'
';
+print '
'.$langs->trans('Projects').'
';
+print '
'.$langs->trans('Task').'
';
+print '
'.$langs->trans('DateStart').'
';
+print '
'.$langs->trans('DateEnd').'
';
+print '
'.$langs->trans('WorkloadOccupation').'
';
+print '
';
+
+
+$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";
+$sql.= " INNER JOIN ".MAIN_DB_PREFIX."projet_task_time as tasktime on tasktime.fk_task = t.rowid";
+$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);
+
+dol_syslog('projet:index.php: affectationpercent sql='.$sql,LOG_DEBUG);
+$resql = $db->query($sql);
+if ( $resql )
+{
+ $num = $db->num_rows($resql);
+ $i = 0;
+
+ while ($i < $num)
+ {
+ $obj = $db->fetch_object($resql);
+ $var=!$var;
+
+ $username='';
+ $userstatic->fetch($obj->userid);
+ if (!empty($userstatic->id)) {
+ $username = $userstatic->getNomUrl(0,0);
+ }
+
+ print "
';
print $object->progress.' %';
diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php
index 7f32feadccb..2b6306b5afd 100644
--- a/htdocs/projet/tasks/time.php
+++ b/htdocs/projet/tasks/time.php
@@ -1,28 +1,28 @@
* Copyright (C) 2006-2012 Laurent Destailleur
- * Copyright (C) 2010-2012 Regis Houssin
- * Copyright (C) 2011 Juanjo Menent
- *
- * 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 .
- */
+* Copyright (C) 2010-2012 Regis Houssin
+* Copyright (C) 2011 Juanjo Menent
+*
+* 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 .
+*/
/**
* \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,13 +50,15 @@ $projectstatic = new Project($db);
/*
* Actions
- */
+*/
if ($action == 'addtimespent' && $user->rights->projet->creer)
{
$error=0;
- if (empty($_POST["timespent_durationhour"]) && empty($_POST["timespent_durationmin"]))
+ $timespent_durationhour = GETPOST('timespent_durationhour','int');
+ $timespent_durationmin = GETPOST('timespent_durationmin','int');
+ if (empty($timespent_durationhour) && empty($timespent_durationmin))
{
$mesg='