Ejemplo n.º 1
0
        private int CancelacionHijos(int comprobanteId, int count, string token)
        {
            Comprobante comprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE FACTURAUUID IS NOT NULL AND ID = {comprobanteId}");
            RespuestaDTOOfListOfRespuestaDTOOfCancelacionDTO lisCancel = new RespuestaDTOOfListOfRespuestaDTOOfCancelacionDTO();
            List <SolicitudCancelacionDTO> cancelacion = new List <SolicitudCancelacionDTO>();

            //Cancelar pagos del padre
            List <PagosDoctoRelacionado> pagosRelacionados = _baseDatos.Select <PagosDoctoRelacionado>($"SELECT * FROM FACTURACION_PAGOSDOCTORELACIONADO WHERE IDDOCUMENTO = '{comprobante.facturaUuid}'");

            if (pagosRelacionados.Count != 0)
            {
                foreach (var row in pagosRelacionados)
                {
                    Pago        pago           = _baseDatos.SelectFirst <Pago>($"SELECT * FROM FACTURACION_PAGO WHERE ID = {row.pagosId}");
                    Comprobante rowComprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE FACTURAUUID IS NOT NULL AND ID = {pago.comprobanteId}");
                    if (rowComprobante != null)
                    {
                        int      count2   = CancelacionHijos(pago.comprobanteId, count, token);
                        Emisor   emisor   = _baseDatos.SelectFirst <Emisor>($"SELECT * FROM FACTURACION_EMISOR WHERE ID = {rowComprobante.emisorId}");
                        Receptor receptor = _baseDatos.SelectFirst <Receptor>($"SELECT * FROM FACTURACION_RECEPTOR WHERE ID = {rowComprobante.receptorId}");
                        cancelacion.Add(new SolicitudCancelacionDTO()
                        {
                            CFDI_UUID   = rowComprobante.facturaUuid,
                            MontoTotal  = Convert.ToDecimal(rowComprobante.total),
                            RFCEmisor   = emisor.rfc,
                            RFCReceptor = receptor.rfc
                        });
                    }
                }
                if (cancelacion.Count != 0)
                {
                    lisCancel = webService.SolicitarCancelacionSUC(cancelacion.ToArray(), token);
                    if (lisCancel.Datos != null)
                    {
                        foreach (var can in cancelacion)
                        {
                            Comprobante rowComprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE FACTURAUUID = '{can.CFDI_UUID}'");
                            _baseDatos.Update($"UPDATE POLIZAS_FACTURACION SET ESTATUSFACTURACIONID = 9 WHERE COMPROBANTEID = {rowComprobante.id}");
                            count++;
                        }
                    }
                }
            }

            //Cancelar egresos
            comprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE FACTURAUUID IS NOT NULL AND ID = {comprobanteId}");
            lisCancel   = new RespuestaDTOOfListOfRespuestaDTOOfCancelacionDTO();
            cancelacion = new List <SolicitudCancelacionDTO>();
            List <CfdiRelacionados> egresosRelacionados = _baseDatos.Select <CfdiRelacionados>($"SELECT * FROM FACTURACION_CFDIRELACIONADOS WHERE TIPORELACIONID = 2 AND UUID = '{comprobante.facturaUuid}'");

            if (egresosRelacionados.Count != 0)
            {
                foreach (var row in egresosRelacionados)
                {
                    Comprobante rowComprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE FACTURAUUID IS NOT NULL AND ID = {row.comprobanteId}");
                    if (rowComprobante != null)
                    {
                        int      count2   = CancelacionHijos(row.comprobanteId, count, token);
                        Emisor   emisor   = _baseDatos.SelectFirst <Emisor>($"SELECT * FROM FACTURACION_EMISOR WHERE ID = {rowComprobante.emisorId}");
                        Receptor receptor = _baseDatos.SelectFirst <Receptor>($"SELECT * FROM FACTURACION_RECEPTOR WHERE ID = {rowComprobante.receptorId}");
                        cancelacion.Add(new SolicitudCancelacionDTO()
                        {
                            CFDI_UUID   = rowComprobante.facturaUuid,
                            MontoTotal  = Convert.ToDecimal(rowComprobante.total),
                            RFCEmisor   = emisor.rfc,
                            RFCReceptor = receptor.rfc
                        });
                    }
                }
                if (cancelacion.Count != 0)
                {
                    lisCancel = webService.SolicitarCancelacionSUC(cancelacion.ToArray(), token);
                    if (lisCancel.Datos != null)
                    {
                        foreach (var can in cancelacion)
                        {
                            Comprobante rowComprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE FACTURAUUID = '{can.CFDI_UUID}'");
                            _baseDatos.Update($"UPDATE POLIZAS_FACTURACION SET ESTATUSFACTURACIONID = 9 WHERE COMPROBANTEID = {rowComprobante.id}");
                            count++;
                        }
                    }
                }
            }

            //Cancelar ingresos
            comprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE FACTURAUUID IS NOT NULL AND ID = {comprobanteId}");
            lisCancel   = new RespuestaDTOOfListOfRespuestaDTOOfCancelacionDTO();
            cancelacion = new List <SolicitudCancelacionDTO>();
            List <CfdiRelacionados> ingresosRelacionados = _baseDatos.Select <CfdiRelacionados>($"SELECT * FROM FACTURACION_CFDIRELACIONADOS WHERE TIPORELACIONID = 1 AND UUID = '{comprobante.facturaUuid}'");

            if (ingresosRelacionados.Count != 0)
            {
                foreach (var row in ingresosRelacionados)
                {
                    Comprobante rowComprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE FACTURAUUID IS NOT NULL AND ID = {row.comprobanteId}");
                    if (rowComprobante != null)
                    {
                        int      count2   = CancelacionHijos(row.comprobanteId, count, token);
                        Emisor   emisor   = _baseDatos.SelectFirst <Emisor>($"SELECT * FROM FACTURACION_EMISOR WHERE ID = {rowComprobante.emisorId}");
                        Receptor receptor = _baseDatos.SelectFirst <Receptor>($"SELECT * FROM FACTURACION_RECEPTOR WHERE ID = {rowComprobante.receptorId}");
                        cancelacion.Add(new SolicitudCancelacionDTO()
                        {
                            CFDI_UUID   = rowComprobante.facturaUuid,
                            MontoTotal  = Convert.ToDecimal(rowComprobante.total),
                            RFCEmisor   = emisor.rfc,
                            RFCReceptor = receptor.rfc
                        });
                    }
                }
                if (cancelacion.Count != 0)
                {
                    lisCancel = webService.SolicitarCancelacionSUC(cancelacion.ToArray(), token);
                    if (lisCancel.Datos != null)
                    {
                        foreach (var can in cancelacion)
                        {
                            Comprobante rowComprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE FACTURAUUID = '{can.CFDI_UUID}'");
                            _baseDatos.Update($"UPDATE POLIZAS_FACTURACION SET ESTATUSFACTURACIONID = 9 WHERE COMPROBANTEID = {rowComprobante.id}");
                            count++;
                        }
                    }
                }
            }

            return(count);
        }
Ejemplo n.º 2
0
        public async Task <GenericResponse> ProcesoCancelacion()
        {
            try
            {
                int  count  = 0;
                bool repeat = true;
                do
                {
                    DboFacturacion padre = _baseDatos.SelectFirst <DboFacturacion>("SELECT * FROM POLIZAS_FACTURACION WHERE POLIZAMADRE = 1 AND TIPOCOMPROBANTE = 'I' AND ESTATUSFACTURACIONID = 3");
                    if (padre != null)
                    {
                        string usuario   = "SUCPSS1119";
                        string password  = "******";
                        string rfcEmisor = "PSS970203FI6";
                        Console.WriteLine("Obteniendo Token");
                        string tokenS   = generartokenSuc(usuario, password, rfcEmisor, alias);
                        int    contador = CancelacionHijos(padre.ComprobanteId, 0, tokenS);
                        count += contador;
                        Comprobante comprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE ID = {padre.ComprobanteId}");
                        Emisor      emisor      = _baseDatos.SelectFirst <Emisor>($"SELECT * FROM FACTURACION_EMISOR WHERE ID = {comprobante.emisorId}");
                        Receptor    receptor    = _baseDatos.SelectFirst <Receptor>($"SELECT * FROM FACTURACION_RECEPTOR WHERE ID = {comprobante.receptorId}");

                        RespuestaDTOOfListOfRespuestaDTOOfCancelacionDTO lisCancel = new RespuestaDTOOfListOfRespuestaDTOOfCancelacionDTO();
                        List <SolicitudCancelacionDTO> cancelacion = new List <SolicitudCancelacionDTO>();

                        cancelacion.Add(new SolicitudCancelacionDTO()
                        {
                            CFDI_UUID   = comprobante.facturaUuid,
                            MontoTotal  = Convert.ToDecimal(comprobante.total),
                            RFCEmisor   = emisor.rfc,
                            RFCReceptor = receptor.rfc
                        });

                        lisCancel = webService.SolicitarCancelacionSUC(cancelacion.ToArray(), tokenS);
                        if (lisCancel.Datos != null)
                        {
                            foreach (var can in cancelacion)
                            {
                                Comprobante rowComprobante = _baseDatos.SelectFirst <Comprobante>($"SELECT * FROM FACTURACION_COMPROBANTE WHERE FACTURAUUID = '{can.CFDI_UUID}'");
                                _baseDatos.Update($"UPDATE POLIZAS_FACTURACION SET ESTATUSFACTURACIONID = 9 WHERE COMPROBANTEID = {rowComprobante.id}");
                                count++;
                            }
                        }
                    }
                    else
                    {
                        repeat = false;
                    }
                } while (repeat == true);

                return(new GenericResponse()
                {
                    Codigo = 1,
                    Mensaje = $"Todo ha salido bien, se han cancelado {count} facturas"
                });
            }
            catch (Exception ex)
            {
                return(new GenericResponse()
                {
                    Codigo = 0,
                    Mensaje = $"Excepción; Método: {this.GetType().FullName}; Mensaje: {ex.Message}"
                });
            }
        }