fix: 国联民生收益互换支持审批前生成交易确认书
- 仅国联民生收益互换支持在新增待确认、修改待确认、审批中生成交易确认书,期权、其他公司及其他交易状态保持原限制 - 交易确认书页面同步开放上述交易的“生成确认书”按钮,后端批量生成链路同步放开状态过滤 - 审批前生成仅校验客户、标的、初始持仓等模板必需核心数据;不以银行账户、联系人、保证金等非模板必填资料阻断 - 审批前已生成确认书的交易被修改时,使该交易原确认书关联失效,重新生成仍按原覆盖逻辑处理 - 审批拒绝时清理该交易审批前生成的确认书关联、OA 结果及用印队列;无其他有效引用时删除确认书数据,避免遗留无效确认书 - 保持原交易编号逻辑:自动生成和手工填写均不复用已拒绝交易编号 - 新增审批前适用范围、确认书关联及 OA 清理谓词专项单测
This commit is contained in:
+106
@@ -0,0 +1,106 @@
|
||||
using YLErp.Configuration;
|
||||
using YLErp.DBModels;
|
||||
using YLErp.DBModels.Consts;
|
||||
using YLErp.DBModels.Enums;
|
||||
using YLErp.Modules.TradeModule.DocGenerateModule;
|
||||
|
||||
namespace YLErp.UnitTestProject.Modules.TradeModule.DocGenerateModule
|
||||
{
|
||||
[TestClass]
|
||||
public class GuolianSwapConfirmBookScopeTest
|
||||
{
|
||||
[TestMethod]
|
||||
public void IsPreApprovalTrade_AllAllowedStatuses_ReturnsTrue()
|
||||
{
|
||||
var statuses = new[]
|
||||
{
|
||||
ConsTrade.新增待确认,
|
||||
ConsTrade.修改待确认,
|
||||
ConsTrade.审批中
|
||||
};
|
||||
|
||||
foreach (var status in statuses)
|
||||
{
|
||||
var trade = CreateTrade(status);
|
||||
|
||||
Assert.IsTrue(GuolianSwapConfirmBookScope.IsPreApprovalTrade(trade, CompanyEnum.国联), status);
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void IsPreApprovalTrade_NonGuolianSwapOrInvalidTrade_ReturnsFalse()
|
||||
{
|
||||
var confirmedSwap = CreateTrade(ConsTrade.确认成交);
|
||||
var optionTrade = CreateTrade(ConsTrade.审批中, "香草期权");
|
||||
var invalidSwap = CreateTrade(ConsTrade.审批中);
|
||||
invalidSwap.ValidState = ConsGlobal.InValid;
|
||||
|
||||
Assert.IsFalse(GuolianSwapConfirmBookScope.IsPreApprovalTrade(confirmedSwap, CompanyEnum.国联));
|
||||
Assert.IsFalse(GuolianSwapConfirmBookScope.IsPreApprovalTrade(optionTrade, CompanyEnum.国联));
|
||||
Assert.IsFalse(GuolianSwapConfirmBookScope.IsPreApprovalTrade(CreateTrade(ConsTrade.审批中), CompanyEnum.国泰君安));
|
||||
Assert.IsFalse(GuolianSwapConfirmBookScope.IsPreApprovalTrade(invalidSwap, CompanyEnum.国联));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void OtherActiveReferencePredicate_OnlyMatchesOtherActiveTrade()
|
||||
{
|
||||
const string contractCode = "GLMS-TEST-20260728-FICC-04-000001";
|
||||
var predicate = GuolianSwapConfirmBookCleanupService
|
||||
.BuildOtherActiveReferencePredicate(contractCode, 4)
|
||||
.Compile();
|
||||
|
||||
Assert.IsFalse(predicate(CreateRelation(4, contractCode, ContractTypeEnum.Trade, true)));
|
||||
Assert.IsTrue(predicate(CreateRelation(7, contractCode, ContractTypeEnum.Trade, true)));
|
||||
Assert.IsFalse(predicate(CreateRelation(7, contractCode, ContractTypeEnum.Trade, false)));
|
||||
Assert.IsFalse(predicate(CreateRelation(7, "OTHER", ContractTypeEnum.Trade, true)));
|
||||
Assert.IsFalse(predicate(CreateRelation(7, contractCode, ContractTypeEnum.Clearing, true)));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TradeConfirmationRelationPredicate_MatchesActiveAndInactiveRelations()
|
||||
{
|
||||
const string contractCode = "GLMS-TEST-20260728-FICC-04-000001";
|
||||
var predicate = GuolianSwapConfirmBookCleanupService
|
||||
.BuildTradeConfirmationRelationPredicate(4)
|
||||
.Compile();
|
||||
|
||||
Assert.IsTrue(predicate(CreateRelation(4, contractCode, ContractTypeEnum.Trade, true)));
|
||||
Assert.IsTrue(predicate(CreateRelation(4, contractCode, ContractTypeEnum.Trade, false)));
|
||||
Assert.IsFalse(predicate(CreateRelation(7, contractCode, ContractTypeEnum.Trade, true)));
|
||||
Assert.IsFalse(predicate(CreateRelation(4, contractCode, ContractTypeEnum.Clearing, true)));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ActiveOaResultPredicate_OnlyMatchesRejectedTradeActiveResult()
|
||||
{
|
||||
var predicate = GuolianSwapConfirmBookCleanupService
|
||||
.BuildActiveOaResultPredicate(4)
|
||||
.Compile();
|
||||
|
||||
Assert.IsTrue(predicate(new trade_contract_oa_result { trade_id = 4, is_valid = true }));
|
||||
Assert.IsFalse(predicate(new trade_contract_oa_result { trade_id = 4, is_valid = false }));
|
||||
Assert.IsFalse(predicate(new trade_contract_oa_result { trade_id = 7, is_valid = true }));
|
||||
}
|
||||
|
||||
private static trade CreateTrade(string status, string tradeType = "收益互换")
|
||||
{
|
||||
return new trade
|
||||
{
|
||||
TradeType = tradeType,
|
||||
TradeStatus = status,
|
||||
ValidState = ConsGlobal.Valid
|
||||
};
|
||||
}
|
||||
|
||||
private static trade_contract_r CreateRelation(int tradeId, string contractCode, string type, bool isValid)
|
||||
{
|
||||
return new trade_contract_r
|
||||
{
|
||||
TradeId = tradeId,
|
||||
ContractCode = contractCode,
|
||||
Type = type,
|
||||
IsValid = isValid
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user