Esempio n. 1
0
        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();
        }