public CGTEventViewModel(CgtLiabilityResponse.CgtLiabilityEvent cgtEvent) { Stock = new StockViewItem(cgtEvent.Stock); EventDate = cgtEvent.EventDate; CostBase = cgtEvent.CostBase; AmountReceived = cgtEvent.AmountReceived; CapitalGain = cgtEvent.CapitalGain; if (cgtEvent.Method == CgtMethod.Discount) { Method = "Discount"; } else if (cgtEvent.Method == CgtMethod.Indexation) { Method = "Indexation"; } else { Method = "Other"; } }
public ServiceResult <CgtLiabilityResponse> GetCGTLiability(DateRange dateRange) { if (_Portfolio == null) { return(ServiceResult <CgtLiabilityResponse> .NotFound()); } var response = new CgtLiabilityResponse(); // Get a list of all the cgt events for the year var cgtEvents = _Portfolio.CgtEvents.InDateRange(dateRange); foreach (var cgtEvent in cgtEvents) { var item = new CgtLiabilityResponse.CgtLiabilityEvent() { Stock = cgtEvent.Stock.ToSummaryResponse(cgtEvent.Date), EventDate = cgtEvent.Date, CostBase = cgtEvent.CostBase, AmountReceived = cgtEvent.AmountReceived, CapitalGain = cgtEvent.CapitalGain, Method = cgtEvent.CgtMethod.ToResponse() }; response.Events.Add(item); // Apportion capital gains if (cgtEvent.CapitalGain < 0) { response.CurrentYearCapitalLossesTotal += -cgtEvent.CapitalGain; } else if (cgtEvent.CgtMethod == Domain.Portfolios.CgtMethod.Discount) { response.CurrentYearCapitalGainsDiscounted += cgtEvent.CapitalGain; } else { response.CurrentYearCapitalGainsOther += cgtEvent.CapitalGain; } } response.CurrentYearCapitalGainsTotal = response.CurrentYearCapitalGainsOther + response.CurrentYearCapitalGainsDiscounted; if (response.CurrentYearCapitalGainsOther > response.CurrentYearCapitalLossesTotal) { response.CurrentYearCapitalLossesOther = response.CurrentYearCapitalLossesTotal; } else { response.CurrentYearCapitalLossesOther = response.CurrentYearCapitalGainsOther; } if (response.CurrentYearCapitalGainsOther > response.CurrentYearCapitalLossesTotal) { response.CurrentYearCapitalLossesDiscounted = 0.00m; } else { response.CurrentYearCapitalLossesDiscounted = response.CurrentYearCapitalLossesTotal - response.CurrentYearCapitalGainsOther; } response.GrossCapitalGainOther = response.CurrentYearCapitalGainsOther - response.CurrentYearCapitalLossesOther; response.GrossCapitalGainDiscounted = response.CurrentYearCapitalGainsDiscounted - response.CurrentYearCapitalLossesDiscounted; response.GrossCapitalGainTotal = response.GrossCapitalGainOther + response.GrossCapitalGainDiscounted; if (response.GrossCapitalGainDiscounted > 0) { response.Discount = (response.GrossCapitalGainDiscounted / 2).ToCurrency(RoundingRule.Round); } else { response.Discount = 0.00m; } response.NetCapitalGainOther = response.GrossCapitalGainOther; response.NetCapitalGainDiscounted = response.GrossCapitalGainDiscounted - response.Discount; response.NetCapitalGainTotal = response.NetCapitalGainOther + response.NetCapitalGainDiscounted; return(ServiceResult <CgtLiabilityResponse> .Ok(response)); }