private void ProcesarAgendas(PersonaEditModel editModel, Profesional personaProfesional) { var session = SessionFactory.GetCurrentSession(); //Veo el tema de las agendas if (editModel.Profesional.Agendas == null || !editModel.Profesional.Agendas.Any()) { personaProfesional.Agendas.Clear(); } else { //Agendas a eliminar var agendasAEliminar = personaProfesional.Agendas.Where(m => !editModel.Profesional.Agendas.Select(x => x.Id).Contains(m.Id)).ToList(); foreach (var agenda in agendasAEliminar) { personaProfesional.QuitarAgenda(agenda); } //Agendas a agregar var agendasAAgregar = editModel.Profesional.Agendas.Where(x => !x.Id.HasValue); foreach (var agendaEditModel in agendasAAgregar) { var agendaModel = _mappingEngine.Map<Agenda>(agendaEditModel); if (agendaEditModel.EspecialidadesSeleccionadas != null) { foreach (var especialidadId in agendaEditModel.EspecialidadesSeleccionadas) { var especialidad = session.Load<Especialidad>(especialidadId); agendaModel.AgregarEspecialidad(especialidad); } } agendaModel.Consultorio = session.Load<Consultorio>(agendaEditModel.ConsultorioId); personaProfesional.AgregarAgenda(agendaModel); } //Agendas a actualizar var agendasActualizar = personaProfesional.Agendas.Where(m => editModel.Profesional.Agendas.Select(x => x.Id).Contains(m.Id)).ToList(); foreach (var agenda in agendasActualizar) { var agendaEditModel = editModel.Profesional.Agendas.Single(v => v.Id == agenda.Id); _mappingEngine.Map(agendaEditModel, agenda); ProcesarEspecialidades(agendaEditModel, agenda); agenda.Consultorio = session.Load<Consultorio>(agendaEditModel.ConsultorioId); } } //Limpio el cache de turnos, para que procese a partir de la nueva agenda var query = QueryFactory.Create<IObtenerTurnosProfesionalQuery>(); query.ProfesionalId = personaProfesional.Id; query.ClearCache(); }