示例#1
0
        public static List <cfdi33.ComprobanteConcepto> TranslateConceptos(List <BindingModels.Concepto> from)
        {
            List <cfdi33.ComprobanteConcepto> to = new List <cfdi33.ComprobanteConcepto>();

            foreach (var item in from)
            {
                List <cfdi33.ComprobanteConceptoImpuestosRetencion> Retenciones = new List <cfdi33.ComprobanteConceptoImpuestosRetencion>();
                List <cfdi33.ComprobanteConceptoImpuestosTraslado>  Traslados   = new List <cfdi33.ComprobanteConceptoImpuestosTraslado>();

                if (item.ConceptosImpuestos != null)
                {
                    if (item.ConceptosImpuestos.Count > 0)
                    {
                        foreach (var itemImpuesto in item.ConceptosImpuestos)
                        {
                            if (itemImpuesto.RetencionOTraslado == "Retencion")
                            {
                                Retenciones.Add(TranslateModelImpuestosToCFDI.TranslateConceptoImpuestoRetencion(itemImpuesto));
                            }
                            else if (itemImpuesto.RetencionOTraslado == "Traslado")
                            {
                                Traslados.Add(TranslateModelImpuestosToCFDI.TranslateConceptoImpuestoTraslado(itemImpuesto));
                            }
                            else
                            {
                                throw new InvalidCastException("Tipo de impuesto no definido / soportado");
                            }
                        }
                    }
                }

                cfdi33.ComprobanteConceptoImpuestos listaImpuestos = null;

                if (Retenciones.Count > 0 || Traslados.Count > 0)
                {
                    listaImpuestos = new cfdi33.ComprobanteConceptoImpuestos()
                    {
                        Retenciones = (Retenciones.Count > 0 ? Retenciones.ToArray() : null),
                        Traslados   = (Traslados.Count > 0 ? Traslados.ToArray() : null)
                    };
                }

                cfdi33.ComprobanteConcepto concepto = new cfdi33.ComprobanteConcepto()
                {
                    Cantidad         = item.Cantidad,
                    ClaveProdServ    = item.ClaveProductoServicio, //TranslateModelsToCatalogosCFDI.TranslateClaveProdServ(item.ClaveProductoServicio),
                    ClaveUnidad      = TranslateModelsToCatalogosCFDI.TranslateClaveUnidad(item.ClaveUnidad),
                    Descripcion      = item.Descripcion,
                    Importe          = item.Importe,
                    NoIdentificacion = item.noIdentificador,
                    Unidad           = item.Unidad,
                    ValorUnitario    = item.ValorUnitario,
                    Impuestos        = listaImpuestos
                };
                to.Add(concepto);
            }
            return(to);
        }
        public static cfdi33.Comprobante TranslateToCFDI(BindingModels.Comprobante from)
        {
            bool MetodoPagoSpecified = false;
            bool formaPagoSpecified  = false;

            var cfdi33 = new cfdi33.Comprobante()
            {
                // TODO: revisar si se aplican descuento,
                Emisor = new Invoicing.cfdi33.ComprobanteEmisor()
                {
                    Rfc           = from.Emisor.RFC,
                    RegimenFiscal = TranslateModelsToCatalogosCFDI.TranslateRegimenFiscal(from.Emisor.RegimenFiscal),
                    Nombre        = from.Emisor.Nombre
                },
                Receptor = new Invoicing.cfdi33.ComprobanteReceptor()
                {
                    Rfc     = from.Receptor.RFC,
                    Nombre  = from.Receptor.Nombre,
                    UsoCFDI = TranslateModelsToCatalogosCFDI.TranslateUsoCFDI(from.UsoCFDI),
                    ResidenciaFiscalSpecified = false
                                                // TODO : Revisar si se implementa la resencia fiscal y el No. de registro tributario para extranjeros
                },
                Complemento = new Invoicing.cfdi33.ComprobanteComplemento()
                {
                    Items = new object[] { TranslateModelsValesDeDespensa.TranslateTo(from.ValesDespensa), TranslatesModelsToPagos.TranslateTo((from).Pagos) }
                },
                Impuestos                  = TranslateModelsToTotalImpuestos.TranslateCuadroImpuesto(from.Conceptos),
                Conceptos                  = TranslateModelConceptosToCFDI.TranslateConceptos(from.Conceptos).ToArray(),
                LugarExpedicion            = from.LugarExpedicion, // TranslateModelsToCatalogosCFDI.TranslateCodigoPostal(from.LugarExpedicion),
                TipoDeComprobante          = TranslateModelsToCatalogosCFDI.TranslateTipoComprobante(from.TipoComprobante),
                FormaPago                  = TranslateModelsToCatalogosCFDI.TranslateFormaPago(from.FormaPago, ref formaPagoSpecified),
                FormaPagoSpecified         = formaPagoSpecified,
                Certificado                = from.Certificado,
                NoCertificado              = from.noCertificado,
                CondicionesDePago          = from.CondicionesDePago,
                CondicionesDePagoSpecified = !String.IsNullOrEmpty(from.CondicionesDePago),
                Serie               = from.Serie,
                Folio               = from.Folio,
                Moneda              = TranslateModelsToCatalogosCFDI.TranslateMoneda(from.Moneda),
                MetodoPago          = TranslateModelsToCatalogosCFDI.TranslateMetodoPago(from.MetodoPago, ref MetodoPagoSpecified),
                MetodoPagoSpecified = MetodoPagoSpecified,
                Version             = "3.3",
                SubTotal            = from.SubTotal,
                Total               = from.Total,
                Fecha               = TranslateModelsToCatalogosCFDI.TranslateFecha(from.Fecha),
            };

            return(cfdi33);
        }
        public static cfdi33.PagosPagoDoctoRelacionado TranslateToDoctosRelacionados(BindingModels.DoctosRelacionados from)
        {
            bool MetodoPagoSpecified = false;

            var to = new cfdi33.PagosPagoDoctoRelacionado()
            {
                Folio                     = from.Folio.ToString(),
                Serie                     = from.Serie,
                IdDocumento               = from.idDocumento.ToString(),
                MonedaDR                  = TranslateModelsToCatalogosCFDI.TranslateMoneda(from.MonedaDR),
                NumParcialidad            = from.NumParcialidad.ToString(),
                TipoCambioDR              = from.TipoCambioDR,
                TipoCambioDRSpecified     = (from.TipoCambioDR > 0),
                MetodoDePagoDR            = TranslateModelsToCatalogosCFDI.TranslateMetodoPago(from.MetodoDePagoDR, ref MetodoPagoSpecified),
                ImpPagado                 = from.ImpPagado,
                ImpPagadoSpecified        = (from.ImpPagado > 0),
                ImpSaldoAnt               = from.ImpSaldoAnt,
                ImpSaldoAntSpecified      = (from.ImpSaldoAnt > 0),
                ImpSaldoInsoluto          = from.ImpSaldoInsoluto,
                ImpSaldoInsolutoSpecified = (from.ImpSaldoInsoluto > 0)
            };

            return(to);
        }
        public static cfdi33.PagosPago TranslateToPago(BindingModels.Pago from)
        {
            bool formaPagoSpecified = false;

            byte[] certPago  = null;
            byte[] selloPago = null;


            if (!String.IsNullOrEmpty(from.CertPago))
            {
                certPago = Encoding.ASCII.GetBytes(from.CertPago);
            }
            if (!String.IsNullOrEmpty(from.SelloPago))
            {
                selloPago = Encoding.ASCII.GetBytes(from.SelloPago);
            }

            var listaDoctosRelacionados = new List <PagosPagoDoctoRelacionado>();

            if (from.ListaDocumentos != null)
            {
                foreach (var item in from.ListaDocumentos)
                {
                    listaDoctosRelacionados.Add(TranslateToDoctosRelacionados(item));
                }
            }
            else
            {
                throw new Exception("No existen facturas relacionadas con el pago");
            }

            var to = new cfdi33.PagosPago()
            {
                FechaPago            = TranslateModelsToCatalogosCFDI.TranslateFecha(from.FechaPago.LocalDateTime), // from.FechaPago.LocalDateTime,
                MonedaP              = TranslateModelsToCatalogosCFDI.TranslateMoneda(from.MonedaP),
                FormaDePagoP         = TranslateModelsToCatalogosCFDI.TranslateFormaPago(from.FormaDePagoP, ref formaPagoSpecified),
                Monto                = from.Monto,
                CtaBeneficiario      = from.CtaBeneficiario,
                CadPago              = from.CadPago,
                CertPago             = certPago,
                CtaOrdenante         = from.CtaOrdenante,
                NomBancoOrdExt       = from.NomBancoOrdExt,
                NumOperacion         = from.NumOperation,
                RfcEmisorCtaBen      = from.RfcEmisorCtaBen,
                RfcEmisorCtaOrd      = from.RfcEmisorCtaOrd,
                SelloPago            = selloPago,
                TipoCadPagoSpecified = !String.IsNullOrEmpty(from.TipoCadPago),
                TipoCambioP          = from.TipoCambioP,
                TipoCambioPSpecified = (from.TipoCambioP > 0),
                DoctoRelacionado     = listaDoctosRelacionados.ToArray()
                                       // Impuestos = from.ListaImpuestos
            };

            var TipoCadPago = TranslateModelsToCatalogosCFDI.TranslateToCadenaPago(from.TipoCadPago, out bool isNullValue);

            if (!isNullValue)
            {
                to.TipoCadPago = TipoCadPago;
            }
            return(to);
        }