/**
* 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 = $("