public ActionResult CreateDistribution(string id)
        {
            int _gid = -1;

            if (!Int32.TryParse(id, out _gid))
            {
                return(this.Content("Could not parse id"));
            }

            AndroidDistributionGroup group = AndroidDistributionGroup.CreateManager().Load(_gid);

            if (group == null)
            {
                return(this.Content("Group is null"));
            }

            CreateDistributionModel model = new CreateDistributionModel();

            model.Group = group;
            return(View(model));
        }
예제 #2
0
        public ActionResult CreateManualDistribution(FormCollection collection)
        {
            CreateDistributionModel model=new CreateDistributionModel();
            ResultModel resultModel=new ResultModel();
            this.TryUpdateModel(model,collection);

            CheckDistributionAmount(model);

            if(ModelState.IsValid) {

                // Attempt to create cash distribution.

                CapitalDistribution distribution=new CapitalDistribution();
                CapitalDistributionLineItem item;
                distribution.CapitalDistributionDate=model.CapitalDistributionDate;
                distribution.CapitalDistributionDueDate=model.CapitalDistributionDueDate;

                distribution.PreferredReturn=model.PreferredReturn;
                distribution.ReturnManagementFees=model.ReturnManagementFees;
                distribution.ReturnFundExpenses=model.ReturnFundExpenses;
                distribution.PreferredCatchUp=model.PreferredCatchUp;
                distribution.Profits=model.GPProfits;
                distribution.LPProfits=model.LPProfits;

                distribution.CreatedBy=Authentication.CurrentUser.UserID;
                distribution.CreatedDate=DateTime.Now;
                distribution.LastUpdatedBy=Authentication.CurrentUser.UserID;
                distribution.LastUpdatedDate=DateTime.Now;
                distribution.DistributionAmount=model.DistributionAmount;
                distribution.DistributionNumber=Convert.ToString(CapitalCallRepository.FindCapitalCallDistributionNumber(model.FundId));
                distribution.FundID=model.FundId;
                distribution.CapitalReturn=model.CapitalReturn;
                distribution.IsManual=true;

                int index;

                for(index=1;index<model.InvestorCount+1;index++) {
                    // Attempt to create cash distribution of each investor.

                    item=new CapitalDistributionLineItem();
                    item.CapitalReturn=0;
                    item.CreatedBy=Authentication.CurrentUser.UserID;
                    item.CreatedDate=DateTime.Now;
                    item.LastUpdatedBy=Authentication.CurrentUser.UserID;
                    item.LastUpdatedDate=DateTime.Now;
                    item.InvestorID=DataTypeHelper.ToInt32(collection[index.ToString()+"_"+"InvestorId"]);
                    item.DistributionAmount=DataTypeHelper.ToDecimal(collection[index.ToString()+"_"+"DistributionAmount"]);
                    item.ReturnManagementFees=DataTypeHelper.ToDecimal(collection[index.ToString()+"_"+"ReturnManagementFees"]);
                    item.ReturnFundExpenses=DataTypeHelper.ToDecimal(collection[index.ToString()+"_"+"ReturnFundExpenses"]);
                    item.Profits=DataTypeHelper.ToDecimal(collection[index.ToString()+"_"+"GPProfits"]);
                    item.PreferredReturn=DataTypeHelper.ToDecimal(collection[index.ToString()+"_"+"PreferredReturn"]);
                    if(item.InvestorID>0) {
                        distribution.CapitalDistributionLineItems.Add(item);
                    }
                }
                if(distribution.CapitalDistributionLineItems.Count==0) {
                    ModelState.AddModelError("InvestorCount","Select any one investor");
                } else {
                    IEnumerable<ErrorInfo> errorInfo=CapitalCallRepository.SaveCapitalDistribution(distribution);
                    resultModel.Result+=ValidationHelper.GetErrorInfo(errorInfo);
                    if(string.IsNullOrEmpty(resultModel.Result)) {
                        resultModel.Result+="True||"+(CapitalCallRepository.FindCapitalCallDistributionNumber(model.FundId));
                    }
                }
            }
            if(ModelState.IsValid==false) {
                foreach(var values in ModelState.Values.ToList()) {
                    foreach(var err in values.Errors.ToList()) {
                        if(string.IsNullOrEmpty(err.ErrorMessage)==false) {
                            resultModel.Result+=err.ErrorMessage+"\n";
                        }
                    }
                }
            }
            return View("Result",resultModel);
        }
예제 #3
0
        public ActionResult CreateDistribution(FormCollection collection)
        {
            CreateDistributionModel model=new CreateDistributionModel();
            ResultModel resultModel=new ResultModel();
            this.TryUpdateModel(model,collection);

            CheckDistributionAmount(model);

            if(ModelState.IsValid) {

                // Attempt to create cash distribution.

                CapitalDistribution distribution=new CapitalDistribution();
                CapitalDistributionLineItem item;
                distribution.CapitalDistributionDate=model.CapitalDistributionDate;
                distribution.CapitalDistributionDueDate=model.CapitalDistributionDueDate;

                distribution.CapitalReturn=model.CapitalReturn;
                distribution.PreferredReturn=model.PreferredReturn;
                distribution.ReturnManagementFees=model.ReturnManagementFees;
                distribution.ReturnFundExpenses=model.ReturnFundExpenses;
                distribution.PreferredCatchUp=model.PreferredCatchUp;
                distribution.Profits=model.GPProfits;
                distribution.LPProfits=model.LPProfits;

                distribution.CreatedBy=Authentication.CurrentUser.UserID;
                distribution.CreatedDate=DateTime.Now;
                distribution.LastUpdatedBy=Authentication.CurrentUser.UserID;
                distribution.LastUpdatedDate=DateTime.Now;
                distribution.DistributionAmount=model.DistributionAmount;
                distribution.DistributionNumber=Convert.ToString(CapitalCallRepository.FindCapitalCallDistributionNumber(model.FundId));
                distribution.FundID=model.FundId;
                distribution.IsManual=false;

                // Get all investor funds.
                List<InvestorFund> investorFunds=CapitalCallRepository.GetAllInvestorFunds(distribution.FundID);

                if(investorFunds!=null) {

                    // Find non managing member total commitment.
                    decimal nonManagingMemberTotalCommitment=investorFunds.Where(fund => fund.InvestorTypeID==(int)DeepBlue.Models.Investor.Enums.InvestorType.NonManagingMember).Sum(fund => fund.TotalCommitment);
                    // Find managing member total commitment.
                    decimal managingMemberTotalCommitment=investorFunds.Where(fund => fund.InvestorTypeID==(int)DeepBlue.Models.Investor.Enums.InvestorType.ManagingMember).Sum(fund => fund.TotalCommitment);
                    // Find total commitment.
                    decimal totalCommitment=nonManagingMemberTotalCommitment+managingMemberTotalCommitment;

                    foreach(var investorFund in investorFunds) {

                        // Attempt to create cash distribution of each investor.

                        item=new CapitalDistributionLineItem();

                        item.CreatedBy=Authentication.CurrentUser.UserID;
                        item.CreatedDate=DateTime.Now;
                        item.LastUpdatedBy=Authentication.CurrentUser.UserID;
                        item.LastUpdatedDate=DateTime.Now;
                        item.InvestorID=investorFund.InvestorID;

                        item.CapitalReturn=decimal.Multiply((distribution.CapitalReturn??0),
                                                                decimal.Divide(investorFund.TotalCommitment,totalCommitment)
                                                                );

                        item.PreferredReturn=decimal.Multiply((distribution.PreferredReturn??0),
                                                                decimal.Divide(investorFund.TotalCommitment,totalCommitment)
                                                                );

                        // Non ManagingMember investor type only
                        if(investorFund.InvestorTypeID==(int)DeepBlue.Models.Investor.Enums.InvestorType.NonManagingMember) {
                            item.ReturnManagementFees=decimal.Multiply((distribution.ReturnManagementFees??0),
                                                                         decimal.Divide(investorFund.TotalCommitment,nonManagingMemberTotalCommitment)
                                                                        );
                        }

                        item.ReturnFundExpenses=decimal.Multiply((distribution.ReturnFundExpenses??0),
                                                                decimal.Divide(investorFund.TotalCommitment,totalCommitment)
                                                                );

                        // ManagingMember investor type only
                        if(investorFund.InvestorTypeID==(int)DeepBlue.Models.Investor.Enums.InvestorType.ManagingMember) {
                            item.PreferredCatchUp=distribution.PreferredCatchUp;
                        }

                        // ManagingMember investor type only
                        if(investorFund.InvestorTypeID==(int)DeepBlue.Models.Investor.Enums.InvestorType.ManagingMember) {
                            item.Profits=distribution.Profits;
                        }

                        item.LPProfits=decimal.Multiply((distribution.LPProfits??0),
                                                        decimal.Divide(investorFund.TotalCommitment,totalCommitment)
                                                        );

                        // Calculate distribution amount of each investor.
                        item.DistributionAmount=(item.CapitalReturn??0)
                                                    +(item.PreferredReturn??0)
                                                    +(item.ReturnManagementFees??0)
                                                    +(item.ReturnFundExpenses??0)
                                                    +(item.PreferredCatchUp??0)
                                                    +(item.Profits??0)
                                                    +(item.LPProfits??0)
                                                    ;
                        distribution.CapitalDistributionLineItems.Add(item);
                    }
                }
                IEnumerable<ErrorInfo> errorInfo=CapitalCallRepository.SaveCapitalDistribution(distribution);
                resultModel.Result+=ValidationHelper.GetErrorInfo(errorInfo);
                if(string.IsNullOrEmpty(resultModel.Result)) {
                    resultModel.Result+="True||"+(CapitalCallRepository.FindCapitalCallDistributionNumber(model.FundId))+"||"+distribution.CapitalDistributionID;
                }
            }
            if(ModelState.IsValid==false) {
                foreach(var values in ModelState.Values.ToList()) {
                    foreach(var err in values.Errors.ToList()) {
                        if(string.IsNullOrEmpty(err.ErrorMessage)==false) {
                            resultModel.Result+=err.ErrorMessage+"\n";
                        }
                    }
                }
            }
            return View("Result",resultModel);
        }
예제 #4
0
 private void CheckDistributionAmount(CreateDistributionModel model)
 {
     if(model.DistributionAmount>0) {
         decimal distributionCheck=((model.CapitalReturn??0)+(model.PreferredReturn??0)+(model.PreferredCatchUp??0)+(model.ReturnFundExpenses??0)+(model.ReturnManagementFees??0)+(model.GPProfits??0)+(model.LPProfits??0));
         if((decimal.Round(model.DistributionAmount)==decimal.Round(distributionCheck))==false) {
             ModelState.AddModelError("DistributionAmount","Components of the distribution do not add up to total distribution amount");
         }
     }
 }
예제 #5
0
        public ActionResult UpdateDistribution(FormCollection collection)
        {
            CreateDistributionModel model=new CreateDistributionModel();
            ResultModel resultModel=new ResultModel();
            IEnumerable<ErrorInfo> errorInfo=null;
            this.TryUpdateModel(model,collection);
            if((model.CapitalDistributionID??0)==0) {
                ModelState.AddModelError("CapitalDistributionID","CapitalDistributionID is required");
            }
            CheckDistributionAmount(model);
            if(ModelState.IsValid) {

                // Attempt to create cash distribution.

                CapitalDistribution distribution=CapitalCallRepository.FindCapitalDistribution((model.CapitalDistributionID??0));

                if(distribution!=null) {
                    distribution.CapitalDistributionDate=model.CapitalDistributionDate;
                    distribution.CapitalDistributionDueDate=model.CapitalDistributionDueDate;

                    distribution.CapitalReturn=model.CapitalReturn;
                    distribution.PreferredReturn=model.PreferredReturn;
                    distribution.ReturnManagementFees=model.ReturnManagementFees;
                    distribution.ReturnFundExpenses=model.ReturnFundExpenses;
                    distribution.PreferredCatchUp=model.PreferredCatchUp;
                    distribution.Profits=model.GPProfits;
                    distribution.LPProfits=model.LPProfits;
                    distribution.LastUpdatedBy=Authentication.CurrentUser.UserID;
                    distribution.LastUpdatedDate=DateTime.Now;
                    distribution.DistributionAmount=model.DistributionAmount;

                    errorInfo=CapitalCallRepository.SaveCapitalDistribution(distribution);
                    resultModel.Result+=ValidationHelper.GetErrorInfo(errorInfo);

                    // Attempt to update capital call line item for each investor fund.
                    int rowIndex;
                    FormCollection rowCollection;
                    CapitalDistributionLineItemModel itemModel=null;

                    if(string.IsNullOrEmpty(resultModel.Result)) {
                        for(rowIndex=0;rowIndex<model.CapitalDistributionLineItemsCount;rowIndex++) {
                            rowCollection=FormCollectionHelper.GetFormCollection(collection,rowIndex,typeof(CapitalDistributionLineItemModel),"_");
                            itemModel=new CapitalDistributionLineItemModel();
                            this.TryUpdateModel(itemModel,rowCollection);
                            errorInfo=ValidationHelper.Validate(itemModel);
                            resultModel.Result+=ValidationHelper.GetErrorInfo(errorInfo);
                            if(string.IsNullOrEmpty(resultModel.Result)) {

                                // Attempt to create cash distribution of each investor.

                                CapitalDistributionLineItem capitalDistributionLineItem=CapitalCallRepository.FindCapitalDistributionLineItem(itemModel.CapitalDistributionLineItemID);
                                if(capitalDistributionLineItem!=null) {

                                    capitalDistributionLineItem.LastUpdatedBy=Authentication.CurrentUser.UserID;
                                    capitalDistributionLineItem.LastUpdatedDate=DateTime.Now;

                                    capitalDistributionLineItem.CapitalReturn=itemModel.CapitalReturn;
                                    capitalDistributionLineItem.PreferredReturn=itemModel.PreferredReturn;
                                    capitalDistributionLineItem.ReturnManagementFees=itemModel.ReturnManagementFees;
                                    capitalDistributionLineItem.ReturnFundExpenses=itemModel.ReturnFundExpenses;
                                    capitalDistributionLineItem.PreferredCatchUp=itemModel.PreferredCatchUp;
                                    capitalDistributionLineItem.Profits=itemModel.Profits;
                                    capitalDistributionLineItem.LPProfits=itemModel.LPProfits;
                                    capitalDistributionLineItem.DistributionAmount=itemModel.DistributionAmount;

                                    errorInfo=CapitalCallRepository.SaveCapitalDistributionLineItem(capitalDistributionLineItem);
                                    resultModel.Result+=ValidationHelper.GetErrorInfo(errorInfo);
                                } else {
                                    break;
                                }
                            }

                        }

                        if(string.IsNullOrEmpty(resultModel.Result)) {
                            resultModel.Result+="True";
                        }
                    }

                }
            }
            if(ModelState.IsValid==false) {
                foreach(var values in ModelState.Values.ToList()) {
                    foreach(var err in values.Errors.ToList()) {
                        if(string.IsNullOrEmpty(err.ErrorMessage)==false) {
                            resultModel.Result+=err.ErrorMessage+"\n";
                        }
                    }
                }
            }
            return View("Result",resultModel);
        }
예제 #6
0
 public ActionResult NewCapitalDistribution()
 {
     ViewData["MenuName"]="FundManagement";
     ViewData["SubmenuName"]="CapitalDistribution";
     ViewData["PageName"]="CapitalDistribution";
     CreateDistributionModel model=new CreateDistributionModel();
     Models.Fund.FundDetail fundDetail=FundRepository.FindLastFundDetail();
     if(fundDetail!=null) {
         model.FundId=fundDetail.FundId;
     }
     return View(model);
 }