diff --git a/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs b/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs index 82428458..877ef0c3 100644 --- a/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs +++ b/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs @@ -217,7 +217,7 @@ namespace YLErp.Modules.TradeModule.DealModule var trades = DbContext.trade.Where(x => tradeIds.Contains(x.id)).AsNoTracking().ToList(); logger.Info($"[GJGenerateConfirmBook] 查询到交易记录数: {trades.Count}"); - + if (!trades.Any()) { logger.Info("[GJGenerateConfirmBook] 未找到交易记录,直接返回"); @@ -225,7 +225,26 @@ namespace YLErp.Modules.TradeModule.DealModule files = new List(); return true; } - + + // 过滤掉待确认和审批中的交易,这些状态不允许生成确认书 + var invalidStatusList = new List { ConsTrade.新增待确认, ConsTrade.修改待确认, ConsTrade.审批中 }; + var invalidTrades = trades.Where(t => invalidStatusList.Contains(t.TradeStatus)).ToList(); + if (invalidTrades.Any()) + { + error.AddRange(invalidTrades.Select(t => $"交易 {t.TradeNumber} 状态为【{t.TradeStatus}】,不能生成确认书")); + tradeIds = tradeIds.Where(id => !invalidTrades.Any(t => t.id == id)).ToList(); + trades = trades.Where(t => !invalidTrades.Any(it => it.id == t.id)).ToList(); + logger.Info($"[GJGenerateConfirmBook] 过滤掉 {invalidTrades.Count} 笔待确认/审批中交易"); + } + + if (!trades.Any()) + { + logger.Info("[GJGenerateConfirmBook] 过滤后无有效交易可生成确认书"); + errors = error; + files = new List(); + return false; + } + var clientIds = trades.Select(x => x.ClientId).Distinct().ToList(); logger.Info($"[GJGenerateConfirmBook] 客户ID数: {clientIds.Count}"); diff --git a/YLErpWeb/Views/TradeConfirmBook/Index.cshtml b/YLErpWeb/Views/TradeConfirmBook/Index.cshtml index 5c9d099a..8c5a0b65 100644 --- a/YLErpWeb/Views/TradeConfirmBook/Index.cshtml +++ b/YLErpWeb/Views/TradeConfirmBook/Index.cshtml @@ -16,7 +16,7 @@ SettleDocModeMultiple = valuedate.SettleDocModeMultiple.Equals(valuedateBLL.SystemDate.SettleDocMode), BrokerMode = YLErp.PS.Config.ComponentVersion == YLErp.Configuration.ComponentVersion.Broker, MarketMaker = YLErp.PS.Config.ComponentVersion == YLErp.Configuration.ComponentVersion.MarketMaker, - reqTradeStatus = $"{ConsTrade.确认成交},{ConsTrade.已到期},{ConsTrade.已平仓},{ConsTrade.已执行}", + reqTradeStatus = $"{ConsTrade.新增待确认},{ConsTrade.修改待确认},{ConsTrade.审批中},{ConsTrade.确认成交},{ConsTrade.已到期},{ConsTrade.已平仓},{ConsTrade.已执行}", SelectConfirmationBookTemplate = GlobalConfig.SelectConfirmationBookTemplate == true, templateNames = ViewBag.TemplateNames, //初始化时使用空页面(清楚预置查询条件及初始不加载数据) @@ -68,7 +68,7 @@ @Html.MyAceDropdownInput2("BuySell", "交易方向", GlobalData.GetSelectItems(new List { "买入", "卖出" })) @Html.SearchDateRange("ExerciseDate", "到期日期") @Html.SearchDateRange("TradeDate", "交易日期") - @Html.MyAceDropdownInput("TradeStatus", "交易状态", GlobalData.TradeStatusAfterConfirm(), true) + @Html.MyAceDropdownInput("TradeStatus", "交易状态", GlobalData.GetSelectItems(new List { ConsTrade.新增待确认, ConsTrade.修改待确认, ConsTrade.审批中, ConsTrade.确认成交, ConsTrade.已到期, ConsTrade.已执行, ConsTrade.已平仓 }), true) @if (pageObj.IsAutoSealAndUploadFiles){ @Html.MyAceDropdownInput("SealResults", "用印结果", GlobalData.GetSealResultItems()) diff --git a/YLErpWeb/Views/TradeConfirmBookOption/Index.cshtml b/YLErpWeb/Views/TradeConfirmBookOption/Index.cshtml index 8d27bc0f..8858017f 100644 --- a/YLErpWeb/Views/TradeConfirmBookOption/Index.cshtml +++ b/YLErpWeb/Views/TradeConfirmBookOption/Index.cshtml @@ -16,7 +16,7 @@ SettleDocModeMultiple = valuedate.SettleDocModeMultiple.Equals(valuedateBLL.SystemDate.SettleDocMode), BrokerMode = YLErp.PS.Config.ComponentVersion == YLErp.Configuration.ComponentVersion.Broker, MarketMaker = YLErp.PS.Config.ComponentVersion == YLErp.Configuration.ComponentVersion.MarketMaker, - reqTradeStatus = $"{ConsTrade.确认成交},{ConsTrade.已到期},{ConsTrade.已平仓},{ConsTrade.已执行}", + reqTradeStatus = $"{ConsTrade.新增待确认},{ConsTrade.修改待确认},{ConsTrade.审批中},{ConsTrade.确认成交},{ConsTrade.已到期},{ConsTrade.已平仓},{ConsTrade.已执行}", SelectConfirmationBookTemplate = GlobalConfig.SelectConfirmationBookTemplate == true, templateNames = ViewBag.TemplateNames, //初始化时使用空页面(清楚预置查询条件及初始不加载数据) @@ -71,7 +71,7 @@ @Html.MyAceDropdownInput2("BuySell", "交易方向", GlobalData.GetSelectItems(new List { "买入", "卖出" })) @Html.SearchDateRange("ExerciseDate", "到期日期") @Html.SearchDateRange("TradeDate", "交易日期") - @Html.MyAceDropdownInput("TradeStatus", "交易状态", GlobalData.TradeStatusAfterConfirm(), true) + @Html.MyAceDropdownInput("TradeStatus", "交易状态", GlobalData.GetSelectItems(new List { ConsTrade.新增待确认, ConsTrade.修改待确认, ConsTrade.审批中, ConsTrade.确认成交, ConsTrade.已到期, ConsTrade.已执行, ConsTrade.已平仓 }), true) @if (pageObj.IsAutoSealAndUploadFiles){ @Html.MyAceDropdownInput("SealResults", "用印结果", GlobalData.GetSealResultItems()) diff --git a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js index 0147abc8..38e25299 100644 --- a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js +++ b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js @@ -925,7 +925,9 @@ function showToolName(cellValue, options, rowObject) { var html = showDownload(cellValue, options, rowObject); var title = page.IsAutoSealAndUploadFiles && page.IsAutoSealAfterGeneratedBook ? "生成并用印" : "生成确认书"; - var canGenerate = page.canGenerate == true ? "" : "disabled"; + // 待确认和审批中的交易不允许生成确认书 + var isUnconfirmed = rowObject.TradeStatus === "新增待确认" || rowObject.TradeStatus === "修改待确认" || rowObject.TradeStatus === "审批中"; + var canGenerate = page.canGenerate == true && !isUnconfirmed ? "" : "disabled"; var isWait = (rowObject.MetaDic.SealResult == "用印等待中"); html += "".template(rowObject.id, rowObject.MetaDic.HasGeneratedConfirmBook == "True", title, isWait, canGenerate); if (rowObject.MetaDic.ContractDocUrl && page.canSendEmail == true) {