Пример #1
0
        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
        }
Пример #2
0
        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);
        }