using Newtonsoft.Json.Linq; using YLErp.DBModels; using YLErp.Plugins.TradeDocGenerator; using YLErp.Plugins.TradeDocGenerator.Abstracts; namespace YLErp.Plugins.ShanXi.DocumentGenerator { class TradeUnwindReportGenerator : BaseUnwindReportGenerator, ITradeUnwindReportGenerator { protected override string GetContractNo(out string contractIndex) { var contractNo = Context.GenerateContractNo(out contractIndex); return contractNo; } protected override void PrepareViewData(Dictionary dic) { var table1 = new JArray(); var trade = Context.Trade; var client = Context.GetClient(); var valuetimelist = new List(); var underlying = Context.GetTradeUnderlying(); var variety = Context.GetUnderlyingVariety(); var tradeCash = Context.GetTradeCash(); var instrumentTypeArr = new List() { ConsGlobal.InstrumentType.Stock, ConsGlobal.InstrumentType.StockIndex, ConsGlobal.InstrumentType.StockIF }; var tradelist = Context.Trades.Union(Context.SubTrades).ToList(); foreach (var item in Context.Trades) { foreach (var tradeCashs in Context.TradeCashes[item.id]) { var settlementprice = (trade.IsUsePremiumRate != null && trade.IsUsePremiumRate.Value ? tradeCashs.UnwindPricePercentRate.OtcFormatPercent() : tradeCashs.UnwindPrice.OtcFormatMoney()); var row = new JObject(); OtcTradeBase trades = tradelist.Find(O => O.id == tradeCashs.TradeId); row["交易编号"] = trades.TradeNumber; switch (item.BuySell) { case "买入": if (trade.OpponentRole == null || trade.OpponentRole == "乙方") { row["买方"] = $"甲方"; } else { row["买方"] = $"乙方"; } break; case "卖出": if (trade.OpponentRole == null || trade.OpponentRole == "乙方") { row["买方"] = $"乙方"; } else { row["买方"] = $"甲方"; } break; default: break; } row["交易日期"] = $"{trades.TradeDate:yyyy/MM/dd}"; row["开始日期"] = $"{trades.StartDate:yyyy/MM/dd}-{trades.ExerciseDate:yyyy/MM/dd}"; row["名义本金"] = $"{trades.OriginalStockEqvNotional.OtcFormatMoney()}"; row["标的代码"] = $"{trades.UnderlyingCode}"; row["期权类型"] = $"{trades.TradeType}"; row["期初价格"] = $"{trades.TradePrice.OtcFormatMoney()}"; row["结算日期"] = $"{tradeCashs.ValueDate:yyyy/MM/dd}"; row["结算价格"] = $"{tradeCashs.FinalPrice.OtcFormatMoney()}"; row["结算模块"] = $"{(tradeCashs.UnwindPercentRate * trades.OriginalNotional * underlying.CountRatio).OtcFormatMoney()}"; row["结算单价"] = $"{settlementprice}"; var Amountqrs = -tradeCashs.Amount; var Amountqrs2 = -(tradeCashs.Amount + (trades.TradePrice ?? 0) * (tradeCashs.UnwindPercentRate ?? 0) * ((trades.BuySell == "卖出") ? 1 : -1)); row["结算期权费"] = $"{Amountqrs.OtcFormatMoney()}"; row["结算金额"] = $"{Amountqrs2.OtcFormatMoney()}"; table1.Add(row); valuetimelist.Add(tradeCashs.ValueDate); } } dic["合同编号"] = Context.GenerateContractNo(out _); dic["table1"] = table1; dic["合同日期"] = $"{DateTime.Now.ToString("yyyy/MM/dd")}";//ValueDate dic["了结日期1"] = $"{ valuetimelist.Min():yyyy/MM/dd}"; dic["了结日期2"] = $"{ valuetimelist.Max():yyyy/MM/dd}"; #region 甲乙方信息判断 var owner_Info = Context.GetOwner_info("默认"); dic["客户名称"] = client != null ? client.Name : ""; dic["公司名称"] = owner_Info != null ? owner_Info.FullName != null ? owner_Info.FullName : "" : ""; if (trade.OpponentRole == null || trade.OpponentRole == "乙方") { dic["甲方"] = owner_Info != null ? owner_Info.FullName != null ? owner_Info.FullName : "" : ""; dic["乙方"] = client != null ? client.Name : ""; } else { dic["甲方"] = client != null ? client.Name : ""; dic["乙方"] = owner_Info != null ? owner_Info.FullName != null ? owner_Info.FullName : "" : ""; } #endregion } protected override string GetTemplateFilePath() { var templatePath = ""; templatePath = Path.Combine(GlobalConfig.PluginFolder, "App_Docs\\settlement_template\\settle_01.docx"); return templatePath; } protected override string GetOutputFileName(string contractNo, string contractIndex) { var client = Context.GetClient(); var trade = Context.Trade; var tradelist = Context.Trades.Union(Context.SubTrades).ToList(); var owner_Info = Context.GetOwner_info("默认") ?? new Owner_info(); var dts = tradelist.Max(m => m.TradeDate); var dte = tradelist.Min(m => m.TradeDate); var date = ""; if (dts == dte) { date = trade.TradeDate?.ToString("yyyyMMdd"); } else { date = dts?.ToString("yyyyMMdd") + "-" + dte?.ToString("yyyyMMdd"); } var FullName = owner_Info != null ? owner_Info.FullName != null ? owner_Info.FullName : "" : ""; var rule = $"{FullName }{ trade.TradeType}结算确认书{ date}"; Context.GetcontractIndex(rule, out var contractIndex2); return $"{rule}-{contractIndex2}.{DocType.ToLower()}"; } } }