示例#1
0
        public IHttpActionResult Authenticate(LoginRequest login)
        {
            if (login == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            //Declaramos Objeto Resultado
            RetornoOperacion Resultado = new RetornoOperacion();

            //Instanciamos Usuario de acuerdo al e-mail proporcionado
            using (Usuario objUsuario = new SAT_CL.Seguridad.Usuario(login.UserName))
            {
                //Autenticando Usuario
                Resultado = objUsuario.AutenticaUsuario(login.Password);

                //Si la Autenticación es correcta
                if (Resultado.OperacionExitosa)
                {
                    DataTable UsuarioCompanias = SAT_CL.Seguridad.UsuarioCompania.ObtieneCompaniasUsuario(objUsuario.id_usuario);
                    if (UsuarioCompanias.Rows.Count == 1)
                    {
                        DataRow DR    = UsuarioCompanias.Rows[0];
                        string  token = TokenGenerator.GenerateTokenJwt(objUsuario.id_usuario + "|" + Convert.ToString(DR["IdCompaniaEmisorReceptor"]));

                        AuthResponse authresponse = new AuthResponse
                        {
                            success = true,
                            data    = new DataLogin {
                                Token = token
                            },
                            errors = new Errors {
                                code = 0, source = new Source {
                                    pointer = ""
                                }, title = "", detail = "Sin errores"
                            }
                        };
                        //string json = JsonConvert.SerializeObject(authresponse);
                        return(Ok(authresponse));
                    }
                    else
                    {
                        FailAuthResponse failauthresponse = new FailAuthResponse
                        {
                            isSucceded = false,
                            message    = "El usuario tiene asignadas más de una compañía."
                        };
                        //string json = JsonConvert.SerializeObject(failauthresponse);
                        return(Json(failauthresponse));
                    }
                }
                else
                {
                    FailAuthResponse failauthresponse = new FailAuthResponse
                    {
                        isSucceded = false,
                        message    = "No se encontraron datos para este cliente."
                    };
                    //string json = JsonConvert.SerializeObject(failauthresponse);
                    return(Json(failauthresponse));
                }
            }
        }
示例#2
0
        public IHttpActionResult getLocation(GetLocationRequest location)
        {
            RetornoOperacion retorno = new RetornoOperacion();
            DateTime         startDate = DateTime.MinValue, endDate = DateTime.MinValue;
            List <string>    folios = new List <string>();
            List <DataRow>   drsViajes = new List <DataRow>();
            string           token_auth = @"", tipo_auth = @"", fecha_peticion = Fecha.ObtieneFechaEstandarMexicoCentro().ToString("yyyy-MM-dd");
            int frecuencia = 0;

            //Validación de Datos Ingesados
            if (location != null)
            {
                //Validando Folios para obtenión de Datos por Viajes
                if (location.TravelFolio.Length > 0)
                {
                    if (location.TravelFolio.Length <= 20)
                    {
                        //Obteniendo Folios Invalidos
                        List <string> folios_invalidos = (from string fls in location.TravelFolio
                                                          where (fls.Trim().Length == 0 || fls.Length >= 50 || string.IsNullOrEmpty(fls))
                                                          select fls).ToList();
                        if (folios_invalidos != null)
                        {
                            if (folios_invalidos.Count == 0)
                            {
                                folios = (from string fls in location.TravelFolio
                                          select fls.Trim()).Distinct().ToList();
                                //Devolviendo resultado positivo
                                retorno = new RetornoOperacion(1, "Validaciones sin Problemas|Folios", true);
                            }
                            else
                            {
                                retorno = new RetornoOperacion("Existen folios invalidos en su petición. Solo puede consultar 20 Folios por Petición. Los Folios no deben exceder los 50 caracteres");
                            }
                        }
                        else
                        {
                            retorno = new RetornoOperacion(1, "Validaciones sin Problemas", true);
                        }
                    }
                    else
                    {
                        retorno = new RetornoOperacion("El Folio no debe de exceder los 500 caracteres");
                    }
                }
                else
                {
                    //Validando Fecha de Inicio
                    if (!string.IsNullOrEmpty(location.StarDate))
                    {
                        //Validando Fecha de Fin
                        if (!string.IsNullOrEmpty(location.EndDate))
                        {
                            if (location.StarDate.Length <= 20)
                            {
                                if (location.StarDate.Length <= 20)
                                {
                                    //Validando Fechas
                                    DateTime.TryParse(location.StarDate, out startDate);
                                    DateTime.TryParse(location.EndDate, out endDate);

                                    //Validando que la Fecha de Fin sea Mayor que la Fecha de Fin
                                    if (DateTime.Compare(startDate, endDate) < 0)
                                    {
                                        //Obteniendo Periodo de Frecuencia
                                        int.TryParse(location.Frecuency, out frecuencia);
                                        if (frecuencia > 0)
                                        {
                                            if (frecuencia <= 60)
                                            {
                                                //Devolviendo resultado positivo
                                                retorno = new RetornoOperacion(1, "Validaciones sin Problemas|Periodos", true);
                                            }
                                            else
                                            {
                                                retorno = new RetornoOperacion(397, "Ingrese una frecuencia menor o igual a 60", false);
                                            }
                                        }
                                        else
                                        {
                                            //Devolviendo resultado positivo
                                            retorno = new RetornoOperacion(1, "Validaciones sin Problemas|Periodos", true);
                                        }
                                    }
                                    //Si las Fechas de son iguales
                                    else if (DateTime.Compare(startDate, endDate) == 0)
                                    {
                                        retorno = new RetornoOperacion(398, "Las Fechas son iguales", false);
                                    }
                                    //Si la Fecha de Inicio es mayor que la de Fin
                                    else if (DateTime.Compare(startDate, endDate) > 0)
                                    {
                                        retorno = new RetornoOperacion(399, "La Fecha de Inicio es mayor a la de Fin", false);
                                    }
                                }
                                else
                                {
                                    retorno = new RetornoOperacion(420, "La Fecha de Fin no debe de exceder los 20 caracteres", false);
                                }
                            }
                            else
                            {
                                retorno = new RetornoOperacion(420, "La Fecha de Inicio no debe de exceder los 20 caracteres", false);
                            }
                        }
                        else
                        {
                            retorno = new RetornoOperacion(419, "No hay Fecha de Fin", false);
                        }
                    }
                    else
                    {
                        retorno = new RetornoOperacion(418, "No hay Fecha de Inicio", false);
                    }
                }
            }
            else
            {
                retorno = new RetornoOperacion(397, "No hay Datos por Validar", false);
            }

            /**** Validando resultado ****/
            if (retorno.OperacionExitosa)
            {
                //Desencriptando Token
                int    idUsuario = 0, idCompania = 0;
                string token_header = "";
                List <RetornoOperacion> errores_unidad = new List <RetornoOperacion>();
                //Obteniendo Encabezados
                System.Net.Http.HttpRequestMessage         req     = Request;
                System.Net.Http.Headers.HttpRequestHeaders headers = req.Headers;
                if (headers.Authorization != null)
                {
                    if (headers.Authorization.Scheme.Equals("Bearer"))
                    {
                        //Obteniendo Token de la Petición
                        token_header = headers.Authorization.Parameter;
                    }
                }

                //Lista Principal de Datos
                List <GetLocationResponse> lista_posiciones = new List <GetLocationResponse>();

                string token_desencriptado = TokenGenerator.ObtenerUsuarioYCompaniaToken(token_header);
                if (!string.IsNullOrEmpty(token_desencriptado))
                {
                    idUsuario  = Convert.ToInt32(Cadena.RegresaCadenaSeparada(token_desencriptado, "|", 0));
                    idCompania = Convert.ToInt32(Cadena.RegresaCadenaSeparada(token_desencriptado, "|", 1));
                }

                //Validando Compania
                if (idCompania > 0)
                {
                    switch (Cadena.RegresaCadenaSeparada(retorno.Mensaje, "|", 1))
                    {
                    case "Folios":
                        drsViajes = SAT_CL.Documentacion.Reportes.ObtieneViajesNISSAN(idCompania, folios);
                        break;

                    case "Periodos":
                        drsViajes = SAT_CL.Documentacion.Reportes.ObtieneViajesNISSAN(idCompania, startDate, endDate);
                        break;

                    default:
                        retorno = new RetornoOperacion(-2);
                        break;
                    }

                    //Validando Viajes
                    if (retorno.OperacionExitosa && drsViajes.Count > 0)
                    {
                        switch (Cadena.RegresaCadenaSeparada(retorno.Mensaje, "|", 1))
                        {
                        case "Folios":
                        {
                            RetornoOperacion val_viajes_unidad = new RetornoOperacion(1);
                            //Oteniendo Viajes no encontrados
                            List <string> viajes_no_encontrados = (from string viaje_solicitado in folios
                                                                   join DataRow viaje_consulta in drsViajes
                                                                   on viaje_solicitado equals viaje_consulta["FolioViaje"].ToString()
                                                                   where !(viaje_solicitado.Equals(viaje_consulta["FolioViaje"].ToString()))
                                                                   select viaje_solicitado).Distinct().ToList();
                            List <DataRow> viajes_encontrados = (from DataRow viaje_consulta in drsViajes
                                                                 join string viaje_solicitado in folios
                                                                 on viaje_consulta["FolioViaje"].ToString() equals viaje_solicitado
                                                                 select viaje_consulta).Distinct().ToList();

                            if (viajes_encontrados != null)
                            {
                                /** Obtiene los Proveedores GPS **/
                                //1.- IdProveedorWS
                                //2.- EndPoint
                                //3.- AccionGPS
                                //4.- User
                                //5.- Pass
                                //6.- AuthUser
                                //7.- AuthPass
                                //8.- AuthType
                                List <Tuple <int, string, string, Tuple <string, string>, Tuple <string, string, string> > > proveedor_gps =
                                    (from DataRow p in viajes_encontrados
                                     where Convert.ToInt32(p["IdProveedorWS"]) > 0
                                     select
                                     new Tuple <int, string, string, Tuple <string, string>, Tuple <string, string, string> >
                                         (Convert.ToInt32(p["IdProveedorWS"]),
                                         p["EndPoint"].ToString(),
                                         p["AccionGPS"].ToString(),
                                         new Tuple <string, string>(p["User"].ToString(), p["Pass"].ToString()),
                                         new Tuple <string, string, string>(p["AuthUser"].ToString(), p["AuthPass"].ToString(), p["AuthType"].ToString()))).Distinct().ToList();
                                if (proveedor_gps != null)
                                {
                                    foreach (Tuple <int, string, string, Tuple <string, string>, Tuple <string, string, string> > gps in proveedor_gps)
                                    {
                                        //Configurando Petición
                                        RestClient  clienteGps  = new RestClient();
                                        RestRequest peticionGps = new RestRequest();
                                        val_viajes_unidad = GetLocationMethods.ObtieneAccesoProveedorGPS(gps, out clienteGps, out token_auth, out tipo_auth);
                                        if (val_viajes_unidad.OperacionExitosa)
                                        {
                                            //Asignando Petición de Proveedor GPS
                                            peticionGps = GetLocationMethods.ObtienePeticionGps(gps, clienteGps, token_auth, tipo_auth);
                                        }

                                        /** Validando Obtención de Token para consumo GPS **/
                                        if (val_viajes_unidad.OperacionExitosa)
                                        {
                                            //Agrupando Viajes
                                            List <DataRow> viajes_x_gps = (from DataRow v in viajes_encontrados
                                                                           where Convert.ToInt32(v["IdProveedorWS"]) == gps.Item1
                                                                           select v).ToList();
                                            List <string> v_x_gps = (from DataRow v in viajes_encontrados
                                                                     where Convert.ToInt32(v["IdProveedorWS"]) == gps.Item1
                                                                     select v["FolioViaje"].ToString()).Distinct().ToList();
                                            if (viajes_x_gps.Count > 0 && v_x_gps.Count > 0)
                                            {
                                                //Recorriendo Viajes
                                                foreach (string viaje in v_x_gps)
                                                {
                                                    //Obteniendo Viajes por Folio
                                                    List <DataRow> vjs = (from DataRow v in viajes_x_gps
                                                                          where v["FolioViaje"].Equals(viaje)
                                                                          select v).ToList();

                                                    if (vjs.Count > 0)
                                                    {
                                                        //Obteniendo Unidades por Viaje
                                                        List <Tuple <int, string, string, string, int, string, string> >
                                                        unidades = (from DataRow u in vjs
                                                                    where Convert.ToInt32(u["IdProveedorUnidadWS"]) > 0
                                                                    select new Tuple <int, string, string, string, int, string, string>
                                                                        (Convert.ToInt32(u["IdTractor"]),
                                                                        u["Tracto"].ToString(),
                                                                        u["PlacasTracto"].ToString(),
                                                                        u["AntenaGPS"].ToString(),
                                                                        Convert.ToInt32(u["IdProveedorUnidadWS"]),
                                                                        u["InicioViajeUnidad"].ToString(),
                                                                        u["TerminoViajeUnidad"].ToString())).Distinct().ToList();
                                                        if (unidades.Count > 0)
                                                        {
                                                            //Recorriendo Unidades
                                                            foreach (Tuple <int, string, string, string, int, string, string> unidad in unidades)
                                                            {
                                                                //Obteniendo los Viajes por Unidad
                                                                List <DataRow> viaje_unidad = (from DataRow vu in vjs
                                                                                               where Convert.ToInt32(vu["IdTractor"]) == unidad.Item1
                                                                                               select vu).ToList();
                                                                if (viaje_unidad.Count > 0)
                                                                {
                                                                    List <Tuple <double, double, string, DateTime, decimal, bool> > points = new List <Tuple <double, double, string, DateTime, decimal, bool> >();
                                                                    RetornoOperacion val_uni_pos = GetLocationMethods.ObtienePosicionesUnidad(unidad, peticionGps, clienteGps, 0, DateTime.MinValue, DateTime.MinValue, out points);

                                                                    if (val_uni_pos.OperacionExitosa && points.Count > 0)
                                                                    {
                                                                        List <GetLocationResponse> lts = new List <GetLocationResponse>();
                                                                        val_viajes_unidad = GetLocationMethods.ObtieneDatosUnidad(unidad, viaje_unidad, points, out lts);
                                                                        if (val_viajes_unidad.OperacionExitosa)
                                                                        {
                                                                            foreach (GetLocationResponse l in lts)
                                                                            {
                                                                                lista_posiciones.Add(l);
                                                                            }
                                                                        }
                                                                        else
                                                                        {
                                                                            //Asignando Error Gestionado
                                                                            errores_unidad.Add(val_viajes_unidad);
                                                                        }
                                                                    }
                                                                    else
                                                                    {
                                                                        //Asignando Error Gestionado
                                                                        errores_unidad.Add(new RetornoOperacion(518, string.Format("No hay posiciones disponibles para la Unidad '{0}' para el periodo del '{1:yyyy-MM-dd HH:mm:ss}' hasta '{2:yyyy-MM-dd HH:mm:ss}'", unidad.Item2, Convert.ToDateTime(unidad.Item6), Convert.ToDateTime(unidad.Item7)), false));
                                                                    }
                                                                }
                                                                else
                                                                {
                                                                    val_viajes_unidad = new RetornoOperacion(517, string.Format("No se puede recuperar el Viaje de la Unidad '{0}'", unidad.Item2), false);
                                                                }
                                                            }
                                                        }
                                                        else
                                                        {
                                                            val_viajes_unidad = new RetornoOperacion(516, "No hay Unidades configuradas para este Proveedor de GPS", false);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        val_viajes_unidad = new RetornoOperacion(515, "No hay viajes para este proveedor", false);
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                val_viajes_unidad = new RetornoOperacion(514, "No hay viajes para este Proveedor de GPS", false);
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    val_viajes_unidad = new RetornoOperacion(513, "No hay proveedores GPS disponibles", false);
                                }
                            }

                            if (viajes_no_encontrados != null)
                            {
                                foreach (string vj in viajes_no_encontrados)
                                {
                                    lista_posiciones.Add
                                        (new GetLocationResponse
                                        {
                                            FolioViaje              = vj,
                                            IdPuntoEvento           = 0,
                                            AETC                    = "",
                                            NumeroContenedor1       = "",
                                            NumeroContenedor2       = "",
                                            NoConsecutivoContenedor = 0,
                                            CartaPorte              = "",
                                            FechaHoraInicioReal     = "",
                                            FechaHoraFinReal        = "",
                                            FechaHoraUltReporte     = "",
                                            UltUbicacionTransporte  = "",
                                            Tracto                  = "",
                                            PlacasTracto            = "",
                                            NombreChofer            = "",
                                            ETA                 = "", //Calcular ETA
                                            LatitudTracto       = 0,
                                            LongitudTracto      = 0,
                                            LatitudContenedor1  = 0,
                                            LongitudContenedor1 = 0,
                                            LatitudContenedor2  = 0,
                                            LongitudContenedor2 = 0,
                                            EncendidoMotor      = false,
                                            StatusRuta          = "OK"
                                        }
                                        );
                                    //Añadiendo el Error
                                    errores_unidad.Add(new RetornoOperacion(512, string.Format("El Folio '{0}'", vj), false));
                                }
                            }

                            //Validaciones Generales de Consumo (ERRORES CRUCIALES QUE EVITAN EL CONSUMO)
                            if (retorno.OperacionExitosa && val_viajes_unidad.OperacionExitosa)
                            {
                                List <Errors> errores = new List <Errors>();
                                if (errores_unidad.Count > 0)
                                {
                                    foreach (RetornoOperacion e in errores_unidad)
                                    {
                                        if (!e.OperacionExitosa)
                                        {
                                            errores.Add(new Errors
                                                {
                                                    code   = e.IdRegistro,
                                                    source = new Source {
                                                        pointer = ""
                                                    },
                                                    detail = e.Mensaje,
                                                    title  = ""
                                                });
                                        }
                                    }
                                }

                                if (errores.Count == 0)
                                {
                                    /** Armando Arreglo de Datos **/
                                    SuatResponse2 suatResponse = new SuatResponse2
                                    {
                                        success = true,
                                        data    = lista_posiciones
                                    };
                                    return(Ok(suatResponse));
                                }
                                else
                                {
                                    /** Armando Arreglo de Datos **/
                                    SuatResponse2 suatResponse = new SuatResponse2
                                    {
                                        success = true,
                                        data    = lista_posiciones,
                                        errors  = errores
                                    };
                                    return(Ok(suatResponse));
                                }
                            }
                            else
                            {
                                SuatResponse2 failauthresponse;
                                if (!retorno.OperacionExitosa)
                                {
                                    failauthresponse = new SuatResponse2
                                    {
                                        success = false,
                                        data    = { },
                                        errors  = new List <Errors>()
                                        {
                                            new Errors
                                            {
                                                code   = retorno.IdRegistro,
                                                detail = retorno.Mensaje,
                                                title  = "Informacion incorrecta"
                                            }
                                        }
                                    };
                                }
                                else if (!val_viajes_unidad.OperacionExitosa)
                                {
                                    failauthresponse = new SuatResponse2
                                    {
                                        success = false,
                                        data    = { },
                                        errors  = new List <Errors>()
                                        {
                                            new Errors
                                            {
                                                code   = val_viajes_unidad.IdRegistro,
                                                detail = val_viajes_unidad.Mensaje,
                                                title  = "Error en Unidades"
                                            }
                                        }
                                    };
                                }
                                else
                                {
                                    failauthresponse = null;
                                }

                                //string json = JsonConvert.SerializeObject(failauthresponse);
                                return(Json(failauthresponse));
                            }
                        }

                        case "Periodos":
                        {
                            RetornoOperacion val_viajes_fechas = new RetornoOperacion(1);
                            /** Obtiene los Proveedores GPS **/
                            //1.- IdProveedorWS
                            //2.- EndPoint
                            //3.- AccionGPS
                            //4.- User
                            //5.- Pass
                            //6.- AuthUser
                            //7.- AuthPass
                            //8.- AuthType
                            List <Tuple <int, string, string, Tuple <string, string>, Tuple <string, string, string> > > proveedor_gps =
                                (from DataRow p in drsViajes
                                 where Convert.ToInt32(p["IdProveedorWS"]) > 0
                                 select
                                 new Tuple <int, string, string, Tuple <string, string>, Tuple <string, string, string> >
                                     (Convert.ToInt32(p["IdProveedorWS"]),
                                     p["EndPoint"].ToString(),
                                     p["AccionGPS"].ToString(),
                                     new Tuple <string, string>(p["User"].ToString(), p["Pass"].ToString()),
                                     new Tuple <string, string, string>(p["AuthUser"].ToString(), p["AuthPass"].ToString(), p["AuthType"].ToString()))).Distinct().ToList();
                            if (proveedor_gps != null)
                            {
                                foreach (Tuple <int, string, string, Tuple <string, string>, Tuple <string, string, string> > gps in proveedor_gps)
                                {
                                    //Configurando Petición
                                    RestClient  clienteGps  = new RestClient();
                                    RestRequest peticionGps = new RestRequest();
                                    val_viajes_fechas = GetLocationMethods.ObtieneAccesoProveedorGPS(gps, out clienteGps, out token_auth, out tipo_auth);
                                    if (val_viajes_fechas.OperacionExitosa)
                                    {
                                        //Asignando Petición de Proveedor GPS
                                        peticionGps = GetLocationMethods.ObtienePeticionGps(gps, clienteGps, token_auth, tipo_auth);
                                    }

                                    /** Validando Obtención de Token para consumo GPS **/
                                    if (val_viajes_fechas.OperacionExitosa)
                                    {
                                        //Agrupando Viajes
                                        List <DataRow> viajes_x_gps = (from DataRow v in drsViajes
                                                                       where Convert.ToInt32(v["IdProveedorWS"]) == gps.Item1
                                                                       select v).ToList();
                                        List <string> v_x_gps = (from DataRow v in drsViajes
                                                                 where Convert.ToInt32(v["IdProveedorWS"]) == gps.Item1
                                                                 select v["FolioViaje"].ToString()).Distinct().ToList();
                                        if (viajes_x_gps.Count > 0 && v_x_gps.Count > 0)
                                        {
                                            //Recorriendo Viajes
                                            foreach (string viaje in v_x_gps)
                                            {
                                                //Obteniendo Viajes por Folio
                                                List <DataRow> vjs = (from DataRow v in viajes_x_gps
                                                                      where v["FolioViaje"].Equals(viaje)
                                                                      select v).ToList();

                                                if (vjs.Count > 0)
                                                {
                                                    //Obteniendo Unidades por Viaje
                                                    List <Tuple <int, string, string, string, int, string, string> >
                                                    unidades = (from DataRow u in vjs
                                                                where Convert.ToInt32(u["IdProveedorUnidadWS"]) > 0
                                                                select new Tuple <int, string, string, string, int, string, string>
                                                                    (Convert.ToInt32(u["IdTractor"]),
                                                                    u["Tracto"].ToString(),
                                                                    u["PlacasTracto"].ToString(),
                                                                    u["AntenaGPS"].ToString(),
                                                                    Convert.ToInt32(u["IdProveedorUnidadWS"]),
                                                                    u["InicioViajeUnidad"].ToString(),
                                                                    u["TerminoViajeUnidad"].ToString())).Distinct().ToList();
                                                    if (unidades.Count > 0)
                                                    {
                                                        //Recorriendo Unidades
                                                        foreach (Tuple <int, string, string, string, int, string, string> unidad in unidades)
                                                        {
                                                            //Obteniendo los Viajes por Unidad
                                                            List <DataRow> viaje_unidad = (from DataRow vu in vjs
                                                                                           where Convert.ToInt32(vu["IdTractor"]) == unidad.Item1
                                                                                           select vu).ToList();
                                                            if (viaje_unidad.Count > 0)
                                                            {
                                                                List <Tuple <double, double, string, DateTime, decimal, bool> > points = new List <Tuple <double, double, string, DateTime, decimal, bool> >();
                                                                RetornoOperacion val_uni_pos = GetLocationMethods.ObtienePosicionesUnidad(unidad, peticionGps, clienteGps, frecuencia, startDate, endDate, out points);

                                                                if (val_uni_pos.OperacionExitosa)
                                                                {
                                                                    if (points.Count > 0)
                                                                    {
                                                                        List <GetLocationResponse> lts = new List <GetLocationResponse>();
                                                                        val_viajes_fechas = GetLocationMethods.ObtieneDatosUnidad(unidad, viaje_unidad, points, out lts);
                                                                        if (val_viajes_fechas.OperacionExitosa)
                                                                        {
                                                                            foreach (GetLocationResponse l in lts)
                                                                            {
                                                                                lista_posiciones.Add(l);
                                                                            }
                                                                        }
                                                                        else
                                                                        {
                                                                            //Asignando Error Gestionado
                                                                            errores_unidad.Add(val_viajes_fechas);
                                                                        }
                                                                    }
                                                                    else
                                                                    {
                                                                        //Asignando Error Gestionado
                                                                        errores_unidad.Add(new RetornoOperacion(518, string.Format("No hay posiciones disponibles para la Unidad '{0}' para el periodo del '{1:yyyy-MM-dd HH:mm:ss}' hasta '{2:yyyy-MM-dd HH:mm:ss}'", unidad.Item2, Convert.ToDateTime(unidad.Item6), Convert.ToDateTime(unidad.Item7)), false));
                                                                    }
                                                                }
                                                                else
                                                                {
                                                                    //Asignando Error Gestionado
                                                                    errores_unidad.Add(val_uni_pos);
                                                                }
                                                            }
                                                            else
                                                            {
                                                                val_viajes_fechas = new RetornoOperacion(517, string.Format("No se puede recuperar el Viaje de la Unidad '{0}'", unidad.Item2), false);
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        val_viajes_fechas = new RetornoOperacion(516, "No hay Unidades configuradas para este Proveedor de GPS", false);
                                                    }
                                                }
                                                else
                                                {
                                                    val_viajes_fechas = new RetornoOperacion(515, "No hay viajes para este proveedor", false);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            val_viajes_fechas = new RetornoOperacion(514, "No hay viajes para este Proveedor de GPS", false);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                val_viajes_fechas = new RetornoOperacion(513, "No hay proveedores GPS disponibles", false);
                            }

                            //Validaciones Generales de Consumo (ERRORES CRUCIALES QUE EVITAN EL CONSUMO)
                            if (retorno.OperacionExitosa && val_viajes_fechas.OperacionExitosa)
                            {
                                List <Errors> errores = new List <Errors>();
                                if (errores_unidad.Count > 0)
                                {
                                    foreach (RetornoOperacion e in errores_unidad)
                                    {
                                        if (!e.OperacionExitosa)
                                        {
                                            errores.Add(new Errors
                                                {
                                                    code   = e.IdRegistro,
                                                    source = new Source {
                                                        pointer = ""
                                                    },
                                                    detail = e.Mensaje,
                                                    title  = ""
                                                });
                                        }
                                    }
                                }

                                if (errores.Count == 0)
                                {
                                    /** Armando Arreglo de Datos **/
                                    SuatResponse2 suatResponse = new SuatResponse2
                                    {
                                        success = true,
                                        data    = lista_posiciones
                                    };
                                    return(Ok(suatResponse));
                                }
                                else
                                {
                                    /** Armando Arreglo de Datos **/
                                    SuatResponse2 suatResponse = new SuatResponse2
                                    {
                                        success = true,
                                        data    = lista_posiciones,
                                        errors  = errores
                                    };
                                    return(Ok(suatResponse));
                                }
                            }
                            else
                            {
                                SuatResponse2 failauthresponse;
                                if (!retorno.OperacionExitosa)
                                {
                                    failauthresponse = new SuatResponse2
                                    {
                                        success = false,
                                        data    = { },
                                        errors  = new List <Errors>()
                                        {
                                            new Errors
                                            {
                                                code   = retorno.IdRegistro,
                                                detail = retorno.Mensaje,
                                                title  = "Informacion incorrecta"
                                            }
                                        }
                                    };
                                }
                                else if (!val_viajes_fechas.OperacionExitosa)
                                {
                                    failauthresponse = new SuatResponse2
                                    {
                                        success = false,
                                        data    = { },
                                        errors  = new List <Errors>()
                                        {
                                            new Errors
                                            {
                                                code   = val_viajes_fechas.IdRegistro,
                                                detail = val_viajes_fechas.Mensaje,
                                                title  = "Error en Unidades"
                                            }
                                        }
                                    };
                                }
                                else
                                {
                                    failauthresponse = null;
                                }

                                //string json = JsonConvert.SerializeObject(failauthresponse);
                                return(Json(failauthresponse));
                            }
                        }
                        }
                    }
                    else
                    {
                        retorno = new RetornoOperacion(452, string.Format("No hay Viajes Registrados {0}", Cadena.RegresaCadenaSeparada(retorno.Mensaje, "|", 1).Equals("Folios") ? "para los Folios especificados" : "para el periodo de Fechas Ingresadas"), false);
                    }
                }
                else
                {
                    retorno = new RetornoOperacion(453, "No se puede recuperar la Compania", false);
                }
            }

            /** Armando Arreglo de Datos **/
            SuatResponse2 respuestaFinal = new SuatResponse2
            {
                success = false,
                data    = {},
                errors  = new List <Errors>()
                {
                    new Errors
                    {
                        code   = retorno.IdRegistro,
                        detail = retorno.Mensaje,
                        title  = "Informacion incorrecta"
                    }
                }
            };

            return(Json(respuestaFinal));
        }