Example #1
0
        // List<int, Money> feeAmounts
        internal UnitFeeOverview(IManagementPeriod managementPeriod, List<IManagementPeriodUnit> units)
        {
            this.ManagementPeriod = managementPeriod;
            this.Account = ManagementPeriod.Account;
            // if Account.Family.ManagementFeeInstalment = 12 -> use ManagementPeriod.Key + Period / 1000000
            this.Key = managementPeriod.Key;

            foreach (IManagementPeriodUnit unit in units)
            {
                if (this.Account != unit.Account)
                    throw new ApplicationException("This is the wrong account.");

                int index = getIndexFromPeriod(unit.Period);
                this.units[index] = new UnitFeePerPeriod(this, unit);
                this.IsKickBackExported = (unit.KickBackExport != null);
            }
        }
        private static bool getMgtFeeInfo(IManagementPeriod mp, DateTime feeEndDate, int year, int quarter, out string mgtFeeDescription, out decimal mgtFeeThreshold)
        {
            bool success = false;
            mgtFeeDescription = "";
            mgtFeeThreshold = 0;
            ICustomerAccount account = (ICustomerAccount)mp.Account;
            IAssetManager am = account.AccountOwner as IAssetManager;
            if (am != null)
            {
                if (account.FinalManagementEndDate == feeEndDate)
                    mgtFeeDescription = string.Format(am.MgtFeeFinalDescription, quarter, year);
                else
                    mgtFeeDescription = string.Format(am.MgtFeeDescription, quarter, year);

                mgtFeeThreshold = am.MgtFeeThreshold * -1M;
                success = true;
            }
            return success;
        }
        private bool checkIsValuatedSub(IManagementPeriod managementPeriod)
        {
            bool retVal = false;

            if (managementPeriod != null)
            {
                if (Util.IsNullDate(managementPeriod.EndDate))
                    Message = string.Format("The enddate is not set on management period {0}.", managementPeriod.Key);

                if (managementPeriod.ManagementType == ManagementTypes.ManagementFee)
                {
                    IManagementPeriodUnit lastUnit = managementPeriod.ManagementPeriodUnits
                        .OrderByDescending(x => x.StartDate).FirstOrDefault();
                    if (lastUnit != null)
                    {
                        if (lastUnit.EndDate.Equals(managementPeriod.EndDate) &&
                            lastUnit.AverageHoldings.Count > 0 &&
                            lastUnit.FeesCalculated == FeesCalculatedStates.Yes)
                            retVal = true;
                        else
                            if (Util.IsNotNullDate(Account.LastValuationDate))
                            {
                                int days = ((TimeSpan)(managementPeriod.EndDate - Account.LastValuationDate)).Days;
                                if (days > 0)
                                    Message = string.Format("Wait {0} more days", days);
                                else
                                    Message = string.Format("Management Fee needs to be calculated for {0} days", Math.Abs(days));
                            }
                            else
                                Message = "Account has no valuations???";
                    }
                }
            }
            else
                retVal = true;
            return retVal;
        }