Exemple #1
0
        public override int Compare(IReadOnlyParcel a, IReadOnlyParcel b)
        {
            var discountAppliesA = (CgtUtils.CgtMethodForParcel(a.AquisitionDate, _DisposalDate) == CgtMethod.Discount);
            var discountAppliesB = (CgtUtils.CgtMethodForParcel(b.AquisitionDate, _DisposalDate) == CgtMethod.Discount);

            if (discountAppliesA && !discountAppliesB)
            {
                return(-1);
            }
            else if (discountAppliesB && !discountAppliesA)
            {
                return(1);
            }
            else
            {
                decimal unitCostBaseA = a.Properties[_DisposalDate].CostBase / a.Properties[_DisposalDate].Units;
                decimal unitCostBaseB = b.Properties[_DisposalDate].CostBase / b.Properties[_DisposalDate].Units;

                if (unitCostBaseA > unitCostBaseB)
                {
                    return(-1);
                }
                else if (unitCostBaseA < unitCostBaseB)
                {
                    return(1);
                }
                else
                {
                    return(a.AquisitionDate.CompareTo(b.AquisitionDate));
                }
            }
        }
Exemple #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));
        }