public async Task <WrapperSimpleTypesDTO> ModificarPlan(Planes planParaModificar) { using (SportsGoEntities context = new SportsGoEntities(false)) { PlanesRepository planRepository = new PlanesRepository(context); planParaModificar.CodigoTipoPerfil = (int)planParaModificar.TipoPerfil; Planes planExistente = await planRepository.ModificarPlan(planParaModificar); if (planParaModificar.PlanesContenidos != null && planParaModificar.PlanesContenidos.Count > 0) { foreach (var planContenido in planParaModificar.PlanesContenidos) { if (planContenido.Consecutivo > 0) { await planRepository.ModificarPlanContenido(planContenido); } else { planRepository.CrearPlanContenido(planContenido); } } } // Si lo voy a desasignar como default valido que no me quede sin defaults if (planExistente.PlanDefault == 1 && planParaModificar.PlanDefault == 0) { TipoPerfil tipoPerfil = planParaModificar.CodigoTipoPerfil.ToEnum <TipoPerfil>(); int numeroDePlanesDefault = await planRepository.NumeroPlanesDefault(tipoPerfil); if (numeroDePlanesDefault <= 1) { throw new InvalidOperationException("No puedes quedarte sin planes default para el perfil de " + tipoPerfil.ToString() + "!."); } planExistente.PlanDefault = 0; } else { // Si lo voy a asignar entonces mando a desasignar todos los default de este perfil y procedo a asignar el que estoy modificando if (planExistente.PlanDefault == 0 && planParaModificar.PlanDefault == 1) { await planRepository.DesasignarPlanDefaultDeUnPerfilMenosActual(planExistente.Consecutivo, planExistente.CodigoTipoPerfil); } planExistente.PlanDefault = planParaModificar.PlanDefault; } WrapperSimpleTypesDTO wrapperModificarPlan = new WrapperSimpleTypesDTO(); wrapperModificarPlan.NumeroRegistrosAfectados = await context.SaveChangesAsync(); if (wrapperModificarPlan.NumeroRegistrosAfectados > 0) { wrapperModificarPlan.Exitoso = true; } return(wrapperModificarPlan); } }