public JsonResult CargarCSV(HttpPostedFileBase archivoCSV, int lineaNegocio) { List <string> listaErrores = new List <string>(); var hoy = DateTime.Now; IEnumerable <string> lineas = null; object respuesta = null; string mensajeExistencia = ""; int totalProcesados = 0; int lineaActual = 1; 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, Encoding.Default)) { while (!reader.EndOfStream) { csvData.Add(reader.ReadLine()); } } lineas = csvData.Skip(1); string pd = lineas.First(); pd = pd.Replace('%', ' '); var pdSplit = pd.Split(';'); DateTime periodoDocumento = FNCGrales.ConvierteFecha(pdSplit[1], char.Parse("-"), "DMY"); documentosCosto docCosto = db.documentosCosto.Where(x => x.fechaContable == periodoDocumento && x.activo == 1 && x.lineaNegocio == lineaNegocio).FirstOrDefault(); if (docCosto != null) { mensajeExistencia = "Los documentos del periodo " + periodoDocumento.Year + " " + meses[periodoDocumento.Month] + " se han actualizado"; db.sp_BorrarCargas_Delete("documentosCosto", periodoDocumento, lineaNegocio); } using (TransactionScope scope = new TransactionScope()) { foreach (string ln in lineas) { string linea = ln.Replace('%', ' '); var lineaSplit = linea.Split(';'); ++lineaActual; if (lineaSplit.Count() == 26) { documentosCosto documento = new documentosCosto(); try { ope = lineaSplit[6]; fact = lineaSplit[19]; documentosCosto veriDocumento = db.documentosCosto.Where(x => x.operador == ope && x.factura == fact && x.activo == 1 && x.lineaNegocio == lineaNegocio).FirstOrDefault(); if (veriDocumento != null) { listaErrores.Add("Línea " + lineaActual + ": El Operador y Factura actual ya estan dados de alta."); continue; } if (lineaSplit[0] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Año es obligatorio."); continue; } documento.ano = new DateTime(Int32.Parse(lineaSplit[0]), 01, 01); if (lineaSplit[1] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Fecha Contable es obligatorio."); continue; } DateTime dtFecha = FNCGrales.ConvierteFecha(lineaSplit[1], '-', "DMY"); documento.fechaContable = dtFecha; if (lineaSplit[2] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Fecha Consumo es obligatorio."); continue; } dtFecha = FNCGrales.ConvierteFecha("01-" + lineaSplit[2], '-', "DMY"); documento.fechaConsumo = dtFecha; if (documento.fechaConsumo.Month >= hoy.Month && documento.fechaConsumo.Year == hoy.Year) { listaErrores.Add("Línea " + lineaActual + ": No se permite cargar facturas con Mes Consumo que sean del mes en curso en adelante."); continue; } if (lineaSplit[3] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Compañia es obligatorio."); continue; } documento.compania = lineaSplit[3]; documento.servicio = lineaSplit[4]; if (lineaSplit[5] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Grupo es obligatorio."); continue; } documento.grupo = lineaSplit[5]; if (lineaSplit[6] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Id Operador es obligatorio."); continue; } documento.operador = lineaSplit[6]; documento.nombreOperador = lineaSplit[7]; if (lineaSplit[8] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Acreedor es obligatorio."); continue; } documento.acreedor = lineaSplit[8]; if (lineaSplit[9] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Código Material es obligatorio."); continue; } documento.codigoMaterial = lineaSplit[9]; documento.trafico = lineaSplit[10]; if (lineaSplit[11] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Monto IVA es obligatorio."); continue; } documento.montoIva = decimal.Parse(lineaSplit[11]); if (lineaSplit[12] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo IVA es obligatorio."); continue; } documento.iva = decimal.Parse(lineaSplit[12]); if (lineaSplit[13] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Moneda es obligatorio."); continue; } documento.moneda = lineaSplit[13]; if (lineaSplit[14] == null || lineaSplit[14] == "") { documento.minutos = null; } else { documento.minutos = decimal.Parse(lineaSplit[14]); } if (lineaSplit[15] == null || lineaSplit[15] == "") { documento.tarifa = null; } else { documento.tarifa = decimal.Parse(lineaSplit[15]); } if (lineaSplit[16] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Monto es obligatorio."); continue; } documento.monto = decimal.Parse(lineaSplit[16]); if (lineaSplit[17] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Monto Facturado es obligatorio."); continue; } documento.montoFacturado = decimal.Parse(lineaSplit[17]); if (lineaSplit[18] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Fecha Factura es obligatorio."); continue; } documento.fechaFactura = DateTime.ParseExact(lineaSplit[18], "dd/MM/yyyy", new CultureInfo("en-US"), DateTimeStyles.None); if (lineaSplit[19] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Factura es obligatorio."); continue; } documento.factura = lineaSplit[19]; if (lineaSplit[20] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Tipo Cambio es obligatorio."); continue; } documento.tipoCambio = decimal.Parse(lineaSplit[20]); if (lineaSplit[21] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Monto MXP es obligatorio."); continue; } documento.montoMXP = decimal.Parse(lineaSplit[21]); documento.cuentaContable = lineaSplit[22]; var result = db.spValidaDocumentosCost(documento.compania, documento.servicio, documento.grupo, documento.acreedor, documento.operador, documento.trafico, documento.moneda, documento.cuentaContable, documento.codigoMaterial, lineaNegocio ).ToList(); documento.idSociedad = result[0].idSociedad; documento.idServicio = result[0].idServicio; documento.idGrupo = result[0].idGrupo; documento.idOperador = result[0].idOperador; documento.idAcreedor = result[0].idAcreedor; documento.idTrafico = result[0].idTrafico; documento.idMoneda = result[0].idMoneda; documento.idCuentaResultado = result[0].idCuentaResultado; if (result[0].idStatus == 1) { documento.activo = 1; totalProcesados++; } else { documento.activo = 0; var cadena = result[0].cadenaResultado; listaErrores.Add("Línea " + lineaActual + ": Error en la carga, no se encontraron coincidencias" + " en los siguientes catálogo(s)" + cadena.Remove(cadena.Length - 1) + "."); } if (lineaSplit[23] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Clase Documento es obligatorio."); continue; } documento.claseDocumento = lineaSplit[23]; if (lineaSplit[24] == "") { listaErrores.Add("Línea " + lineaActual + ": El campo Clase Documento SAP es obligatorio."); continue; } documento.claseDocumentoSAP = lineaSplit[24]; // Se agrega en el Sprint 7 documento.numDocumentoPF = lineaSplit[25]; documento.estatus = "PENDIENTE DE PROCESAR"; documento.lineaNegocio = lineaNegocio; db.documentosCosto.Add(documento); Log log = new Log(); log.insertaNuevoOEliminado(documento, "Nuevo", "documentosCosto.html", Request.UserHostAddress); } 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, mensajeExistencia, totalProcesados = totalProcesados, status = status }; } return(Json(respuesta, JsonRequestBehavior.AllowGet)); }
public JsonResult cargarCSV(HttpPostedFileBase archivoCSV, int lineaNegocio) { FuncionesGeneralesController FNCGrales = new FuncionesGeneralesController(); List <string> listaErrores = new List <string>(); IEnumerable <string> lineas = null; object respuesta = null; int totalProcesados = 0; int lineaActual = 2; bool status = false; string exception = "Error, se presento un error inesperado"; //DateTime fecha = new DateTime(); try { List <string> csvData = new List <string>(); using (StreamReader reader = new StreamReader(archivoCSV.InputStream, Encoding.Default)) { while (!reader.EndOfStream) { csvData.Add(reader.ReadLine()); } } var periodoCarga = db.cargaDocumentoRoaming.Where(x => x.estatusCarga == "PC" && x.ordenCarga == "A" && x.idDocumento == "TAPIN").Select(x => x.periodoCarga).SingleOrDefault(); lineas = csvData.Skip(1); totalProcesados = lineas.Count(); using (TransactionScope scope = new TransactionScope()) { foreach (string linea in lineas) { var lineaSplit = linea.Split(';'); if (lineaSplit.Count() == 12) { try { CostoFR CFR = new CostoFR(); CFR.TipoOperador = lineaSplit[0]; CFR.Operador = lineaSplit[1]; CFR.Acreedor = lineaSplit[2]; CFR.NombreProveedor = lineaSplit[3]; CFR.Moneda = lineaSplit[4]; CFR.Importe = Convert.ToDecimal(lineaSplit[5]); //DateTime FechaInicio = FNCGrales.ConvierteFecha(lineaSplit[6], '/', "DMY"); CFR.Fecha_Inicio = DateTime.ParseExact(lineaSplit[6], "dd/MM/yyyy", new CultureInfo("en-US"), DateTimeStyles.None); DateTime FechaFin = FNCGrales.ConvierteFecha(lineaSplit[7], '/', "DMY"); CFR.Fecha_Fin = FechaFin; CFR.CuentaContable = lineaSplit[8]; CFR.Sociedad = lineaSplit[9]; CFR.TC = decimal.Parse(string.IsNullOrEmpty(lineaSplit[10]) ? "0" : lineaSplit[10]); CFR.Id_LineaNegocio = lineaNegocio; CFR.periodo_carga = DateTime.Parse(periodoCarga); var resultado = db.spValidaIdCostoFR(CFR.Operador, CFR.Acreedor, CFR.Moneda, lineaNegocio).ToList(); CFR.Id_Operador = resultado[0].idOperador; CFR.id_Acreedor = resultado[0].idAcreedor; CFR.Id_Moneda = resultado[0].idMoneda; if (resultado[0].estatus == 1) { CFR.Activo = 1; } else { CFR.Activo = 0; } db.CostoFR.Add(CFR); Log log = new Log(); log.insertaNuevoOEliminado(CFR, "Nuevo", "CostoFR.html", Request.UserHostAddress); } catch (FormatException) { listaErrores.Add("línea " + lineaActual + ": Campo con formato erróneo"); } } else { listaErrores.Add("Línea " + lineaActual + ": Número de campos insuficiente."); } ++lineaActual; } 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; } finally { respuesta = new { success = true, results = listaErrores, mensaje = exception, totalProcesados, status }; } return(Json(respuesta, JsonRequestBehavior.AllowGet)); }