public CulturalExchange Add(CulturalExchange culturalExchange)
        {
            culturalExchange.Id        = Guid.NewGuid();
            culturalExchange.Available = true;

            if (_culturalExchangeRepository.FindByFilter(x => x.StudentId == culturalExchange.StudentId).FirstOrDefault() != null)
            {
                return(culturalExchange);
            }

            if (culturalExchange.AccomodationId == Guid.Empty)
            {
                culturalExchange.AccomodationId = null;
            }

            culturalExchange.ValidationResult = new List <ValidationResult>();

            bool ValueHigherThanCourseValue = new CulturalExchangeValueHigherThanCourseValue(_culturalExchangeRepository, _collegeTimeRepository)
                                              .IsSatisfiedBy(culturalExchange);

            bool validateDateArriveAndStart = new CulturalExchangeValidateDateArriveAndStart().IsSatisfiedBy(culturalExchange);

            if (!culturalExchange.ValidationResult.Any())
            {
                _culturalExchangeRepository.Insert(culturalExchange);
            }
            else
            {
                return(culturalExchange);
            }

            bool accomodationDateAvailable = new CulturalExchangeValidateAccomodationDateAvailable(_accomodationRepository)
                                             .IsSatisfiedBy(culturalExchange);

            if (!accomodationDateAvailable)
            {
                if (culturalExchange.ValidationResult.Count == 1)
                {
                    culturalExchange.ValidationResult.Add(new ValidationResult("Cultural exchange included but: Accomodation FULL for dates"));
                }
            }

            return(culturalExchange);
        }
        public CulturalExchange Update(Guid idEnvironment, CulturalExchange culturalExchange)
        {
            if (culturalExchange.AccomodationId == Guid.Empty)
            {
                culturalExchange.AccomodationId = null;
            }

            culturalExchange.ValidationResult = new List <ValidationResult>();

            bool ValueHigherThanCourseValue = new CulturalExchangeValueHigherThanCourseValue(_culturalExchangeRepository, _collegeTimeRepository)
                                              .IsSatisfiedBy(culturalExchange);

            bool validateDateArriveAndStart = new CulturalExchangeValidateDateArriveAndStart().IsSatisfiedBy(culturalExchange);

            if (!culturalExchange.ValidationResult.Any())
            {
                _culturalExchangeRepository.Update(culturalExchange);
            }
            else
            {
                return(culturalExchange);
            }

            bool accomodationDateAvailable = new CulturalExchangeValidateAccomodationDateAvailable(_accomodationRepository)
                                             .IsSatisfiedBy(culturalExchange);

            if (!accomodationDateAvailable)
            {
                if (culturalExchange.ValidationResult.Count == 1)
                {
                    culturalExchange.ValidationResult.Add(new ValidationResult("Cultural exchange included but: Accomodation FULL for dates"));
                }
            }

            return(culturalExchange);
        }