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); } }
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."); }
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); } }
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; } }
//--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; } }
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. }