Пример #1
0
        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);
        }