public JsonResult cargarCSV(HttpPostedFileBase archivoCSV, int lineaNegocio) { List <string> listaErrores = new List <string>(); var hoy = DateTime.Now; IEnumerable <string> lineas = null; object respuesta = null; int totalProcesados = 0; int lineaActual = 1; int contador = 0; bool status = false; string exception = "Error, se presento un error inesperado."; try { List <string> csvData = new List <string>(); using (System.IO.StreamReader reader = new System.IO.StreamReader(archivoCSV.InputStream, System.Text.Encoding.GetEncoding("ISO-8859-1"))) { while (!reader.EndOfStream) { csvData.Add(reader.ReadLine()); } } lineas = csvData.Skip(1); var datos = (from periodos in db.cargaDocumentoRoaming where periodos.idDocumento == "TAPIN" & periodos.ordenCarga == "A" & periodos.estatusCarga == "PC" group periodos by periodos.periodoCarga into g orderby g.Key ascending select new { Id = g.Key, Periodo = g.Key }).FirstOrDefault(); var _IdOperador = db.Operador .Select(p => p.Id_Operador) .ToArray(); var _Deudor = db.Deudor .Select(p => p.Deudor1) .ToArray(); string Activo = ""; using (TransactionScope scope = new TransactionScope()) { foreach (string ln in lineas) { string linea = ln.Replace('%', ' '); var lineaSplit = linea.Split('|'); ++lineaActual; if (lineaSplit.Count() == 14) { RoamingCancelacionIngreso entidad = new RoamingCancelacionIngreso(); try { contador++; Activo = ((!_IdOperador.Any(o => o == lineaSplit[3].ToUpper())) ? "0" : "1"); if (Activo == "1") { Activo = ((!_Deudor.Any(o => o == lineaSplit[6].ToUpper())) ? "0" : "1"); } decimal importeMXNtest = 0; decimal difProvFact = 0; entidad.BanderaConcepto = lineaSplit[0]; entidad.NumeroProvision = lineaSplit[1]; entidad.FechaContable = datos.Periodo.ToString(); entidad.IdOperador = lineaSplit[3]; entidad.Concepto = lineaSplit[4]; entidad.Grupo = lineaSplit[5]; entidad.Deudor = lineaSplit[6]; entidad.MontoProvision = lineaSplit[7]; entidad.Moneda = lineaSplit[8]; entidad.Periodo = lineaSplit[9]; entidad.Tipo = lineaSplit[10]; entidad.NumeroDocumentoSap = lineaSplit[11]; entidad.FolioDocumento = lineaSplit[12]; entidad.TipoCambioProvision = lineaSplit[13]; importeMXNtest = Convert.ToDecimal(entidad.MontoProvision) * Convert.ToDecimal(entidad.TipoCambioProvision); entidad.ImporteMxn = Convert.ToString(importeMXNtest); var monto = from montodock in db.RoamingDocumentoIngreso where montodock.IdOperador == entidad.IdOperador & montodock.FolioDocumento == entidad.FolioDocumento & montodock.FechaConsumo == entidad.Periodo group montodock by new { montodock.FechaContable } into mygroup select mygroup.FirstOrDefault(); foreach (var elemento in monto) { entidad.ImporteFactura = elemento.Monto; } difProvFact = Convert.ToDecimal(entidad.MontoProvision) + Convert.ToDecimal(entidad.ImporteFactura); entidad.DiferenciaProvisionFactura = Convert.ToString(difProvFact); var tipocambiotest = from tipoCamb in db.RoamingDocumentoCosto where tipoCamb.FechaConsumo == entidad.Periodo & tipoCamb.IdOperador == entidad.IdOperador & tipoCamb.FolioDocumento == entidad.FolioDocumento group tipoCamb by new { tipoCamb.FechaContable } into mygroup select mygroup.FirstOrDefault(); foreach (var elemento in tipocambiotest) { entidad.TipoCambioFactura = elemento.TipoCambio; } if (Convert.ToDecimal(entidad.DiferenciaProvisionFactura) < 0) { decimal excprov = 0; excprov = Convert.ToDecimal(entidad.DiferenciaProvisionFactura) * Convert.ToDecimal(entidad.TipoCambioProvision); entidad.ExcesoProvisionMxn = Convert.ToString(excprov); } else { entidad.ExcesoProvisionMxn = "0"; } if (Convert.ToDecimal(entidad.DiferenciaProvisionFactura) > 0) { decimal insufiProvi = 0; insufiProvi = Convert.ToDecimal(entidad.DiferenciaProvisionFactura) * Convert.ToDecimal(entidad.TipoCambioFactura); entidad.InsuficienciaProvisionMxn = Convert.ToString(insufiProvi); } else { entidad.InsuficienciaProvisionMxn = "0"; } //entidad.InsuficienciaProvisionMxn = lineaSplit[18]; entidad.Activo = Activo; entidad.LineaNegocio = "1"; entidad.FechaCarga = DateTime.Now; var flujo = from consuImpo in db.RoamingDocumentoIngreso where consuImpo.IdOperador == entidad.IdOperador & consuImpo.FolioDocumento == entidad.FolioDocumento group consuImpo by new { consuImpo.FechaContable } into mygroup select mygroup.FirstOrDefault(); foreach (var elemento in flujo) { if (entidad.BanderaConcepto == "TARIFA") { entidad.FechaConsumoTarifa = elemento.FechaConsumo; entidad.ImporteFacturaTarifa = elemento.MontoFacturado; } //entidad.FechaConsumoTarifa = elemento.FechaFactura; //entidad.ImporteFacturaTarifa = elemento.MontoFacturado; } totalProcesados++; db.RoamingCancelacionIngreso.Add(entidad); } catch (FormatException e) { if (e.Message == "String was not recognized as a valid DateTime.") { listaErrores.Add("Línea " + lineaActual + ": Campo de Fecha con formato erróneo."); } else { listaErrores.Add("Línea " + lineaActual + ": Campo con formato erróneo."); } } catch (Exception) { listaErrores.Add("Línea " + lineaActual + ": Error desconocido. "); } } else { listaErrores.Add("Línea " + lineaActual + ": Número de campos insuficiente."); } } db.SaveChanges(); scope.Complete(); exception = "Datos cargados con éxito"; status = true; } // llenar fluctuacion if (status) { db.Database.CommandTimeout = 3000; db.sp_FluctuacionROM_Insert(DateTime.Parse(datos.Periodo), "INGRESO", "FluctuacionIngresoROM"); using (var anteriores = new Negocio.PeriodosAnteriores()) anteriores.CrearPeriodosAnteriores(db); } } catch (FileNotFoundException) { exception = "El archivo Selecionado aún no existe en el Repositorio."; status = false; } catch (UnauthorizedAccessException) { exception = "No tiene permiso para acceder al archivo actual."; status = false; } catch (IOException e) when((e.HResult & 0x0000FFFF) == 32) { exception = "Falta el nombre del archivo, o el archivo o directorio está en uso."; status = false; } catch (TransactionAbortedException) { exception = "Transacción abortada. Se presentó un error."; status = false; } catch (Exception err) { exception = "Error desconocido. " + err.InnerException.ToString(); status = false; } finally { respuesta = new { success = true, results = listaErrores, mensaje = exception, totalProcesados = totalProcesados, status = status }; } return(Json(respuesta, JsonRequestBehavior.AllowGet)); }
public JsonResult cargarCSV(HttpPostedFileBase archivoCSV, int lineaNegocio) { List <string> listaErrores = new List <string>(); var hoy = DateTime.Now; IEnumerable <string> lineas = null; object respuesta = null; int totalProcesados = 0; int lineaActual = 1; int contador = 0; bool status = false; string ope, fact; string exception = "Error, se presento un error inesperado."; try { List <string> csvData = new List <string>(); using (System.IO.StreamReader reader = new System.IO.StreamReader(archivoCSV.InputStream, System.Text.Encoding.UTF8)) { while (!reader.EndOfStream) { csvData.Add(reader.ReadLine()); } } lineas = csvData.Skip(1); using (TransactionScope scope = new TransactionScope()) { foreach (string ln in lineas) { string linea = ln.Replace('%', ' '); var lineaSplit = linea.Split('|'); ++lineaActual; if (lineaSplit.Count() == 19) { RoamingCancelacionIngreso entidad = new RoamingCancelacionIngreso(); try { contador++; ope = lineaSplit[2]; fact = lineaSplit[11]; entidad.BanderaConcepto = lineaSplit[0]; entidad.NumeroProvision = lineaSplit[1]; entidad.IdOperador = lineaSplit[2]; entidad.Concepto = lineaSplit[3]; entidad.Grupo = lineaSplit[4]; entidad.Deudor = lineaSplit[5]; entidad.MontoProvision = lineaSplit[6]; entidad.Moneda = lineaSplit[7]; entidad.Periodo = lineaSplit[8]; entidad.Tipo = lineaSplit[9]; entidad.NumeroDocumentoSap = lineaSplit[10]; entidad.FolioDocumento = lineaSplit[11]; entidad.TipoCambioProvision = lineaSplit[12]; entidad.ImporteMxn = lineaSplit[13]; entidad.ImporteFactura = lineaSplit[14]; entidad.DiferenciaProvisionFactura = lineaSplit[15]; entidad.TipoCambioFactura = lineaSplit[16]; entidad.ExcesoProvisionMxn = lineaSplit[17]; entidad.InsuficienciaProvisionMxn = lineaSplit[18]; entidad.Activo = "1"; entidad.LineaNegocio = "1"; entidad.FechaCarga = DateTime.Now; totalProcesados++; db.RoamingCancelacionIngreso.Add(entidad); } catch (FormatException e) { if (e.Message == "String was not recognized as a valid DateTime.") { listaErrores.Add("Línea " + lineaActual + ": Campo de Fecha con formato erróneo."); } else { listaErrores.Add("Línea " + lineaActual + ": Campo con formato erróneo."); } } catch (Exception) { listaErrores.Add("Línea " + lineaActual + ": Error desconocido. "); } } else { listaErrores.Add("Línea " + lineaActual + ": Número de campos insuficiente."); } } db.SaveChanges(); scope.Complete(); exception = "Datos cargados con éxito"; status = true; } } catch (FileNotFoundException) { exception = "El archivo Selecionado aún no existe en el Repositorio."; status = false; } catch (UnauthorizedAccessException) { exception = "No tiene permiso para acceder al archivo actual."; status = false; } catch (IOException e) when((e.HResult & 0x0000FFFF) == 32) { exception = "Falta el nombre del archivo, o el archivo o directorio está en uso."; status = false; } catch (TransactionAbortedException) { exception = "Transacción abortada. Se presentó un error."; status = false; } catch (Exception err) { exception = "Error desconocido. " + err.InnerException.ToString(); status = false; } finally { respuesta = new { success = true, results = listaErrores, mensaje = exception, totalProcesados = totalProcesados, status = status }; } return(Json(respuesta, JsonRequestBehavior.AllowGet)); }