예제 #1
0
 public void BuyAuction(int productId, int monto, string userId, string tienda)
 {
     try
     {
         Oferta o = new Oferta
         {
             esFinal = true,
             monto = monto,
             ProductoID = productId,
             UsuarioID = userId
         };
         controladorSubasta.OfertarProducto(o, tienda);
         Compra c = new Compra
         {
             monto = monto,
             fecha_compra = DateTime.UtcNow,
             ProductoID = productId,
             UsuarioID = userId
         };
         controladorSubasta.AgregarCompra(c, tienda);
         Clients.All.newBuyPosted(productId, monto, userId);
     }
     catch (Exception e)
     {
         Clients.Caller.onError(productId, e.Message);
     }
 }
예제 #2
0
 public void CierreSubastaCompraDirecta()
 {
     Console.WriteLine("Cierre subasta con compra directa");
     string tienda = "MobileCenter";
     IDALSubasta sdal = new DALSubastaEF();
     Producto p = new Producto { nombre = "test2", UsuarioID = "*****@*****.**", fecha_cierre = DateTime.UtcNow.AddMinutes(1), CategoriaID = 5 };
     long prod = sdal.AgregarProducto(p, tienda);
     Compra compra = new Compra { monto = 200, ProductoID = prod, UsuarioID = "*****@*****.**", fecha_compra = DateTime.UtcNow };
     sdal.AgregarCompra(compra, tienda);
     Console.WriteLine("Se espera el envio de un mail al vendedor como comprador.");
 }
예제 #3
0
        public void sendEmailNotification(Compra c, DataProductoQueue p)
        {
            MailAddress toAddress;
            string subject;
            string body;

            //aviso al usuario que gano la subasta
            toAddress = new MailAddress(c.UsuarioID, "");
            subject = "¡Has ganado una subasta en Chebay!";
            body = "<p>Has ganado una subasta sobre el producto " + p.ProductoID + " " + p.nombre + "!</p>";

            using (var message = new MailMessage(fromAddress, toAddress)
            {
                Subject = subject,
                IsBodyHtml = true,
                Body = body
            })
            {
                smtp.Send(message);
            }
        }
예제 #4
0
        public void AgregarCompraPostSubasta(Compra c, string idTienda)
        {
            try
            {
                if (c == null)
                    throw new Exception("Debe pasar una Compra.");
                chequearTienda(idTienda);
                using (var context = ChebayDBContext.CreateTenant(idTienda))
                {
                    //Chequea que no haya otras compras para ese producto.
                    var qCompra = from cmp in context.compras
                                  where cmp.ProductoID == c.ProductoID
                                  select cmp;
                    if (qCompra.Count() > 0)
                        throw new Exception("El producto " + c.ProductoID + " ya fue comprado.");

                    //Para que no se puedan hacer más ofertas sobre el producto.
                    var qProducto = from prd in context.productos
                                    where prd.ProductoID == c.ProductoID
                                    select prd;
                    Producto p = qProducto.FirstOrDefault();
                    p.fecha_cierre = DateTime.UtcNow;

                    //Obtengo el usuario que esta comprando.
                    var qUsuario = from usr in context.usuarios
                                   where usr.UsuarioID == c.UsuarioID
                                   select usr;
                    Usuario u = qUsuario.FirstOrDefault();

                    //Actualizo el balance monteario del comprador.
                    u.compras_valor += c.monto;

                    //Obtengo el usuario que esta vendiendo.
                    var qVendedor = from vnd in context.usuarios
                                    where vnd.UsuarioID == p.UsuarioID
                                    select vnd;
                    Usuario v = qVendedor.FirstOrDefault();

                    //Actualizo el balance monteario del comprador.
                    v.ventas_valor += c.monto;

                    //Vinculo la compra con el producto y el usuario.
                    p.compra = c;
                    if (u.compras == null)
                        u.compras = new HashSet<Compra>();
                    u.compras.Add(c);
                    context.compras.Add(c);
                    context.SaveChanges();
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                throw e;
            }
        }
예제 #5
0
        //--COMPRAS--
        public void AgregarCompra(Compra c, string idTienda)
        {
            try
            {
                if (c == null)
                    throw new Exception("Debe pasar una Compra.");
                chequearTienda(idTienda);
                using (var context = ChebayDBContext.CreateTenant(idTienda))
                {
                    //Chequea que no haya otras compras para ese producto.
                    var qCompra = from cmp in context.compras
                                  where cmp.ProductoID == c.ProductoID
                                  select cmp;
                    if (qCompra.Count() > 0)
                        throw new Exception("El producto " + c.ProductoID + " ya fue comprado.");

                    //Para que no se puedan hacer más ofertas sobre el producto.
                    var qProducto = from prd in context.productos
                                    where prd.ProductoID == c.ProductoID
                                    select prd;
                    Producto p = qProducto.FirstOrDefault();
                    p.fecha_cierre = DateTime.UtcNow;

                    //Obtengo el usuario que esta comprando.
                    var qUsuario = from usr in context.usuarios
                                   where usr.UsuarioID == c.UsuarioID
                                   select usr;
                    Usuario u = qUsuario.FirstOrDefault();

                    //Actualizo el balance monteario del comprador.
                    u.compras_valor += c.monto;

                    //Obtengo el usuario que esta vendiendo.
                    var qVendedor = from vnd in context.usuarios
                                    where vnd.UsuarioID == p.UsuarioID
                                    select vnd;
                    Usuario v = qVendedor.FirstOrDefault();

                    //Actualizo el balance monteario del comprador.
                    v.ventas_valor += c.monto;

                    //Vinculo la compra con el producto y el usuario.
                    p.compra = c;
                    if (u.compras == null)
                        u.compras = new HashSet<Compra>();
                    u.compras.Add(c);
                    context.compras.Add(c);

                    context.SaveChanges();

                    //Notifico inmediatamente al comprador
                    Thread t = new Thread(delegate()
                    {
                        String linkTienda = "http://chebuynow.azurewebsites.net/"+ idTienda;
                        BLNotificaciones bl = new BLNotificaciones();
                        {
                            string asuntou = "Chebay: Compra de producto!";
                            String dest = "";
                            String linkCalif = "http://chebuynow.azurewebsites.net/" + idTienda + "/Usuario/CalificarUsuario?prodId=" + p.ProductoID;

                            if (u.Email != null)
                            {
                                dest = u.Email;
                            }
                            else if (IsValidMail(u.UsuarioID))
                            {
                                dest = u.UsuarioID;
                            }
                            if (dest != "")
                            {
                                string bodyMensaje = getBodyMailHTML(idTienda + ": Subasta ganada!", "Has ganado una nueva subasta!", u, p, c.monto, true, linkCalif, linkTienda);
                                bl.sendEmailNotification(dest, asuntou, bodyMensaje);
                            }
                        }
                        //mail a vendedor
                        //obtengo vendedor
                        IDALUsuario udal = new DALUsuarioEF();

                        Usuario vendedor = udal.ObtenerUsuario(p.UsuarioID, idTienda);
                        string asunto = "Chebay: Venta de producto!";
                        string bodyMensajeVendedor = getBodyMailHTML(idTienda + ": Producto vendido!", "Has vendido un nuevo producto!", u, p, c.monto, false, "", linkTienda);

                        if (vendedor.Email != null)
                        {
                            bl.sendEmailNotification(vendedor.Email, asunto, bodyMensajeVendedor);
                        }
                        else
                        {
                            if (IsValidMail(vendedor.UsuarioID))
                            {
                                bl.sendEmailNotification(vendedor.UsuarioID, asunto, bodyMensajeVendedor);
                            }
                            //else... por algun error no tiene mail
                        }
                    });

                    //asincronismo
                    Debug.WriteLine("Empieza envio mail...");
                    t.Start();
                    Debug.WriteLine("Termina envio de mail...");
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                throw e;
            }
        }
예제 #6
0
        private void procesarSubasta(DataProductoQueue p)
        {
            IDALSubasta ip = new DALSubastaEF();
            BLNotificaciones bl = new BLNotificaciones();
            IDALUsuario ubl = new DALUsuarioEF();

            //obtengo producto
            Producto prod = ip.ObtenerProducto(p.ProductoID, p.TiendaID);

            //Si no fue comprado por CompraDirecta
            if (!ip.ExisteCompra(p.ProductoID, p.TiendaID))
            {
                //vendedor
                Usuario vendedor = ubl.ObtenerUsuario(p.OwnerProducto, p.TiendaID);

                if (ip.TieneOfertas(p.ProductoID, p.TiendaID))
                {
                    //Obtengo la oferta ganadora.
                    Oferta o = ip.ObtenerOfertaGanadora(p.ProductoID, p.TiendaID);

                    //Creo una compra entre el Producto y el Usuario.
                    Compra c = new Compra
                    {
                        fecha_compra = p.fecha_cierre,
                        monto = o.monto,
                        ProductoID = o.ProductoID,
                        UsuarioID = o.UsuarioID
                    };
                    //se envia mensaje al vendedor en AgregarCompra
                    ip.AgregarCompraPostSubasta(c, p.TiendaID);

                    //obtengo mail ganador
                    Usuario u = ubl.ObtenerUsuario(c.UsuarioID, p.TiendaID);
                    //Notifico al ganador.
                    String linkTienda = "http://chebuynow.azurewebsites.net/" + p.TiendaID;
                    String linkCalif = "http://chebuynow.azurewebsites.net/" + p.TiendaID + "/Usuario/CalificarUsuario?prodId=" + p.ProductoID;
                    string bodyMensaje = getBodyMailHTML(p.TiendaID + ": Subasta ganada!", "Has ganado una nueva subasta!", u, prod, c.monto, true, linkCalif, linkTienda);

                    string asunto = "Chebay: Subasta de producto!";
                    bl.sendEmailNotification(u.Email, asunto, bodyMensaje);

                    //en agregar compra se notifica al vendedor.

                    //mail a vendedor
                    //obtengo vendedor
                    IDALUsuario udal = new DALUsuarioEF();

                    string asuntovendedor = "Chebay: Venta de producto!";
                    string bodyMensajeVendedor = getBodyMailHTML(p.TiendaID + ": Producto vendido!", "Has vendido un nuevo producto!", vendedor, prod, c.monto, false, "", linkTienda);

                    if (vendedor.Email != null)
                    {
                        bl.sendEmailNotification(vendedor.Email, asuntovendedor, bodyMensajeVendedor);
                    }
                    else
                    {
                        if (IsValidMail(vendedor.UsuarioID))
                        {
                            bl.sendEmailNotification(vendedor.UsuarioID, asuntovendedor, bodyMensajeVendedor);
                        }
                        //else... por algun error no tiene mail
                    }

                }
                else
                {
                    //no fue comprado
                    Debug.WriteLine("NO TIENE COMPRAS MAIL AL VENDEDOR");
                    String linkTienda = "http://chebuynow.azurewebsites.net/" + p.TiendaID;
                    string asunto = "Chebay: Producto no vendido...";
                    string bodyMensajeVendedor = getBodyMailHTML(p.TiendaID + ": Producto no vendido...", "No se ha logrado subastar su producto.", vendedor, prod, 0, false, "", linkTienda);
                    bl.sendEmailNotification(vendedor.Email, asunto, bodyMensajeVendedor);
                }

            }//si fue comprado se descarta el mensaje.
        }