EnVisageOnline/Main-RMO/Source/EnVisage/Models/ValidationAttributes/Scenarios/ScenarioEndDateValidatorAtt...

32 lines
1.6 KiB
C#

using EnVisage.Code;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace EnVisage.Models.ValidationAttributes.Scenarios
{
public class ScenarioEndDateValidatorAttribute : ValidationAttribute, IClientValidatable
{
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = ErrorMessage,
ValidationType = "scenarioenddate"
};
var modelMetadata = ModelMetadataProviders.Current.GetMetadataForProperties(context.Controller.ViewData.Model, context.Controller.ViewData.Model.GetType());
var deadline = (DateTime?)modelMetadata.FirstOrDefault(x => x.PropertyName == "ProjectDeadline").Model;
var actualsenddate = (long?)modelMetadata.FirstOrDefault(x => x.PropertyName == "ActualsEndDate").Model;
rule.ValidationParameters["hasactuals"] = Convert.ToInt32(modelMetadata.FirstOrDefault(x => x.PropertyName == "HasActuals").Model);
rule.ValidationParameters["projectdeadline"] = deadline.HasValue ? (long)deadline.Value.Subtract(Constants.UnixEpochDate).TotalMilliseconds : 0;
rule.ValidationParameters["actualsenddate"] = actualsenddate > 0 ? Constants.UnixEpochDate.AddMilliseconds(actualsenddate.Value).AddDays(7).Subtract(Constants.UnixEpochDate).TotalMilliseconds : 0;
yield return rule;
}
}
}