diff --git a/Plugins/YLErp.Plugins.GuoLian/App_Docs/settlement_template/dma_01.docx b/Plugins/YLErp.Plugins.GuoLian/App_Docs/settlement_template/dma_01.docx new file mode 100644 index 00000000..e375ccc8 Binary files /dev/null and b/Plugins/YLErp.Plugins.GuoLian/App_Docs/settlement_template/dma_01.docx differ diff --git a/Plugins/YLErp.Plugins.GuoLian/App_Docs/settlement_template/nodma_01.xlsx b/Plugins/YLErp.Plugins.GuoLian/App_Docs/settlement_template/nodma_01.xlsx new file mode 100644 index 00000000..2cf6a553 Binary files /dev/null and b/Plugins/YLErp.Plugins.GuoLian/App_Docs/settlement_template/nodma_01.xlsx differ diff --git a/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeSettleBillGenerator.cs b/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeSettleBillGenerator.cs index c9ef61ca..f2f1c827 100644 --- a/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeSettleBillGenerator.cs +++ b/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeSettleBillGenerator.cs @@ -1,8 +1,12 @@ using Newtonsoft.Json.Linq; +using YLErp.Core.Helpers; using YLErp.DBModels; +using YLErp.DBModels.Consts; +using YLErp.DBModels.Enums; using YLErp.Models; using YLErp.Plugins.TradeDocGenerator; using YLErp.Plugins.TradeDocGenerator.Abstracts; +using YLErp.QdpModule; namespace YLErp.Plugins.GuoLian.DocumentGenerator { @@ -17,123 +21,192 @@ namespace YLErp.Plugins.GuoLian.DocumentGenerator return contractNo; } - protected override string GetTemplateFilePath() - { - var templatePath = Path.Combine(GlobalConfig.PluginFolder, "App_Docs/settlement_template/settle_01.docx"); - return templatePath; - } - - protected override string GetOutputFileName(string contractNo, string contractIndex) + protected override void PrepareViewData(Dictionary dic) { var client = Context.GetClient(); var flowEvents = Context.GetFlowEvents(); - var valueDate = flowEvents.FirstOrDefault()?.UnwindDate ?? Context.SystemValueDate; - var fileName = $"结算单_{client.Name}_{valueDate:yyyyMMdd}_{contractIndex}"; - return $"{fileName}.{DocType.ToLower()}"; + var allFlowEvents = Context.GetAllFlowEvents(); + var swapPositions = Context.GetSwapPositions(); + var trades = Context.Trades; + var tradeIds = trades.Select(t => t.id).ToList(); + var tradeExtends = Context.GetTrade_Extends(tradeIds); + List table = new List(); + SwapEndConfirmModel outPut = new SwapEndConfirmModel(); + + foreach (var flowEventGroup in flowEvents) + { + var tradeId = flowEventGroup.SwapTradeId; + var positions = swapPositions.Where(x => x.SwapTradeId == tradeId && x.IsInitial).ToList(); + var posi = positions.FirstOrDefault(f => f.id == flowEventGroup.PositionId); + var unwindFlowEvents = allFlowEvents.Where(x => x.EventId == flowEventGroup.EventId); + var trade = trades.FirstOrDefault(x => x.id == tradeId); + var preSettleDate = flowEventGroup.UnwindDate.Value.AddDays(-1); + var swapEodPositions = Context.GetEodPositions(tradeId, preSettleDate); + var tradeExtend = tradeExtends.FirstOrDefault(x => x.TradeId == tradeId); + var ratio = posi.PositionType == (int)PositionTypeFlag.Long ? 1 : -1; + ExcelReportModel row = new ExcelReportModel(); + var confirmNo = Context.Gettrade_contract_r(tradeId, ContractTypeEnum.Trade); + if (string.IsNullOrEmpty(confirmNo)) + { + throw new ServiceException($"{trade.TradeNumber}未生成交易确认书"); + } + row.TradeNumber = confirmNo; + row.ClientName = client.Name; + row.UnderlyingCode = flowEventGroup.UnderlyingCode; + row.StartDate = trade.StartDate.Value.ToString("yyyy-MM-dd"); + var eventDate = flowEventGroup.UnwindDate.Value; + row.EventDate = eventDate.ToString("yyyy-MM-dd"); + var payDate = flowEventGroup.PayDate; + var sr = tradeExtend == null ? 0 : tradeExtend.ExtendObj.SettlementRules; + if (!payDate.HasValue) + { + payDate = QdpCalendarHelper.GetNonHoliday(flowEventGroup.EventDate.AddDays(sr)); + } + row.PayDate = payDate.Value.ToString("yyyy-MM-dd"); + row.ClosePrice = ((flowEventGroup.TradingAmountAvg) * 100).ToString("0.00000000"); + decimal interestRate = unwindFlowEvents.Where(x => ConsTrade.InterestModels.Contains(x.InterestMode)).Sum(s => s.InterestRate); + row.InterestRate = interestRate.ToString("0.00%"); + var PosiNotionalValue = flowEventGroup.Quantity * flowEventGroup.ContractSize * posi.PosiGrossPrice; + if (flowEventGroup.EventId.HasValue) + { + var swapEvent = Context.GetEvent(flowEventGroup.EventId.Value); + if (swapEvent != null) + { + swapEvent.unwindData = JsonHelper.Deserialize(swapEvent.EventData); + PosiNotionalValue = swapEvent.unwindData.CloseNotionalValue; + } + } + + row.Quantity = flowEventGroup.Quantity.ToString("0.00"); + row.PosiNotionalValue = PosiNotionalValue.ToString("0.00"); + row.PosiNetPrice = (posi.PosiGrossPrice * 100).ToString("0.00000000"); + //var tradingFee = (flowEventGroup.TradingAmountFeeAvg- posi.PosiNetPrice- flowEventGroup.TradingAmountAvg+ posi.PosiGrossPrice)* PosiNotionalValue* ratio; + var tradingFee = flowEventGroup.TradingFee + flowEventGroup.TradingFeePending; + row.Fee = (-tradingFee).ToString("0.00"); + var RateDays = (eventDate - trade.StartDate.Value).Days; + RateDays = RateDays < 0 ? 0 : RateDays; + row.RateDays = RateDays.ToString(); + var MarginAmout = positions.Where(x => x.InterestMode == (int)InterestModeEnum.初始预付金).Sum(s => s.InterestPrincipalFix * (s.InterestDirection == (int)SwapDirectionEnum.收取 ? 1 : -1)); + row.MarginAmout = Math.Abs(MarginAmout).ToString("0.00"); + var MarginRebateRate = positions.Where(x => x.InterestMode == (int)InterestModeEnum.初始预付金).Sum(s => s.InterestRateDefault); + row.MarginRebateRate = MarginRebateRate.ToString("0.00%"); + + var MarginInterestAmount = unwindFlowEvents.Where(x => ConsTrade.InterestMarginModels.Contains(x.InterestMode)).Sum(s => s.InterestClosePnL); + row.MarginInterestAmount = (-MarginInterestAmount).ToString("0.00"); + + var InterestAmount = unwindFlowEvents.Where(x => ConsTrade.InterestModels.Contains(x.InterestMode)).Sum(s => s.InterestClosePnL) * -1; + row.InterestAmount = InterestAmount.ToString("0.00"); + + //var lastInterestAmount= swapEodPositions.Where(x => ConsTrade.InterestModels.Contains(x.InterestMode)).Sum(s => s.InterestIncomeSum); + //var lastPosiNotionalValue = swapEodPositions.Sum(s=>s.PosiNotionalValue); + //var InterestAmount = lastPosiNotionalValue==0?0: - lastInterestAmount* PosiNotionalValue/ lastPosiNotionalValue; + //row.InterestAmount = InterestAmount.ToString("0.00"); + + //var lastMarginAmount = swapEodPositions.Where(x => ConsTrade.InterestMarginModels.Contains(x.InterestMode)).Sum(s => s.InterestIncomeSum); + //var MarginInterestAmount = lastMarginAmount == 0 ? 0 : -lastMarginAmount * PosiNotionalValue / lastMarginAmount; + //row.MarginInterestAmount = MarginInterestAmount.ToString("0.00"); + var FloatRate = PosiNotionalValue == 0 ? 0 : InterestAmount / PosiNotionalValue; + row.FloatRate = FloatRate.ToString("0.0000%"); + var PosiPnl = -(flowEventGroup.MarkClosePnl - tradingFee - flowEventGroup.DividendIn); + row.PosiPnl = PosiPnl.ToString("0.00"); + var markClosePnl = (-flowEventGroup.MarkClosePnl); + row.MarkClosePnl = markClosePnl.ToString("0.00"); + row.DividendIn = (-flowEventGroup.DividendIn).ToString("0.00"); + var marginBackAmount = unwindFlowEvents.Where(x => ConsTrade.InterestMarginModels.Contains(x.InterestMode)).Sum(s => s.InterestPrincipal); + var NetSettleAmout = unwindFlowEvents.Sum(x => x.InterestClosePnL) * -1 + flowEventGroup.MarkClosePnl * -1 + marginBackAmount; + row.NetSettleAmout = NetSettleAmout.ToString("0.00"); + table.Add(row); + } + outPut.table = table; + dic["TRS结算单"] = outPut; + } protected override void PrepareViewData(Dictionary dic) { var client = Context.GetClient(); - var trades = Context.Trades; - var trade = trades.FirstOrDefault(); + if (string.IsNullOrEmpty(client.SettleFileNumber)) + { + throw new ServiceException($"{client.Name}未设置定义文件编号"); + } var flowEvents = Context.GetFlowEvents(); var allFlowEvents = Context.GetAllFlowEvents(); - - // 基础信息 - dic["客户名称"] = client.Name; - dic["乙方名称"] = client.Name; - - var eventDate = flowEvents.FirstOrDefault()?.UnwindDate; - dic["结算日期"] = eventDate?.ToString("yyyy年M月d日") ?? DateTime.Now.ToString("yyyy年M月d日"); - - // 交易信息 - dic["交易编号"] = trade?.TradeNumber ?? ""; - dic["交易类型"] = trade?.TradeType ?? ""; - dic["标的代码"] = trade?.UnderlyingCode ?? ""; - - var underlying = trade != null ? Context.GetTradeUnderlying(trade.UnderlyingCode) : null; - if (underlying != null) + var swapPositions = Context.GetSwapPositions(); + var trades = Context.Trades; + var eventDate = flowEvents.First().UnwindDate; + var td = trades.First(); + var realPositions = swapPositions.Where(x => x.PosiQuantity > 0 && !x.IsInitial).ToList(); + var posiNationalValue = realPositions.Sum(x => x.PosiNotionalValue); + var metaDic = Context.GetTradeMetas(td.id); + dic["主协议编号"] = metaDic[ConsTradeMetaKey.MainProtocolCode]; + dic["文件编号"] = client.SettleFileNumber; + dic["乙方"] = client.Name; + dic["管理人名称"] = client.Manager; + var confirmNo = Context.Gettrade_contract_r(td.id, ContractTypeEnum.Trade); + if (string.IsNullOrEmpty(confirmNo)) { - dic["标的名称"] = underlying.UnderlyingName; + throw new ServiceException($"{td.TradeNumber}未生成交易确认书"); } - - // 结算金额 - 从 flow events 计算 - var flowEvent = flowEvents.FirstOrDefault(); - if (flowEvent != null) + FormatToDict("平仓日期", eventDate, dic); + JArray table = new JArray(); + JArray table2 = new JArray(); + foreach (var flowEvent in flowEvents) { - var unwindFlowEvents = allFlowEvents.Where(x => x.EventId == flowEvent.EventId); - var NetSettleAmout = unwindFlowEvents.Sum(x => x.InterestClosePnL) * -1 - + flowEvent.MarkClosePnl * -1; - - dic["结算金额"] = NetSettleAmout.ToString("N2"); - dic["结算金额大写"] = Context.CmycurD(Math.Abs((double)NetSettleAmout)); - dic["结算价格"] = flowEvent.TradingAmountAvg.ToString("N4"); - dic["结算比例"] = "0.00%"; + var tradeId = flowEvent.SwapTradeId; + var positions = swapPositions.Where(x => x.SwapTradeId == tradeId).ToList(); + var posi = positions.FirstOrDefault(f => f.PositionId == flowEvent.PositionId); + JObject row = new JObject(); + row["交易确认书编号"] = confirmNo; + var ratio = flowEvent.PositionType == (int)PositionTypeFlag.Long ? 1 : -1; + row["多空方向"] = flowEvent.PositionType == (int)PositionTypeFlag.Long ? "多" : "空"; + FormatToDict("平仓日期", eventDate, row); + underlying_manager underlying = Context.GetTradeUnderlying(flowEvent.UnderlyingCode); + row["标的代码"] = flowEvent.UnderlyingCode; + row["标的名称"] = underlying?.UnderlyingName; + var preQty = flowEvent.Quantity + flowEvent.PositionQty ?? 0; + FormatToDict("平仓前数量", Convert.ToDouble(preQty) * ratio, row); + FormatToDict("平仓数量", Convert.ToDouble(flowEvent.Quantity), row); + FormatToDict("平仓后数量", Convert.ToDouble(flowEvent.PositionQty ?? 0) * ratio, row); + FormatToDict("平仓成交金额", Convert.ToDouble(flowEvent.Quantity * posi.PosiNetPrice * flowEvent.ContractSize), row); + table.Add(row); } - else + JObject row2 = new JObject(); + row2["交易确认书编号"] = confirmNo; + FormatToDict("平仓日期", eventDate, row2); + FormatToDict("平仓后名义本金", Convert.ToDouble(posiNationalValue), row2); + table2.Add(row2); + dic["table"] = table; + dic["table2"] = table2; + } + protected override string GetTemplateFilePath() + { + var trades = Context.Trades; + var templatePath = string.Empty; + if (trades.Any(s => s.StructureType == "多空组合" || s.StructureType == "定义文件型债券收益互换")) { - dic["结算金额"] = "0.00"; - dic["结算金额大写"] = Context.CmycurD(0); - dic["结算价格"] = "0.0000"; - dic["结算比例"] = "0.00%"; + templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs/settlement_template/dma_01.docx"); + return templatePath; } - - // 名义本金 - dic["名义本金"] = trade?.OriginalStockEqvNotional?.ToString("N2") ?? "0.00"; - - // 表格数据 - var table1 = new JArray(); - foreach (var fe in flowEvents) - { - var unwindFlowEvents = allFlowEvents.Where(x => x.EventId == fe.EventId); - var netAmount = unwindFlowEvents.Sum(x => x.InterestClosePnL) * -1 + fe.MarkClosePnl * -1; - var row = new JObject - { - ["交易编号"] = trade?.TradeNumber ?? "", - ["交易类型"] = trade?.TradeType ?? "", - ["标的代码"] = fe.UnderlyingCode ?? trade?.UnderlyingCode ?? "", - ["标的名称"] = underlying?.UnderlyingName ?? "", - ["结算金额"] = netAmount.ToString("N2") - }; - table1.Add(row); - } - dic["table1"] = table1; + templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs/settlement_template/nodma_01.xlsx"); + return templatePath; } - protected override void PrepareViewData(Dictionary dic) + protected override string GetOutputFileName(string contractNo, string contractIndex) { - var client = Context.GetClient(); var trades = Context.Trades; - var trade = trades.FirstOrDefault(); + var client = Context.GetClient(); var flowEvents = Context.GetFlowEvents(); - var allFlowEvents = Context.GetAllFlowEvents(); - - dic["客户名称"] = client.Name; - var eventDate = flowEvents.FirstOrDefault()?.UnwindDate; - dic["结算日期"] = eventDate?.ToString("yyyy-MM-dd") ?? DateTime.Now.ToString("yyyy-MM-dd"); - dic["交易编号"] = trade?.TradeNumber ?? ""; - dic["交易类型"] = trade?.TradeType ?? ""; - dic["标的代码"] = trade?.UnderlyingCode ?? ""; - - var underlying = trade != null ? Context.GetTradeUnderlying(trade.UnderlyingCode) : null; - dic["标的名称"] = underlying?.UnderlyingName ?? ""; - - var flowEvent = flowEvents.FirstOrDefault(); - if (flowEvent != null) + var eventDate = flowEvents.FirstOrDefault().UnwindDate.Value; + var valueDate = eventDate.ToString("yyyy-MM-dd"); + var count = Context.GetDMASelttementCount(client.id, eventDate); + var countStr = count == 0 ? "" : "-" + (count + 1).ToString(); + var FullName = $"结算单-{client.Name}-{valueDate}{countStr}"; + if (trades.Any(s => s.StructureType == "多空组合" || s.StructureType == "定义文件型债券收益互换")) { - var unwindFlowEvents = allFlowEvents.Where(x => x.EventId == flowEvent.EventId); - var NetSettleAmout = unwindFlowEvents.Sum(x => x.InterestClosePnL) * -1 + flowEvent.MarkClosePnl * -1; - dic["结算金额"] = NetSettleAmout; - dic["结算价格"] = flowEvent.TradingAmountAvg; + FullName = $"{client.Name}-结算确认书-{valueDate}-交易平仓{countStr}"; + return $"{FullName}.docx"; } - else - { - dic["结算金额"] = 0; - dic["结算价格"] = 0; - } - - dic["名义本金"] = trade?.OriginalStockEqvNotional ?? 0; + return $"{FullName}.xlsx"; } } } diff --git a/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeUnwindReportGenerator.cs b/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeUnwindReportGenerator.cs index 6cf6c32d..9e7a740f 100644 --- a/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeUnwindReportGenerator.cs +++ b/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeUnwindReportGenerator.cs @@ -6,7 +6,7 @@ using YLErp.Plugins.TradeDocGenerator.Abstracts; namespace YLErp.Plugins.GuoLian.DocumentGenerator { /// - /// 国联证券了结报告生成器 + /// ֤ȯ˽ᱨ /// internal class TradeUnwindReportGenerator : BaseUnwindReportGenerator, ITradeUnwindReportGenerator { @@ -17,124 +17,123 @@ namespace YLErp.Plugins.GuoLian.DocumentGenerator } /// - /// 准备Word模板数据 + /// ׼Wordģ /// protected override void PrepareViewData(Dictionary dic) { var table1 = new JArray(); var trade = Context.Trade; var client = Context.GetClient(); - var valueTimeList = new List(); + var valuetimelist = new List(); var underlying = Context.GetTradeUnderlying(); + var variety = Context.GetUnderlyingVariety(); var tradeCash = Context.GetTradeCash(); - var tradeList = Context.Trades.Union(Context.SubTrades).ToList(); - + 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 tradeCashItem in Context.TradeCashes[item.id]) + foreach (var tradeCashs in Context.TradeCashes[item.id]) { - var settlementPrice = (trade.IsUsePremiumRate != null && trade.IsUsePremiumRate.Value - ? tradeCashItem.UnwindPricePercentRate.OtcFormatPercent() - : tradeCashItem.UnwindPrice.OtcFormatMoney()); - + var settlementprice = (trade.IsUsePremiumRate != null && trade.IsUsePremiumRate.Value ? tradeCashs.UnwindPricePercentRate.OtcFormatPercent() : tradeCashs.UnwindPrice.OtcFormatMoney()); var row = new JObject(); - var currentTrade = tradeList.Find(o => o.id == tradeCashItem.TradeId); - - row["交易编号"] = currentTrade?.TradeNumber ?? ""; - - // 买卖方向处理 + OtcTradeBase trades = tradelist.Find(O => O.id == tradeCashs.TradeId); + row["ױ"] = trades.TradeNumber; switch (item.BuySell) { - case "买入": - row["买方"] = (trade.OpponentRole == null || trade.OpponentRole == "乙方") ? "甲方" : "乙方"; + case "": + if (trade.OpponentRole == null || trade.OpponentRole == "ҷ") + { + row[""] = $"׷"; + } + else + { + row[""] = $"ҷ"; + } break; - case "卖出": - row["买方"] = (trade.OpponentRole == null || trade.OpponentRole == "乙方") ? "乙方" : "甲方"; + case "": + if (trade.OpponentRole == null || trade.OpponentRole == "ҷ") + { + row[""] = $"ҷ"; + } + else + { + row[""] = $"׷"; + } break; default: - row["买方"] = ""; 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["交易日期"] = currentTrade?.TradeDate?.ToString("yyyy/MM/dd") ?? ""; - row["开始日期"] = $"{currentTrade?.StartDate:yyyy/MM/dd}-{currentTrade?.ExerciseDate:yyyy/MM/dd}"; - row["名义本金"] = currentTrade?.OriginalStockEqvNotional.OtcFormatMoney() ?? "0.00"; - row["标的代码"] = currentTrade?.UnderlyingCode ?? ""; - row["期权类型"] = currentTrade?.TradeType ?? ""; - row["期初价格"] = currentTrade?.TradePrice.OtcFormatMoney() ?? "0.00"; - row["结算日期"] = tradeCashItem.ValueDate.ToString("yyyy/MM/dd"); - row["结算价格"] = tradeCashItem.FinalPrice.OtcFormatMoney(); - row["结算模块"] = ((tradeCashItem.UnwindPercentRate ?? 0) * (currentTrade?.OriginalNotional ?? 0) * (underlying?.CountRatio ?? 0)).OtcFormatMoney() ?? "0.00"; - row["结算单价"] = settlementPrice; - - var amountQrs = -tradeCashItem.Amount; - var amountQrs2 = -(tradeCashItem.Amount + (currentTrade?.TradePrice ?? 0) * (tradeCashItem.UnwindPercentRate ?? 0) * ((currentTrade?.BuySell == "卖出") ? 1 : -1)); - - row["结算期权费"] = amountQrs.OtcFormatMoney(); - row["结算金额"] = amountQrs2.OtcFormatMoney(); - + row["Ȩ"] = $"{Amountqrs.OtcFormatMoney()}"; + row[""] = $"{Amountqrs2.OtcFormatMoney()}"; table1.Add(row); - valueTimeList.Add(tradeCashItem.ValueDate); + valuetimelist.Add(tradeCashs.ValueDate); } } - - // 合同编号由基类统一设置,此处不再重复生成 + dic["ͬ"] = Context.GenerateContractNo(out _); dic["table1"] = table1; - dic["合同日期"] = DateTime.Now.ToString("yyyy/MM/dd"); - dic["了结日期1"] = valueTimeList.Min().ToString("yyyy/MM/dd"); - dic["了结日期2"] = valueTimeList.Max().ToString("yyyy/MM/dd"); + dic["ͬ"] = $"{DateTime.Now.ToString("yyyy/MM/dd")}";//ValueDate + dic["˽1"] = $"{valuetimelist.Min():yyyy/MM/dd}"; + dic["˽2"] = $"{valuetimelist.Max():yyyy/MM/dd}"; - // 甲乙方信息 - var ownerInfo = Context.GetOwner_info("默认"); - dic["客户名称"] = client?.Name ?? ""; - dic["公司名称"] = ownerInfo?.FullName ?? ""; + #region ҷϢж - if (trade.OpponentRole == null || trade.OpponentRole == "乙方") + + 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["甲方"] = ownerInfo?.FullName ?? ""; - dic["乙方"] = client?.Name ?? ""; + dic["׷"] = owner_Info != null ? owner_Info.FullName != null ? owner_Info.FullName : "" : ""; + dic["ҷ"] = client != null ? client.Name : ""; } else { - dic["甲方"] = client?.Name ?? ""; - dic["乙方"] = ownerInfo?.FullName ?? ""; + dic["׷"] = client != null ? client.Name : ""; + dic["ҷ"] = owner_Info != null ? owner_Info.FullName != null ? owner_Info.FullName : "" : ""; } + + #endregion } - /// - /// 获取模板文件路径 - /// protected override string GetTemplateFilePath() { - var templatePath = Path.Combine(GlobalConfig.PluginFolder, "App_Docs\\settlement_template\\unwind_01.docx"); + 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 ownerInfo = Context.GetOwner_info("默认") ?? new Owner_info(); - - var maxTradeDate = tradeList.Max(m => m.TradeDate); - var minTradeDate = tradeList.Min(m => m.TradeDate); - - string date; - if (maxTradeDate == minTradeDate) + 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") ?? DateTime.Now.ToString("yyyyMMdd"); + date = trade.TradeDate?.ToString("yyyyMMdd"); } else { - date = $"{minTradeDate:yyyyMMdd}-{maxTradeDate:yyyyMMdd}"; + date = dts?.ToString("yyyyMMdd") + "-" + dte?.ToString("yyyyMMdd"); } - - var fullName = ownerInfo?.FullName ?? ""; - var rule = $"{fullName} {trade.TradeType}结算确认书 {date}"; + 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()}"; } diff --git a/Plugins/YLErp.Plugins.GuoLian/YLErp.Plugins.GuoLian.csproj b/Plugins/YLErp.Plugins.GuoLian/YLErp.Plugins.GuoLian.csproj index 58b7c9f7..5832ff46 100644 --- a/Plugins/YLErp.Plugins.GuoLian/YLErp.Plugins.GuoLian.csproj +++ b/Plugins/YLErp.Plugins.GuoLian/YLErp.Plugins.GuoLian.csproj @@ -26,6 +26,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/YLErpWeb/wwwroot/Scripts/app/trade/tradeApproval.js b/YLErpWeb/wwwroot/Scripts/app/trade/tradeApproval.js index 4dfc4855..47e66ab8 100644 --- a/YLErpWeb/wwwroot/Scripts/app/trade/tradeApproval.js +++ b/YLErpWeb/wwwroot/Scripts/app/trade/tradeApproval.js @@ -168,7 +168,7 @@ var colModelGrid = [ sortable: false, formatter: function (cellvalue, options, rowObject) { if (rowObject.TradeType === "收益互换") { - return otcformat.trading.umprice(cellvalue) * 100 + "%"; + return otcformat.flex(otcformat.trading.umprice(cellvalue), 2, 9, true, false, true); } return otcformat.trading.umprice(cellvalue); }