When baseline parameter is included in report there is discrepancy after a project is selected – refresh of “project baseline” parameter displays baselines of all visible projects; Problem exists in ..tooljsonList.php (line 408…):
else if ($dataType=='idBaselineSelect') {
$list=array();
$critWhere= 'idProject in ' . getVisibleProjectsList() ;
$bl=new Baseline();
$lstBaseline=$bl->getSqlElementsFromCriteria(null,null,$critWhere);
foreach ($lstBaseline as $bl) { $list[$bl->id]=$bl->name; } }
Workaround to display only baselines of selected project (should be done far more systematically):
Replace above code with:
else if ($dataType=='idBaselineSelect') {
$list=array();
$critWhere= 'idProject = '. RequestHandler::getValue ( 'critValue' );
$bl=new Baseline();
$lstBaseline=$bl->getSqlElementsFromCriteria(null,null,$critWhere);
if ($lstBaseline[0]) {
foreach ($lstBaseline as $bl) {
$list[$bl->id]=$bl->name; } }
else {
$list[0]='';
} }
Hi,
Thanks for reporting and for fix proposale
Issue will be fixed on V9.0.5
Fix is in jsonList (line 408)
} else if ($dataType=='idBaselineSelect') {
$list=array();
$critProj=(RequestHandler::getValue ('critField')=='idProject')?RequestHandler::getValue('critValue'):null;
if ($critProj) {$critWhere='idProject = '.$critProj;}
else {$critWhere='idProject in '.getVisibleProjectsList(); }
$bl=new Baseline;
$lstBaseline=$bl->getSqlElementsFromCriteria(null,null,$critWhere);
foreach ($lstBaseline as $bl) {
$list[$bl->id]=$bl->name." (".htmlFormatDate($bl->baselineDate).") - ".SqlList::getNameFromId('Project', $bl->idProject);
}
and on planningListFunctions.php, line 389
Superb, but, still, there is one tiny issue - when global selector is set to "All projects" and when user, after selecting one of visible projects, select all projects (blank) error is generated in log file:2021-02-10 12:40:39.364 ** ERROR ** [V9.0.4] Exception-[42000] SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
2021-02-10 12:40:39.364 ** ERROR ** [V9.0.4] For query : select * from baseline where idProject =
2021-02-10 12:40:39.364 ** ERROR ** [V9.0.4] Strack trace :
2021-02-10 12:40:39.364 ** ERROR ** [V9.0.4] #0 Sql->query called at [/var/www/html/projeqtor/model/persistence/SqlElement.php:2680]
2021-02-10 12:40:39.365 ** ERROR ** [V9.0.4] #1 SqlElement->getSqlElementsFromCriteria called at [/var/www/html/projeqtor/tool/jsonList.php:446]
I suggest the followin amendment (marked red):
else if ($dataType=='idBaselineSelect') {
$list=array();
$critProj=(RequestHandler::getValue ('critField')=='idProject')?RequestHandler::getValue('critValue'):null;
if ($critProj != ' ') {$critWhere='idProject = '.$critProj;}
else {$critWhere='idProject in '.getVisibleProjectsList(); }
$bl=new Baseline;
$lstBaseline=$bl->getSqlElementsFromCriteria(null,null,$critWhere);
foreach ($lstBaseline as $bl) {
$list[$bl->id]=$bl->name." (".htmlFormatDate($bl->baselineDate).") - ".SqlList::getNameFromId('Project', $bl->idProject);
}
}
Hi,
Yep, but fix will be deffirent : idProject may contain an empty string , or '*' or ' ' (single space)
So correct fix is to replace
$critProj=(RequestHandler::getValue ('critField')=='idProject')?RequestHandler::getValue('critValue'):null;
with
$critProj=(RequestHandler::getValue ('critField')=='idProject')?intval(RequestHandler::getValue('critValue')):null;
Chateau d'Yquem - Foie Gras