示例#1
0
        private bool AgregarAnuncios(CarritoDeCompra carrito, int idUsuario)
        {
            using (var _dbContext = new MercampoEntities())
            {
                Startup.OpenDatabaseConnection(_dbContext);
                if (_dbContext.Database.Connection.State != ConnectionState.Open)
                {
                    return(false);
                }

                var paquetes = carrito.Paquetes;
                foreach (var paquete in paquetes)
                {
                    if (paquete.EsRenovacion())
                    {
                        Anuncio anuncio = _dbContext.Anuncios.Where(a => a.id == paquete.IdAnuncio).FirstOrDefault();
                        anuncio.fecha_fin = anuncio.fecha_fin.Value.AddMonths(paquete.Meses);
                        anuncio.idPaquete = paquete.Id;
                        anuncio.estado    = (int)EstadoAnuncio.Aprobado;
                        anuncio.activo    = true;
                        _dbContext.Anuncio_Beneficio.RemoveRange(_dbContext.Anuncio_Beneficio.Where(b => b.idAnuncio == anuncio.id));
                        _dbContext.SaveChanges();

                        var beneficios = paquete.Beneficios;
                        foreach (var beneficio in beneficios)
                        {
                            _dbContext.Anuncio_Beneficio.Add(new Anuncio_Beneficio
                            {
                                idAnuncio   = anuncio.id,
                                idBeneficio = beneficio.Id
                            });
                            _dbContext.SaveChanges();
                        }
                    }
                    else
                    {
                        var nuevoAnuncio = _dbContext.Anuncios.Add(new Anuncio
                        {
                            activo    = false,
                            idUsuario = idUsuario,
                            estado    = (int)EstadoAnuncio.Vacio,
                            idPaquete = paquete.Id
                        });
                        _dbContext.SaveChanges();
                        var beneficios = paquete.Beneficios;
                        foreach (var beneficio in beneficios)
                        {
                            _dbContext.Anuncio_Beneficio.Add(new Anuncio_Beneficio
                            {
                                idAnuncio   = nuevoAnuncio.id,
                                idBeneficio = beneficio.Id
                            });
                            _dbContext.SaveChanges();
                        }
                    }
                }
                _dbContext.Database.Connection.Close();
                return(true);
            }
        }
示例#2
0
        private bool AgregarPago(int idUsuario, Usuario_Tarjeta tarjeta, double total, string referencia, CarritoDeCompra carrito)
        {
            using (var _dbContext = new MercampoEntities())
            {
                Startup.OpenDatabaseConnection(_dbContext);
                if (_dbContext.Database.Connection.State != ConnectionState.Open)
                {
                    return(false);
                }

                Pago newPago = _dbContext.Pagoes.Add(new Pago
                {
                    idUsuario      = idUsuario,
                    tipoTarjeta    = tarjeta.tipoTarjeta,
                    digitosTarjeta = tarjeta.digitosTarjeta,
                    total          = total,
                    fecha          = DateTime.Now,
                    Referencia     = referencia
                });
                _dbContext.SaveChanges();

                foreach (var paquete in carrito.Paquetes)
                {
                    if (paquete.Beneficios.Count() < 1)
                    {
                        Pago_Concepto pagoConcepto = _dbContext.Pago_Concepto.Add(new Pago_Concepto
                        {
                            idPago             = newPago.id,
                            tipo               = paquete.EsRenovacion(),
                            nombrePaquete      = paquete.Nombre,
                            mesesPaquete       = paquete.Meses,
                            precioPaquete      = paquete.Precio,
                            descripcionPaquete = string.Empty
                        });
                        continue;
                    }

                    foreach (var beneficio in paquete.Beneficios)
                    {
                        Pago_Concepto pagoConcepto = _dbContext.Pago_Concepto.Add(new Pago_Concepto
                        {
                            idPago               = newPago.id,
                            tipo                 = paquete.EsRenovacion(),
                            nombrePaquete        = paquete.Nombre,
                            mesesPaquete         = paquete.Meses,
                            precioPaquete        = paquete.Precio,
                            descripcionPaquete   = string.Empty,
                            descripcionBeneficio = beneficio.Descripcion,
                            precioBeneficio      = beneficio.Precio,
                            tipoBeneficio        = beneficio.Tipo
                        });
                    }
                }

                _dbContext.SaveChanges();
                _dbContext.Database.Connection.Close();
                return(true);
            }
        }
示例#3
0
        public ActionResult Index(int?abrirLogin)
        {
            using (MercampoEntities _dbContext = new MercampoEntities())
            {
                Startup.OpenDatabaseConnection(_dbContext);
                if (_dbContext.Database.Connection.State != ConnectionState.Open)
                {
                    return(View());
                }

                var ultimo = _dbContext.Accesos.Where(a => a.activo == true).FirstOrDefault();
                var necesitaActualizarAnuncios = false;
                if (ultimo == null)
                {
                    necesitaActualizarAnuncios = true;
                }
                else
                {
                    var result = ultimo.Fecha.Subtract(DateTime.UtcNow);

                    if (result.Days != 0)
                    {
                        necesitaActualizarAnuncios = true;
                        ultimo.activo = false;
                        _dbContext.SaveChanges();
                    }
                }

                if (necesitaActualizarAnuncios)
                {
                    _dbContext.Accesos.Add(new Acceso
                    {
                        Fecha  = DateTime.UtcNow,
                        activo = true
                    });
                    _dbContext.SaveChanges();

                    var anunciosQueDebeDesactivar = _dbContext.Anuncios.Where(a => a.fecha_fin != null && a.activo == true && (int)EstadoAnuncio.Aprobado == a.estado);
                    foreach (var anuncio in anunciosQueDebeDesactivar)
                    {
                        if (anuncio.fecha_fin.Value.Subtract(DateTime.UtcNow).Days < 0)
                        {
                            var a = _dbContext.Anuncios.Where(an => an.id == anuncio.id).FirstOrDefault();
                            a.activo = false;
                            a.estado = (int)EstadoAnuncio.Vencido;
                        }
                    }
                    _dbContext.SaveChanges();
                }
                return(View());
            }
        }
示例#4
0
        public async Task <LoginStatus> LoginPortalAsync(string email, string password)
        {
            HttpResponse response = HttpContext.Current.Response;

            return(await Task.Run(() =>
            {
                using (var _dbContext = new MercampoEntities())
                {
                    var usuario = _dbContext.Usuarios.Where(u => u.email == email).FirstOrDefault();
                    if (usuario == null)
                    {
                        return LoginStatus.Incorrecto;
                    }

                    if (!usuario.confirmaEmail)
                    {
                        //TO DO: Reenviar token
                        return LoginStatus.ConfirmacionMail;
                    }

                    if (usuario.password.CompareTo(password) != 0)
                    {
                        return LoginStatus.Incorrecto;
                    }

                    usuario.tokenSesion = getToken();
                    setCookie("VendeAgroUser", usuario.tokenSesion, response);
                    _dbContext.SaveChanges();
                    return LoginStatus.Exitoso;
                }
            }));
        }
示例#5
0
        public async Task <CambiarContrasenaStatus> CambiarContrasenaAdminAsync(string password, string token)
        {
            return(await Task.Run(() =>
            {
                if (token == null)
                {
                    return CambiarContrasenaStatus.TokenInvalido;
                }

                using (var _dbContext = new MercampoEntities())
                {
                    Startup.OpenDatabaseConnection(_dbContext);
                    if (_dbContext.Database.Connection.State != System.Data.ConnectionState.Open)
                    {
                        return CambiarContrasenaStatus.Error;
                    }

                    var usuario = _dbContext.Usuario_Administrador.Where(u => u.password == token).FirstOrDefault();

                    if (usuario == null)
                    {
                        _dbContext.Database.Connection.Close();
                        return CambiarContrasenaStatus.TokenInvalido;
                    }

                    usuario.password = password;
                    _dbContext.SaveChanges();

                    _dbContext.Database.Connection.Close();
                    return CambiarContrasenaStatus.ContrasenaActualizada;
                }
            }));
        }
示例#6
0
        public void LogoutPortal()
        {
            HttpRequest request = HttpContext.Current.Request;

            if (request.Cookies["VendeAgroUser"] != null)
            {
                var token = request.Cookies["VendeAgroUser"]["token"];
                if (token != null)
                {
                    borrarCookie(HttpContext.Current.Response, "VendeAgroUser");
                    using (var _dbContext = new MercampoEntities())
                    {
                        Startup.OpenDatabaseConnection(_dbContext);
                        if (_dbContext.Database.Connection.State != System.Data.ConnectionState.Open)
                        {
                            return;
                        }
                        var usuario = _dbContext.Usuarios.Where(u => u.tokenSesion == token).FirstOrDefault();
                        if (usuario == null)
                        {
                            _dbContext.Database.Connection.Close();
                            return;
                        }

                        usuario.tokenSesion = "";
                        _dbContext.SaveChanges();
                        _dbContext.Database.Connection.Close();
                    }
                }
            }
        }
示例#7
0
        public async Task <LoginStatus> LoginPortalAsync(string email, string password)
        {
            HttpResponse response = HttpContext.Current.Response;

            return(await Task.Run(() =>
            {
                using (var _dbContext = new MercampoEntities())
                {
                    var usuario = _dbContext.Usuarios.Where(u => u.email == email).FirstOrDefault();
                    if (usuario == null)
                    {
                        return LoginStatus.Incorrecto;
                    }

                    if (!usuario.confirmaEmail)
                    {
                        string mailMensaje = "<p>Estimado/a {0} gracias por registrarte en mercampo.mx</p>" +
                                             "<p>Para completar tu registro y poder hacer login da click <a href=\'" + Startup.getBaseUrl() + "/Portal/ConfirmarMail?token=" + "{1}\'>AQUÍ</a></p>";
                        var result = Startup.GetServicioEmail().SendAsync(string.Format(mailMensaje, usuario.nombre + " " + usuario.apellidos, usuario.tokenEmail), "Registro Mercampo", usuario.email);
                        return LoginStatus.ConfirmacionMail;
                    }

                    if (usuario.password.CompareTo(password) != 0)
                    {
                        return LoginStatus.Incorrecto;
                    }

                    usuario.tokenSesion = getToken();
                    setCookie("VendeAgroUser", usuario.tokenSesion, response);
                    _dbContext.SaveChanges();
                    return LoginStatus.Exitoso;
                }
            }));
        }
        public async Task <bool> CambiarPassword(string contrasena)
        {
            return(await Task.Run(() =>
            {
                using (var _dbContext = new MercampoEntities())
                {
                    Startup.OpenDatabaseConnection(_dbContext);
                    if (_dbContext.Database.Connection.State != ConnectionState.Open)
                    {
                        return false;
                    }

                    var idActual = Startup.GetAplicacionUsuariosManager().getUsuarioPortalActual(Request).Id;
                    var usuario = _dbContext.Usuarios.Where(u => u.id == idActual).FirstOrDefault();

                    if (usuario == null)
                    {
                        return false;
                    }
                    else
                    {
                        usuario.password = AplicacionUsuariosManager.Hash(contrasena);
                        _dbContext.SaveChanges();
                    }

                    _dbContext.Database.Connection.Close();
                    return true;
                }
            }));
        }
示例#9
0
        internal async Task <ConfirmacionMailStatus> ConfirmarMailPortalAsync(string token)
        {
            return(await Task <ConfirmacionMailStatus> .Run(() =>
            {
                using (MercampoEntities _dbContext = new MercampoEntities())
                {
                    Startup.OpenDatabaseConnection(_dbContext);
                    if (_dbContext.Database.Connection.State != ConnectionState.Open)
                    {
                        return ConfirmacionMailStatus.Error;
                    }

                    var usuario = _dbContext.Usuarios.Where(u => u.tokenEmail == token).FirstOrDefault();
                    if (usuario == null)
                    {
                        return ConfirmacionMailStatus.TokenInvalido;
                    }

                    usuario.confirmaEmail = true;
                    usuario.tokenEmail = getToken();
                    _dbContext.SaveChanges();
                }
                return ConfirmacionMailStatus.MailConfirmado;
            }));
        }
示例#10
0
        public async Task <ActionResult> AnuncioDetalles(int?id, ConsultarDetalles consulta, string query)
        {
            if (id == null)
            {
                return(HttpNotFound("Parámetro inválido se espera un id de un anuncio"));
            }

            HttpNotFoundResult             result = null;
            PortalDetallesAnuncioViewModel model  = null;

            await Task.Run(() =>
            {
                using (var _dbContext = new MercampoEntities())
                {
                    Startup.OpenDatabaseConnection(_dbContext);
                    if (_dbContext.Database.Connection.State != ConnectionState.Open)
                    {
                        result = HttpNotFound("Error en la base de datos");
                    }
                    else
                    {
                        var anuncio = _dbContext.Anuncios.Where(a => a.id == id).FirstOrDefault();
                        if (anuncio == null)
                        {
                            result = HttpNotFound("No se encontro el anuncio con el id solicitado");
                        }
                        else
                        {
                            anuncio.clicks += 1;
                            _dbContext.SaveChanges();
                            var anuncioViewModel = new PortalAnuncioViewModel(anuncio.id, anuncio.titulo, anuncio.precio, anuncio.Subcategoria.Categoria.nombre, anuncio.Subcategoria.nombre,
                                                                              anuncio.Estado1.nombre, anuncio.Fotos_Anuncio.Where(f => f.principal == true).FirstOrDefault()?.ruta);

                            List <PaginaFotoViewModel> fotos = new List <PaginaFotoViewModel>();

                            var rutaVideo = anuncio.Videos_Anuncio.Where(v => v.idAnuncio == id).FirstOrDefault()?.ruta;

                            string nombre = anuncio.Usuario.nombre + " " + anuncio.Usuario.apellidos;
                            var owner     = new PaginaOwnerAnuncioViewModel(anuncio.Usuario.id, nombre, anuncio.Usuario.telefono, anuncio.Usuario.email);

                            foreach (var foto in anuncio.Fotos_Anuncio)
                            {
                                fotos.Add(new PaginaFotoViewModel(foto.principal, foto.ruta));
                            }

                            model = new PortalDetallesAnuncioViewModel(anuncioViewModel, anuncio.descripcion, fotos, rutaVideo, owner, anuncio.clicks, consulta, query);
                        }
                    }
                }
            });

            if (result != null)
            {
                return(result);
            }

            return(View(model));
        }
示例#11
0
        public async Task <ActionResult> GaleriaAnuncio(int?id)
        {
            if (id == null)
            {
                return(HttpNotFound("Parámetro inválido se espera un id de un anuncio"));
            }

            HttpNotFoundResult      result = null;
            GaleriaAnuncioViewModel model  = null;

            await Task.Run(() =>
            {
                using (var _dbContext = new MercampoEntities())
                {
                    Startup.OpenDatabaseConnection(_dbContext);
                    if (_dbContext.Database.Connection.State != ConnectionState.Open)
                    {
                        result = HttpNotFound("Error en la base de datos");
                    }
                    else
                    {
                        var anuncio = _dbContext.Anuncios.Where(a => a.id == id).FirstOrDefault();
                        if (anuncio == null)
                        {
                            result = HttpNotFound("No se encontro el anuncio con el id solicitado");
                        }
                        else
                        {
                            anuncio.clicks += 1;
                            _dbContext.SaveChanges();

                            List <PaginaFotoViewModel> fotos = new List <PaginaFotoViewModel>();

                            foreach (var foto in anuncio.Fotos_Anuncio)
                            {
                                fotos.Add(new PaginaFotoViewModel(foto.principal, foto.ruta));
                            }

                            model = new GaleriaAnuncioViewModel(fotos);
                        }
                    }
                }
            });

            if (result != null)
            {
                return(result);
            }

            return(PartialView("GaleriaAnuncio", model));
        }
示例#12
0
        public async Task <RegistroStatus> RegistroUsuarioAsync(Models.Portal.RegistroViewModel model)
        {
            HttpResponse response = HttpContext.Current.Response;

            return(await Task.Run(async() =>
            {
                using (var _dbContext = new MercampoEntities())
                {
                    var usuario = _dbContext.Usuarios.Where(u => u.email.Equals(model.Email, StringComparison.InvariantCulture)).FirstOrDefault();
                    if (usuario != null)
                    {
                        return RegistroStatus.MailOcupado;
                    }

                    usuario = _dbContext.Usuarios.Where(u => u.telefono.Equals(model.Celular, StringComparison.InvariantCulture)).FirstOrDefault();

                    if (usuario != null)
                    {
                        return RegistroStatus.TelefonoOcupado;
                    }

                    var tokenId = CrearClienteConektaId(model.Nombre, model.Apellidos, model.Email, model.Celular);
                    string tokenSesion = getToken();
                    string tokenEmail = getToken();
                    _dbContext.Usuarios.Add(new Usuario
                    {
                        nombre = model.Nombre,
                        apellidos = model.Apellidos,
                        telefono = model.Celular,
                        password = Hash(model.Password),
                        email = model.Email,
                        confirmaEmail = true,
                        tokenSesion = tokenSesion,
                        tokenEmail = tokenEmail,
                        idConekta = tokenId
                    });

                    _dbContext.SaveChanges();
                    setCookie("VendeAgroUser", tokenSesion, response);

                    var usuarioRegistrado = _dbContext.Usuarios.Where(u => u.email == model.Email).FirstOrDefault();
                    string mailMensaje = "<p>Estimado {0} gracias por registrarte en mercampo.mx</p>" +
                                         "<p>Para completar tu registro y poder hacer login da click <a href=\'" + Startup.getBaseUrl() + "/Portal/ConfirmarMail?token=" + "{1}\'>AQUÍ</a></p>";

                    var result = await Startup.GetServicioEmail().SendAsync(string.Format(mailMensaje, model.Nombre + " " + model.Apellidos, tokenEmail), "Registro Mercampo", model.Email);
                    return RegistroStatus.Exitoso;
                }
            }));
        }
示例#13
0
        public string AgregarTarjetaAsync(int id, string tokenTarjeta, string sessionId)
        {
            using (var _dbContext = new MercampoEntities())
            {
                Startup.OpenDatabaseConnection(_dbContext);
                if (_dbContext.Database.Connection.State != ConnectionState.Open)
                {
                    return(new ResultadoAgregarTarjeta(false, "Error en el servidor, vuelva a intentarlo de nuevo en unos minutos").AsJson());
                }


                var usuario = _dbContext.Usuarios.Where(u => u.id == id).FirstOrDefault();

                if (usuario == null)
                {
                    _dbContext.Database.Connection.Close();
                    return(new ResultadoAgregarTarjeta(false, "Error, el id del usuario al que se le quiere agregar la tarjeta, no existe").AsJson());
                }

                Card request = new Card();
                request.TokenId         = tokenTarjeta;
                request.DeviceSessionId = sessionId;

                try
                {
                    request = Startup.OpenPayLib.CardService.Create(usuario.idConekta, request);
                }
                catch (OpenpayException e)
                {
                    _dbContext.Database.Connection.Close();
                    return(new ResultadoAgregarTarjeta(false, TarjetaResultadoHelpers.ObtenerMensajeError((OpenPayErrorCodes)e.ErrorCode)).AsJson());
                }

                string last4 = request.CardNumber.Substring(request.CardNumber.Length - 4, 4);

                _dbContext.Usuario_Tarjeta.Add(new Usuario_Tarjeta
                {
                    tipoTarjeta    = TarjetaResultadoHelpers.GetTipoTarjeta(request.Brand),
                    digitosTarjeta = last4,
                    tokenTarjeta   = request.Id,
                    idUsuario      = id,
                    activo         = true
                });
                _dbContext.SaveChanges();
                return(new ResultadoAgregarTarjeta(true, "La tarjeta se agregó correctamente.").AsJson());
            }
        }
        public async Task <ActionResult> BorrarTarjeta(int?id)
        {
            return(await Task.Run(() =>
            {
                using (var _dbContext = new MercampoEntities())
                {
                    Startup.OpenDatabaseConnection(_dbContext);
                    if (_dbContext.Database.Connection.State != ConnectionState.Open)
                    {
                        return null;
                    }

                    var usuarioActual = Startup.GetAplicacionUsuariosManager().getUsuarioPortalActual(Request);
                    var tarjetaActual = usuarioActual.Tarjetas.Where(t => t.Id == id).FirstOrDefault();

                    try
                    {
                        Startup.OpenPayLib.CardService.Delete(usuarioActual.IdConekta, tarjetaActual.IdConekta);
                    }
                    catch (OpenpayException e)
                    {
                        return null;
                    }

                    var tarjetaBD = _dbContext.Usuario_Tarjeta.Where(t => t.id == id).FirstOrDefault();

                    if (tarjetaBD == null)
                    {
                        return null;
                    }
                    else
                    {
                        tarjetaBD.activo = false;
                        _dbContext.SaveChanges();
                    }


                    _dbContext.Database.Connection.Close();
                    return RedirectToAction("Perfil", "Portal");
                }
            }));
        }
        public async Task <RegistroStatus> CambiarEmail(string email)
        {
            return(await Task.Run(() =>
            {
                using (var _dbContext = new MercampoEntities())
                {
                    Startup.OpenDatabaseConnection(_dbContext);
                    if (_dbContext.Database.Connection.State != ConnectionState.Open)
                    {
                        return RegistroStatus.Incorrecto;
                    }

                    var usuario = _dbContext.Usuarios.Where(u => u.email == email).FirstOrDefault();

                    if (usuario != null)
                    {
                        return RegistroStatus.MailOcupado;
                    }

                    var idActual = Startup.GetAplicacionUsuariosManager().getUsuarioPortalActual(Request).Id;

                    usuario = _dbContext.Usuarios.Where(u => u.id == idActual).FirstOrDefault();

                    if (usuario == null)
                    {
                        return RegistroStatus.Incorrecto;
                    }
                    else
                    {
                        usuario.email = email;

                        _dbContext.SaveChanges();
                    }

                    _dbContext.Database.Connection.Close();
                    return RegistroStatus.Exitoso;
                }
            }));
        }
        public async Task <bool> CrearAnuncio(string json)
        {
            var anuncio        = JObject.Parse(json);
            var titulo         = (string)anuncio["jtitulo"];
            var descripcion    = (string)anuncio["jdescripcion"];
            var precio         = (double)anuncio["jprecio"];
            var idUsuario      = (int)anuncio["jidUsuario"];
            var idSubcategoria = (int)anuncio["jidSubcategoria"];
            var idEstado       = (int)anuncio["jestado"];
            var fotoDisplay    = (string)anuncio["jfotoDisplay"];
            var fotos          = (JArray)anuncio["jfotos"];
            var video          = (string)anuncio["jvideo"];
            var idAnuncio      = (int)anuncio["idAnuncio"];

            return(await Task.Run(() =>
            {
                using (var _dbContext = new MercampoEntities())
                {
                    Startup.OpenDatabaseConnection(_dbContext);
                    if (_dbContext.Database.Connection.State != ConnectionState.Open)
                    {
                        ModelState.AddModelError("", "Error en la base de datos, vuelva a intentarlo");
                        return false;
                    }
                    else
                    {
                        Anuncio anuncioACrear = _dbContext.Anuncios.Where(a => a.id == idAnuncio).FirstOrDefault();
                        if (anuncioACrear == null || anuncioACrear.estado != (int)EstadoAnuncio.Vacio)
                        {
                            ModelState.AddModelError("", "Error el id del anuncio a crear es incorrecto, vuelva a intentarlo");
                            return false;
                        }

                        anuncioACrear.titulo = titulo;
                        anuncioACrear.descripcion = descripcion;
                        anuncioACrear.precio = precio;
                        anuncioACrear.activo = false;
                        anuncioACrear.idUsuario = idUsuario;
                        anuncioACrear.idSubcategoria = idSubcategoria;
                        anuncioACrear.idEstado = idEstado;
                        anuncioACrear.estado = (int)EstadoAnuncio.PendientePorAprobar;
                        anuncioACrear.clicks = 0;
                        anuncioACrear.vistas = 0;
                        anuncioACrear.fecha_inicio = DateTime.Now;
                        anuncioACrear.fecha_fin = DateTime.Now.AddMonths(anuncioACrear.Paquete.meses);

                        _dbContext.Fotos_Anuncio.Add(new Fotos_Anuncio
                        {
                            ruta = fotoDisplay,
                            idAnuncio = anuncioACrear.id,
                            principal = true
                        });

                        foreach (var item in fotos)
                        {
                            var url = (string)item;
                            _dbContext.Fotos_Anuncio.Add(new Fotos_Anuncio
                            {
                                ruta = url,
                                idAnuncio = anuncioACrear.id,
                                principal = false
                            });
                        }

                        if (!string.IsNullOrEmpty(video))
                        {
                            _dbContext.Videos_Anuncio.Add(new Videos_Anuncio
                            {
                                ruta = video,
                                idAnuncio = anuncioACrear.id
                            });
                        }

                        _dbContext.SaveChanges();
                    }

                    _dbContext.Database.Connection.Close();
                    return true;
                }
            }));
        }
        public async Task <bool> ModificarAnuncio(string json)
        {
            var  anuncio              = JObject.Parse(json);
            var  id                   = (int)anuncio["jid"];
            var  titulo               = (string)anuncio["jtitulo"];
            var  descripcion          = (string)anuncio["jdescripcion"];
            var  precio               = (double)anuncio["jprecio"];
            var  idSubcategoria       = (int)anuncio["jidSubcategoria"];
            var  idEstado             = (int)anuncio["jestado"];
            var  fotoDisplayId        = (int)anuncio["jfotoDisplayId"];
            var  fotoDisplay          = (string)anuncio["jfotoDisplay"];
            var  fotos                = (JArray)anuncio["jfotos"];
            var  fotosEliminadas      = (JArray)anuncio["jfotosEliminadas"];
            var  fotosEliminadasRutas = (JArray)anuncio["jfotosEliminadasRutas"];
            var  video                = (string)anuncio["jvideo"];
            bool estado               = true;

            return(await Task.Run(() =>
            {
                using (var _dbContext = new MercampoEntities())
                {
                    Startup.OpenDatabaseConnection(_dbContext);
                    if (_dbContext.Database.Connection.State != ConnectionState.Open)
                    {
                        ModelState.AddModelError("", "Error en la base de datos, vuelva a intentarlo");
                        return false;
                    }
                    else
                    {
                        var anuncioDb = _dbContext.Anuncios.FirstOrDefault(a => a.id == id);

                        if (anuncioDb == null)
                        {
                            ModelState.AddModelError("", "Error anuncio no encontrado, vuelva a intentarlo");
                            estado = false;
                        }
                        else
                        {
                            anuncioDb.titulo = titulo;
                            anuncioDb.descripcion = descripcion;
                            anuncioDb.precio = precio;
                            anuncioDb.idSubcategoria = idSubcategoria;
                            anuncioDb.idEstado = idEstado;
                            anuncioDb.estado = (int)EstadoAnuncio.PendientePorAprobar;

                            foreach (var foto in fotosEliminadas)
                            {
                                var idFoto = (int)foto;
                                var fotoActual = _dbContext.Fotos_Anuncio.FirstOrDefault(f => f.id == idFoto);
                                _dbContext.Fotos_Anuncio.Remove(fotoActual);
                            }

                            foreach (var foto in fotosEliminadasRutas)
                            {
                                borrarFoto((string)foto);
                            }

                            var fotoDb = _dbContext.Fotos_Anuncio.FirstOrDefault(f => f.id == fotoDisplayId);

                            if (fotoDb == null)
                            {
                                ModelState.AddModelError("", "Error anuncio no encontrado, vuelva a intentarlo");
                                estado = false;
                            }

                            if (fotoDb.ruta != fotoDisplay)
                            {
                                borrarFoto(fotoDb.ruta);
                                fotoDb.ruta = fotoDisplay;
                            }

                            foreach (var item in fotos)
                            {
                                var url = (string)item;
                                _dbContext.Fotos_Anuncio.Add(new Fotos_Anuncio
                                {
                                    ruta = url,
                                    idAnuncio = anuncioDb.id,
                                    principal = false
                                });
                            }

                            if (!string.IsNullOrEmpty(video))
                            {
                                _dbContext.Videos_Anuncio.Add(new Videos_Anuncio
                                {
                                    ruta = video,
                                    idAnuncio = anuncioDb.id
                                });
                            }

                            _dbContext.SaveChanges();
                        }

                        _dbContext.SaveChanges();
                    }

                    _dbContext.Database.Connection.Close();
                    return true;
                }
            }));
        }