jueves, 2 de enero de 2020

C# - Leer archivos CSV desde un directorio dinamico y por columnas..

----------------------------------------------
.ASPX
----------------------------------------------
       function Procesar() {
            var rowCount = $("#grid").getGridParam("reccount");
            if (rowCount > 0) {
                jutils.confirmMessage("¿Desea Procesar?", "Atención", ProcesarConfirmado);
            } else {
                showMessage("No hay filas para ser procesadas", 'Atención');
            }
        }

        function ProcesarConfirmado() {

            mensaje = '';
            var params = "{}";
            jutils.ajax.getJsonData_Async("ProcesaFacturas", params, arguments.callee.name, ProcesaFacturas);
        }

        function ProcesaFacturas(response) {
            if (response.length > 1 && response[0] == 'OK') {
                mensaje = 'El proceso ha finalizado exitosamente. Factura Inicial : ' + response[1] + ', Factura Final : ' + response[2];
                $("#txtInicial").val(response[1]);
                $("#txtFinal").val(response[2]);
                if (response[3] > 0) {
                    mensaje = 'El proceso ha finalizado exitosamente. Factura Inicial : ' + response[1] + ', Factura Final : ' + response[2] + '. Algunos de los registros presentaron problemas. Favor de revisar la lista de Errores. ';
                }
            }
            else {
                mensaje = 'Se ha producido un error al ejecutar el proceso : ' + response[0];
            }
            loadGridPost(mensaje);
        }

----------------------------------------------
.CS
----------------------------------------------
 [WebMethod]
        public static string ProcesaFacturas()
        {
            string[] mensaje;
            int cantErrores = 0;

            var ModoFactura = Convert.ToByte(0);
            var ModoOriginal = 0;

            try
            {
                //1.buscar nombres de .csv en el directorio de destino
                var pathEnternet = new p_parametros_BC().SelDescPparametros(535).Trim(); //codigo para RUTA ENTERNET
                string[] archivosCsv = Directory.GetFiles(pathEnternet, "*.csv");
                var ini = "0";
                var fin = "0";

                //leo los archivos uno por uno
                foreach (string rutaArchivo in archivosCsv)
                {
                    var dt = new DataTable();
                    using (var sr = new StreamReader(rutaArchivo))
                    {
                        string[] columnas = sr.ReadLine().Split(';');
                        //foreach (string header in headers)
                        //{
                        //    //dt.Columns.Add(header);
                        //}
                        var estado = columnas[4].Trim().ToUpper();
                        var factInterno = columnas[0].Trim();
                        var tipo = columnas[2].Trim();

                        switch (tipo)
                        {
                            case "33":      //FACTURA AFECTA
                                tipo = "3";
                                break;
                            case "34":      //FACTURA EXENTA
                                tipo = "3";
                                break;
                        }
                        var numFacSii = sr.ReadLine().Split(';')[3].Trim();
                        if (estado == "EMITIDO")
                        {
                            //LOG
                            new BcFuncionesGenericas().InsertarLog("ProcesarFacturasCsv.aspx", "ProcesaFacturasCsv", "numFactInterno " + factInterno + ",tipo " + tipo + ",", string.Empty, "ProcesaFacturas()", "Inicio procesar CSV:" + rutaArchivo);
                            var retorno = new ProcesarFacturasBc().ProcesarFacturasCsv(Convert.ToInt32(factInterno.Split('-')[1]),
                                 Convert.ToInt16(tipo), Convert.ToInt32(numFacSii), 0);

                            ini = numFacSii;  //JC corregir esta salida en fase de pruebas
                            fin = numFacSii;
                            //LOG
                            new BcFuncionesGenericas().InsertarLog("ProcesarFacturasCsv.aspx", "ProcesaFacturasCsv", "numFactInterno " + factInterno + ",tipo " + tipo + ",", string.Empty, "ProcesaFacturas()", "Fin procesar CSV:" + rutaArchivo);
                        }
                        else
                        {
                            //LOG
                            new BcFuncionesGenericas().InsertarLog("ProcesarFacturasCsv.aspx", "ProcesaFacturasCsv", "numFactInterno " + factInterno + ",tipo " + tipo + ",", string.Empty, "ProcesaFacturas()", "Inicio procesar CSV:" + rutaArchivo);
                            var retorno = new ProcesarFacturasBc().ProcesarFacturasCsv(Convert.ToInt32(factInterno.Split('-')[1]),
                                Convert.ToInt16(tipo), Convert.ToInt32(numFacSii), 0);
                            //LOG
                            new BcFuncionesGenericas().InsertarLog("ProcesarFacturasCsv.aspx", "ProcesaFacturasCsv", "numFactInterno " + factInterno + ",tipo " + tipo + ",", string.Empty, "ProcesaFacturas()", "Fin procesar CSV:" + rutaArchivo);
                            cantErrores++;
                        }
                    }
                }
                mensaje = new string[]
                             {
                                 "OK",
                                 ini,
                                 fin,
                                 Convert.ToString(cantErrores)
                             };

            }
            catch (Exception exc)
            {
                mensaje = new string[]
                             {
                                 exc.Message.ToString().Replace("'", " ").Replace("\"", "").Replace(@"\r", "").Replace("\r\n", "")
                             };

                new BcFuncionesGenericas().InsertarLog("ProcesarFacturasCsv.aspx", "ProcesaFacturasCsv", string.Empty, string.Empty, "ProcesaFacturas()", "Fin proceso completo:");
            }
            return JsonConvert.SerializeObject(mensaje);

        }

No hay comentarios:

Publicar un comentario