From 698e17c4461df72e1fabce2e17440392f83c1799 Mon Sep 17 00:00:00 2001
From: satish <satish.dvnk@vtiger.com>
Date: Tue, 7 Feb 2017 14:03:02 +0530
Subject: [PATCH] Throws error message when event is created from quick create.

---
 .../v7/modules/Vtiger/resources/validation.js | 234 ++++++++++++------
 layouts/v7/skins/contact/style.css            |   5 +
 layouts/v7/skins/inventory/style.css          |   5 +
 layouts/v7/skins/marketing/style.css          |   5 +
 .../v7/skins/marketing_and_sales/style.css    |   5 +
 layouts/v7/skins/project/style.css            |   5 +
 layouts/v7/skins/sales/style.css              |   5 +
 layouts/v7/skins/support/style.css            |   5 +
 layouts/v7/skins/tools/style.css              |   5 +
 .../tasks/VTCreateEntityTask.inc              |   1 -
 10 files changed, 196 insertions(+), 79 deletions(-)

diff --git a/layouts/v7/modules/Vtiger/resources/validation.js b/layouts/v7/modules/Vtiger/resources/validation.js
index 8904ae4fc..adcb026a9 100644
--- a/layouts/v7/modules/Vtiger/resources/validation.js
+++ b/layouts/v7/modules/Vtiger/resources/validation.js
@@ -30,12 +30,12 @@ jQuery.validator.addMethod("datetime", function(value, element, params) {
 );
 
 jQuery.validator.addMethod("reference", function(value, element, params) {
-	   return true;
+		return true;
 	}, jQuery.validator.format("Please enter the correct date")
 );
 
 jQuery.validator.addMethod("double", function(value, element, params) {
-	   element = jQuery(element);
+		element = jQuery(element);
 
 		var groupSeparator = app.getGroupingSeparator();
 		var decimalSeparator = app.getDecimalSeparator();
@@ -46,26 +46,31 @@ jQuery.validator.addMethod("double", function(value, element, params) {
 			strippedValue = strippedValue.replace(/ /g, '');
 		}
 		if(groupSeparator === "$"){
-			fieldInfo.group_seperator="\\$"
+			groupSeparator = "\\$";
 		}
-		  //Replace all occurence of groupSeperator with ''.
+		//Replace all occurence of groupSeperator with ''.
 		var regex = new RegExp(groupSeparator,'g');
 		strippedValue = strippedValue.replace(regex, '');
 
 		if(isNaN(strippedValue)) {
 			return false;
 		}
-	   return true;
+		return true;
 	}, jQuery.validator.format(app.vtranslate('JS_PLEASE_ENTER_VALID_VALUE'))
 );
 
 
 
 jQuery.validator.addMethod("WholeNumber", function(value, element, params) {
-	   if((value % 1) != 0){
-		   return false;
-	   }
-	   return true;
+	var regex= /[+]/;
+	if(value.match(regex)){
+		return;
+
+		if((value % 1) != 0){
+			return false;
+		}
+	}
+		return true;
 	}, jQuery.validator.format(app.vtranslate('INVALID_NUMBER'))
 );
 /*
@@ -104,14 +109,14 @@ jQuery.Class('Vtiger_Validations_Helper', {
 });
 
 jQuery.validator.addMethod("greaterThanDependentField", function(value, element, params) {
-	   var helper = Vtiger_Validations_Helper.getInstance();
-	   var validatorName = 'greaterThanDependentField';
-	   if(helper.isModuleSpecificValidatorExists(validatorName)) {
-		   var validatorInstance = helper.getModuleSpecificValidatorInstance(validatorName);
-		   return validatorInstance.validate(value, element, params);
-	   }
-	   //fallback to generic validation
-	   return true;
+	var helper = Vtiger_Validations_Helper.getInstance();
+	var validatorName = 'greaterThanDependentField';
+	if(helper.isModuleSpecificValidatorExists(validatorName)) {
+		var validatorInstance = helper.getModuleSpecificValidatorInstance(validatorName);
+		return validatorInstance.validate(value, element, params);
+	}
+	//fallback to generic validation
+	return true;
 	}, jQuery.validator.format("Please enter the proper value")
 );
 */
@@ -158,13 +163,22 @@ jQuery.validator.addMethod("Calendar_greaterThanDependentField", function(value,
 jQuery.validator.addMethod("greaterThanDependentField", function(value, element, params) {
 		var result = true;
 		if(!value.length) {
-		   return result;
+			return result;
+		}
+
+		var validationMeta = this.settings.validationMeta;
+		if (typeof validationMeta != 'undefined') {
+			var meta = validationMeta;
+		} else if (typeof uimeta != 'undefined') {
+			var meta = uimeta;
+		} else {
+			var meta = quickcreate_uimeta;
 		}
 
 		var sourceField = jQuery(element);
-		var sourceFieldInfo = uimeta.field.get(sourceField.attr('name'));
+		var sourceFieldInfo = meta.field.get(sourceField.attr('name'));
 		var depFieldName = params[0];
-		var depFieldInfo = uimeta.field.get(depFieldName);
+		var depFieldInfo = meta.field.get(depFieldName);
 
 		//Remove this once uimeta cleanup is done
 		if(typeof sourceFieldInfo == 'undefined' || typeof depFieldInfo == 'undefined')
@@ -203,9 +217,15 @@ jQuery.validator.addMethod("greaterThanDependentField", function(value, element,
 		var dateFormat = app.getDateFormat();
 		var m1 = moment(value,dateFormat.toUpperCase());
 		var m2 = moment(depFieldVal,dateFormat.toUpperCase());
+
+		//To ignore validation when dependent field value is empty
+		if(depFieldVal.trim().length <= 0 ) {
+			return true;
+		}
+
 		result = m1.unix() >= m2.unix(); 
 
-	   jQuery.validator.messages.greaterThanDependentField = sourceFieldInfo.label+' '+app.vtranslate('JS_SHOULD_BE_GREATER_THAN_OR_EQUAL_TO')+' '+depFieldInfo.label+'';
+		jQuery.validator.messages.greaterThanDependentField = sourceFieldInfo.label+' '+app.vtranslate('JS_SHOULD_BE_GREATER_THAN_OR_EQUAL_TO')+' '+depFieldInfo.label+'';
 	return result;
 	}, jQuery.validator.format(app.vtranslate('JS_PLEASE_ENTER_VALID_VALUE'))
 );
@@ -227,17 +247,17 @@ jQuery.validator.addMethod("currency", function(value, element, params) {
 	var regex = new RegExp(groupSeparator,'g');
 	strippedValue = strippedValue.replace(regex, '');
 	if(isNaN(strippedValue)){
-		   return false;
+		return false;
 	}
 	if(strippedValue < 0){
 		return false;
 	}
-   return true;
-   }, jQuery.validator.format(app.vtranslate('JS_PLEASE_ENTER_VALID_VALUE'))
+	return true;
+	}, jQuery.validator.format(app.vtranslate('JS_PLEASE_ENTER_VALID_VALUE'))
 );
 
 jQuery.validator.addMethod("currencyList", function(value, element, params) {
-	   return true;
+	return true;
 	}, jQuery.validator.format("Please enter the valid value")
 );
 
@@ -257,7 +277,7 @@ jQuery.validator.addMethod("integer", function(value, element, params) {
 );
 
 jQuery.validator.addMethod("boolean", function(value, element, params) {
-	   return true;
+	return true;
 	}, jQuery.validator.format("Please enter the valid value")
 );
 
@@ -288,12 +308,16 @@ jQuery.validator.addMethod("check-filter-duplicate", function (value, element, p
 );
 
 jQuery.validator.addMethod("time", function(value, element, params) {
+		element = jQuery(element);
 		if(!value) return true;
 		try {
 			var fieldValue = value;
 			var time = fieldValue.replace(fieldValue.match(/[AP]M/i),'');
 			var timeValue = time.split(":");
-			if(timeValue.length != 2 || (isNaN(timeValue[0]) && isNaN(timeValue[1]))) {
+			var dateformat = element.data('format');
+
+			if(timeValue.length != 2 || isNaN(timeValue[0]) || isNaN(timeValue[1])
+				|| timeValue[0] > dateformat || timeValue[1] > 59) {
 				return false;
 			}
 			return true;
@@ -301,11 +325,12 @@ jQuery.validator.addMethod("time", function(value, element, params) {
 			console.log(err);
 			return false;
 		}
-	}, jQuery.validator.format("Please enter the correct date")
+	}, jQuery.validator.format(app.vtranslate('JS_PLEASE_ENTER_VALID_TIME'))
 );
 
 jQuery.validator.addMethod("email", function(value, element, params) {
-		var emailFilter = /^[_/a-zA-Z0-9*]+([!"#$%&'()*+,./:;<=>?\^_`{|}~-]?[a-zA-Z0-9/_/-])*@[a-zA-Z0-9]+([\_\-\.]?[a-zA-Z0-9]+)*\.([\-\_]?[a-zA-Z0-9])+(\.?[a-zA-Z0-9]+)?$/;
+		value = value.trim();
+		var emailFilter = /^[_/a-zA-Z0-9*]+([!"#$%&'()*+,./:;<=>?\^_`'{|}~-]?[a-zA-Z0-9/_/-])*@[a-zA-Z0-9]+([\_\.]?[a-zA-Z0-9\-]+)*\.([\-\_]?[a-zA-Z0-9])+(\.?[a-zA-Z0-9]+)?$/;
 
 		if(!value) return true;
 
@@ -317,24 +342,28 @@ jQuery.validator.addMethod("email", function(value, element, params) {
 );
 
 jQuery.validator.addMethod("multiEmails", function(value, element, params) {
-		var emailFilter = /^[_/a-zA-Z0-9*]+([!"#$%&'()*+,./:;<=>?\^_`{|}~-]?[a-zA-Z0-9/_/-])*@[a-zA-Z0-9]+([\_\-\.]?[a-zA-Z0-9]+)*\.([\-\_]?[a-zA-Z0-9])+(\.?[a-zA-Z0-9]+)?$/;
+		var emailFilter = /^[_/a-zA-Z0-9*]+([!"#$%&'()*+,./:;<=>?\^_`'{|}~-]?[a-zA-Z0-9/_/-])*@[a-zA-Z0-9]+([\_\.]?[a-zA-Z0-9\-]+)*\.([\-\_]?[a-zA-Z0-9])+(\.?[a-zA-Z0-9]+)?$/;
 
 		if(!value) return true;
-		  var fieldValuesList = value.split(',');
-		  for (var i in fieldValuesList) {
+		var fieldValuesList = value.split(',');
+		for (var i in fieldValuesList) {
 			var splittedFieldValue = fieldValuesList[i];
+			splittedFieldValue = splittedFieldValue.trim();
 			var response = emailFilter.test(splittedFieldValue);
 			if(response != true) {
-				   return false;
+				return false;
 			}
 		}
-		  return true;
+		return true;
 	}, jQuery.validator.format(app.vtranslate('JS_PLEASE_ENTER_VALID_EMAIL_ADDRESS'))
 );
 
 jQuery.validator.addMethod("illegal", function(value, element, params) {
 		var illegalChars= /[\(\)\<\>\,\;\:\\\\"\[\]\'\/\`\&]/;
-
+		//allow apostrophe
+		if (jQuery(element).attr('data-rule-email')) {
+			illegalChars = /[\(\)\<\>\,\;\:\\\\"\[\]\/\`\&]/;
+		}
 		if (value.match(illegalChars)) {
 			return false;
 		}
@@ -408,6 +437,7 @@ jQuery.validator.addMethod("phone", function(value, element, params) {
 
 jQuery.validator.addMethod("url", function(value, element, params) {
 		try {
+			value = value.trim();
 			if(!value) return true;
 
 			var regexp = /(^|\s)((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gi;
@@ -430,7 +460,7 @@ jQuery.validator.addMethod("lessThanToday", function(value, element, params) {
 				fieldDateInstance.setHours(0,0,0,0);
 				var todayDateInstance = new Date();
 				todayDateInstance.setHours(0,0,0,0);
-				var comparedDateVal =  todayDateInstance - fieldDateInstance;
+				var comparedDateVal = todayDateInstance - fieldDateInstance;
 				if(comparedDateVal <= 0){
 					return false;
 				}
@@ -451,7 +481,7 @@ jQuery.validator.addMethod("lessThanOrEqualToToday", function(value, element, pa
 				fieldDateInstance.setHours(0,0,0,0);
 				var todayDateInstance = new Date();
 				todayDateInstance.setHours(0,0,0,0);
-				var comparedDateVal =  todayDateInstance - fieldDateInstance;
+				var comparedDateVal = todayDateInstance - fieldDateInstance;
 				if(comparedDateVal < 0){
 					return false;
 				}
@@ -492,18 +522,21 @@ jQuery.validator.addMethod("lessThanDependentField", function(value, element, pa
 
 			return result; 
 		} 
-		var sourceField = jQuery(element); 
-		var sourceFieldInfo = uimeta.field.get(sourceField.attr('name')); 
-		var depFieldName = params[0];
-		var depFieldInfo = uimeta.field.get(depFieldName);
 
-		if(!sourceFieldInfo) {
-			var sourceFieldInfo = quickcreate_uimeta.field.get(sourceField.attr('name')); 
-		}
-		if(!depFieldInfo) {
-			var depFieldInfo = quickcreate_uimeta.field.get(depFieldName); 
+		var validationMeta = this.settings.validationMeta;
+		if (typeof validationMeta != 'undefined') {
+			var meta = validationMeta;
+		} else if (typeof uimeta != 'undefined') {
+			var meta = uimeta;
+		} else {
+			var meta = quickcreate_uimeta;
 		}
 
+		var sourceField = jQuery(element); 
+		var sourceFieldInfo = meta.field.get(sourceField.attr('name')); 
+		var depFieldName = params[0];
+		var depFieldInfo = meta.field.get(depFieldName);
+
 		//Remove this once uimeta cleanup is done 
 		if(typeof sourceFieldInfo == 'undefined' || typeof depFieldInfo == 'undefined') 
 			return result; 
@@ -517,19 +550,29 @@ jQuery.validator.addMethod("lessThanDependentField", function(value, element, pa
 		//eg: Perform this validation method when quick create a module record within same module 
 		//list view 
 		var closestForm = sourceField.closest('form.recordEditView').first(); 
+		var depFieldDateFormat = app.getDateFormat();
 		if(closestForm.length > 0) { 
 			var depFieldVal = closestForm.find('[name="'+depFieldName+'"]').val(); 
 		}else{ 
 			var controller = app.controller(); 
 			var depFieldVal = jQuery('.fieldBasicData').filter('[data-name="'+depFieldName+'"]').data('displayvalue');
+			//depFieldVal for date field will be in yyyy-mm-dd format. If user format is other than yyyy-mm-dd moment function
+			//generates wrong date and validation fails. For example ajax edit of Support Start Date in Contact detail view,
+			//depFieldVal will be in yyyy-mm-dd format.
+			if(depFieldVal) {
+				var depFieldValParts = depFieldVal.split('-');
+				if(depFieldValParts[0].length == 4) {
+					depFieldDateFormat = 'yyyy-mm-dd';
+				}
+			}
 		} 
 		if(typeof depFieldVal === 'undefined' || depFieldVal == '') { 
 			return result; 
 		} 
 		var dateFormat = app.getDateFormat(); 
-		var m1 = moment(value,dateFormat.toUpperCase());
-		var m2 = moment(depFieldVal,dateFormat.toUpperCase());
-		result = m1.unix() <= m2.unix();  
+		var m1 = moment(value,dateFormat.toUpperCase()); 
+		var m2 = moment(depFieldVal,depFieldDateFormat.toUpperCase()); 
+		result = m1.unix() <= m2.unix();
 
 		jQuery.validator.messages.lessThanDependentField = sourceFieldInfo.label+' '+app.vtranslate('JS_SHOULD_BE_LESS_THAN_OR_EQUAL_TO')+' '+depFieldInfo.label+''; 
 		return result; 
@@ -550,7 +593,7 @@ jQuery.validator.addMethod("futureEventCannotBeHeld", function(value, element, p
 						var time = jQuery('input[name=time_start]',formElem);
 						var fieldValue = dependentFieldInContext.val()+" "+time.val();
 						var dependentFieldDateInstance = app.helper.getDateInstance(fieldValue,dateFormat);
-						var comparedDateVal =  todayDateInstance - dependentFieldDateInstance;
+						var comparedDateVal = todayDateInstance - dependentFieldDateInstance;
 						if(comparedDateVal < 0){
 							return false;
 						}
@@ -566,23 +609,23 @@ jQuery.validator.addMethod("futureEventCannotBeHeld", function(value, element, p
 );
 
 jQuery.validator.addMethod("recurrence", function(value, element, params) {
-	   return true;
+	return true;
 	}, jQuery.validator.format("Please enter the proper value")
 );
 
 // Documents Module
 jQuery.validator.addMethod("documentsFileUpload", function(value, element, params) {
-	   return true;
+	return true;
 	}, jQuery.validator.format("Please enter the proper value")
 );
 
 jQuery.validator.addMethod("fileLocationType", function(value, element, params) {
-	   return true;
+	return true;
 	}, jQuery.validator.format("Please enter the proper value")
 );
 
 jQuery.validator.addMethod("documentsFolder", function(value, element, params) {
-	   return true;
+	return true;
 	}, jQuery.validator.format("Please enter the proper value")
 );
 
@@ -632,11 +675,16 @@ jQuery.validator.addMethod("PositiveNumber",function(value,element,params){
 }, jQuery.validator.format(app.vtranslate('JS_ACCEPT_POSITIVE_NUMBER')));
 
 jQuery.validator.addMethod("percentage", function(value, element, params){
-	var negativeRegex= /(^[-]+\d+)$/ ;
-	if(isNaN(value) || value < 0 || value.match(negativeRegex)){
-		return false;
-	}
-	return true;
+		var decimalSeparator = app.getDecimalSeparator();
+		var strippedValue = value.replace(decimalSeparator, '');
+		var spacePattern = /\s/;
+		if(spacePattern.test(decimalSeparator)) {
+			strippedValue = strippedValue.replace(/ /g, '');
+		}
+		if(isNaN(strippedValue) || strippedValue < 0) {
+			return false;
+		}
+		return true;
 }, jQuery.validator.format(app.vtranslate('JS_ACCEPT_POSITIVE_NUMBER')));
 
 jQuery.validator.addMethod("inventory_percentage", function(value, element, params){
@@ -657,7 +705,7 @@ jQuery.validator.addMethod("greater_than_zero", function(value, element, params)
 // End
 
 jQuery.validator.addMethod("RepeatMonthDate", function(value, element, params) {
-	   return true;
+	return true;
 	}, jQuery.validator.format("Please enter the proper value")
 );
 
@@ -688,15 +736,24 @@ function calculateValidationRules(form,params,meta){
 			//for non-entity modules return empty rules
 			return rules;
 		}else{
-			meta = uimeta;
-		}
+			if(jQuery('.overlayEdit').length > 0 || jQuery('.overlayDetail').length > 0) {
+				meta = related_uimeta;
+			} else {
+				meta = uimeta;
+			}
+		 }
 	}
 
 	if(typeof params.ignoreTypes === 'undefined'){
 		params.ignoreTypes = [];
 	}
-	var inputElements = form.get(0).elements;
-
+	var inputElements = 0;
+	//There can be no form element for a view
+	//calling elements on undefined function will
+	//stop javascript from executing next code
+	if(typeof form.get(0) != 'undefined'){
+		inputElements = form.get(0).elements;
+	}
 	for(var i=0;i<inputElements.length;i++){
 		var element = jQuery(inputElements[i]);
 		var fieldName = element.attr('name');
@@ -713,7 +770,7 @@ function calculateValidationRules(form,params,meta){
 				}
 			}
 			if(fieldBasicInfo['type'] in jQuery.validator.methods){
-			   rules[ruleFieldName][fieldBasicInfo['type']] = true;
+				rules[ruleFieldName][fieldBasicInfo['type']] = true;
 			}
 
 			if(typeof fieldBasicInfo['validator']!=='undefined' && fieldBasicInfo['validator'].length > 0) {
@@ -740,7 +797,7 @@ function calculateValidationRules(form,params,meta){
 	* @param <jQuery> form
 	* @returns Object
 	*/
-   function getResolvedRules(container, meta) {
+	function getResolvedRules(container, meta) {
 		var basicRules = calculateValidationRules(container,{}, meta);
 		var rules = {};
 		var elements = container.find('[data-specific-rules]');
@@ -790,7 +847,7 @@ function calculateValidationRules(form,params,meta){
 			params = {};
 		}
 
-	   var defaults = {
+		var defaults = {
 		'errorClass': 'input-error',
 		'focusInvalid': true,
 		//Refer for explanation on ignore attrbute https://github.com/select2/select2/issues/215
@@ -809,7 +866,18 @@ function calculateValidationRules(form,params,meta){
 				};
 
 				var positionContainer = element.closest('.editViewContents');
+				if(element.closest('.editViewPageDiv').length){
+					positionContainer = element[0];
+				}
 				if(!positionContainer.length) {
+					if(element.closest('#overlayPageContent').length) {
+						var overlayElement = element.closest('#overlayPageContent');
+						positionsConf.adjust = {
+							x: parseInt(overlayElement.css('margin-left'))
+						};
+						positionContainer = overlayElement;
+					}
+
 					if(element.closest('.slimScrollDiv').length) {
 						positionContainer = element.closest('.slimScrollDiv');
 					} else if(element.closest('.mCustomScrollbar').length) {
@@ -819,7 +887,10 @@ function calculateValidationRules(form,params,meta){
 					} else {
 						positionContainer = element.closest('form');
 					}
+				}
 
+				if(positionContainer.length) {
+					positionsConf.container = positionContainer;
 					if(element.closest('#overlayPageContent').length) {
 						var overlayElement = element.closest('#overlayPageContent');
 						positionsConf.adjust = {
@@ -829,10 +900,6 @@ function calculateValidationRules(form,params,meta){
 					}
 				}
 
-				if(positionContainer.length) {
-					positionsConf.container = positionContainer;
-				}
-
 				element.qtip({
 					content: {
 						text: $(error).text()
@@ -846,6 +913,17 @@ function calculateValidationRules(form,params,meta){
 					position: positionsConf,
 					style: {
 						classes: 'qtip-red qtip-shadow'
+					},
+					events : {
+						render: function(event, api) {
+							var tooltip = api.elements.tooltip;
+							setTimeout(function() {
+								tooltip.hide();
+							}, 5000);
+							tooltip.on('click', function(event, api) {
+								tooltip.hide();
+							});
+						}
 					}
 				});
 				element.trigger('Vtiger.Validation.Show.Messsage');
@@ -876,7 +954,7 @@ function calculateValidationRules(form,params,meta){
 				element = app.helper.getSelect2FromSelect(element);
 			}
 			element.trigger('Vtiger.Validation.Hide.Messsage');
-//            element.tooltipster('hide');
+//			element.tooltipster('hide');
 		},
 		highlight: function (element, errorClass, validClass) {
 			var elem = $(element);
@@ -933,11 +1011,11 @@ function calculateValidationRules(form,params,meta){
 
 		var validobj = this.validate(newParams);
 
-//        $(document).one("change", ".select2-offscreen", function () {
-//            if (!$.isEmptyObject(validobj.submitted)) {
-//                validobj.form();
-//            }
-//        });
+//		$(document).one("change", ".select2-offscreen", function () {
+//			if (!$.isEmptyObject(validobj.submitted)) {
+//				validobj.form();
+//			}
+//		});
 
 		$(document).on("select2-opening", function (arg) {
 			var elem = $(arg.target);
@@ -970,7 +1048,7 @@ function calculateValidationRules(form,params,meta){
 		});
 
 		//invoke validation on reference post selection
-		this.on('Vtiger.PostReference.Selection', function (e) {
+		this.on('Vtiger.PostReference.Selection Vtiger.PostReference.QuickCreateSave', function (e) {
 			var referenceWrapper = jQuery(e.target).closest('.referencefield-wrapper');
 			var referenceElement = referenceWrapper.find('[data-fieldtype="reference"]').length ?
 					referenceWrapper.find('[data-fieldtype="reference"]') :
diff --git a/layouts/v7/skins/contact/style.css b/layouts/v7/skins/contact/style.css
index f07de9f68..f87982ba7 100644
--- a/layouts/v7/skins/contact/style.css
+++ b/layouts/v7/skins/contact/style.css
@@ -7259,4 +7259,9 @@ input:focus:-ms-input-placeholder {
 .editViewContents input[type="radio"] {
   width: 15px;
   height: 15px;
+}
+#composeEmailContainer .modal-body .quickCreateContent,
+#QuickCreate .modal-body .quickCreateContent,
+#create .quickCreateContent {
+  margin-top: 25px;
 }
\ No newline at end of file
diff --git a/layouts/v7/skins/inventory/style.css b/layouts/v7/skins/inventory/style.css
index f71774d5f..fe7ef6c9a 100644
--- a/layouts/v7/skins/inventory/style.css
+++ b/layouts/v7/skins/inventory/style.css
@@ -7263,4 +7263,9 @@ input:focus:-ms-input-placeholder {
 .editViewContents input[type="radio"] {
   width: 15px;
   height: 15px;
+}
+#composeEmailContainer .modal-body .quickCreateContent,
+#QuickCreate .modal-body .quickCreateContent,
+#create .quickCreateContent {
+  margin-top: 25px;
 }
\ No newline at end of file
diff --git a/layouts/v7/skins/marketing/style.css b/layouts/v7/skins/marketing/style.css
index b7723d7fd..41b856ff6 100644
--- a/layouts/v7/skins/marketing/style.css
+++ b/layouts/v7/skins/marketing/style.css
@@ -7525,4 +7525,9 @@ a.btnReport:hover {
 .editViewContents input[type="radio"] {
   width: 15px;
   height: 15px;
+}
+#composeEmailContainer .modal-body .quickCreateContent,
+#QuickCreate .modal-body .quickCreateContent,
+#create .quickCreateContent {
+  margin-top: 25px;
 }
\ No newline at end of file
diff --git a/layouts/v7/skins/marketing_and_sales/style.css b/layouts/v7/skins/marketing_and_sales/style.css
index 603891c83..edf74d66e 100644
--- a/layouts/v7/skins/marketing_and_sales/style.css
+++ b/layouts/v7/skins/marketing_and_sales/style.css
@@ -7264,3 +7264,8 @@ input:focus:-ms-input-placeholder {
   width: 15px;
   height: 15px;
 }
+#composeEmailContainer .modal-body .quickCreateContent,
+#QuickCreate .modal-body .quickCreateContent,
+#create .quickCreateContent {
+  margin-top: 25px;
+}
diff --git a/layouts/v7/skins/project/style.css b/layouts/v7/skins/project/style.css
index 62c0f6482..eaab26477 100644
--- a/layouts/v7/skins/project/style.css
+++ b/layouts/v7/skins/project/style.css
@@ -7263,4 +7263,9 @@ input:focus:-ms-input-placeholder {
 .editViewContents input[type="radio"] {
   width: 15px;
   height: 15px;
+}
+#composeEmailContainer .modal-body .quickCreateContent,
+#QuickCreate .modal-body .quickCreateContent,
+#create .quickCreateContent {
+  margin-top: 25px;
 }
\ No newline at end of file
diff --git a/layouts/v7/skins/sales/style.css b/layouts/v7/skins/sales/style.css
index 419272958..746c2b961 100644
--- a/layouts/v7/skins/sales/style.css
+++ b/layouts/v7/skins/sales/style.css
@@ -7263,4 +7263,9 @@ input:focus:-ms-input-placeholder {
 .editViewContents input[type="radio"] {
   width: 15px;
   height: 15px;
+}
+#composeEmailContainer .modal-body .quickCreateContent,
+#QuickCreate .modal-body .quickCreateContent,
+#create .quickCreateContent {
+  margin-top: 25px;
 }
\ No newline at end of file
diff --git a/layouts/v7/skins/support/style.css b/layouts/v7/skins/support/style.css
index 4c7854f3c..e472f1bb3 100644
--- a/layouts/v7/skins/support/style.css
+++ b/layouts/v7/skins/support/style.css
@@ -7394,4 +7394,9 @@ div.flip {
 .editViewContents input[type="radio"] {
   width: 15px;
   height: 15px;
+}
+#composeEmailContainer .modal-body .quickCreateContent,
+#QuickCreate .modal-body .quickCreateContent,
+#create .quickCreateContent {
+  margin-top: 25px;
 }
\ No newline at end of file
diff --git a/layouts/v7/skins/tools/style.css b/layouts/v7/skins/tools/style.css
index 36fd8fecb..e9bf73f87 100644
--- a/layouts/v7/skins/tools/style.css
+++ b/layouts/v7/skins/tools/style.css
@@ -7259,4 +7259,9 @@ input:focus:-ms-input-placeholder {
 .editViewContents input[type="radio"] {
   width: 15px;
   height: 15px;
+}
+#composeEmailContainer .modal-body .quickCreateContent,
+#QuickCreate .modal-body .quickCreateContent,
+#create .quickCreateContent {
+  margin-top: 25px;
 }
\ No newline at end of file
diff --git a/modules/com_vtiger_workflow/tasks/VTCreateEntityTask.inc b/modules/com_vtiger_workflow/tasks/VTCreateEntityTask.inc
index 0e3cd770c..44960258f 100644
--- a/modules/com_vtiger_workflow/tasks/VTCreateEntityTask.inc
+++ b/modules/com_vtiger_workflow/tasks/VTCreateEntityTask.inc
@@ -191,7 +191,6 @@ class VTCreateEntityTask extends VTTask {
 			} else{
 				$newEntity->save($entityType);
 			}
-			TextSearch_RecordUpdater::unsetMassOperation();
 			relateEntities($focus, $moduleName, $recordId, $entityType, $newEntity->id);
 		}
 
-- 
GitLab