Exemple #1
0
 public OperacionesController()
 {
     AduanasRepositorio = new AduanasRepositorio();
 }
Exemple #2
0
        public async Task <ActionResult> Index(DateTime?startDate = null, DateTime?endDate = null, string clienteId = null, string aduana = "0")
        {
            //Cargar aduanas
            var aduanas = AduanasRepositorio.RecuperarAduanasHinojosa();

            ViewBag.Aduanas = new SelectList(aduanas, "ClaveAduana", "NombreCorto");

            //En caso de que el usuario no sea administrador se establece el clienteId con el id del cliente logueado
            if (User.IsInRole("Administrador"))
            {
                clienteId = clienteId ?? "0";
                int idClienteNumero = Convert.ToInt32(clienteId);
                ViewBag.NombreCliente = (await Catalogos.RecuperarPorId(idClienteNumero.ToString())).Nom1;
            }
            else
            {
                clienteId             = ClienteId;
                ViewBag.NombreCliente = NombreCliente;
            }


            //En el caso de que el rol sea administrador hay que cargar los clientes en la vista
            if (User.IsInRole("Administrador"))
            {
                //Catalogos.Configuration.AutoDetectChangesEnabled = false;

                ViewBag.CatalogoClientes = new SelectList((await Catalogos.Recuperar()).Select(s => new { IdCli = s.IdCli, Nom1 = s.Nom1 }).OrderBy(o => o.Nom1).ToList(), "IdCli", "Nom1");
            }

            IEnumerable <Partida> resultados = new List <Partida>();

            if (startDate != null && endDate != null)
            {
                //Busqueda de resultados
                var Resultados = new MabeReportSource(clienteId, startDate.Value, endDate.Value);
                Resultados.TraficoPath = ConfigurationManager.AppSettings["RutaTrafico"].ToString();
                Resultados.SorfPath    = ConfigurationManager.AppSettings["RutaSORF"].ToString();

                resultados = await Resultados.GetReportAsync();

                var referencias = resultados.Select(s => "'" + s.Referencia + "'");
                //TODO: VERIFICAR POSIBLES ATAQUES DE SQL INJECTION!!!
                string referenciascadena              = "";
                string consultaObservaciones          = "SELECT * FROM EdicionesReportes WHERE ReporteId = 'Operaciones' AND Campo='Observaciones' AND ClienteId = @ClienteId ";
                string consultaFechasDeSalidaEditadas = "SELECT * FROM EdicionesReportes WHERE ReporteId = 'Operaciones' AND Campo='FechaSalida' AND ClienteId = @ClienteId ";

                if (referencias.Count() > 0)
                {
                    referenciascadena = referencias.Aggregate((previo, siguiente) => previo + "," + siguiente);


                    //Se agregan las observaciones
                    consultaObservaciones += " AND IdentificadorRegistro IN(" + referenciascadena + ")";

                    var observaciones = ReportesDb.ObservacionesReportes//.Where(o => o.ClienteId == clienteId && referencias.Any(a=> a == o.IdentificadorRegistro) )
                                        .SqlQuery(consultaObservaciones, new SqlParameter("@ClienteId", clienteId))
                                        .ToArray();

                    if (observaciones != null && observaciones.Count() > 0)
                    {
                        resultados = resultados.GroupJoin(observaciones, itemReporte => itemReporte.Referencia, itemObservaciones => itemObservaciones.IdentificadorRegistro, (itemReporte, observacionesList) =>
                        {
                            var observacion = observacionesList.FirstOrDefault();
                            if (observacion != null)
                            {
                                itemReporte.Observaciones = observacion.Valor;
                            }

                            return(itemReporte);
                        });
                    }

                    //Se agregan las fechas de salida editadas
                    consultaFechasDeSalidaEditadas += " AND IdentificadorRegistro IN(" + referenciascadena + ")";

                    var fechasDeSalidas = ReportesDb.ObservacionesReportes//.Where(o => o.ClienteId == clienteId && referencias.Any(a=> a == o.IdentificadorRegistro) )
                                          .SqlQuery(consultaFechasDeSalidaEditadas, new SqlParameter("@ClienteId", clienteId))
                                          .ToArray();

                    if (fechasDeSalidas != null && fechasDeSalidas.Count() > 0)
                    {
                        resultados = resultados.GroupJoin(fechasDeSalidas, itemReporte => itemReporte.Referencia, itemFechaDeSalidaEditada => itemFechaDeSalidaEditada.IdentificadorRegistro, (itemReporte, fechaDeSalidaList) =>
                        {
                            var fechaSalidaItem = fechaDeSalidaList.FirstOrDefault();
                            if (fechaSalidaItem != null)
                            {
                                itemReporte.FechaSalida = (DateTime?)Convert.ChangeType(fechaSalidaItem.Valor, Type.GetType(fechaSalidaItem.TipoNet));
                            }

                            return(itemReporte);
                        });
                    }

                    if (!string.IsNullOrEmpty(aduana))
                    {
                        resultados = resultados.Where(w => w.Aduana == aduana);
                    }
                }
            }

            return(View(resultados));
        }