private static void InsertarDatos(SqlTransaction trx, SqlConnection cnn, DateTime fecha, List <PagoDiarioTdp> lista, StringBuilder log) { PagoDiarioTdp pagoDiarioTdp = lista.FirstOrDefault(); var procesoPagoDiario = new ProcesoPagoDiario(); procesoPagoDiario.IncentivoId = pagoDiarioTdp.NumeroIncentivoTdp; procesoPagoDiario.Fecha = fecha; procesoPagoDiario.FechaHoraCreacion = DateTime.Now; using (SqlCommand cmd = new SqlCommand()) { cmd.Transaction = trx; cmd.Connection = cnn; cmd.CommandText = "insert into ProcesoPagaDiario(Fecha, FechaHoraCreacion, IncentivoId) values (@Fecha, @FechaHoraCreacion, @IncentivoId); select SCOPE_IDENTITY();"; cmd.Parameters.Add("@Fecha", SqlDbType.DateTime).Value = procesoPagoDiario.Fecha; cmd.Parameters.Add("@FechaHoraCreacion", SqlDbType.DateTime).Value = procesoPagoDiario.FechaHoraCreacion; cmd.Parameters.Add("@IncentivoId", SqlDbType.Int).Value = procesoPagoDiario.IncentivoId; procesoPagoDiario.ProcesoPagoDiarioId = Convert.ToInt32(cmd.ExecuteScalar()); } lista.ForEach(x => x.ProcesoPagoDiarioId = procesoPagoDiario.ProcesoPagoDiarioId); var tabla = ConvertirADataTable(lista); using (SqlBulkCopy sbc = new SqlBulkCopy(cnn, SqlBulkCopyOptions.Default, trx)) { sbc.BulkCopyTimeout = 200000; sbc.DestinationTableName = "PagaDiarioTDP"; sbc.WriteToServer(tabla); log.AppendLine("Registros insertados a tabla PagaDiarioTDP: " + tabla.Rows.Count); } }
private static List <PagoDiarioTdp> ValidarArchivo(string rutaArchivo, StringBuilder log) { List <PagoDiarioTdp> listaPagoDiario = new List <PagoDiarioTdp>(); StringBuilder error = new StringBuilder(); try { int numeroLinea = 1, cabIdentificarIncetivo, identificadorIncetivo; string lineaCabecera, linea, cabCodigoDistribuidor, cabDescripcionIncentivo; bool exito; DateTime cabFechaIncioIncentivo, cabFechaFinIncentivo; decimal monto; PagoDiarioTdp pagoDiario; if (!File.Exists(rutaArchivo)) { log.AppendLine("Archivo no existe " + rutaArchivo); return(null); } log.AppendLine("Inicio validacion archivo: " + rutaArchivo); using (StreamReader sr = new StreamReader(rutaArchivo)) { lineaCabecera = sr.ReadLine(); lineaCabecera = lineaCabecera.Trim(); string[] cabeceras = lineaCabecera.Split(Constantes.CARACTER_SEPARACION); exito = true; if (cabeceras.Length != Constantes.NUMERO_CAMPOS_CABECERA) { error.Append(string.Format(Constantes.MENSAJE_ERROR_NUMERO_CAMPOS_INCORRECTO, numeroLinea, Constantes.NUMERO_CAMPOS_CABECERA)); exito = false; } if (exito) { cabCodigoDistribuidor = cabeceras[Constantes.INDICE_CABECERA_CODIGO_DISTRIBUIDOR]; if (string.IsNullOrWhiteSpace(cabCodigoDistribuidor)) { error.Append(string.Format(Constantes.MENSAJE_ERROR_CAMPO_VACIO, Constantes.NOMBRE_CABECERA_CODIGO_DISTRIBUIDOR)); } if (!int.TryParse(cabeceras[Constantes.INDICE_CABECERA_IDENTIFICADOR_INCENTIVO], out cabIdentificarIncetivo)) { error.Append(string.Format(Constantes.MENSAJE_ERROR_CAMPO_FORMATO, Constantes.NOMBRE_CABECERA_IDENTIFICADOR_INCENTIVO)); } cabDescripcionIncentivo = cabeceras[Constantes.INDICE_CABECERA_DESCRIPCION_INCENTIVO]; if (string.IsNullOrWhiteSpace(cabDescripcionIncentivo)) { error.Append(string.Format(Constantes.MENSAJE_ERROR_CAMPO_VACIO, Constantes.NOMBRE_CABECERA_DESCRIPCION_INCENTIVO)); } if (!DateTime.TryParse(cabeceras[Constantes.INDICE_CABECERA_FECHA_INICIO_INCENTIVO], out cabFechaIncioIncentivo)) { //error.Append(string.Format(Constantes.MENSAJE_ERROR_CAMPO_FORMATO, // Constantes.NOMBRE_CABECERA_FECHA_INICIO_INCENTIVO)); } if (!DateTime.TryParse(cabeceras[Constantes.INDICE_CABECERA_FECHA_FIN_INCENTIVO], out cabFechaFinIncentivo)) { //error.Append(string.Format(Constantes.MENSAJE_ERROR_CAMPO_FORMATO, // Constantes.NOMBRE_CABECERA_FECHA_FIN_INCENTIVO)); } } while (!sr.EndOfStream) { numeroLinea++; exito = true; linea = sr.ReadLine(); linea = linea.Trim(); string[] campos = linea.Split(Constantes.CARACTER_SEPARACION); if (campos.Length != Constantes.NUMERO_CAMPOS) { error.Append(string.Format(Constantes.MENSAJE_ERROR_NUMERO_CAMPOS_INCORRECTO, numeroLinea, Constantes.NUMERO_CAMPOS)); exito = false; continue; } pagoDiario = new PagoDiarioTdp(); if (!int.TryParse(campos[Constantes.INDICE_CAMPO_IDENTIFICADOR_INCENTIVO], out identificadorIncetivo)) { error.Append(string.Format(Constantes.MENSAJE_ERROR_CAMPO_FORMATO, Constantes.NOMBRE_CAMPO_IDENTIFICADOR_INCENTIVO)); exito = false; } pagoDiario.NumeroIncentivoTdp = identificadorIncetivo; pagoDiario.DistribuidorTdp = campos[Constantes.INDICE_CAMPO_CODIGO_DISTRIBUIDOR]; if (string.IsNullOrWhiteSpace(pagoDiario.DistribuidorTdp)) { error.Append(string.Format(Constantes.MENSAJE_ERROR_CAMPO_VACIO, Constantes.NOMBRE_CAMPO_CODIGO_DISTRIBUIDOR)); exito = false; } pagoDiario.CodigoPdvTdp = campos[Constantes.INDICE_CAMPO_CODIGO_PDV]; if (string.IsNullOrWhiteSpace(pagoDiario.CodigoPdvTdp)) { error.Append(string.Format(Constantes.MENSAJE_ERROR_CAMPO_VACIO, Constantes.NOMBRE_CAMPO_CODIGO_PDV)); exito = false; } pagoDiario.NumeroCelular = campos[Constantes.INDICE_CAMPO_CODIGO_CELULAR]; if (string.IsNullOrWhiteSpace(pagoDiario.NumeroCelular)) { error.Append(string.Format(Constantes.MENSAJE_ERROR_CAMPO_VACIO, Constantes.NOMBRE_CAMPO_CODIGO_CELULAR)); exito = false; } if (!decimal.TryParse(campos[Constantes.INDICE_CAMPO_MONTO], out monto)) { error.Append(string.Format(Constantes.MENSAJE_ERROR_CAMPO_FORMATO, Constantes.NOMBRE_CAMPO_MONTO)); exito = false; } pagoDiario.Monto = monto; if (exito) { listaPagoDiario.Add(pagoDiario); } } log.AppendLine("Filas procesadas: " + numeroLinea); } log.AppendLine("Fin validacion archivo:" + rutaArchivo); } catch (Exception) { log.AppendLine("Error en ValidarArchivo"); } if (error.Length > 0) { string rutaError = ConfigurationManager.AppSettings["rutaErrores"]; if (Directory.Exists(rutaError)) { string archivoError = Path.Combine(rutaError, Path.GetFileNameWithoutExtension(rutaArchivo) + "_error.csv"); log.AppendLine("Hubo un error de validación en archivo y se encuentra en la siguiente dirección: " + archivoError); log.AppendLine(""); File.WriteAllText(archivoError, error.ToString()); } return(null); } return(listaPagoDiario); }