Exemplo n.º 1
0
        static Mictlanix.CFDv32.Comprobante InvoiceToCFDv32(FiscalDocument item)
        {
            var cer = item.Issuer.Certificates.SingleOrDefault (x => x.Id == item.IssuerCertificateNumber);
            var cfd = new CFDv32.Comprobante {
                tipoDeComprobante = (Mictlanix.CFDv32.ComprobanteTipoDeComprobante)FDT2TDC (item.Type),
                noCertificado = item.IssuerCertificateNumber.PadLeft (20, '0'),
                serie = item.Batch,
                folio = item.Serial.ToString (),
                fecha = item.Issued.GetValueOrDefault (),
                metodoDePago = item.PaymentMethod == PaymentMethod.NA ? item.PaymentMethod.GetDisplayName() : string.Format("{0:D2}", (int) item.PaymentMethod),
                NumCtaPago = item.PaymentReference,
                LugarExpedicion = item.IssuedLocation,
                subTotal = item.Subtotal,
                total = item.Total,
                Moneda = item.Currency.GetDisplayName (),
                TipoCambio = item.FormattedValueFor (x => x.ExchangeRate),
                sello = item.IssuerDigitalSeal,
                formaDePago = Resources.SinglePayment,
                certificado = (cer == null ? null : SecurityHelpers.EncodeBase64 (cer.CertificateData)),
                Emisor = new Mictlanix.CFDv32.ComprobanteEmisor {
                    rfc = item.Issuer.Id,
                    nombre = item.IssuerName,
                    RegimenFiscal = new Mictlanix.CFDv32.ComprobanteEmisorRegimenFiscal [1] {
                        new Mictlanix.CFDv32.ComprobanteEmisorRegimenFiscal {
                            Regimen = item.IssuerRegime
                        }
                    },
                    DomicilioFiscal = (item.IssuerAddress == null) ? null : new Mictlanix.CFDv32.t_UbicacionFiscal {
                        calle = item.IssuerAddress.Street,
                        noExterior = item.IssuerAddress.ExteriorNumber,
                        noInterior = item.IssuerAddress.InteriorNumber,
                        colonia = item.IssuerAddress.Neighborhood,
                        codigoPostal = item.IssuerAddress.PostalCode,
                        localidad = item.IssuerAddress.Locality,
                        municipio = item.IssuerAddress.Borough,
                        estado = item.IssuerAddress.State,
                        pais = item.IssuerAddress.Country
                    },
                    ExpedidoEn = (item.IssuedAt == null) ? null : new Mictlanix.CFDv32.t_Ubicacion {
                        calle = item.IssuedAt.Street,
                        noExterior = item.IssuedAt.ExteriorNumber,
                        noInterior = item.IssuedAt.InteriorNumber,
                        colonia = item.IssuedAt.Neighborhood,
                        codigoPostal = item.IssuedAt.PostalCode,
                        localidad = item.IssuedAt.Locality,
                        municipio = item.IssuedAt.Borough,
                        estado = item.IssuedAt.State,
                        pais = item.IssuedAt.Country
                    }
                },
                Receptor = new Mictlanix.CFDv32.ComprobanteReceptor {
                    rfc = item.Recipient,
                    nombre = item.RecipientName,
                    Domicilio = (item.RecipientAddress == null) ? null : new Mictlanix.CFDv32.t_Ubicacion {
                        calle = item.RecipientAddress.Street,
                        noExterior = item.RecipientAddress.ExteriorNumber,
                        noInterior = item.RecipientAddress.InteriorNumber,
                        colonia = item.RecipientAddress.Neighborhood,
                        codigoPostal = item.RecipientAddress.PostalCode,
                        localidad = item.RecipientAddress.Locality,
                        municipio = item.RecipientAddress.Borough,
                        estado = item.RecipientAddress.State,
                        pais = item.RecipientAddress.Country
                    }
                },
                Conceptos = new Mictlanix.CFDv32.ComprobanteConcepto [item.Details.Count],
                Impuestos = new Mictlanix.CFDv32.ComprobanteImpuestos {
                    Traslados = new Mictlanix.CFDv32.ComprobanteImpuestosTraslado [1]
                }
            };

            int i = 0;
            foreach (var detail in item.Details) {
                cfd.Conceptos [i++] = new Mictlanix.CFDv32.ComprobanteConcepto {
                    cantidad = detail.Quantity,
                    unidad = detail.UnitOfMeasurement,
                    noIdentificacion = detail.ProductCode,
                    descripcion = detail.ProductName,
                    valorUnitario = detail.NetPrice,
                    importe = detail.Subtotal
                };
            }

            // TODO: VAT Summaries
            cfd.Impuestos.Traslados [0] = new Mictlanix.CFDv32.ComprobanteImpuestosTraslado {
                impuesto = Mictlanix.CFDv32.ComprobanteImpuestosTrasladoImpuesto.IVA,
                importe = item.Taxes,
                tasa = WebConfig.DefaultVAT * 100m
            };

            cfd.Impuestos.totalImpuestosTrasladados = cfd.Impuestos.Traslados.Sum (x => x.importe);
            cfd.Impuestos.totalImpuestosTrasladadosSpecified = true;

            if (item.RetentionRate > 0m) {
                cfd.Impuestos.Retenciones = new Mictlanix.CFDv32.ComprobanteImpuestosRetencion[] {
                    new Mictlanix.CFDv32.ComprobanteImpuestosRetencion {
                        impuesto = Mictlanix.CFDv32.ComprobanteImpuestosRetencionImpuesto.IVA,
                        importe = item.RetentionTaxes
                    }
                };

                cfd.Impuestos.totalImpuestosRetenidos = cfd.Impuestos.Retenciones.Sum (x => x.importe);
                cfd.Impuestos.totalImpuestosRetenidosSpecified = true;
            }

            return cfd;
        }