public object CargaTAPOUTB(string periodo, string ruta, string nombre, int Id, char separador) { object respuesta = null; string res = ""; int i = 0, defectuosos = 0; string exception = ""; List <string> resultado = new List <string>(); string[] lineas = null; bool exitoso = false; CultureInfo cultureInfo = new CultureInfo("es-ES", false); DateTime dateRom = new DateTime(); DateTime dateTime = new DateTime(); DateTime fecha_carga = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1); try { lineas = System.IO.File.ReadAllLines(ruta + "/" + nombre, Encoding.Default).Where(x => !string.IsNullOrWhiteSpace(x)).ToArray(); } catch (FileNotFoundException) { exception = "El archivo no se encuentra en el directorio especificado."; } catch (UnauthorizedAccessException) { exception = "No tiene permiso para acceder al archivo actual."; } catch (IOException e) when((e.HResult & 0x0000FFFF) == 32) { exception = "Falta el nombre del archivo, o el archivo o directorio está en uso."; } if (lineas != null) { try { var list = new List <datosTraficoTAPOUTB>(); using (TransactionScope scope = new TransactionScope()) { for (i = 1; i < lineas.Count(); i++) { var linea = SepararLineas(lineas[i], separador); var datosROM = new datosTraficoTAPOUTB(); if (linea.Count() != 27) { resultado.Add("Línea " + i + ": Numero de campos insuficiente."); ++defectuosos; continue; } if (ValidaCampo(linea[0], "") != null) { dateRom = DateTime.Parse(linea[0], cultureInfo); datosROM.settlementDate = dateRom;//DateTime.ParseExact(linea[0], "dd/MM/yyyy", new CultureInfo("es-ES")); } else { datosROM.settlementDate = null; } datosROM.myPMN = ValidaCampo(linea[1], ""); datosROM.VRSFCMTSRH = ValidaCampo(linea[2], ""); datosROM.codigoDeudor = ValidaCampo(linea[3], ""); datosROM.theirPMN = ValidaCampo(linea[4], ""); datosROM.operatorName = ValidaCampo(linea[5], ""); datosROM.rapFileName = ValidaCampo(linea[6], ""); if (ValidaCampo(linea[7], "") != null) { dateRom = DateTime.Parse(linea[7], cultureInfo); datosROM.rapFileAvailableTimeStamp = dateRom;//DateTime.ParseExact(linea[7], "dd/MM/yyyy", new CultureInfo("es-ES")); } else { datosROM.rapFileAvailableTimeStamp = null; } datosROM.rapStatus = ValidaCampo(linea[8], ""); datosROM.rapFileType = ValidaCampo(linea[9], ""); datosROM.rapAdjustmentIndicator = ValidaCampo(linea[10], ""); datosROM.tapFileType = ValidaCampo(linea[11], ""); datosROM.tapFileName = ValidaCampo(linea[12], ""); datosROM.callType = ValidaCampo(linea[13], ""); datosROM.numberCalls = Int32.Parse(linea[14]); datosROM.totalRealVolume = Math.Round(decimal.Parse(ValidaCampo(linea[15], ""), NumberStyles.Any), 15); datosROM.totalChargedVolume = Math.Round(decimal.Parse(ValidaCampo(linea[16], ""), NumberStyles.Any), 15); datosROM.realDuration = Math.Round(decimal.Parse(ValidaCampo(linea[17], ""), NumberStyles.Any), 15); datosROM.chargedDuration = Math.Round(decimal.Parse(ValidaCampo(linea[18], ""), NumberStyles.Any), 15); datosROM.chargesTaxesSDR = Math.Round(decimal.Parse(ValidaCampo(linea[19], ""), NumberStyles.Any), 15); datosROM.taxes = Math.Round(decimal.Parse(ValidaCampo(linea[20], ""), NumberStyles.Any), 15); datosROM.totalCharges = Math.Round(decimal.Parse(ValidaCampo(linea[21], ""), NumberStyles.Any), 15); datosROM.chargesTaxesLC = Math.Round(decimal.Parse(ValidaCampo(linea[22], ""), NumberStyles.Any), 15); datosROM.taxesLocalCurrency1 = Math.Round(decimal.Parse(ValidaCampo(linea[23], ""), NumberStyles.Any), 15); datosROM.taxesLocalCurrency2 = Math.Round(decimal.Parse(ValidaCampo(linea[24], ""), NumberStyles.Any), 15); datosROM.totalChargesLC = Math.Round(decimal.Parse(ValidaCampo(linea[25], ""), NumberStyles.Any), 15); if (ValidaCampo(linea[26], "") != null) { dateRom = DateTime.Parse(linea[26], cultureInfo); datosROM.callDate = dateRom;//DateTime.ParseExact(linea[26], "dd/MM/yyyy", new CultureInfo("es-ES")); } else { datosROM.callDate = null; } datosROM.idCarga = Id; datosROM.fecha_carga = fecha_carga; list.Add(datosROM); } db.BulkInsert(list, true, "datosTraficoTAPOUTB"); //Log log2 = new Log(); //log2.registraCarga("datosTraficoTAPOUTB.html", Request.UserHostAddress,nombre); cargaDocumentoRoaming cargaDocumento = db.cargaDocumentoRoaming.Where(x => x.Id == Id).SingleOrDefault(); cargaDocumento.estatusCarga = "CC"; //Log log = new Log(); //log.insertaBitacoraModificacion(cargaDocumento, "Id", cargaDocumento.Id, "Clase_Servicio.html", Request.UserHostAddress); var fecha = db.cargaDocumentoRoaming.Where(x => x.Id == Id).Select(c => c.periodoCarga).SingleOrDefault(); dateTime = DateTime.Parse(fecha, cultureInfo); dateTime = dateTime.AddMonths(1); res = dateTime.Year + "/" + dateTime.Month.ToString("00") + "/" + dateTime.Day.ToString("00"); cargaDocumentoRoaming nuevo = new cargaDocumentoRoaming { idDocumento = "TAPOUT", periodoCarga = res, fechaCarga = null, tipoCarga = "TAPOUT", ordenCarga = "B", estatusCarga = "PC" }; db.cargaDocumentoRoaming.Add(nuevo); //Log log5 = new Log(); //log5.insertaNuevoOEliminado(nuevo, "Nuevo", "cargaDocumentoRoaming.html", Request.UserHostAddress); respuesta = new { success = true, results = "ok", exitos = i - defectuosos - 1, total = lineas.Count() - 1, procesados = resultado }; db.SaveChanges(); // Se hace la transaccion scope.Complete(); exitoso = true; } } catch (FormatException) { respuesta = new { success = false, results = "Error en la conversión de datos.", exitos = -1, total = -1 }; } catch (TransactionAbortedException) { respuesta = new { success = false, results = "Transacción abortada. Se presentó un error.", exitos = -1, total = -1 }; } } else { respuesta = new { success = false, results = exception, exitos = -1, total = -1 }; } if (exitoso) { db.sp_InsertarPXQIngresosROM_B(dateRom); MoverArchivo(ruta, nombre); } return(respuesta); }