From f920a6e14540c7c66f763207fb2becefe294febb Mon Sep 17 00:00:00 2001
From: satish <satish.dvnk@vtiger.com>
Date: Fri, 3 Feb 2017 17:36:52 +0530
Subject: [PATCH] Global search issues fixed

---
 .../Inventory/partials/LineItemsContent.tpl   |   2 +-
 .../v7/modules/Inventory/resources/Edit.js    |  57 +--
 .../Settings/Profiles/resources/Profiles.js   |   1 -
 .../v7/modules/Vtiger/ModuleSearchResults.tpl |  39 ++
 layouts/v7/modules/Vtiger/SearchResults.tpl   |  48 ++
 .../modules/Vtiger/resources/BasicSearch.js   |   7 +-
 .../v7/modules/Vtiger/resources/SearchList.js | 234 +++++++++
 layouts/v7/modules/Vtiger/resources/Vtiger.js |  19 +-
 modules/Vtiger/views/ListAjax.php             | 114 +++++
 .../v7/modules/Project/SummaryViewWidgets.tpl | 468 +++++++++---------
 10 files changed, 682 insertions(+), 307 deletions(-)
 create mode 100644 layouts/v7/modules/Vtiger/ModuleSearchResults.tpl
 create mode 100644 layouts/v7/modules/Vtiger/SearchResults.tpl
 create mode 100644 layouts/v7/modules/Vtiger/resources/SearchList.js

diff --git a/layouts/v7/modules/Inventory/partials/LineItemsContent.tpl b/layouts/v7/modules/Inventory/partials/LineItemsContent.tpl
index 3d4784066..9a6ad82b3 100644
--- a/layouts/v7/modules/Inventory/partials/LineItemsContent.tpl
+++ b/layouts/v7/modules/Inventory/partials/LineItemsContent.tpl
@@ -165,7 +165,7 @@
 		<td>
 			<div>
 				<input id="{$listPrice}" name="{$listPrice}" value="{if !empty($data.$listPrice)}{$data.$listPrice}{else}0{/if}" type="text"
-					   data-rule-required=true data-rule-positive=true class="listPrice smallInputBox" data-is-price-changed="{if $RECORD_ID && $row_no neq 0}true{else}false{/if}" list-info='{if isset($data.$listPrice)}{Zend_Json::encode($listPriceValues)}{/if}' data-base-currency-id="{getProductBaseCurrency($productId, {$entityType})}" />
+					   data-rule-required=true data-rule-positive=true class="listPrice smallInputBox inputElement" data-is-price-changed="{if $RECORD_ID && $row_no neq 0}true{else}false{/if}" list-info='{if isset($data.$listPrice)}{Zend_Json::encode($listPriceValues)}{/if}' data-base-currency-id="{getProductBaseCurrency($productId, {$entityType})}" />
 				&nbsp;
 				{assign var=PRICEBOOK_MODULE_MODEL value=Vtiger_Module_Model::getInstance('PriceBooks')}
 				{if $PRICEBOOK_MODULE_MODEL->isPermitted('DetailView') && $MODULE != 'PurchaseOrder'}
diff --git a/layouts/v7/modules/Inventory/resources/Edit.js b/layouts/v7/modules/Inventory/resources/Edit.js
index 297d3d859..ddbfd248a 100644
--- a/layouts/v7/modules/Inventory/resources/Edit.js
+++ b/layouts/v7/modules/Inventory/resources/Edit.js
@@ -744,18 +744,6 @@ Vtiger_Edit_Js("Inventory_Edit_Js", {
 		jQuery('.lineItemCommentBox', lineItemRow).val('');
 		jQuery('.subProductIds', lineItemRow).val('');
 		jQuery('.subProductsContainer', lineItemRow).html('');
-
-		var lineItemCustomFields = this.customLineItemFields
-		for(var cfName in lineItemCustomFields) {
-			var cfDataType = lineItemCustomFields[cfName];
-			var element = lineItemRow.find('[name*="'+cfName+'"]');
-			switch(cfDataType) {
-				case 'boolean'		: element.attr('checked', false); break;
-				case 'picklist'		:
-				case 'multipicklist': element.select2('val', '').trigger('change'); break;
-				default				: element.val('');
-			}
-		}
 		this.quantityChangeActions(lineItemRow);
 	},
     
@@ -791,11 +779,7 @@ Vtiger_Edit_Js("Inventory_Edit_Js", {
 
 		var nameFields = new Array('discount', 'purchaseCost', 'margin');
 		var classFields = new Array('taxPercentage');
-		var lineItemCustomFields = this.customLineItemFields;
-		for(var cfName in lineItemCustomFields) {
-			nameFields.push(cfName);
-		}
-        
+
 		//To handle variable tax ids
 		for(var classIndex in classFields) {
 			var className = classFields[classIndex];
@@ -815,15 +799,6 @@ Vtiger_Edit_Js("Inventory_Edit_Js", {
 					   .filter('[name="'+actualElementId+'"]').attr('name',expectedElementId);
 		}
 
-		for(var nameIndex in nameFields) {
-			var elementName = nameFields[nameIndex];
-			var actualElementName = elementName + currentSequenceNumber;
-			var expectedElementName = elementName + expectedSequenceNumber;
-            (elementName in lineItemCustomFields) && (lineItemCustomFields[elementName] == "multipicklist") 
-                && ( actualElementName+='[]',expectedElementName+='[]'); 
-			lineItemRow.find('[name="'+actualElementName+'"]').attr('name',expectedElementName);
-		}
-
 		lineItemRow.attr('id', expectedRowId).attr('data-row-num', expectedSequenceNumber);
         lineItemRow.find('input.rowNumber').val(expectedSequenceNumber);
         
@@ -1588,36 +1563,6 @@ Vtiger_Edit_Js("Inventory_Edit_Js", {
                 });
             }
 
-			var lineItemCustomFieldsData = this.customLineItemFields;
-            var lineItemCustomFields = recordData.lineItemCustomFields;
-            for(var cfName in lineItemCustomFields) {
-				var cfValue = lineItemCustomFields[cfName];
-				if (cfValue) {
-					var cfDataType = lineItemCustomFieldsData[cfName];
-                    cfName+=lineItemRowNumber;
-                    (cfDataType == 'multipicklist') && (cfName+='[]')
-					var element = jQuery('[name="'+cfName+'"]', parentRow);
-
-					switch(cfDataType) {
-						case 'boolean'		:
-                            if (parseInt(cfValue) > 0) {
-                                element.attr('checked', "checked");
-                                element.prop("true");
-                            } else {
-                                element.removeAttr('checked');
-                                element.prop("false");
-                            }
-                            break;
-						case 'picklist'		:	element.select2('val', cfValue).trigger('change'); break;
-						case 'multipicklist':	element = jQuery('[name="'+cfName+'"].select2', parentRow);
-												cfValue = cfValue.split(" |##| ");
-												element.select2('val', cfValue).trigger('change');
-                                                break;
-						default				:	element.val(cfValue);
-					}
-				}
-			}
-
 			if(this.isIndividualTaxMode()) {
                 parentRow.find('.productTaxTotal').removeClass('hide')
             }else{
diff --git a/layouts/v7/modules/Settings/Profiles/resources/Profiles.js b/layouts/v7/modules/Settings/Profiles/resources/Profiles.js
index 62f0c7021..2df61c82d 100644
--- a/layouts/v7/modules/Settings/Profiles/resources/Profiles.js
+++ b/layouts/v7/modules/Settings/Profiles/resources/Profiles.js
@@ -136,7 +136,6 @@ var Settings_Profiles_Js = {
 				deleteAction.show().prop('checked',true);
 				moduleCheckBoxes.trigger('change');
 			} else {
-				//Some modules like TextSearch, BusinessHours, SLA will not be shown in the UI. But they should be always enabled
 				moduleCheckBoxes.filter(':visible').not(':disabled').prop('checked',false);
 				moduleCheckBoxes.trigger('change');
 				viewAction.prop('checked',false);
diff --git a/layouts/v7/modules/Vtiger/ModuleSearchResults.tpl b/layouts/v7/modules/Vtiger/ModuleSearchResults.tpl
new file mode 100644
index 000000000..01808cd28
--- /dev/null
+++ b/layouts/v7/modules/Vtiger/ModuleSearchResults.tpl
@@ -0,0 +1,39 @@
+{*+**********************************************************************************
+* The contents of this file are subject to the vtiger CRM Public License Version 1.1
+* ("License"); You may not use this file except in compliance with the License
+* The Original Code is: vtiger CRM Open Source
+* The Initial Developer of the Original Code is vtiger.
+* Portions created by vtiger are Copyright (C) vtiger.
+* All Rights Reserved.
+************************************************************************************}
+
+{strip}
+	<div class="listViewPageDiv">
+		<div class="row">
+			<div class="col-lg-12">
+				<div class="col-lg-8">
+					<h4 class="searchModuleHeader">{vtranslate($MODULE, $MODULE)}</h4>
+					<input type="hidden" name="search_module" value="{$MODULE}"/>
+				</div>
+				<div class="col-lg-4" style="margin-top: 10px;">
+					<div class="pull-right" >
+						<input type="hidden" name="pageNumber" value="{$PAGE_NUMBER}">
+						<input type="hidden" name="recordsCount" value="{$RECORDS_COUNT}">
+						<span class="pageNumbersText" style="padding-right:5px">
+							{$PAGING_MODEL->getRecordStartRange()} {vtranslate('LBL_to', $MODULE)} {$PAGING_MODEL->getRecordEndRange()} {vtranslate('LBL_OF',$MODULE)} {$RECORDS_COUNT}
+						</span>
+						<a href="#" class="previousPageButton navigationButton verticalAlignMiddle" data-start='{$PAGING_MODEL->getRecordStartRange()-$PAGING_MODEL->getPageLimit()}' {if !$PAGING_MODEL->isPrevPageExists()}disabled=""{/if}>
+							<i class="fa fa-caret-left"></i>&nbsp;&nbsp;
+						</a>
+						<a href="#" class="nextPageButton navigationButton verticalAlignMiddle" data-start='{$PAGING_MODEL->getRecordEndRange()}' {if !$PAGING_MODEL->isNextPageExists()} disabled=""{/if}>
+							<i class="fa fa-caret-right"></i>
+						</a>
+					</div>
+				</div>
+			</div>
+		</div>
+		<div class="row">
+			{include file="ListViewContents.tpl"|vtemplate_path:$MODULE SEARCH_MODE_RESULTS=true}
+		</div>
+	</div>
+{/strip}
\ No newline at end of file
diff --git a/layouts/v7/modules/Vtiger/SearchResults.tpl b/layouts/v7/modules/Vtiger/SearchResults.tpl
new file mode 100644
index 000000000..9e239e377
--- /dev/null
+++ b/layouts/v7/modules/Vtiger/SearchResults.tpl
@@ -0,0 +1,48 @@
+{*+**********************************************************************************
+* The contents of this file are subject to the vtiger CRM Public License Version 1.1
+* ("License"); You may not use this file except in compliance with the License
+* The Original Code is: vtiger CRM Open Source
+* The Initial Developer of the Original Code is vtiger.
+* Portions created by vtiger are Copyright (C) vtiger.
+* All Rights Reserved.
+************************************************************************************}
+
+{strip}
+	<script type="text/javascript" src="{vresource_url('layouts/v7/modules/Vtiger/resources/List.js')}"></script>
+	<script type="text/javascript" src="{vresource_url('layouts/v7/modules/Vtiger/resources/SearchList.js')}"></script>
+	<div id="searchResults-container" class="modal-body" style="padding:0!important">
+		<div class="col-lg-12 clearfix">
+			<div class="pull-right overlay-close">
+				<button type="button" class="close" aria-label="Close" data-target="#overlayPage" data-dismiss="modal">
+					<span aria-hidden="true" class="fa fa-close"></span>
+				</button>
+			</div>
+		</div>
+		<div class="searchResults">
+			<input type="hidden" value="{$SEARCH_VALUE|escape:"html"}" id="searchValue">
+			<div class="scrollableSearchContent">
+				<div class="container-fluid moduleResults-container">
+					<input type="hidden" name="groupStart" value="{$GROUP_START}" class="groupStart"/>
+					{assign var=NORECORDS value=false}
+					{foreach key=MODULE item=LISTVIEW_MODEL from=$MATCHING_RECORDS}
+						{assign var=RECORDS_COUNT value=$LISTVIEW_MODEL->recordsCount}
+						{assign var=PAGING_MODEL value=$LISTVIEW_MODEL->pagingModel}
+						{assign var=LISTVIEW_HEADERS value=$LISTVIEW_MODEL->listViewHeaders}
+						{assign var=LISTVIEW_ENTRIES value=$LISTVIEW_MODEL->listViewEntries}
+						{assign var=MODULE_MODEL value=$LISTVIEW_MODEL->getModule()}
+						{assign var=QUICK_PREVIEW_ENABLED value=$MODULE_MODEL->isQuickPreviewEnabled()}
+						{include file="ModuleSearchResults.tpl"|vtemplate_path:$MODULE SEARCH_MODE_RESULTS=true}
+						<br>
+					{/foreach}
+					{if !$MATCHING_RECORDS}
+						<div class="emptyRecordsDiv">
+							<div class="emptyRecordsContent">
+								{vtranslate("LBL_NO_RECORDS_FOUND")}
+							</div>
+						</div>
+					{/if}
+				</div>
+			</div>
+		</div>
+	</div>
+{/strip}
\ No newline at end of file
diff --git a/layouts/v7/modules/Vtiger/resources/BasicSearch.js b/layouts/v7/modules/Vtiger/resources/BasicSearch.js
index bfbc09bcd..b73b9e35c 100644
--- a/layouts/v7/modules/Vtiger/resources/BasicSearch.js
+++ b/layouts/v7/modules/Vtiger/resources/BasicSearch.js
@@ -131,14 +131,14 @@ Vtiger.Class('Vtiger_BasicSearch_Js',{},{
 	addSearchListener : function () {
 		jQuery('.search-link .keyword-input').on('VT_SEARCH_INTIATED',function(e,args){
 			var val = args.searchValue;
-			var url = '?module='+app.getModuleName()+'&view=ListAjax&value='+encodeURIComponent(val)+'&searchModule=All';
+			var url = '?module='+app.getModuleName()+'&view=ListAjax&mode=searchAll&value='+encodeURIComponent(val);
 			app.helper.showProgress();
 			app.request.get({'url': url}).then(function (error, data) {
 				if (error == null) {
-					var params = {'ignoreScroll': true};
 					app.helper.hideProgress();
-					app.helper.loadPageOverlay(data, params).then(function (modal) {
+					app.helper.loadPageOverlay(data).then(function (modal) {
 						modal.find('.keyword-input').val(jQuery('.keyword-input').val());
+						Vtiger_SearchList_Js.intializeListInstances(modal);
 					});
 				}
 			});
@@ -146,6 +146,7 @@ Vtiger.Class('Vtiger_BasicSearch_Js',{},{
 	},
 
 	registerEvents : function () {
+		this._super();
 		this.addSearchListener();
 	}
 
diff --git a/layouts/v7/modules/Vtiger/resources/SearchList.js b/layouts/v7/modules/Vtiger/resources/SearchList.js
new file mode 100644
index 000000000..ee0a6a40d
--- /dev/null
+++ b/layouts/v7/modules/Vtiger/resources/SearchList.js
@@ -0,0 +1,234 @@
+/*+***********************************************************************************
+ * The contents of this file are subject to the vtiger CRM Public License Version 1.0
+ * ("License"); You may not use this file except in compliance with the License
+ * The Original Code is: vtiger CRM Open Source
+ * The Initial Developer of the Original Code is vtiger.
+ * Portions created by vtiger are Copyright (C) vtiger.
+ * All Rights Reserved.
+ *************************************************************************************/
+
+Vtiger.Class("Vtiger_SearchList_Js", {
+	intializeListInstances: function (container) {
+		container.find('.listViewPageDiv').each(function (index, domEle) {
+			var container = jQuery(domEle);
+			var moduleListInstance = new Vtiger_ModuleList_Js();
+			moduleListInstance.setModuleName(container.find('[name="search_module"]').val()).setListViewContainer(container);
+			moduleListInstance.registerEvents();
+		});
+	}
+},{});
+
+Vtiger_List_Js("Vtiger_ModuleList_Js", {}, {
+	searchModule: false,
+	addComponents: function () {
+
+	},
+	getSearchValue: function () {
+		return jQuery('#searchValue').val();
+	},
+	getDefaultParams: function () {
+		var container = this.getListViewContainer();
+		var searchParams = {
+			'module': this.getModuleName(),
+			'view'	: 'ListAjax',
+			'mode'	: 'showSearchResultsWithValue',
+			'value'	: this.getSearchValue,
+			'recordsCount': container.find('[name="recordsCount"]').val()
+		};
+		var parentDefaultParams = this._super();
+		var defaultParams = jQuery.extend(parentDefaultParams, searchParams);
+		defaultParams.parent = '';
+		return defaultParams;
+	},
+	registerPageNavigationEvents: function () {
+		var self = this;
+		var container = this.getListViewContainer();
+		container.on('click', '.nextPageButton', function (e) {
+			var pageNumber = container.find('[name="pageNumber"]').val();
+			var nextPageNumber = parseInt(parseFloat(pageNumber)) + 1;
+			var params = {};
+			params.page= nextPageNumber;
+			self.loadListViewRecords(params);
+		});
+		container.on('click', '.previousPageButton', function (e) {
+			var pageNumber = container.find('[name="pageNumber"]').val();
+			var previousPageNumber = parseInt(parseFloat(pageNumber)) - 1;
+			if (pageNumber > 1) {
+				var params = {};
+				params.page= previousPageNumber;
+				self.loadListViewRecords(params);
+			}
+			
+		});
+	},
+	registerRemoveListViewSort: function () {
+		var listViewContainer = this.getListViewContainer();
+		var thisInstance = this;
+		listViewContainer.on('click', '.removeSorting', function (e) {
+			listViewContainer.find('[name="sortOrder"]').val('');
+			listViewContainer.find('[name="orderBy"]').val('');
+			thisInstance.loadListViewRecords();
+		});
+	},
+	loadListViewRecords: function (urlParams) {
+		var self = this;
+		var aDeferred = jQuery.Deferred();
+		var defParams = self.getDefaultParams();
+		if (typeof urlParams == "undefined") {
+			urlParams = {};
+		}
+		if (typeof urlParams.search_params == "undefined") {
+			urlParams.search_params = JSON.stringify(self.getListSearchParams(false));
+		}
+		urlParams = jQuery.extend(defParams, urlParams);
+		app.helper.showProgress();
+
+		app.request.post({data: urlParams}).then(function (err, res) {
+			aDeferred.resolve(res);
+			self.placeListContents(res);
+			app.event.trigger('post.listViewFilter.click', jQuery('.searchRow'));
+			app.helper.hideProgress();
+			self.markSelectedIdsCheckboxes();
+			self.registerDynamicListHeaders();
+			self.registerPostLoadListViewActions();
+		});
+		return aDeferred.promise();
+	},
+	registerEditLink: function () {
+		var container = this.getListViewContainer();
+		container.on('click', '.editlink', function (e) {
+			var element = jQuery(e.currentTarget);
+			var url = element.find('a').data('url');
+			var listInstance = Vtiger_List_Js.getInstance();
+			var postData = listInstance.getDefaultParams();
+			postData['view'] = app.view();
+			var recordId = app.getRecordId();
+			if (!recordId) {
+				recordId = jQuery('[name="record"]').val();
+			}
+			if (recordId && typeof recordId != "undefined") {
+				postData['record'] = recordId;
+			}
+			if (postData['module'] == 'Workflows' && postData['view'] == 'Edit') {
+				postData['mode'] = 'V7Edit';
+			}
+			for (var key in postData) {
+				if (postData[key]) {
+					postData['return'+key] = postData[key];
+					delete postData[key];
+				} else {
+					delete postData[key];
+				}
+			}
+			e.preventDefault();
+			e.stopPropagation();
+			window.location.href = url+'&'+$.param(postData);
+		});
+	},
+	registerDeleteRecordClickEvent: function () {
+		var thisInstance = this;
+		var container = this.getListViewContainer();
+		container.on('click', '.deleteRecordButton', function (e) {
+			var elem = jQuery(e.currentTarget);
+			var parent = elem;
+			var params = {};
+
+			var originalDropDownMenu = elem.closest('.dropdown-menu').data('original-menu');
+			if (originalDropDownMenu && typeof originalDropDownMenu != 'undefined') {
+				parent = app.helper.getDropDownmenuParent(originalDropDownMenu);
+
+				var moduleName = jQuery('#searchModuleList').val();
+				if (moduleName && typeof moduleName != 'undefined') {
+					params['module'] = moduleName;
+				}
+			}
+			var recordId = parent.closest('tr').data('id');
+			var module = parent.closest('.moduleSearchResults').find('[name="search_module"]').val();
+			thisInstance.deleteRecord(recordId, {'module': module});
+		});
+	},
+	loadResult: function (viewdEle) {
+		var searchString = jQuery('#searchKey').val();
+		var latestResultsBlockEle = viewdEle.prev('.moduleSearchResults.groupstartvalue');
+		var groupStart = latestResultsBlockEle.find('.groupStart').val();
+		var appendToEle = jQuery('.moduleResults-container');
+
+		var url = {
+			"value": searchString,
+			"start": groupStart,
+			"mode": "searchAll"
+		};
+		var basicSearch = new Vtiger_BasicSearch_Js();
+		app.helper.showProgress();
+		basicSearch.search(url).then(function (data, error) {
+			var ele = jQuery(data);
+			ele.appendTo(appendToEle);
+			ele.each(function (index, domEle) {
+				var container = jQuery(domEle);
+				var moduleListInstance = new Vtiger_ModuleList_Js();
+				moduleListInstance.setModuleName(container.find('[name="search_module"]').val()).setListViewContainer(container);
+				moduleListInstance.registerEvents();
+			});
+			app.helper.hideProgress();
+		});
+
+	},
+	registerDropdownPosition: function () {
+		var container = this.getListViewContainer();
+		jQuery('.table-actions').on('click', '.dropdown', function (e) {
+			var containerTarget = jQuery(this).closest(container);
+			var dropdown = jQuery(e.currentTarget);
+			if (dropdown.find('[data-toggle]').length <= 0) {
+				return;
+			}
+			var dropdown_menu = dropdown.find('.dropdown-menu');
+
+			var dropdownStyle = dropdown_menu.find('li a');
+			dropdownStyle.css('padding', "0 6px", 'important');
+
+			var fixed_dropdown_menu = dropdown_menu.clone(true);
+			fixed_dropdown_menu.data('original-menu', dropdown_menu);
+			dropdown_menu.css('position', 'relative');
+			dropdown_menu.css('display', 'none');
+			var currtargetTop;
+			var currtargetLeft;
+			var ftop = 'auto';
+			var fbottom = 'auto';
+
+			var ctop = container.offset().top;
+			currtargetTop = dropdown.offset().top-ctop+dropdown.height()+100;
+			currtargetLeft = dropdown.offset().left-15;
+			var dropdownftop = dropdown.position().top-dropdown_menu.height()+dropdown.height()+100;
+			var windowBottom = jQuery(window).height()-dropdown.offset().top;
+			if (windowBottom < 250) {
+				ftop = dropdownftop+'px';
+				fbottom = 'auto';
+			} else {
+				ftop = currtargetTop+'px';
+				fbottom = "auto";
+			}
+			fixed_dropdown_menu.css({
+				'display': 'block',
+				'position': 'absolute',
+				'top': ftop,
+				'left': currtargetLeft+'px',
+				'bottom': fbottom
+			}).appendTo(containerTarget);
+
+			dropdown.on('hidden.bs.getListViewContainerdropdown', function () {
+				dropdown_menu.removeClass('invisible');
+				fixed_dropdown_menu.remove();
+			});
+		});
+	},
+	registerEvents: function () {
+		this.registerPageNavigationEvents();
+		this.registerListViewSort();
+		this.registerEventToShowQuickPreview();
+		this.registerStarToggle();
+		this.registerRemoveListViewSort();
+		this.registerRowClickEvent();
+		this.registerEditLink();
+		this.registerDropdownPosition();
+	}
+});
diff --git a/layouts/v7/modules/Vtiger/resources/Vtiger.js b/layouts/v7/modules/Vtiger/resources/Vtiger.js
index 9d895e72f..cde4a443e 100644
--- a/layouts/v7/modules/Vtiger/resources/Vtiger.js
+++ b/layouts/v7/modules/Vtiger/resources/Vtiger.js
@@ -314,13 +314,7 @@ Vtiger.Class('Vtiger_Index_Js', {
 	},
 
 	addComponents : function() {
-		var basicSearchClassName = 'Vtiger_BasicSearch_Js';
-		var textsearchClassName = 'TextSearch_BasicSearch_Js';
-		if(typeof window[textsearchClassName] != "undefined") {
-			this.addComponent(textsearchClassName);
-		} else{
-			this.addComponent(basicSearchClassName);
-		}
+		this.addComponent('Vtiger_BasicSearch_Js');
 	},
 
 	registerListEssentialsToggleEvent : function() {
@@ -1396,6 +1390,15 @@ Vtiger.Class('Vtiger_Index_Js', {
 			};
 			jQuery('#helpPageOverlay').css({"width": "870px", "box-shadow": "-8px 0 5px -5px lightgrey", 'height': '100vh', 'background': 'white'});
 			app.helper.loadHelpPageOverlay(response, params);
+			var params = {
+				setHeight: "100%",
+				alwaysShowScrollbar: 2,
+				autoExpandScrollbar: true,
+				setTop: 0,
+				scrollInertia: 70,
+				mouseWheel: {preventDefault: true}
+			};
+			app.helper.showVerticalScroll(jQuery('.quickPreview .modal-body'), params);
 		});
 	},
 
@@ -1447,7 +1450,7 @@ Vtiger.Class('Vtiger_Index_Js', {
 
 	showQuickPreviewForId: function(recordId, moduleName, appName, templateId, isReference, mode) {
 		var self = this;
-		if(self.isInventoryModule(moduleName) && moduleName != 'Subscription') {
+		if(self.isInventoryModule(moduleName)) {
 			self._showInventoryQuickPreviewForId(recordId, moduleName, templateId, isReference, mode);
 		} else {
 			self._showQuickPreviewForId(recordId, moduleName, appName, isReference);
diff --git a/modules/Vtiger/views/ListAjax.php b/modules/Vtiger/views/ListAjax.php
index a5cf075e1..e39f16ab1 100644
--- a/modules/Vtiger/views/ListAjax.php
+++ b/modules/Vtiger/views/ListAjax.php
@@ -17,6 +17,8 @@ class Vtiger_ListAjax_View extends Vtiger_List_View {
 		$this->exposeMethod('getPageCount');
 		$this->exposeMethod('showSearchResults');
 		$this->exposeMethod('ShowListColumnsEdit');
+		$this->exposeMethod('showSearchResultsWithValue');
+		$this->exposeMethod('searchAll');
 	}
 
 	function preProcess(Vtiger_Request $request) {
@@ -95,4 +97,116 @@ class Vtiger_ListAjax_View extends Vtiger_List_View {
 		$viewer->assign('MODULE',$moduleName);
 		$viewer->view('ListColumnsEdit.tpl',$moduleName);
 	}
+
+	public function searchAll(Vtiger_Request $request) {
+		$moduleName = $request->getModule();
+		$searchValue = $request->get('value');
+		$searchModule = $request->get('searchModule');
+
+		$range = array();
+		$range['start'] = 0;
+
+		$pageLimit = $this->getGlobalSearchPageLimit();
+		$pagingModel = new Vtiger_Paging_Model();
+		$pagingModel->set('range', $range);
+		$pagingModel->set('limit', $pageLimit-1);
+
+		$searchableModules = Vtiger_Module_Model::getSearchableModules();
+		$matchingRecords = array();
+		foreach ($searchableModules as $searchModule => $searchModuleModel) {
+			$searchedRecords = Vtiger_Record_Model::getSearchResult($searchValue, $searchModule);
+			if ($searchedRecords[$searchModule]) {
+				$matchingRecords[$searchModule] = $searchedRecords[$searchModule];
+			}
+		}
+
+		$matchingRecordsList = array();
+		foreach ($matchingRecords as $module => $recordModelsList) {
+			$recordsCount = count($recordModelsList);
+			$recordModelsList = array_keys($recordModelsList);
+			$recordModelsList = array_slice($recordModelsList, 0, $pageLimit);
+
+			$customView = new CustomView();
+			$cvId = $customView->getViewIdByName('All', $module);
+
+			$listViewModel = Vtiger_ListView_Model::getInstance($module, $cvId);
+			$listViewModel->listViewHeaders = $listViewModel->getListViewHeaders();
+			$listViewModel->set('pageNumber', 1);
+
+			$listviewPagingModel = clone $pagingModel;
+			$listviewPagingModel->calculatePageRange($recordModelsList);
+			$listViewModel->pagingModel = $listviewPagingModel;
+			$listViewModel->recordsCount = $recordsCount;
+
+			if (count($recordModelsList) == $pageLimit) {
+				array_pop($recordModelsList);
+			}
+
+			$listViewEntries = array();
+			foreach ($recordModelsList as $recordId) {
+				$recordModel = Vtiger_Record_Model::getInstanceById($recordId, $listViewModel->getModule());
+				$recordModel->setRawData($recordModel->getData());
+
+				foreach ($listViewModel->listViewHeaders as $fieldName => $fieldModel) {
+					$recordModel->set($fieldName, $fieldModel->getDisplayValue($recordModel->get($fieldName)));
+				}
+				$listViewModel->listViewEntries[$recordId] = $recordModel;
+			}
+			$matchingRecordsList[$module] = $listViewModel;
+		}
+
+		$viewer = $this->getViewer($request);
+		$viewer->assign('SEARCH_VALUE', $searchValue);
+		$viewer->assign('PAGE_NUMBER', 1);
+		$viewer->assign('MATCHING_RECORDS', $matchingRecordsList);
+		$viewer->assign('CURRENT_USER_MODEL', Users_Record_Model::getCurrentUserModel());
+
+		echo $viewer->view('SearchResults.tpl', '', true);
+	}
+
+	public function showSearchResultsWithValue(Vtiger_Request $request) {
+		$moduleName = $request->getModule();
+		$pageNumber = $request->get('page');
+		$searchValue = $request->get('value');
+		$recordsCount = $request->get('recordsCount');
+
+		$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
+		$nameFields = $moduleModel->getNameFields();
+		$params = array();
+		foreach ($nameFields as $fieldName) {
+			$params[] = array($fieldName, 'c', $searchValue);
+		}
+		$searchParams[] = array();
+		$searchParams[] = $params;
+		$request->set('search_params', $searchParams);
+		$request->set('orderby', $moduleModel->basetableid);
+
+		$pageLimit = $this->getGlobalSearchPageLimit();
+		$pagingModel = new Vtiger_Paging_Model();
+		$pagingModel->set('limit', $pageLimit-1);
+		$pagingModel->set('page', $pageNumber);
+
+		$range = array();
+		$previousPageRecordCount = (($pageNumber-1)*$pageLimit);
+		$range['start'] = $previousPageRecordCount+1;
+		$range['end'] = $previousPageRecordCount+$pageLimit;
+		$pagingModel->set('range', $range);
+		$this->pagingModel = $pagingModel;
+
+		$customView = new CustomView();
+		$this->viewName = $customView->getViewIdByName('All', $moduleName);
+
+		$viewer = $this->getViewer($request);
+		$this->initializeListViewContents($request, $viewer);
+
+		$viewer->assign('VIEW', $request->get('view'));
+		$viewer->assign('MODULE_MODEL', $moduleModel);
+		$viewer->assign('RECORDS_COUNT', $recordsCount);
+		$viewer->assign('CURRENT_USER_MODEL', Users_Record_Model::getCurrentUserModel());
+		$viewer->view('ModuleSearchResults.tpl', $moduleName);
+	}
+
+	public function getGlobalSearchPageLimit() {
+		return 11;
+	}
 }
\ No newline at end of file
diff --git a/pkg/vtiger/modules/Projects/Project/layouts/v7/modules/Project/SummaryViewWidgets.tpl b/pkg/vtiger/modules/Projects/Project/layouts/v7/modules/Project/SummaryViewWidgets.tpl
index 27f3042bd..df30c1aa0 100644
--- a/pkg/vtiger/modules/Projects/Project/layouts/v7/modules/Project/SummaryViewWidgets.tpl
+++ b/pkg/vtiger/modules/Projects/Project/layouts/v7/modules/Project/SummaryViewWidgets.tpl
@@ -1,255 +1,247 @@
-{*<!--
-/*********************************************************************************
-** The contents of this file are subject to the vtiger CRM Public License Version 1.0
+{*+**********************************************************************************
+* The contents of this file are subject to the vtiger CRM Public License Version 1.1
 * ("License"); You may not use this file except in compliance with the License
-* The Original Code is:  vtiger CRM Open Source
+* The Original Code is: vtiger CRM Open Source
 * The Initial Developer of the Original Code is vtiger.
 * Portions created by vtiger are Copyright (C) vtiger.
 * All Rights Reserved.
-*
-********************************************************************************/
--->*}
-{strip}
-    {foreach item=DETAIL_VIEW_WIDGET from=$DETAILVIEW_LINKS['DETAILVIEWWIDGET']}
-        {if ($DETAIL_VIEW_WIDGET->getLabel() eq 'Documents') }
-            {assign var=DOCUMENT_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
-        {elseif ($DETAIL_VIEW_WIDGET->getLabel() eq 'LBL_MILESTONES')}
-            {assign var=MILESTONE_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
-        {elseif ($DETAIL_VIEW_WIDGET->getLabel() eq 'HelpDesk')}
-            {assign var=HELPDESK_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
-        {elseif ($DETAIL_VIEW_WIDGET->getLabel() eq 'LBL_TASKS')}
-            {assign var=TASKS_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
-        {elseif ($DETAIL_VIEW_WIDGET->getLabel() eq 'ModComments')}
-            {assign var=COMMENTS_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
-        {elseif ($DETAIL_VIEW_WIDGET->getLabel() eq 'LBL_UPDATES')}
-            {assign var=UPDATES_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
-        {/if}
-    {/foreach}
-
-    <div class="left-block col-lg-4 col-md-4 col-sm-4">
-        <div class="summaryView">
-            <div class="summaryViewHeader" style="margin-bottom: 15px;">
-                <h4 class="display-inline-block">{vtranslate('LBL_KEY_METRICS', $MODULE_NAME)}</h4>
-            </div>
-            <div class="summaryViewFields">
-                {foreach item=SUMMARY_CATEGORY from=$SUMMARY_INFORMATION}
-                    <div class="row textAlignCenter roundedCorners">
-                        {foreach key=FIELD_NAME item=FIELD_VALUE from=$SUMMARY_CATEGORY}
-                            <div class="col-lg-3">
-                                <div class="well" style="min-height: 125px; padding-left: 0px; padding-right: 0px;">
-                                    <div>
-                                        <label class="font-x-small">
-                                            {vtranslate($FIELD_NAME,$MODULE_NAME)}
-                                        </label>
-                                    </div>
-                                    <div>
-                                        <label class="font-x-x-large">
-                                            {if !empty($FIELD_VALUE)}{$FIELD_VALUE}{else}0{/if}
-                                        </label>
-                                    </div>
-                                </div>
-                            </div>
-                        {/foreach}
-                    </div>
-                {/foreach}
-            </div>
-        </div>
-        {* Module Summary View*}
-        <div class="summaryView">
-            <div class="summaryViewHeader">
-                <h4 class="display-inline-block">{vtranslate('LBL_KEY_FIELDS', $MODULE_NAME)}</h4>
-            </div>
-            <div class="summaryViewFields">
-                {$MODULE_SUMMARY}
-            </div>
-        </div>
-        {* Module Summary View Ends Here*}
-
-        {* Summary View Documents Widget*}
-        {if $DOCUMENT_WIDGET_MODEL}
-            <div class="summaryWidgetContainer">
-                <div class="widgetContainer_documents" data-url="{$DOCUMENT_WIDGET_MODEL->getUrl()}" data-name="{$DOCUMENT_WIDGET_MODEL->getLabel()}">
-                    <div class="widget_header clearfix">
-                        <input type="hidden" name="relatedModule" value="{$DOCUMENT_WIDGET_MODEL->get('linkName')}" />
-                        <span class="toggleButton pull-left"><i class="fa fa-angle-down"></i>&nbsp;&nbsp;</span>
-                        <h4 class="display-inline-block pull-left">{vtranslate($DOCUMENT_WIDGET_MODEL->getLabel(),$MODULE_NAME)}</h4>
+*************************************************************************************}
 
-                        {if $DOCUMENT_WIDGET_MODEL->get('action')}
-                            {assign var=PARENT_ID value=$RECORD->getId()}
-                            <div class="pull-right">
-                                <div class="dropdown">
-                                    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
-                                        <span class="fa fa-plus" title="{vtranslate('LBL_NEW_DOCUMENT', $MODULE_NAME)}"></span>&nbsp;{vtranslate('LBL_NEW_DOCUMENT', 'Documents')}&nbsp; <span class="caret"></span>
-                                    </button>
-                                    <ul class="dropdown-menu">
-                                        <li class="dropdown-header"><i class="fa fa-upload"></i> {vtranslate('LBL_FILE_UPLOAD', 'Documents')}</li>
-                                        <li id="VtigerAction">
-                                            <a href="javascript:Documents_Index_Js.uploadTo('Vtiger',{$PARENT_ID},'{$MODULE_NAME}')">
-                                                <img style="  margin-top: -3px;margin-right: 4%;" title="Vtiger" alt="Vtiger" src="layouts/v7/skins//images/Vtiger.png">
-                                                {vtranslate('LBL_TO_SERVICE', 'Documents', {vtranslate('LBL_VTIGER', 'Documents')})}
-                                            </a>
-                                        </li>
-                                        <li role="separator" class="divider"></li>
-                                        <li class="dropdown-header"><i class="fa fa-link"></i> {vtranslate('LBL_LINK_EXTERNAL_DOCUMENT', 'Documents')}</li>
-                                        <li id="shareDocument"><a href="javascript:Documents_Index_Js.createDocument('E',{$PARENT_ID},'{$MODULE_NAME}')">&nbsp;<i class="fa fa-external-link"></i>&nbsp;&nbsp; {vtranslate('LBL_FROM_SERVICE', 'Documents', {vtranslate('LBL_FILE_URL', 'Documents')})}</a></li>
-                                        <li role="separator" class="divider"></li>
-                                        <li id="createDocument"><a href="javascript:Documents_Index_Js.createDocument('W',{$PARENT_ID},'{$MODULE_NAME}')"><i class="fa fa-file-text"></i> {vtranslate('LBL_CREATE_NEW', 'Documents', {vtranslate('SINGLE_Documents', 'Documents')})}</a></li>
-                                    </ul>
-                                </div>
-                            </div>
-                        {/if}
-                    </div>
-                    <div class="widget_contents">
-
-                    </div>
-                </div>
-            </div>
-        {/if}
-        {* Summary View Documents Widget Ends Here*}
+{strip}
+	{foreach item=DETAIL_VIEW_WIDGET from=$DETAILVIEW_LINKS['DETAILVIEWWIDGET']}
+		{if ($DETAIL_VIEW_WIDGET->getLabel() eq 'Documents') }
+			{assign var=DOCUMENT_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
+		{elseif ($DETAIL_VIEW_WIDGET->getLabel() eq 'LBL_MILESTONES')}
+			{assign var=MILESTONE_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
+		{elseif ($DETAIL_VIEW_WIDGET->getLabel() eq 'HelpDesk')}
+			{assign var=HELPDESK_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
+		{elseif ($DETAIL_VIEW_WIDGET->getLabel() eq 'LBL_TASKS')}
+			{assign var=TASKS_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
+		{elseif ($DETAIL_VIEW_WIDGET->getLabel() eq 'ModComments')}
+			{assign var=COMMENTS_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
+		{elseif ($DETAIL_VIEW_WIDGET->getLabel() eq 'LBL_UPDATES')}
+			{assign var=UPDATES_WIDGET_MODEL value=$DETAIL_VIEW_WIDGET}
+		{/if}
+	{/foreach}
 
-    </div>
+	<div class="left-block col-lg-4 col-md-4 col-sm-4">
+		<div class="summaryView">
+			<div class="summaryViewHeader" style="margin-bottom: 15px;">
+				<h4 class="display-inline-block">{vtranslate('LBL_KEY_METRICS', $MODULE_NAME)}</h4>
+			</div>
+			<div class="summaryViewFields">
+				{foreach item=SUMMARY_CATEGORY from=$SUMMARY_INFORMATION}
+					<div class="row textAlignCenter roundedCorners">
+						{foreach key=FIELD_NAME item=FIELD_VALUE from=$SUMMARY_CATEGORY}
+							<div class="col-lg-3">
+								<div class="well" style="min-height: 125px; padding-left: 0px; padding-right: 0px;">
+									<div>
+										<label class="font-x-small">
+											{vtranslate($FIELD_NAME,$MODULE_NAME)}
+										</label>
+									</div>
+									<div>
+										<label class="font-x-x-large">
+											{if !empty($FIELD_VALUE)}{$FIELD_VALUE}{else}0{/if}
+										</label>
+									</div>
+								</div>
+							</div>
+						{/foreach}
+					</div>
+				{/foreach}
+			</div>
+		</div>
+		{* Module Summary View*}
+		<div class="summaryView">
+			<div class="summaryViewHeader">
+				<h4 class="display-inline-block">{vtranslate('LBL_KEY_FIELDS', $MODULE_NAME)}</h4>
+			</div>
+			<div class="summaryViewFields">
+				{$MODULE_SUMMARY}
+			</div>
+		</div>
+		{* Module Summary View Ends Here*}
 
-    <div class="middle-block col-lg-4 col-md-4 col-sm-4">
-        {* Summary View Comments Widget*}
-        {if $COMMENTS_WIDGET_MODEL}
-            <div class="summaryWidgetContainer">
-                <div class="widgetContainer_comments" data-url="{$COMMENTS_WIDGET_MODEL->getUrl()}" data-name="{$COMMENTS_WIDGET_MODEL->getLabel()}">
-                    <div class="widget_header">
-                        <input type="hidden" name="relatedModule" value="{$COMMENTS_WIDGET_MODEL->get('linkName')}" />
-                        <h4 class="display-inline-block">{vtranslate($COMMENTS_WIDGET_MODEL->getLabel(),$MODULE_NAME)}</h4>
-                    </div>
-                    <div class="widget_contents">
-                    </div>
-                </div>
-            </div>
-        {/if}
-        {* Summary View Comments Widget Ends Here*}
+		{* Summary View Documents Widget*}
+		{if $DOCUMENT_WIDGET_MODEL}
+			<div class="summaryWidgetContainer">
+				<div class="widgetContainer_documents" data-url="{$DOCUMENT_WIDGET_MODEL->getUrl()}" data-name="{$DOCUMENT_WIDGET_MODEL->getLabel()}">
+					<div class="widget_header clearfix">
+						<input type="hidden" name="relatedModule" value="{$DOCUMENT_WIDGET_MODEL->get('linkName')}" />
+						<span class="toggleButton pull-left"><i class="fa fa-angle-down"></i>&nbsp;&nbsp;</span>
+						<h4 class="display-inline-block pull-left">{vtranslate($DOCUMENT_WIDGET_MODEL->getLabel(),$MODULE_NAME)}</h4>
 
-    </div>
+						{if $DOCUMENT_WIDGET_MODEL->get('action')}
+							{assign var=PARENT_ID value=$RECORD->getId()}
+							<div class="pull-right">
+								<div class="dropdown">
+									<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
+										<span class="fa fa-plus" title="{vtranslate('LBL_NEW_DOCUMENT', $MODULE_NAME)}"></span>&nbsp;{vtranslate('LBL_NEW_DOCUMENT', 'Documents')}&nbsp; <span class="caret"></span>
+									</button>
+									<ul class="dropdown-menu">
+										<li class="dropdown-header"><i class="fa fa-upload"></i> {vtranslate('LBL_FILE_UPLOAD', 'Documents')}</li>
+										<li id="VtigerAction">
+											<a href="javascript:Documents_Index_Js.uploadTo('Vtiger',{$PARENT_ID},'{$MODULE_NAME}')">
+												<img style="  margin-top: -3px;margin-right: 4%;" title="Vtiger" alt="Vtiger" src="layouts/v7/skins//images/Vtiger.png">
+												{vtranslate('LBL_TO_SERVICE', 'Documents', {vtranslate('LBL_VTIGER', 'Documents')})}
+											</a>
+										</li>
+										<li role="separator" class="divider"></li>
+										<li class="dropdown-header"><i class="fa fa-link"></i> {vtranslate('LBL_LINK_EXTERNAL_DOCUMENT', 'Documents')}</li>
+										<li id="shareDocument"><a href="javascript:Documents_Index_Js.createDocument('E',{$PARENT_ID},'{$MODULE_NAME}')">&nbsp;<i class="fa fa-external-link"></i>&nbsp;&nbsp; {vtranslate('LBL_FROM_SERVICE', 'Documents', {vtranslate('LBL_FILE_URL', 'Documents')})}</a></li>
+										<li role="separator" class="divider"></li>
+										<li id="createDocument"><a href="javascript:Documents_Index_Js.createDocument('W',{$PARENT_ID},'{$MODULE_NAME}')"><i class="fa fa-file-text"></i> {vtranslate('LBL_CREATE_NEW', 'Documents', {vtranslate('SINGLE_Documents', 'Documents')})}</a></li>
+									</ul>
+								</div>
+							</div>
+						{/if}
+					</div>
+					<div class="widget_contents">
+					</div>
+				</div>
+			</div>
+		{/if}
+		{* Summary View Documents Widget Ends Here*}
+	</div>
 
-    <div class="right-block col-lg-4 col-md-4 col-sm-4">
+	<div class="middle-block col-lg-4 col-md-4 col-sm-4">
+		{* Summary View Comments Widget*}
+		{if $COMMENTS_WIDGET_MODEL}
+			<div class="summaryWidgetContainer">
+				<div class="widgetContainer_comments" data-url="{$COMMENTS_WIDGET_MODEL->getUrl()}" data-name="{$COMMENTS_WIDGET_MODEL->getLabel()}">
+					<div class="widget_header">
+						<input type="hidden" name="relatedModule" value="{$COMMENTS_WIDGET_MODEL->get('linkName')}" />
+						<h4 class="display-inline-block">{vtranslate($COMMENTS_WIDGET_MODEL->getLabel(),$MODULE_NAME)}</h4>
+					</div>
+					<div class="widget_contents">
+					</div>
+				</div>
+			</div>
+		{/if}
+		{* Summary View Comments Widget Ends Here*}
+	</div>
 
-        {* Summary View Contacts Widget *}
-        {if $HELPDESK_WIDGET_MODEL}
-            <div class="summaryWidgetContainer">
-                <div class="widgetContainer_troubleTickets" data-url="{$HELPDESK_WIDGET_MODEL->getUrl()}" data-name="{$HELPDESK_WIDGET_MODEL->getLabel()}">
-                    <div class="widget_header clearfix">
-                        <input type="hidden" name="relatedModule" value="{$HELPDESK_WIDGET_MODEL->get('linkName')}" />
-                        <span class="toggleButton pull-left"><i class="fa fa-angle-down"></i>&nbsp;&nbsp;</span>
-                        <h4 class="display-inline-block pull-left">{vtranslate($HELPDESK_WIDGET_MODEL->getLabel(),$MODULE_NAME)}</h4>
+	<div class="right-block col-lg-4 col-md-4 col-sm-4">
 
-                        {if $HELPDESK_WIDGET_MODEL->get('action')}
-                            <div class="pull-right">
-                                <button class="btn addButton btn-default btn-sm createRecord" type="button" data-url="{$HELPDESK_WIDGET_MODEL->get('actionURL')}">
-                                    <i class="fa fa-plus"></i>&nbsp;&nbsp;{vtranslate('LBL_ADD',$MODULE_NAME)}
-                                </button>
-                            </div>
-                        </div>
-                        <div class="clearfix">
-                            <div class="pull-left">
-                                {assign var=RELATED_MODULE_MODEL value=Vtiger_Module_Model::getInstance('HelpDesk')}
-                                {assign var=FIELD_MODEL value=$RELATED_MODULE_MODEL->getField('ticketstatus')}
-                                {assign var="FIELD_INFO" value=Zend_Json::encode($FIELD_MODEL->getFieldInfo())}
-                                {assign var=PICKLIST_VALUES value=$FIELD_MODEL->getPicklistValues()}
-                                {assign var="SPECIAL_VALIDATOR" value=$FIELD_MODEL->getValidator()}
-                                <select class="select2" name="{$FIELD_MODEL->get('name')}" data-validation-engine="validate[{if $FIELD_MODEL->isMandatory() eq true} required,{/if}funcCall[Vtiger_Base_Validator_Js.invokeValidation]]" data-fieldinfo='{$FIELD_INFO|escape}' {if !empty($SPECIAL_VALIDATOR)}data-validator='{Zend_Json::encode($SPECIAL_VALIDATOR)}'{/if} >
-                                    <option value="">{vtranslate('LBL_SELECT_STATUS',$MODULE_NAME)}</option>
-                                    {foreach item=PICKLIST_VALUE key=PICKLIST_NAME from=$PICKLIST_VALUES}
-                                        <option value="{$PICKLIST_NAME}" {if $FIELD_MODEL->get('fieldvalue') eq $PICKLIST_NAME} selected {/if}>{$PICKLIST_VALUE}</option>
-                                    {/foreach}
-                                </select>
-                            </div>
-                        </div>
-                    {/if}
-                    <div class="widget_contents">
-                    </div>
-                </div>
-            </div>
-        {/if}
-        {* Summary View Contacts Widget Ends Here *}
+		{* Summary View Contacts Widget *}
+		{if $HELPDESK_WIDGET_MODEL}
+			<div class="summaryWidgetContainer">
+				<div class="widgetContainer_troubleTickets" data-url="{$HELPDESK_WIDGET_MODEL->getUrl()}" data-name="{$HELPDESK_WIDGET_MODEL->getLabel()}">
+					<div class="widget_header clearfix">
+						<input type="hidden" name="relatedModule" value="{$HELPDESK_WIDGET_MODEL->get('linkName')}" />
+						<span class="toggleButton pull-left"><i class="fa fa-angle-down"></i>&nbsp;&nbsp;</span>
+						<h4 class="display-inline-block pull-left">{vtranslate($HELPDESK_WIDGET_MODEL->getLabel(),$MODULE_NAME)}</h4>
 
-        {* Summary View Contacts Widget *}
-        {if $MILESTONE_WIDGET_MODEL}
-            <div class="summaryWidgetContainer">
-                <div class="widgetContainer_mileStone" data-url="{$MILESTONE_WIDGET_MODEL->getUrl()}" data-name="{$MILESTONE_WIDGET_MODEL->getLabel()}">
-                    <div class="widget_header clearfix">
-                        <input type="hidden" name="relatedModule" value="{$MILESTONE_WIDGET_MODEL->get('linkName')}" />
-                        <span class="toggleButton pull-left"><i class="fa fa-angle-down"></i>&nbsp;&nbsp;</span>
-                        <h4 class="display-inline-block pull-left">{vtranslate($MILESTONE_WIDGET_MODEL->getLabel(),$MODULE_NAME)}</h4>
+						{if $HELPDESK_WIDGET_MODEL->get('action')}
+							<div class="pull-right">
+								<button class="btn addButton btn-default btn-sm createRecord" type="button" data-url="{$HELPDESK_WIDGET_MODEL->get('actionURL')}">
+									<i class="fa fa-plus"></i>&nbsp;&nbsp;{vtranslate('LBL_ADD',$MODULE_NAME)}
+								</button>
+							</div>
+						{/if}
+					</div>
+					<div class="clearfix">
+						<div class="widget_filter clearfix">
+							<div class="pull-left">
+								{assign var=RELATED_MODULE_MODEL value=Vtiger_Module_Model::getInstance('HelpDesk')}
+								{assign var=FIELD_MODEL value=$RELATED_MODULE_MODEL->getField('ticketstatus')}
+								{assign var="FIELD_INFO" value=Zend_Json::encode($FIELD_MODEL->getFieldInfo())}
+								{assign var=PICKLIST_VALUES value=$FIELD_MODEL->getPicklistValues()}
+								{assign var="SPECIAL_VALIDATOR" value=$FIELD_MODEL->getValidator()}
+								<select class="select2" name="{$FIELD_MODEL->get('name')}" data-validation-engine="validate[{if $FIELD_MODEL->isMandatory() eq true} required,{/if}funcCall[Vtiger_Base_Validator_Js.invokeValidation]]" data-fieldinfo='{$FIELD_INFO|escape}' {if !empty($SPECIAL_VALIDATOR)}data-validator='{Zend_Json::encode($SPECIAL_VALIDATOR)}'{/if} >
+									<option value="">{vtranslate('LBL_SELECT_STATUS',$MODULE_NAME)}</option>
+									{foreach item=PICKLIST_VALUE key=PICKLIST_NAME from=$PICKLIST_VALUES}
+										<option value="{$PICKLIST_NAME}" {if $FIELD_MODEL->get('fieldvalue') eq $PICKLIST_NAME} selected {/if}>{$PICKLIST_VALUE}</option>
+									{/foreach}
+								</select>
+							</div>
+						</div>
+					</div>
+					<div class="widget_contents"></div>
+				</div>
+			</div>
+		{/if}
+		{* Summary View Contacts Widget Ends Here *}
 
-                        {if $MILESTONE_WIDGET_MODEL->get('action')}
-                            <div class="pull-right">
-                                <button class="btn addButton btn-sm btn-default createRecord"  id="createProjectMileStone" type="button" data-url="{$MILESTONE_WIDGET_MODEL->get('actionURL')}">
-                                    <i class="fa fa-plus"></i>&nbsp;&nbsp;{vtranslate('LBL_ADD',$MODULE_NAME)}
-                                </button>
-                            </div>
-                        {/if}
-                    </div>
-                    <div class="widget_contents">
-                    </div>
-                </div>
-            </div>
-        {/if}
-        {* Summary View Contacts Widget Ends Here *}
+		{* Summary View Contacts Widget *}
+		{if $MILESTONE_WIDGET_MODEL}
+			<div class="summaryWidgetContainer">
+				<div class="widgetContainer_mileStone" data-url="{$MILESTONE_WIDGET_MODEL->getUrl()}" data-name="{$MILESTONE_WIDGET_MODEL->getLabel()}">
+					<div class="widget_header clearfix">
+						<input type="hidden" name="relatedModule" value="{$MILESTONE_WIDGET_MODEL->get('linkName')}" />
+						<span class="toggleButton pull-left"><i class="fa fa-angle-down"></i>&nbsp;&nbsp;</span>
+						<h4 class="display-inline-block pull-left">{vtranslate($MILESTONE_WIDGET_MODEL->getLabel(),$MODULE_NAME)}</h4>
 
-        {* Summary View Contacts Widget *}
-        {if $TASKS_WIDGET_MODEL}
-            {assign var=RELATED_MODULE_MODEL value=Vtiger_Module_Model::getInstance('ProjectTask')}
-            {assign var=PROGRESS_FIELD_MODEL value=$RELATED_MODULE_MODEL->getField('projecttaskprogress')}
-            {assign var=STATUS_FIELD_MODEL value=$RELATED_MODULE_MODEL->getField('projecttaskstatus')}
-            <div class="summaryWidgetContainer">
-                <div class="widgetContainer_tasks" data-url="{$TASKS_WIDGET_MODEL->getUrl()}" data-name="{$TASKS_WIDGET_MODEL->getLabel()}">
-                    <div class="widget_header clearfix">
-                        <input type="hidden" name="relatedModule" value="{$TASKS_WIDGET_MODEL->get('linkName')}" />
-                        <span class="toggleButton pull-left"><i class="fa fa-angle-down"></i>&nbsp;&nbsp;</span>
-                        <h4 class="display-inline-block pull-left">{vtranslate($TASKS_WIDGET_MODEL->getLabel(),$MODULE_NAME)}</h4>
+						{if $MILESTONE_WIDGET_MODEL->get('action')}
+							<div class="pull-right">
+								<button class="btn addButton btn-sm btn-default createRecord"  id="createProjectMileStone" type="button" data-url="{$MILESTONE_WIDGET_MODEL->get('actionURL')}">
+									<i class="fa fa-plus"></i>&nbsp;&nbsp;{vtranslate('LBL_ADD',$MODULE_NAME)}
+								</button>
+							</div>
+						{/if}
+					</div>
+					<div class="widget_contents"></div>
+				</div>
+			</div>
+		{/if}
+		{* Summary View Contacts Widget Ends Here *}
 
-                        {if $TASKS_WIDGET_MODEL->get('action')}
-                            <div class="pull-right">
-                                <button class="btn addButton btn-sm btn-default createRecord" id="createProjectTask" type="button" data-url="{$TASKS_WIDGET_MODEL->get('actionURL')}">
-                                    <i class="fa fa-plus"></i>&nbsp;&nbsp;{vtranslate('LBL_ADD',$MODULE_NAME)}
-                                </button>
-                            </div>
-                        {/if}
-                         </div>
-                        <div class="clearfix">
-                        <div class="widget_filter clearfix">
-                    {if $PROGRESS_FIELD_MODEL->isViewableInDetailView()}
-                                    <div class="pull-left marginRight15">
-                                        {assign var="FIELD_INFO" value=Zend_Json::encode($PROGRESS_FIELD_MODEL->getFieldInfo())}
-                                        {assign var=PICKLIST_VALUES value=$PROGRESS_FIELD_MODEL->getPicklistValues()}
-                                        {assign var="SPECIAL_VALIDATOR" value=$PROGRESS_FIELD_MODEL->getValidator()}
-                                        <select class="select2" name="{$PROGRESS_FIELD_MODEL->get('name')}" data-validation-engine="validate[{if $PROGRESS_FIELD_MODEL->isMandatory() eq true} required,{/if}funcCall[Vtiger_Base_Validator_Js.invokeValidation]]" data-fieldinfo='{$FIELD_INFO|escape}' {if !empty($SPECIAL_VALIDATOR)}data-validator='{Zend_Json::encode($SPECIAL_VALIDATOR)}'{/if} >
-                                            <option value="">{vtranslate('LBL_SELECT_PROGRESS',$MODULE_NAME)}</option>
-                                            {foreach item=PICKLIST_VALUE key=PICKLIST_NAME from=$PICKLIST_VALUES}
-                                                <option value="{$PICKLIST_NAME}" {if $PROGRESS_FIELD_MODEL->get('fieldvalue') eq $PICKLIST_NAME} selected {/if}>{$PICKLIST_VALUE}</option>
-                                            {/foreach}
-                                        </select>
-                    </div>
-                               {/if}
-                        &nbsp;&nbsp;
-                                {if $STATUS_FIELD_MODEL->isViewableInDetailView()}
-                                    <div class="pull-left marginRight15">
-                                        {assign var="FIELD_INFO" value=Zend_Json::encode($STATUS_FIELD_MODEL->getFieldInfo())}
-                                        {assign var=PICKLIST_VALUES value=$STATUS_FIELD_MODEL->getPicklistValues()}
-                                        {assign var="SPECIAL_VALIDATOR" value=$STATUS_FIELD_MODEL->getValidator()}
-                                        <select class="select2" name="{$STATUS_FIELD_MODEL->get('name')}" data-validation-engine="validate[{if $STATUS_FIELD_MODEL->isMandatory() eq true} required,{/if}funcCall[Vtiger_Base_Validator_Js.invokeValidation]]" data-fieldinfo='{$FIELD_INFO|escape}' {if !empty($SPECIAL_VALIDATOR)}data-validator='{Zend_Json::encode($SPECIAL_VALIDATOR)}'{/if} >
-                                            <option value="">{vtranslate('LBL_SELECT_STATUS',$MODULE_NAME)}</option>
-                                            {foreach item=PICKLIST_VALUE key=PICKLIST_NAME from=$PICKLIST_VALUES}
-                                                <option value="{$PICKLIST_NAME}" {if $STATUS_FIELD_MODEL->get('fieldvalue') eq $PICKLIST_NAME} selected {/if}>{$PICKLIST_VALUE}</option>
-                                            {/foreach}
-                                        </select>
-                                    </div>
-                                {/if}
-                        </div>
-                    </div>
-                   
-                    <div class="widget_contents">
-                    </div>
-                </div>
-            </div>
-        {/if}
-        {* Summary View Contacts Widget Ends Here *}
-    </div>
+		{* Summary View Contacts Widget *}
+		{if $TASKS_WIDGET_MODEL}
+			{assign var=RELATED_MODULE_MODEL value=Vtiger_Module_Model::getInstance('ProjectTask')}
+			{assign var=PROGRESS_FIELD_MODEL value=$RELATED_MODULE_MODEL->getField('projecttaskprogress')}
+			{assign var=STATUS_FIELD_MODEL value=$RELATED_MODULE_MODEL->getField('projecttaskstatus')}
+			<div class="summaryWidgetContainer">
+				<div class="widgetContainer_tasks" data-url="{$TASKS_WIDGET_MODEL->getUrl()}" data-name="{$TASKS_WIDGET_MODEL->getLabel()}">
+					<div class="widget_header clearfix">
+						<input type="hidden" name="relatedModule" value="{$TASKS_WIDGET_MODEL->get('linkName')}" />
+						<span class="toggleButton pull-left"><i class="fa fa-angle-down"></i>&nbsp;&nbsp;</span>
+						<h4 class="display-inline-block pull-left">{vtranslate($TASKS_WIDGET_MODEL->getLabel(),$MODULE_NAME)}</h4>
 
+						{if $TASKS_WIDGET_MODEL->get('action')}
+							<div class="pull-right">
+								<button class="btn addButton btn-sm btn-default createRecord" id="createProjectTask" type="button" data-url="{$TASKS_WIDGET_MODEL->get('actionURL')}">
+									<i class="fa fa-plus"></i>&nbsp;&nbsp;{vtranslate('LBL_ADD',$MODULE_NAME)}
+								</button>
+							</div>
+						{/if}
+					</div>
+					<div class="clearfix">
+						<div class="widget_filter clearfix">
+							{if $PROGRESS_FIELD_MODEL->isViewableInDetailView()}
+								<div class="pull-left marginRight15">
+									{assign var="FIELD_INFO" value=Zend_Json::encode($PROGRESS_FIELD_MODEL->getFieldInfo())}
+									{assign var=PICKLIST_VALUES value=$PROGRESS_FIELD_MODEL->getPicklistValues()}
+									{assign var="SPECIAL_VALIDATOR" value=$PROGRESS_FIELD_MODEL->getValidator()}
+									<select class="select2" name="{$PROGRESS_FIELD_MODEL->get('name')}" data-validation-engine="validate[{if $PROGRESS_FIELD_MODEL->isMandatory() eq true} required,{/if}funcCall[Vtiger_Base_Validator_Js.invokeValidation]]" data-fieldinfo='{$FIELD_INFO|escape}' {if !empty($SPECIAL_VALIDATOR)}data-validator='{Zend_Json::encode($SPECIAL_VALIDATOR)}'{/if} >
+										<option value="">{vtranslate('LBL_SELECT_PROGRESS',$MODULE_NAME)}</option>
+										{foreach item=PICKLIST_VALUE key=PICKLIST_NAME from=$PICKLIST_VALUES}
+											<option value="{$PICKLIST_NAME}" {if $PROGRESS_FIELD_MODEL->get('fieldvalue') eq $PICKLIST_NAME} selected {/if}>{$PICKLIST_VALUE}</option>
+										{/foreach}
+									</select>
+								</div>
+							{/if}
+							&nbsp;&nbsp;
+							{if $STATUS_FIELD_MODEL->isViewableInDetailView()}
+								<div class="pull-left marginRight15">
+									{assign var="FIELD_INFO" value=Zend_Json::encode($STATUS_FIELD_MODEL->getFieldInfo())}
+									{assign var=PICKLIST_VALUES value=$STATUS_FIELD_MODEL->getPicklistValues()}
+									{assign var="SPECIAL_VALIDATOR" value=$STATUS_FIELD_MODEL->getValidator()}
+									<select class="select2" name="{$STATUS_FIELD_MODEL->get('name')}" data-validation-engine="validate[{if $STATUS_FIELD_MODEL->isMandatory() eq true} required,{/if}funcCall[Vtiger_Base_Validator_Js.invokeValidation]]" data-fieldinfo='{$FIELD_INFO|escape}' {if !empty($SPECIAL_VALIDATOR)}data-validator='{Zend_Json::encode($SPECIAL_VALIDATOR)}'{/if} >
+										<option value="">{vtranslate('LBL_SELECT_STATUS',$MODULE_NAME)}</option>
+										{foreach item=PICKLIST_VALUE key=PICKLIST_NAME from=$PICKLIST_VALUES}
+											<option value="{$PICKLIST_NAME}" {if $STATUS_FIELD_MODEL->get('fieldvalue') eq $PICKLIST_NAME} selected {/if}>{$PICKLIST_VALUE}</option>
+										{/foreach}
+									</select>
+								</div>
+							{/if}
+						</div>
+					</div>
+					<div class="widget_contents"></div>
+				</div>
+			</div>
+		{/if}
+		{* Summary View Contacts Widget Ends Here *}
+	</div>
 {/strip}
-- 
GitLab