Esempio n. 1
0
        /// <summary>
        /// Método encargado de revisar si el Pago tiene todos sus Documentos Relacionados dados de alta en el sistema y cambiar en automático el estatus.
        /// </summary>
        /// <param name="idUsuario"></param>
        /// <returns></returns>
        public RetornoOperacion ActualizaEstatusAutomatico(int idCompania, int idUsuario)
        {
            RetornoOperacion resultado    = new RetornoOperacion();
            byte             nuevoEstatus = (byte)EstatusPago.DocumentosCompletos;

            using (DataTable dtDocumentos = ObtieneDocumentos(this._idPagoFacturado))
            {
                if (Validacion.ValidaOrigenDatos(dtDocumentos))
                {
                    foreach (DataRow rowDocumento in dtDocumentos.Rows)
                    {
                        using (FacturadoProveedor factura = new FacturadoProveedor(rowDocumento["UUIDTDP"].ToString(), idCompania))
                        {
                            if (!factura.habilitar)                             //Si falta alguna factura
                            {
                                nuevoEstatus = (byte)EstatusPago.DocumentosPendientes;
                                break;                                 //Dejar de revisar
                            }
                        }
                    }
                    resultado = _Editar(_idFacturadoProveedor, _fechaPago, _idFormaPagoP, _idMonedaP, _tipoCambio, _fechaTipoCambio, _monto, _numeroOperacion, _rfcEmisorCuentaBeneficiario, _idBancoOrdenanteExtranjero, _cuentaOrdenante, _rfcEmisorCuentaBeneficiario, _cuentaBeneficiario, _idTipoCadenaPago, (EstatusPago)nuevoEstatus, idUsuario, this._habilitar);
                }
                else
                {
                    resultado = new RetornoOperacion("No se encontraron Documentos Relacionados en el Pago.", false);
                }
            }
            return(resultado);
        }
Esempio n. 2
0
        /// <summary>
        /// Método Privado encargado de Actualizar los Registros en BD
        /// </summary>
        /// <param name="id_factura_proveedor">Id de la Factura del Proveedor</param>
        /// <param name="cantidad">Cantidad del Concepto</param>
        /// <param name="unidad">Unidad expresada en el Concepto</param>
        /// <param name="identificador">identificador del Concepto</param>
        /// <param name="concepto_cobro">Concepto de Cobro</param>
        /// <param name="id_clasificacion_contable">Id de Clasificación Contable</param>
        /// <param name="valor_unitario">Valor Unitario</param>
        /// <param name="importe">Importe del Concepto</param>
        /// <param name="importe_pesos">Importe en Pesos del Concepto</param>
        /// <param name="tasa_impuesto_retenido">Tasa de Impuesto Retenido</param>
        /// <param name="importe_retenido">Importe Retenido</param>
        /// <param name="tasa_impuesto_trasladado">Tasa de Impuesto Trasladado</param>
        /// <param name="importe_trasladado">Importe Trasladado</param>
        /// <param name="id_usuario">Id de Usuario</param>
        /// <param name="habilitar">Estatus Habilitar</param>
        /// <returns></returns>
        private RetornoOperacion actualizaRegistros(int id_factura_proveedor, decimal cantidad, string unidad, string identificador,
                                                    string concepto_cobro, int id_clasificacion_contable, decimal valor_unitario, decimal importe,
                                                    decimal importe_pesos, decimal tasa_impuesto_retenido, decimal importe_retenido, decimal tasa_impuesto_trasladado,
                                                    decimal importe_trasladado, int id_usuario, bool habilitar)
        {   //Declarando Objeto de Retorno
            RetornoOperacion result = new RetornoOperacion();

            //Armando Arreglo de Parametros
            object[] param = { 2,                this._id_facturado_proveedor_concepto, id_factura_proveedor, cantidad,   unidad,        identificador,
                               concepto_cobro,   id_clasificacion_contable,             valor_unitario,       importe,    importe_pesos, tasa_impuesto_retenido,
                               importe_retenido, tasa_impuesto_trasladado,              importe_trasladado,   id_usuario, habilitar,     "", "" };
            //Instanciando la Factura
            using (FacturadoProveedor fp = new FacturadoProveedor(id_factura_proveedor))
            {
                //Validando que exista la Factura
                if (fp.id_factura != 0)
                {
                    //Validando que no este transferida
                    if (!fp.bit_transferido)
                    {
                        //Obteniendo Resultado del SP
                        result = CapaDatos.m_capaDeDatos.EjecutaProcAlmacenadoObjeto(_nom_sp, param);
                    }
                    else
                    {
                        //Instanciando Excepcion
                        result = new RetornoOperacion("Factura esta Transferida. No se puede editar el Concepto");
                    }
                }
                else//Instanciando Excepcion
                {
                    result = new RetornoOperacion("No existe la Factura");
                }
            }
            //Devolviendo Resultado Obtenido
            return(result);
        }
Esempio n. 3
0
        /// <summary>
        /// Evento Producido al Presionar el Boton "Asignar Vales"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAsignarVales_Click(object sender, EventArgs e)
        {
            //Declarando Objeto de Retorno
            RetornoOperacion result = new RetornoOperacion();

            //Validando que exista una Factura Seleccionada
            if (gvFacturas.SelectedIndex != -1)
            {
                //Obteniendo Filas Seleccionadas
                GridViewRow[] filas = TSDK.ASP.Controles.ObtenerFilasSeleccionadas(gvVales, "chkVarios");

                //Validando que existan Vales Seleccionados
                if (filas.Length > 0)
                {
                    //Inicializando Bloque Transacional
                    using (TransactionScope trans = TSDK.Datos.Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
                    {
                        //Instanciando la Factura
                        using (FacturadoProveedor fp = new FacturadoProveedor(Convert.ToInt32(gvFacturas.SelectedDataKey["Id"])))
                        {
                            //Validando que exista la Factura
                            if (fp.id_factura != 0)
                            {
                                //Declarando Contador
                                int contador = 0;
                                //Iniciando Ciclo
                                while (contador < filas.Length)
                                {
                                    //Obteniendo Indice
                                    gvVales.SelectedIndex = filas[contador].RowIndex;

                                    //Instanciando
                                    using (AsignacionDiesel ad = new AsignacionDiesel(Convert.ToInt32(gvVales.SelectedDataKey["Id"])))
                                    {
                                        //Validando que exista el Vale
                                        if (ad.id_asignacion_diesel != 0)
                                        {
                                            //Asignando el Vale a la Factura
                                            result = ad.AsignaFacturaValeDiesel(fp.id_factura, ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);
                                            //Validando que la Operación haya sido exitosa
                                            contador = result.OperacionExitosa ? contador + 1 : filas.Length;
                                        }
                                        else
                                        {
                                            //Instanciando Excepción
                                            result = new RetornoOperacion("No existe el Vale");
                                        }
                                    }
                                }
                            }
                            else
                            {
                                //Instanciando Excepción
                                result = new RetornoOperacion("No existe la Factura");
                            }
                        }

                        //Validando que la Operación haya sido exitosa
                        if (result.OperacionExitosa)
                        {
                            //Completando Transacción
                            trans.Complete();
                        }
                    }

                    //Validando el Resultado de la Operación
                    if (result.OperacionExitosa)
                    {
                        //Obteniendo Factura de Proveedor
                        int idFacturaProveedor = Convert.ToInt32(gvFacturas.SelectedDataKey["Id"]);

                        //Vargando Reportes
                        buscaVales();
                        buscaFacturas();

                        //Marcando Fila
                        Controles.MarcaFila(gvFacturas, idFacturaProveedor.ToString(), "Id", "Id-Monto-Asignado", OrigenDatos.RecuperaDataTableDataSet((DataSet)Session["DS"], "Table"), lblOrdenadoFactura.Text, Convert.ToInt16(ddlTamanoFac.SelectedValue), true, 1);

                        //Recargando Vales Asignados
                        buscaValesAsignados();
                    }
                }
                else
                {
                    //Instanciando Excepción
                    result = new RetornoOperacion("Debe seleccionar al menos un Vale");
                }
            }
            else
            {
                //Instanciando Excepción
                result = new RetornoOperacion("Debe Seleccionar una Factura");
            }

            //Mostrando Resultado de Operación
            ScriptServer.MuestraNotificacion(btnAsignarVales, result, ScriptServer.PosicionNotificacion.AbajoDerecha);
        }
Esempio n. 4
0
        /// <summary>
        /// Método encargado de Exportar los Archivos XML de las Facturas de Proveedor
        /// </summary>
        private void exportaXML()
        {
            //Verificando que el GridView contiene Registros
            if (gvSaldosDetalle.DataKeys.Count > 0)
            {
                //Declarando Objeto de Retorno
                RetornoOperacion result = new RetornoOperacion();

                //Creamos lista de archivos
                List <KeyValuePair <string, byte[]> > archivos = new List <KeyValuePair <string, byte[]> >();

                //Creamos lista errores
                List <string> errores = new List <string>();

                //Obteniendo Filas Seleccionadas
                GridViewRow[] selected_rows = Controles.ObtenerFilasSeleccionadas(gvSaldosDetalle, "chkVarios");

                //Verificando que existan filas Seleccionadas
                if (selected_rows.Length != 0)
                {
                    //Almacenando Rutas el Arreglo
                    foreach (GridViewRow row in selected_rows)
                    {
                        //Asignando Indice
                        gvSaldosDetalle.SelectedIndex = row.RowIndex;

                        //Instanciando Factura
                        using (SAT_CL.CXP.FacturadoProveedor factura = new FacturadoProveedor(Convert.ToInt32(gvSaldosDetalle.SelectedDataKey["NoFactura"])))

                            //Instanciando Proveedor
                            using (SAT_CL.Global.CompaniaEmisorReceptor proveedor = new SAT_CL.Global.CompaniaEmisorReceptor(factura.id_compania_proveedor))
                            {
                                //Validando que exista la Factura
                                if (factura.habilitar && proveedor.habilitar)
                                {
                                    //Declarando Objeto de Retorno
                                    byte[] xml = null;

                                    //Obteniendo Archivos
                                    using (DataTable dtArchivos = SAT_CL.Global.ArchivoRegistro.CargaArchivoRegistro(72, factura.id_factura, 8, 0))
                                    {
                                        //Validando que Existan Registros
                                        if (Validacion.ValidaOrigenDatos(dtArchivos))
                                        {
                                            //Recorriendo Archivos
                                            foreach (DataRow dr in dtArchivos.Rows)
                                            {
                                                try
                                                {
                                                    //Obteniendo Bytes del Archivo
                                                    xml = System.IO.File.ReadAllBytes(dr["URL"].ToString());

                                                    //Resultado Positivo
                                                    result = new RetornoOperacion(0, "", true);
                                                }
                                                catch (Exception ex)
                                                {
                                                    //Obteniendo Bytes del Archivo
                                                    xml = null;

                                                    //Instanciando resultado Positivo
                                                    result = new RetornoOperacion(-1, ex.Message, false);

                                                    //Añadiendo Error
                                                    errores.Add(ex.Message);
                                                }

                                                //Validando que exista el Archivo
                                                if (xml != null)
                                                {
                                                    //Declarando Variables Auxiliares
                                                    Encoding encoding;
                                                    string   str = "";

                                                    //Intentando encontrar codificación
                                                    try
                                                    {
                                                        //Leyendo Stream
                                                        using (var stream = new MemoryStream(xml))
                                                        {
                                                            //Leyendo XML
                                                            using (var xmlreader = new XmlTextReader(stream))
                                                            {
                                                                //Obteniendo Codificación
                                                                xmlreader.MoveToContent();
                                                                encoding = xmlreader.Encoding;
                                                            }
                                                        }

                                                        //Obteniendo Cadena del XML
                                                        str = encoding.GetString(xml);
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        //Obteniendo Cadena del XML
                                                        str = Encoding.Default.GetString(xml);
                                                    }

                                                    //Intentando Obtener Bytes
                                                    try
                                                    {
                                                        //Obteniendo XML en Codificación UTF8
                                                        xml = Encoding.UTF8.GetBytes(str);

                                                        //Instanciando resultado Positivo
                                                        result = new RetornoOperacion(0, "", true);
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        //Obteniendo Bytes del Archivo
                                                        xml = null;

                                                        //Instanciando resultado Positivo
                                                        result = new RetornoOperacion(-1, ex.Message, false);
                                                    }
                                                }
                                                else
                                                {
                                                    //Añadiendo Error
                                                    errores.Add(string.Format("No se pudo recuperar la Factura '{0}{1}'", factura.serie, factura.folio));
                                                }

                                                //Terminando Ciclo
                                                break;
                                            }
                                        }
                                    }

                                    //Validando Operación Exitosa
                                    if (result.OperacionExitosa)
                                    {
                                        //Construyendo Nombre del Archivo
                                        string file_name_cxp = (factura.serie + factura.folio).Equals("") ? factura.uuid : factura.serie + factura.folio;
                                        //Añadimos XML
                                        archivos.Add(new KeyValuePair <string, byte[]>(string.Format("{0}_{1}.xml", proveedor.rfc, file_name_cxp), xml));
                                    }
                                }
                                else
                                {
                                    //Asignando Error
                                    errores.Add("No Existe la Factura.");
                                }
                            }
                    }

                    //Validando operación Exitosa
                    if (result.OperacionExitosa)
                    {
                        //Genera el zip con las rutas
                        byte[] file_zip = Archivo.ConvirteArchivoZIP(archivos, out errores);

                        //Si almenos un archivo fue correcto descarga
                        if (file_zip != null)
                        {
                            //Desmarcando Filas
                            Controles.SeleccionaFilasTodas(gvSaldosDetalle, "chkVarios", false);

                            //Se crea un CheckBox donde se le asigna el Control CheckBox con el ID "chkTodos"
                            CheckBox chkTodos = (CheckBox)gvSaldosDetalle.HeaderRow.FindControl("chkTodos");

                            //Validando que exista el Control
                            if (chkTodos != null)
                            {
                                //Desmarcarndo Control
                                chkTodos.Checked = false;
                            }

                            //Descarga el zip generado
                            Archivo.DescargaArchivo(file_zip, string.Format("Facturas_{0:yyyyMMddHHmmss}.zip", Fecha.ObtieneFechaEstandarMexicoCentro()), Archivo.ContentType.binary_octetStream);
                        }
                    }

                    //Mostrando Mensaje de Error
                    string error_msn = "";

                    //Recorremos errores
                    foreach (string error in errores)
                    {
                        //Muestra mensaje de Error
                        error_msn += error + " \n";
                    }

                    //Validando que Existan Errores
                    if (!error_msn.Equals(""))
                    {
                        //Mostrando Errores
                        ScriptServer.MuestraNotificacion(this.Page, error_msn, ScriptServer.NaturalezaNotificacion.Error, ScriptServer.PosicionNotificacion.AbajoDerecha);
                    }
                }
                else
                {
                    //Mostrando Excepción
                    ScriptServer.MuestraNotificacion(this.Page, "No hay Facturas Seleccionadas", ScriptServer.NaturalezaNotificacion.Alerta, ScriptServer.PosicionNotificacion.AbajoDerecha);
                }

                //Inicializando Indices
                Controles.InicializaIndices(gvSaldosDetalle);
            }
            else
            {
                //Mostrando Excepción
                ScriptServer.MuestraNotificacion(this.Page, "No existen Registros", ScriptServer.NaturalezaNotificacion.Alerta, ScriptServer.PosicionNotificacion.AbajoDerecha);
            }
        }
Esempio n. 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void imbValidacion_Click(object sender, ImageClickEventArgs e)
        {
            //Validando Datos
            if (gvSaldosDetalle.DataKeys.Count > 0)
            {
                //Declarando Objeto de Retorno
                RetornoOperacion retorno = new RetornoOperacion();

                //Seleccionando Fila
                Controles.SeleccionaFila(gvSaldosDetalle, sender, "imb", false);

                //Instanciando Factura
                using (SAT_CL.CXP.FacturadoProveedor factura = new FacturadoProveedor(Convert.ToInt32(gvSaldosDetalle.SelectedDataKey["NoFactura"])))
                    //Instanciando Proveedor
                    using (SAT_CL.Global.CompaniaEmisorReceptor proveedor = new SAT_CL.Global.CompaniaEmisorReceptor(factura.id_compania_proveedor))
                    {
                        //Validando que exista la Factura
                        if (factura.habilitar && proveedor.habilitar)
                        {
                            //Obteniendo Archivos
                            using (DataTable dtArchivos = SAT_CL.Global.ArchivoRegistro.CargaArchivoRegistro(72, factura.id_factura, 8, 0))
                            {
                                //Validando que Existan Registros
                                if (Validacion.ValidaOrigenDatos(dtArchivos))
                                {
                                    //Recorriendo Archivos
                                    foreach (DataRow dr in dtArchivos.Rows)
                                    {
                                        //Declarando auxiliares
                                        string  rfc_emisor, rfc_receptor, UUID;
                                        decimal monto; DateTime fecha_expedicion;

                                        //Obteniendo Archivo
                                        byte[] comp = System.IO.File.ReadAllBytes(dr["URL"].ToString());

                                        //Declarando Documento XML
                                        XmlDocument xmlDocument = new XmlDocument();
                                        XDocument   xDocument   = new XDocument();

                                        //Obteniendo XML en cadena
                                        using (MemoryStream ms = new MemoryStream(comp))
                                            //Cargando Documento XML
                                            xmlDocument.Load(ms);

                                        //Convirtiendo XML
                                        xDocument = TSDK.Base.Xml.ConvierteXmlDocumentAXDocument(xmlDocument);

                                        //Validando versión
                                        switch (xDocument.Root.Attribute("version") != null ? xDocument.Root.Attribute("version").Value : xDocument.Root.Attribute("Version").Value)
                                        {
                                        case "3.2":
                                        case "3.3":
                                        {
                                            //Realizando validación de estatus en SAT
                                            retorno = SAT_CL.FacturacionElectronica.Comprobante.ValidaEstatusPublicacionSAT(xmlDocument, out rfc_emisor, out rfc_receptor, out monto, out UUID, out fecha_expedicion);

                                            //Colocando resultado sobre controles
                                            imgValidacionSAT.Src          = retorno.OperacionExitosa ? "../Image/Exclamacion.png" : "../Image/ExclamacionRoja.png";
                                            headerValidacionSAT.InnerText = retorno.Mensaje;
                                            lblRFCEmisor.Text             = rfc_emisor;
                                            lblRFCReceptor.Text           = rfc_receptor;
                                            lblUUIDM.Text           = UUID;
                                            lblTotalFactura.Text    = monto.ToString("C");
                                            lblFechaExpedicion.Text = fecha_expedicion.ToString("dd/MM/yyyy HH:mm");
                                            break;
                                        }
                                        }
                                    }
                                }
                            }
                        }
                    }
            }
            //Mostrando Ventana Modal
            ScriptServer.AlternarVentana(this.Page, "ValidacionSAT", "contenidoResultadoConsultaSATModal", "contenidoResultadoConsultaSAT");
        }
Esempio n. 6
0
        /// <summary>
        /// Evento Producido al Dar Click en "Descargar"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void lnkDescargaXML_Click(object sender, EventArgs e)
        {
            //Validando que existan Registros
            if (gvSaldosDetalle.DataKeys.Count > 0)
            {
                //Declarando Objeto de Retorno
                RetornoOperacion result = new RetornoOperacion();

                //Declarando Documento XML
                XDocument doc = new XDocument();

                //Seleccionando Fila
                TSDK.ASP.Controles.SeleccionaFila(gvSaldosDetalle, sender, "lnk", false);

                //Instanciando Factura
                using (SAT_CL.CXP.FacturadoProveedor factura = new FacturadoProveedor(Convert.ToInt32(gvSaldosDetalle.SelectedDataKey["NoFactura"])))

                    //Instanciando Proveedor
                    using (SAT_CL.Global.CompaniaEmisorReceptor proveedor = new SAT_CL.Global.CompaniaEmisorReceptor(factura.id_compania_proveedor))
                    {
                        //Validando que exista la Factura
                        if (factura.habilitar && proveedor.habilitar)
                        {
                            //Declarando Objeto de Retorno
                            byte[] xml = null;

                            //Obteniendo Archivos
                            using (DataTable dtArchivos = SAT_CL.Global.ArchivoRegistro.CargaArchivoRegistro(72, factura.id_factura, 8, 0))
                            {
                                //Validando que Existan Registros
                                if (Validacion.ValidaOrigenDatos(dtArchivos))
                                {
                                    //Recorriendo Archivos
                                    foreach (DataRow dr in dtArchivos.Rows)
                                    {
                                        try
                                        {
                                            //Obteniendo Bytes del Archivo
                                            xml = System.IO.File.ReadAllBytes(dr["URL"].ToString());

                                            //Resultado Positivo
                                            result = new RetornoOperacion(0, "", true);
                                        }
                                        catch (Exception ex)
                                        {
                                            //Obteniendo Bytes del Archivo
                                            xml = null;

                                            //Instanciando resultado Positivo
                                            result = new RetornoOperacion(-1, ex.Message, false);
                                        }

                                        //Validando que exista el Archivo
                                        if (xml != null)
                                        {
                                            //Declarando Variables Auxiliares
                                            Encoding encoding;
                                            string   str = "";

                                            //Intentando encontrar codificación
                                            try
                                            {
                                                //Leyendo Stream
                                                using (var stream = new MemoryStream(xml))
                                                {
                                                    //Leyendo XML
                                                    using (var xmlreader = new XmlTextReader(stream))
                                                    {
                                                        //Obteniendo Codificación
                                                        xmlreader.MoveToContent();
                                                        encoding = xmlreader.Encoding;
                                                    }
                                                }

                                                //Obteniendo Cadena del XML
                                                str = encoding.GetString(xml);
                                            }
                                            catch (Exception ex)
                                            {
                                                //Obteniendo Cadena del XML
                                                str = Encoding.Default.GetString(xml);
                                            }

                                            //Intentando Obtener Bytes
                                            try
                                            {
                                                //Obteniendo XML en Codificación UTF8
                                                xml = Encoding.UTF8.GetBytes(str);

                                                //Instanciando resultado Positivo
                                                result = new RetornoOperacion(0, "", true);
                                            }
                                            catch (Exception ex)
                                            {
                                                //Obteniendo Bytes del Archivo
                                                xml = null;

                                                //Instanciando resultado Positivo
                                                result = new RetornoOperacion(-1, ex.Message, false);
                                            }
                                        }

                                        //Terminando Ciclo
                                        break;
                                    }
                                }
                            }

                            //Validando Operación Exitosa
                            if (result.OperacionExitosa)
                            {
                                //Descargando Archivo PDF
                                TSDK.Base.Archivo.DescargaArchivo(xml, string.Format("{0}_{1}{2}.xml", proveedor.rfc, factura.serie, factura.folio), TSDK.Base.Archivo.ContentType.text_xml);
                            }
                            else
                            {
                                //Mostrando Excepción
                                ScriptServer.MuestraNotificacion(this, result, ScriptServer.PosicionNotificacion.AbajoDerecha);
                            }
                        }
                        else
                        {
                            //Instanciando resultado Positivo
                            result = new RetornoOperacion("No Existe la Factura", false);

                            //Mostrando Excepción
                            ScriptServer.MuestraNotificacion(this, result, ScriptServer.PosicionNotificacion.AbajoDerecha);
                        }
                    }

                //Inicializando Indices
                Controles.InicializaIndices(gvSaldosDetalle);
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Evento Producido al Presionar el Boton "Asignar IAVE"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAsignarIave_Click(object sender, EventArgs e)
        {
            //Declarando Objeto de Retorno
            RetornoOperacion result = new RetornoOperacion();
            //Declarando Total Casetas
            Decimal TotalCasetas         = 0;
            Decimal TotalFacturaAsignado = 0;

            //Validando que exista una Factura Seleccionada
            if (gvFacturas.SelectedIndex != -1)
            {
                //Obteniendo Filas Seleccionadas
                GridViewRow[] filas = TSDK.ASP.Controles.ObtenerFilasSeleccionadas(gvIaves, "chkVarios");

                //Validando que existan IAVE Seleccionados
                if (filas.Length > 0)
                {
                    //Inicializando Bloque Transacional
                    using (TransactionScope trans = TSDK.Datos.Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
                    {
                        //Instanciando la Factura
                        using (FacturadoProveedor fp = new FacturadoProveedor(Convert.ToInt32(gvFacturas.SelectedDataKey["Id"])))
                        {
                            //Validando que exista la Factura
                            if (fp.id_factura != 0)
                            {
                                //Declarando Contador
                                int contador = 0;
                                //Iniciando Ciclo Total  Casetas Seleccionados
                                while (contador < filas.Length)
                                {
                                    //Obteniendo Indice
                                    gvIaves.SelectedIndex = filas[contador].RowIndex;
                                    //Instanciando
                                    if (Convert.ToInt32(gvIaves.SelectedDataKey["Id"]) > 0)
                                    {
                                        //Validando que exista el IAVE
                                        TotalCasetas = TotalCasetas + Convert.ToDecimal(gvIaves.SelectedDataKey["Monto"]);
                                        contador     = contador + 1;
                                    }
                                }
                                //Asignacion
                                TotalFacturaAsignado = Convert.ToDecimal(gvFacturas.SelectedDataKey["Asignado"]) > 0 ? (fp.total_factura - Convert.ToDecimal(gvFacturas.SelectedDataKey["Asignado"])) : fp.total_factura;
                                if (TotalCasetas <= TotalFacturaAsignado)
                                {
                                    //Declarando Contador
                                    int contadori = 0;
                                    //Iniciando Ciclo
                                    while (contadori < filas.Length)
                                    {
                                        //Obteniendo Indice
                                        gvIaves.SelectedIndex = filas[contadori].RowIndex;
                                        TotalCasetas          = TotalCasetas + Convert.ToDecimal(gvIaves.SelectedDataKey["Id"]);
                                        //Instanciando
                                        using (SAT_CL.Ruta.CrucesAutorizadosIave Iave = new SAT_CL.Ruta.CrucesAutorizadosIave(Convert.ToInt32(gvIaves.SelectedDataKey["Id"])))
                                        {
                                            //Validando que exista el IAVE
                                            if (Iave.habilitar)
                                            {
                                                //Asignando el Iave a la Factura
                                                result = Iave.AsignaFacturaIave(fp.id_factura, 2, ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario);
                                                //Validando que la Operación haya sido exitosa
                                                contadori = result.OperacionExitosa ? contadori + 1 : filas.Length;
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    //Instanciando Excepción
                                    result = new RetornoOperacion("El Total de la factura es menor al costos de las casetas");
                                }
                            }
                            else
                            {
                                //Instanciando Excepción
                                result = new RetornoOperacion("No existe la Factura");
                            }
                        }
                        //Validando que la Operación haya sido exitosa
                        if (result.OperacionExitosa)
                        {
                            //Completando Transacción
                            trans.Complete();
                        }
                    }

                    //Validando el Resultado de la Operación
                    if (result.OperacionExitosa)
                    {
                        //Obteniendo Factura de Proveedor
                        int idFacturaProveedor = Convert.ToInt32(gvFacturas.SelectedDataKey["Id"]);

                        //Vargando Reportes
                        buscarCrucesIaves();
                        buscaFacturas();

                        //Marcando Fila
                        Controles.MarcaFila(gvFacturas, idFacturaProveedor.ToString(), "Id", "Id-Monto-Asignado", OrigenDatos.RecuperaDataTableDataSet((DataSet)Session["DS"], "Table"), lblOrdenadoFactura.Text, Convert.ToInt16(ddlTamanoFac.SelectedValue), true, 1);

                        //Recargando IAVES Asignados
                        buscaIavesAsignados(Convert.ToInt32(gvFacturas.SelectedDataKey["Id"]));
                    }
                }
                else
                {
                    //Instanciando Excepción
                    result = new RetornoOperacion("Debe seleccionar al menos una caseta Iave");
                }
            }
            else
            {
                //Instanciando Excepción
                result = new RetornoOperacion("Debe Seleccionar una Factura");
            }

            //Mostrando Resultado de Operación
            ScriptServer.MuestraNotificacion(btnAsignarIave, result, ScriptServer.PosicionNotificacion.AbajoDerecha);
        }
        /// <summary>
        /// Método encargado de Importar el Archvio XML
        /// </summary>
        /// <returns></returns>
        private RetornoOperacion guardaXML()
        {
            RetornoOperacion resultado = new RetornoOperacion();
            int idFacturadoProveedor   = 0;

            if (Session["XML"] != null)
            {
                XDocument  factura = (XDocument)Session["XML"];
                XNamespace nsCFDI  = factura.Root.GetNamespaceOfPrefix("cfdi");
                XNamespace nsTFD   = CapaNegocio.m_capaNegocio.RegresaVariableCatalogoBD("Namespace TimbreFiscalDigital");

                switch ((Pagina.Estatus)Session["estatus"])
                {
                default:
                {
                    using (TransactionScope transaccionFactura = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
                    {
                        //Validando versión
                        switch (factura.Root.Attribute("version") != null ? factura.Root.Attribute("version").Value : factura.Root.Attribute("Version").Value)
                        {
                        case "3.2":
                        {
                            ScriptServer.MuestraNotificacion(this.Page, "La versión 3.2 ya no es soportada", ScriptServer.NaturalezaNotificacion.Alerta, ScriptServer.PosicionNotificacion.AbajoDerecha);
                            break;
                        }

                        case "3.3":
                        {
                            //Insertando CFDI 3.3 usando el tipo de servicio de la compañia
                            using (SAT_CL.Global.CompaniaEmisorReceptor compania = new SAT_CL.Global.CompaniaEmisorReceptor(((UsuarioSesion)Session["usuario_sesion"]).id_compania_emisor_receptor))
                                resultado = FacturadoProveedor.ImportaComprobanteVersion33(compania.id_compania_emisor_receptor, compania.id_tipo_servicio, Session["XMLFileName"].ToString(), factura, ((Usuario)Session["usuario"]).id_usuario);
                            break;
                        }
                        }
                        if (resultado.OperacionExitosa)
                        {
                            transaccionFactura.Complete();
                        }
                    }
                    break;
                }
                }
            }
            else
            {
                //Instanciando Excepción
                resultado = new RetornoOperacion("Cargue su archivo XML para importar");
            }
            //Validando que exista
            if (resultado.OperacionExitosa)
            {
                //Reasignando Id de registro
                resultado = new RetornoOperacion(idFacturadoProveedor);
                //Establecemos el id del registro
                Session["id_registro"] = resultado.IdRegistro;
                //Establecemos el estatus de la forma
                Session["estatus"] = Pagina.Estatus.Lectura;
                //Eliminando Contenido en Sessión del XML
                Session["XML"]             =
                    Session["XMLFileName"] = null;
                //Inicializamos la forma
                //inicializaPagina();
                //Actualizamos la etiqueta de errores
                ScriptServer.MuestraNotificacion(this, resultado.Mensaje, ScriptServer.NaturalezaNotificacion.Exito, ScriptServer.PosicionNotificacion.AbajoDerecha);
            }
            //Devolviendo resultado Obtenido
            return(resultado);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void lnkSeleccionarPago_Click(object sender, EventArgs e)
        {
            if (gvPagosEgreso.DataKeys.Count > 0)
            {
                LinkButton lnk = (LinkButton)sender;
                Controles.SeleccionaFila(gvPagosEgreso, lnk, "lnk", false);
                switch (lnk.CommandName)
                {
                case "Abrir":
                {
                    try
                    {
                        using (DataTable dtDocumentos = PagoFacturado.ObtieneDocumentos(Convert.ToInt32(gvPagosEgreso.SelectedDataKey["IdTPF"])))
                        {
                            if (Validacion.ValidaOrigenDatos(dtDocumentos))
                            {
                                Controles.CargaGridView(gvDocumentosPago, dtDocumentos, "IdTDP-IdPF", "IdTDP");
                            }
                            else
                            {
                                Controles.InicializaGridview(gvDocumentosPago);
                            }
                        }
                    }
                    catch
                    {
                        ScriptServer.MuestraNotificacion(this.Page, "No hay Documentos coincidentes", ScriptServer.NaturalezaNotificacion.Error, ScriptServer.PosicionNotificacion.AbajoDerecha);
                    }
                    break;
                }

                case "Ligar":
                {
                    decimal          totalSaldoDocumentos = 0;
                    int              idCompania           = ((UsuarioSesion)Session["usuario_sesion"]).id_compania_emisor_receptor;
                    int              idUsuario            = ((Usuario)Session["usuario"]).id_usuario;
                    RetornoOperacion resultado            = new RetornoOperacion();
                    try
                    {
                        //Volver a obtener los Documentos Relacionados del Pago
                        using (DataTable dtDocumentos = PagoFacturado.ObtieneDocumentos(Convert.ToInt32(gvPagosEgreso.SelectedDataKey["IdTPF"])))
                        {
                            if (Validacion.ValidaOrigenDatos(dtDocumentos))
                            {
                                //Revisar si el total de los saldos pagados de todos los Documentos Relacionados, coincide con el monto del Pago
                                foreach (DataRow rowDocumento in dtDocumentos.Rows)
                                {
                                    totalSaldoDocumentos += Convert.ToDecimal(rowDocumento["ImportePagTDP"]);
                                }
                                using (PagoFacturado pago = new PagoFacturado(Convert.ToInt32(gvPagosEgreso.SelectedDataKey["IdTPF"])))
                                {
                                    if (totalSaldoDocumentos == pago.monto)
                                    {
                                        //Crear ficha entre el Egreso seleccionado y la factura del Documento Relacionado
                                        using (TransactionScope transaccionFactura = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
                                        {
                                            resultado = FE33.EgresoIngresoComprobante.InsertaEgresoIngresoComprobante(
                                                Convert.ToInt32(gvEgresos.SelectedDataKey["IdTEI"]),
                                                2,                                                         //Tipo Operacion: Egreso
                                                pago.idFacturadoProveedor,
                                                1,                                                         //Estatus: Capturada
                                                0,                                                         //No reemplaza
                                                idUsuario);
                                            if (resultado.OperacionExitosa)
                                            {
                                                int idEgresoIngresoComp = resultado.IdRegistro;
                                                foreach (DataRow rowDocumento in dtDocumentos.Rows)
                                                {
                                                    //Instanciar por el UUID del Documento Relacionado
                                                    using (FacturadoProveedor facturado = new FacturadoProveedor(rowDocumento["UUIDTDP"].ToString(), idCompania))
                                                    {
                                                        if (facturado.habilitar)
                                                        {
                                                            DataTable listaAplicaciones = FichaIngresoAplicacion.ObtieneAplicacionesFacturas(72, facturado.id_factura, Convert.ToInt32(gvEgresos.SelectedDataKey["IdTEI"]));
                                                            int       idFichaAplicacion = (
                                                                from DataRow rowAplicacion
                                                                in listaAplicaciones.Rows
                                                                where rowAplicacion.Field <int>("IdRegistro") == facturado.id_factura
                                                                select rowAplicacion.Field <int>("Id")).FirstOrDefault();
                                                            resultado = FE33.ComprobantePagoDocumentoRelacionado.InsertarComprobantePagoDocumentoRelacionado(
                                                                FE33.ComprobantePagoDocumentoRelacionado.TipoOperacion.Egreso,
                                                                pago.idFacturadoProveedor,
                                                                FE33.ComprobantePagoDocumentoRelacionado.TipoOperacionDocumento.Egreso,
                                                                facturado.id_factura,
                                                                Convert.ToInt32(gvEgresos.SelectedDataKey["IdTEI"]),
                                                                idFichaAplicacion,
                                                                Convert.ToDecimal(rowDocumento["ImporteSalAntTDP"]),
                                                                Convert.ToDecimal(rowDocumento["ImportePagTDP"]),
                                                                Convert.ToByte(rowDocumento["NoParcialidadTDP"]),
                                                                idEgresoIngresoComp, idUsuario);
                                                        }
                                                        else
                                                        {
                                                            resultado = new RetornoOperacion($"La factura con UUID: {rowDocumento["UUIDTDP"].ToString()} no se encuentra en el sistema.", false);
                                                            break;
                                                        }
                                                    }
                                                }
                                            }
                                            //Cambiar estatus al Pago a Ligado
                                            if (resultado.OperacionExitosa)
                                            {
                                                resultado = pago.ActualizaEstatus(PagoFacturado.EstatusPago.Ligado, idUsuario);
                                            }
                                            if (resultado.OperacionExitosa)
                                            {
                                                transaccionFactura.Complete();
                                            }
                                        }
                                    }
                                    else
                                    {
                                        resultado = new RetornoOperacion("Los Importes de los Documentos Relacionados, no coinciden con el monto del Pago.", false);
                                    }
                                }
                            }
                            else
                            {
                                resultado = new RetornoOperacion("El Pago no contiene Documentos Relacionados", false);
                            }
                        }
                    }
                    catch
                    {
                        ScriptServer.MuestraNotificacion(this.Page, "No hay Pagos coincidentes", ScriptServer.NaturalezaNotificacion.Error, ScriptServer.PosicionNotificacion.AbajoDerecha);
                    }
                    ScriptServer.MuestraNotificacion(this.Page, resultado.Mensaje, ScriptServer.NaturalezaNotificacion.Error, ScriptServer.PosicionNotificacion.AbajoDerecha);
                    break;
                }
                }
            }
        }