예제 #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);
        }
예제 #2
0
        public static cfdi33.ComprobanteImpuestos TranslateCuadroImpuesto(List <BindingModels.Concepto> from)
        {
            decimal TotalRetenciones = 0;
            decimal TotalTraslados   = 0;

            var listaRetenciones = new List <cfdi33.ComprobanteImpuestosRetencion>();
            var listaTranslados  = new List <cfdi33.ComprobanteImpuestosTraslado>();

            foreach (var item in from)
            {
                if (item.ConceptosImpuestos != null)
                {
                    if (item.ConceptosImpuestos.Count > 0)
                    {
                        foreach (var itemImpuesto in item.ConceptosImpuestos)
                        {
                            if (itemImpuesto.RetencionOTraslado == "Retencion")
                            {
                                var ItemImpuesto = TranslateModelImpuestosToCFDI.TranslateConceptoImpuestoRetencion(itemImpuesto);
                                TotalRetenciones += itemImpuesto.Importe;
                                var result = listaRetenciones.Where(o => o.Impuesto == TranslateModelImpuestosToCFDI.TranslateImpuesto(itemImpuesto.Impuesto));
                                if (result.Count() > 0)
                                {
                                    result.FirstOrDefault().Importe += itemImpuesto.Importe;
                                }
                                else
                                {
                                    listaRetenciones.Add(
                                        new cfdi33.ComprobanteImpuestosRetencion()
                                    {
                                        Importe  = itemImpuesto.Importe,
                                        Impuesto = TranslateModelImpuestosToCFDI.TranslateImpuesto(itemImpuesto.Impuesto)
                                    });
                                }
                            }
                            else if (itemImpuesto.RetencionOTraslado == "Traslado")
                            {
                                var ItemImpuesto = TranslateModelImpuestosToCFDI.TranslateConceptoImpuestoTraslado(itemImpuesto);
                                TotalTraslados += itemImpuesto.Importe;
                                var result = listaTranslados.Where(o => o.Impuesto == TranslateModelImpuestosToCFDI.TranslateImpuesto(itemImpuesto.Impuesto));
                                if (result.Count() > 0)
                                {
                                    result.FirstOrDefault().Importe += itemImpuesto.Importe;
                                }
                                else
                                {
                                    listaTranslados.Add(
                                        new cfdi33.ComprobanteImpuestosTraslado()
                                    {
                                        Importe    = itemImpuesto.Importe,
                                        TasaOCuota = TranslateModelImpuestosToCFDI.TranslateTasaOCuotaTraslado(itemImpuesto.TasaOCuota),
                                        Impuesto   = TranslateModelImpuestosToCFDI.TranslateImpuesto(itemImpuesto.Impuesto),
                                        TipoFactor = TranslateModelImpuestosToCFDI.TranslateTipoFactor(itemImpuesto.TipoFactor)
                                    });
                                }
                            }
                            else
                            {
                                throw new InvalidCastException("Tipo de impuesto no definido / soportado");
                            }
                        }
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }
            }
            cfdi33.ComprobanteImpuestos To = new cfdi33.ComprobanteImpuestos()
            {
                TotalImpuestosRetenidos            = TotalRetenciones,
                TotalImpuestosTrasladados          = TotalTraslados,
                TotalImpuestosTrasladadosSpecified = (listaTranslados.Count > 0 ? true : false),
                TotalImpuestosRetenidosSpecified   = (listaRetenciones.Count > 0 ? true : false),
                Retenciones = (listaRetenciones.Count > 0?listaRetenciones.ToArray():null),
                Traslados   = (listaTranslados.Count > 0 ? listaTranslados.ToArray() : null)
            };
            return(To);
        }