Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        //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);
    }
Esempio n. 5
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
        }