private PensionFund GetFromDatabase(string pensionFundContractAddress) { PensionFund pensionFund = Data.GetByContract(pensionFundContractAddress); if (pensionFund == null || pensionFund.Option.Company == null || pensionFund.Option.Company.Employee == null) { throw new ArgumentException("Pension fund cannot be found."); } pensionFund.Option.PensionFundContract.PensionFundReferenceContract = PensionFundReferenceContractBusiness.List(pensionFund.Option.PensionFundContract.TransactionHash); if (!pensionFund.Option.PensionFundContract.PensionFundReferenceContract.Any()) { throw new ArgumentException("Reference contract cannot be found."); } pensionFund.Option.Company.BonusDistribution = BonusDistributionBusiness.List(pensionFund.Option.Company.Address); if (!pensionFund.Option.Company.BonusDistribution.Any()) { throw new ArgumentException("Bonus distribution cannot be found."); } return(pensionFund); }
public PensionFundContract CreateCompleteEntry(Fund fund, Company company, Employee employee) { Validate(fund, company, employee); var assetDictionary = GetAssetAllocationDictionary(fund); var pensionFund = PensionFundBusiness.Create(fund.Name); var pensionFundWallet = WalletBusiness.Create(); var pensionFundOption = PensionFundOptionBusiness.Create(pensionFundWallet.Address, fund.Fee, fund.LatePaymentFee, pensionFund.Id); var companyWallet = WalletBusiness.Create(); var domainCompany = CompanyBusiness.Create(companyWallet.Address, company.Name, company.BonusFee, company.MaxBonusFee, pensionFundOption.Address, company.VestingRules); var employeeWallet = WalletBusiness.Create(); var domainEmployee = EmployeeBusiness.Create(employeeWallet.Address, employee.Name, employee.Salary, employee.ContributionPercentage, domainCompany.Address); var pensionFundContract = PensionFundContractBusiness.Create(pensionFundOption.Address, domainCompany.Address, domainEmployee.Address, pensionFundOption.Fee, pensionFundOption.LatePenalty, domainCompany.MaxSalaryBonusRate, domainEmployee.Contribution, domainCompany.BonusRate, domainEmployee.Salary, assetDictionary, company.VestingRules.ToDictionary(bonus => bonus.Period, bonus => bonus.Percentage)); foreach (var asset in assetDictionary) { PensionFundReferenceContractBusiness.Create(pensionFundContract.TransactionHash, asset.Key, asset.Value); } return(pensionFundContract); }