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)); }
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); }
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); }
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"); } } }
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); }
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); }