From df05493355f2216ded797c40430e4dd9e4d8dd05 Mon Sep 17 00:00:00 2001 From: Uma <uma.s@vtiger.com> Date: Fri, 14 Aug 2020 13:28:53 +0530 Subject: [PATCH] Fixes Pricebook Relatedlist inline search --- .../PriceBooks/models/RelationListView.php | 60 +++++++++++++++++++ modules/PriceBooks/views/Detail.php | 24 ++++++++ 2 files changed, 84 insertions(+) diff --git a/modules/PriceBooks/models/RelationListView.php b/modules/PriceBooks/models/RelationListView.php index ec5f81882..440f53e26 100644 --- a/modules/PriceBooks/models/RelationListView.php +++ b/modules/PriceBooks/models/RelationListView.php @@ -27,12 +27,72 @@ class PriceBooks_RelationListView_Model extends Vtiger_RelationListView_Model { $db = PearDatabase::getInstance(); $parentModule = $this->getParentRecordModel()->getModule(); $relationModule = $this->getRelationModel()->getRelationModuleModel(); + $relationModuleName = $relationModule->get('name'); $relatedColumnFieldMapping = $relationModule->getConfigureRelatedListFields(); if(count($relatedColumnFieldMapping) <= 0){ $relatedColumnFieldMapping = $relationModule->getRelatedListFields(); } $query = $this->getRelationQuery(); + + if ($this->get('whereCondition') && is_array($this->get('whereCondition'))) { + $currentUser = Users_Record_Model::getCurrentUserModel(); + //EnhancedQueryGenerator is used instead of QueryGenerator since below case was faling + //AssignTo Empty + $queryGenerator = new EnhancedQueryGenerator($relationModuleName, $currentUser); + $queryGenerator->setFields(array_values($relatedColumnFieldMapping)); + $whereCondition = $this->get('whereCondition'); + foreach ($whereCondition as $fieldName => $fieldValue) { + $fieldModel = $relationModule->getField($fieldName); + $fieldType= explode('~',$fieldModel->get('typeofdata'))[0]; + $referenceModuleList = $fieldModel->getReferenceList(); + if (is_array($fieldValue)) { + $comparator = $fieldValue[1]; + $searchValue = $fieldValue[2]; + $type = $fieldValue[3]; + if ($type == 'time') { + $searchValue = Vtiger_Time_UIType::getTimeValueWithSeconds($searchValue); + } else if($type == 'owner' || ($type == 'reference' && in_array('Users', $referenceModuleList))) { + $searchValue = $fieldValue[2]; + if(!$fieldModel->isCustomField()) { + $userFieldValues = explode(',', $searchValue); + $userValues = array(); + foreach ($userFieldValues as $key => $value) { + if(is_numeric($value)) { + $userValues[$key] = getUserFullName($value); + } else { + $userValues[$key] = $value; + } + } + $searchValue = implode(',',$userValues); + } + } + else if ($fieldType == 'DT') { + $dateValues = explode(',', $searchValue); + //Indicate whether it is fist date in the between condition + $isFirstDate = true; + foreach ($dateValues as $key => $dateValue) { + $dateTimeCompoenents = explode(' ', $dateValue); + if (empty($dateTimeCompoenents[1])) { + if ($isFirstDate) + $dateTimeCompoenents[1] = '00:00:00'; + else + $dateTimeCompoenents[1] = '23:59:59'; + } + $dateValue = implode(' ', $dateTimeCompoenents); + $dateValues[$key] = $dateValue; + $isFirstDate = false; + } + $searchValue = implode(',', $dateValues); + } + // #3681555-Relation fields column's search fields are missing in related list view. + $query = ($type == 'reference') ? $this->getReferenceFieldJoinClause($query, $relationModuleName, $fieldModel) : $query; + $queryGenerator->addCondition($fieldName, $searchValue, $comparator, "AND"); + } + } + $whereQuerySplit = split("WHERE", $queryGenerator->getWhereClause()); + $query.=" AND " . $whereQuerySplit[1]; + } $startIndex = $pagingModel->getStartIndex(); $pageLimit = $pagingModel->getPageLimit(); diff --git a/modules/PriceBooks/views/Detail.php b/modules/PriceBooks/views/Detail.php index 944a75501..c8fe9bfe5 100644 --- a/modules/PriceBooks/views/Detail.php +++ b/modules/PriceBooks/views/Detail.php @@ -31,6 +31,27 @@ class PriceBooks_Detail_View extends Vtiger_Detail_View { return parent::showRelatedList($request); } + $searchParams = $request->get('search_params'); + if(empty($searchParams)) { + $searchParams = array(); + } + $whereCondition = array(); + $relatedModuleModel = Vtiger_Module_Model::getInstance($relatedModuleName); + $moduleFields = $relatedModuleModel->getFields(); + foreach($searchParams as $fieldListGroup){ + foreach($fieldListGroup as $fieldSearchInfo){ + $fieldModel = $moduleFields[$fieldSearchInfo[0]]; + $tableName = $fieldModel->get('table'); + $column = $fieldModel->get('column'); + $whereCondition[$fieldSearchInfo[0]] = array($tableName.'.'.$column, $fieldSearchInfo[1], $fieldSearchInfo[2],$fieldSearchInfo[3]); + + $fieldSearchInfoTemp= array(); + $fieldSearchInfoTemp['searchValue'] = $fieldSearchInfo[2]; + $fieldSearchInfoTemp['fieldName'] = $fieldName = $fieldSearchInfo[0]; + $fieldSearchInfoTemp['comparator'] = $fieldSearchInfo[1]; + $searchParams[$fieldName] = $fieldSearchInfoTemp; + } + } $pagingModel = new Vtiger_Paging_Model(); $pagingModel->set('page',$requestedPage); @@ -45,6 +66,8 @@ class PriceBooks_Detail_View extends Vtiger_Detail_View { $nextSortOrder = "ASC"; $sortImage = "icon-chevron-up"; } + if(!empty($whereCondition)) + $relationListView->set('whereCondition', $whereCondition); if(!empty($orderBy)) { $relationListView->set('orderby', $orderBy); $relationListView->set('sortorder',$sortOrder); @@ -114,6 +137,7 @@ class PriceBooks_Detail_View extends Vtiger_Detail_View { $viewer->assign('SORT_IMAGE',$sortImage); $viewer->assign('COLUMN_NAME',$orderBy); $viewer->assign('USER_MODEL', Users_Record_Model::getCurrentUserModel()); + $viewer->assign('SEARCH_DETAILS', $searchParams); $viewer->assign('TAB_LABEL', $request->get('tab_label')); return $viewer->view('RelatedList.tpl', $moduleName, 'true'); -- GitLab