Beispiel #1
0
        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));
        }