Beispiel #1
0
        public Respuesta <Distancia[]> GetVehiclesNear(string sessionId, string company, string branch, double latitude, double longitude, int count)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceOperation);

                var empresa = GetEmpresaByCode(company);
                var linea   = GetLineaByCode(branch, empresa);

                var coches = DAOFactory.CocheDAO.GetList(new[] { empresa.Id }, new[] { linea.Id });

                if (!coches.Any())
                {
                    throw new ApplicationException("No se encontraron móviles para " + empresa + " - " + linea);
                }

                var pois = ReportFactory.MobilePoiDAO.GetMobilesNearPoint(coches, latitude, longitude, 10000);

                if (pois.Count > count)
                {
                    pois.RemoveRange(count, pois.Count - count);
                }

                var distancias = pois.Select(p => new Distancia {
                    Interno = p.Interno, Latitud = p.Latitud, Longitud = p.Longitud, Esquina = p.Esquina, Metros = p.Distancia
                }).ToArray();
                return(Respuesta <Distancia[]> .Create(distancias));
            }
            catch (Exception ex)
            {
                return(Respuesta <Distancia[]> .CreateError(ex.Message));
            }
        }
Beispiel #2
0
        public Respuesta <Posicion[]> GetLocationByBranch(string sessionId, string company, string branch)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceOperation);
                ValidateExpiration(string.Concat("GetLocation[", company, ",", branch, "]"), 60);

                var empresa = GetEmpresaByCode(company);
                var linea   = string.IsNullOrEmpty(branch) ? null : GetLineaByCode(branch, empresa);

                var coches = DAOFactory.CocheDAO.GetList(new[] { empresa.Id }, new[] { linea != null ? linea.Id : -1 });

                if (!coches.Any())
                {
                    throw new ApplicationException("No se encontraron móviles para " + empresa + " - " + linea);
                }

                var posiciones = coches.Select(coche => GetPosicion(coche)).Where(p => p != null).ToArray();

                return(Respuesta <Posicion[]> .Create(posiciones));
            }
            catch (Exception ex)
            {
                return(Respuesta <Posicion[]> .CreateError(ex.Message));
            }
        }
Beispiel #3
0
        public Respuesta <ProvinciaVO[]> GetProvincias(string sessionId)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceGeocoder);
                var provincias = GeocoderHelper.BuscarProvincias().ToArray();

                return(Respuesta <ProvinciaVO[]> .Create(provincias));
            }
            catch (Exception ex)
            {
                return(Respuesta <ProvinciaVO[]> .CreateError(ex.Message));
            }
        }
Beispiel #4
0
        public Respuesta <DireccionVO[]> GetSmartSearch(string sessionId, string frase)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceGeocoder);

                var direcciones = GeocoderHelper.GetDireccionSmartSearch(frase).ToArray();

                return(Respuesta <DireccionVO[]> .Create(direcciones));
            }
            catch (Exception ex)
            {
                return(Respuesta <DireccionVO[]> .CreateError(ex.Message));
            }
        }
Beispiel #5
0
        public Respuesta <DireccionVO[]> GetDireccion(string sessionId, string calle, int altura, string esquina, string partido, int provincia)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceGeocoder);

                var direcciones = GeocoderHelper.GetDireccion(calle, altura, esquina, partido, provincia).ToArray();

                return(Respuesta <DireccionVO[]> .Create(direcciones));
            }
            catch (Exception ex)
            {
                return(Respuesta <DireccionVO[]> .CreateError(ex.Message));
            }
        }
Beispiel #6
0
    private Respuesta <T> CheckTime <T>(string function, string company, string branch)
    {
        var key      = string.Concat("App_Services.", function, "[", company, ",", branch, "]");
        var lastTime = Application[key];

        if (lastTime != null)
        {
            var last = Convert.ToDateTime(lastTime);
            if (DateTime.UtcNow.Subtract(last) < TimeSpan.FromMinutes(1))
            {
                return(Respuesta <T> .CreateError("Ultima consulta: " + last.ToString("HH:mm:ss (UTC)")));
            }
        }

        Application[key] = DateTime.UtcNow;
        return(Respuesta <T> .Create(default(T)));
    }
Beispiel #7
0
    public Respuesta <bool> ImportData(string sessionId, string company, string branch, string data, int version)
    {
        try
        {
            //BaseService.ValidateLoginInfo(sessionId, Securables.WebServiceImport);

            var empresa = BaseService.GetEmpresaByCode(company);
            var linea   = string.IsNullOrEmpty(branch) ? null : BaseService.GetLineaByCode(branch, empresa);

            var server = new Server();
            server.Import(empresa.Id, linea != null ? linea.Id: -1, data, version);

            return(Respuesta <bool> .Create(true));
        }
        catch (Exception ex)
        {
            return(Respuesta <bool> .CreateError(ex.ToString()));
        }
    }
Beispiel #8
0
    public Respuesta <Distancia[]> GetMovilesCercanos(double latitud, double longitud, int cantidad, string empresa, string linea)
    {
        try
        {
            var emp = DAOFactory.EmpresaDAO.FindByCodigo(empresa);
            if (emp == null)
            {
                return(Respuesta <Distancia[]> .CreateError("Empresa " + empresa + " no encontrada"));
            }
            var lin = DAOFactory.LineaDAO.FindByCodigo(emp.Id, linea);
            if (lin == null)
            {
                return(Respuesta <Distancia[]> .CreateError("Linea " + linea + " no encontrada"));
            }
            if (!lin.Interfaceable)
            {
                return(Respuesta <Distancia[]> .CreateError("La Linea " + linea + " no acepta consultas de esta interface"));
            }

            var coches = DAOFactory.CocheDAO.FindList(new[] { emp.Id }, new[] { lin.Id });
            if (!coches.Any())
            {
                return(Respuesta <Distancia[]> .CreateError("No se encontraron móviles para " + empresa + " - " + linea));
            }

            var pois = ReportFactory.MobilePoiDAO.GetMobilesNearPoint(coches, latitud, longitud, 10000);

            if (pois.Count > cantidad)
            {
                pois.RemoveRange(cantidad, pois.Count - cantidad);
            }

            var distancias = pois.Select(p => new Distancia {
                Interno = p.Interno, Metros = p.Distancia
            }).ToArray();
            return(Respuesta <Distancia[]> .Create(distancias));
        }
        catch (Exception ex)
        {
            return(Respuesta <Distancia[]> .CreateError(ex.Message));
        }
    }
Beispiel #9
0
    public Respuesta <Posicion> GetLocationByVehicle(string company, string branch, string vehicle)
    {
        try
        {
            var time = CheckTime <Posicion>("GetPosiciones", company, branch);
            if (!time.RespuestaOk)
            {
                return(time);
            }

            var emp = DAOFactory.EmpresaDAO.FindByCodigo(company);
            if (emp == null)
            {
                return(Respuesta <Posicion> .CreateError("Empresa " + company + " no encontrada"));
            }
            Linea lin = null;
            if (branch != string.Empty)
            {
                lin = DAOFactory.LineaDAO.FindByCodigo(emp.Id, branch);
                if (lin == null)
                {
                    return(Respuesta <Posicion> .CreateError("Linea " + branch + " no encontrada"));
                }
                if (!lin.Interfaceable)
                {
                    return(Respuesta <Posicion> .CreateError("La Linea " + branch + " no acepta consultas de esta interface"));
                }
            }

            var coche = DAOFactory.CocheDAO.FindByInterno(new[] { emp.Id }, new[] { lin != null ? lin.Id : -1 }, vehicle);
            if (coche == null)
            {
                return(Respuesta <Posicion> .CreateError("No se encontro el vehiculo " + vehicle));
            }

            return(Respuesta <Posicion> .Create(GetPosicion(coche)));
        }
        catch (Exception ex)
        {
            return(Respuesta <Posicion> .CreateError(ex.Message));
        }
    }
Beispiel #10
0
    public Respuesta <bool> Done(string sessionId, string company, string branch, string query, string parameters)
    {
        try
        {
            ValidateLoginInfo(sessionId, Securables.WebServiceExport);

            var emp     = GetEmpresaByCode(company);
            var empresa = emp.Id;
            var linea   = string.IsNullOrEmpty(branch) ? -1 : GetLineaByCode(branch, emp).Id;

            var factory = new QueryFactory(DAOFactory);
            var data    = factory.Done(empresa, linea, query, parameters, Usuario);

            return(Respuesta <bool> .Create(data));
        }
        catch (Exception ex)
        {
            return(Respuesta <bool> .CreateError(ex.ToString()));
        }
    }
Beispiel #11
0
    public Respuesta <Posicion[]> GetLocationByBranch(string company, string branch)
    {
        try
        {
            var time = CheckTime <Posicion[]>("GetPosiciones", company, branch);
            if (!time.RespuestaOk)
            {
                return(time);
            }

            var emp = DAOFactory.EmpresaDAO.FindByCodigo(company);
            if (emp == null)
            {
                return(Respuesta <Posicion[]> .CreateError("Empresa " + company + " no encontrada"));
            }
            Linea lin = null;
            if (branch != string.Empty)
            {
                lin = DAOFactory.LineaDAO.FindByCodigo(emp.Id, branch);
                if (lin == null)
                {
                    return(Respuesta <Posicion[]> .CreateError("Linea " + branch + " no encontrada"));
                }
                if (!lin.Interfaceable)
                {
                    return(Respuesta <Posicion[]> .CreateError("La Linea " + branch + " no acepta consultas de esta interface"));
                }
            }

            var coches = DAOFactory.CocheDAO.FindList(new[] { emp.Id }, new[] { lin != null? lin.Id : -1 })
                         .Where(c => c.Dispositivo != null);

            var posiciones = coches.ToList().Select(coche => GetPosicion(coche));

            return(Respuesta <Posicion[]> .Create(posiciones.Where(p => p != null).ToArray()));
        }
        catch (Exception ex)
        {
            return(Respuesta <Posicion[]> .CreateError(ex.Message));
        }
    }
Beispiel #12
0
    public Respuesta <string> GetEsquinaMasCercana(string interno, string empresa, string linea)
    {
        try
        {
            var emp = DAOFactory.EmpresaDAO.FindByCodigo(empresa);
            if (emp == null)
            {
                return(Respuesta <string> .CreateError("Empresa " + empresa + " no encontrada"));
            }
            var lin = DAOFactory.LineaDAO.FindByCodigo(emp.Id, linea);
            if (lin == null)
            {
                return(Respuesta <string> .CreateError("Linea " + linea + " no encontrada"));
            }
            if (!lin.Interfaceable)
            {
                return(Respuesta <string> .CreateError("La Linea " + linea + " no acepta consultas de esta interface"));
            }

            var coche = DAOFactory.CocheDAO.FindByInterno(new[] { emp.Id }, new[] { lin.Id }, interno);
            if (coche == null)
            {
                return(Respuesta <string> .CreateError("No se encontraro el movil con interno " + interno));
            }

            var pos = DAOFactory.LogPosicionDAO.GetLastOnlineVehiclePosition(coche);
            if (pos == null)
            {
                return(Respuesta <string> .CreateError("No se encontro posicion para el movil " + interno));
            }
            var dir = GeocoderHelper.GetEsquinaMasCercana(pos.Latitud, pos.Longitud);
            return(Respuesta <string> .Create(dir == null
                                              ?string.Format("({0}, {1})", pos.Latitud, pos.Longitud)
                                              : dir.Direccion));
        }
        catch (Exception ex)
        {
            return(Respuesta <string> .CreateError(ex.Message));
        }
    }
Beispiel #13
0
        public Respuesta <bool> Anular(string sessionId, string company, string branch, string code, string reason)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceTickets);

                var empresa = GetEmpresaByCode(company);
                var linea   = string.IsNullOrEmpty(branch) ? null : GetLineaByCode(branch, empresa);
                var codigo  = code.Trim();
                if (string.IsNullOrEmpty(codigo))
                {
                    throw new ApplicationException("El codigo no puede estar vacío");
                }

                var ticket = DAOFactory.TicketDAO.FindByCode(new[] { empresa.Id }, new[] { linea != null ? linea.Id : -1 }, codigo);

                if (ticket == null)
                {
                    throw new ApplicationException("No se encontró un ticket con el código: " + code);
                }

                if (ticket.Estado == Ticket.Estados.EnCurso)
                {
                    var ciclo        = new CicloLogisticoHormigon(ticket, DAOFactory, new MessageSaver(DAOFactory));
                    var eventoCierre = EventFactory.GetCloseEvent();
                    ciclo.ProcessEvent(eventoCierre);
                }
                ticket.Anular(reason, Usuario);

                DAOFactory.TicketDAO.SaveOrUpdate(ticket);

                return(Respuesta <bool> .Create(true));
            }
            catch (Exception e)
            {
                STrace.Error("WebService Tickets", e.Message);
                return(Respuesta <bool> .CreateError(e.Message));
            }
        }
Beispiel #14
0
        public Respuesta <ControlDeCiclo[]> GetControlDeCiclo(string sessionId, string company, string branch, DateTime utcDate)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceTickets);
                ValidateExpiration(string.Concat("GetControlDeCiclo[", company, ",", branch, "]"), 180);

                var empresa = GetEmpresaByCode(company);
                var linea   = string.IsNullOrEmpty(branch) ? null : GetLineaByCode(branch, empresa);
                var desde   = utcDate.Date;
                var hasta   = desde.AddDays(1).AddMilliseconds(-1);

                var empty = new[] { -1 };

                var results = DAOFactory.TicketDAO.GetList(new[] { empresa.Id },
                                                           new[] { linea != null ? linea.Id : -1 },
                                                           empty,
                                                           empty,
                                                           empty,
                                                           empty,
                                                           empty,
                                                           empty,
                                                           empty,
                                                           empty,
                                                           empty,
                                                           desde,
                                                           hasta)
                              .Select(t => new ControlDeCiclo(t))
                              .ToArray();

                return(Respuesta <ControlDeCiclo[]> .Create(results));
            }
            catch (Exception e)
            {
                STrace.Error("WebService Tickets", e.Message);
                return(Respuesta <ControlDeCiclo[]> .CreateError(e.Message));
            }
        }
Beispiel #15
0
        public Respuesta <Posicion> GetLocationByVehicle(string sessionId, string company, string branch, string vehicle)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceOperation);
                ValidateExpiration(string.Concat("GetLocation[", company, ",", branch, "]"), 60);

                var empresa = GetEmpresaByCode(company);
                var linea   = GetLineaByCode(branch, empresa);

                var coche = DAOFactory.CocheDAO.GetList(new[] { empresa.Id }, new[] { linea.Id }).FirstOrDefault(c => c.Interno == vehicle);

                if (coche == null)
                {
                    throw new ApplicationException("No se encontro el vehiculo " + vehicle);
                }

                return(Respuesta <Posicion> .Create(GetPosicion(coche)));
            }
            catch (Exception ex)
            {
                return(Respuesta <Posicion> .CreateError(ex.Message));
            }
        }
Beispiel #16
0
        public Respuesta <bool> AssignAndInit(string sessionId, string company, string branch, DateTime utcDate, string clientCode, string deliveryPointCode, int tripNo, string vehicle, string driver, string load)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceTickets);

                var empresa = GetEmpresaByCode(company);

                var linea = string.IsNullOrEmpty(branch) ? null : GetLineaByCode(branch, empresa);

                Ticket ticket;
                if (tripNo > 0)
                {
                    ticket = DAOFactory.TicketDAO.FindByOrdenDiario(empresa != null ? empresa.Id : -1,
                                                                    linea != null ? linea.Id : -1, utcDate, tripNo);

                    if (ticket == null)
                    {
                        throw new ApplicationException("No se encontro un ticket con un orden " + tripNo + " para el dia " + utcDate.ToString("dd/MM/yyyy"));
                    }

                    if (ticket.Cliente.Codigo != clientCode)
                    {
                        throw new ApplicationException("El ticket con orden " + tripNo + " para el dia " + utcDate.ToString("dd/MM/yyyy") + " no tiene el mismo cliente que el ingresado. Ingresado: " + clientCode + " - Ticket " + ticket.Codigo + ": " + ticket.Cliente.Codigo);
                    }
                }
                else
                {
                    var respuesta = Respuesta <bool> .Create(true);

                    respuesta.Mensaje = "No se recibió número de viaje. Ticket omitido.";
                    return(respuesta);

                    //var cliente = GetClienteByCode(clientCode);

                    //var puntoEntrega = GetPuntoEntregaByCode(deliveryPointCode, cliente);

                    //var tickets = DAOFactory.TicketDAO.GetList(new[] { empresa != null ? empresa.Id : -1 },
                    //                                           new[] { linea != null ? linea.Id : -1 },
                    //                                           new[] { -1 },
                    //                                           new[] { -1 },
                    //                                           new[] { -1 },
                    //                                           new[] { -1 },
                    //                                           new int[] { Ticket.Estados.Pendiente },
                    //                                           new[] { cliente.Id },
                    //                                           new[] { puntoEntrega != null ? puntoEntrega.Id : -1 },
                    //                                           new[] { -1 },
                    //                                           utcDate.Date, utcDate.Date.AddDays(1));

                    //ticket = tickets.Where(t => t.Estado == Ticket.Estados.Pendiente).FirstOrDefault();

                    //if (ticket == null) throw new ApplicationException("No se encontro un ticket para el cliente " + clientCode);
                }

                var vehiculo = GetCocheByInterno(empresa, linea, vehicle);

                if (vehiculo.Dispositivo == null)
                {
                    throw new ApplicationException("El vehiculo " + vehiculo.Interno + " no tiene un dispositivo asignado.");
                }

                var multiplesRemitos = ticket.Pedido != null && ticket.Pedido.EsMinimixer;
                var ticketVehiculo   = DAOFactory.TicketDAO.FindEnCurso(vehiculo.Dispositivo);
                if (ticketVehiculo != null)
                {
                    if (!multiplesRemitos || ticketVehiculo.Pedido == null || ticket.Pedido == null || ticketVehiculo.Pedido.Id != ticket.Pedido.Id)
                    {
                        ticketVehiculo.UserField3 += "(auto cerrado ws)";
                        var cicloAnterior = new CicloLogisticoHormigon(ticketVehiculo, DAOFactory, new MessageSaver(DAOFactory));
                        var eventoCierre  = EventFactory.GetCloseEvent();
                        cicloAnterior.ProcessEvent(eventoCierre);
                    }
                    else
                    {
                        ticket.Anular("Multiples remitos: " + ticketVehiculo.Codigo + " (ws)", Usuario);
                        DAOFactory.TicketDAO.SaveOrUpdate(ticket);
                        ticket = ticketVehiculo;
                    }
                }

                ticket.Vehiculo           = vehiculo;
                ticket.Dispositivo        = vehiculo.Dispositivo;
                ticket.CantidadCargaReal += load;
                ticket.UserField3         = "(iniciado via " + (tripNo > 0 ? "nro viaje" : "ws") + ")";

                var ciclo = new CicloLogisticoHormigon(ticket, DAOFactory, new MessageSaver(DAOFactory));
                ciclo.ProcessEvent(EventFactory.GetInitEvent());

                STrace.Trace("WebService Tickets", vehiculo.Dispositivo.Id, String.Format("Ticket {0} iniciado correctamente. {1}", ticket.Codigo, tripNo > 0 ? "Por nro de viaje" : "Por datos"));
                return(Respuesta <bool> .Create(true));
            }
            catch (Exception e)
            {
                STrace.Error("WebService Tickets", e.Message);
                return(Respuesta <bool> .CreateError(e.Message));
            }
        }