diff --git a/include/QueryGenerator/EnhancedQueryGenerator.php b/include/QueryGenerator/EnhancedQueryGenerator.php index bf4878364c1301b5739e60cfbc53f5199c41aa40..5b139793b72e6c4b06693080d5ab59ae76e45921 100644 --- a/include/QueryGenerator/EnhancedQueryGenerator.php +++ b/include/QueryGenerator/EnhancedQueryGenerator.php @@ -667,27 +667,36 @@ class EnhancedQueryGenerator extends QueryGenerator { } foreach ($valueSqlList as $valueSql) { if (in_array($baseFieldName, $this->referenceFieldList)) { - if ($conditionInfo['operator'] == 'y') { + $trim = 'TRIM'; + $moduleList = $this->referenceFieldInfoList[$baseFieldName]; + if(in_array('Users', $moduleList)) { + $columnSqlTable = 'vtiger_users'.$parentReferenceField.$fieldName; + $columnSql = getSqlForNameInDisplayFormat(array('first_name'=>$columnSqlTable.'.first_name', + 'last_name'=>$columnSqlTable.'.last_name'),'Users'); + } else if(in_array('DocumentFolders', $moduleList)) { + $columnSql = "vtiger_attachmentsfolder".$fieldName.".foldername"; + } else if(in_array('Currency', $moduleList)) { + $columnSql = "vtiger_currency_info$parentReferenceField$fieldName.currency_name"; + if($fieldName == 'currency_id' && is_numeric($conditionInfo['value'])){ + $columnSql = "vtiger_currency_info$parentReferenceField$fieldName.id"; + } + } else if ($baseFieldName == 'roleid'){ + $columnSql = 'vtiger_role.rolename'; + }else { + $trim = ''; + $columnSql = 'vtiger_crmentity'.$parentReferenceField.$fieldName.'.label'; + } + if($conditionInfo['operator'] == 'y' || ($conditionInfo['operator'] == 'e' && $valueSql == "= ''")) { $columnName = $field->getColumnName(); // We are checking for zero since many reference fields will be set to 0 if it doest not have any value - $fieldSql .= "$fieldGlue $tableName.$columnName $valueSql OR $tableName.$columnName = '0'"; + // We are checking for NULL as well since for custom relationships if the record is deleted the value will be retained and will not become 0 + $fieldSql .= "$fieldGlue $trim($columnSql) IS NULL OR $tableName.$columnName $valueSql OR $tableName.$columnName = '0'"; $fieldGlue = ' OR'; - } else { - $moduleList = $this->referenceFieldInfoList[$baseFieldName]; - if (in_array('Users', $moduleList)) { - $columnSqlTable = 'vtiger_users'.$parentReferenceField.$fieldName; - $columnSql = getSqlForNameInDisplayFormat(array('first_name' => $columnSqlTable.'.first_name', - 'last_name' => $columnSqlTable.'.last_name'), 'Users'); - } else if (in_array('DocumentFolders', $moduleList)) { - $columnSql = "vtiger_attachmentsfolder".$fieldName.".foldername"; - } else if (in_array('Currency', $moduleList)) { - $columnSql = "vtiger_currency_info$parentReferenceField$fieldName.currency_name"; - } else if ($baseFieldName == 'roleid') { - $columnSql = 'vtiger_role.rolename'; - } else { - $columnSql = 'vtiger_crmentity'.$parentReferenceField.$fieldName.'.label'; - } - $fieldSql .= "$fieldGlue trim($columnSql) $valueSql"; + } else if ($conditionInfo['operator'] == 'k' || $conditionInfo['operator'] == 'n') { + $fieldSql .= " $fieldGlue ( $trim($columnSql) $valueSql OR $trim($columnSql) IS NULL )"; + $fieldGlue = 'OR'; + } else{ + $fieldSql .= "$fieldGlue $trim($columnSql) $valueSql"; $fieldGlue = ' OR'; } } elseif (in_array($baseFieldName, $this->ownerFields)) {