public ActionResult Create([Bind(Include = "IdDireccion,Pais,Area,Calle,TelefonoFijo,Latitud,Longitud,IdEspecialista,IdCiudad")] Direcciones direcciones)
        {
            List<Mensaje> lstMensajes = (((List<Mensaje>)TempData["mensajes"]) == null) ? new List<Mensaje>() : (List<Mensaje>)TempData["mensajes"];
            if (ModelState.IsValid)
            {
                try
                {
                    UsuarioAuth admin = (UsuarioAuth)Session["usuario"];
                    if (admin != null)
                    {
                        if (admin.rolNombre.Equals("Administrador") || admin.rolNombre.Equals("Vendedor"))
                        {
                            Especialistas especialista = db.Especialistas.Find(direcciones.IdEspecialista);
                            Ciudades ciudad = db.Ciudades.Find(direcciones.IdCiudad);
                            if (especialista != null && ciudad != null)
                            {
                                Direcciones nueva = new Direcciones
                                {
                                    Calle = direcciones.Calle,
                                    Ciudades = ciudad,
                                    Especialistas = especialista,
                                    Latitud = direcciones.Latitud,
                                    Longitud = direcciones.Longitud,
                                    TelefonoFijo = direcciones.TelefonoFijo
                                };
                                db.Direcciones.Add(nueva);
                                db.SaveChanges();
                                lstMensajes.Add(new Mensaje { tipo = "Notificacion", titulo = "Notificacion", cuerpo = "Consultoria registrado exitosamente." });
                                TempData["mensajes"] = lstMensajes;
                                return RedirectToAction("Index");
                            }
                            else
                            {
                                lstMensajes.Add(new Mensaje { tipo = "Error", titulo = "Error", cuerpo = "No cuenta con privilegios para realizar esta acción, inicie sesión" });
                                TempData["mensajes"] = lstMensajes;
                            }
                        }
                        else
                        {
                            lstMensajes.Add(new Mensaje { tipo = "Error", titulo = "Error", cuerpo = "No cuenta con privilegios para realizar esta acción, inicie sesión" });
                            TempData["mensajes"] = lstMensajes;
                        }
                    }
                    else
                    {
                        lstMensajes.Add(new Mensaje { tipo = "Error", titulo = "Error", cuerpo = "No cuenta con privilegios para realizar esta acción, inicie sesión" });
                        TempData["mensajes"] = lstMensajes;
                    }
                }
                catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                {
                    var sb = new System.Text.StringBuilder();
                    foreach (var failure in ex.EntityValidationErrors)
                    {
                        sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                        foreach (var error in failure.ValidationErrors)
                        {
                            sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                            lstMensajes.Add(new Mensaje { tipo = "Error", titulo = "Error", cuerpo = error.PropertyName + ":" + error.ErrorMessage });
                            sb.AppendLine();
                        }
                    }
                    lstMensajes.Add(new Mensaje { tipo = "Error", titulo = "Error", cuerpo = sb.ToString() });
                    TempData["mensajes"] = lstMensajes;
                    SystemLog log = new SystemLog();
                    log.ErrorLog(sb.ToString());
                    throw new Exception(sb.ToString());
                }
            }

            return RedirectToAction("AgregarConsultorio", "Administrador");
        }
        public ActionResult Create_nuevo()
        {
            List<Mensaje> lstMensajes = (((List<Mensaje>)TempData["mensajes"]) == null) ? new List<Mensaje>() : (List<Mensaje>)TempData["mensajes"];

            HttpPostedFileBase imagenM = (Request.Files.Count > 0) ? Request.Files[0] : null;
            string encodedData = string.Empty;

            string nombre = Request["nombre_especialista"];
            string apellidos = Request["apellido_especialista"];
            string foto = Request["foto-especialista"];
            string pagina = Request["pagina-especialista"];
            string email = Request["email_especialista"];
            string celular = Request["celular-especialista"];
            int especialidad = 0;

            Int32.TryParse(Request["idEspecialidad"], out especialidad);


            string tipo_menbresia = Request["tipo_membresia"];
            DateTime fecha_inicio;
            DateTime fecha_fin;
            DateTime.TryParse(Request["fecha_inicio_membresia"], out fecha_inicio);
            DateTime.TryParse(Request["fecha_fin_membresia"], out fecha_fin);

            string departamento = Request["Departamento-consultorio"];
            int ciudad = 0;

            Int32.TryParse(Request["idCiudad"], out ciudad);

            string direccion = Request["calle_consultorio"];
            string telefono = Request["telefono-consultorio"];
            string latitud = Request["latitud"];
            string longitud = Request["longitud"];

            string contrasena1 = Request["contraseña_especialista"];
            string contrasena2 = Request["confirmar_contraseña_especialista"];

            if (!string.IsNullOrWhiteSpace(nombre) && !string.IsNullOrWhiteSpace(apellidos) && !string.IsNullOrWhiteSpace(email)
                            && fecha_inicio != null && especialidad > 0 && fecha_fin != null && ciudad > 0
                            && !string.IsNullOrWhiteSpace(direccion) && !string.IsNullOrWhiteSpace(contrasena1) && !string.IsNullOrWhiteSpace(contrasena2))
            {
                if (contrasena1.Equals(contrasena2))
                {

                    if (imagenM != null)
                    {
                        MemoryStream target = new MemoryStream();
                        imagenM.InputStream.CopyTo(target);
                        byte[] filebytes = target.ToArray();
                        if (filebytes.Length > 0)
                        {
                            string extension = Path.GetExtension(imagenM.FileName);
                            encodedData = "data:image/" + extension.Replace(".", "") + ";base64,";
                            encodedData += Convert.ToBase64String(filebytes, Base64FormattingOptions.None);
                        }
                    }

                    try
                    {
                        UsuarioAuth admin = (UsuarioAuth)Session["usuario"];
                        if (admin != null)
                        {
                            if (admin.rolNombre.Equals("Administrador"))
                            {
                                List<TipoUsuario> tipo_usuario = db.TipoUsuario.ToList().Where(m => m.IdTipoUsuario == 3).ToList();
                                List<Especialidades> especialidades = db.Especialidades.ToList().Where(m => m.IdEspecialidad == especialidad).ToList();
                                if (tipo_usuario.Count > 0 && especialidades.Count > 0)
                                {
                                    Membresias menbresia = new Membresias
                                    {
                                        TipoMembresia = tipo_menbresia,
                                        FechaInicio = fecha_inicio,
                                        FechaFin = fecha_fin
                                    };

                                    Especialistas especialistas = new Especialistas
                                    {
                                        Activo = true,
                                        NombreEsp = nombre,
                                        ApellidoEsp = apellidos,
                                        PaginaWebEsp = pagina,
                                        CelularEsp = celular,
                                        EmailEsp = email,
                                        FotoEsp = encodedData,
                                        Especialidades = especialidades[0],
                                        Login = new Login
                                        {
                                            TipoUsuario = tipo_usuario[0],
                                            UsuarioLogin = email,
                                            PasswordLogin = CifradoDatos.cifrarPassword(contrasena1)
                                        },
                                        IdSuscripcion = menbresia.IdMembresia
                                    };

                                    Direcciones consultorio = new Direcciones
                                    {
                                        Calle = direccion,
                                        Ciudades = new Ciudades
                                        {
                                            IdCiudad = ciudad
                                        },
                                        TelefonoFijo = telefono,
                                        Latitud = latitud,
                                        Longitud = longitud,
                                        Especialistas = especialistas
                                    };
                                    db.Membresias.Add(menbresia);
                                    db.Especialistas.Add(especialistas);
                                    db.Direcciones.Add(consultorio);
                                    db.SaveChanges();

                                    lstMensajes.Add(new Mensaje { tipo = "Notificacion", titulo = "Notificacion", cuerpo = "Especialista registrada exitosamente." });

                                    TempData["mensajes"] = lstMensajes;
                                }
                                else
                                {
                                    lstMensajes.Add(new Mensaje { tipo = "Error", titulo = "Error", cuerpo = "Ocurrio un problema procesando la solicitud" });
                                    TempData["mensajes"] = lstMensajes;
                                }
                            }
                            else
                            {
                                lstMensajes.Add(new Mensaje { tipo = "Error", titulo = "Error", cuerpo = "No cuenta con privilegios para realizar esta accion, inicie sesión" });
                                TempData["mensajes"] = lstMensajes;
                            }
                        }
                        else
                        {
                            lstMensajes.Add(new Mensaje { tipo = "Error", titulo = "Error", cuerpo = "No cuenta con privilegios para realizar esta accion, inicie sesión" });
                            TempData["mensajes"] = lstMensajes;
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        var sb = new System.Text.StringBuilder();
                        foreach (var failure in ex.EntityValidationErrors)
                        {
                            sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                            foreach (var error in failure.ValidationErrors)
                            {
                                sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                                lstMensajes.Add(new Mensaje { tipo = "Error", titulo = "Error", cuerpo = error.PropertyName + ":" + error.ErrorMessage });
                                sb.AppendLine();
                            }
                        }
                        lstMensajes.Add(new Mensaje { tipo = "Error", titulo = "Error", cuerpo = sb.ToString() });
                        TempData["mensajes"] = lstMensajes;
                        SystemLog log = new SystemLog();
                        log.ErrorLog(sb.ToString());
                        throw new Exception(sb.ToString());
                    }
                }
            }
            return RedirectToAction("InsertarEspecialista", "Administrador");
        }