create new validation attribute : set a max date for datepicker

set a max date for datepicker
Divercy  LookupPeriodDateValidationAttribute,DisableDateValidationAttribute


1. Create a new ValidationAttribute class
eg : LookupPeriodDateValidationAttribute,DisableDateValidationAttribute
or search MustBeTrueAttribute on sana ,


public class LookupPeriodDateValidationAttribute : ValidationAttribute, IClientValidatable
    { 
        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule();
            rule.ValidationType = "lookupperiod";
            rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());         
            return new[] { rule };
        }
    }




1.1
IsValid() //  this method will hit when submitting the order.

public override bool IsValid(object value)
        {
            if (value == null)
                return true;

            if (value is Date)
            {
                var date = (Date)value;
                return date >= Date.Now;
            }
            else if (value is Date?)
            {
                var date = (Date?)value;
                return date.Value >= Date.Now;
            }
            else if (value is DateTime)
            {
                var date = (DateTime)value;
                return date >= DateTime.Now;
            }
            else if (value is DateTime?)
            {
                var date = (DateTime?)value;
                return date.Value >= DateTime.Now;
            }
            else
            {
                return false;
            }         
        }


---

2. update sana.validate.unobtrusive.js

 $.validator.unobtrusive.adapters.add('lookupperiod', [], function (options) {     
        options.rules['lookupperiod'] = {};
        if (options.message) {
            options.messages['lookupperiod'] = options.message;         
        }
    });




3. update sana.validate.js

$.validator.addMethod('lookupperiod', function (value, element, params) {

        if (!value) {
            return true;
        }

        var dateFormat = $(element).datepicker('option', 'dateFormat');
        try {
            var date = $.datepicker.parseDate(dateFormat, value);
            var todayDate = (new Date()).setHours(0, 0, 0, 0);
            return date >= todayDate;
        }
        catch (e) {
            return false;
        }
    });



4. Apply the Attribute to the field
eg: 

 [LookupPeriodDateValidation(ErrorMessageResourceName = SanaTextKeys.InvalidField)]
 [DisableDateValidation(ErrorMessageResourceName = SanaTextKeys.InvalidField)]
 public override Date? DeliveryDate { get; set; }