function getColModelGrid() { var i = 0; var colModelGrid = [ { name: 'rowFlag', label: ' ', width: 30, optionHide: true, formatter: expandFormat, align: 'center', sortable: false }, { name: 'trade_cash.id', hidden: true, optionHide: true, key: true }, { name: 'trade.id', hidden: true, optionHide: true }, { name: 'id', hidden: true, optionHide: true }, { name: 'trade.IsMoneynessOption', label: 'trade.IsMoneynessOption', index: 'trade.IsMoneynessOption', sortIndex: i++, width: 70, align: 'center', hidden: true, optionHide: true }, { name: 'trade.EncryptId', label: 'trade.EncryptId', index: 'trade.EncryptId', sortIndex: i++, width: 70, align: 'center', hidden: true, optionHide: true }, { name: 'trade.TradeStatus', label: '交易状态', index: 'trade.TradeStatus', sortIndex: i++, width: 100, align: 'center', formatter: tradeStatusFormat }, { name: 'trade.TradeNumber', label: '交易编号', index: 'trade.TradeNumber', sortIndex: i++, width: 150, align: 'center' }, { name: 'trade.AssetBookName', label: '簿记帐户', index: 'trade.AssetBookName', sortIndex: i++, width: 150, align: 'center' }, { name: 'trade.ClientName', label: '交易对手方', index: 'trade.ClientName', sortIndex: i++, width: 300, align: 'center' }, { name: 'trade.TradeDate', label: '成交日期', index: 'trade.TradeDate', sortIndex: i++, width: 90, align: 'center', formatter: 'date' }, { name: 'trade.ExerciseDate', label: '到期日期', index: 'trade.ExerciseDate', sortIndex: i++, width: 90, align: 'center', formatter: 'date' }, { name: 'trade.BuySell', label: '买卖方向', index: 'trade.BuySell', sortIndex: i++, width: 70, align: 'center' }, { name: 'trade.ExerciseMode', label: '行权方式', index: 'trade.ExerciseMode', sortIndex: i++, width: 70, align: 'center', formatter: function (cellValue, options, rowObject) { return rowObject.trade.ExerciseModeCn; } }, { name: 'trade.TradeType', label: '结构类型', index: 'trade.TradeType', sortIndex: i++, width: 120, align: 'center', formatter: function (cellvalue, options, rowObject) { return rowObject.trade.StructureType && rowObject.trade.IsGroup != 2 ? rowObject.trade.StructureType : rowObject.trade.TradeType; } }, { name: 'trade.OptionType', label: '看涨看跌', index: 'trade.OptionType', sortIndex: i++, width: 70, align: 'center' }, { name: 'trade.UnderlyingCode', label: '标的代码', index: 'trade.UnderlyingCode', sortIndex: i++, width: 100, align: 'center', formatter: ShowStructFormater }, { name: 'trade.UnderlyingName', label: '标的名称', index: 'trade.UnderlyingName', sortIndex: i++, width: 100, align: 'center', sortable: false }, { name: 'trade.InitialSpotPrice', label: '期初标的价格', index: 'trade.InitialSpotPrice', sortIndex: i++, width: 90, align: 'right', formatter: initialSpotPriceFormat, sortable: false }, { name: 'trade.Strike', label: '执行价格', index: 'trade.Strike', sortIndex: i++, width: 90, align: 'right', formatter: strikeFormat }, { name: 'trade.TradeSinglePrice', label: '权利金(成交)', index: 'trade.TradeSinglePrice', sortIndex: i++, width: 90, align: 'right', formatter: TradeSinglePriceFormat }, { name: 'trade.OriginalStockEqvNotional', label: '名义本金', index: 'trade.OriginalStockEqvNotional', sortIndex: i++, width: 70, align: 'center', formatter: doubleFormat }, { name: 'TradeOriginalAmount', label: '成交数量', width: 70, sortable: false, formatter: function (cellvalue, options, rowObject) { if (page.IsUseDisplayNotional) { return otcformat.trading.notional(tradeHelper.getTradeAmountV(rowObject.trade) * (rowObject.trade.CountRatio || 1)); } return otcformat.trading.notional(tradeHelper.getTradeAmountV(rowObject.trade)); } }, { name: 'trade.OriginalNotional', label: '有效成交数量', index: 'trade.OriginalNotional', sortIndex: i++, width: 96, align: 'right', sortable: false, formatter: function (cellValue, options, rowObject) { if (page.IsUseDisplayNotional) { return otcformat.trading.notional(rowObject.trade.TradeOriginalAmount * (rowObject.trade.CountRatio || 1)); } return otcformat.trading.notional(rowObject.trade.TradeOriginalAmount); } }, { name: 'trade.TradePrice', label: '成交总额', index: 'trade.TradePrice', width: 120, align: 'right', sortable: false, sortIndex: i++, formatter: otcformat.trading.tradePrice }, { name: 'trade_cash.ValueDate', label: '终止日期', index: 'trade_cash.ValueDate', sortIndex: i++, width: 95, align: 'right', formatter: 'date' }, { name: 'trade_cash.FinalPrice', label: '终止标的价格', index: 'trade_cash.FinalPrice', width: 120, align: 'right', sortable: false, sortIndex: i++, formatter: otcformat.trading.umprice }, { name: 'WinLoss', label: '实现盈亏', index: 'WinLoss', width: 100, align: 'right', sortable: false, sortIndex: i++, formatter: winLossFormat }, { name: 'trade_cash.UnwindPrice', label: '权利金(终止)', index: 'trade_cash.UnwindPrice', sortIndex: i++, width: 90, align: 'right', formatter: unwindPriceFormat }, { name: 'trade_cash.UnwindTradeAmount', label: '终止数量', index: 'trade_cash.UnwindTradeAmount', sortIndex: i++, width: 70, align: 'center', formatter: unwindTradeAmountFormat }, { name: 'trade_cash.Amount', label: '终止金额', index: 'trade_cash.Amount', sortIndex: i++, width: 70, align: 'right', formatter: otcformat.trading.tradePrice } , { name: 'trade.Comments', label: '备注', index: 'trade.Comments', sortIndex: i++, width: 140, align: 'left', hidden: true } , { name: 'trade.TraderName', label: '交易员', index: 'trade.TraderName', sortIndex: i++, width: 140, align: 'left' } ]; //if (g_isTradeVol) { // colModelGrid.push({ // name: 'trade.TradeOpenVolatility', // label: '成交波动率', // index: 'trade.TradeOpenVolatility', // sortIndex: i++, // width: 65, // sortable: false, // align: 'center', // formatter: PercentFormat // }); // colModelGrid.push({ // name: 'trade.TradeCloseVolatility', // label: '目标波动率', // index: 'trade.TradeCloseVolatility', // sortIndex: i++, // width: 65, // sortable: false, // align: 'center', // formatter: PercentFormat // }); // colModelGrid.push({ // name: 'trade.NumOfSmoothingDays', // label: '平滑过渡天数', // index: 'trade.NumOfSmoothingDays', // sortIndex: i++, // width: 65, // sortable: false, // align: 'center' // }); //} return colModelGrid; } function exportTrade() { main.GetSortedGridObjs = function (ggrid) { var rowIds = ggrid.jqGrid('getGridParam', 'selarrrow'); var rowDatas = ggrid.getRowData(); if (main.isEmpty(rowIds)) { return []; } var ors = $.grep(rowDatas, function (ele, index) { return rowIds.some(function (rowId) { return rowId === ele["trade_cash.id"]; }); }); ors.forEach(function (item, index) { if (item !== null) { Object.keys(item).forEach(function (key) { const regex = /#=(.*?)#/g; var result = regex.exec(item[key]); if (result) { item[key] = result[1]; } }); } }); return ors; }; var dateTemp = new Date().Format("yyyyMMddhhmmss"); var fileName = "Trade_" + page.tabName + "_" + dateTemp; main.toExcel("listGrid", fileName, "xls", null, " ,操作者,操作时间,操作", [{ colName: "标的代码", formatter: function (cellValue, options, rowObject) { if (rowObject["trade.TradeType"] === "合成价差期权") { return rowObject.trade.SyntheticUnderlyingTipsInfo; } return cellValue; } }]); } var g_grid = {}; $(function () { showTabTotalCount(); $("#Btn_BatchExpire").hide(); $("#tab1NotShow").hide(); $("#tab3_4NotShow").show(); var PostData = {}; PostData.ValueDateStart = page.valueDate; PostData.ValueDateEnd = page.valueDate; PostData.TabIndex = page.tabIndex; PostData.IsHistoryWithUnconfirmed = true; $(".datepicker").datepicker({ changeMonth: true, changeYear: true, showButtonPanel: true, showOtherMonths: true, selectOtherMonths: true }); var colModelGrid = getColModelGrid(); grid = jQuery('#listGrid').jqGrid({ url: "/clientbalance/GetPreEndList", datatype: 'json', multiselect: true, height: '500px', width: '96%', autowidth: false, shrinkToFit: false, viewrecords: true, jsonReader: { repeatitems: false }, caption: '', mtype: 'POST', postData: PostData, colModel: colModelGrid, pager: jQuery('#pagerGrid'), pagerpos: 'left', ondblClickRow: rowdblclick, rowNum: 500, rowList: [20, 30, 50, 200, 500, 10000], footerrow: false, loadComplete: gridComplete, grouping: true }); main.isSearching = true; g_grid = jQuery('#listGrid'); function keyEnter(event) { try { var e = event || window.event || {}; if (e.keyCode === 13) { SearchClick(true); } } catch (e) { // } } document.onkeydown = keyEnter; let underlyingCtrl = new tradeHelper.UnderlyingSelectCtrl('#UnderlyingId').setFlag(tradeHelper.UnderlyingSelectFlag.OtcTrade); }); function showTabTotalCount() { main.post("/trade/tradeCountsOnValueDateQuery").done(function (data) { for (var i in data) { $(`#tab${i}`).find("a").attr("title", `总数${data[i]}笔`); } $(".selftooltip").tooltip({ html: true, show: 50000, trigger: "hover" }); }); } function rowdblclick(rowid) { var rowData = $(this).getRowData(rowid); starttradeView(rowData["trade.EncryptId"], rowData["trade.TradeType"]); } function setStructTable(rowObject) { structTrades = rowObject.SubTrades; var trhtml = ""; var trcode = "标的代码{1}".template(structTrades.length, rowObject.trade.UnderlyingCode); var trstrike = "执行价格"; var trbuysell = "买卖方向"; var trvarity = "结构类型{1}".template(structTrades.length, rowObject.trade.StructureType); var trstockeqvnotional = "名义本金{1}".template(structTrades.length, (new Number(rowObject.trade.StockEqvNotional) / 10000).toFixed(2) + "万"); var trmaturedate = "到期日期{1}".template(structTrades.length, moment(rowObject.trade.ExerciseDate).format("YYYY-MM-DD")); //trtradestatus = "交易状态{1}".template(structTrades.length, rowObject.TradeStatus); if (structTrades) { for (var i = 0; i < structTrades.length; i++) { trstrike += "{0}".template(structTrades[i].IsMoneynessOption === "是" ? (new Number(structTrades[i].Strike) * 100).toFixed(2) + "%" : structTrades[i].Strike); trbuysell += "{0}".template(structTrades[i].BuySell); } } trhtml = "{0}".template(trcode); trhtml += "{0}".template(trstrike); trhtml += "{0}".template(trbuysell); trhtml += "{0}".template(trstockeqvnotional); trhtml += "{0}".template(trmaturedate); //trhtml += "{0}".template(trtradestatus); trhtml += "{0}".template(trvarity); return "{0}
".template(trhtml); } function ShowStructFormater(cellValue, options, rowObject) { var html; //if (rowObject.trade.TradeType === "结构化交易") { // html = "{0}" // .template(cellValue || '', setStructTable(rowObject)); // return html; //} if (rowObject.trade.TradeType === "合成价差期权") { html = "{0}" .template(cellValue || '', rowObject.trade.SyntheticUnderlyingTipsInfo); return html; } return cellValue || ''; } function NotionalFormat(cellValue, options, rowObject) { return rowObject.trade.TradeStatus === "已执行" || rowObject.trade.TradeStatus === "已到期" || rowObject.trade.TradeStatus === "已平仓" ? 0 : cellValue; } function unwindTradeAmountFormat(cellValue, options, rowObject) { var amount = rowObject.trade_cash.Action === "系统操作-行权费" ? rowObject.trade_cash.TradeAmount : rowObject.trade_cash.UnwindTradeAmount; if (page.IsUseDisplayNotional) { return otcformat.trading.notional(amount * (rowObject.trade.CountRatio || 1)); } return amount; } function unwindPriceFormat(cellValue, options, rowObject) { if (rowObject.trade.IsUsePremiumRate) { return rowObject.trade_cash.Action == "系统操作-行权费" ? otcformat.trading.tradeSinglePrice(Math.abs(rowObject.trade_cash.UnwindPrice)) : otcformat.trading.premiumRateP(Math.abs(rowObject.trade_cash.UnwindPricePercentRate)); } else { return otcformat.trading.tradeSinglePrice(Math.abs(rowObject.trade_cash.UnwindPrice)); } } function doubleFormat(cellValue, options, rowObject) { return cellValue === null || cellValue === undefined ? "0.00" : otcformat.trading.StockEqvNotional(cellValue) === "NaN" ? "0.00" : otcformat.trading.StockEqvNotional(cellValue); } //盈亏从机构方角度看,需要去反(源数据是和盯市报告一样,以客户角度来看的) function winLossFormat(cellValue, options, rowObject) { return cellValue === null || cellValue === undefined ? "0.000" : otcformat.trading.tradePrice(cellValue) === "NaN" ? "0.000" : otcformat.trading.tradePrice(-cellValue); } function tradeStatusFormat(cellValue, options, rowObject) { return (rowObject.trade_cash.Action === "系统操作-行权费" || ((rowObject.trade.TradeStatus === "行权待复核" || rowObject.trade.TradeStatus === "平仓待复核") && rowObject.trade_cash.ValidState === "InValid")) ? rowObject.trade.TradeStatus : (rowObject.trade_cash.Action === "系统操作-互换" ? "互换" : (rowObject.trade_cash.Notional - rowObject.trade_cash.UnwindNotional > 1e-5 ? "部分平仓" : "已平仓")); } function PercentFormat(cellValue, options, rowObject) { if (cellValue) { var num = new Number(cellValue) * 100; return num.toFixed(2) + "%"; } else { return "0.00%"; } } function TradeSinglePriceFormat(cellValue, options, rowObject) { if (rowObject.trade.IsUsePremiumRate) { return otcformat.trading.premiumRateP(rowObject.trade.PremiumRate); } else { return otcformat.trading.tradeSinglePrice(cellValue); } } function gridComplete() { var jgrid = $(this); var newHeight = $(window).height() - 400; $(".ui-jqgrid .ui-jqgrid-bdiv").css("cssText", "height: " + newHeight + "px!important;"); $('.ui-jqgrid-bdiv', '#gbox_listGrid').floatingScroll(); $(".selftooltip").tooltip({ html: true, show: 50000, trigger: "hover" }); main.setcolumnChooser(jgrid, page.configcolumn_name); } function customButton(cellValue, options, rowObject) { var imageHtml = ""; return imageHtml; } function downloadFiles(files) { if (files instanceof Array) { if (files.length > 0) { $.each(files, function (index, val) { val && setTimeout(function () { window.open(val); }, 500); }); } } else { files && window.open(files); } } function showToolName(cellValue, options, rowObject) { var html = "" .template(rowObject.trade.EncryptId, "查看", rowObject.trade.TradeType); return html; } function initialSpotPriceFormat(cellValue, options, rowObject) { return otcformat.trading.umprice(rowObject.trade.InitialSpotPrice) || otcformat.trading.umprice(rowObject.trade.SpotPrice); } function ThreeFormat(cellValue, options, rowObject) { return cellValue ? numeral(cellValue).format("0.000") : "0.000"; } function strikeFormat(cellValue, options, rowObject) { if (rowObject.trade.TradeType == "自定义交易") { return rowObject.trade.StrikeToShow; } else if (rowObject.trade.TradeType === "收益互换") { return "--"; } if (rowObject.trade.Strike) { if (rowObject.trade.IsMoneynessOption === "是") { return otcformat.trading.umprice(rowObject.trade.InitialSpotPrice * rowObject.trade.Strike); } else { return otcformat.trading.umprice(rowObject.trade.Strike); } } else { if (rowObject.trade.Strike === 0) { return otcformat.trading.umprice(0); } else { return ""; } } } //展开折叠 function expandFormat(cellValue, options, rowObject) { var hasExpandIcon = rowObject.trade.IsGroup == 1; if (hasExpandIcon) { return ``; } return ""; } function toggleExpand(rowid) { event.stopPropagation(); $(event.target).toggleClass('fa-minus'); if ($(event.target).hasClass('fa-minus')) { main.post("/clientbalance/GetPreEndGroupChildren", { TcId: rowid }).done(function (res) { for (var i = 0; i < res.length; i++) { jQuery('#listGrid').jqGrid('addRowData', res[i].trade_cash.id, res[i], 'after', rowid); $('#' + res[i].trade_cash.id).find("td").addClass("ChildrenBG"); } }); } else { main.post("/clientbalance/GetPreEndGroupChildren", { TcId: rowid }).done(function (res) { for (var i = 0; i < res.length; i++) { jQuery('#listGrid').jqGrid('delRowData', res[i].trade_cash.id); } }); } } function rowclick(id) { } function starttradeView(id, tradeType) { main.open("查看交易", "/trade/tradeView/?enid={0}".template(id)); } function reloadtrade() { //重新加载 SearchClick(); $('#modal-edittrade').modal('hide'); } function setGridPostData() { var listGrid = $('#listGrid'); listGrid.appendPostData({ TradeNumber: $("#TradeNumber").val() }); listGrid.appendPostData({ ClientIds: $("#ClientId").val() }); listGrid.appendPostData({ AssetIds: $("#AssetId").val() }); listGrid.appendPostData({ TraderIds: $("#TraderId").val() }); listGrid.appendPostData({ UnderlyingIds: $("#UnderlyingId").val() }); listGrid.appendPostData({ VarietyIds: $("#VarietyId").val() }); listGrid.appendPostData({ TradeDateStart: $("#DateFromTradeDate").val() }); listGrid.appendPostData({ TradeDateEnd: $("#DateToTradeDate").val() }); listGrid.appendPostData({ BuySell: $("#BuySell").val() }); listGrid.appendPostData({ OptionType: $("#OptionType").val() }); listGrid.appendPostData({ StartDateStart: $("#DateFromStartDate").val() }); listGrid.appendPostData({ StartDateEnd: $("#DateToStartDate").val() }); listGrid.appendPostData({ TradeStatus: $("#TradeStatus").val() }); listGrid.appendPostData({ TradeTypes: $("#TradeTypes").val() }); listGrid.appendPostData({ Comments: $("#Comments").val() }); listGrid.appendPostData({ ExerciseDateStart: $("#DateFromExerciseDate").val() }); listGrid.appendPostData({ ExerciseDateEnd: $("#DateToExerciseDate").val() }); listGrid.appendPostData({ ExerciseMode: $("#ExerciseMode").val() }); listGrid.appendPostData({ TabIndex: page.tabIndex }); } function SearchClick(isSearchclick) { setGridPostData(); if (isSearchclick) { //点击搜索时默认第一页 $('#listGrid').jqGrid('setGridParam', { page: 1 }); } $('#listGrid').trigger('reloadGrid'); } function showcolumnChooser() { var jgrid = jQuery('#listGrid'); main.showcolumnChooser(jgrid, page.configcolumn_name); } function downCsv(fileName, exStrr, fileExtension) { if (!fileExtension) { fileExtension = ".csv"; } var isIE = navigator.userAgent.indexOf('MSIE') >= 0; if (isIE) { var strHTML = exStrr; var winSave = window.open(); winSave.document.open("text", "utf-8"); winSave.document.write(strHTML); winSave.document.execCommand("SaveAs", true, fileName + fileExtension); winSave.close(); } else { var mimeType = 'text/plain'; $('#createInvote').attr('download', fileName + fileExtension); //\uFEFF bom $('#createInvote').attr('href', 'data:' + mimeType + ';charset=utf-8,\uFEFF' + encodeURIComponent(exStrr)); document.getElementById('createInvote').click(); } } //执行到期行权 无确认界面 function SetAsExpired(id) { var ors = []; if (id) { ors.push(id); } else { var ggrid = jQuery('#listGrid'); var selectedIds = jQuery('#listGrid').jqGrid('getGridParam', 'selarrrow'); if (selectedIds.length > 0) { for (var i = 0; i < selectedIds.length; i++) { var or = ggrid.getRowData(selectedIds[i]).id; ors.push(or); } } } //批量到期 main.confirm("确认批量执行到期吗?", function () { main.post("/trade/MultipleTradeExpireConfirm/", { tradeIds: ors }).done(function (res) { //showmiddlemessage(res.msg); reloadtrade(); }); }); }