/** * Created by chen on 2017/8/1. */ var feeRateObject={ mainViews:null, datas:null, canEdit:false, activateFeeRate:null, needCascadeSet:false, selectionLoad:false, changeInfo:null, feeRateSpreads:null, sheetSetting: { header: [ {headerName: "专业名称", headerWidth: 200, dataCode: "name", dataType: "String"}, {headerName: "值%", headerWidth: 150, dataCode: "rate", dataType: "String"}, {headerName: "备注", dataCode: "memo", dataType: "String"} ], view: { comboBox: [], lockColumns: [0, 1, 2] } }, columns: [ { id: 'name', caption: '专业名称', dataField: 'name', width: 450, allowEditing: false }, { id: 'rate', caption: '值%', dataField: 'rate', format: '0.000', width: 120, minWidth: 50, allowEditing: true }, { id: 'memo', caption: '备注', dataField: 'memo', minWidth: 120, allowEditing: true }, { id: 'ID', caption: 'ID', dataField: 'ID', width: 80, visible: false, allowEditing: false }, { id: 'subFeeRate', caption: '子费率', dataField: 'subFeeRate', width: 80, visible: false, allowEditing: false }, { id: '_id', caption: '自动ID', dataField: '_id', width: 80, visible: false, allowEditing: false }, { id: 'ParentID', caption: '父结点ID', dataField: 'ParentID', width: 80, visible: false, allowEditing: false } ], options :{ allowSorting: false, showRowHeader: true, colMinWidth: 80, rowHeight: 30, allowEditing: true, editMode: 'inline', editUnit: 'cell', selectionUnit: "row", hierarchy: { keyField: 'ID', parentField: 'ParentID', collapsed: false, column: 'name' } }, dataSource : { loadRange: function(params) { params.success(feeRateObject.datas); }, update: function(params) { if(!params.hasOwnProperty('sourceIndex')){ var selected = feeRateObject.mainViews.getSelections()[0]; params.sourceIndex = selected.sourceRow; } params.success(); if(!$('#cascadeSet').prop('checked')||params.hasOwnProperty('viewIndex')){ projectObj.project.FeeRate.updateFeeRateByEdit(params,feeRateObject.activateFeeRate); } } }, createSheet:function(){ feeRateObject.feeRateSpreads=sheetCommonObj.buildSheet($('#fee_rate_sheet')[0], feeRateObject.sheetSetting,30); //gljOprObj.gljLibSpresd.bind(GC.Spread.Sheets.Events.ButtonClicked,gljOprObj.onButtonClick); feeRateObject.feeRateSheet = feeRateObject.feeRateSpreads.getSheet(0); feeRateObject.feeRateSheet.selectionUnit(1)//0 cell,1 row,2 col; feeRateObject.feeRateSheet.options.isProtected = true; feeRateObject.feeRateSheet.name('fee_rate'); }, showSelectTree:function () { var sheet= feeRateObject.feeRateSheet; sheet.suspendPaint(); sheet.suspendEvent(); sheet.rowOutlines.direction(GC.Spread.Sheets.Outlines.OutlineDirection.backward); sheet.getRange(-1, 0, -1, 1).cellType(feeRateObject.getTreeNodeCellType()); sheet.setValue(0, 0, "Permanent Differences"); sheet.setValue(1, 0, "Permanent Differences"); sheet.setValue(2, 0, "4P01 - Club Dues"); sheet.setValue(3, 0, "4P02 - Business Gifts"); sheet.setValue(4, 0, "4P03 - Int Inc-Muni Borads"); sheet.setValue(5, 0, "4P04 - Lobbying Expense"); sheet.setValue(6, 0, "4P05 - Skybox"); sheet.setValue(7, 0, "4P06 - Stock Options-Perm"); sheet.setValue(8, 0, "4P07 - M&E"); sheet.setValue(9, 0, "Total Permanent Differences"); sheet.setValue(10, 0, "Capital Loss Limitation"); sheet.setValue(11, 0, "Capital Gain/Loss, Sum included in Book income"); sheet.setValue(12, 0, "Capital Loss Disallowed"); sheet.setValue(13, 0, "Charitable Contribution Limitation"); sheet.setValue(14, 0, "Charitable Contributions included in Book income"); sheet.setValue(15, 0, "Demestic production activities deduction included in Book income"); sheet.setValue(16, 0, "Fedeeral Taxable Income Limitation"); sheet.setValue(17, 0, "Limitation percentage"); sheet.setValue(18, 0, "Charitable Contribution limitation"); sheet.setValue(19, 0, "Charitable Contributions disallowed"); sheet.setValue(20, 0, "Federal Taxable Income before Net Operating Loss Deduction"); sheet.rowOutlines.group(1, 10); sheet.rowOutlines.group(3, 7); sheet.rowOutlines.group(12, 2); sheet.rowOutlines.group(15, 6); // sheet.getRange(-1, 0, -1, 1).width(300); sheet.showRowOutline(false); sheet.resumeEvent(); sheet.resumePaint(false); }, getTreeNodeCellType:function () { var ns = GC.Spread.Sheets; function TreeNodeCellType() { } TreeNodeCellType.prototype = new ns.CellTypes.Text(); TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) { var level = options.sheet.rowOutlines.getLevel(options.row); var nlevel = -1; if (options.row < options.sheet.getRowCount() - 1) { nlevel = options.sheet.rowOutlines.getLevel(options.row + 1); } var hoffset = (level + 2) * 12; x += hoffset; w -= hoffset; GC.Spread.Sheets.CellTypes.Base.prototype.paint.apply(this, arguments); if (options.row == options.sheet.getRowCount() - 1) return; //last row if (nlevel > level) { var collapsed = options.sheet.rowOutlines.isCollapsed(options.row + 1); x--; y += h / 2 - 3; ctx.save(); ctx.fillStyle = "black"; ctx.beginPath(); if (collapsed) { ctx.moveTo(x - 5, y); ctx.lineTo(x, y + 3); ctx.lineTo(x - 5, y + 6); } else { ctx.moveTo(x, y); ctx.lineTo(x, y + 5); ctx.lineTo(x - 5, y + 5); } ctx.fill(); ctx.restore(); } else { x--; y += h / 2 - 3; ctx.save(); ctx.restore(); } }; // override getHitInfo to allow cell type get mouse messages TreeNodeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) { return { x: x, y: y, row: context.row, col: context.col, cellStyle: cellStyle, cellRect: cellRect, sheetArea: context.sheetArea }; } TreeNodeCellType.prototype.processMouseDown = function (hitinfo) { var level = hitinfo.sheet.rowOutlines.getLevel(hitinfo.row); var hoffset = (level + 2) * 12 + hitinfo.cellRect.x; if (hitinfo.x < hoffset && hitinfo.x > hoffset - 10) { var collapsed = hitinfo.sheet.rowOutlines.isCollapsed(hitinfo.row + 1); hitinfo.sheet.rowOutlines.setCollapsed(hitinfo.row, !collapsed); hitinfo.sheet.invalidateLayout(); hitinfo.sheet.repaint(); } }; return new TreeNodeCellType() }, createSpreadView:function () { if (this.mainViews) { this.mainViews.destroy(); this.mainViews = null; } this.activateFeeRate = projectObj.project.FeeRate.getActivateFeeRate(); this.datas = this.activateFeeRate.rates; this.mainViews = new GC.Spread.Views.DataView($('#divFee')[0], this.dataSource, this.columns, new GC.Spread.Views.Plugins.GridLayout(this.options)); this.mainViews["rowClick"].addHandler(subRateObject.reFreshRateViews); this.mainViews .invalidate(); document.querySelector('#divFee').focus(); }, reFreshRateViews:function() { if(this.mainViews){ this.mainViews.refresh() }else { feeRateObject.createSpreadView(); //setTimeout("feeRateObject.createSpreadView()",100); } }, updateBySelect:function (rate,selectMap,mapID) { var selected = this.mainViews.getSelections()[0]; var item = this.datas[selected.sourceRow]; item.rate = rate; _.forEach(selectMap,function (value,key) { var recode = item.subFeeRate.recodes[key]; var optionList = recode.optionList; _.forEach(optionList,function (o) { if(o.value==value){ o.selected=true; }else { o.selected = false; } }) }) if($('#cascadeSet').prop('checked')){ this.cascadeSetRates(item,selected.sourceRow,mapID,selectMap) }else { this.mainViews.data.updateItem(selected.sourceRow,item); } projectObj.project.FeeRate.synchronizeFeeRate(); //this.views.data.updateItem() }, cascadeSetRates:function(selectedItem,sourceRow,mapID,selectMap){ var items=[]; items.push({rateIndex:sourceRow,rate:selectedItem}); _.forEach(this.datas,function (recode,Index) { if(Index!=sourceRow&&recode.subFeeRate){ var valueMaps = recode.subFeeRate.valueMaps; var valueMap = _.find(valueMaps,{ID:mapID}); if(valueMap){//选项完全一样的情况 if(valueMap.value==recode.rate){ return; }else { recode.rate = valueMap.value; _.forEach(selectMap,function (value,key) { var tempRecode = recode.subFeeRate.recodes[key]; var optionList = tempRecode.optionList; _.forEach(optionList,function (o) { if(o.value==value){ o.selected=true; }else { o.selected = false; } }) }) items.push({rateIndex:Index,rate:recode}); } }else {//某条选项一样的情况 var needUpdate = false; var selectList = mapID.split('-'); var newList=[]; _.forEach(recode.subFeeRate.recodes,function (r) { var oList = r.optionList; var oldSelectIndex=0; var hasChange=false; _.forEach(oList,function (o,key) { if(o.selected){ oldSelectIndex = key; } if(_.includes(selectList,o.value)){ needUpdate=true; o.selected=true; hasChange=true; newList.push(o.value); }else { o.selected=false; } }) if(!hasChange){ oList[oldSelectIndex].selected=true; newList.push(oList[oldSelectIndex].value) } }) if(needUpdate){ var newValue = _.find(valueMaps,{ID:newList.join("-")})//取出费率值并更新 if(newValue){ if(recode.rate != newValue.value){ recode.rate = newValue.value items.push({rateIndex:Index,rate:recode}); } } } } } }) _.forEach(items,function (t) { feeRateObject.mainViews.data.updateItem(t.rateIndex,t.rate); }) projectObj.project.FeeRate.batchUpdateFeeRate(items,feeRateObject.activateFeeRate); }, loadPageContent:function(){ var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate(); var usageProjects = feeRateFile.usageProjects; $('#feeRateFileName').text(feeRateFile.name); $('#feeRateLibName').text(feeRateFile.libName); $('#projectCount').text(usageProjects.length); }, loadFeeRateSelection:function() { if(!this.selectionLoad){ var selectedID=0; _.forEach(projectObj.project.FeeRate.datas,function (data) { var option = $("