private void SaveOrUpdateEnvironment(EnvironmentViewData environmentViewData, Environment environmentEntity, ZoosManagementSystemEntities entities)
        {
            environmentEntity.Name = environmentViewData.Name;
            environmentEntity.Description = environmentViewData.Description;
            environmentEntity.Surface = environmentViewData.Surface;
            environmentEntity.Type = environmentViewData.Type;

            foreach (var animal in environmentViewData.Animals.Where(a => !a.AnimalStatus.Equals("None", StringComparison.InvariantCultureIgnoreCase) && !a.AnimalStatus.Equals("Original", StringComparison.InvariantCultureIgnoreCase)))
            {
                var animalId = new Guid(animal.AnimalId);
                var animalEntity = entities.Animal
                    .Include("Environment")
                    .Where(a => a.Id == animalId)
                    .FirstOrDefault();

                if (animalEntity == null)
                {
                    throw new ArgumentException(
                        string.Format(
                            CultureInfo.CurrentCulture,
                            "No existe ningún animal con el Id {0} para actualizar.",
                            animal.AnimalId));
                }

                animalEntity.Environment = animal.AnimalStatus.Equals(
                                               "Remove", StringComparison.InvariantCultureIgnoreCase)
                                               ? null
                                               : environmentEntity;
            }

            foreach (var timeSlot in environmentViewData.TimeSlots.Where(ts => !ts.TimeSlotStatus.Equals("None", StringComparison.InvariantCultureIgnoreCase)))
            {
                TimeSlot timeSlotEntity = null;
                if (timeSlot.TimeSlotStatus.Equals("New", StringComparison.InvariantCultureIgnoreCase))
                {
                    timeSlotEntity = new TimeSlot
                    {
                        Environment = environmentEntity,
                        Id = Guid.NewGuid()
                    };
                    entities.AddToTimeSlot(timeSlotEntity);
                }
                else
                {
                    var timeSlotId = new Guid(timeSlot.TimeSlotId);
                    timeSlotEntity = entities.TimeSlot
                        .Include("Environment")
                        .Where(ts => ts.Id == timeSlotId)
                        .FirstOrDefault();

                    if (timeSlotEntity == null)
                    {
                        throw new ArgumentException(
                            string.Format(
                                CultureInfo.CurrentCulture,
                                "No existe ningún intervalo de tiempo con el Id {0} para actualizar.",
                                timeSlot.TimeSlotId));
                    }
                }

                if (timeSlot.TimeSlotStatus.Equals("Remove", StringComparison.InvariantCultureIgnoreCase))
                {
                    entities.DeleteObject(timeSlotEntity);
                }
                else
                {
                    timeSlotEntity.InitialTime = TimeSpan.Parse(timeSlot.InitialTime);
                    timeSlotEntity.FinalTime = TimeSpan.Parse(timeSlot.FinalTime);
                    timeSlotEntity.TemperatureMin = timeSlot.TemperatureMin;
                    timeSlotEntity.TemperatureMax = timeSlot.TemperatureMax;
                    timeSlotEntity.HumidityMin = timeSlot.HumidityMin;
                    timeSlotEntity.HumidityMax = timeSlot.HumidityMax;
                    timeSlotEntity.LuminosityMin = timeSlot.LuminosityMin;
                    timeSlotEntity.LuminosityMax = timeSlot.LuminosityMax;
                }
            }
        }
        private void SaveOrUpdateHealthMeasure(HealthMeasureViewData healthMeasureViewData, HealthMeasure healthMeasureEntity, ZoosManagementSystemEntities entities)
        {
            healthMeasureEntity.MeasurementDate = DateTime.Parse(healthMeasureViewData.MeasurementDate);
            healthMeasureEntity.Height = healthMeasureViewData.Height;
            healthMeasureEntity.Weight = healthMeasureViewData.Weight;
            healthMeasureEntity.Temperature = healthMeasureViewData.Temperature;
            healthMeasureEntity.Notes = healthMeasureViewData.Notes;
            healthMeasureEntity.Vaccine = healthMeasureViewData.Vaccine;

            var animalId = new Guid(healthMeasureViewData.AnimalId);
            healthMeasureEntity.Animal = entities.Animal.FirstOrDefault(a => a.Id == animalId);
        }
        private void SaveOrUpdateAnimal(AnimalViewData animalViewData, Animal animalEntity, ZoosManagementSystemEntities entities)
        {
            animalEntity.Name = animalViewData.Name;
            animalEntity.Species = animalViewData.Species;
            animalEntity.Sex = (animalViewData.Sex.ToLowerInvariant() == "macho") ? "M" : "F";
            animalEntity.Cost = animalViewData.Cost;
            animalEntity.BornInCaptivity = animalViewData.BornInCaptivity;
            animalEntity.BirthDate = DateTime.Parse(animalViewData.BirthDate);
            animalEntity.NextHealthMeasure = DateTime.Parse(animalViewData.NextHealthMeasure);

            var responsibleId = new Guid(animalViewData.ResponsibleId);
            animalEntity.Responsible = entities.Responsible.FirstOrDefault(r => r.Id == responsibleId);

            if (!string.IsNullOrEmpty(animalViewData.EnvironmentId))
            {
                var environmentId = new Guid(animalViewData.EnvironmentId);
                animalEntity.Environment = entities.Environment.FirstOrDefault(r => r.Id == environmentId);
            }
            else
            {
                animalEntity.Environment = null;
            }

            foreach (var feedingTime in animalViewData.FeedingTimes.Where(ft => !ft.FeedingTimeStatus.Equals("None", StringComparison.InvariantCultureIgnoreCase)))
            {
                FeedingTime feedingTimeEntity = null;
                if (feedingTime.FeedingTimeStatus.Equals("New", StringComparison.InvariantCultureIgnoreCase))
                {
                    feedingTimeEntity = new FeedingTime
                        {
                            Id = Guid.NewGuid(),
                            Animal = animalEntity
                        };

                    entities.AddToFeedingTime(feedingTimeEntity);
                }
                else
                {
                    var feedingTimeId = new Guid(feedingTime.FeedingTimeId);
                    feedingTimeEntity = entities.FeedingTime
                        .Include("Feeding")
                        .Where(ft => ft.Id == feedingTimeId)
                        .FirstOrDefault();

                    if (feedingTimeEntity == null)
                    {
                        throw new ArgumentException(
                            string.Format(
                                CultureInfo.CurrentCulture,
                                "No existe ningún horario de alimentación con el Id {0} para actualizar.",
                                feedingTime.FeedingTimeId));
                    }
                }

                if (feedingTime.FeedingTimeStatus.Equals("Remove", StringComparison.InvariantCultureIgnoreCase))
                {
                    entities.DeleteObject(feedingTimeEntity);
                }
                else
                {
                    var feedingId = new Guid(feedingTime.FeedingId);

                    feedingTimeEntity.Amount = feedingTime.Amount;
                    feedingTimeEntity.Time = TimeSpan.Parse(feedingTime.Time);
                    feedingTimeEntity.Feeding = entities.Feeding.FirstOrDefault(f => f.Id == feedingId);
                }
            }
        }