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.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); }