public ParcelSold(IReadOnlyParcel parcel, int unitsSold, decimal costBase, decimal amountReceived, decimal capitalGain, CgtMethod cgtMethod, decimal discountedGain) { Parcel = parcel; UnitsSold = unitsSold; CostBase = costBase; AmountReceived = amountReceived; CapitalGain = capitalGain; CgtMethod = cgtMethod; DiscountedGain = discountedGain; }
public ParcelSold CalculateParcelCgt(IReadOnlyParcel parcel, Date disposalDate, int unitsSold, decimal amountReceived) { decimal costBase; var properties = parcel.Properties[disposalDate]; if (unitsSold == properties.Units) { costBase = properties.CostBase; } else { costBase = (properties.CostBase * ((decimal)unitsSold / properties.Units)).ToCurrency(RoundingRule.Round); } var capitalGain = amountReceived - costBase; var cgtMethod = CgtUtils.CgtMethodForParcel(parcel.AquisitionDate, disposalDate); var discountedGain = CgtUtils.DiscountedCgt(capitalGain, cgtMethod); return(new ParcelSold(parcel, unitsSold, costBase, amountReceived, capitalGain, cgtMethod, discountedGain)); }