Example #1
0
        public bool SaveEspecialidad(MedicoEspecialidadViewModel entity)
        {
            try
            {
                Especialidad e1 = new Especialidad();
                e1.EspecialidadName = entity.EspecialidadName;

                context.Add(e1);
                context.SaveChanges();

                MedicoEspecialidad medicoespe1 = new MedicoEspecialidad();
                medicoespe1.MedicoId       = entity.MedicoId;
                medicoespe1.Medico         = context.medicos.Find(entity.MedicoId);
                medicoespe1.EspecialidadId = context.especialidades.OrderByDescending(o => o.EspecialidadId).First().EspecialidadId;
                medicoespe1.Especialidad   = e1;

                context.Add(medicoespe1);
                context.SaveChanges();
            }
            catch (System.Exception)
            {
                return(false);
            }

            return(true);
        }
        public async Task <ActionResult> Create(MedicoEspecialidadViewModel medicoEspecialidad)
        {
            //creamos el ámbito de la transacción
            using (var dbContextTransaction = db.Database.BeginTransaction())
            {
                try
                {
                    if (!ModelState.IsValid)
                    {
                        TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                        {
                            Message     = "El modelo no es válido",
                            MessageType = GenericMessages.danger
                        };
                        ViewBag.EspecialidadId = new SelectList(db.Especialidades, "Id", "Nombre");
                        return(View(medicoEspecialidad));
                    }

                    Medico existeMedico = await db.Medicos.FirstOrDefaultAsync(t => t.UserName == medicoEspecialidad.Medico.UserName);

                    if (existeMedico != null)
                    {
                        TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                        {
                            Message     = "No se puede agregar el registro, El campo E-mail ya existe.",
                            MessageType = GenericMessages.danger
                        };
                        ViewBag.EspecialidadId = new SelectList(db.Especialidades, "Id", "Nombre");
                        return(View(medicoEspecialidad));
                    }

                    // Crear nuevo médico
                    db.Medicos.Add(medicoEspecialidad.Medico);
                    await db.SaveChangesAsync();

                    Medico medicoCreado = await db.Medicos.FirstOrDefaultAsync(t => t.UserName == medicoEspecialidad.Medico.UserName);

                    Especialidad especialidad = await db.Especialidades.FirstOrDefaultAsync(t => t.Id == medicoEspecialidad.DuracionTurnoEspecialidad.EspecialidadId);

                    if (medicoCreado == null || especialidad == null)
                    {
                        TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                        {
                            Message     = "Error al crear nuevo médico.",
                            MessageType = GenericMessages.danger
                        };
                        //hacemos rollback
                        dbContextTransaction.Rollback();
                        ViewBag.EspecialidadId = new SelectList(db.Especialidades, "Id", "Nombre");
                        return(View(medicoEspecialidad));
                    }

                    DuracionTurnoEspecialidad duracionTurnoEspecialidad = new DuracionTurnoEspecialidad
                    {
                        MedicoId       = medicoCreado.Id,
                        EspecialidadId = especialidad.Id,
                        Duracion       = medicoEspecialidad.DuracionTurnoEspecialidad.Duracion
                    };

                    db.DuracionTurnoEspecialidades.Add(duracionTurnoEspecialidad);
                    await db.SaveChangesAsync();

                    // Crear usuario y asignar rol
                    var store       = new UserStore <ApplicationUser>(db);
                    var userManager = new UserManager <ApplicationUser>(store);
                    var user        = new ApplicationUser {
                        UserName = medicoEspecialidad.Medico.UserName
                    };
                    userManager.Create(user, "Medico1234@");
                    userManager.AddToRole(user.Id, "Medico");

                    TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                    {
                        Message     = "Registro agregado exitosamente.",
                        MessageType = GenericMessages.success
                    };

                    //Hacemos commit de todos los datos
                    dbContextTransaction.Commit();
                    return(RedirectToAction("Index"));
                }
                catch (Exception ex)
                {
                    var err = $"No se puede agregar el registro: {ex.Message}";
                    TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                    {
                        Message     = err,
                        MessageType = GenericMessages.danger
                    };

                    //hacemos rollback si hay excepción
                    dbContextTransaction.Rollback();
                    ViewBag.EspecialidadId = new SelectList(db.Especialidades, "Id", "Nombre");
                    return(View(medicoEspecialidad));
                }
            }
        }
 public bool SaveEspecialidad(MedicoEspecialidadViewModel entity)
 {
     return(medicoespecialidadRepository.SaveEspecialidad(entity));
 }