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)); } }
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)); } }
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)); } }
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)); } }
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)); } }
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))); }
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())); } }
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)); } }
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)); } }
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())); } }
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)); } }
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)); } }
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)); } }
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)); } }
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)); } }
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)); } }