From ad8ab9c7fd0665c75c3a4e03204c5c2ff174f51b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 23 May 2010 10:20:35 +0000 Subject: [PATCH] New: Add gantt diagramm om project module --- ChangeLog | 1 + htdocs/admin/syslog.php | 8 +- htdocs/comm/fiche.php | 63 ------------ htdocs/compta/fiche.php | 63 ------------ htdocs/includes/jsgantt/jsgantt.js | 55 ++++++----- htdocs/includes/menus/barre_left/eldy.lib.php | 16 +-- htdocs/langs/en_US/projects.lang | 1 + htdocs/langs/fr_FR/projects.lang | 1 + htdocs/lib/company.lib.php | 99 ++++++++++++++++++- htdocs/lib/project.lib.php | 11 +-- htdocs/projet/ganttchart.php | 21 ++-- htdocs/projet/ganttview.php | 9 +- htdocs/projet/jsgantt_language.js.php | 75 ++++++++++++++ htdocs/projet/tasks/fiche.php | 17 +++- htdocs/soc.php | 9 +- 15 files changed, 257 insertions(+), 192 deletions(-) create mode 100644 htdocs/projet/jsgantt_language.js.php diff --git a/ChangeLog b/ChangeLog index 518acca1be4..9a5b69d433f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ English Dolibarr ChangeLog ***** ChangeLog for 2.9 compared to 2.8 ***** For users: +- New: Add Gant diagramm on project module. - New: Can set a past delay to limit calendar export. - New: Can join files on emailing campaigns. - New: Add statistics on trips and expenses module. diff --git a/htdocs/admin/syslog.php b/htdocs/admin/syslog.php index e8a17e06b96..52c10117b4d 100644 --- a/htdocs/admin/syslog.php +++ b/htdocs/admin/syslog.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2005-2010 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin * Copyright (C) 2007 Rodolphe Quiedeville * @@ -63,7 +63,7 @@ if (! empty($_POST["action"]) && $_POST["action"] == 'set') print '
'.$langs->trans("ErrorUnknownSyslogConstant",$_POST["facility"]).'
'; } } - + if ($optionlogoutput == "file") { $filelog=$_POST["filename"]; @@ -119,7 +119,7 @@ print ''; print ''; print ''; print ''; -print ''; +print ''; print ''; print "\n"; $var=true; @@ -145,7 +145,7 @@ print ''; print ''; print '
'.$langs->trans("Type").''.$langs->trans("Parameter").''.$langs->trans("Type").''.$langs->trans("Value").'
'; print ''; -print ''; +print ''; print ''; print "\n"; $var=true; diff --git a/htdocs/comm/fiche.php b/htdocs/comm/fiche.php index 61efdf5a973..4b3818b5542 100644 --- a/htdocs/comm/fiche.php +++ b/htdocs/comm/fiche.php @@ -587,69 +587,6 @@ if ($socid > 0) print "
'.$langs->trans("Type").''.$langs->trans("Parameter").''.$langs->trans("Parameter").''.$langs->trans("Value").'
"; } - /* - * Last linked projects - */ - // TODO remplacer par une fonction - if ($conf->projet->enabled && $user->rights->projet->lire) - { - print ''; - - $sql = "SELECT p.rowid,p.title,p.ref,p.public, p.dateo as do"; - $sql .= " FROM ".MAIN_DB_PREFIX."projet as p"; - $sql .= " WHERE p.fk_soc = $objsoc->id"; - $sql .= " ORDER BY p.dateo DESC"; - - $result=$db->query($sql); - if ($result) - { - $num = $db->num_rows($result); - if ($num > 0) - { - require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php"); - - $projectstatic = new Project($db); - - print ''; - print ''; - print ''; - - $var=true; - $i = 0 ; - while ($i < $num && $i < $MAXLIST) - { - $obj = $db->fetch_object($result); - $projectstatic->fetch($obj->rowid); - - // To verify role of users - $userAccess = $projectstatic->restrictedProjectArea($user,1); - - if ($user->rights->projet->lire && $userAccess > 0) - { - $var = !$var; - print ""; - - // Ref - print ''; - // Label - print ''; - // Date - print ''; - - print ''; - } - $i++; - } - } - $db->free($result); - } - else - { - dol_print_error($db); - } - print "
'.$langs->trans("LastProjects",($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllProjects").' ('.$num.')
'.img_object($langs->trans("ShowProject"),($obj->public?'projectpub':'project'))." ".$obj->ref.''.$obj->title.''.dol_print_date($db->jdate($obj->do),"day").'
"; - } - /* * Last linked chronodocs */ diff --git a/htdocs/compta/fiche.php b/htdocs/compta/fiche.php index 2cd5387ae21..4925327e436 100644 --- a/htdocs/compta/fiche.php +++ b/htdocs/compta/fiche.php @@ -363,69 +363,6 @@ if ($socid > 0) print ""; } - /* - * Last linked projects - */ - // TODO remplacer par une fonction - if ($conf->projet->enabled && $user->rights->projet->lire) - { - print ''; - - $sql = "SELECT p.rowid,p.title,p.ref,p.public, p.dateo as do"; - $sql .= " FROM ".MAIN_DB_PREFIX."projet as p"; - $sql .= " WHERE p.fk_soc = $societe->id"; - $sql .= " ORDER BY p.dateo DESC"; - - $result=$db->query($sql); - if ($result) - { - $num = $db->num_rows($result); - if ($num > 0) - { - require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php"); - - $projectstatic = new Project($db); - - print ''; - print ''; - print ''; - - $var=true; - $i = 0 ; - while ($i < $num && $i < $MAXLIST) - { - $obj = $db->fetch_object($result); - $projectstatic->fetch($obj->rowid); - - // To verify role of users - $userAccess = $projectstatic->restrictedProjectArea($user,1); - - if ($user->rights->projet->lire && $userAccess > 0) - { - $var = !$var; - print ""; - - // Ref - print ''; - // Label - print ''; - // Date - print ''; - - print ''; - } - $i++; - } - } - $db->free($result); - } - else - { - dol_print_error($db); - } - print "
'.$langs->trans("LastProjects",($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllProjects").' ('.$num.')
'.img_object($langs->trans("ShowProject"),($obj->public?'projectpub':'project'))." ".$obj->ref.''.$obj->title.''.dol_print_date($db->jdate($obj->do),"day").'
"; - } - print ""; print ""; diff --git a/htdocs/includes/jsgantt/jsgantt.js b/htdocs/includes/jsgantt/jsgantt.js index ec6940fd844..7e675cebd3b 100644 --- a/htdocs/includes/jsgantt/jsgantt.js +++ b/htdocs/includes/jsgantt/jsgantt.js @@ -22,6 +22,9 @@ Copyright (c) 2009, Shlomy Gantz BlueBrick Inc. All rights reserved. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* +* LDR Modified to replace hard coded values by i18[key] */ /** @@ -298,24 +301,24 @@ var vVisible = 1; { tmpPer = Math.ceil((this.getEnd() - this.getStart()) / ( 60 * 60 * 1000) ); if(tmpPer == 1) - vDuration = '1 Hour'; + vDuration = '1 '+i18n["sHour"]; else - vDuration = tmpPer + ' Hours'; + vDuration = tmpPer + ' '+i18n["sHours"]; } else if (vFormat=='minute') { tmpPer = Math.ceil((this.getEnd() - this.getStart()) / ( 60 * 1000) ); if(tmpPer == 1) - vDuration = '1 Minute'; + vDuration = '1 '+i18n["sMinute"]; else - vDuration = tmpPer + ' Minutes'; + vDuration = tmpPer + ' '+i18n["sMinutes"]; } else { //if(vFormat == 'day') { tmpPer = Math.ceil((this.getEnd() - this.getStart()) / (24 * 60 * 60 * 1000) + 1); - if(tmpPer == 1) vDuration = '1 Day'; - else vDuration = tmpPer + ' Days'; + if(tmpPer == 1) vDuration = '1 '+i18n["sDay"]; + else vDuration = tmpPer + ' '+i18n["sDays"]; } //else if(vFormat == 'week') { @@ -481,7 +484,7 @@ var vVisible = 1; * @return {void} */ this.setVisible = function(pVisible) {vVisible = pVisible; }; - }; +}; /** @@ -582,7 +585,9 @@ JSGantt.GanttChart = function(pGanttVar, pDiv, pFormat) var vFormatArr = new Array("day","week","month","quarter"); var vQuarterArr = new Array(1,1,1,2,2,2,3,3,3,4,4,4); var vMonthDaysArr = new Array(31,28,31,30,31,30,31,31,30,31,30,31); - var vMonthArr = new Array("January","February","March","April","May","June","July","August","September","October","November","December"); + var vMonthArr = new Array(i18n["January"],i18n["February"],i18n["March"],i18n["April"],i18n["May"],i18n["June"],i18n["July"],i18n["August"],i18n["September"],i18n["October"],i18n["November"],i18n["December"]); + + /** * Set current display format (minute/hour/day/week/month/quarter) * Only the first 4 arguments are used, for example: @@ -999,11 +1004,11 @@ Complete-Displays task percent complete

' ' + ' ' ; - if(vShowRes ==1) vLeftTable += ' Resource' ; - if(vShowDur ==1) vLeftTable += ' Duration' ; - if(vShowComp==1) vLeftTable += ' % Comp.' ; - if(vShowStartDate==1) vLeftTable += ' Start Date' ; - if(vShowEndDate==1) vLeftTable += ' End Date' ; + if(vShowRes ==1) vLeftTable += ' '+i18n["Resource"]+'' ; + if(vShowDur ==1) vLeftTable += ' '+i18n["Duration"]+'' ; + if(vShowComp==1) vLeftTable += ' %' ; + if(vShowStartDate==1) vLeftTable += ' '+i18n["Start_Date"]+'' ; + if(vShowEndDate==1) vLeftTable += ' '+i18n["End_Date"]+'' ; vLeftTable += ''; @@ -1063,33 +1068,33 @@ Complete-Displays task percent complete

'  Powered by jsGantt      Format:'; if (vFormatArr.join().indexOf("minute")!=-1) { - if (vFormat=='minute') vLeftTable += 'Minute'; - else vLeftTable += 'Minute'; + if (vFormat=='minute') vLeftTable += ''+i18n["sMinute"]; + else vLeftTable += ''+i18n["sMinute"]; } if (vFormatArr.join().indexOf("hour")!=-1) { - if (vFormat=='hour') vLeftTable += 'Hour'; - else vLeftTable += 'Hour'; + if (vFormat=='hour') vLeftTable += ''+i18n["sHour"]; + else vLeftTable += ''+i18n["sHour"]; } if (vFormatArr.join().indexOf("day")!=-1) { - if (vFormat=='day') vLeftTable += 'Day'; - else vLeftTable += 'Day'; + if (vFormat=='day') vLeftTable += ''+i18n["sDay"]; + else vLeftTable += ''+i18n["sDay"]; } if (vFormatArr.join().indexOf("week")!=-1) { - if (vFormat=='week') vLeftTable += 'Week'; - else vLeftTable += 'Week'; + if (vFormat=='week') vLeftTable += ''+i18n["sWeek"]; + else vLeftTable += ''+i18n["sWeek"]; } if (vFormatArr.join().indexOf("month")!=-1) { - if (vFormat=='month') vLeftTable += 'Month'; - else vLeftTable += 'Month'; + if (vFormat=='month') vLeftTable += ''+i18n["sMonth"]; + else vLeftTable += ''+i18n["sMonth"]; } if (vFormatArr.join().indexOf("quarter")!=-1) { - if (vFormat=='quarter') vLeftTable += 'Quarter'; - else vLeftTable += 'Quarter'; + if (vFormat=='quarter') vLeftTable += ''+i18n["sQuarter"]; + else vLeftTable += ''+i18n["sQuarter"]; } // vLeftTable += ' .'; diff --git a/htdocs/includes/menus/barre_left/eldy.lib.php b/htdocs/includes/menus/barre_left/eldy.lib.php index 355d5880105..a0a06f930d6 100644 --- a/htdocs/includes/menus/barre_left/eldy.lib.php +++ b/htdocs/includes/menus/barre_left/eldy.lib.php @@ -704,7 +704,7 @@ function print_left_eldy_menu($db,$menu_array) } /* - * Menu PROJETS + * Menu PROJECTS */ if ($mainmenu == 'project') { @@ -716,19 +716,19 @@ function print_left_eldy_menu($db,$menu_array) $newmenu->add(DOL_URL_ROOT."/projet/fiche.php?leftmenu=projects&action=create&mode=mine", $langs->trans("NewProject"), 1, $user->rights->projet->creer); $newmenu->add(DOL_URL_ROOT."/projet/liste.php?leftmenu=projects&mode=mine", $langs->trans("List"), 1, $user->rights->projet->lire); - $newmenu->add(DOL_URL_ROOT."/projet/index.php?leftmenu=projects", $langs->trans("Projects"), 0, $user->rights->projet->lire); - $newmenu->add(DOL_URL_ROOT."/projet/fiche.php?leftmenu=projects&action=create", $langs->trans("NewProject"), 1, $user->rights->projet->creer); - $newmenu->add(DOL_URL_ROOT."/projet/liste.php?leftmenu=projects", $langs->trans("List"), 1, $user->rights->projet->lire); + $newmenu->add(DOL_URL_ROOT."/projet/index.php?leftmenu=projects", $langs->trans("Projects"), 0, $user->rights->projet->lire && $user->rights->projet->all->lire); + $newmenu->add(DOL_URL_ROOT."/projet/fiche.php?leftmenu=projects&action=create", $langs->trans("NewProject"), 1, $user->rights->projet->creer && $user->rights->projet->all->creer); + $newmenu->add(DOL_URL_ROOT."/projet/liste.php?leftmenu=projects", $langs->trans("List"), 1, $user->rights->projet->lire && $user->rights->projet->all->lire); $newmenu->add(DOL_URL_ROOT."/projet/activity/index.php?mode=mine", $langs->trans("MyActivities"), 0, $user->rights->projet->lire); $newmenu->add(DOL_URL_ROOT."/projet/tasks/fiche.php?action=create&mode=mine", $langs->trans("NewTask"), 1, $user->rights->projet->creer); $newmenu->add(DOL_URL_ROOT."/projet/tasks/index.php?mode=mine", $langs->trans("List"), 1, $user->rights->projet->lire); $newmenu->add(DOL_URL_ROOT."/projet/activity/list.php?mode=mine", $langs->trans("NewTimeSpent"), 1, $user->rights->projet->creer); - $newmenu->add(DOL_URL_ROOT."/projet/activity/index.php", $langs->trans("Activities"), 0, $user->rights->projet->lire); - $newmenu->add(DOL_URL_ROOT."/projet/tasks/fiche.php?action=create", $langs->trans("NewTask"), 1, $user->rights->projet->creer); - $newmenu->add(DOL_URL_ROOT."/projet/tasks/index.php", $langs->trans("List"), 1, $user->rights->projet->lire); - $newmenu->add(DOL_URL_ROOT."/projet/activity/list.php", $langs->trans("NewTimeSpent"), 1, $user->rights->projet->creer); + $newmenu->add(DOL_URL_ROOT."/projet/activity/index.php", $langs->trans("Activities"), 0, $user->rights->projet->lire && $user->rights->projet->all->lire); + $newmenu->add(DOL_URL_ROOT."/projet/tasks/fiche.php?action=create", $langs->trans("NewTask"), 1, $user->rights->projet->creer && $user->rights->projet->all->creer); + $newmenu->add(DOL_URL_ROOT."/projet/tasks/index.php", $langs->trans("List"), 1, $user->rights->projet->lire && $user->rights->projet->all->lire); + $newmenu->add(DOL_URL_ROOT."/projet/activity/list.php", $langs->trans("NewTimeSpent"), 1, $user->rights->projet->creer && $user->rights->projet->all->creer); } } diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index 7bd6d3f4894..db69bca7b3b 100755 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -77,6 +77,7 @@ ConfirmDeleteATimeSpent=Are you sure you want to delete this time spent ? DoNotShowMyTasksOnly=See also tasks i am not affected to ShowMyTasksOnly=View only tasks i am affected to TaskRessourceLinks=Ressources +ProjectsDedicatedToThisThirdParty=Projects dedicated to this third party ##### Types de contacts ##### TypeContact_project_internal_PROJECTLEADER=Project leader TypeContact_project_external_PROJECTLEADER=Project leader diff --git a/htdocs/langs/fr_FR/projects.lang b/htdocs/langs/fr_FR/projects.lang index 3e3a990d29b..097c6c4f3e3 100755 --- a/htdocs/langs/fr_FR/projects.lang +++ b/htdocs/langs/fr_FR/projects.lang @@ -77,6 +77,7 @@ ConfirmDeleteATimeSpent=Êtes-vous sûr de vouloir supprimer ce temps consommé DoNotShowMyTasksOnly=Voir aussi les taches qui ne me sont pas affectées ShowMyTasksOnly=Ne voir que les taches qui me sont affectées TaskRessourceLinks=Affectation ressources +ProjectsDedicatedToThisThirdParty=Projets dédiés à ce tiers ##### Types de contacts ##### TypeContact_project_internal_PROJECTLEADER=Chef de projet TypeContact_project_external_PROJECTLEADER=Chef de projet diff --git a/htdocs/lib/company.lib.php b/htdocs/lib/company.lib.php index 2e00537b625..ff5ed758c87 100644 --- a/htdocs/lib/company.lib.php +++ b/htdocs/lib/company.lib.php @@ -286,6 +286,96 @@ function getFormeJuridiqueLabel($code) } + +/** + * \brief Show html area for list of projects + * \param conf Object conf + * \param lang Object lang + * \param db Database handler + * \param objsoc Third party object + */ +function show_projects($conf,$langs,$db,$objsoc) +{ + global $user; + + $i = -1 ; + + if ($conf->projet->enabled && $user->rights->projet->lire) + { + $langs->load("projects"); + + print "\n"; + print_titre($langs->trans("ProjectsDedicatedToThisThirdParty")); + print "\n".''; + + $sql = "SELECT p.rowid,p.title,p.ref,p.public, p.dateo as do, p.datee as de"; + $sql .= " FROM ".MAIN_DB_PREFIX."projet as p"; + $sql .= " WHERE p.fk_soc = ".$objsoc->id; + $sql .= " ORDER BY p.dateo DESC"; + + $result=$db->query($sql); + if ($result) + { + $num = $db->num_rows($result); + + print ''; + print ''; + print ''; + + if ($num > 0) + { + require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php"); + + $projectstatic = new Project($db); + + $i=0; + $var=true; + while ($i < $num) + { + $obj = $db->fetch_object($result); + $projectstatic->fetch($obj->rowid); + + // To verify role of users + $userAccess = $projectstatic->restrictedProjectArea($user,1); + + if ($user->rights->projet->lire && $userAccess > 0) + { + $var = !$var; + print ""; + + // Ref + print ''; + // Label + print ''; + // Date start + print ''; + // Date end + print ''; + + print ''; + } + $i++; + } + } + else + { + print ''; + } + $db->free($result); + } + else + { + dol_print_error($db); + } + print "
'.$langs->trans("Ref").''.$langs->trans("Name").''.$langs->trans("DateStart").''.$langs->trans("DateEnd").'
'.img_object($langs->trans("ShowProject"),($obj->public?'projectpub':'project'))." ".$obj->ref.''.$obj->title.''.dol_print_date($db->jdate($obj->do),"day").''.dol_print_date($db->jdate($obj->de),"day").'
'.$langs->trans("None").'
"; + + print "
\n"; + } + + return $i; +} + + /** * \brief Show html area for list of contacts * \param conf Object conf @@ -298,6 +388,8 @@ function show_contacts($conf,$langs,$db,$objsoc) global $user; global $bc; + $i=-1; + $contactstatic = new Contact($db); if ($conf->clicktodial->enabled) @@ -325,12 +417,13 @@ function show_contacts($conf,$langs,$db,$objsoc) $sql .= " ORDER by p.datec"; $result = $db->query($sql); - $i = 0; $num = $db->num_rows($result); - $var=true; if ($num) { + $i=0; + $var=true; + while ($i < $num) { $obj = $db->fetch_object($result); @@ -383,6 +476,8 @@ function show_contacts($conf,$langs,$db,$objsoc) print "\n\n"; print "
\n"; + + return $i; } diff --git a/htdocs/lib/project.lib.php b/htdocs/lib/project.lib.php index b9371d419a3..66b7cc7a02b 100644 --- a/htdocs/lib/project.lib.php +++ b/htdocs/lib/project.lib.php @@ -92,13 +92,10 @@ function project_prepare_head($object) $h++; */ - if ($conf->global->MAIN_FEATURES_LEVEL >= 1) - { - $head[$h][0] = DOL_URL_ROOT.'/projet/ganttview.php?id='.$object->id; - $head[$h][1] = $langs->trans("Gantt"); - $head[$h][2] = 'gantt'; - $h++; - } + $head[$h][0] = DOL_URL_ROOT.'/projet/ganttview.php?id='.$object->id; + $head[$h][1] = $langs->trans("Gantt"); + $head[$h][2] = 'gantt'; + $h++; return $head; } diff --git a/htdocs/projet/ganttchart.php b/htdocs/projet/ganttchart.php index 1a1e2724396..b479a5baf40 100644 --- a/htdocs/projet/ganttchart.php +++ b/htdocs/projet/ganttchart.php @@ -30,14 +30,6 @@