public JsonResult BorrarDocumentosIngreso(string strID)
        {
            object respuesta = null;
            int    Id        = 0;

            strID = strID.TrimEnd(',');
            try {
                string[] Ids = strID.Split(',');
                for (int i = 0; i < Ids.Length; i++)
                {
                    if (Ids[i].Length != 0)
                    {
                        Id = int.Parse(Ids[i]);
                        documentosIngreso documento = db.documentosIngreso.Where(x => x.Id == Id && x.activo == 1).SingleOrDefault();
                        documento.activo = 0;
                        Log log = new Log();
                        log.insertaNuevoOEliminado(documento, "Eliminado", "documentosIngreso.html", Request.UserHostAddress);

                        db.SaveChanges();
                    }
                }
                respuesta = new { success = true, result = "ok" };
            } catch (Exception ex) {
                respuesta = new { success = false, result = ex.Message };
            }
            return(Json(respuesta, JsonRequestBehavior.AllowGet));
        }
        public JsonResult AgregarDocumentosIngreso(int ano, DateTime fechaContable, DateTime fechaConsumo, int idSociedad,
                                                   string compania, int?idServicio, string servicio, int idGrupo, string grupo, int idDeudor, string deudor, int idOperador,
                                                   string operador, string nombreOperador, string codigoMaterial, int?idTrafico, string trafico, decimal montoIva,
                                                   decimal iva, int idMoneda, string moneda, decimal?minutos, decimal?tarifa, decimal monto, decimal montoFacturado,
                                                   DateTime fechaFactura, string factura, decimal tipoCambio, decimal montoMXP, int?idCuentaResultado, string cuentaContable,
                                                   string claseDocumento, string claseDocumentoSAP, string numDocumentoPF, int lineaNegocio)
        {
            object respuesta = null;

            documentosIngreso veriDocumento = db.documentosIngreso.Where(x => x.operador == operador && x.factura == factura && x.activo == 1 && x.lineaNegocio == lineaNegocio).SingleOrDefault();

            if (veriDocumento == null)
            {
                try {
                    documentosIngreso documento = new documentosIngreso
                    {
                        ano               = new DateTime(ano, 01, 01),
                        fechaContable     = fechaContable,
                        fechaConsumo      = fechaConsumo,
                        idSociedad        = idSociedad,
                        compania          = compania,
                        idServicio        = idServicio,
                        servicio          = servicio,
                        idGrupo           = idGrupo,
                        grupo             = grupo,
                        idDeudor          = idDeudor,
                        deudor            = deudor,
                        idOperador        = idOperador,
                        operador          = operador,
                        nombreOperador    = nombreOperador,
                        codigoMaterial    = codigoMaterial,
                        idTrafico         = idTrafico,
                        trafico           = trafico,
                        montoIva          = montoIva,
                        iva               = iva,
                        idMoneda          = idMoneda,
                        moneda            = moneda,
                        minutos           = minutos,
                        tarifa            = tarifa,
                        monto             = monto,
                        montoFacturado    = montoFacturado,
                        fechaFactura      = fechaFactura,
                        factura           = factura,
                        tipoCambio        = tipoCambio,
                        montoMXP          = montoMXP,
                        idCuentaResultado = idCuentaResultado,
                        cuentaContable    = cuentaContable,
                        claseDocumento    = claseDocumento,
                        claseDocumentoSAP = claseDocumentoSAP,
                        numDocumentoPF    = numDocumentoPF,
                        activo            = 1,
                        lineaNegocio      = lineaNegocio,
                        estatus           = "PENDIENTE DE PROCESAR",
                        tipoCarga         = "MANUAL"
                    };
                    db.documentosIngreso.Add(documento);
                    Log log = new Log();
                    log.insertaNuevoOEliminado(documento, "Nuevo", "documentosIngreso.html", Request.UserHostAddress);

                    db.SaveChanges();
                    respuesta = new { success = true, results = "ok" };
                } catch (Exception) {
                    respuesta = new { success = false, results = "Hubo un error al momento de realizar la petición." };
                }
            }
            else
            {
                respuesta = new { success = false, results = "El Operador y Factura actual ya estan dados de alta." };
            }

            return(Json(respuesta, JsonRequestBehavior.AllowGet));
        }
        public JsonResult ModificarDocumentosIngreso(int lineaNegocio, int id, int ano, DateTime fechaContable, DateTime fechaConsumo,
                                                     int idSociedad, string compania, int?idServicio, string servicio, int idGrupo, string grupo, int idDeudor, string deudor,
                                                     int idOperador, string operador, string nombreOperador, string codigoMaterial, int?idTrafico, string trafico,
                                                     decimal montoIva, decimal iva, int idMoneda, string moneda, decimal?minutos, decimal?tarifa, decimal monto,
                                                     decimal montoFacturado, DateTime fechaFactura, string factura, decimal tipoCambio, decimal montoMXP,
                                                     int?idCuentaResultado, string cuentaContable, string claseDocumento, string claseDocumentoSAP, string numDocumentoPF)
        {
            object respuesta = null;

            documentosIngreso VerificaDoc = db.documentosIngreso.Where(x => x.operador == operador && x.factura == factura && x.activo == 1 && x.lineaNegocio == lineaNegocio).SingleOrDefault();

            if (VerificaDoc == null || VerificaDoc.Id == id)
            {
                try {
                    documentosIngreso documento = db.documentosIngreso.Where(x => x.Id == id).SingleOrDefault();

                    //if (documento.lineaNegocio != 3) {
                    //    documento.idMoneda = idMoneda;
                    //    documento.moneda = moneda;
                    //}

                    documento.ano               = new DateTime(ano, 01, 01);
                    documento.fechaContable     = fechaContable;
                    documento.fechaConsumo      = fechaConsumo;
                    documento.idSociedad        = idSociedad;
                    documento.compania          = compania;
                    documento.idServicio        = idServicio;
                    documento.servicio          = servicio;
                    documento.idGrupo           = idGrupo;
                    documento.grupo             = grupo;
                    documento.idDeudor          = idDeudor;
                    documento.deudor            = deudor;
                    documento.idOperador        = idOperador;
                    documento.operador          = operador;
                    documento.nombreOperador    = nombreOperador;
                    documento.codigoMaterial    = codigoMaterial;
                    documento.idTrafico         = idTrafico;
                    documento.trafico           = trafico;
                    documento.montoIva          = montoIva;
                    documento.iva               = iva;
                    documento.idMoneda          = idMoneda;
                    documento.moneda            = moneda;
                    documento.minutos           = minutos;
                    documento.tarifa            = tarifa;
                    documento.monto             = monto;
                    documento.montoFacturado    = montoFacturado;
                    documento.fechaFactura      = fechaFactura;
                    documento.factura           = factura;
                    documento.tipoCambio        = tipoCambio;
                    documento.montoMXP          = montoMXP;
                    documento.idCuentaResultado = idCuentaResultado;
                    documento.cuentaContable    = cuentaContable;
                    documento.claseDocumento    = claseDocumento;
                    documento.claseDocumentoSAP = claseDocumentoSAP;
                    documento.numDocumentoPF    = numDocumentoPF;

                    Log log = new Log();
                    log.insertaBitacoraModificacion(documento, "Id", documento.Id, "documentosIngreso.html", Request.UserHostAddress);

                    db.SaveChanges();
                    respuesta = new { success = true, results = "ok" };
                } catch (Exception) {
                    respuesta = new { success = false, results = "Hubo un error mientras se procesaba la petición." };
                }
            }
            else
            {
                respuesta = new { success = false, results = "El Operador y Factura actual ya estan dados de alta." };
            }

            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;
            bool                 status = false;
            string               ope, fact;
            string               exception = "Error, se presento un error inesperado.";

            try {
                /// Se salta la primera linea, el encabezado
                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);

                //lineas = System.IO.File.ReadLines(path).Skip(1);
                using (TransactionScope scope = new TransactionScope()) {
                    foreach (string ln in lineas)
                    {
                        string linea      = ln.Replace('%', ' ');
                        var    lineaSplit = SepararLineas(linea);
                        ++lineaActual;
                        if (lineaSplit.Count() == 25)
                        {
                            documentosIngreso documento = new documentosIngreso();
                            try {
                                ope  = lineaSplit[6];
                                fact = lineaSplit[19];

                                //var veriDocumento = db.documentosIngreso.Where(x => x.operador == ope && x.factura == fact && x.activo == 1 && x.lineaNegocio == lineaNegocio).SingleOrDefault();
                                documentosIngreso veriDocumento = db.documentosIngreso.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;
                                }
                                string strDate = lineaSplit[0] + "-01-01";
                                documento.ano = DateTime.Parse(strDate);

                                if (lineaSplit[1] == "")
                                {
                                    listaErrores.Add("Línea " + lineaActual + ": El campo Fecha Contable es obligatorio.");
                                    continue;
                                }

                                DateTime dtFecha = ConvierteFecha(lineaSplit[1], char.Parse("-"), "DMY");

                                documento.fechaContable = dtFecha;//DateTime.ParseExact( lineaSplit[1], "dd-MM-yyyy", new CultureInfo("en-US"), DateTimeStyles.None);

                                if (lineaSplit[2] == "")
                                {
                                    listaErrores.Add("Línea " + lineaActual + ": El campo Fecha Consumo es obligatorio.");
                                    continue;
                                }

                                dtFecha = ConvierteFecha("01-" + lineaSplit[2], char.Parse("-"), "DMY");

                                documento.fechaConsumo = dtFecha; //DateTime.ParseExact( lineaSplit[2], "dd/MM/yyyy", new CultureInfo("en-US"), DateTimeStyles.None);
                                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 Deudor es obligatorio.");
                                    continue;
                                }
                                documento.deudor = 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;
                                }

                                dtFecha = ConvierteFecha(lineaSplit[18], char.Parse("-"), "DMY");

                                documento.fechaFactura = dtFecha; //DateTime.ParseExact(lineaSplit[18], "dd/MM/yyyy", new CultureInfo("en-US"), DateTimeStyles.None);// DateTime.Parse(lineaSplit[18]);

                                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.spValidaDocumentosIng(documento.compania, documento.servicio,
                                                                      documento.grupo, documento.deudor, 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.idDeudor          = result[0].idDeudor;
                                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];
                                documento.estatus           = "PENDIENTE DE PROCESAR";
                                documento.lineaNegocio      = lineaNegocio;
                                documento.tipoCarga         = "MASIVA";
                                db.documentosIngreso.Add(documento);
                                Log log = new Log();
                                log.insertaNuevoOEliminado(documento, "Nuevo", "documentosIngreso.html", Request.UserHostAddress);
                            } catch (FormatException) {
                                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,
                    status
                };
            }

            return(Json(respuesta, JsonRequestBehavior.AllowGet));
        }