public GeneradorTimbreFiscalDigital(string slotHSM, int llave) { _sellador = new Sellador(slotHSM, llave); if (GeneradorCadenas == null) { GeneradorCadenas = new GeneradorCadenasTimbre(); } if (GeneradorCadenasRetencion == null) { GeneradorCadenasRetencion = new GeneradorCadenasTimbreRetencion(); } }
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); }