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

516 lines
24 KiB
Plaintext

@model TradeViewModel
@using YLErp.Modules.CalculationModule
@{
Layout = null;
var tradeModel = Model.Trade;
var isPremiumRate = tradeModel.IsUsePremiumRate == true;
var salesNames = String.Join(",", Model.SalesCommission.Select(n => n.SalesmanName).ToArray());
var isJd = tradeModel.UnderlyingCode?.Trim().ToUpper().StartsWith("JD") ?? false;
tradeModel.TradeUnit = PS.Config.IsUseDisplayNotional ? (tradeModel.QuoteUnit == "500千克" ? "半吨" : (isJd ? "吨" : tradeModel.QuoteUnit)) : tradeModel.TradeUnit;
var volFmt = PS.Config.IsTradeVol && PS.Config.ErpElement.VolMoreAccurate ? OtcFormatFlag.percent4 : OtcFormatFlag.percent;
}
<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>
}
</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.TradeType)</td>
<td class="tdRight">有效名义本金</td>
<td>@(tradeModel.StockEqvNotionalReal.OtcFormat(OtcFormatFlag.StockEqvNotional))</td>
</tr>
<tr>
<td class="tdRight">标的代码</td>
<td>
@if (tradeModel.TradeType == "合成价差期权")
{
<a href="javascript:void(0)" class="selftooltip" style="z-index:10000000" data-toggle="tooltip" title="@(tradeModel.SyntheticUnderlyingTipsInfo)">@(tradeModel.UnderlyingCode)</a>
}
else
{
<span>@(tradeModel.UnderlyingCode)</span>
}
</td>
<td class="tdRight">期初标的价格</td>
<td>@(tradeModel.SpotPrice.OtcFormat(OtcFormatFlag.umprice))</td>
</tr>
<tr>
<td class="tdRight">成交日期</td>
<td>@(tradeModel.TradeDate.OtcFormatDate())</td>
<td class="tdRight">执行价格</td>
<td>@(tradeModel.StrikeToShow)</td>
</tr>
<tr>
<td class="tdRight">到期日期</td>
<td>@(tradeModel.ExerciseDate.OtcFormatDate())</td>
<td class="tdRight">有效持仓数量</td>
<td>@(tradeModel.TradeAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))</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.NumOfSmoothingDays)</td>
<td></td>
<td></td>
</tr>
}
<tr>
<td class="tdRight">交易状态</td>
<td>@(tradeModel.TradeStatus)</td>
<td class="tdRight">权利金应付日</td>
<td>@(tradeModel.PremiumPayDate.OtcFormatDate())</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.ParticipationRate.OtcFormatPercent())</td>
<td class="tdRight">分红率</td>
<td>@(tradeModel.DividendRate.OtcFormatPercent())</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.StructureType</td>
<td class="tdRight">结构说明</td>
<td>@(tradeModel.StructureIntroduction)</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>
}
<tr>
<td class="tdRight">观察信息</td>
<td>
@{
if (tradeModel.trade_custom != null && !tradeModel.trade_custom.ObservationDates.IsNullOrWhiteSpace())
{
var colInfos = "['日期']";
@MyControls.Btn("查看", string.Format("showObservationInfos('{0}',{1},'{2}')", "观察信息", colInfos, tradeModel.trade_custom.ObservationDates))
}
}
</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>
@{
tradeModel.MetaDic.TryGetValue(YLErp.DBModels.Consts.ConsTradeMetaKey.kiObservationRate, out var kiObservationDate);
@(!string.IsNullOrEmpty(kiObservationDate) && kiObservationDate.IndexOf("|") > 0 ?
kiObservationDate.Substring(kiObservationDate.IndexOf('|') + 1).Replace("DAIL", " 日度").Replace("WEEK", " 周度").Replace("MNTH", " 月度").Replace("YEAR", " 年度").Replace("OTHER", "其他") : "其他")
}
</td>
</tr>
<tr>
<td class="tdRight">备注</td>
<td colspan="3">@(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>
@if (tradeModel.Propertys != null)
{
var i = 0;
var length = tradeModel.Propertys.Count;
var preProperty = new ExtendInfoModel();
<table class="table table-bordered table-exotic">
@foreach (var property in tradeModel.Propertys)
{
i++;
if (i % 2 == 1)
{
preProperty = property;
if (i == length)
{
<tr>
<td class="tdRight">@property.name</td>
<td>@property.value</td>
<td class="tdRight"></td>
<td></td>
</tr>
}
}
else
{
<tr>
<td class="tdRight">@preProperty.name</td>
<td>@preProperty.value</td>
<td class="tdRight">@property.name</td>
<td>@property.value</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.FinalPrice.OtcFormat(OtcFormatFlag.umprice))</td>
<td class="tdRight">实现盈亏</td>
<td>@(tradeCash.WinLoss)</td>
</tr>
<tr>
@if (isPremiumRate)
{
<td class="tdRight">行权收益</td>
<td>@(tradeCash.SingleWinPricePercent.OtcFormat(OtcFormatFlag.premiumRateP))</td>
}
else
{
<td class="tdRight">行权收益</td>
<td>@(tradeCash.SingleWinPrice.OtcFormat(OtcFormatFlag.tradeSinglePrice))</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.OtcFormatPercent())</td>
}
else
{
<td class="tdRight">平仓单价</td>
<td>@(tradeCash.UnwindPrice.OtcFormat(OtcFormatFlag.umprice))</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.WinLoss)</td>
<td></td>
<td></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 (tradeModel.TradeType == "累计期权")
{
<td></td>
<td></td>
}
else 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 (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>
<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>