private void GetMoney(SpecialPlanTransferInstruction obj, DataTable cashflowDt) { if (MatchDocName("托管费")) { m_usesAndComment = "支付托管费"; obj.Money = GetFee("TrusteeFee.Received"); } else if (MatchDocName("资产服务机构费用")) { obj.Money = GetFee("ServiceFee.Received"); } else if (MatchDocName("次级收益")) { m_usesAndComment = "支付次级收益"; obj.Money = GetFee("Sub.Interest Received"); } else { var noteInfo = GetNoteInfo(); CommUtils.AssertNotNull(noteInfo, "无法通过[" + m_docName + "]获取相关note信息。"); var noteData = noteInfo.NoteData; CommUtils.AssertNotNull(noteData, "无法通过[" + m_docName + "]获取相关note data信息。"); //Money: 金额 = 本金 + 利息 obj.Money = noteData.PrincipalPaid.Value + noteData.InterestPaid.Value; //MoneyWithCsdcFee: 金额 = 本金 + 利息 + 中证手续费 //中证手续费 = (本金 + 利息) * 0.005% //金额 = (本金 + 利息) * 1.00005 var csdcFee = 0.0m; var csdcFeeRowIndex = cashflowDt.IndexOfRow(x => x.ItemArray[1].ToString() == noteInfo.Note.ShortName + ".CsdcFee"); if (csdcFeeRowIndex != -1) { for (int i = 0; i < cashflowDt.Columns.Count; i++) { var column = cashflowDt.Columns[i]; DateTime columnDate; if (DateTime.TryParse(column.ToString(), out columnDate) && columnDate == m_paymentDay) { decimal.TryParse(cashflowDt.Rows[csdcFeeRowIndex][i].ToString(), out csdcFee); break; } } } obj.MoneyWithCsdcFee = obj.Money + csdcFee; //MoneyWithCsdcFee1000: 金额 = 本金 + 利息 + 中证手续费 + 1000元长款逻辑 // 小数点第三位后有值(比如56.321):金额 + 1000 // 小数点第三位后没有有值(比如56.32):不处理 CommUtils.AssertNotNull(noteInfo.Note.Notional, "证券[{0}]初始本金不应为0", noteInfo.Note.NoteName); CommUtils.Assert(noteInfo.Note.Notional.Value != 0m, "证券[{0}]初始本金不应为0", noteInfo.Note.NoteName); var notional = noteInfo.Note.Notional.Value; //每百元偿付金额 var moneyPer100 = obj.MoneyWithCsdcFee / notional * 100; var add = (decimal)((int)(moneyPer100 * 100)) != moneyPer100 * 100; obj.MoneyWithCsdcFee1000 = add ? (obj.MoneyWithCsdcFee + 1000) : obj.MoneyWithCsdcFee; } obj.MoneyCN = obj.Money.ToCnString(); obj.MoneyWithCsdcFeeCN = obj.MoneyWithCsdcFee.ToCnString(); obj.MoneyWithCsdcFee1000CN = obj.MoneyWithCsdcFee1000.ToCnString(); }
protected override object MakeObjectInstance() { var logicModel = new ProjectLogicModel(m_userName, m_project); var cashflowDt = logicModel.DealSchedule.GetByPaymentDay(m_paymentDay).Dataset.DealModel.CashflowDt; var obj = new SpecialPlanTransferInstruction(); GetMoney(obj, cashflowDt); var allBankAccounts = m_dbAdapter.BankAccount.GetAccounts(m_project.ProjectId, true); //收款户 var bankType = GetBankType(); var payeeBanks = allBankAccounts.Where(x => x.AccountType == bankType).ToList(); CommUtils.Assert(payeeBanks.Count < 2, "产品 [" + m_project.Name + "] 的[" + bankType.ToString() + "]不唯一,无法确定收款户。"); var noPayeeBankMsg = "【缺少" + bankType.ToString() + "信息】"; if (payeeBanks.Count == 1) { var payee = payeeBanks[0]; obj.Payee.Name = payee.Name; obj.Payee.Bank = payee.IssuerBank; obj.Payee.Account = payee.BankAccount; } else { obj.Payee.Name = noPayeeBankMsg; obj.Payee.Bank = noPayeeBankMsg; obj.Payee.Account = noPayeeBankMsg; } //付款户 var payerBanks = allBankAccounts.Where(x => x.AccountType == EAccountType.专项计划账户).ToList(); CommUtils.Assert(payerBanks.Count < 2, "产品 [" + m_project.Name + "] 的[专项计划账户]不唯一,无法确定付款户。"); var noPayerBankMsg = "【缺少" + EAccountType.专项计划账户.ToString() + "信息】"; if (payerBanks.Count == 1) { var payer = payerBanks[0]; obj.Payer.Name = payer.Name; obj.Payer.Bank = payer.IssuerBank; obj.Payer.Account = payer.BankAccount; } else { obj.Payer.Name = noPayerBankMsg; obj.Payer.Bank = noPayerBankMsg; obj.Payer.Account = noPayerBankMsg; } //划付日期 = 当前工作截止日期的下一个工作日 obj.TransferDate = DateUtils.GetNextTradingDay(m_paymentDay); obj.UsesAndComment = m_usesAndComment; return(obj); }