Files
zszq-trs/YLErpWeb/Views/trade/tradeView_DzStructure.cshtml
T
2024-05-09 14:06:26 +08:00

603 lines
28 KiB
Plaintext

@model TradeViewModel
@using YLErp.Modules.CalculationModule
@{
Layout = null;
var tradeModel = Model.Trade;
var isPremiumRate = tradeModel.IsUsePremiumRate == true;
var isMoneyness = tradeModel.IsMoneynessOption == "是";
var rebatFmt = isPremiumRate ? OtcFormatFlag.premiumRateP : OtcFormatFlag.tradeSinglePrice;
var volFmt = PS.Config.IsTradeVol && PS.Config.ErpElement.VolMoreAccurate ? OtcFormatFlag.percent4 : OtcFormatFlag.percent;
var salesNames = String.Join(",", Model.SalesCommission.Select(n => n.SalesmanName).ToArray());
tradeModel.TradeUnit = PS.Config.IsUseDisplayNotional ? (tradeModel.QuoteUnit == "500千克" ? "半吨" : tradeModel.QuoteUnit) : tradeModel.TradeUnit;
}
<div id="optionVueDiv">
<div class="tabbable">
<ul id="myTab" class="nav nav-tabs nav-main">
<li class="nav-item">
<a class="nav-link active" href="#baseInfo" data-toggle="tab">成交</a>
</li>
@if (Model.unWindTradeCashList != null && Model.unWindTradeCashList.Any())
{
<li class="nav-item">
<a class="nav-link" href="#terminationInfo" data-toggle="tab">提前终止</a>
</li>
}
@if (Model.maturityTradeCash != null)
{
<li class="nav-item">
<a class="nav-link" href="#maturityInfo" data-toggle="tab">到期</a>
</li>
}
@if (ConsTrade.TradeStatusAfterConfirmed.Contains(Model.Trade.TradeStatus))
{
<li class="nav-item">
<a class="nav-link" href="#ClientCashinCashout" data-toggle="tab">资金记录</a>
</li>
}
@if (Model.tradeMarginTemplates != null && Model.tradeMarginTemplates.Any())
{
<li class="nav-item">
<a class="nav-link" href="#tradeMarginTemplatesInfo" data-toggle="tab">预付金模板</a>
</li>
}
</ul>
</div>
<div class="tab-content">
<div id="baseInfo" class="tab-pane in active">
<table class="table table-bordered">
<tr>
<td class="tdRight">簿记账户</td>
<td>@(tradeModel.AssetBookName)</td>
@if (isPremiumRate)
{
<td class="tdRight">期权费率</td>
<td>
@(tradeModel.PremiumRate.OtcFormat(OtcFormatFlag.premiumRateP))
</td>
}
else
{
<td class="tdRight">权利金</td>
<td>
@(tradeModel.TradeSinglePrice.OtcFormat(OtcFormatFlag.tradeSinglePrice))
@if (tradeModel.TradeSinglePrice != null)
{
@(tradeModel.QuoteUnitSingle)
}
</td>
}
</tr>
<tr>
<td class="tdRight">交易员</td>
<td>@(tradeModel.TraderName)</td>
<td class="tdRight">有效成交数量</td>
<td>@(tradeModel.TradeOriginalAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional)) @(tradeModel.TradeUnit)</td>
</tr>
<tr>
<td class="tdRight">交易对手方</td>
<td>@(tradeModel.ClientName)</td>
<td class="tdRight">成交数量</td>
<td>@(TradeCalcHelper.GetTradeAmountV(tradeModel).OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional)) @(tradeModel.TradeUnit)</td>
</tr>
<tr>
<td class="tdRight">交易编号</td>
<td>@(tradeModel.TradeNumber)</td>
<td class="tdRight">成交总额</td>
<td>@(tradeModel.TradePrice.OtcFormatMoney())</td>
</tr>
<tr>
<td class="tdRight">交易方向</td>
<td>@(tradeModel.BuySell)</td>
<td class="tdRight">名义本金</td>
<td>@(tradeModel.OriginalStockEqvNotionalV2.OtcFormat(OtcFormatFlag.StockEqvNotional))</td>
</tr>
@if (!string.IsNullOrEmpty(Model.OriginalStockEqvNotionalV2MultipleExchangeRate))
{
<tr>
<td class="tdRight">名义本金(结算币种)</td>
<td>@Model.OriginalStockEqvNotionalV2MultipleExchangeRate</td>
<td class="tdRight"></td>
<td></td>
</tr>
}
<tr>
<td class="tdRight">期权类型</td>
<td>
@(tradeModel.ExerciseModeCn)
<a class="link-tradetype" href="#extendTradeInfo">@(tradeModel.TradeType.Replace("期权", ""))</a>@(tradeModel.OptionType)
</td>
<td class="tdRight">有效持仓数量</td>
<td>@(tradeModel.TradeAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))</td>
</tr>
<tr>
<td class="tdRight">标的代码</td>
<td>
<span>@(tradeModel.UnderlyingCode)</span>
</td>
<td class="tdRight">持仓数量</td>
<td>@(TradeCalcHelper.GetTradeAmountV(tradeModel, tradeModel.Notional).OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))</td>
</tr>
<tr>
<td class="tdRight">期初标的价格</td>
<td>@(tradeModel.SpotPrice.OtcFormat(OtcFormatFlag.umprice))</td>
<td class="tdRight">执行价格</td>
@if (tradeModel.trade_asian_option?.StrikeType == "Floating")
{
<td></td>
}
else
{
<td>@(tradeModel.StrikeToShow)</td>
}
</tr>
@if (PS.Config.IsTradeVol)
{
<tr>
<td class="tdRight">成交波动率</td>
<td>@(tradeModel.TradeOpenVolatility.OtcFormat(volFmt))</td>
<td class="tdRight">目标波动率</td>
<td>@(tradeModel.TradeCloseVolatility.OtcFormat(volFmt))</td>
</tr>
}
<tr>
<td class="tdRight">成交日期</td>
<td>@(tradeModel.TradeDate.OtcFormatDate())</td>
@if (PS.Config.IsTradeVol)
{
<td class="tdRight">平滑过渡天数</td>
<td>@(tradeModel.NumOfSmoothingDays)</td>
}
else
{
<td></td>
<td></td>
}
</tr>
<tr>
<td class="tdRight">权利金应付日</td>
<td>@(tradeModel.PremiumPayDate.OtcFormatDate())</td>
<td></td>
<td></td>
</tr>
<tr>
<td class="tdRight">保底收益</td>
<td>
@if (isPremiumRate)
{
@(tradeModel.PrincipalRateWrite.OtcFormatPercent())
}
else
{
@(tradeModel.SinglePrincipalWrite.OtcFormatMoney())
if (tradeModel.TradeSinglePrice != null)
{
@(tradeModel.QuoteUnitSingle)
}
}
</td>
<td class="tdRight">保底收益总额</td>
<td>@(tradeModel.OriginalPrincipalSum.OtcFormatMoney())</td>
</tr>
<tr>
<td class="tdRight">到期日期</td>
<td>@(tradeModel.ExerciseDate.OtcFormatDate())</td>
<td class="tdRight">无风险利率</td>
<td>@(tradeModel.NoRiskRate.OtcFormatPercent())</td>
</tr>
<tr>
<td class="tdRight">结算日期</td>
<td>@(tradeModel.SettlementDate.OtcFormatDate())</td>
<td class="tdRight">分红率</td>
<td>@(tradeModel.DividendRate.OtcFormatPercent())</td>
</tr>
<tr>
<td class="tdRight">参与率</td>
<td>@(tradeModel.ParticipationRate.OtcFormatPercent())</td>
<td class="tdRight">收益结算</td>
<td>@(tradeModel.SettlementTypeDesc)</td>
</tr>
@{ tradeModel.MetaDic.TryGetValue("AnnualizeFactor", out var factor);}
<tr>
<td class="tdRight">期权年化</td>
<td>@(tradeModel.IsAnnualized ? '是' : '否')</td>
<td class="tdRight">年化系数</td>
<td>@(factor)</td>
</tr>
<tr>
<td class="tdRight">交易状态</td>
<td>@(tradeModel.TradeStatus)</td>
<td class="tdRight">有效名义本金</td>
<td>@(tradeModel.StockEqvNotionalReal.OtcFormat(OtcFormatFlag.StockEqvNotional))</td>
</tr>
<tr>
<td class="tdRight">预付金模板</td>
<td>@tradeModel.MarginTemplateName</td>
<td class="tdRight">预付金算法</td>
<td>@(YLErp.Helpers.EnumHelper.GetDescriptionByName<MarginTypeEnum>(tradeModel.MarginType))</td>
</tr>
<tr>
<td class="tdRight">初始预付金率</td>
<td>@(tradeModel.MarginType <= MarginTypeEnum.NONE ? "" : tradeModel.MarginRate.OtcFormat(OtcFormatFlag.marginRateP))</td>
<td class="tdRight">持仓预付金率</td>
<td>@(tradeModel.MarginType == MarginTypeEnum.FIXED || tradeModel.MarginType == MarginTypeEnum.FLOATP ? tradeModel.PositionMarginRate.OtcFormat(OtcFormatFlag.marginRateP) : "")</td>
</tr>
@if (PS.Config.Company == CompanyEnum.国海)
{
tradeModel.MetaDic.TryGetValue(YLErp.DBModels.Consts.ConsTradeMetaKey.CCR_K, out var ccr_k);
tradeModel.MetaDic.TryGetValue(YLErp.DBModels.Consts.ConsTradeMetaKey.ignoreRiskExposure, out var ignoreRiskExposure);
<tr>
<td class="tdRight">CCR指标k值</td>
<td>@ccr_k</td>
<td class="tdRight">信用风险敞口</td>
<td>@(ignoreRiskExposure != "1"? "参与计算":"忽略")</td>
</tr>
}
@if (Model.showInitialMargin)
{
<tr>
<td class="tdRight">初始预付金</td>
<td>@(tradeModel.InitialMargin.OtcFormatMoney())</td>
<td></td>
<td></td>
</tr>
}
@if (AppHelper.UseFutureVersion("销售提成", "V2"))
{
<tr>
<td class="tdRight"> @(PS.Config.ErpElement.SaleMode == YLErp.Configuration.Enums.SaleMode.SaleMen ?"销售员":"客户经理")</td>
<td>@(salesNames)</td>
<td class="tdRight">销售提成</td>
<td>@(Model.SalesCommission.FirstOrDefault()?.CommissionString())</td>
</tr>
}
@{
tradeModel.MetaDic.TryGetValue(YLErp.DBModels.Consts.ConsTradeMetaKey.ClearingAgency, out var clearingAgency);
tradeModel.MetaDic.TryGetValue(YLErp.DBModels.Consts.ConsTradeMetaKey.TradingPlace, out var tradingPlace);
tradeModel.MetaDic.TryGetValue(YLErp.DBModels.Consts.ConsTradeMetaKey.MainProtocolCode, out var mainProtocolCode);
tradeModel.MetaDic.TryGetValue(YLErp.DBModels.Consts.ConsTradeMetaKey.SupProtocolCode, out var supProtocolCode);
}
@if (!PS.Config.Is润和)
{
<tr>
<td class="tdRight">交易场所</td>
<td>@(tradingPlace)</td>
<td class="tdRight">清算机构</td>
<td>@(clearingAgency)</td>
</tr>
}
@if (PS.Config.ErpElement.SecuritiesEnvironment)
{
<tr>
<td class="tdRight">主协议编号</td>
<td>@(mainProtocolCode)</td>
<td class="tdRight">补充协议编号</td>
<td>@(supProtocolCode)</td>
</tr>
}
<tr>
<td class="tdRight">是否有效</td>
<td>@(tradeModel.ValidState == "InValid" ? "否" : "是")</td>
@if (!PS.Config.Is润和)
{
<td class="tdRight">交易对手方</td>
<td>@(tradeModel.OpponentRole ?? "乙方")</td>
}
else
{
<td class="tdRight"></td>
<td></td>
}
</tr>
<tr>
<td class="tdRight">备注</td>
<td colspan="3">
@if (tradeModel.RemarkInfo != null && tradeModel.RemarkInfo.StartsWith("http://"))
{
<a href="@(tradeModel.RemarkInfo)" style="text-decoration:underline;" target="_blank">@(tradeModel.RemarkInfo)</a>
}
else
{
@(tradeModel.RemarkInfo)
}
</td>
</tr>
@if (CurUser.交易管理_交易标签查看权限)
{
<tr>
<td class="tdRight">标签</td>
<td colspan="3">
<div class="tag-context" style="width:100%;display:inline-block;line-height:36px;text-align:left;">
@if (Model.Tags != null && Model.Tags.Any())
{
foreach (var tag in Model.Tags)
{
<span class="tag-item" data-id="@tag.Id" data-name="@tag.Name">
<span class="tag-text" data-value="@tag.Id">@tag.Name</span>
@if (CurUser.交易管理_交易标签调整权限)
{
<span class="tag-remove" onclick="DeleteTag('@tag.Name')">x</span>
}
</span>
}
}
@if (CurUser.交易管理_交易标签调整权限)
{
<span class="tag-add">+</span>
}
</div>
</td>
</tr>
}
</table>
<a id="extendTradeInfo"></a>
@{
tradeModel.MetaDic.TryGetValue("cashOrPhysical", out var cashOrPhysical);
tradeModel.MetaDic.TryGetValue("structures", out var structures);
tradeModel.MetaDic.TryGetValue("observationDate", out var observationDate);
}
<table class="table table-bordered table-exotic">
<tr>
<td class="tdRight">结算类型</td>
<td> @(cashOrPhysical)</td>
<td class="tdRight">结构要素</td>
<td>
@{
if (!structures.IsNullOrWhiteSpace())
{
@MyControls.Btn("查看", string.Format("showstructuresInfos('{0}','{1}')", structures, tradeModel.id))
}
}
</td>
</tr>
<tr>
<td class="tdRight">观察日</td>
<td>
@{
@MyControls.Btn("编辑", string.Format("editObservationInfos('{0}','{1}')", observationDate, tradeModel.id))
}
</td>
<td class="tdRight"></td>
<td></td>
</tr>
</table>
</div>
@if (Model.unWindTradeCashList != null)
{
var index = 1;
<div id="terminationInfo" class="tab-pane">
@foreach (var tradeCash in Model.unWindTradeCashList)
{
if (tradeCash.Action == "系统操作-行权费")
{
<table class="table table-bordered">
<tr>
<td class="tdRight">提前终止序号</td>
<td>@(index++)</td>
@if (isPremiumRate)
{
<td class="tdRight">行权比例</td>
<td>@(tradeCash.NotionalPercent.OtcFormatPercent())</td>
}
else
{
<td class="tdRight">行权数量</td>
<td>@(tradeCash.TradeAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))</td>
}
</tr>
<tr>
<td class="tdRight">行权日期</td>
<td>@(tradeCash.ValueDate.OtcFormatDate())</td>
<td class="tdRight">收益总额</td>
<td>@(tradeCash.Amount.OtcFormatMoney())</td>
</tr>
<tr>
<td class="tdRight">行权收益</td>
<td>@(tradeCash.SingleWinPrice.OtcFormat(OtcFormatFlag.tradeSinglePrice))</td>
<td class="tdRight">实现盈亏</td>
<td>@(tradeCash.WinLoss)</td>
</tr>
<tr>
<td class="tdRight">行权标的价格</td>
<td>@(tradeCash.FinalPrice.OtcFormat(OtcFormatFlag.umprice))</td>
<td></td>
<td></td>
</tr>
</table>
}
else
{
<table class="table table-bordered">
<tr>
<td class="tdRight">提前终止序号</td>
<td>@(index++)</td>
@if (isPremiumRate)
{
<td class="tdRight">平仓单价</td>
<td>@(tradeCash.UnwindPricePercentRate.OtcFormat(OtcFormatFlag.premiumRateP))</td>
}
else
{
<td class="tdRight">平仓单价</td>
<td>@(tradeCash.UnwindPrice.OtcFormat(OtcFormatFlag.tradeSinglePrice))</td>
}
</tr>
<tr>
<td class="tdRight">平仓日期</td>
<td>@(tradeCash.ValueDate.OtcFormatDate())</td>
@if (isPremiumRate)
{
<td class="tdRight">平仓比例</td>
<td>@(tradeCash.UnwindPercentRate.OtcFormatPercent())</td>
}
else
{
<td class="tdRight">平仓数量</td>
<td>@(tradeCash.UnwindTradeAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))</td>
}
</tr>
<tr>
<td class="tdRight">平仓标的价格</td>
<td>@(tradeCash.FinalPrice.OtcFormat(OtcFormatFlag.umprice))</td>
<td class="tdRight">平仓总额</td>
<td>@(tradeCash.Amount.OtcFormatMoney())</td>
</tr>
<tr>
<td class="tdRight">平仓波动率</td>
<td>@(tradeCash.UnwindVol.OtcFormat(volFmt))</td>
<td class="tdRight">实现盈亏</td>
<td>@(tradeCash.WinLoss)</td>
</tr>
</table>
}
}
</div>
}
@if (Model.maturityTradeCash != null)
{
var mtc = Model.maturityTradeCash;
var asianStrikeType = tradeModel.TradeType != "亚式期权" ? string.Empty : (tradeModel.trade_asian_option?.StrikeType == "Floating" ? "Floating" : "Fixed");
<div id="maturityInfo" class="tab-pane">
<table class="table table-bordered">
<tr>
<td class="tdRight">到期日期</td>
<td>@(mtc.ValueDateString)</td>
@if (isPremiumRate)
{
<td class="tdRight">到期比例</td>
<td>@(mtc.NotionalPercent.OtcFormatPercent())</td>
}
else
{
<td class="tdRight">到期数量</td>
<td>@(mtc.TradeAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))</td>
}
</tr>
<tr>
@if (isPremiumRate && mtc.Action != "系统操作-行权费")
{
<td class="tdRight">到期收益</td>
<td>@(mtc.SingleWinPricePercent.OtcFormat(OtcFormatFlag.premiumRateP))</td>
}
else
{
<td class="tdRight">到期收益</td>
<td>@(mtc.SingleWinPrice.OtcFormat(OtcFormatFlag.tradeSinglePrice))</td>
}
<td class="tdRight">实现盈亏</td>
<td>@(mtc.WinLoss)</td>
</tr>
<tr>
<td class="tdRight">@(asianStrikeType == "Fixed" ? "到期标的均价": "到期标的价格" )</td>
<td>@(mtc.FinalPrice.OtcFormat(OtcFormatFlag.umprice))</td>
<td class="tdRight">收益总额</td>
<td>@(mtc.Amount.OtcFormatMoney())</td>
</tr>
@if (!string.IsNullOrEmpty(asianStrikeType))
{
<tr>
@if (asianStrikeType == "Fixed")
{
<td class="tdRight">到期标的价格</td>
<td>@(mtc.SpotPrice.OtcFormat(OtcFormatFlag.umprice))</td>
}
else
{
<td class="tdRight">浮动行权价</td>
<td>@(mtc.Strike.OtcFormat(OtcFormatFlag.umprice))</td>
}
<td></td>
<td></td>
</tr>
}
</table>
</div>
}
@if (Model.tradeMarginTemplates != null && Model.tradeMarginTemplates.Any())
{
<div id="tradeMarginTemplatesInfo" class="tab-pane">
<table class="table table-bordered">
<tr>
<th>模板名称</th>
<th>预付金规则</th>
<th>规则类型</th>
<th>生效日期</th>
<th>操作时间</th>
<th>规则说明</th>
</tr>
@foreach (var tradeMarginTemplate in Model.tradeMarginTemplates)
{
<tr>
<td>@(tradeMarginTemplate.MarginTemplateName)</td>
<td>@(tradeMarginTemplate.MarginRuleTypeName)</td>
<td>@(tradeMarginTemplate.MarginTypeName)</td>
<td>@(tradeMarginTemplate.ValueDate.ToString("yyyy-MM-dd"))</td>
<td>@(tradeMarginTemplate.OptDate)</td>
<td>@(tradeMarginTemplate.Comments)</td>
</tr>
}
</table>
</div>
}
@if (ConsTrade.TradeStatusAfterConfirmed.Contains(Model.Trade.TradeStatus))
{
<div id="ClientCashinCashout" class="tab-pane">
<div style="display:inline;right:100px;">
@if (CurUser.交易管理_交易资金维护)
{
<button id="" class="btn btn-primary " type="button" onclick="Addentryexit(0,@Model.Trade.id);return false;">
新增
</button>
if (YLErp.PS.Config.ClientElement.InterfaceApprovalMode == 0)
{
<button id="" class="btn btn-primary " type="button" onclick="setExcute();return false;">
确认
</button>
<button id="" class="btn btn-primary " type="button" onclick="setReject();return false;">
拒绝
</button>
}
}
</div>
<div style="min-width: 1000px;" id="entryexitEditPopInner"></div>
</div>
}
</div>
</div>
<div class="modal fade" id="myCommentsModal" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content">
<!-- 模态框头部 -->
<div class="modal-header">
<h4 class="modal-title">修改备注</h4>
<button type="button" class="close" v-on:click="closeModal()">&times;</button>
</div>
<!-- 模态框主体 -->
<div class="modal-body">
<lable>备注</lable>
<input v-model="Comments" />
<input hidden v-model="EncryptId" />
</div>
<!-- 模态框底部 -->
<div class="modal-footer">
<button type="button" class="btn" v-on:click="saveModal()">保存</button>
</div>
</div>
</div>
</div>