public async Task <bool> Notificar(List <Distribuidor> distribuidors, Compra compra) { try { //Posicion myposicion = new Posicion { Latitud = (double)compra.Latitud, Longitud = (double)compra.Longitud }; foreach (var item in distribuidors) { Debug.WriteLine("se debe notifica a {0}", item.IdDistribuidor); List <string> tags = new List <string>(); tags.Add(item.DeviceID); await AzureHubUtils.SendNotificationAsync(string.Format("Un cliente desea {0} tanque(s)", compra.Cantidad), tags, item.DeviceID, "1", compra.IdCompra, item.IdDistribuidor.ToString()); } //algoritmo para obtener los que estan cercas return(true); } catch (Exception ex) { Debug.Write(ex.Message); return(false); throw; } }
public async System.Threading.Tasks.Task <IHttpActionResult> PostRutaAsync(Ruta ruta) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } ruta.Fecha = DateTime.Now; db.Ruta.Add(ruta); try { db.SaveChanges(); } catch (DbUpdateException) { if (RutaExists(ruta.IdRuta)) { return(Conflict()); } else { throw; } } db.Configuration.ProxyCreationEnabled = false; var compra = db.Compra.Where(x => x.IdDistribuidor == ruta.IdDistribuidor && x.Estado == 1).FirstOrDefault(); var posactual = new Models.Posicion() { Latitud = (double)ruta.Latitud, Longitud = (double)ruta.Longitud }; var poscompra = new Models.Posicion() { Latitud = (double)compra.Latitud, Longitud = (double)compra.Longitud }; // esto es para saber si esta cerca y enviarle la notificacion if (Utils.Geo.EstaCercaDeMi(posactual, poscompra, 2)) { //notificar var cliente = db.Cliente.Where(x => x.IdCliente == compra.IdCliente).FirstOrDefault(); Debug.WriteLine("se debe notifica a {0}", cliente.DeviceID); List <string> tags = new List <string>(); tags.Add(cliente.DeviceID); await AzureHubUtils.SendNotificationAsync("su pedido está a pocos metros de llegar", tags, cliente.DeviceID, "2", compra.IdCompra, compra.IdDistribuidor.ToString()); } return(CreatedAtRoute("DefaultApi", new { id = ruta.IdRuta }, ruta)); }
/// <summary> /// Metodo para notificar segun la /// </summary> /// <param name="compra"></param> /// <param name="tipo"></param> /// <returns></returns> public async Task <bool> Notificacion(Compra compra, int tipo) { switch (tipo) { case 1: try { db.Configuration.ProxyCreationEnabled = false; var usuarios = db.Distribuidor.Where(x => x.Habilitado == true).ToList(); List <Ruta> ultimapos = new List <Ruta>(); foreach (var item in usuarios) { var rutausuario = db.Ruta.Where(x => x.IdDistribuidor == item.IdDistribuidor).OrderByDescending(x => x.Fecha).ToList(); ultimapos.Add(rutausuario.FirstOrDefault()); } if (ultimapos.Count > 0) { //Posicion myposicion = new Posicion { Latitud = (double)compra.Latitud, Longitud = (double)compra.Longitud }; foreach (var item in ultimapos) { //Posicion posicionVendedor = new Posicion //{ // Latitud = (double)item.Latitud, // Longitud = (double)item.Longitud, //}; //if (Geo.EstaCercaDeMi(myposicion, posicionVendedor, 10)) //{ Debug.WriteLine("se debe notifica a {0}", item.IdDistribuidor); List <string> tags = new List <string>(); tags.Add(item.Distribuidor.DeviceID); await AzureHubUtils.SendNotificationAsync(string.Format("Un cliente desea {0} tanque(s)", compra.Cantidad), tags, item.Distribuidor.DeviceID, "1", compra.IdCompra, item.IdDistribuidor.Value.ToString()); // } } //algoritmo para obtener los que estan cercas } return(true); } catch (Exception ex) { Debug.Write(ex.Message); return(false); throw; } case 2: try { db.Configuration.ProxyCreationEnabled = false; var cliente = db.Cliente.Where(x => x.IdCliente == compra.IdCliente).FirstOrDefault(); Debug.WriteLine(string.Format("se debe notifica a {0}", cliente.DeviceID)); List <string> tags = new List <string>(); tags.Add(cliente.DeviceID); await AzureHubUtils.SendNotificationAsync("Su pedido ha sido confirmado, un distribuidor está en camino para realizar la entrega", tags, cliente.DeviceID, "1", compra.IdCompra, compra.IdDistribuidor.ToString()); return(true); } catch (Exception) { return(false); throw; } case 3: try { db.Configuration.ProxyCreationEnabled = false; var cliente = db.Cliente.Where(x => x.IdCliente == compra.IdCliente).FirstOrDefault(); Debug.WriteLine("se debe notifica a {0}", cliente.DeviceID); List <string> tags = new List <string>(); tags.Add(cliente.DeviceID); await AzureHubUtils.SendNotificationAsync("Gracias por confiar en nosotros, Por favor califica el servicio brindado", tags, cliente.DeviceID, "3", compra.IdCompra, compra.IdDistribuidor.ToString()); return(true); } catch (Exception) { return(false); throw; } // notificar cancelación de compra por parte del cliente case 4: try { var Distribuidor = db.Distribuidor.Where(x => x.IdDistribuidor == compra.IdDistribuidor).FirstOrDefault(); Debug.WriteLine("se debe notifica a {0}", Distribuidor.DeviceID); List <string> tags = new List <string>(); tags.Add(Distribuidor.DeviceID); await AzureHubUtils.SendNotificationAsync("El cliente cancelo el pedido ", tags, Distribuidor.DeviceID, "2", compra.IdCompra, compra.IdDistribuidor.ToString()); return(true); } catch (Exception) { return(false); throw; } // notificar cancelación de compra por parte del Distribuidor case 5: try { db.Configuration.ProxyCreationEnabled = false; var cliente = db.Cliente.Where(x => x.IdCliente == compra.IdCliente).FirstOrDefault(); Debug.WriteLine("se debe notifica a {0}", cliente.DeviceID); List <string> tags = new List <string>(); tags.Add(cliente.DeviceID); await AzureHubUtils.SendNotificationAsync("El distribuidor a cancelado su pedido, estamos buscando un nuevo distribuidor para atender tu pedido.", tags, cliente.DeviceID, "5", compra.IdCompra, compra.IdDistribuidor.ToString()); return(true); } catch (Exception) { return(false); throw; } default: { return(false); } } }