public GeneradorTimbreFiscalDigital(string slotHSM, int llave)
 {
     _sellador = new Sellador(slotHSM, llave);
     if (GeneradorCadenas == null)
     {
         GeneradorCadenas = new GeneradorCadenasTimbre();
     }
     if (GeneradorCadenasRetencion == null)
     {
         GeneradorCadenasRetencion = new GeneradorCadenasTimbreRetencion();
     }
 }
示例#2
0
        public Boolean GenerarPreCFDI(out String CFDI, out List <String> Errores, bool Local = false)
        {
            Boolean Resultado = false;

            CFDI    = String.Empty;
            Errores = new List <string>();

            if (ContenidoCertificado != null)
            {
                String XML   = String.Empty;
                String error = String.Empty;
                Sello = "#SELLO#";
                decimal TotalTrasladosConceptos = 0;
                Conceptos.ForEach(Concepto =>
                {
                    if (Concepto.Impuestos != null)
                    {
                        if (Concepto.Impuestos.Traslados != null)
                        {
                            Concepto.Impuestos.Traslados.ForEach(X => TotalTrasladosConceptos += X.Importe.Valor);
                        }
                    }
                });

                if (TotalTrasladosConceptos != Impuestos.TotalImpuestosTrasladados.Valor)
                {
                    Errores.Add("El total de impuestos trasladados no coincide con la suma de los impuestos por concepto trasladado");
                }

                decimal TotalRetencionesConceptos = 0;
                Conceptos.ForEach(Concepto =>
                {
                    if (Concepto.Impuestos != null)
                    {
                        if (Concepto.Impuestos.Retenciones != null)
                        {
                            Concepto.Impuestos.Retenciones.ForEach(X => TotalRetencionesConceptos += X.Importe.Valor);
                        }
                    }
                });

                if (Impuestos.TotalImpuestosRetenidos != null)
                {
                    if (TotalRetencionesConceptos != Impuestos.TotalImpuestosRetenidos.Valor)
                    {
                        Errores.Add("El total de impuestos retenidos no coincide con la suma de los impuestos por concepto retenidos");
                    }
                }


                if (GenerarXML(out XML, out error))
                {
                    if (GenerarCadenaOriginalCFDI(XML, out Errores, Local))
                    {
                        Sellador sellador = new Sellador(_Contenidocertificado);
                        if (sellador.SellarXML(CadenaOriginal, out _sello, out Errores))
                        {
                            Sello = _sello;
                            CFDI  = XML.Replace("#SELLO#", _sello);
                            return(true);
                        }
                    }
                    else
                    {
                        Errores.Add("Error al generar la cadena original Error: " + error);
                    }
                }
                else
                {
                    Errores.Add("Error al generar el XML Error: " + error);
                }
            }
            else
            {
                Errores.Add("Se debe de agregar un certificado para poder sellar el comprobante");
            }

            return(Resultado);
        }