Exemple #1
0
        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));
        }
Exemple #3
0
        /// <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);
            }
            }
        }