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(); }
private void ProcesarEspecialidades(PersonaEditModel editModel, Profesional personaProfesional) { var session = SessionFactory.GetCurrentSession(); //Especialidades a eliminar var especialidadesAEliminar = personaProfesional.Especialidades.Where( x => !editModel.Profesional.EspecialidadesSeleccionadas.Contains(x.Id)).ToList(); foreach (var especialidadAEliminar in especialidadesAEliminar) { personaProfesional.QuitarEspecialidad(especialidadAEliminar); } //Especialidades a agregar var especialidadesAAgregar = editModel.Profesional.EspecialidadesSeleccionadas.Where( x => !personaProfesional.Especialidades.Select(p => p.Id).Contains(x)).ToList(); foreach (var especialidadAAgregar in especialidadesAAgregar) { var especialidad = session.Load<Especialidad>(especialidadAAgregar); personaProfesional.AgregarEspecialidad(especialidad); } }
private void AppendLists(PersonaEditModel viewModel) { viewModel.TiposDocumentosHabilitados = GetTiposDocumentos(viewModel.TipoDocumentoId); viewModel.ProvinciasHabilitadas = GetProvincias(viewModel.DomicilioLocalidadProvinciaId); if (viewModel.DomicilioLocalidadProvinciaId.HasValue) viewModel.LocalidadesHabilitadas = GetLocalidadesPorProvincia(viewModel.DomicilioLocalidadProvinciaId.Value, viewModel.DomicilioLocalidadId); //Paciente viewModel.Paciente.ObrasSocialesHabilitadas = GetObrasSociales(viewModel.Paciente.ObraSocialId); if (viewModel.Paciente.ObraSocialId.HasValue) viewModel.Paciente.PlanesObraSocialHabilitados = GetPlanesPorObraSocial(viewModel.Paciente.ObraSocialId.Value, viewModel.Paciente.PlanId); //Profesional viewModel.Profesional.Especialidades = GetEspecialidades(viewModel.Profesional.EspecialidadesSeleccionadas); if (viewModel.Profesional.Agendas != null) { foreach (var agenda in viewModel.Profesional.Agendas) { AppendLists(agenda); } } }
private void AdditionalMappings(PersonaEditModel editModel, Persona persona) { var session = SessionFactory.GetCurrentSession(); persona.Domicilio = new Domicilio { Direccion = editModel.DomicilioDireccion, Localidad = session.Load<Localidad>(editModel.DomicilioLocalidadId) }; if (editModel.EsPaciente && editModel.Paciente.PlanId.HasValue) { persona.As<Paciente>().Plan = session.Load<Plan>(editModel.Paciente.PlanId); } if (editModel.EsProfesional) { var personaProfesional = persona.As<Profesional>(); ProcesarEspecialidades(editModel, personaProfesional); ProcesarAgendas(editModel, personaProfesional); } }
public ActionResult Nuevo(PersonaEditModel editModel) { AppendLists(editModel); if (ModelState.IsValid) { try { var persona = _mappingEngine.Map<Persona>(editModel); AdditionalMappings(editModel, persona); //Le seteo un password cualquiera, y luego envio mail para que lo resetee var status = _membershipService.CreateUser(persona, editModel.Email, Guid.NewGuid().ToString()); if (status == MembershipStatus.USER_CREATED) { //Envio mail para que cargue su password _membershipService.RecoverPassword(editModel.Email); ShowMessages(ResponseMessage.Success()); return RedirectToAction("Index"); } ModelState.AddModelError("", status.Get()); } catch (Exception ex) { ModelState.AddModelError("", ex.Message); } } return View(editModel); }
public ActionResult Nuevo() { var viewModel = new PersonaEditModel(); AppendLists(viewModel); return View(viewModel); }
public ActionResult Editar(PersonaEditModel editModel) { AppendLists(editModel); if (ModelState.IsValid) { try { var persona = GetPersona(editModel.Id.Value); if (persona == null) { ShowMessages(ResponseMessage.Error("No se ha encontrado el usuario.")); return RedirectToAction("Index"); } _mappingEngine.Map(editModel, persona); AdditionalMappings(editModel, persona); ShowMessages(ResponseMessage.Success()); return RedirectToAction("Index"); } catch (Exception ex) { ModelState.AddModelError("", ex.ToString()); } return View(editModel); } return View(editModel); }