using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ADSNetLibrary.PacsTimbrado.SAT { [Serializable] public class CFDITimbre { private StringBuilder StrMsg; public CFDIComprobante Comprobante { get; set; } public CFDIRelacionados CFDIRelacionados { get; set; } public CFDIEmisor Emisor { get; set; } public CFDIReceptor Receptor { get; set; } public List Conceptos { get; set; } public List RetencionesLocales { get; set; } public List TrasladosLocales { get; set; } public CFDINomina Nomina { get; set; } public CFDIComplementoPagos ComplementoPagos { get; set; } public CFDIComplementos Complementos { get; set; } public decimal TotalImpuestosRetenidos { get { return (from c in Conceptos select c.Impuestos.Where(ret => ret.TrasladooRetencion == "R").Sum(ret => ret.Importe)).Sum(); } } public decimal TotalImpuestosTrasladados { get { return (from c in Conceptos select c.Impuestos.Where(tra => tra.TrasladooRetencion == "T").Sum(tra => tra.Importe)).Sum(); } } public List Retenciones { get { List tRetorno = new List(); List TRetenciones = new List(); // Dim RetencionIVA As Decimal = 0 // Dim RetencionIEPS As Decimal = 0 // Dim RetencionISR As Decimal = 0 foreach (CFDIConceptos c in Conceptos) { foreach (CFDIConceptosImpuestos imp in c.Impuestos) { if (imp.TrasladooRetencion == "R") tRetorno.Add(new CFDIRetenciones() { Impuesto = imp.Impuesto, Importe = imp.Importe }); } } if (tRetorno.Count > 0) TRetenciones = tRetorno.GroupBy(t => new { t.Impuesto }) .Select(t => new CFDIRetenciones() { Impuesto = t.Key.Impuesto, Importe = t.Sum(tt => tt.Importe) }) .OrderBy(x => x.Impuesto).ToList(); // If RetencionISR > 0 Then Retorno.Add(New CFDIRetenciones With {.Impuesto = "001", .Importe = RetencionISR}) // if RetencionIVA > 0 Then Retorno.Add(New CFDIRetenciones With {.Impuesto = "002", .Importe = RetencionIVA}) // If RetencionIEPS > 0 Then Retorno.Add(New CFDIRetenciones With {.Impuesto = "003", .Importe = RetencionIEPS}) tRetorno = null; return TRetenciones; } } public List Traslados { get { List tRetorno = new List(); List TTraslados = new List(); foreach (CFDIConceptos c in Conceptos) { foreach (CFDIConceptosImpuestos imp in c.Impuestos) { if (imp.TrasladooRetencion == "T") tRetorno.Add(new CFDITraslados() { Impuesto = imp.Impuesto, Importe = imp.Importe, TasaOCuota = imp.TasaOCuota, TipoFactor = imp.TipoFactor }); } } // ya generado todos los registros posibles, los agrupo y los sumo if (tRetorno.Count > 0) TTraslados = tRetorno.GroupBy(t => new { t.TipoFactor, t.Impuesto, t.TasaOCuota }) .Select(t => new CFDITraslados() { Impuesto = t.Key.Impuesto, TipoFactor = t.Key.TipoFactor, TasaOCuota = t.Key.TasaOCuota, Importe = t.Sum(tt => tt.Importe) }) .OrderBy(x => x.Impuesto).ToList(); tRetorno = null; return TTraslados; } } public string Mensaje { get { return StrMsg.ToString(); } } public CFDITimbre() { StrMsg = new StringBuilder(); Comprobante = new CFDIComprobante(); CFDIRelacionados = new CFDIRelacionados(); Conceptos = new List(); Emisor = new CFDIEmisor(); Receptor = new CFDIReceptor(); RetencionesLocales = new List(); TrasladosLocales = new List(); ComplementoPagos = new CFDIComplementoPagos(); Complementos = new CFDIComplementos(); } public void AddMsg(string Msg) { StrMsg.AppendLine(Msg); } } }