public static object GuardarAlta(string Empresa, string HorarioS, string HorarioL, string TipoUnidad, string Turno, string Linea, string TIpoRecorrido, string TipoTurno)
    {
        using (EntidadesConosud dc = new EntidadesConosud())
        {
            CabeceraRutasTransportes cab = new CabeceraRutasTransportes();
            cab.Empresa         = Empresa;
            cab.HorariosSalida  = HorarioS;
            cab.HorariosLlegada = HorarioL;
            cab.TipoUnidad      = TipoUnidad;
            cab.Turno           = Turno;
            cab.Linea           = Linea;
            cab.TipoRecorrido   = TIpoRecorrido;
            cab.TipoTurno       = TipoTurno;


            foreach (var item in HttpContext.Current.Session["Datoskml"].ToString().Split('@'))
            {
                if (item != "")
                {
                    RutasTransportes ruta = new RutasTransportes();
                    ruta.Departamento = "MAIPU";
                    ruta.Latitud      = item.Split(',')[0].ToString().Replace(".", ",");
                    ruta.Longitud     = item.Split(',')[1].ToString().Replace(".", ",");
                    ruta.objCabecera  = cab;
                }
            }

            dc.AddToCabeceraRutasTransportes(cab);
            dc.SaveChanges();
        }

        return(null);
    }
    public static object CargarKML()
    {
        using (EntidadesConosud dc = new EntidadesConosud())
        {
            CabeceraRutasTransportes cab = new CabeceraRutasTransportes();
            cab.Empresa         = "ANDESMAR S.A.";
            cab.HorariosSalida  = "06.15  – 18.15 hs ";
            cab.HorariosLlegada = ": 7.15 – 19,15 hs";
            cab.TipoUnidad      = "Minibus";
            cab.Turno           = "1 y 2 (TURNO)";
            cab.Linea           = "LINEA N° 4 (LUZURIAGA - MAIPU CENTRO - PERDRIEL)";



            string docName = @"C:\Desarrollo\Repositorio\Infolegacy\Conosud\Analisis\Transportes\LINEA 4 TURNO.xml";
            Dictionary <string, object> datos = new Dictionary <string, object>();
            XmlDocument doc = new XmlDocument();
            doc.Load(docName);
            var           listaCoordenadas = doc.ChildNodes[1].ChildNodes[0].ChildNodes[11].ChildNodes[4].ChildNodes[2].ChildNodes;
            int           contador         = 0;
            List <object> dd = new List <object>();
            foreach (var item in listaCoordenadas)
            {
                int r;
                if ((item as XmlElement).LocalName == "coord")
                {
                    Math.DivRem(contador, 1, out r);
                    if (r == 0)
                    {
                        RutasTransportes ruta = new RutasTransportes();
                        ruta.Departamento = "MAIPU";
                        ruta.Latitud      = (item as XmlElement).InnerXml.Split(' ')[1].ToString().Replace(".", ",");
                        ruta.Longitud     = (item as XmlElement).InnerXml.Split(' ')[0].ToString().Replace(".", ",");
                        ruta.objCabecera  = cab;
                        //dd.Add(new object[] { (item as XmlElement).InnerXml.Split(' ')[0], (item as XmlElement).InnerXml.Split(' ')[1] });
                    }
                    contador++;
                }
            }

            dc.AddToCabeceraRutasTransportes(cab);
            dc.SaveChanges();
        }


        //string docName = @"C:\Desarrollo\Repositorio\Infolegacy\Conosud\Analisis\Transportes\LINEA 4 TURNO.xml";
        //Dictionary<string, object> datos = new Dictionary<string, object>();
        //XmlDocument doc = new XmlDocument();
        //doc.Load(docName);
        //var listaCoordenadas = doc.ChildNodes[1].ChildNodes[0].ChildNodes[11].ChildNodes[4].ChildNodes[2].ChildNodes;
        //int contador = 0;
        //List<object> dd = new List<object>();
        //foreach (var item in listaCoordenadas)
        //{
        //    int r;
        //    if ((item as XmlElement).LocalName == "coord")
        //    {
        //        Math.DivRem(contador,1, out r);
        //        if (r == 0)
        //        {
        //            dd.Add(new object[] { (item as XmlElement).InnerXml.Split(' ')[0], (item as XmlElement).InnerXml.Split(' ')[1] });

        //            //List<string> valores = new List<string>();
        //            //valores.Add((item as XmlElement).InnerXml.Split(' ')[0]);
        //            //valores.Add((item as XmlElement).InnerXml.Split(' ')[1]);
        //            //datos.Add(contador.ToString(), valores);

        //        }
        //        contador++;

        //    }
        //}

        return(null);
        //return datos.Take(1000).ToList();
    }
    public static object BuscarLineaTransporte(Double lat, Double lon, string TipoTurno)
    {
        long   earthRadius = 6371000;
        Double latFrom     = deg2rad(lat);
        Double lonFrom     = deg2rad(lon);
        Dictionary <string, object> valores = new Dictionary <string, object>();


        using (EntidadesConosud dc = new EntidadesConosud())
        {
            Double masCercano = 10000;

            CabeceraRutasTransportes cabeceraIda = null;
            long idPuntoIda = 0;

            CabeceraRutasTransportes cabeceraRegreso = null;
            long idPuntoRegreso = 0;



            // Solo se tiene en cuentas las rutas segun el tipo de usuario
            long IdEmpresa = 0;
            List <RutasTransportes> puntos = new List <RutasTransportes>();
            if (HttpContext.Current.Session["TipoUsuario"].ToString() == "Cliente")
            {
                IdEmpresa = long.Parse(HttpContext.Current.Session["IdEmpresaContratista"].ToString());
                puntos    = (from p in dc.RutasTransportes
                             where p.objCabecera.TipoTurno != "Temporal" && p.objCabecera.DestinoRuta == IdEmpresa &&
                             p.objCabecera.TipoTurno == TipoTurno
                             select p).ToList();
            }
            else
            {
                puntos = (from p in dc.RutasTransportes
                          where p.objCabecera.TipoTurno != "Temporal" &&
                          p.objCabecera.TipoTurno == TipoTurno
                          select p).ToList();
            }


            List <RutasTransportes> puntosIda;
            List <RutasTransportes> puntosRegreso;
            if (TipoTurno == "DIURNO")
            {
                puntosIda = (from p in puntos
                             where p.objCabecera.TipoRecorrido == "IDA"
                             select p).ToList();

                puntosRegreso = (from p in puntos
                                 where p.objCabecera.TipoRecorrido != "IDA"
                                 select p).ToList();

                foreach (var item in puntosIda)
                {
                    Double latTo = deg2rad(Convert.ToDouble(item.Latitud));
                    Double lonTo = deg2rad(Convert.ToDouble(item.Longitud));

                    Double latDelta = latTo - latFrom;
                    Double lonDelta = lonTo - lonFrom;

                    Double angle     = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(latDelta / 2), 2) + Math.Cos(latFrom) * Math.Cos(latTo) * Math.Pow(Math.Sin(lonDelta / 2), 2)));
                    Double distancia = (angle * earthRadius) / 1000;
                    if (distancia < masCercano)
                    {
                        masCercano  = distancia;
                        cabeceraIda = item.objCabecera;
                        idPuntoIda  = item.Id;
                    }
                }

                /// Busco para las lineas de regreso
                masCercano = 10000;
                foreach (var item in puntosRegreso)
                {
                    Double latTo = deg2rad(Convert.ToDouble(item.Latitud));
                    Double lonTo = deg2rad(Convert.ToDouble(item.Longitud));

                    Double latDelta = latTo - latFrom;
                    Double lonDelta = lonTo - lonFrom;

                    Double angle     = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(latDelta / 2), 2) + Math.Cos(latFrom) * Math.Cos(latTo) * Math.Pow(Math.Sin(lonDelta / 2), 2)));
                    Double distancia = (angle * earthRadius) / 1000;
                    if (distancia < masCercano)
                    {
                        masCercano      = distancia;
                        cabeceraRegreso = item.objCabecera;
                        idPuntoRegreso  = item.Id;
                    }
                }
            }
            else
            {
                foreach (var item in puntos)
                {
                    Double latTo = deg2rad(Convert.ToDouble(item.Latitud));
                    Double lonTo = deg2rad(Convert.ToDouble(item.Longitud));

                    Double latDelta = latTo - latFrom;
                    Double lonDelta = lonTo - lonFrom;

                    Double angle     = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(latDelta / 2), 2) + Math.Cos(latFrom) * Math.Cos(latTo) * Math.Pow(Math.Sin(lonDelta / 2), 2)));
                    Double distancia = (angle * earthRadius) / 1000;
                    if (distancia < masCercano)
                    {
                        masCercano  = distancia;
                        cabeceraIda = item.objCabecera;
                        idPuntoIda  = item.Id;
                    }
                }
            }



            /// Regla de Negocio
            /// 1. Deberia devolver las lista de puntos del recorrido mar cercano
            /// 2. y los 6 puntos al rededor del punto mas cercano para RE calcular segun la api de google el punto mas cercano


            ///1. Busco los datos necesario para la IDA y en cado de Tipo Turno "TURNO" busco un solo porque la ida y la vuelta es la misma.
            var datos = (from p in puntos.Where(w => w.Cabecera == cabeceraIda.Id).ToList()
                         select new
            {
                Key = Convert.ToDouble(p.Latitud),
                Value = Convert.ToDouble(p.Longitud)
            }).ToList();

            ///2.
            var ptos = (from p in puntos.Where(w => w.Cabecera == cabeceraIda.Id && w.Id >= idPuntoIda - 0 && w.Id <= idPuntoIda + 0).ToList()
                        select new
            {
                Key = Convert.ToDouble(p.Latitud),
                Value = Convert.ToDouble(p.Longitud)
            }).ToList();

            valores.Add("Ruta", datos.ToList());
            valores.Add("PuntosCercanos", ptos.ToList());
            valores.Add("Linea", cabeceraIda.Linea);
            valores.Add("Empresa", cabeceraIda.Empresa);
            valores.Add("Turno", cabeceraIda.Turno);
            valores.Add("Horarios", cabeceraIda.HorariosSalida + " - " + cabeceraIda.HorariosLlegada);
            valores.Add("TipoUnidad", cabeceraIda.TipoUnidad);
            valores.Add("TipoTurno", TipoTurno);
            valores.Add("TipoRecorrido", cabeceraIda.TipoRecorrido);



            if (TipoTurno == "DIURNO")
            {
                if (cabeceraRegreso != null)
                {
                    var datosAlt = (from p in puntos.Where(w => w.Cabecera == cabeceraRegreso.Id).ToList()
                                    select new
                    {
                        Key = Convert.ToDouble(p.Latitud),
                        Value = Convert.ToDouble(p.Longitud)
                    }).ToList();


                    var ptosAlt = (from p in puntos.Where(w => w.Cabecera == cabeceraRegreso.Id && w.Id >= idPuntoRegreso - 0 && w.Id <= idPuntoRegreso + 0).ToList()
                                   select new
                    {
                        Key = Convert.ToDouble(p.Latitud),
                        Value = Convert.ToDouble(p.Longitud),
                        id = p.Id
                    }).ToList();

                    valores.Add("RutaAlt", datosAlt.ToList());
                    valores.Add("PuntosCercanosAlt", ptosAlt.ToList());
                    valores.Add("LineaAlt", cabeceraRegreso.Linea);
                    valores.Add("EmpresaAlt", cabeceraRegreso.Empresa);
                    valores.Add("TurnoAlt", cabeceraRegreso.Turno);
                    valores.Add("HorariosAlt", cabeceraRegreso.HorariosSalida + " - " + cabeceraIda.HorariosLlegada);
                    valores.Add("TipoUnidadAlt", cabeceraRegreso.TipoUnidad);
                    valores.Add("TipoTurnoAlt", TipoTurno);
                    valores.Add("TipoRecorridoAlt", cabeceraRegreso.TipoRecorrido);
                }
            }

            return(valores);
        }
    }
Exemplo n.º 4
0
    public static object GrabarRuta(string Empresa, string HorarioS, string HorarioL, string TipoUnidad, string Turno, string Linea, string TIpoRecorrido, string TipoTurno, List <IDictionary <string, object> > datos, long id, decimal distanciaRuta, string detalle, int capacidad, string destinoRuta)
    {
        using (EntidadesConosud dc = new EntidadesConosud())
        {
            CabeceraRutasTransportes cab;

            if (id > 0)
            {
                var detalles = (from r in dc.RutasTransportes
                                where r.Cabecera == id
                                select r).ToList();

                cab                 = detalles.FirstOrDefault().objCabecera;
                cab.Empresa         = Empresa;
                cab.HorariosSalida  = HorarioS;
                cab.HorariosLlegada = HorarioL;
                cab.TipoUnidad      = TipoUnidad;
                cab.Turno           = Turno;
                cab.Linea           = Linea;
                cab.TipoRecorrido   = TIpoRecorrido;
                cab.TipoTurno       = TipoTurno;
                cab.Km              = distanciaRuta;
                cab.DetalleRuta     = detalle;
                cab.Capacidad       = capacidad;

                if (destinoRuta != "")
                {
                    cab.DestinoRuta = long.Parse(destinoRuta);
                }

                foreach (var item in detalles)
                {
                    dc.DeleteObject(item);
                }

                // Actualizo los legajos para avisar que la linea asiganada a tenido cambios en el recorrido.
                var legajosAfectados = from d in dc.DomiciliosPersonal
                                       where d.LineaAsignada == id || d.LineaAsignadaVuelta == id ||
                                       d.Chofer == true
                                       select d;

                foreach (var l in legajosAfectados)
                {
                    l.RutaConCambio += "(" + id + ")";
                }
            }
            else
            {
                cab                 = new CabeceraRutasTransportes();
                cab.Empresa         = Empresa;
                cab.HorariosSalida  = HorarioS;
                cab.HorariosLlegada = HorarioL;
                cab.TipoUnidad      = TipoUnidad;
                cab.Turno           = Turno;
                cab.Linea           = Linea;
                cab.TipoRecorrido   = TIpoRecorrido;
                cab.TipoTurno       = TipoTurno;
                cab.Capacidad       = capacidad;

                if (destinoRuta != "")
                {
                    cab.DestinoRuta = long.Parse(destinoRuta);
                }

                dc.AddToCabeceraRutasTransportes(cab);
            }


            foreach (var item in datos)
            {
                RutasTransportes ruta = new RutasTransportes();
                ruta.Departamento = "";
                ruta.Latitud      = (item as IDictionary <string, object>).First().Value.ToString().Replace(".", ",");
                ruta.Longitud     = (item as IDictionary <string, object>).Last().Value.ToString().Replace(".", ",");
                ruta.objCabecera  = cab;
            }


            dc.SaveChanges();
        }

        return(null);
    }