private void GeneraComprobante() { #region Información del comprobante _comprobante = new Schemasv33modif.Comprobante { Version = "3.3", Serie = _iniFac.Opcional("Generales", "Serie"), Folio = _iniFac.Opcional("Generales", "Folio"), Fecha = _iniFac.RequeridoFecha("Generales", "Fecha"), FormaPago = _iniFac.OpcionalEnum <Schemasv33modif.c_FormaPago>("Generales", "FormaPago"), FormaPagoSpecified = _iniFac.Existe("Generales", "FormaPago"), NoCertificado = _iniFac.Requerido("Generales", "NoCertificado"), CondicionesDePago = _iniFac.Opcional("Generales", "CondicionesDePago"), SubTotal = _iniFac.RequeridoDecimal("Generales", "SubTotal"), Descuento = _iniFac.OpcionalDecimal("Generales", "Descuento"), DescuentoSpecified = _iniFac.Existe("Generales", "Descuento"), Moneda = _iniFac.RequeridoEnum <Schemasv33modif.c_Moneda>("Generales", "Moneda"), TipoCambio = _iniFac.OpcionalDecimal("Generales", "TipoCambio"), TipoCambioSpecified = _iniFac.Existe("Generales", "TipoCambio"), Total = _iniFac.RequeridoDecimal("Generales", "Total"), TipoDeComprobante = _iniFac.RequeridoEnum <Schemasv33modif.c_TipoDeComprobante>( "Generales", "TipoDeComprobante"), MetodoPago = _iniFac.OpcionalEnum <Schemasv33modif.c_MetodoPago>("Generales", "MetodoPago"), MetodoPagoSpecified = _iniFac.Existe("Generales", "MetodoPago"), //LugarExpedicion = _iniFac.RequeridoEnum<Schemasv33modif.c_CodigoPostal>("Generales", "LugarExpedicion"), LugarExpedicion = _iniFac.Requerido("Generales", "LugarExpedicion"), Confirmacion = _iniFac.Opcional("Generales", "Confirmacion") }; #endregion #region Cfdi Relacionados int CantidadCfdiRelacionados = Convert.ToInt32(_iniFac.Requerido("CfdiRelacionados", "CantidadCfdiRelacionados")); if (CantidadCfdiRelacionados > 0) { _comprobante.CfdiRelacionados = new Schemasv33modif.ComprobanteCfdiRelacionados { CfdiRelacionado = GetCfdiRelacionados(_iniFac, CantidadCfdiRelacionados), TipoRelacion = _iniFac.RequeridoEnum <Schemasv33modif.c_TipoRelacion>("CfdiRelacionados", "TipoRelacion") }; } #endregion #region Emisor _comprobante.Emisor = new Schemasv33modif.ComprobanteEmisor { Rfc = _iniFac.Requerido("Emisor", "Rfc"), Nombre = _iniFac.Opcional("Emisor", "Nombre"), RegimenFiscal = _iniFac.RequeridoEnum <Schemasv33modif.c_RegimenFiscal>("Emisor", "RegimenFiscal") }; #endregion #region Receptor _comprobante.Receptor = new Schemasv33modif.ComprobanteReceptor { Rfc = _iniFac.Requerido("Receptor", "Rfc"), Nombre = _iniFac.Opcional("Receptor", "Nombre"), ResidenciaFiscal = _iniFac.OpcionalEnum <Schemasv33modif.c_Pais>("Receptor", "ResidenciaFiscal"), // Requerido si se incluye Compl ComercExt ResidenciaFiscalSpecified = _iniFac.Existe("Receptor", "ResidenciaFiscal"), NumRegIdTrib = _iniFac.Opcional("Receptor", "NumRegIdTrib"), // Requerido si se incluye Compl ComercExt UsoCFDI = _iniFac.RequeridoEnum <Schemasv33modif.c_UsoCFDI>("Receptor", "UsoCFDI") }; #endregion #region Conceptos int CantidadConceptos = Convert.ToInt32(_iniFac.Requerido("Conceptos", "CantidadConceptos")); _comprobante.Conceptos = new Schemasv33modif.ComprobanteConcepto[CantidadConceptos]; for (int i = 0; i < CantidadConceptos; i++) { string conceptoSection = String.Format("Concepto{0}", (i + 1)); _comprobante.Conceptos[i] = new Schemasv33modif.ComprobanteConcepto { Impuestos = GetConceptoImpuestos(_iniFac, conceptoSection), InformacionAduanera = GetInformacionAduanera(_iniFac, conceptoSection), Parte = GetConceptoPartes(_iniFac, conceptoSection), //ClaveProdServ = _iniFac.RequeridoEnum<Schemasv33modif.c_ClaveProdServ>(conceptoSection, "ClaveProdServ"), ClaveProdServ = _iniFac.Requerido(conceptoSection, "ClaveProdServ"), NoIdentificacion = _iniFac.Opcional(conceptoSection, "NoIdentificacion"), // CodBarras o SKU o similar Cantidad = _iniFac.RequeridoDecimal(conceptoSection, "Cantidad"), ClaveUnidad = _iniFac.RequeridoEnum <Schemasv33modif.c_ClaveUnidad>(conceptoSection, "ClaveUnidad"), Unidad = _iniFac.Opcional(conceptoSection, "Unidad"), Descripcion = _iniFac.Requerido(conceptoSection, "Descripcion"), ValorUnitario = _iniFac.RequeridoDecimal(conceptoSection, "ValorUnitario"), Importe = _iniFac.RequeridoDecimal(conceptoSection, "Importe"), Descuento = _iniFac.OpcionalDecimal(conceptoSection, "Descuento"), DescuentoSpecified = _iniFac.Existe(conceptoSection, "Descuento") }; } #endregion #region Impuestos int cantidadTraslados = Convert.ToInt32(_iniFac.Requerido("Impuestos", "CantidadTraslados")); int cantidadRetenciones = Convert.ToInt32(_iniFac.Requerido("Impuestos", "CantidadRetenciones")); if (cantidadRetenciones > 0 || cantidadTraslados > 0) { _comprobante.Impuestos = new Schemasv33modif.ComprobanteImpuestos { Retenciones = GetImpuestosRetencion(_iniFac, "Impuestos"), Traslados = GetImpuestosTraslado(_iniFac, "Impuestos"), TotalImpuestosRetenidos = _iniFac.OpcionalDecimal("Impuestos", "TotalImpuestosRetenidos"), TotalImpuestosRetenidosSpecified = _iniFac.Existe("Impuestos", "TotalImpuestosRetenidos"), TotalImpuestosTrasladados = _iniFac.OpcionalDecimal("Impuestos", "TotalImpuestosTrasladados"), TotalImpuestosTrasladadosSpecified = _iniFac.Existe("Impuestos", "TotalImpuestosTrasladados") }; } #endregion }
Schemasv33modif.ComprobanteConceptoImpuestos GetConceptoImpuestos(IniFileHandler iniHandler, string seccion) { int cantidadTraslados = Convert.ToInt32(iniHandler.Requerido(seccion, "CantidadTraslados")); int cantidadRetenciones = Convert.ToInt32(iniHandler.Requerido(seccion, "CantidadRetenciones")); if (cantidadRetenciones == 0 && cantidadTraslados == 0) { return(null); } Schemasv33modif.ComprobanteConceptoImpuestosTraslado[] traslados = new Schemasv33modif.ComprobanteConceptoImpuestosTraslado[cantidadTraslados]; Schemasv33modif.ComprobanteConceptoImpuestosRetencion[] retenciones = new Schemasv33modif.ComprobanteConceptoImpuestosRetencion[cantidadRetenciones]; if (cantidadTraslados > 0) { for (int i = 0; i < cantidadTraslados; i++) { string baseSection = String.Format("ImpuestosTraslado{0}Base", (i + 1)); string impuestoSection = String.Format("ImpuestosTraslado{0}Impuesto", (i + 1)); string tipoFactorSection = String.Format("ImpuestosTraslado{0}TipoFactor", (i + 1)); string tasaOCuotaSection = String.Format("ImpuestosTraslado{0}TasaOCuota", (i + 1)); string importeSection = String.Format("ImpuestosTraslado{0}Importe", (i + 1)); traslados[i] = new Schemasv33modif.ComprobanteConceptoImpuestosTraslado { Base = iniHandler.RequeridoDecimal(seccion, baseSection), Impuesto = iniHandler.RequeridoEnum <Schemasv33modif.c_Impuesto>(seccion, impuestoSection), TipoFactor = iniHandler.RequeridoEnum <Schemasv33modif.c_TipoFactor>(seccion, tipoFactorSection), TasaOCuota = iniHandler.OpcionalEnum <Schemasv33modif.c_TasaOCuota>(seccion, tasaOCuotaSection), TasaOCuotaSpecified = iniHandler.Existe(seccion, tasaOCuotaSection), Importe = iniHandler.OpcionalDecimal(seccion, importeSection), ImporteSpecified = iniHandler.Existe(seccion, importeSection) }; } } else { traslados = null; } if (cantidadRetenciones > 0) { for (int i = 0; i < cantidadRetenciones; i++) { string baseSection = String.Format("ImpuestosRetencion{0}Base", (i + 1)); string impuestoSection = String.Format("ImpuestosRetencion{0}Impuesto", (i + 1)); string tipoFactorSection = String.Format("ImpuestosRetencion{0}TipoFactor", (i + 1)); string tasaOCuotaSection = String.Format("ImpuestosRetencion{0}TasaOCuota", (i + 1)); string importeSection = String.Format("ImpuestosRetencion{0}Importe", (i + 1)); retenciones[i] = new Schemasv33modif.ComprobanteConceptoImpuestosRetencion { Base = iniHandler.RequeridoDecimal(seccion, baseSection), Impuesto = iniHandler.RequeridoEnum <Schemasv33modif.c_Impuesto>(seccion, impuestoSection), TipoFactor = iniHandler.RequeridoEnum <Schemasv33modif.c_TipoFactor>(seccion, tipoFactorSection), TasaOCuota = iniHandler.OpcionalDecimal(seccion, tasaOCuotaSection), Importe = iniHandler.OpcionalDecimal(seccion, importeSection) }; } } else { retenciones = null; } Schemasv33modif.ComprobanteConceptoImpuestos result = new Schemasv33modif.ComprobanteConceptoImpuestos { Traslados = traslados, Retenciones = retenciones }; return(result); }