using YLErp.Commons; using YLErp.DBModels.Consts; using YLErp.Model; using YLErp.Modules.TradeModule; namespace YLErp.BLL.GenerateDocument { public class GeneralGenerateConfirmBook : BaseGenerate { public GeneralGenerateConfirmBook(trade_contract_group tradeContractGroup, string docType, int optId, string optName) : base(tradeContractGroup, docType, optId, optName) { } protected override string ContractType => ContractTypeEnum.Trade; public override string TemplateFile => $"交易确认书模板.docx"; public override string ContractNOSeed => "GTJA"; //HasGeneratedConfirmBook 已转换成方法,测试成功后可删除 //protected override Func FuncAfterGenerated //{ // get // { // return (contractGroup) => // { // var trade = db.trade.Find(contractGroup.trade.id); // var childTds = db.trade.Where(x => x.ParentTradeId == trade.id); // if (trade != null) // { // trade.HasGeneratedConfirmBook = 1; // foreach (var child in childTds) // { // child.HasGeneratedConfirmBook = 1; // } // } // return db.SaveChanges() >= 1; // }; // } //} public override ReturnInfo> AppendDictionary() { var dic = CurrentContractDataSet.ModelDic; var tradeContractGroup = CurrentContractDataSet.ContractGroup; var trade = tradeContractGroup.trade; var settlementType = "价格"; if (trade.SettlementType == SettlementTypeEnum.SettlePrice) { settlementType = "结算价"; } else if (trade.SettlementType == SettlementTypeEnum.ClosePrice) { settlementType = "收盘价"; } if (trade.ExerciseMode == "American") { dic["{{美式期权结算价}}"] = $"所属交易所公布的标的合约可成交的最新价"; dic["{{欧式期权结算价}}"] = $"美式期权不适用"; } else { dic["{{美式期权结算价}}"] = $"欧式期权不适用"; dic["{{欧式期权结算价}}"] = $"所属交易所在到期日收盘后公布的标的合约{settlementType}"; } var tradeNotional = trade.Notional; if (trade.OptionType == "看涨") { if (trade.ExerciseMode == "American") { dic["{{美式期权结算金额}}"] = $"(行权时{trade.UnderlyingCode}合约可成交最新价 - {trade.ActualStrike:f2})× {tradeNotional:f2}"; dic["{{欧式期权结算金额}}"] = $"美式期权不适用"; } else { dic["{{美式期权结算金额}}"] = $"欧式期权不适用"; dic["{{欧式期权结算金额}}"] = $"({trade.ExerciseDate?.ToString("yyyy年M月d日")}{trade.UnderlyingCode}合约{settlementType} - {trade.ActualStrike:f2})× {tradeNotional:f2}"; } } else if (trade.OptionType == "看跌") { if (trade.ExerciseMode == "American") { dic["{{美式期权结算金额}}"] = $"({trade.ActualStrike:f2} - 行权时{trade.UnderlyingCode}合约可成交最新价)× {tradeNotional:f2}"; dic["{{欧式期权结算金额}}"] = $"美式期权不适用"; } else { dic["{{美式期权结算金额}}"] = $"欧式期权不适用"; dic["{{欧式期权结算金额}}"] = $"({trade.ActualStrike:f2} - {trade.ExerciseDate?.ToString("yyyy年M月d日")}{trade.UnderlyingCode}合约{settlementType})× {tradeNotional:f2}"; } } return Return.Success(dic); } protected override string GetContractIndex(trade_contract_group tradeContractGroup) { var contractBLL = new TradeContractBLL(OptId, OptName); var contractIndex = contractBLL.GetContractNo(ContractNOSeed); return contractIndex; } protected override string GetContractNO(trade_contract_group tradeContractGroup, string contractIndex) { var client = CurrentContractDataSet.Client; return $"{client.Number}C{contractIndex}"; } protected override string GetOutputFileName(trade_contract_group tradeContractGroup, string contractIndex) { var trade = tradeContractGroup.trade; return $"{trade.ClientName}交易确认书C{contractIndex}.{DocType.ToLower()}"; } } }