feat: 确认书协议段勾选框按客户主协议类型动态生成
在已合并为单段的协议段基础上,把 9 个勾选框(SAC/NAFMII 主协议与 补充协议、协会、三份定义文件)从模板硬编码(Wingdings 2 复选框与 固定文本□)改为占位符,由生成器按客户开户维护的 client_meta.MainProtocolType(1=NAFMII,其余 SAC)填 ☑/□, 避免 NAFMII 客户确认书错按 SAC 勾选展示。 - 修改 4 份确认书模板,移除全部 Wingdings 2 依赖 - TradeConfirmationGenerator 按主协议类型赋勾选值, 主协议类型缺失时记录日志并按 SAC 展示(与原行为一致) - 定义文件维度暂无客户协议数据,统一空框,待资料补齐后接入 - 新增 TestGuoLianConfirmTemplate 渲染测试覆盖 SAC/NAFMII 两类客户
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
using System.IO.Compression;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using YLErp.Office.Converters;
|
||||
|
||||
namespace YLErp.PluginTests
|
||||
{
|
||||
/// <summary>
|
||||
/// 国联确认书模板协议段勾选框占位符化后的渲染验证:
|
||||
/// 客户开户维护的主协议类型(client_meta.MainProtocolType,1=NAFMII,其余 SAC)
|
||||
/// 决定协议段 ☑/□ 勾选位置,模板不再依赖 Wingdings 2 硬编码复选框。
|
||||
/// </summary>
|
||||
[TestClass]
|
||||
public class TestGuoLianConfirmTemplate
|
||||
{
|
||||
private static string TemplatePath =>
|
||||
Path.Combine(AppContext.BaseDirectory, "..\\..\\..\\..\\Plugins\\YLErp.Plugins.GuoLian\\App_Docs\\contract_template",
|
||||
"国联民生-收益互换交易确认书-境内模板-【客户看多】-【现券】-清洁版.docx");
|
||||
|
||||
private static string OutputDir => Path.Combine(AppContext.BaseDirectory, "TestOutputs");
|
||||
|
||||
private static JsonVarDic BuildVarDic(bool isNafmii)
|
||||
{
|
||||
var varDic = new JsonVarDic();
|
||||
varDic.SetVar("合同编号", "GL-20260827-001");
|
||||
varDic.SetVar("客户名称", "测试客户");
|
||||
varDic.SetVar("主协议编号", "GL-ZU-2026-001");
|
||||
varDic.SetVar("补充协议编号", "GL-BC-2026-001");
|
||||
|
||||
static string Check(bool on) => on ? "☑" : "□";
|
||||
varDic.SetVar("主协议SAC勾选", Check(!isNafmii));
|
||||
varDic.SetVar("主协议NAFMII勾选", Check(isNafmii));
|
||||
varDic.SetVar("补充协议SAC勾选", Check(!isNafmii));
|
||||
varDic.SetVar("补充协议NAFMII勾选", Check(isNafmii));
|
||||
varDic.SetVar("协会证券业勾选", "□");
|
||||
varDic.SetVar("协会交易商勾选", "□");
|
||||
varDic.SetVar("定义文件商品勾选", "□");
|
||||
varDic.SetVar("定义文件利率勾选", "□");
|
||||
varDic.SetVar("定义文件债券勾选", "□");
|
||||
return varDic;
|
||||
}
|
||||
|
||||
private static string RenderAndReadBody(bool isNafmii, string fileName)
|
||||
{
|
||||
Directory.CreateDirectory(OutputDir);
|
||||
var targetPath = Path.Combine(OutputDir, fileName);
|
||||
OfficeFileConverter.ConvertByUsingDocTemplate(TemplatePath, targetPath, BuildVarDic(isNafmii));
|
||||
|
||||
using var zip = ZipFile.OpenRead(targetPath);
|
||||
var entry = zip.GetEntry("word/document.xml");
|
||||
using var stream = entry.Open();
|
||||
using var reader = new StreamReader(stream, Encoding.UTF8);
|
||||
var xml = reader.ReadToEnd();
|
||||
|
||||
// 勾选框与协议名称分属不同 run,断言前拼接纯文本
|
||||
var plainText = new StringBuilder();
|
||||
foreach (System.Text.RegularExpressions.Match m in System.Text.RegularExpressions.Regex.Matches(xml, @"<w:t[^>]*>(.*?)</w:t>"))
|
||||
{
|
||||
plainText.Append(m.Groups[1].Value);
|
||||
}
|
||||
return plainText.ToString();
|
||||
}
|
||||
|
||||
[TestMethod("测试-国联确认书-SAC客户协议段勾选")]
|
||||
public void TestSacAgreementChecked()
|
||||
{
|
||||
var body = RenderAndReadBody(isNafmii: false, "guolian_confirm_sac.docx");
|
||||
|
||||
Assert.IsTrue(body.Contains("☑《中国证券期货市场衍生品交易主协议》/"), "SAC 客户主协议应勾选 SAC");
|
||||
Assert.IsTrue(body.Contains("□《中国银行间市场金融衍生产品交易主协议(2009年版)》"), "SAC 客户主协议不应勾选 NAFMII");
|
||||
Assert.IsTrue(body.Contains("☑《中国证券期货市场衍生品交易主协议》补充协议"), "SAC 客户补充协议应勾选 SAC");
|
||||
Assert.IsFalse(body.Contains("{{主协议SAC勾选}}"), "协议段占位符应全部被替换");
|
||||
}
|
||||
|
||||
[TestMethod("测试-国联确认书-NAFMII客户协议段勾选")]
|
||||
public void TestNafmiiAgreementChecked()
|
||||
{
|
||||
var body = RenderAndReadBody(isNafmii: true, "guolian_confirm_nafmii.docx");
|
||||
|
||||
Assert.IsTrue(body.Contains("□《中国证券期货市场衍生品交易主协议》/"), "NAFMII 客户主协议不应勾选 SAC");
|
||||
Assert.IsTrue(body.Contains("☑《中国银行间市场金融衍生产品交易主协议(2009年版)》"), "NAFMII 客户主协议应勾选 NAFMII");
|
||||
Assert.IsTrue(body.Contains("☑《中国银行间市场金融衍生产品交易主协议(2009年版)补充协议》"), "NAFMII 客户补充协议应勾选 NAFMII");
|
||||
Assert.IsFalse(body.Contains("{{主协议NAFMII勾选}}"), "协议段占位符应全部被替换");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user