diff --git a/languages/en_us/Vtiger.php b/languages/en_us/Vtiger.php index e44eabc3c7211c16adbc9ad9cc95e6dac339d283..fec33408cb3c3829e387560eb50fc1ff12cb95e7 100644 --- a/languages/en_us/Vtiger.php +++ b/languages/en_us/Vtiger.php @@ -1941,4 +1941,5 @@ $jsLanguageStrings = array( 'JS_ATLEAST_SELECT_ONE_FIELD' => 'At least one field should be selected', 'JS_RELATED_ACCOUNT_IS_NOT_AVAILABLE' => 'Related Organization record is not available', 'JS_RELATED_CONTACT_IS_NOT_AVAILABLE' => 'Related Contact record is not available', + 'JS_REPEAT_DATE_SHOULD_BE_GREATER_THAN_START_DATE' => 'Repeat date should be greater than or equal to Start Date', ); diff --git a/layouts/v7/modules/Vtiger/partials/EditViewContents.tpl b/layouts/v7/modules/Vtiger/partials/EditViewContents.tpl index 9fad36b7b6109f6923af15e7d95cb23d739d0018..14b7308256776efc1d8bfec10aac331d79e842f7 100644 --- a/layouts/v7/modules/Vtiger/partials/EditViewContents.tpl +++ b/layouts/v7/modules/Vtiger/partials/EditViewContents.tpl @@ -30,6 +30,7 @@ {assign var=COUNTER value=0} {foreach key=FIELD_NAME item=FIELD_MODEL from=$BLOCK_FIELDS name=blockfields} {assign var="isReferenceField" value=$FIELD_MODEL->getFieldDataType()} + {assign var=FIELD_INFO value=$FIELD_MODEL->getFieldInfo()} {assign var="refrenceList" value=$FIELD_MODEL->getReferenceList()} {assign var="refrenceListCount" value=count($refrenceList)} {if $FIELD_MODEL->isEditable() eq true} diff --git a/layouts/v7/modules/Vtiger/resources/validation.js b/layouts/v7/modules/Vtiger/resources/validation.js index 0f8bc5dfb226cce93e01e9da6d8bae3647a369cd..240ea286cda1ef3f7c9eca1cd2b50571aea4ee09 100644 --- a/layouts/v7/modules/Vtiger/resources/validation.js +++ b/layouts/v7/modules/Vtiger/resources/validation.js @@ -232,6 +232,28 @@ jQuery.validator.addMethod("greaterThanDependentField", function(value, element, }, jQuery.validator.format(app.vtranslate('JS_PLEASE_ENTER_VALID_VALUE')) ); +jQuery.validator.addMethod("greaterThanDependentRepeatTillDate", function(value, element, params) { + var form = jQuery(element).closest('form'); + var recurringCheck = form.find('input[name="recurringcheck"]').is(':checked'); + //checking if the element sent has is date field + if(!recurringCheck || !jQuery(element).hasClass('dateField')) { + return true; + } + + var startDateElement = form.find('[name="date_start"]'); + var endDateElement = form.find('[name="calendar_repeat_limit_date"]'); + var dateFormat = app.getDateFormat(); + + //converting to moment time format + var startDate = startDateElement.val(); + var endDate = endDateElement.val(); + var momentFormat = dateFormat.toUpperCase(); + var m1 = moment(startDate , momentFormat); + var m2 = moment(endDate, momentFormat); + return m2.unix() >= m1.unix(); + }, jQuery.validator.format(app.vtranslate('JS_REPEAT_DATE_SHOULD_BE_GREATER_THAN_START_DATE')) +); + jQuery.validator.addMethod("currency", function(value, element, params) { element = jQuery(element); var groupSeparator = app.getGroupingSeparator(); diff --git a/layouts/v7/modules/Vtiger/uitypes/Recurrence.tpl b/layouts/v7/modules/Vtiger/uitypes/Recurrence.tpl index 22d0b3c8b9f9ee4dcaa9d38025c29d1059c891c3..016b16f122003a1b3731eadbf35c230af1a304f4 100644 --- a/layouts/v7/modules/Vtiger/uitypes/Recurrence.tpl +++ b/layouts/v7/modules/Vtiger/uitypes/Recurrence.tpl @@ -10,6 +10,7 @@ ********************************************************************************/ -->*} {strip} + {assign var="SPECIAL_VALIDATOR" value=$FIELD_MODEL->getValidator()} <div class="row"> <div class="col-sm-1"> {if $RECURRING_INFORMATION['recurringcheck'] eq 'Yes' && !$smarty.request.isDuplicate} @@ -28,7 +29,7 @@ </select> </span> <span class="col-sm-2 padding0px"> - <select class="select2 input-medium" style="width:100px;margin-left: 10px;" name="recurringtype" id="recurringType"> + <select class="select2 input-medium" style="width:85px;margin-left: 10px;" name="recurringtype" id="recurringType"> <option value="Daily" {if $RECURRING_INFORMATION['eventrecurringtype'] eq 'Daily'} selected {/if}>{vtranslate('LBL_DAYS_TYPE', $MODULE)}</option> <option value="Weekly" {if $RECURRING_INFORMATION['eventrecurringtype'] eq 'Weekly'} selected {/if}>{vtranslate('LBL_WEEKS_TYPE', $MODULE)}</option> <option value="Monthly" {if $RECURRING_INFORMATION['eventrecurringtype'] eq 'Monthly'} selected {/if}>{vtranslate('LBL_MONTHS_TYPE', $MODULE)}</option> @@ -38,9 +39,9 @@ </span> <span class="col-sm-6 padding0px"> <span class="input-group date inputElement"> - <input type="text" id="calendar_repeat_limit_date" class="dateField input-small form-control" name="calendar_repeat_limit_date" data-date-format="{$USER_MODEL->get('date_format')}" + <input type="text" id="calendar_repeat_limit_date" class="dateField input-small form-control" name="calendar_repeat_limit_date" data-date-format="{$USER_MODEL->get('date_format')}" value="{if $RECURRING_INFORMATION['recurringcheck'] neq 'Yes'}{$TOMORROWDATE}{elseif $RECURRING_INFORMATION['recurringcheck'] eq 'Yes'}{$RECURRING_INFORMATION['recurringenddate']}{/if}" - data-rule-date="true" data-rule-required="true"/> + data-rule-date="true" data-rule-required="true" data-specific-rules='{ZEND_JSON::encode($FIELD_INFO["validator"])}' {if !empty($SPECIAL_VALIDATOR)}data-validator='{Zend_Json::encode($SPECIAL_VALIDATOR)}'{/if}/> <span class="input-group-addon"><i class="fa fa-calendar"></i></span> </span> </span> diff --git a/modules/Calendar/models/Field.php b/modules/Calendar/models/Field.php index d549901766a6ac491581d6bba6621464bd5753ac..05d260d74cec283c667dbae97de0f1ac0084c79d 100644 --- a/modules/Calendar/models/Field.php +++ b/modules/Calendar/models/Field.php @@ -34,8 +34,12 @@ class Calendar_Field_Model extends Vtiger_Field_Model { /*case 'date_start' : $funcName = array('name'=>'greaterThanToday'); array_push($validator, $funcName); break;*/ - default : $validator = parent::getValidator(); - break; + case 'recurringtype': $funcName = array('name' => 'greaterThanDependentRepeatTillDate', + 'params' => array('date_start')); + array_push($validator, $funcName); + break; + default : $validator = parent::getValidator(); + break; } return $validator; }