/// <summary> /// Devuleve el primer Comprobante encontrado como sustituido por el CFDI proporcionado /// </summary> /// <param name="id_comprobante">Id de Comprobante a consultar (CFDI activo que sustituye a otro)</param> /// <returns></returns> public static Comprobante ObtenerCFDISustituido(int id_comprobante) { //Declarando objto de retorno Comprobante cfdiSustituido = new Comprobante(); //Recuperando lista de relaciones using (DataTable mit = ObtieneRelacionesComprobante(id_comprobante)) { //Si hay elementos if (mit != null) { //Localizando el tipo de relación deseado ComprobanteRelacion relacion = new ComprobanteRelacion((from DataRow r in mit.Rows where r.Field <string>("TipoRelacion") == "04" select r.Field <int>("Id")).DefaultIfEmpty(0).First()); //Si hay una relación if (relacion.habilitar) { cfdiSustituido = new Comprobante(relacion.id_comprobante_relacionado); } } } //Devolviendo resutado return(cfdiSustituido); }
/// <summary> /// Método encargado de Configurar las Relaciones de los Comprobantes en base al Comprobante Vigente Actual /// </summary> /// <param name="id_factura_global">Factura Global</param> /// <param name="id_cfdi_33">Comprobante Nuevo v3.3</param> /// <param name="id_usuario">Usuario que actualiza el Registro</param> /// <returns></returns> public static RetornoOperacion ConfiguraRelacionComprobanteCancelacionFacturaGlobal(int id_factura_global, int id_cfdi_33, int id_usuario) { //Declarando Objeto de Retorno RetornoOperacion result = new RetornoOperacion(); //Inicializando Bloque Transaccional using (TransactionScope scope = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted)) { //Obteniendo Factura Electronica Cancelada int idFE33Cancelada = FacturadoFacturacion.ObtieneFacturaElectronicaFacturaGlobalCanceladaV3_3(id_factura_global); //Validando existencia de una Cancelación Previa if (idFE33Cancelada > 0) { //Obteniendo Relaciones del Comprobante Cancelado using (DataTable dtRelaciones = ComprobanteRelacion.ObtieneRelacionesComprobante(idFE33Cancelada)) { //Validando Relaciones if (Validacion.ValidaOrigenDatos(dtRelaciones)) { //Recorriendo Relaciones foreach (DataRow dr in dtRelaciones.Rows) { //Instanciando Relación using (ComprobanteRelacion cr = new ComprobanteRelacion(Convert.ToInt32(dr["Id"]))) { //Validando Relación if (cr.habilitar) { //Actualizando Comprobante result = cr.EditaComprobanteRelacion(id_cfdi_33, cr.id_comprobante_relacionado, cr.id_tipo_relacion, cr.secuencia_relacion, cr.id_aplicacion, id_usuario); } else { //Instanciando Excepción result = new RetornoOperacion("No se puede recuperar la Relación"); } //Validando Operación if (!result.OperacionExitosa) { //Terminando Ciclo break; } } } } else { //Instanciando Resultado Positivo result = new RetornoOperacion(0, "No existe ninguna relación previa", true); } //Validando Operación Exitosa if (result.OperacionExitosa) { //Insertando Nueva Relación de Cancelación result = ComprobanteRelacion.InsertaComprobanteRelacion(id_cfdi_33, idFE33Cancelada, 4, 0, 0, id_usuario); } } } else { //Instanciando Resultado Positivo result = new RetornoOperacion(0, "No existe ninguna cancelación previa", true); } //Validando Operación Exitosa if (result.OperacionExitosa) { //Completando transacción scope.Complete(); } } //Devolviendo Resultado Obtenido return(result); }