private Dto.Xsd.InvoiceSummary GetInvoiceSummary(Invoice invoice) { var invoiceSummary = new Dto.Xsd.InvoiceSummary { TotalNetValue = invoice.RevenueItems.Sum(x => x.NetValue.Value), TotalVatAmount = invoice.RevenueItems.Sum(x => x.VatValue.Value) }; var otherTaxesAmount = invoice.RevenueItems.Any(x => x.CityTax != null) ? invoice.RevenueItems.Sum(m => m.CityTax.Amount.Value) : (decimal?)null; if (otherTaxesAmount.HasValue) { invoiceSummary.TotalOtherTaxesAmount = otherTaxesAmount.Value; } invoiceSummary.IncomeClassification = invoice.RevenueItems.SelectMany(x => x.IncomeClassifications).GroupBy(m => new { m.ClassificationCategory, m.ClassificationType }, (key, values) => new Dto.Xsd.IncomeClassification { ClassificationCategory = MapIncomeClassificationCategory(key.ClassificationCategory), ClassificationType = MapIncomeClassificationType(key.ClassificationType), Amount = values.Sum(x => x.Amount.Value) }).ToArray(); invoiceSummary.TotalGrossValue = invoiceSummary.TotalNetValue + invoiceSummary.TotalVatAmount + invoiceSummary.TotalOtherTaxesAmount; return(invoiceSummary); }
private static Dto.Xsd.InvoiceSummary GetInvoiceSummary(Invoice invoice) { var invoiceSummary = new Dto.Xsd.InvoiceSummary { TotalNetValue = Math.Abs(invoice.RevenueItems.Values.Sum(x => x.Value.NetValue)), TotalVatAmount = Math.Abs(invoice.RevenueItems.Values.Sum(x => x.Value.VatValue)) }; invoiceSummary.IncomeClassification = invoice.RevenueItems.Values.GroupBy( keySelector: m => m.Value.Info.RevenueType, resultSelector: (key, revenueItems) => new Dto.Xsd.IncomeClassification { ClassificationCategory = MapRevenueClassification(invoice, key).Category, ClassificationType = MapRevenueClassification(invoice, key).Type, Amount = Math.Abs(revenueItems.Sum(i => i.Value.NetValue)) } ).ToArray(); invoiceSummary.TotalGrossValue = invoiceSummary.TotalNetValue + invoiceSummary.TotalVatAmount + invoiceSummary.TotalOtherTaxesAmount; return(invoiceSummary); }