MWF.xApplication.BAM.monthly = MWF.xApplication.BAM.monthly || {};
MWF.xApplication.BAM.monthly.MonthlyContent = new Class({
Extends: MWF.widget.Common,
Implements: [Options, Events],
options: {
"style": "default"
},
initialize: function(monthly, node, options){
this.setOptions(options);
this.path = "../x_component_BAM/monthly/$MonthlyContent/";
this.cssPath = "../x_component_BAM/monthly/$MonthlyContent/"+this.options.style+"/css.wcss";
this._loadCss();
this.monthly = monthly;
this.app = this.monthly.app;
this.actions = this.app.actions;
this.container = $(node);
this.initData();
this.load();
},
initData: function(){
this.sort = {
"type": "application",
"range": {}
};
this.filter = {
"company": "",
"department": "",
"person": "",
"application": "",
"applicationName": "",
"process":"",
"processName":"",
"activity": "",
"activityName": ""
};
},
clearFilter: function(){
this.filter = {
"unit": "",
"topUnit": "",
// "company": "",
// "department": "",
"person": "",
"application": "",
"applicationName": "",
"process":"",
"processName":"",
"activity": "",
"activityName": ""
};
},
reload: function(){
this.sortActionTextNode.set("html", this.getSortHtml());
this.filterActionTextNode.set("html", this.getFilterHtml());
this.table.destroy();
this.chart.destroy();
this.app.mask();
this.loadData(function(){
this.loadTable();
this.loadChart();
this.fireEvent("loaded");
}.bind(this));
},
load: function(){
this.node = new Element("div", {"styles": this.css.monthNode}).inject(this.container);
this.titleAreaNode = new Element("div", {"styles": this.css.monthTitleAreaNode}).inject(this.node);
this.sortByAreaNode = new Element("div", {"styles": this.css.monthSortByAreaNode}).inject(this.titleAreaNode);
this.filterAreaNode = new Element("div", {"styles": this.css.monthFilterAreaNode}).inject(this.titleAreaNode);
this.chartAreaNode = new Element("div", {"styles": this.css.monthChartAreaNode}).inject(this.node);
this.tableAreaNode = new Element("div", {"styles": this.css.monthTableAreaNode}).inject(this.node);
this.createSortNode();
this.createFilterNode();
this.app.mask();
this.loadData(function(){
this.loadTable();
this.loadChart();
this.fireEvent("loaded");
}.bind(this));
},
createSortNode: function(){
this.sortActionNode = new Element("div", {"styles": this.css.sortActionNode}).inject(this.sortByAreaNode);
this.sortActionTitleNode = new Element("div", {"styles": this.css.sortActionTitleNode}).inject(this.sortActionNode);
this.sortActionTextNode = new Element("div", {"styles": this.css.sortActionTextNode}).inject(this.sortActionNode);
this.sortActionTitleNode.set("text", this.app.lp.monthly.sort);
this.sortActionTextNode.set("html", this.getSortHtml());
this.selectSort();
},
selectSort: function(){
if (!this.sortSelectMenu){
this.sortSelectMenu = new MWF.xDesktop.Menu(this.sortActionTitleNode, {
"event": "click",
"style": "BAMStyle",
"offsetX": -1,
"offsetY": -1,
"container": this.app.content,
"onQueryShow": function(){
for (var i=0; i<5; i++){
//this.sortSelectMenu.items[i].setDisable(false);
this.sortSelectMenu.items[i].item.getFirst().empty();
}
var arr = ["company", "department", "application", "process", "activity"];
var idx = arr.indexOf(this.sort.type);
if (idx!=-1){
//this.sortSelectMenu.items[idx].setDisable(true);
//this.sortSelectMenu.items[idx].
src = "../x_component_BAM/monthly/$MonthlyContent/"+this.options.style+"/icon/selected.png";
var img = new Element("img", {"styles": this.sortSelectMenu.css.menuItemImg, "src": src}).inject(this.sortSelectMenu.items[idx].item.getFirst());
}
}.bind(this),
"onPostShow": function(){
var szie = this.sortActionNode.getSize();
var menuSzie = this.sortSelectMenu.borderNode.getSize();
if (szie.x>menuSzie.x){
this.sortSelectMenu.node.setStyle("width", ""+szie.x+"px");
}
}.bind(this),
"onPostHide": function(){
this.sortSelectMenu.node.setStyle("width", "auto");
this.sortActionNode.setStyles(this.css.sortActionNode);
this.sortMenu = false;
this.sortActionTitleNode.setStyles(this.css.sortActionTitleNode);
}.bind(this)
});
this.sortSelectMenu.load();
this.sortSelectMenu.addMenuItem(this.app.lp.monthly.sortItems.topUnit, "click", function(){this.sortSelected("topUnit");}.bind(this));
this.sortSelectMenu.addMenuItem(this.app.lp.monthly.sortItems.unit, "click", function(){this.sortSelected("unit");}.bind(this));
//this.sortSelectMenu.addMenuItem(this.app.lp.monthly.sortItems.company, "click", function(){this.sortSelected("company");}.bind(this));
//this.sortSelectMenu.addMenuItem(this.app.lp.monthly.sortItems.department, "click", function(){this.sortSelected("department");}.bind(this));
this.sortSelectMenu.addMenuItem(this.app.lp.monthly.sortItems.application, "click", function(){this.sortSelected("application");}.bind(this));
this.sortSelectMenu.addMenuItem(this.app.lp.monthly.sortItems.process, "click", function(){this.sortSelected("process");}.bind(this));
this.sortSelectMenu.addMenuItem(this.app.lp.monthly.sortItems.activity, "click", function(){this.sortSelected("activity");}.bind(this));
}
this.sortActionTitleNode.addEvents({
"click": function(){
var position = this.sortByAreaNode.getPosition(this.sortByAreaNode.getOffsetParent());
this.sortActionNode.setStyles(this.css.sortActionNode_menu);
var i = MWF.xDesktop.zIndexPool.zIndex+1;
this.sortActionNode.setStyle("border-bottom", "0px solid #999");
this.sortActionNode.setStyles({
"left": position.x+"px",
"z-index": i,
"top": position.y+"px"
});
this.sortActionTitleNode.setStyles(this.css.sortActionTitleNode_menu);
this.sortMenu = true;
}.bind(this),
"mouseover": function(){
if (!this.sortMenu) this.sortActionTitleNode.setStyles(this.css.sortActionTitleNode_over);
}.bind(this),
"mouseout": function(){
if (!this.sortMenu) this.sortActionTitleNode.setStyles(this.css.sortActionTitleNode);
}.bind(this)
});
},
sortSelected: function(type){
switch (type){
case "topUnit":
this.sort = {"type": "topUnit","range": {}};
this.filter.company = "";
this.filter.department = "";
this.filter.person = "";
this.reload();
break;
case "unit":
this.selectedSortUnit(type);
break;
// case "company":
// this.sort = {"type": "company","range": {}};
// this.filter.company = "";
// this.filter.department = "";
// this.filter.person = "";
// this.reload();
// break;
// case "department":
// this.selectedSortCompany(type);
// break;
case "application":
this.sort = {"type": "application","range": {}};
this.filter.application = "";
this.filter.process = "";
this.filter.activity = "";
this.reload();
break;
case "process":
this.selectedSortApplication(type);
break;
case "activity":
this.selectedSortProcess(type);
break;
}
},
selectedSortUnit: function(type){
MWF.xDesktop.requireApp("Selector", "package", function(){
var options = {
"type": "unit",
"count": 1,
"title": this.app.lp.monthly.selectSortCompany,
"onComplete": function(items){
this.sort = {"type": type,"range": {
"unitName": items[0].data.id,
"company": items[0].data.id
}};
this.filter.unit = "";
this.filter.person = "";
this.reload();
}.bind(this)
};
var selector = new MWF.O2Selector(this.app.content, options);
}.bind(this));
},
// selectedSortCompany: function(type){
// MWF.xDesktop.requireApp("Organization", "Selector.package", function(){
// var options = {
// "type": "company",
// "count": 1,
// "title": this.app.lp.monthly.selectSortCompany,
// "onComplete": function(items){
// this.sort = {"type": type,"range": {
// "companyName": items[0].data.name,
// "company": items[0].data.id
// }};
// this.filter.company = "";
// this.filter.department = "";
// this.filter.person = "";
// this.reload();
// }.bind(this)
// };
// var selector = new MWF.OrgSelector(this.app.content, options);
// }.bind(this));
// },
selectedSortApplication: function(type){
MWF.xDesktop.requireApp("Selector", "package", function(){
var options = {
"type": "application",
"count": 1,
"title": this.app.lp.monthly.selectSortApplication,
"onComplete": function(items){
this.sort = {"type": type,"range": {
"applicationName": items[0].data.name,
"application": items[0].data.id
}};
this.filter.application = "";
this.filter.process = "";
this.filter.activity = "";
this.reload();
}.bind(this)
};
var selector = new MWF.O2Selector(this.app.content, options);
}.bind(this));
},
selectedSortProcess: function(type){
MWF.xDesktop.requireApp("Selector", "package", function(){
var options = {
"type": "process",
"count": 1,
"title": this.app.lp.monthly.selectSortProcess,
"onComplete": function(items){
this.sort = {"type": type,"range": {
"applicationName": items[0].data.applicationName,
"application": items[0].data.application,
"processName": items[0].data.name,
"process": items[0].data.id
}};
this.filter.application = "";
this.filter.process = "";
this.filter.activity = "";
this.reload();
}.bind(this)
};
var selector = new MWF.O2Selector(this.app.content, options);
}.bind(this));
},
getSortHtml: function(){
var typeText = this.app.lp.monthly.sortInfor[this.sort.type];
if (this.sort.type==="process"){
typeText = typeText.replace(/{app}/g, ""+this.sort.range.applicationName+"");
}
if (this.sort.type==="activity"){
typeText = typeText.replace(/{app}/g, ""+this.sort.range.applicationName+"");
typeText = typeText.replace(/{pro}/g, ""+this.sort.range.processName+"");
}
// if (this.sort.type=="department"){
// typeText = typeText.replace(/{com}/g, ""+this.sort.range.companyName+"");
// }
if (this.sort.type==="unit"){
typeText = typeText.replace(/{unit}/g, ""+this.sort.range.unitName+"");
}
return typeText;
},
selectFilter: function(){
if (!this.filterSelectMenu){
this.filterSelectMenu = new MWF.xDesktop.Menu(this.filterActionTitleNode, {
"event": "click",
"style": "BAMStyle",
"offsetX": -1,
"offsetY": -1,
"container": this.app.content,
"onQueryShow": function(){
this.filterSelectMenu.clearItems();
if (this.sort.type=="activity" || this.sort.type=="application" || this.sort.type=="process"){
this.filterSelectMenu.addMenuItem(this.app.lp.monthly.filterItems.unit, "click", function(){this.filterSelected("unit");}.bind(this));
// this.filterSelectMenu.addMenuItem(this.app.lp.monthly.filterItems.company, "click", function(){this.filterSelected("company");}.bind(this));
// this.filterSelectMenu.addMenuItem(this.app.lp.monthly.filterItems.department, "click", function(){this.filterSelected("department");}.bind(this));
}else{
this.filterSelectMenu.addMenuItem(this.app.lp.monthly.filterItems.application, "click", function(){this.filterSelected("application");}.bind(this));
this.filterSelectMenu.addMenuItem(this.app.lp.monthly.filterItems.process, "click", function(){this.filterSelected("process");}.bind(this));
}
}.bind(this),
"onPostShow": function(){
var size = this.filterActionNode.getSize();
var titleSize = this.filterActionTitleNode.getSize();
var menuSize = this.filterSelectMenu.borderNode.getSize();
if (size.x>menuSize.x){
this.filterSelectMenu.node.setStyle("width", ""+size.x+"px");
}
menuSize = this.filterSelectMenu.borderNode.getSize();
var x = 0-(menuSize.x - titleSize.x);
this.filterSelectMenu.setOptions({
"offsetX": x
});
this.filterSelectMenu.setPosition();
}.bind(this),
"onPostHide": function(){
this.filterSelectMenu.node.setStyle("width", "auto");
this.filterActionNode.setStyles(this.css.filterActionNode);
this.filterMenu = false;
this.filterActionTitleNode.setStyles(this.css.filterActionTitleNode);
}.bind(this)
});
this.filterSelectMenu.load();
}
this.filterActionTitleNode.addEvents({
"click": function(){
var position = this.filterActionNode.getPosition(this.filterActionNode.getOffsetParent());
this.filterActionNode.setStyles(this.css.filterActionNode_menu);
var i = MWF.xDesktop.zIndexPool.zIndex+1;
this.filterActionNode.setStyle("border-bottom", "0px solid #999");
this.filterActionNode.setStyles({
"left": position.x+"px",
"z-index": i,
"top": position.y+"px"
});
this.filterActionTitleNode.setStyles(this.css.filterActionTitleNode_menu);
this.filterMenu = true;
}.bind(this),
"mouseover": function(){
if (!this.filterMenu) this.filterActionTitleNode.setStyles(this.css.filterActionTitleNode_over);
}.bind(this),
"mouseout": function(){
if (!this.filterMenu) this.filterActionTitleNode.setStyles(this.css.filterActionTitleNode);
}.bind(this)
});
},
filterSelected: function(type){
switch (type){
case "unit":
this.selectedFilterUnit(type);
break;
// case "company":
// this.selectedFilterCompany(type);
// break;
// case "department":
// this.selectedFilterDepartemnt(type);
// break;
case "application":
this.selectedFilterApplication(type);
break;
case "process":
this.selectedFilterProcess(type);
break;
}
},
selectedFilterUnit: function(){
MWF.xDesktop.requireApp("Selector", "package", function(){
var options = {
"type": "unit",
"count": 1,
"title": this.app.lp.monthly.selectSortUnit,
"onComplete": function(items){
this.clearFilter();
//this.filter.company = items[0].data.id;
this.filter.unit = items[0].data.distinguishedName;
this.reload();
}.bind(this)
};
var selector = new MWF.O2Selector(this.app.content, options);
}.bind(this));
},
// selectedFilterCompany: function(type){
// MWF.xDesktop.requireApp("Organization", "Selector.package", function(){
// var options = {
// "type": "company",
// "count": 1,
// "title": this.app.lp.monthly.selectSortCompany,
// "onComplete": function(items){
// this.clearFilter();
// //this.filter.company = items[0].data.id;
// this.filter.company = items[0].data.name;
// this.reload();
// }.bind(this)
// };
// var selector = new MWF.OrgSelector(this.app.content, options);
// }.bind(this));
// },
// selectedFilterDepartemnt: function(type){
// MWF.xDesktop.requireApp("Organization", "Selector.package", function(){
// var options = {
// "type": "department",
// "count": 1,
// "title": this.app.lp.monthly.selectSortCompany,
// "onComplete": function(items){
// this.clearFilter();
// //this.filter.department = items[0].data.id;
// this.filter.department = items[0].data.name;
// this.reload();
// }.bind(this)
// };
// var selector = new MWF.OrgSelector(this.app.content, options);
// }.bind(this));
// },
selectedFilterApplication: function(type){
MWF.xDesktop.requireApp("Selector", "package", function(){
var options = {
"type": "application",
"count": 1,
"title": this.app.lp.monthly.selectSortApplication,
"onComplete": function(items){
this.clearFilter();
this.filter.application = items[0].data.id;
this.filter.applicationName = items[0].data.name;
this.reload();
}.bind(this)
};
var selector = new MWF.O2Selector(this.app.content, options);
}.bind(this));
},
selectedFilterProcess: function(type){
MWF.xDesktop.requireApp("Selector", "package", function(){
var options = {
"type": "process",
"count": 1,
"title": this.app.lp.monthly.selectSortProcess,
"onComplete": function(items){
this.clearFilter();
this.filter.process = items[0].data.id;
this.filter.processName = items[0].data.name;
this.reload();
}.bind(this)
};
var selector = new MWF.O2Selector(this.app.content, options);
}.bind(this));
},
createFilterNode: function(){
this.filterActionNode = new Element("div", {"styles": this.css.filterActionNode}).inject(this.filterAreaNode);
this.filterActionTitleNode = new Element("div", {"styles": this.css.filterActionTitleNode}).inject(this.filterActionNode);
this.filterActionTextNode = new Element("div", {"styles": this.css.filterActionTextNode}).inject(this.filterActionNode);
this.filterActionTitleNode.set("text", this.app.lp.monthly.filter);
this.filterActionTextNode.set("html", this.getFilterHtml());
this.selectFilter();
},
getFilterHtml: function(){
var textList = [];
if (this.filter.unit) textList.push(this.app.lp.monthly.filterInfor.unit.replace(/{name}/g, ""+MWF.name.cn(this.filter.unit)+""));
// if (this.filter.company) textList.push(this.app.lp.monthly.filterInfor.company.replace(/{name}/g, ""+this.filter.company+""));
// if (this.filter.department) textList.push(this.app.lp.monthly.filterInfor.department.replace(/{name}/g, ""+this.filter.department+""));
if (this.filter.personName) textList.push(this.app.lp.monthly.filterInfor.person.replace(/{name}/g, ""+this.filter.person+""));
if (this.filter.applicationName) textList.push(this.app.lp.monthly.filterInfor.application.replace(/{name}/g, ""+this.filter.applicationName+""));
if (this.filter.processName) textList.push(this.app.lp.monthly.filterInfor.process.replace(/{name}/g, ""+this.filter.processName+""));
if (this.filter.activityName) textList.push(this.app.lp.monthly.filterInfor.activity.replace(/{name}/g, ""+this.filter.activityName+""));
if (textList.length) return textList.join(", ");
return this.app.lp.monthly.filterInfor.all;
},
loadData: function(callback){
this.actions.loadMonthly("task" ,this.sort, this.filter, function(json){
this.data = json.data;
if (callback) callback();
}.bind(this));
//this.actions.loadMonthlyByApplication("task" ,this.filter.company, this.filter.department, this.filter.person, function(json){
// this.data = json.data;
// if (callback) callback();
//}.bind(this));
},
loadTable: function(){
this.createTable();
},
createTable: function(){
this.table = new MWF.xApplication.BAM.monthly.MonthlyContent.Table(this, this.tableAreaNode, this.data);
},
getSelectedData: function(){
if (this.table.selectedData.length) return this.table.selectedData;
var data = [];
Object.each(this.data, function(v, k){
var count = 0;
v.each(function(o){count+=o.count;}.bind(this));
var o = {
"column": k,
"data":[{"name": "all", "count": count}]
};
data.push(o);
}.bind(this));
return data;
},
loadChart: function(){
this.chart = new MWF.xApplication.BAM.monthly.MonthlyContent.Chart(this, this.chartAreaNode, this.getSelectedData());
},
reloadChart: function(){
if (this.chart) this.chart.destroy();
this.chartAreaNode.empty();
this.chart = new MWF.xApplication.BAM.monthly.MonthlyContent.Chart(this, this.chartAreaNode, this.getSelectedData());
},
show: function(){
this.node.setStyle("display", "block");
},
hide: function(){
this.node.setStyle("display", "none");
},
destroy: function(){
this.node.destroy();
MWF.release(this);
}
});
MWF.xApplication.BAM.monthly.MonthlyContent.Table = new Class({
initialize: function(content, node, data){
this.content = content;
this.monthly = this.content.monthly;
this.app = this.monthly.app;
this.actions = this.app.actions;
this.css = this.content.css;
this.container = $(node);
this.data = data;
this.rowSelectors = [];
this.colSelectors = [];
this.tableData = {
"cols": [],
"rows": [],
"data": [],
"cells": []
};
this.selectedRows = [];
this.selectedCols = [];
this.selectedData = [];
this.load();
},
load: function(){
this.table = new Element("table", {
"styles": this.css.monthlyTable,
"cellPadding": "0",
"cellSpacing": "0",
"border": "0"
});
this.getTableData();
this.createColSelectRow();
this.createTitleRow();
this.createDataRow();
this.table.inject(this.container);
},
getTableData: function(){
var colData = [];
var rowData = [];
var data = [];
var cells = [];
var i=0;
Object.each(this.data, function(v, k){
colData.push(k);
data.push([]);
cells.push([]);
v.each(function(o){
if (!rowData.filter(function(x){return x.value==o.value;}).length){
rowData.push(o);
}
data[i].push(o.count);
cells[i].push(null);
}.bind(this));
i++
}.bind(this));
this.tableData = {
"cols": colData,
"rows": rowData,
"data": data,
"cells": cells
};
},
createColSelectRow: function(){
this.selectColTr = this.table.insertRow();
var td = this.selectColTr.insertCell().setStyles(this.css.monthlyTableAllSelectTd).set("title", this.app.lp.monthly.selecteAll);
new MWF.xApplication.BAM.monthly.MonthlyContent.Table.AllSelector(this, td);
td = this.selectColTr.insertCell().setStyles(this.css.monthlyTableAllColSelectTd).set("title", this.app.lp.monthly.selecteAllCol);
new MWF.xApplication.BAM.monthly.MonthlyContent.Table.AllColSelector(this, td);
this.tableData.cols.each(function(n, i){
td = this.selectColTr.insertCell().setStyles(this.css.monthlyTableColSelectTd);
this.setColSelectTdEvent(td, i);
}.bind(this));
},
createTitleRow: function(){
var title = this.app.lp.monthly.columnTitle[this.content.sort.type];
this.titleTr = this.table.insertRow();
td = this.titleTr.insertCell().setStyles(this.css.monthlyTableAllRowSelectTd).set("title", this.app.lp.monthly.selecteAllRow);
new MWF.xApplication.BAM.monthly.MonthlyContent.Table.AllRowSelector(this, td);
td = this.titleTr.insertCell().setStyles(this.css.monthlyTableTitleTd);
td.set("text", title);
_self = this;
this.tableData.cols.each(function(n, i){
td = this.titleTr.insertCell().setStyles(this.css.monthlyTableTitleTd);
td.set("text", n);
td.store("idx", i);
td.addEvent("click", function(){
var idx = this.retrieve("idx");
_self.colSelectors[idx].td.click();
});
}.bind(this));
},
createDataRow: function(){
_self = this;
this.tableData.rows.each(function(r, ri){
var tr = this.table.insertRow();
var td = tr.insertCell().setStyles(this.css.monthlyTableRowSelectTd);
this.setRowSelectTdEvent(td, ri);
td = tr.insertCell().setStyles(this.css.monthlyTableTitleTd).set("text", r.name);
td.store("idx", ri);
td.addEvent("click", function(){
var idx = this.retrieve("idx");
_self.rowSelectors[idx].td.click();
});
this.tableData.cols.each(function(c, ci){
td = tr.insertCell().setStyles(this.css.monthlyTableTd);
td.set("text", this.tableData.data[ci][ri]);
this.tableData.cells[ci][ri] = td;
new MWF.xApplication.BAM.monthly.MonthlyContent.Table.CellSelector(this, td);
//this.setDrag(td);
}.bind(this));
}.bind(this));
},
setColSelectTdEvent: function(td, i){
this.colSelectors.push(new MWF.xApplication.BAM.monthly.MonthlyContent.Table.ColSelector(this, td, i));
},
setRowSelectTdEvent: function(td, i){
this.rowSelectors.push(new MWF.xApplication.BAM.monthly.MonthlyContent.Table.RowSelector(this, td, i));
},
destroy: function(){
this.container.empty();
MWF.release(this);
}
});
MWF.xApplication.BAM.monthly.MonthlyContent.Table.ColSelector = new Class({
initialize: function(table, td, i){
this.table = table;
this.td = td;
this.idx = i;
this.load();
},
load: function(){
this.td.addEvents({
"click": function(){
if (this.table.selectedCols.indexOf(this.idx)!=-1){
this.unselectedCol();
}else{
this.selectedCol();
}
}.bind(this)
});
},
unselectedCol: function(){
this.td.setStyles(this.table.css.monthlyTableSelectTd);
this.table.selectedCols.erase(this.idx);
this.checkSelectedCells();
},
selectedCol: function(){
this.td.setStyles(this.table.css.monthlyTableSelectedTd);
this.table.selectedCols.push(this.idx);
this.checkSelectedCells();
},
checkIsSelected: function(ci, ri){
if (!this.table.selectedCols.length && !this.table.selectedRows.length) return false;
var colSelect = (!this.table.selectedCols.length) || this.table.selectedCols.indexOf(ci)!=-1;
var rowSelect = (!this.table.selectedRows.length) || this.table.selectedRows.indexOf(ri)!=-1;
return (colSelect && rowSelect);
},
checkSelectedCells: function(){
this.table.selectedData =[];
this.table.tableData.cells.each(function(cells, ci){
var o = {
"column": this.table.tableData.cols[ci],
"data": []
};
cells.each(function(cell, ri){
if (this.checkIsSelected(ci, ri)){
cell.setStyles(this.table.css.monthlyTableTd_selected);
o.data.push({
"name": this.table.tableData.rows[ri].name,
"value": this.table.tableData.rows[ri].value,
"count": this.table.tableData.data[ci][ri]
});
}else{
cell.setStyles(this.table.css.monthlyTableTd);
}
}.bind(this));
if (o.data.length) this.table.selectedData.push(o);
}.bind(this));
this.table.content.reloadChart();
}
});
MWF.xApplication.BAM.monthly.MonthlyContent.Table.RowSelector = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent.Table.ColSelector,
load: function(){
this.td.addEvents({
"click": function(){
if (this.table.selectedRows.indexOf(this.idx)!=-1){
this.unselectedCol();
}else{
this.selectedCol();
}
}.bind(this)
});
},
unselectedCol: function(){
this.td.setStyles(this.table.css.monthlyTableSelectTd);
this.table.selectedRows.erase(this.idx);
this.checkSelectedCells();
},
selectedCol: function(){
this.td.setStyles(this.table.css.monthlyTableSelectedTd);
this.table.selectedRows.push(this.idx);
this.checkSelectedCells();
}
});
MWF.xApplication.BAM.monthly.MonthlyContent.Table.AllSelector = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent.Table.ColSelector,
load: function(){
this.td.addEvents({
"click": function(){
this.selectedAll();
}.bind(this)
});
},
selectedAll: function(){
if (this.table.selectedRows.length || this.table.selectedCols.length){
this.table.selectedRows = [];
this.table.selectedCols = [];
this.table.rowSelectors.each(function(sel){
sel.td.setStyles(sel.table.css.monthlyTableSelectTd);
});
this.table.colSelectors.each(function(sel){
sel.td.setStyles(sel.table.css.monthlyTableSelectTd);
});
}else{
this.table.tableData.rows.each(function(r, i){
if (i<20) this.table.selectedRows.push(i);
}.bind(this));
this.table.tableData.cols.each(function(c, i){
if (i<20) this.table.selectedCols.push(i);
}.bind(this));
this.table.rowSelectors.each(function(sel){
sel.td.setStyles(sel.table.css.monthlyTableSelectedTd);
});
this.table.colSelectors.each(function(sel){
sel.td.setStyles(sel.table.css.monthlyTableSelectedTd);
});
}
this.checkSelectedCells();
}
});
MWF.xApplication.BAM.monthly.MonthlyContent.Table.AllColSelector = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent.Table.AllSelector,
selectedAll: function(){
if (this.table.selectedCols.length){
this.table.selectedCols = [];
this.table.colSelectors.each(function(sel){
sel.td.setStyles(sel.table.css.monthlyTableSelectTd);
});
}else{
this.table.tableData.cols.each(function(c, i){
if (i<20) this.table.selectedCols.push(i);
}.bind(this));
this.table.colSelectors.each(function(sel){
sel.td.setStyles(sel.table.css.monthlyTableSelectedTd);
});
}
this.checkSelectedCells();
}
});
MWF.xApplication.BAM.monthly.MonthlyContent.Table.AllRowSelector = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent.Table.AllSelector,
selectedAll: function(){
if (this.table.selectedRows.length){
this.table.selectedRows = [];
this.table.rowSelectors.each(function(sel){
sel.td.setStyles(sel.table.css.monthlyTableSelectTd);
});
}else{
this.table.tableData.rows.each(function(c, i){
if (i<20) this.table.selectedRows.push(i);
}.bind(this));
this.table.rowSelectors.each(function(sel){
sel.td.setStyles(sel.table.css.monthlyTableSelectedTd);
});
}
this.checkSelectedCells();
}
});
MWF.xApplication.BAM.monthly.MonthlyContent.Table.CellSelector = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent.Table.ColSelector,
load: function(){
new Drag(this.td, {
"onStart": function(dragged, e){
this.cellDragStart(dragged, e);
}.bind(this),
"onDrag": function(dragged, e){
this.cellDrag(dragged, e);
}.bind(this),
"onComplete": function(dragged, e){
this.completeDrag(dragged, e);
}.bind(this)
});
this.td.addEvent("click", function(){
var cellIndex = this.td.cellIndex-2;
var rowIndex = this.td.getParent("tr").rowIndex-2;
if (this.checkIsSelected(cellIndex, rowIndex)){
}else{
this.table.selectedCols.each(function(i){
this.table.colSelectors[i].td.setStyles(this.table.css.monthlyTableSelectTd);
}.bind(this));
this.table.selectedRows.each(function(i){
this.table.rowSelectors[i].td.setStyles(this.table.css.monthlyTableSelectTd);
}.bind(this));
this.table.selectedRows = [];
this.table.selectedCols = [];
this.checkSelectedCells();
this.table.content.reloadChart();
}
}.bind(this));
},
cellDragStart: function(td, e){
var p = this.td.getPosition();
var size = this.td.getSize();
this.td.store("start", {"x": p.x, "y": p.y});
this.td.store("start2", {"x": p.x+size.x, "y": p.y+size.y});
//this.td.store("eStart", {"x": e.page.x, "y": e.page.y});
//this.boxNode = new Element("div", {"styles": this.table.css.selectBox}).inject(this.table.app.content);
//var offp = this.table.app.content .getPosition();
//x = e.page.x-offp.x;
//y = e.page.y-offp.y;
//this.boxNode.setStyles({
// "top": ""+y+"px",
// "left": ""+x+"px"
//});
},
getSelectedCells: function(start, e){
var ox = e.page.x-start.x;
var oy = e.page.y-start.y;
var tdSize = this.td.getSize();
var cols = (ox/tdSize.x).toInt();
var rows = (oy/tdSize.y).toInt();
return {"cols": cols, "rows": rows};
},
cellDrag: function(td, e){
this.table.selectedRows = [];
this.table.selectedCols = [];
this.table.selectedData = [];
var start = this.td.retrieve("start");
var start2 = this.td.retrieve("start2");
var c1 = this.getSelectedCells(start, e);
var c2 = this.getSelectedCells(start2, e);
var cols = (Math.abs(c1.cols)>Math.abs(c2.cols)) ? c1.cols : c2.cols;
var rows = (Math.abs(c1.rows)>Math.abs(c2.rows)) ? c1.rows : c2.rows;
var cellIndex = this.td.cellIndex-2;
var rowIndex = this.td.getParent("tr").rowIndex-2;
if (!cellIndex || cellIndex<0) cellIndex = 0;
if (!rowIndex || rowIndex<0) rowIndex = 0;
var toCellIndex = cellIndex+cols;
var toRowIndex = rowIndex+rows;
if (toRowIndex>rowIndex){
for (var i=rowIndex; i<=toRowIndex; i++) this.table.selectedRows.push(i);
}else{
for (var i=toRowIndex; i<=rowIndex; i++) this.table.selectedRows.push(i);
}
if (toCellIndex>cellIndex){
for (var i=cellIndex; i<=toCellIndex; i++) this.table.selectedCols.push(i);
}else{
for (var i=toCellIndex; i<=cellIndex; i++) this.table.selectedCols.push(i);
}
//var eStart = this.td.retrieve("eStart");
//this.boxNode.setStyles({
// "width": ""+ox+"px",
// "height": ""+oy+"px"
//});
this.checkSelectedCells();
},
completeDrag: function(td, e){
this.table.selectedCols.each(function(i){
this.table.colSelectors[i].td.setStyles(this.table.css.monthlyTableSelectedTd);
}.bind(this));
this.table.selectedRows.each(function(i){
this.table.rowSelectors[i].td.setStyles(this.table.css.monthlyTableSelectedTd);
}.bind(this));
//this.boxNode.destroy();
//this.boxNode = null;
this.table.content.reloadChart();
},
checkSelectedCells: function(){
this.table.selectedData =[];
this.table.tableData.cells.each(function(cells, ci){
var o = {
"column": this.table.tableData.cols[ci],
"data": []
};
cells.each(function(cell, ri){
if (this.checkIsSelected(ci, ri)){
cell.setStyles(this.table.css.monthlyTableTd_selected);
o.data.push({
"name": this.table.tableData.rows[ri].name,
"value": this.table.tableData.rows[ri].value,
"count": this.table.tableData.data[ci][ri]
});
}else{
cell.setStyles(this.table.css.monthlyTableTd);
}
}.bind(this));
if (o.data.length) this.table.selectedData.push(o);
}.bind(this));
//this.table.content.reloadChart();
}
});
MWF.xApplication.BAM.monthly.MonthlyContent.Chart = new Class({
initialize: function(content, node, data){
this.content = content;
this.monthly = this.content.monthly;
this.app = this.monthly.app;
this.css = this.content.css;
this.container = $(node);
this.data = data;
this.load();
},
load: function(){
this.chartFlagNode = new Element("div", {"styles": this.css.monthlyChartFlagAreaNode}).inject(this.container);
this.chartNode = new Element("div", {"styles": this.css.monthlyChartNode}).inject(this.container);
this.loadChart();
},
loadChart: function(){
MWF.require("MWF.widget.chart.Bar", function(){
this.flag = [];
this.bar = new MWF.widget.chart.Bar(this.chartNode, this.data, "column", {"delay": 0, "style": "monthly"});
this.data[0].data.each(function(d, i){
this.flag.push({"name":d.name, "color": this.bar.colors[i]});
this.bar.addBar(function(v){return v.data[i].count});
}.bind(this));
//bar.addBar("value");
this.bar.addEvents({
"mouseover": function(rects, texts, d, i){
texts.filter(function(data, idx){return (idx==i);}).attr("display", "block");
var rect = rects.filter(function(data, idx){return (idx==i);});
var color = rect.attr("fill");
rect.node().store("color", color);
rect.attr("fill", "brown");
}.bind(this),
"mouseout": function(rects, texts, d, i){
texts.filter(function(data, idx){return (idx==i);}).attr("display", "none");
var rect = rects.filter(function(data, idx){return (idx==i);});
var color = rect.node().retrieve("color");
rect.attr("fill", color);
}.bind(this)
});
this.bar.load();
this.loadFlags();
}.bind(this));
},
loadFlags: function(){
this.flag.each(function(f, i){
this.loadFlag(f, i);
}.bind(this));
},
loadFlag: function(f, i){
var flagNode = new Element("div", {"styles": this.css.monthlyChartFlagNode}).inject(this.chartFlagNode);
var flagColorNode = new Element("div", {"styles": this.css.monthlyChartFlagColorNode}).inject(flagNode);
flagColorNode.setStyle("background-color", f.color);
var flagNameNode = new Element("div", {"styles": this.css.monthlyChartFlagNameNode}).inject(flagNode);
flagNameNode.set("text", f.name);
flagNameNode.set("title", f.name);
flagNode.store("idx", i);
flagNode.store("barColor", f.color);
var _self = this;
flagNode.addEvents({
"mouseover": function(){
this.getFirst().setStyles(_self.css.monthlyChartFlagColorNode_over);
var idx = this.retrieve("idx");
_self.highlightBar(idx);
},
"mouseout": function(){
this.getFirst().setStyles(_self.css.monthlyChartFlagColorNode);
var idx = this.retrieve("idx");
var barColor = this.retrieve("barColor");
_self.unHighlightBar(idx, barColor);
}
});
},
createHighlightDefs: function(id){
//this.defssvg = this.bar.createDefs;
var node = this.bar.svg.append("defs");
var data = this.bar.css["rect_over_defs"];
this.createDefs(node, data);
node.select(function(){ return this.getFirst(); }).attr("id", id);
node.attr("id", "defs_"+id);
},
createDefs: function(node, data){
var svgNode = node.append(data.tag);
Object.each(data.attrs, function(v,k){svgNode.attr(k,v);});
if (data.subs) {
data.subs.each(function(v){
this.createDefs(svgNode, v);
}.bind(this));
}
},
recreateBars: function(i){
var data = this.data.map(function(d, idx) {
return {"name": d["column"], "data": d.data[i].count};
}.bind(this));
this.bar.rectClass = Math.round(Math.random()*100);
var barWidth = this.bar.xScale.bandwidth()/this.bar.barsData.length;
var rects = this.bar.group.selectAll(".MWFBar_"+this.bar.rectClass+"_"+i)
.data(data)
.enter().append("rect")
.attr("class", ".MWFBar_"+this.bar.rectClass+"_"+i)
.attr("x", function(d) { return this.xScale(d.name)+(i*barWidth); }.bind(this.bar))
.attr("width", barWidth)
.attr("height", function(d) { return this.size.y - this.yScale(d.data); }.bind(this.bar))
.attr("y", function(d) { return this.yScale(d.data); }.bind(this.bar))
.attr("fill", this.bar.colors[i]);
this.bar.rectCluster[i] = rects;
this.bar.setEvents();
return rects;
},
highlightBar: function(i){
this.bar.rectCluster[i].remove();
var rects = this.recreateBars(i);
var id = "rect_over_defs"+i;
this.createHighlightDefs(id);
rects.attr(this.bar.css["rect_over_defs"].urlAttr, "url(#"+id+")");
var texts = this.bar.textCluster[i];
texts.attr("display", "block");
texts.attr("font-weight", "bold");
},
unHighlightBar: function(i, barColor){
var id = "rect_over_defs"+i;
var def = d3.select("#defs_"+id);
def.remove();
var rects = this.bar.rectCluster[i];
rects.attr(this.bar.css["rect_over_defs"].urlAttr, null);
var texts = this.bar.textCluster[i];
texts.attr("display", "none");
texts.attr("font-weight", "normal");
},
destroy: function(){
this.container.empty();
this.bar.destroy();
MWF.release(this);
}
});
MWF.xApplication.BAM.monthly.MonthlyContent.Filter = new Class({
Implements: [Options, Events],
initialize: function (content, node) {
this.content = content;
this.monthly = this.content.monthly;
this.app = this.monthly.app;
this.css = this.content.css;
this.sort = this.content.sort;
this.filter = this.content.filter;
this.node = $(node);
this.load();
},
load: function(){
this.node.addEvent("cilck", function(){
this.showFilterMenu();
}.bind(this));
},
showFilterMenu: function(){
this.node = new Element("div", {"styles": this.css.filterAreaNode});
this.conditionNode = new Element("div", {"styles": this.css.filterAreaConditionNode}).inject(this.node);
this.actionNode = new Element("div", {"styles": this.css.filterAreaActionNode}).inject(this.node);
this.createAction();
},
createAction: function(){
this.okAction = new Element("div", {"styles": this.css.filterAreaOkActionNode}).inject(this.actionNode);
this.cancelAction = new Element("div", {"styles": this.css.filterAreaCancelActionNode}).inject(this.actionNode);
}
});
MWF.xApplication.BAM.monthly.MonthlyTaskContent = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent
});
MWF.xApplication.BAM.monthly.MonthlyTaskCompletedContent = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent,
loadData: function(callback){
this.actions.loadMonthly("taskCompleted" ,this.sort, this.filter, function(json){
this.data = json.data;
if (callback) callback();
}.bind(this));
}
});
MWF.xApplication.BAM.monthly.MonthlyWorkContent = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent,
loadData: function(callback){
this.actions.loadMonthly("work" ,this.sort, this.filter, function(json){
this.data = json.data;
if (callback) callback();
}.bind(this));
}
});
MWF.xApplication.BAM.monthly.MonthlyWorkCompletedContent = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent,
loadData: function(callback){
this.actions.loadMonthly("workCompleted" ,this.sort, this.filter, function(json){
this.data = json.data;
if (callback) callback();
}.bind(this));
}
});
MWF.xApplication.BAM.monthly.MonthlyTaskExpiredContent = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent,
loadData: function(callback){
this.actions.loadMonthly("taskExpired" ,this.sort, this.filter, function(json){
this.data = json.data;
if (callback) callback();
}.bind(this));
}
});
MWF.xApplication.BAM.monthly.MonthlyWorkExpiredContent = new Class({
Extends: MWF.xApplication.BAM.monthly.MonthlyContent,
loadData: function(callback){
this.actions.loadMonthly("workExpired" ,this.sort, this.filter, function(json){
this.data = json.data;
if (callback) callback();
}.bind(this));
}
});