public void enviarMail(Usuario u, Venta v, string mensaje) { if (u.Nombre != null) { var fromAddress = new MailAddress("*****@*****.**", "SORProject"); var toAddress = new MailAddress(u.Mail, u.Nombre); const string fromPassword = "******"; const string subject = "¡Has ganado una subasta!"; string body = mensaje; var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, fromPassword) }; using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body }) { //smtp.Send(message); } } }
public static bool enEspera(int id) { bool enEspera = false; MySqlConnection conn = new MySqlConnection(connString); MySqlCommand command = conn.CreateCommand(); Venta v = new Venta(); command.CommandText = "Select * from ventas where id =" + id; conn.Open(); MySqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { v.id = int.Parse(reader["id"].ToString()); v.finalizada = int.Parse(reader["finalizada"].ToString()); } if (v.finalizada == 3) { enEspera = true; Debug.WriteLine("La venta: " + v.id + " es 3"); } else if (v.finalizada == 4) { Debug.WriteLine("La venta: " + v.id + " es 4"); isFinalizada(v.id); } conn.Close(); return enEspera; }
public static void addToTopic(Venta v) { publisher = new TopicPublisher(TOPIC_NAME, BROKER); var javaScriptSerializer = new JavaScriptSerializer(); String item = javaScriptSerializer.Serialize(v); publisher.SendMessage(item); }
static void editarVenta(Venta v) { for (int i = 0; i < listaVentas.Count; i++) { if (listaVentas[i].id == v.id) { listaVentas[i].fecha_F = v.fecha_F; } } }
//Se llena la lista con las ventas de la BD static void InicializaVentas() { MySqlConnection conn = new MySqlConnection(connString); MySqlCommand command = conn.CreateCommand(); Venta v; command.CommandText = "Select * from ventas where finalizada = 0"; conn.Open(); listaVentas = new List<Venta>(); MySqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { v = new Venta(); v.id = int.Parse(reader["id"].ToString()); v.tipo = reader["tipo"].ToString(); v.estado = reader["estado"].ToString(); v.autor = reader["autor"].ToString(); v.año = 0; v.precio = int.Parse(reader["precio"].ToString()); v.fecha_I = Convert.ToDateTime(reader["fecha_I"].ToString()); v.fecha_F = Convert.ToDateTime(reader["fecha_F"].ToString()); v.finalizada = int.Parse(reader["finalizada"].ToString()); v.negociado = int.Parse(reader["negociado"].ToString()); v.idComprador = int.Parse(reader["idComprador"].ToString()); listaVentas.Add(v); idHash.Add(v.id, true); } gp.insertar(listaVentas); conn.Close(); VigilarBD(); }
//Vigila la BD en busca de nuevas ventas static void VigilarBD() { MySqlConnection conn = new MySqlConnection(connString); MySqlCommand command = conn.CreateCommand(); Venta v; List<int> toDelete = new List<int>(); List<int> toFalse = new List<int>(); while (true) { //Buscamos ventas en curso que pueden no estar en nuestra lista command.CommandText = "Select * from ventas where finalizada = 0"; conn.Open(); MySqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { v = new Venta(); v.id = int.Parse(reader["id"].ToString()); v.tipo = reader["tipo"].ToString(); v.estado = reader["estado"].ToString(); v.autor = reader["autor"].ToString(); v.año = 0; v.precio = int.Parse(reader["precio"].ToString()); v.fecha_I = Convert.ToDateTime(reader["fecha_I"].ToString()); v.fecha_F = Convert.ToDateTime(reader["fecha_F"].ToString()); v.finalizada = int.Parse(reader["finalizada"].ToString()); v.negociado = int.Parse(reader["negociado"].ToString()); v.idComprador = int.Parse(reader["idComprador"].ToString()); if (isNuevaVenta(v)) { //Informar de la nueva venta en el Topic Obras addToTopic(v); listaVentas = gp.getListaVentas(); listaVentas.Add(v); gp.insertar(listaVentas); idHash.Add(v.id, true); } else if (isVentaEditada(v)) //Venta existente que ha sido editada { editarVenta(v); addToTopic(v); idHash[v.id] = true; } else //No es nueva { idHash[v.id] = true; } } //Comprobamos si todos son true, si no lo son, alguna venta ha finalizado foreach (int key in idHash.Keys) { if ((Boolean)idHash[key] == false) { //Esta id ya no esta por lo que debe haber finalizado o haber sido cancelada, actualizamos la lista isFinalizada(key); //La eliminamos del Hash excepto si finalizada es 3 (esperando autorizacion vendedor) if (!enEspera(key)) { toDelete.Add(key); } } } for(int i=0; i<toDelete.Count; i++){ idHash.Remove(toDelete[i]); } foreach (int key in idHash.Keys) { toFalse.Add(key); } for (int i = 0; i < toFalse.Count; i++) { idHash[toFalse[i]] = false; } toFalse.Clear(); toDelete.Clear(); conn.Close(); } }
static bool isVentaEditada(Venta v) { bool editada = true; for (int i = 0; i < listaVentas.Count; i++) { if (listaVentas[i].id == v.id) { if(listaVentas[i].fecha_F == v.fecha_F){ editada = false; } } } return editada; }
static bool isNuevaVenta(Venta v) { bool esNueva = true; for (int i = 0; i < listaVentas.Count; i++) { if (listaVentas[i].id == v.id) { esNueva = false; } } return esNueva; }
static void isFinalizada(int id) { Debug.WriteLine("La venta: " + id + " esta finalizandose"); MySqlConnection conn = new MySqlConnection(connString); MySqlCommand command = conn.CreateCommand(); Venta v = new Venta(); command.CommandText = "Select * from ventas where id =" + id; conn.Open(); MySqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { v.id = int.Parse(reader["id"].ToString()); v.finalizada = int.Parse(reader["finalizada"].ToString()); v.idComprador = int.Parse(reader["idComprador"].ToString()); } conn.Close(); for (int i = 0; i < listaVentas.Count; i++) { if (listaVentas[i].id == id) { listaVentas[i].finalizada = v.finalizada; listaVentas[i].idComprador = v.idComprador; } } }
public void informarVentaFinalizada(Venta v, Usuario comprador) { //Informar a los pujadores de la venta finalizada (TOPIC) const string TOPIC_NAME = "Ventas"; const string BROKER = "tcp://localhost:61616"; TopicPublisher publisher; publisher = new TopicPublisher(TOPIC_NAME, BROKER); v.comprador = comprador.Nombre; var javaScriptSerializer = new JavaScriptSerializer(); String item = javaScriptSerializer.Serialize(v); //Debug.WriteLine(item); publisher.SendMessage(item); }
public Venta getVenta(int id) { Venta v = new Venta(); for (int i = 0; i < listaVentas.Count; i++) { if (listaVentas[i].id == id) { v = listaVentas[i]; } } return v; }
public void gestionarVentaFinalizada(Venta v) { //Dar como finalizada la venta en la BD MySqlConnection conn = new MySqlConnection(connString); MySqlCommand command = conn.CreateCommand(); command.CommandText = "update ventas set finalizada = 1 where id =" + v.id; conn.Open(); command.ExecuteNonQuery(); conn.Close(); //Informar al vendedor y comprador de que la venta ha finalizado //Obtener la puja maxima command.CommandText = "select * from pujas p where p.idVenta = " + v.id; conn.Open(); Puja pMax = new Puja(); MySqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Puja p = new Puja(); p.ventaId = int.Parse(reader["idVenta"].ToString()); p.pujadorId = int.Parse(reader["idUsuario"].ToString()); p.cantidad = int.Parse(reader["precioPuja"].ToString()); if (p.cantidad > pMax.cantidad){ pMax = p; } } conn.Close(); //Obtener al usuario de la puja maxima command.CommandText = "select * from usuarios u where u.id = " + pMax.pujadorId; conn.Open(); Usuario uGanador = new Usuario(); reader = command.ExecuteReader(); while (reader.Read()) { uGanador.Nombre = reader["nombre"].ToString(); uGanador.Mail = reader["mail"].ToString(); } conn.Close(); //Obtener al usuario vendedor command.CommandText = "select * from usuarios u, ventas v where u.id = v.vendedor and v.id =" + pMax.ventaId; conn.Open(); Usuario uVendedor = new Usuario(); reader = command.ExecuteReader(); while (reader.Read()) { uVendedor.Nombre = reader["nombre"].ToString(); uVendedor.Mail = reader["mail"].ToString(); } conn.Close(); //Enviar un mail ambos enviarMail(uGanador, v, "Le informamos que ha ganado la subasta del articulo: " + v.tipo + " con ID: " + v.id); enviarMail(uVendedor, v, "Le informamos que ha vendido el articulo: " + v.tipo + " con ID: " + v.id); //Informar a los pujadores de la venta finalizada (TOPIC) informarVentaFinalizada(v, uGanador); //Purgar venta de la lista actual for (int i = 0; i < listaVentas.Count; i++) { if (listaVentas[i].id == v.id) { listaVentas.RemoveAt(i); } } LogMessageToFile(uGanador.Nombre + " ha ganado la subasta del artículo: " + v.tipo + " con ID: " + v.id.ToString() + ". Vendido por: " + uVendedor.Nombre); }
public void gestionarNegociadoManual(Venta v) { if (v.finalizada == 4) //El negociado ha terminado { finalizarVentaManual(v); } else if (v.finalizada == 3) //El tiempo ha terminado y hay que pasar al estado de negociado { //Ponemos la venta en espera en la BD MySqlConnection conn = new MySqlConnection(connString); MySqlCommand command = conn.CreateCommand(); command.CommandText = "update ventas set finalizada = 3 where id =" + v.id; conn.Open(); command.ExecuteNonQuery(); conn.Close(); //Evitamos que se puedan enviar mas pujas informarVentaFinalizada(v, new Usuario()); } }