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;
 }
예제 #2
0
        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));
        }