public static ValidationMessageCollection ValidateMake(MakeBookingRequest request) { var validationMessages = new ValidationMessageCollection(); if (!request.StartDate.HasValue || request.StartDate.Value == default(DateTime)) { validationMessages.AddError("StartDate", "Start date is required."); } else { if (request.StartDate.Value < DateTime.Now.Date) { validationMessages.AddError("StartDate", "Start date must not be in the past."); } } if (!request.EndDate.HasValue || request.EndDate.Value == default(DateTime)) { validationMessages.AddError("EndDate", "End date is required."); } else { if (request.EndDate.Value < DateTime.Now) { validationMessages.AddError("EndDate", "End date must not be in the past."); } } if (request.StartDate.HasValue && request.EndDate.HasValue) { if (request.EndDate.Value < request.StartDate.Value) { validationMessages.AddError("EndDate", "End date must not be before start date."); } } if (request.Vehicle == null) { validationMessages.AddError("Vehicle", "Vehicle is required."); } if (request.Customer == null) { validationMessages.AddError("Customer", "Customer is required."); } if (request.Vehicle != null && request.StartDate.HasValue && request.EndDate.HasValue && request.Vehicle.GetConflictingBookings(request.StartDate.Value, request.EndDate.Value).Any()) { validationMessages.AddError("", "Booking conflicts with existing bookings."); } return(validationMessages); }
public virtual ValidationMessageCollection ValidateComplete(string completedMessage, User currentUser) { var validationMessages = new ValidationMessageCollection(); if (string.IsNullOrEmpty(completedMessage)) { validationMessages.AddError("CompletedMessage", "Message is empty."); } //Business logic is that you can't complete someone else's task unless you have the permission to do so. if (AssignedTo != currentUser && !currentUser.Role.PermissionRoles.Select(x => x.Permission.Id).Contains(PermissionIds.CompleteAnotherUsersTask)) { validationMessages.AddError("You do not have the permission to complete this task."); } return(validationMessages); }
//todo: pass in bookings for employee to check clashes? private static ValidationMessageCollection ValidateMakeUpdate(DateTime start, DateTime end, IEnumerable <Booking> bookings, Booking bookingBeingUpdated) { var validationMessages = new ValidationMessageCollection(); if (start == default(DateTime) || end == default(DateTime)) { validationMessages.AddError("Start and end time not correctly set."); } if (!validationMessages.IsValid) { return(validationMessages); } if (start.Year != 2012 || end.Year != 2012) { validationMessages.AddError("Holidays can only be booked for 2012."); //For simplicity in this example. } if (start > end) { validationMessages.AddError("Start date is after end date."); } if (!validationMessages.IsValid) { return(validationMessages); } var matchingTimeAllocations = (from booking in bookings where (bookingBeingUpdated == null || bookingBeingUpdated != booking) && ((start >= booking.Start && start <= booking.End) || (end >= booking.Start && end <= booking.End) || (start <= booking.Start && end >= booking.End)) select booking) .ToList(); if (matchingTimeAllocations.Any()) { validationMessages.AddError("Booking clashes with other bookings for employee."); } return(validationMessages); }
public ValidationMessageCollection ValidatePayout(double withdrawAmount) { var messages = new ValidationMessageCollection(); if (withdrawAmount > Balance) { messages.AddError("Not enough funds on your account"); } return(messages); }
public static ValidationMessageCollection ValidateBook(Employee employee, DateTime start, DateTime end, string description) { var messages = new ValidationMessageCollection(); var length = (end - start).Days + 1; if (length > employee.RemainingHolidays) { messages.AddError("Length of holiday exceeds employee's remaining holidays."); } return(messages); }
private static ValidationMessageCollection ValidateBookMove(DateTime start, DateTime end, IEnumerable <Appointment> employeesOtherAppointments, Appointment bookingBeingUpdated) { var validationMessages = new ValidationMessageCollection(); if (start == default(DateTime) || end == default(DateTime)) { validationMessages.AddError("Start and end time not correctly set."); } if (!validationMessages.IsValid) { return(validationMessages); } if (start > end) { validationMessages.AddError("Start date is after end date."); } if (!validationMessages.IsValid) { return(validationMessages); } var matchingTimeAllocations = (from appointment in employeesOtherAppointments where (bookingBeingUpdated == null || bookingBeingUpdated != appointment) && ((start >= appointment.Start && start <= appointment.End) || (end >= appointment.Start && end <= appointment.End) || (start <= appointment.Start && end >= appointment.End)) select appointment) .ToList(); if (matchingTimeAllocations.Any()) { validationMessages.AddError("Appointment clashes with other appointments for employee."); } return(validationMessages); }
public static ValidationMessageCollection ValidateRaise(string description, User assignedTo, TaskType type, User currentUser) { //ValidateRaise and ValidateEdit look similar. They could be refactored to call the same method but I have left it like this //in this example for clarity. var validationMessages = new ValidationMessageCollection(); if (string.IsNullOrEmpty(description)) { validationMessages.AddError("Description", "Description is null or empty."); } if (assignedTo == null) { validationMessages.AddError("AssignedTo", "AssignedTo is null."); } if (type == null) { validationMessages.AddError("Type", "Type is null."); } return(validationMessages); }
public static ValidationMessageCollection ValidateRegister(RegisterCustomerRequest request) { var validationMessages = new ValidationMessageCollection(); //Only a selection of fields validated for demo purposes. var rxPostCode = new Regex( @"^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))$"); if (string.IsNullOrEmpty(request.PostCode)) { validationMessages.AddError("PostCode", "Post code not supplied"); } else { if (!rxPostCode.IsMatch(request.PostCode)) { validationMessages.AddError("PostCode", "Post code is not valid."); } } if (string.IsNullOrEmpty(request.EmailAddress)) { validationMessages.AddError("EmailAddress", "Email not supplied"); } else if (request.EmailAddress.Length > 50) { validationMessages.AddError("EmailAddress", "Email must be 50 characters or less."); } else { var rxNonStrictEmail = new Regex(@"[A-Za-z0-9\.-_\+]+@[A-Za-z0-9\.-_\+]+"); if (!rxNonStrictEmail.IsMatch(request.EmailAddress)) { validationMessages.AddError("EmailAddress", "Email is not valid."); } } if (request.ApplicationUser == null) { validationMessages.AddError("ApplicationUser", "ApplicationUser not supplied"); } if (request.CustomerRole == null) { validationMessages.AddError("CustomerRole", "CustomerRole not supplied"); } return(validationMessages); }
protected static ValidationMessageCollection ValidateMake(MakeBookingParameterSet parameterSet) { var validationMessages = new ValidationMessageCollection(); if (!parameterSet.PickUp.HasValue || parameterSet.PickUp.Value == default(DateTime)) { validationMessages.AddError("PickUp", "Pick up date is required."); } else { if (parameterSet.PickUp.Value < DateTime.Now.Date) { validationMessages.AddError("PickUp", "Pick up date must not be in the past."); } } if (!parameterSet.DropOff.HasValue || parameterSet.DropOff == default(DateTime)) { validationMessages.AddError("DropOff", "Drop off date is required."); } else { if (parameterSet.DropOff.Value < DateTime.Now) { validationMessages.AddError("DropOff", "Drop off date must not be in the past."); } } if (parameterSet.PickUp.HasValue && parameterSet.DropOff.HasValue) { if (parameterSet.DropOff.Value < parameterSet.PickUp.Value) { validationMessages.AddError("DropOff", "Drop off date must not be before pickup date."); } } if (parameterSet.Bus == null) { validationMessages.AddError("Bus", "Bus is required."); } if (parameterSet.NumberOfAdults <= 0) { validationMessages.AddError("NumberOfAdults", "Booking must be for 1 or more adults."); } if (string.IsNullOrEmpty(parameterSet.DrivingLicenceNumber)) { validationMessages.AddError("DrivingLicenceNumber", "Driving licence number is required."); } if (parameterSet.Bus != null && parameterSet.PickUp.HasValue && parameterSet.DropOff.HasValue && parameterSet.Bus.GetConflictingBookings(parameterSet.PickUp.Value, parameterSet.DropOff.Value).Any()) { validationMessages.AddError("", "Booking conflicts with existing bookings."); } var registerCustomerParameterSet = RegisterCustomerParameterSet.MapFrom(parameterSet); validationMessages.AddRange(Customer.ValidateRegister(registerCustomerParameterSet)); return(validationMessages); }
private static ValidationMessageCollection ValidateBookUpdate( Guid consultantId, DateTime date, TimeSpan startTime, TimeSpan endTime, string leadName, string address, Appointment appointmentBeingUpdated) { var validationMessages = new ValidationMessageCollection(); if (date == default(DateTime)) { validationMessages.AddError("Date", "Date not correctly set."); } if (date.TimeOfDay != default(TimeSpan)) { validationMessages.AddError("Date", "Time part of date should not be set."); } if (startTime == default(TimeSpan)) { validationMessages.AddError("StartTime", "Start time not correctly set."); } if (endTime == default(TimeSpan)) { validationMessages.AddError("EndTime", "End time not correctly set."); } if (string.IsNullOrEmpty(leadName)) { validationMessages.AddError("LeadName", "Lead name not correctly set."); } if (string.IsNullOrEmpty(address)) { validationMessages.AddError("Address", "Address not correctly set."); } if (!validationMessages.IsValid) { return(validationMessages); } if (date.Year != 2012) { validationMessages.AddError("Appointments can only be booked for 2012."); //For simplicity in this example. } if (startTime > endTime) { validationMessages.AddError("Start date is after end date."); } if (!validationMessages.IsValid) { return(validationMessages); } var start = date + startTime; var end = date + endTime; //todo: need to do this validation a different way now consultant has gone. //var matchingTimeAllocations = (from timeAllocation in consultant.TimeAllocations // where (appointmentBeingUpdated == null || appointmentBeingUpdated != timeAllocation) // && ((start >= timeAllocation.Start && start <= timeAllocation.End) // || (end >= timeAllocation.Start && end <= timeAllocation.End) // || (start <= timeAllocation.Start && end >= timeAllocation.End)) // select timeAllocation) // .ToList(); //if (matchingTimeAllocations.Any()) // validationMessages.AddError("Appointment clashes with other time allocations for employee."); //var visitsToLeadInlastMonth = (from appointment in consultant.Appointments // where (appointmentBeingUpdated == null || appointmentBeingUpdated != appointment) // && appointment.Start > start.AddMonths(-1) // && appointment.LeadName == leadName // select appointment) // .ToList(); //if (visitsToLeadInlastMonth.Any()) // validationMessages.AddError("Lead has already had a visit in the last month."); return(validationMessages); }
public static ValidationMessageCollection ValidateRegister(RegisterCustomerParameterSet parameterSet) { var validationMessages = new ValidationMessageCollection(); if (string.IsNullOrEmpty(parameterSet.Forename)) { validationMessages.AddError("Forename", "Forename is required."); } else { if (parameterSet.Forename.Length > 50) { validationMessages.AddError("Forename", "Forename must be 50 characters or less."); } } if (string.IsNullOrEmpty(parameterSet.Forename)) { validationMessages.AddError("Surname", "Surname is required."); } else { if (parameterSet.Surname.Length > 50) { validationMessages.AddError("Surname", "Surname must be 50 characters or less."); } } if (string.IsNullOrEmpty(parameterSet.AddressLine1)) { validationMessages.AddError("AddressLine1", "Address line 1 is required."); } else { if (parameterSet.AddressLine1.Length > 50) { validationMessages.AddError("AddressLine1", "Address line 1 must be 50 characters or less."); } } if (parameterSet.AddressLine2 != null && parameterSet.AddressLine2.Length > 50) { validationMessages.AddError("AddressLine2", "Address line 2 must be 50 characters or less."); } if (parameterSet.AddressLine3 != null && parameterSet.AddressLine3.Length > 50) { validationMessages.AddError("AddressLine3", "Address line 3 must be 50 characters or less."); } if (string.IsNullOrEmpty(parameterSet.Town)) { validationMessages.AddError("Town", "Town is required."); } else { if (parameterSet.Town.Length > 50) { validationMessages.AddError("Town", "Town must be 50 characters or less."); } } if (parameterSet.County != null && parameterSet.County.Length > 50) { validationMessages.AddError("County", "County must be 50 characters or less."); } var rxPostCode = new Regex( @"^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))$"); if (string.IsNullOrEmpty(parameterSet.PostCode)) { validationMessages.AddError("PostCode", "Post code is required."); } else { if (!rxPostCode.IsMatch(parameterSet.PostCode)) { validationMessages.AddError("PostCode", "Post code is not valid."); } } if (string.IsNullOrEmpty(parameterSet.Email)) { validationMessages.AddError("Email", "Email is required."); } else if (parameterSet.Email.Length > 50) { validationMessages.AddError("Email", "Email must be 50 characters or less."); } else { var rxNonStrictEmail = new Regex(@"[A-Za-z0-9\.-_\+]+@[A-Za-z0-9\.-_\+]+"); if (!rxNonStrictEmail.IsMatch(parameterSet.Email)) { validationMessages.AddError("Email", "Email is not valid."); } } if (string.IsNullOrEmpty(parameterSet.TelephoneNumber)) { validationMessages.AddError("TelephoneNumber", "Telephone number is required."); } else { if (parameterSet.TelephoneNumber.Length > 50) { validationMessages.AddError("TelephoneNumber", "Telephone number must be 50 characters or less."); } } return(validationMessages); }
public virtual ValidationMessageCollection ValidateEdit(EditParameterSet parameterSet) { var validationMessages = new ValidationMessageCollection(); bool overlappingPricingPeriods = false; bool daysUnmatchedByPricingPeriods = false; var newPricingPeriods = parameterSet.PricingPeriods.Select(pricingPeriod => PricingPeriod.Add(new AddEditParameterSet { StartMonth = pricingPeriod.StartMonth, StartDay = pricingPeriod.StartDay, EndMonth = pricingPeriod.EndMonth, EndDay = pricingPeriod.EndDay })); for (var date = new DateTime(2000, 1, 1); date < new DateTime(2001, 1, 1); date = date.AddDays(1)) { var matchingPeriods = newPricingPeriods.Count(pricingPeriod => pricingPeriod.ContainsDate(date)); if (matchingPeriods == 0) { daysUnmatchedByPricingPeriods = true; } if (matchingPeriods > 1) { overlappingPricingPeriods = true; } } if (daysUnmatchedByPricingPeriods) { validationMessages.AddError("Some days are not covered by pricing periods."); } if (overlappingPricingPeriods) { validationMessages.AddError("Some days are covered by more than one pricing period"); } var firstPricingPeriod = newPricingPeriods .OrderBy(x => x.StartMonth) .ThenBy(x => x.StartDay) .First(); var lastPricingPeriod = newPricingPeriods .OrderBy(x => x.StartMonth) .ThenBy(x => x.StartDay) .Last(); if (firstPricingPeriod.StartMonth != 1 || firstPricingPeriod.StartDay != 1) { validationMessages.AddError("There must be a pricing period beginning January 1st"); } if (lastPricingPeriod.EndMonth != 12 || lastPricingPeriod.EndDay != 31) { validationMessages.AddError("There must be a pricing period ending December 31st"); } return(validationMessages); }