MWF.xDesktop.requireApp("Template", "MPopupForm", null, false);
MWF.xDesktop.requireApp("Template", "MTooltips", null, false);
MWF.require("MWF.widget.O2Identity", null, false);
MWF.xDesktop.requireApp("Selector", "package", null, false);
MWF.require("MWF.widget.AttachmentController",null,false);
MWF.xApplication.Meeting = MWF.xApplication.Meeting || {};
MWF.xApplication.Meeting.BuildingForm = new Class({
Extends: MPopupForm,
Implements: [Options, Events],
options: {
"style": "meeting",
"width": "800",
"height": "300",
"hasTop": true,
"hasIcon": false,
"hasTopIcon" : false,
"hasTopContent" : false,
"hasBottom": false,
"draggable": true,
"closeAction": true
},
_createTableContent: function () {
this.formTopTextNode.set( "text", this.lp.editBuilding );
var html = "
" +
" | " +
" |
" +
" | " +
" |
" +
" | " +
" "+
" "+
" "+
" "+
" |
" +
"
";
this.formTableArea.set("html", html);
MWF.xDesktop.requireApp("Template", "MForm", function () {
this.form = new MForm(this.formTableArea, this.data, {
isEdited: this.isEdited || this.isNew,
style : "meeting",
itemTemplate: {
name: { text : this.lp.name, notEmpty : true },
address: { text : this.lp.address },
saveAction : { type : "button", className : "inputOkButton", value : this.lp.save, event : {
click : function(){ this.save();}.bind(this)
} },
removeAction : { type : "button", className : "inputCancelButton", value : this.lp.delete , event : {
click : function( item, ev ){ this.removeBuilding(ev); }.bind(this)
} },
cancelAction : { type : "button", className : "inputCancelButton", value : this.lp.close , event : {
click : function(){ this.close(); }.bind(this)
} }
}
}, this.app);
this.form.load();
}.bind(this), true);
},
save: function(){
var data = this.form.getResult(true,null,true,false,true);
this.actions.saveBuilding( data, function(json){
this.app.notice(this.lp.save_success, "success");
var view = this.view;
this.fireEvent("postSave", [data]);
this.close();
if(view)view.reload();
}.bind(this));
},
removeBuilding: function(e) {
var info = this.app.lp.delete_building;
info = info.replace(/{name}/g, this.data.name);
var _self = this;
this.app.confirm("warn", e, this.app.lp.delete_building_title, info, 300, 120, function(){
_self.remove();
this.close();
}, function(){
this.close();
});
},
remove: function(){
var view = this.view;
this.app.actions.deleteBuilding(this.data.id, function(){
view.reload();
}.bind(this));
}
});
MWF.xApplication.Meeting.BuildingTooltip = new Class({
Extends: MTooltips,
_loadCustom : function( callback ){
this.loadActionBar();
if(callback)callback();
},
_getHtml : function(){
var data = this.data;
var html =
""+ (data.address ? data.address : this.lp.noAddress) +"
";
return html;
},
loadActionBar : function(){
if( MWF.AC.isMeetingAdministrator() ){
//this.actionBar = new Element("div", {
// "styles": this.css.actionBar
//}).inject(this.node);
var container = this.node.getElement("[item='containr']");
this.editAction = new Element("div", {
styles: this.css.action_edit,
title : this.lp.editAddress,
events : {
mouseover : function(){
this.editAction.setStyles( this.css.action_edit_over );
}.bind(this),
mouseout : function(){
this.editAction.setStyles( this.css.action_edit );
}.bind(this),
click : function(){
this.editBuilding( function(data){
this.node.getElement("[item='containr']").getFirst().set("text", (data.address ? data.address : this.lp.noAddress))
}.bind(this))
}.bind(this)
}
}).inject(container);
this.removeAction = new Element("div", {
styles: this.css.action_remove,
title: this.lp.removeBuilding,
events : {
mouseover : function(){
this.removeAction.setStyles( this.css.action_remove_over );
}.bind(this),
mouseout : function(){
this.removeAction.setStyles( this.css.action_remove );
}.bind(this),
click : function( e ){
this.removeBuilding(e);
}.bind(this)
}
}).inject(container);
}
},
editBuilding : function( save_callback ){
var options = save_callback ? {
"onPostSave" : save_callback
} : {};
var form = new MWF.xApplication.Meeting.BuildingForm(this,this.data, options, {app:this.app});
form.edit();
},
removeBuilding: function(e) {
this.app.actions.getBuilding( this.data.id, function( json ){
if( json.data.roomList && json.data.roomList.length > 0 ){
this.app.notice( this.app.lp.delete_building_hasRoom.replace(/{name}/g, this.data.name),"error", e.target );
}else{
var info = this.app.lp.delete_building;
info = info.replace(/{name}/g, this.data.name);
var _self = this;
this.app.confirm("warn", e, this.app.lp.delete_building_title, info, 300, 120, function(){
_self.remove();
this.close();
}, function(){
this.close();
});
}
}.bind(this));
},
remove: function(){
var view = this.view;
this.app.actions.deleteBuilding(this.data.id, function(){
view.reload();
}.bind(this));
},
reload : function(){
this.view.reload();
}
});
MWF.xApplication.Meeting.RoomForm = new Class({
Extends: MPopupForm,
Implements: [Options, Events],
options: {
"style": "meeting",
"width": "900",
"height": "500",
"hasTop": true,
"hasIcon": false,
"hasTopIcon" : false,
"hasTopContent" : false,
"hasBottom": false,
"draggable": true,
"closeAction": true
},
_createTableContent: function () {
if( this.isNew ){
this.formTopTextNode.set( "text", this.lp.addRoom );
}else if( this.isEdited ){
this.formTopTextNode.set( "text", this.lp.editRoom );
//this.options.height = "550";
}else{
this.formTopTextNode.set( "text", this.lp.room );
//this.options.height = "460";
}
var lp = this.lp.roomForm;
var editEnable = ( !this.isEdited && !this.isNew && MWF.AC.isMeetingAdministrator() );
var boxStyle = (this.isEdited || this.isNew) ? "border:1px solid #ccc; border-radius: 4px;overflow: hidden;padding:8px;" : "";
var html = "" +
//"申诉处理单 |
" +
""+ lp.name+": | " +
" |
" +
""+ lp.building +": | " +
" |
" +
""+ lp.floor +": | " +
" | "+
" "+ lp.capacity +": | " +
" |
" +
""+lp.roomNumber+": | " +
" | " +
" "+lp.phone+": | " +
" |
" +
""+lp.device+": | " +
" " +
" " +
" |
" +
""+lp.available+": | " +
" " +
" " +
" |
" +
" | " +
" "+
" "+
" "+
" "+
" "+
" |
" +
"
";
this.formTableArea.set("html", html);
var data = this.data || {};
this.buildingId = data.building;
if( this.buildingId ){
this.getBuliding()
}
MWF.xDesktop.requireApp("Template", "MForm", function () {
this.form = new MForm(this.formTableArea, data, {
isEdited: this.isEdited || this.isNew,
style : "meeting",
itemTemplate: {
name: { text : lp.name, notEmpty : true },
buildingName: {
text : lp.building, notEmpty : true,
value : this.buildingName || "",
event : {
"click": function(){this.listBuilding();}.bind(this),
//"blur": function(){}.bind(this),
"change": function(){ this.buildingId = null; }.bind(this),
"focus": function(){
this.listBuildingHide();
this.listBuilding();
}.bind(this),
"keydown": function(e){
//if ([13,40,38].indexOf(e.code)!=-1){
// if (!this.selectBuildingNode){
// this.listBuilding();
// }
//}
switch (e.code){
case 13:
this.listBuildingHide();
this.listBuilding();
break;
case 40:
this.selectBuildingNext();
break;
case 38:
this.selectBuildingPrev();
break;
case 38:
this.selectBuildingConfirm();
break;
default:
// this.listBuildingHide();
// this.listBuilding();
}
// if (e.code==13){
// this.listBuildingHide();
// this.listBuilding();
// }
// if (e.code==40) this.selectBuildingNext();
// if (e.code==38) this.selectBuildingPrev();
// if (e.code==32) this.selectBuildingConfirm(e);
}.bind(this)
}
},
floor: { type: "select", defaultValue: "1", notEmpty : true, text : lp.floor,
selectText : function(){
var floors = [];
for (var i=-2; i<=50; i++){
if( i != 0 )floors.push(i+ this.lp.floor )
}
return floors;
}.bind(this), selectValue : function(){
var floors = [];
for (var i=-2; i<=50; i++){
if( i != 0 )floors.push(i)
}
return floors;
}.bind(this)
},
capacity: { notEmpty : true, tType: "number", text : lp.capacity },
roomNumber: {},
phoneNumber: {},
deviceList: { type : "checkbox",
value : this.data.device ? this.data.device.split("#") : "",
selectValue : function(){ return Object.keys(this.lp.device); }.bind(this),
selectText : function(){ return Object.values(this.lp.device); }.bind(this)
},
available: { type : "radio", defaultValue : "true",
selectValue : [ "true", "false" ],
selectText : [ this.lp.enable, this.lp.disable ]
},
saveAction : { type : "button", className : "inputOkButton", value : this.lp.save, event : {
click : function(){ this.save();}.bind(this)
} },
removeAction : { type : "button", className : "inputCancelButton", value : this.lp.delete , event : {
click : function( item, ev ){ this.removeRoom(ev); }.bind(this)
} },
editAction : { type : "button", className : "inputOkButton", value : this.lp.editRoom , event : {
click : function(){ this.editRoom(); }.bind(this)
} },
cancelAction : { type : "button", className : "inputCancelButton", value : this.lp.close , event : {
click : function(){ this.close(); }.bind(this)
} }
}
}, this.app);
this.form.load();
}.bind(this), true);
},
editRoom : function(){
this.formTopNode = null;
if(this.setFormNodeSizeFun && this.app ){
this.app.removeEvent("resize",this.setFormNodeSizeFun);
}
if( this.formMaskNode )this.formMaskNode.destroy();
this.formAreaNode.destroy();
this.edit();
},
getBuliding : function(){
this.actions.getBuilding( this.buildingId, function(json){
this.buildingName = json.data.name
}.bind(this), null, false )
},
reset: function(){
this.formTableArea.empty();
this._createTableContent();
},
removeRoom: function(e) {
var info = this.app.lp.delete_room;
info = info.replace(/{name}/g, this.data.name);
var _self = this;
this.app.confirm("warn", e, this.app.lp.delete_building_title, info, 300, 120, function(){
_self.remove();
this.close();
}, function(){
this.close();
});
},
remove: function(){
var view = this.view;
this.app.actions.deleteRoom(this.data.id, function(){
this.close();
view.reload();
}.bind(this));
},
selectBuildingNext: function(){
if (this.selectBuildingNode){
var node=null;
if (this.selectBuildingNode.selectedNode){
node = this.selectBuildingNode.selectedNode.getNext();
if (!node) node = this.selectBuildingNode.getFirst();
this.selectBuildingNode.selectedNode.setStyle("background-color", this.selectBuildingNode.selectedNode.retrieve("bg"));
}else{
node = this.selectBuildingNode.getFirst();
}
if (node){
var color = node.getStyle("background-color");
node.store("bg", color);
node.setStyles(this.css.createRoomBuildingSelectItem_over);
this.selectBuildingNode.selectedNode = node;
}
}
},
selectBuildingPrev: function(){
if (this.selectBuildingNode){
var node = null;
if (this.selectBuildingNode.selectedNode){
var node = this.selectBuildingNode.selectedNode.getPrevious();
if (!node) node = this.selectBuildingNode.getLast();
this.selectBuildingNode.selectedNode.setStyle("background-color", this.selectBuildingNode.selectedNode.retrieve("bg"));
}else{
node = this.selectBuildingNode.getLast();
}
if (node){
var color = node.getStyle("background-color");
node.store("bg", color);
node.setStyles(this.css.createRoomBuildingSelectItem_over);
this.selectBuildingNode.selectedNode = node;
}
}
},
selectBuildingConfirm: function(e){
if (this.selectBuildingNode.selectedNode){
this.selectBuilding(this.selectBuildingNode.selectedNode);
e.preventDefault();
}
},
//cancelCreateRoom: function(){
// this.createRoomNode.destroy();
//},
listBuildingData: function(key, callback){
if (key){
this.actions.listBuildingByKey(key, function(json){
if (callback) callback(json);
});
}else{
this.actions.listBuilding(function(json){
if (callback) callback(json);
});
}
},
listBuilding: function(){
debugger;
if( this.selectBuildingNode )return;
if( this.listing )return;
this.listing = true;
var item = this.form.getItem("buildingName");
var key = item.getValue();
this.listBuildingData(key, function(json){
if (json.data && json.data.length){
this.selectBuildingNode = new Element("div", {"styles": this.css.createRoomSelectBuildingNode}).inject(item.container);
this.setSelectBuildingNodeSize();
this.listBuildingHideFun = this.listBuildingHide.bind(this);
this.formMaskNode.addEvent("mousedown", this.listBuildingHideFun);
this.formNode.addEvent("mousedown", this.listBuildingHideFun);
var _self = this;
json.data.each(function(building, idx){
var node = new Element("div", {"styles": this.css.createRoomBuildingSelectItem}).inject(this.selectBuildingNode);
var nameNode = new Element("div", {"styles": this.css.createRoomBuildingSelectItemName, "text": building.name}).inject(node);
var addrNode = new Element("div", {"styles": this.css.createRoomBuildingSelectItemAddr, "text": building.address}).inject(node);
if ((idx % 2)==1) node.setStyle("background-color", "#f1f6ff");
node.store("building", building.id);
node.addEvents({
"mouseover": function(e){
var color = this.getStyle("background-color");
this.store("bg", color);
this.setStyles(_self.css.createRoomBuildingSelectItem_over);
},
"mouseout": function(e){
this.setStyle("background-color", this.retrieve("bg"));
},
"mousedown": function(e){e.stopPropagation();},
"click": function(e){
_self.selectBuilding(this);
}
});
}.bind(this));
}
this.listing = false;
}.bind(this));
// if( !key ){
// listBuilding
// }else{
//
// }
// this.actions.listBuildingByKey(key, function(json){
//
// }.bind(this));
},
selectBuilding: function(node){
var id = node.retrieve("building");
var text = node.getFirst().get("text");
this.form.getItem("buildingName").setValue(text);
this.buildingId = id;
this.listBuildingHide();
},
setSelectBuildingNodeSize: function(){
var buildingInput = this.form.getItem("buildingName").getElements()[0];
//var p = buildingInput.getPosition(buildingInput.getOffsetParent());
this.selectBuildingNode.position({
relativeTo: buildingInput,
position: 'bottomLeft',
edge: 'upperCenter',
offset: {x: 4, y: 0}
});
//this.selectBuildingNode.setStyle("left", p.x);
var size = buildingInput.getSize();
var w = size.x-8;
this.selectBuildingNode.setStyle("width", ""+w+"px");
},
listBuildingHide: function(){
if (this.selectBuildingNode){
//this.removeEvent("resize", this.setSelectBuildingNodeSizeFun);
this.selectBuildingNode.destroy();
this.selectBuildingNode = null;
this.formMaskNode.removeEvent("mousedown", this.listBuildingHideFun);
this.formNode.removeEvent("mousedown", this.listBuildingHideFun);
}
},
save: function(){
this.getData(function(data){
this.actions.saveRoom(data, function(json){
this.app.notice(this.lp.roomForm.save_success, "success");
var view = this.view;
this.close();
view.reload();
}.bind(this));
}.bind(this));
},
getData: function(callback){
var data = this.form.getResult(true,null,true,false,true);
if( !data )return;
data.device = data.deviceList.join("#");
data.available = data.available == "true";
if (!this.buildingId){
this.actions.saveBuilding({"name": data.buildingName, "address": ""}, function(json){
data.building = json.data.id;
if (callback) callback(data);
}.bind(this));
}else{
data.building = this.buildingId;
if (callback) callback(data);
}
}
});
MWF.xApplication.Meeting.RoomTooltip = new Class({
Extends: MTooltips,
_loadCustom : function( callback ){
this.loadBuilding( function(){
if(callback)callback();
}.bind(this) );
},
_getHtml : function(){
var data = this.data;
var lp = this.lp.device;
var titleStyle = "font-size:14px;color:#333";
var valueStyle = "font-size:14px;color:#666;padding-right:20px";
var device = [];
( data.device || "" ).split("#").each( function( d ){
device.push( lp[d] );
}.bind(this));
lp = this.lp.roomForm;
var html =
"" +
"
"+ this.lp.room +"
"+
"
"+
""+ data.name +"
"+
""+
"" +
""+ lp.building+": | " +
" |
" +
"" + lp.floor+": | " +
" " + data.floor + " |
" +
""+ lp.capacity +": | " +
" "+ data.capacity+" |
" +
""+ lp.roomNumber +": | " +
" "+ data.roomNumber+" |
" +
""+ lp.phone+": | " +
" "+ data.phoneNumber +" |
" +
""+ lp.device +": | " +
" "+ device.join( "," ) +" |
"+
""+ lp.available +": | " +
" " + ( !data.available ? this.lp.disable : this.lp.enable ) + " |
"+
"
";
return html;
},
loadBuilding: function( callback ){
var area = this.node.getElement("[item='building']");
if (this.data.building){
this.app.actions.getBuilding(this.data.building, function(bjson){
area.set("text", bjson.data.name );
if( callback )callback();
}.bind(this));
}
}
});
MWF.xApplication.Meeting.MeetingForm = new Class({
Extends: MPopupForm,
Implements: [Options, Events],
options: {
"style": "meeting",
"width": "900",
"height": "640",
"hasTop": true,
"hasIcon": false,
"hasTopIcon" : false,
"hasTopContent" : false,
"hasBottom": false,
"draggable": true,
"closeAction": true,
"maxAction" : true
},
open: function (e) {
this.fireEvent("queryOpen");
this.isNew = false;
this.isEdited = false;
this.getMeetingData( function(){
this._open();
}.bind(this));
this.fireEvent("postOpen");
},
create: function () {
this.fireEvent("queryCreate");
this.isNew = true;
this._open();
this.fireEvent("postCreate");
},
edit: function () {
this.fireEvent("queryEdit");
this.isEdited = true;
this.getMeetingData( function(){
this._open();
}.bind(this));
this.fireEvent("postEdit");
},
_createTableContent: function () {
this.userName = layout.desktop.session.user.distinguishedName;
this.userId = layout.desktop.session.user.id;
if( this.isNew ){
this.formTopTextNode.set( "text", this.lp.addMeeting );
}else if( this.isEdited ){
this.formTopTextNode.set( "text", this.lp.editMeeting );
this.options.height = "630";
}else{
this.formTopTextNode.set( "text", this.lp.metting );
this.options.height = "540";
}
var defaultDate, defaultBeginTime, date1, defaultEndTime;
if( this.options.date || this.options.minute ){
this.date = typeOf( this.options.date )=="string" ? Date.parse( this.options.date ) : this.options.date;
defaultDate = this.date.clone().format("%Y-%m-%d");
if( this.date.getHours() ){
defaultBeginTime = this.getString( this.date.getHours() )+":"+ this.getString( this.date.getMinutes() );
date1 = this.date.clone().increment("hour", this.options.hour ? parseInt( this.options.hour ) : 1 );
if(this.options.minute)date1 = date1.increment("minute", parseInt( this.options.minute ) );
defaultEndTime = this.getString( date1.getHours() )+":"+ this.getString( date1.getMinutes() );
}else{
var now = new Date();
defaultBeginTime = (now.getHours()+1)+":"+"00";
date1 = now.clone().increment("hour", this.options.hour ? parseInt( this.options.hour ) : 1 );
if(this.options.minute)date1 = date1.increment("minute", parseInt( this.options.minute ) );
defaultEndTime = (date1.getHours()+1)+":"+"00";
}
}else{
this.date = new Date();
defaultDate = this.date.clone().format("%Y-%m-%d");
defaultBeginTime = (this.date.getHours()+1)+":"+"00";
date1 = this.date.clone().increment("hour", this.options.hour ? parseInt( this.options.hour ) : 1 );
if(this.options.minute)date1 = date1.increment("minute", parseInt( this.options.minute ) );
defaultEndTime = (date1.getHours()+1)+":"+"00";
}
this.formTableArea.setStyle("position","relative");
var data = this.data;
var isEditer = this.userName == this.data.applicant || this.userId == this.data.applicant || MWF.AC.isMeetingAdministrator();
var editEnable = ( !this.isEdited && !this.isNew && this.data.status == "wait" && isEditer );
var isEditing = this.isNew || (this.isEdited && this.data.status == "wait" && isEditer);
var startImmediatelyEnable = false;
if( editEnable ){
if( MWF.AC.isMeetingAdministrator() ){
startImmediatelyEnable = true;
}else{
if( this.userName == this.data.applicant || this.userId == this.data.applicant ){
if( !this.app.meetingConfig.process )startImmediatelyEnable = true;
}
}
}
var finishImmediatelyEnable = false;
if( isEditer && !this.isEdited && !this.isNew && this.data.status == "processing" ){
finishImmediatelyEnable = true;
}
var html = "" +
//"申诉处理单 |
" +
""+
" "+this.lp.applyPerson+": | " +
" | " +
"
"+
""+this.lp.beginDate+": | " +
" | " +
"
" +
""+ this.lp.time +": | " +
" " +
" "+
" "+ this.lp.to+ " "+
" "+
" |
" +
""+ this.lp.selectRoom +": | " +
" |
" +
""+this.lp.invitePerson2+": | " +
" " +
" " +
" " +
(( !this.isNew && this.data.myWaitAccept ) ?
" |
| |
" : ""
) +
" " +
"" +
"签到人员: | " +
" |
" +
""+this.lp.meetingSubject+": | " +
" |
" +
""+this.lp.meetingDescription+": | " +
" |
" +
""+this.lp.meetingAttachment+": | " +
" |
" +
" | " +
" "+
" "+
" "+
" "+
" "+
" "+
" "+
" |
" +
"
";
this.formTableArea.set("html", html);
if( data.startTime ){
var beignDate = Date.parse( data.startTime );
data.dateInput = beignDate.format("%Y-%m-%d");
data.beginTimeInput = this.getString( beignDate.getHours() ) + ":" + this.getString( beignDate.getMinutes() );
}
if( data.completedTime ){
var endDate = Date.parse( data.completedTime );
data.endTimeInput = this.getString( endDate.getHours() ) + ":" + this.getString( endDate.getMinutes() );
}
this.meetingRoomArea = this.formTableArea.getElement("[item='meetingRoom']");
this.attachmentTr = this.formTableArea.getElement("[item='attachmentTr']");
this.attachmentArea = this.formTableArea.getElement("[item='attachment']");
this.qrCodeArea = this.formTableArea.getElement("[item='qrCode']");
MWF.xDesktop.requireApp("Template", "MForm", function () {
this.form = new MForm(this.formTableArea, data, {
isEdited: this.isEdited || this.isNew,
style : "meeting",
itemTemplate: {
applicant : { type : "org", orgType : "person", isEdited : false,
defaultValue : this.userName
},
dateInput: {tType: "date", isEdited : isEditing, defaultValue: defaultDate,
event : {
change : function( item, ev ){
this.clearRoom();
}.bind(this)
}
},
beginTimeInput: { tType: "time", isEdited : isEditing,
defaultValue: defaultBeginTime, className : ( isEditing ? "inputTimeUnformatWidth" : "" ),
event : {
change : function( item, ev ){
this.clearRoom();
}.bind(this)
}
},
endTimeInput: { tType: "time", isEdited : isEditing,
defaultValue: defaultEndTime, className : ( isEditing ? "inputTimeUnformatWidth" : "" ),
event : {
change : function( item, ev ){
this.clearRoom();
}.bind(this)
}
},
invitePersonList: { type: "org", isEdited : this.isNew, orgType: ["identity","person"], count : 0, orgWidgetOptions : {
"onLoadedInfor": function(item){
this.loadAcceptAndReject( item );
}.bind(this)
}},
checkinPersonList : { type: "org", isEdited : false, orgType: ["identity","person"], count : 0},
selectinvitePerson : { type : "button", value : this.lp.addInvitePerson1, style : {"margin-left": "20px"}, event : {
click : function( it ){
var options = {
"type" : "",
"types": ["identity","person"],
"exclude" : this.getInvitePersonExclude(),
"values": [],
"count": 0,
"onComplete": function(items){
MWF.require("MWF.widget.O2Identity", function(){
var invitePersonList = [];
items.each(function(item){
var _self = this;
if( item.data.distinguishedName.split("@").getLast().toLowerCase() == "i" ){
var person = new MWF.widget.O2Identity(item.data, it.form.getItem("invitePersonList").container, {"style": "room"});
invitePersonList.push( item.data.distinguishedName );
}else{
var person = new MWF.widget.O2Person(item.data, it.form.getItem("invitePersonList").container, {"style": "room"});
invitePersonList.push(item.data.distinguishedName);
}
}.bind(this));
this.app.actions.addMeetingInvite(this.data.id, {"invitePersonList": invitePersonList, "id": this.data.id}, function(json){
this.app.actions.getMeeting(json.data.id, function(meeting){
this.invitePersonList = meeting.data.invitePersonList;
this.app.notice(this.app.lp.addedInvitePerson1, "success", this.node );
}.bind(this));
}.bind(this));
}.bind(this));
}.bind(this)
};
var selector = new MWF.O2Selector(this.app.content, options);
}.bind(this)
} },
subject: {},
summary: {type: "textarea"},
acceptAction : { type : "button", value : this.lp.accept, className : "inputAcceptButton",
event : { click : function( it, ev ){ this.accept(ev); }.bind(this) }
},
rejectAction : { type : "button", value : this.lp.reject, style : {"margin-left": "20px"}, className : "inputDenyButton",
event : { click : function( it, ev ){ this.reject(ev) }.bind(this) }
},
saveAction : { type : "button", className : "inputOkButton", value : this.lp.save, event : {
click : function(){ this.save();}.bind(this)
} },
removeAction : { type : "button", className : "inputCancelButton", value : this.lp.cancelMeeting , event : {
click : function( item, ev ){ this.cancelMeeting(ev); }.bind(this)
} },
editAction : { type : "button", className : "inputOkButton", value : this.lp.editMeeting , event : {
click : function(){ this.editMeeting(); }.bind(this)
} },
startImmediatelyAction : { type : "button", className : "inputCancelButton", value : this.lp.startMeetingImmediately , event : {
click : function(){ this.startImmediately(); }.bind(this)
} },
finishImmediatelyAction : { type : "button", className : "inputCancelButton", value : this.lp.endMeetingImmediately , event : {
click : function(){ this.finishImmediately(); }.bind(this)
} },
cancelAction : { type : "button", className : "inputCancelButton", value : this.lp.close , event : {
click : function(){ this.close(); }.bind(this)
} }
}
}, this.app);
this.form.load();
if( isEditing ){
this.loadSelectRoom();
}else{
this.loadSelectRoom_read();
}
if( this.data.id )this.loadAttachment();
if( isEditer && !this.isNew && !this.isEdited ){
this.loadQrCode();
}else{
this.qrCodeArea.destroy();
}
}.bind(this), true);
},
startImmediately : function(){
o2.Actions.load("x_meeting_assemble_control").MeetingAction.editStartTime( this.data.id, {
room : this.roomId || this.data.room,
startTime : ( new Date() ).format("db")
}, function () {
this.app.notice( this.lp.startMeetingSucccess, "success");
this.waitReload = true;
this.reload()
}.bind(this))
},
finishImmediately : function(){
o2.Actions.load("x_meeting_assemble_control").MeetingAction.editCompletedTime( this.data.id, {
room : this.roomId || this.data.room,
completedTime : ( new Date() ).format("db")
}, function () {
this.app.notice( this.lp.endMeetingSucccess, "success");
this.waitReload = true;
this.reload()
}.bind(this))
},
getInvitePersonExclude : function(){
var invitePersonList = this.invitePersonList || this.data.invitePersonList;
var identityList = [];
if( invitePersonList.length > 0 ){
o2.Actions.load("x_organization_assemble_express").IdentityAction.listWithPerson({
personList : invitePersonList
}, function( json ){
identityList = json.data ? json.data.identityList : [];
}, null ,false );
return ( identityList || [] ).concat(invitePersonList);
}else{
return [];
}
},
getString : function( str ){
var s = "00" + str;
return s.substr(s.length - 2, 2 );
},
loadQrCode : function(){
this.actions.getCheckinQrCode( this.data.id, function(json){
var img = new Element("img",{
src : "data:image/png;base64,"+json.data.image,
styles : {
width : "100px",
height : "100px"
}
}).inject( this.qrCodeArea );
var div = new Element("div",{
text : "打印签到二维码",
styles : {
color : "#3c75b7",
cursor : "pointer"
},
events : {
click : function(){
window.open(o2.filterUrl("../x_desktop/meetingQrPrint.html?meeting="+this.data.id), "_blank" );
}.bind(this)
}
}).inject( this.qrCodeArea );
}.bind(this));
},
loadAcceptAndReject : function( item ){
var personName = item.data.distinguishedName;
if(this.data.acceptPersonList){
if (this.data.acceptPersonList.indexOf(personName)!==-1){
var acceptNode = new Element("div", {"styles": this.css.acceptIconNode}).inject(item.node, "top");
new Element("div", {
"styles": this.css.acceptTextNode,
"text": this.app.lp.accepted
}).inject(item.inforNode);
}
}
if(this.data.rejectPersonList){
if (this.data.rejectPersonList.indexOf(personName)!==-1){
var rejectNode = new Element("div", {"styles": this.css.rejectIconNode}).inject(item.node, "top");
new Element("div", {
"styles": this.css.rejectTextNode,
"text": this.app.lp.rejected
}).inject(item.inforNode);
}
}
},
getMeetingData : function( callback ){
if( this.data && this.data.id ){
( this.app.actions || this.actions ).getMeeting( this.data.id, function( json ){
this.data = json.data;
if(callback)callback();
}.bind(this))
}else{
if(callback)callback();
}
},
editMeeting : function(){
this.formTopNode = null;
if(this.setFormNodeSizeFun && this.app ){
this.app.removeEvent("resize",this.setFormNodeSizeFun);
}
if( this.formMaskNode )this.formMaskNode.destroy();
this.formAreaNode.destroy();
this.edit();
},
cancelMeeting: function(e){
var _self = this;
var text = this.app.lp.cancel_confirm.replace(/{name}/g, this.data.subject);
this.app.confirm("infor", e, this.app.lp.cancel_confirm_title, text, 380, 200, function(){
_self._cancelMeeting();
this.close();
_self.close();
}, function(){
this.close();
});
},
_cancelMeeting: function(){
var view = this.view;
this.app.actions.deleteMeeting(this.data.id, function(){
view.reload();
}.bind(this))
},
reset: function(){
this.formTableArea.empty();
this._createTableContent();
},
clearRoom : function(){
this.roomId = "";
if(this.roomInput)this.roomInput.set("text", "");
},
loadSelectRoom_read : function(){
var roomId = this.data.room || this.options.room;
if (roomId){
( this.app.actions || this.actions ).getRoom(roomId, function(json){
( this.app.actions || this.actions ).getBuilding(json.data.building, function(bjson){
this.roomId = roomId;
this.meetingRoomArea.set("text", json.data.name+" ("+bjson.data.name+")");
}.bind(this));
}.bind(this));
}
},
loadSelectRoom: function(){
var css = this.app.css;
var lineNode = new Element("div", {"styles": css.createMeetingInfoLineNode}).inject(this.meetingRoomArea);
var editNode = new Element("div", {
"styles": css.createMeetingInfoItemEditNode,
"html": ""
}).inject(lineNode);
this.roomInput = editNode.getFirst();
this.roomInput.setStyles( css.createMeetingInfoItemDivNode);
//var downNode = new Element("div", {"styles": this.css.createMeetingInfoItemDownNode}).inject(editNode);
this.roomInput.addEvents({
"click": function(e){this.selectRooms();}.bind(this)
});
var roomId = this.data.room || this.options.room;
if (roomId){
( this.app.actions || this.actions ).getRoom(roomId, function(json){
( this.app.actions || this.actions ).getBuilding(json.data.building, function(bjson){
this.roomId = roomId;
this.roomInput.set("text", json.data.name+" ("+bjson.data.name+")");
}.bind(this));
}.bind(this));
}
},
selectRooms: function(){
this.createRoomNode(function(){
this.loadSelectRooms();
this.selectRoomNode.setStyle("display", "block");
this.hideRoomNodeFun = this.hideRoomNode.bind(this);
document.body.addEvent("mousedown", this.hideRoomNodeFun);
//var p = this.selectRoomNode.getPosition(this.selectRoomNode.getOffsetParent());
this.selectRoomNode.position({
relativeTo: this.roomInput,
position: 'bottomLeft',
edge: 'upperLeft',
offset: {x: 0, y: 0}
});
var size = this.roomInput.getSize();
var w = size.x-2;
this.selectRoomNode.setStyle("width", ""+w+"px");
}.bind(this));
},
createRoomNode: function(callback){
var css = this.app.css;
if (!this.selectRoomNode){
this.selectRoomNode = new Element("div", {"styles": css.createMeetingInfoSelectRoomNode}).inject(this.formNode);
this.selectRoomNode.addEvent("mousedown", function(e){e.stopPropagation();});
if (callback) callback();
}else{
if (callback) callback();
}
},
loadSelectRooms: function(){
var css = this.app.css;
var result = this.form.getResult(false,null,false,false,true);
var d = result.dateInput;
var bt = result.beginTimeInput;
var et = result.endTimeInput;
var start = d+" "+bt;
var completed = d+" "+et;
var success = function(json){
json.data.each(function(building){
var node = new Element("div", {"styles": css.createMeetingInfoSelectRoomItem1Node}).inject(this.selectRoomNode);
var nodeName = new Element("div", {"styles": css.createMeetingInfoSelectRoomItem1NameNode, "text": building.name}).inject(node);
var nodeAddr = new Element("div", {"styles": css.createMeetingInfoSelectRoomItem1AddrNode, "text": building.address}).inject(node);
building.roomList.each(function(room, i){
if (room.available && room.idle) this.createRoomSelectNode(room, i, building);
}.bind(this));
}.bind(this));
}.bind(this);
if( this.isEdited && this.data.room ){
o2.Actions.load("x_meeting_assemble_control").BuildingAction.listWithStartCompletedRoom( start, completed, this.data.room, this.data.id, function ( json ) {
success( json );
}
)
}else{
this.app.actions.listBuildingByRange(start, completed, function(json){
success( json )
}.bind(this));
}
},
createRoomSelectNode: function(room, i, building){
var css = this.app.css;
var roomNode = new Element("div", {"styles": css.roomTitleNode}).inject(this.selectRoomNode);
var capacityNode = new Element("div", {"styles": css.roomTitleCapacityNode, "text": room.capacity+this.lp.person}).inject(roomNode);
var inforNode = new Element("div", {"styles": css.roomTitleInforNode}).inject(roomNode);
var node = new Element("div", {"styles": {"height": "20px"}}).inject(inforNode);
var numberNode = new Element("div", {"styles": css.roomTitleNumberNode, "text": (room.roomNumber) ? "#"+room.roomNumber : ""}).inject(node);
var nameNode = new Element("div", {"styles": css.roomTitleNameNode, "text": room.name}).inject(node);
var iconsNode = new Element("div", {"styles": css.roomTitleIconsNode}).inject(inforNode);
var deviceList = ( room.device || "" ).split("#");
deviceList.each(function(name){
if( name ){
var node = new Element("div", {"styles": css.roomTitleIconNode, "title": this.lp.device[name]}).inject(iconsNode);
node.setStyle("background-image", "url(../x_component_Meeting/$RoomView/default/icon/device/"+name+"_disable.png)");
}
}.bind(this));
if ((i % 2)!=0) roomNode.setStyle("background-color", "#f4f8ff");
roomNode.store("room", room);
var _self = this;
if (room.idle){
roomNode.addEvents({
"mouseover": function(e){
var color = roomNode.getStyle("background-color");
this.store("bgcolor", color);
this.setStyle("background-color", "#e4edfc");
},
"mouseout": function(){
var color = this.retrieve("bgcolor", "#FFF");
this.setStyle("background-color", color);
},
"click": function(){
var roomData = this.retrieve("room");
_self.roomId = roomData.id;
//roomNode.inject(_self.roomInput);
_self.roomInput.set("text", roomData.name+" ("+building.name+")");
_self.hideRoomNode();
}
});
}else{
roomNode.setStyle("background-color", "#fff6f6");
var disabledNode = new Element("div", {"styles": css.roomTitleDisabledIconNode}).inject(roomNode);
}
},
hideRoomNode: function(){
this.selectRoomNode.empty();
this.selectRoomNode.setStyle("display", "none");
document.body.removeEvent("mousedown", this.hideRoomNodeFun);
},
setCreateRoomSelectBuildingNodeSize: function(){
var p = this.createRoomBuildingInput.getPosition(this.createRoomBuildingInput.getOffsetParent());
this.createRoomSelectBuildingNode.position({
relativeTo: this.createRoomBuildingInput,
position: 'bottomCenter',
edge: 'upperCenter',
offset: {x: 0, y: 0}
});
this.createRoomSelectBuildingNode.setStyle("left", p.x);
var size = this.createRoomBuildingInput.getSize();
var w = size.x-2;
this.createRoomSelectBuildingNode.setStyle("width", ""+w+"px");
},
loadAttachment: function(){
this.attachmentTr.setStyle("display","");
this.attachmentNode = new Element("div", {"styles": this.css.createMeetingAttachmentNode}).inject(this.attachmentArea);
var attachmentContentNode = new Element("div", {"styles": this.css.createMeetingAttachmentContentNode}).inject(this.attachmentNode);
MWF.require("MWF.widget.AttachmentController", function(){
this.attachmentController = new MWF.widget.AttachmentController(attachmentContentNode, this, {
"size": "min",
"isSizeChange": false,
"isReplace": false,
"isUpload": this.isNew || this.isEdited,
"isDelete": this.isNew || this.isEdited,
"isDownload": true,
"readonly": !this.isNew && !this.isEdited
});
this.attachmentController.load();
if( this.data.attachmentList ){
this.data.attachmentList.each(function (att) {
att.person = att.lastUpdatePerson.split("@")[0];
var at = this.attachmentController.addAttachment(att);
}.bind(this));
}
}.bind(this));
},
uploadAttachment: function(e, node){
if (!this.uploadFileAreaNode){
this.createUploadFileNode();
}
this.fileUploadNode.click();
},
createUploadFileNode: function(){
this.uploadFileAreaNode = new Element("div");
var html = "";
this.uploadFileAreaNode.set("html", html);
this.fileUploadNode = this.uploadFileAreaNode.getFirst();
this.fileUploadNode.addEvent("change", function(){
var files = this.fileUploadNode.files;
if (files.length){
for (var i = 0; i < files.length; i++) {
var file = files.item(i);
var formData = new FormData();
formData.append('file', file);
//formData.append('folder', folderId);
this.app.actions.addAttachment(this.data.id, formData, file, function(o, text){
if (o.id){
this.app.actions.getAttachment(o.id, function(json){
if (json.data) this.attachmentController.addAttachment(json.data);
this.attachmentController.checkActions();
}.bind(this))
}
this.attachmentController.checkActions();
}.bind(this));
}
}
}.bind(this));
},
deleteAttachments: function(e, node, attachments){
var names = [];
attachments.each(function(attachment){
names.push(attachment.data.name);
}.bind(this));
var _self = this;
this.app.confirm("warn", e, this.lp.deleteAttachmentTitle, this.lp.deleteAttachment+"( "+names.join(", ")+" )", 300, 120, function(){
while (attachments.length){
attachment = attachments.shift();
_self.deleteAttachment(attachment);
}
this.close();
}, function(){
this.close();
}, null);
},
deleteAttachment: function(attachment){
this.app.actions.deleteFile(attachment.data.id, function(josn){
this.attachmentController.removeAttachment(attachment);
this.attachmentController.checkActions();
}.bind(this));
},
downloadAttachment: function(e, node, attachments){
attachments.each(function(att){
this.app.actions.getFileDownload(att.data.id);
}.bind(this));
},
openAttachment: function(e, node, attachments){
attachments.each(function(att){
this.app.actions.getFile(att.data.id);
}.bind(this));
},
getAttachmentUrl: function(attachment, callback){
this.app.actions.getFileUrl(attachment.data.id, callback);
},
save: function(){
this._save(function(){
this.app.notice(this.lp.meeting_saveSuccess, "success");
if (!this.attachmentNode){
this.loadAttachment();
}
}.bind(this));
},
_save: function(callback){
this.getSaveData();
var now = new Date();
var errorText = "";
if (!this.data.subject) errorText +=this.lp.meeting_input_subject_error;
if (!this.data.room) errorText +=this.lp.meeting_input_room_error;
if (!this.data.invitePersonList.length) errorText +=this.lp.meeting_input_person_error;
if( this.data.startTimeDate ){
if (this.data.startTimeDate.diff(this.data.completedTimeDate, "minute")<1) errorText +=this.lp.meeting_input_time_error;
if (now.diff(this.data.startTimeDate, "minute")<0) errorText +=this.lp.meeting_input_date_error;
delete this.data.startTimeDate;
delete this.data.completedTimeDate;
}
if (errorText){
this.app.notice(this.lp.meeting_input_error+errorText, "error");
return false;
}
this.app.actions.saveMeeting(this.data, function(json){
this.data.id = json.data.id;
this.waitReload = true;
if (callback) callback();
}.bind(this));
},
getSaveData: function(){
this.data = this.form.getResult(false,null,false,false,true);
this.data.room = this.roomId;
if( this.invitePersonList ){
this.data.invitePersonList = this.invitePersonList;
}
var d = this.data.dateInput;
// if( this.isNew ) {
var startTime = d + " " + this.data.beginTimeInput + ":0";
var completedTime = d + " " + this.data.endTimeInput + ":0";
var startTimeDate = Date.parse(startTime);
var completedTimeDate = Date.parse(completedTime);
this.data.startTime = startTime;
this.data.completedTime = completedTime;
this.data.startTimeDate = startTimeDate;
this.data.completedTimeDate = completedTimeDate;
// }
if( this.isNew ){
delete this.data.applicant;
}else{
this.data.applicant = this.data.applicant.join(",")
}
},
getPersonByIdentity : function( identity ){
},
getPerson : function( source ){
if( typeOf(source) != "array" )source = [source];
var target = [];
source.each( function( s ){
if( s.split("@").getLast().toLowerCase() == "i" ){
target.push( this.getPersonByIdentity( s ) )
}else{
target.push( s )
}
}.bind(this));
return target;
},
reject: function(e){
var _self = this;
var text = this.app.lp.reject_confirm.replace(/{name}/g, this.data.subject);
this.app.confirm("infor", e, this.app.lp.reject_confirm_title, text, 300, 120, function(){
_self.rejectMeeting();
this.close();
_self.close();
}, function(){
this.close();
});
},
rejectMeeting: function(){
var view = this.view;
this.app.actions.rejectMeeting(this.data.id, function(){
view.reload();
}.bind(this))
},
accept: function(e){
var _self = this;
var text = this.app.lp.accept_confirm.replace(/{name}/g, this.data.subject);
this.app.confirm("infor", e, this.app.lp.accept_confirm_title, text, 300, 120, function(){
_self.acceptMeeting();
this.close();
_self.close();
}, function(){
this.close();
});
},
acceptMeeting: function(){
var view = this.view;
this.app.actions.acceptMeeting(this.data.id, function(){
view.reload();
}.bind(this))
},
close: function (e) {
this.fireEvent("queryClose");
this._close();
//if( this.form ){
// this.form.destroy();
//}
if(this.setFormNodeSizeFun && this.app ){
this.app.removeEvent("resize",this.setFormNodeSizeFun);
}
if( this.formMaskNode )this.formMaskNode.destroy();
this.formAreaNode.destroy();
this.fireEvent("postClose");
if( this.waitReload )this.view.reload();
delete this;
}
});
MWF.xApplication.Meeting.MeetingTooltip = new Class({
Extends: MTooltips,
_loadCustom : function( callback ){
this.loadRoom( function(){
this.loadInvite();
this.loadAttachment();
if(callback)callback();
}.bind(this) );
},
_getHtml : function(){
var data = this.data;
var titleStyle = "font-size:14px;color:#333";
var valueStyle = "font-size:14px;color:#666;padding-right:20px";
var persons = [];
data.invitePersonList.each( function( p ){
persons.push(p.split("@")[0] )
}.bind(this));
var color = "#ccc";
switch (data.status){
case "wait":
color = "#4990E2";
break;
case "processing":
color = "#66CC7F";
break;
case "completed":
color = "#666";
break;
}
if (data.myWaitAccept){
color = "#F6A623";
}
if (data.confilct){
color = "#FF7F7F";
}
var beginDate = Date.parse(data.startTime);
var endDate = Date.parse(data.completedTime);
var dateStr = beginDate.format(this.app.lp.dateFormatDay);
var beginTime = this.getString( beginDate.getHours() ) + ":" + this.getString( beginDate.getMinutes() );
var endTime = this.getString( endDate.getHours() ) + ":" + this.getString( endDate.getMinutes() );
var meetingTime = dateStr + " " + beginTime + "-" + endTime;
var description = (data.description || "")+(data.summary || "");
var html =
"" +
"
"+ this.lp.applyPerson +":" + data.applicant.split("@")[0] +"
" +
"
"+ this.lp.meetingDetail +"
"+
"
"+
""+ data.subject +"
"+
""+
"" +
""+this.lp.meetingTime+": | " +
" " + meetingTime + " |
" +
//""+this.lp.beginTime+": | " +
//" " + data.startTime + " |
" +
//""+this.lp.endTime+": | " +
//" " + data.completedTime + " |
" +
""+this.lp.selectRoom +": | " +
" |
" +
""+this.lp.invitePerson2+": | " +
" "+persons.join(",")+" |
" +
""+this.lp.meetingDescription+": | " +
" "+ description +" |
" +
( this.options.isHideAttachment ? "" :
""+this.lp.meetingAttachment+": | " +
" |
"
)+
"
";
return html;
},
getString : function( str ){
var s = "00" + str;
return s.substr(s.length - 2, 2 );
},
loadRoom: function( callback ){
var area = this.node.getElement("[item='meetingRoom']");
if (this.data.room){
this.app.actions.getRoom(this.data.room, function(json){
this.app.actions.getBuilding(json.data.building, function(bjson){
area.set("text", json.data.name+" ("+bjson.data.name+")");
if( callback )callback();
}.bind(this));
}.bind(this));
}
},
loadInvite : function(){
this.O2PersonList = [];
var area = this.node.getElement("[item='invitePerson']");
MWF.require("MWF.widget.O2Identity", function(){
area.empty();
this.data.invitePersonList.each(function( person ){
var O2person = new MWF.widget.O2Person({name : person}, area, {"style": "room", "onLoadedInfor": function(item){
this.loadAcceptAndReject( item );
}.bind(this) });
this.O2PersonList.push( O2person );
}.bind(this));
}.bind(this));
},
loadAcceptAndReject : function( item ){
var personName = item.data.distinguishedName;
if( this.data.acceptPersonList ){
if (this.data.acceptPersonList.indexOf(personName)!==-1){
var acceptNode = new Element("div", {"styles": {
"height": "20px",
"width": "14px",
"margin-right": "3px",
"float": "left",
"background": "url(../x_component_Template/$MPopupForm/meeting/icon/accept.png) no-repeat center center"
}}).inject(item.node, "top");
new Element("div", {
"styles" : {"color": "#1fbf04", "clear":"both","text-align":"center"},
"text": this.app.lp.accepted
}).inject(item.inforNode);
}
}
if(this.data.rejectPersonList){
if (this.data.rejectPersonList.indexOf(personName)!==-1){
var rejectNode = new Element("div", {"styles": {
"height": "20px",
"width": "14px",
"margin-right": "3px",
"float": "left",
"background": "url(../x_component_Template/$MPopupForm/meeting/icon/reject.png) no-repeat center center"
}}).inject(item.node, "top");
new Element("div", {
"styles" : {"color": "#FF0000", "clear":"both","text-align":"center"},
"text": this.app.lp.rejected
}).inject(item.inforNode);
}
}
},
destroy: function(){
if( this.O2PersonList ){
this.O2PersonList.each(function(p){
p.destroy();
})
}
if( this.node ){
this.node.destroy();
this.node = null;
}
},
loadAttachment: function(){
if( this.options.isHideAttachment )return;
if( typeOf(this.data.attachmentList)=="array" && this.data.attachmentList[0] ){
var area = this.node.getElement("[item='attachment']");
this.attachmentNode = new Element("div"
//{"styles": this.css.createMeetingAttachmentNode}
).inject(area);
var attachmentContentNode = new Element("div", {
//"styles": this.css.createMeetingAttachmentContentNode
}).inject(this.attachmentNode);
this.attachmentController = new MWF.xApplication.Meeting.MeetingTooltip.AttachmentController(attachmentContentNode, this, {
"size": "min",
"isSizeChange": false,
"isReplace": false,
"isUpload": false,
"isDelete": false,
"isDownload": true,
"readonly": true
});
this.attachmentController.load();
this.data.attachmentList.each(function (att) {
att.person = att.lastUpdatePerson.split("@")[0];
var at = this.attachmentController.addAttachment(att);
}.bind(this));
}
},
downloadAttachment: function(e, node, attachments){
attachments.each(function(att){
this.app.actions.getFileDownload(att.data.id);
}.bind(this));
},
openAttachment: function(e, node, attachments){
attachments.each(function(att){
this.app.actions.getFile(att.data.id);
}.bind(this));
},
getAttachmentUrl: function(attachment, callback){
this.app.actions.getFileUrl(attachment.data.id, callback);
}
});
MWF.xApplication.Meeting.MeetingTooltip.AttachmentController = new Class({
Extends : MWF.widget.AttachmentController,
loadMin: function(){
if (!this.node) this.node = new Element("div", {"styles": this.css.container_min});
if (!this.minActionAreaNode){
//this.minActionAreaNode = new Element("div", {"styles": this.css.minActionAreaNode}).inject(this.node);
this.minContent = new Element("div", {"styles": this.css.minContentNode}).inject(this.node);
this.minContent.setStyles({
"margin-right" : "0px"
});
//this.min_downloadAction = this.createAction(this.minActionAreaNode, "download", MWF.LP.widget.download, function(e, node){
// this.downloadAttachment(e, node);
//}.bind(this));
this.node.inject(this.container);
//if (this.options.readonly) this.setReadonly();
this.checkActions();
this.setEvent();
}else{
//this.minActionAreaNode.setStyle("display", "block");
this.minContent.setStyle("display", "block");
this.minContent.empty();
}
var atts = [];
while (this.attachments.length){
var att = this.attachments.shift();
atts.push(new MWF.xApplication.Meeting.MeetingTooltip.AttachmentMin(att.data, this));
}
this.attachments = atts;
},
addAttachment: function(data){
if (this.options.size=="min"){
this.attachments.push(new MWF.xApplication.Meeting.MeetingTooltip.AttachmentMin(data, this));
}else{
this.attachments.push(new MWF.widget.AttachmentController.Attachment(data, this));
}
}
});
MWF.xApplication.Meeting.MeetingTooltip.AttachmentMin = new Class({
Extends : MWF.widget.AttachmentController.AttachmentMin,
setEvent: function(){
this.node.addEvents({
"mouseover": function(){if (!this.isSelected) this.node.setStyles(this.css["minAttachmentNode_list_over"])}.bind(this),
"mouseout": function(){if (!this.isSelected) this.node.setStyles(this.css["minAttachmentNode_list"])}.bind(this),
"mousedown": function(e){this.selected(e);}.bind(this),
"click": function(e){this.downloadAttachment(e);}.bind(this)
});
},
downloadAttachment: function(e){
if (this.controller.module) this.controller.module.downloadAttachment(e, null, [this]);
}
});
MWF.xApplication.Meeting.MeetingArea = new Class({
initialize: function(container, view, data){
this.container = container;
this.view = view;
this.css = this.view.css;
this.app = this.view.app;
this.data = data;
this.beginDate = Date.parse(this.data.startTime);
this.endDate = Date.parse(this.data.completedTime);
this.userName = layout.desktop.session.user.distinguishedName;
this.userId = layout.desktop.session.user.id;
this.parseData();
this.path = "../x_component_Meeting/$Common/default/meetingarea/";
this.cssPath = "../x_component_Meeting/$Common/default/meetingarea/css.wcss";
this._loadCss();
this.load();
},
load: function(){
this.node = new Element("div", {"styles": this.css.meetingNode}).inject( this.container );
this.node.addEvents({
mouseenter : function(){
this.node.setStyles( this.css.meetingNode_over );
this.subjectNode.setStyles( this.css.meetingSubjectNode_over );
}.bind(this),
mouseleave : function(){
this.node.setStyles( this.css.meetingNode );
this.subjectNode.setStyles( this.css.meetingSubjectNode );
}.bind(this),
click : function(){
this.openMeeting()
}.bind(this)
});
this.colorNode = new Element("div", {"styles": this.css.meetingColorNode}).inject(this.node);
this.contentNode = new Element("div", {"styles": this.css.meetingContentNode}).inject(this.node);
var beginTime = (this.beginDate.getHours() < 12 ? this.app.lp.am : this.app.lp.pm) + " " + this.getString( this.beginDate.getHours() ) + ":" + this.getString( this.beginDate.getMinutes() );
var endTime = (this.endDate.getHours() < 12 ? this.app.lp.am : this.app.lp.pm) + " " + this.getString( this.endDate.getHours() ) + ":" + this.getString( this.endDate.getMinutes() );
this.timeNode = new Element("div", {
"styles": this.css.meetingTimeNode,
"text" : beginTime + "-" + endTime
}).inject(this.contentNode);
this.subjectNode = new Element("div", {
"styles": this.css.meetingSubjectNode,
"text": this.data.subject
}).inject(this.contentNode);
var description = (this.data.description || "")+(this.data.summary || "");
this.descriptionNode = new Element("div", {
"styles": this.css.meetingDescriptionNode,
"text" : description
}).inject(this.contentNode);
this.loadActionBar();
switch (this.data.status){
case "wait":
this.colorNode.setStyles({"background-color": "#4990E2"});
this.timeNode.setStyles({"color": "#4990E2"});
break;
case "processing":
this.colorNode.setStyles({"background-color": "#66CC7F"});
this.timeNode.setStyles({"color": "#66CC7F"});
break;
case "completed":
//add attachment
this.colorNode.setStyles({"background-color": "#ccc"});
this.timeNode.setStyles({"color": "#ccc"});
break;
}
if (this.data.myWaitAccept){
this.colorNode.setStyles({"background-color": "#F6A623"});
this.timeNode.setStyles({"color": "#F6A623"});
}
this.resetNodeSize();
this.loadTooltip();
},
parseData : function(){
if( !this.data.status ){
var now = new Date();
var status;
if( this.beginDate > now ){
status = "wait";
}else if( this.endDate < now ){
status = "completed";
}else{
status = "processing";
}
this.data.status = status;
}
if( typeOf( this.data.myWaitAccept ) != "boolean" ){
if( this.data.invitePersonList.contains( this.userName ) || this.data.invitePersonList.contains( this.userId ) ){
this.data.myWaitAccept = ( !this.data.acceptPersonList.contains( this.userName ) || this.data.acceptPersonList.contains( this.userId ) ) &&
( !this.data.rejectPersonList.contains( this.userName ) || !this.data.rejectPersonList.contains( this.userId ) )
}
}
},
loadActionBar : function(){
if( this.userName == this.data.applicant || this.userId == this.data.applicant || MWF.AC.isMeetingAdministrator() || this.data.myWaitAccept ){
}else{
return;
}
this.actionBar = new Element("div", {
"styles": this.css.actionBar
}).inject(this.contentNode);
//this.viewAction = new Element("div", {
// styles: this.css.action_view,
// events : {
// mouseenter : function(){
// this.viewAction.setStyles( this.css.action_view_over );
// }.bind(this),
// mouseleave : function(){
// this.viewAction.setStyles( this.css.action_view );
// }.bind(this),
// click : function(){
// this.openMeeting()
// }.bind(this)
// }
//}).inject(this.actionBar);
if( this.userName == this.data.applicant || this.userId == this.data.applicant || MWF.AC.isMeetingAdministrator() ){
if( this.data.status=="wait" ){
this.editAction = new Element("div", {
styles: this.css.action_edit,
events : {
mouseover : function(){
this.editAction.setStyles( this.css.action_edit_over );
}.bind(this),
mouseout : function(){
this.editAction.setStyles( this.css.action_edit );
}.bind(this),
click : function(e){
this.editMeeting();
e.stopPropagation();
}.bind(this)
}
}).inject(this.actionBar);
//if (this.data.myWaitConfirm) this.createConfirmActions();
//if (this.data.myWaitAccept) this.createAcceptActions();
//if (this.data.status=="wait" && this.isEdit) this.createCancelActions();
this.removeAction = new Element("div", {
styles: this.css.action_remove,
events : {
mouseover : function(){
this.removeAction.setStyles( this.css.action_remove_over );
}.bind(this),
mouseout : function(){
this.removeAction.setStyles( this.css.action_remove );
}.bind(this),
click : function( e ){
this.cancel(e);
e.stopPropagation();
}.bind(this)
}
}).inject(this.actionBar);
}
}
if (this.data.myWaitAccept){
this.acceptAction = new Element("div", {
styles: this.css.action_accept,
title : this.app.lp.accept,
events : {
mouseover : function(){
this.acceptAction.setStyles( this.css.action_accept_over );
}.bind(this),
mouseout : function(){
this.acceptAction.setStyles( this.css.action_accept );
}.bind(this),
click : function( e ){
this.accept(e);
e.stopPropagation();
}.bind(this)
}
}).inject(this.actionBar);
this.rejectAction = new Element("div", {
styles: this.css.action_reject,
title : this.app.lp.reject,
events : {
mouseover : function(){
this.rejectAction.setStyles( this.css.action_reject_over );
}.bind(this),
mouseout : function(){
this.rejectAction.setStyles( this.css.action_reject );
}.bind(this),
click : function( e ){
this.reject(e);
e.stopPropagation();
}.bind(this)
}
}).inject(this.actionBar);
}
},
getString : function( str ){
var s = "00" + str;
return s.substr(s.length - 2, 2 );
},
_loadCss: function(){
var key = encodeURIComponent(this.cssPath);
if (MWF.widget.css[key]){
this.css = MWF.widget.css[key];
}else{
var r = new Request.JSON({
url: this.cssPath,
secure: false,
async: false,
method: "get",
noCache: false,
onSuccess: function(responseJSON, responseText){
this.css = responseJSON;
MWF.widget.css[key] = responseJSON;
}.bind(this),
onError: function(text, error){
alert(error + text);
}
});
r.send();
}
},
loadTooltip : function( isHideAttachment ){
this.tooltip = new MWF.xApplication.Meeting.MeetingTooltip(this.app.content, this.node, this.app, this.data, {
axis : "x",
hiddenDelay : 300,
displayDelay : 300,
isHideAttachment : isHideAttachment
});
},
showTooltip: function( ){
if( this.tooltip ){
this.tooltip.load();
}else{
this.tooltip = new MWF.xApplication.Meeting.MeetingTooltip(this.app.content, this.viewAction, this.app, this.data);
this.tooltip.load();
}
},
openMeeting: function(){
var form = new MWF.xApplication.Meeting.MeetingForm(this,this.data, {}, {app:this.app});
form.view = this.view;
form.open();
},
resetNodeSize: function(){
var contentSize = this.contentNode.getSize();
this.colorNode.setStyle("height", contentSize.y );
},
destroy: function(){
if(this.tooltip)this.tooltip.destroy();
this.node.destroy();
MWF.release(this);
},
editMeeting : function(){
var form = new MWF.xApplication.Meeting.MeetingForm(this,this.data, {}, {app:this.app});
form.view = this.view;
form.edit();
},
cancel: function(e){
var _self = this;
var text = this.app.lp.cancel_confirm.replace(/{name}/g, this.data.subject);
this.app.confirm("infor", e, this.app.lp.cancel_confirm_title, text, 380, 150, function(){
_self.cancelMeeting();
this.close();
}, function(){
this.close();
});
},
cancelMeeting: function(){
var view = this.view;
this.app.actions.deleteMeeting(this.data.id, function(){
view.reload();
}.bind(this))
},
reject: function(e){
var _self = this;
var text = this.app.lp.reject_confirm.replace(/{name}/g, this.data.subject);
this.app.confirm("infor", e, this.app.lp.reject_confirm_title, text, 300, 120, function(){
_self.rejectMeeting();
this.close();
}, function(){
this.close();
});
},
rejectMeeting: function(){
var view = this.view;
this.app.actions.rejectMeeting(this.data.id, function(){
view.reload();
}.bind(this))
},
accept: function(e){
var _self = this;
var text = this.app.lp.accept_confirm.replace(/{name}/g, this.data.subject);
this.app.confirm("infor", e, this.app.lp.accept_confirm_title, text, 300, 120, function(){
_self.acceptMeeting();
this.close();
}, function(){
this.close();
});
},
acceptMeeting: function(){
var view = this.view;
this.app.actions.acceptMeeting(this.data.id, function(){
view.reload();
}.bind(this))
},
disagree: function(e){
var _self = this;
var text = this.app.lp.disagree_confirm.replace(/{name}/g, this.data.subject);
this.app.confirm("infor", e, this.app.lp.disagree_confirm_title, text, 300, 120, function(){
_self.disagreeMeeting();
this.close();
}, function(){
this.close();
});
},
disagreeMeeting: function(){
var view = this.view;
this.app.actions.denyMeeting(this.data.id, function(){
view.reload();
}.bind(this))
},
agree: function(e){
var _self = this;
var text = this.app.lp.agree_confirm.replace(/{name}/g, this.data.subject);
this.app.confirm("infor", e, this.app.lp.agree_confirm_title, text, 300, 120, function(){
_self.agreeMeeting();
this.close();
}, function(){
this.close();
});
},
agreeMeeting: function(){
var view = this.view;
this.app.actions.allowMeeting(this.data.id, function(){
view.reload();
}.bind(this))
}
});
MWF.xApplication.Meeting.SideBar = new Class({
Extends: MWF.widget.Common,
Implements: [Options, Events],
options: {
"style": "default"
},
initialize : function( container, app, options){
this.setOptions( options );
this.container = container;
this.app = app;
//this.css = this.app.css;
this.lp = this.app.lp;
this.isHidden = false;
this.cssPath = "../x_component_Meeting/$Common/"+this.options.style+"/sidebar/css.wcss";
this._loadCss();
this.load();
},
load : function(){
this.node = new Element("div.sideBar", {
"styles": this.css.node,
events : {
mousedown : function( ev ){
ev.stopPropagation();
}
}
}).inject(this.container);
this.contentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.node);
this.loadStatusArea();
new Element("div.contentLine", {
"styles" : this.css.contentLine
}).inject( this.contentNode );
this.loadTodayMeetingNode();
this.trapezoid = new Element("div.trapezoid",{
"styles":this.css.trapezoid_toRight,
events : {
click : function(){
this.trigger();
}.bind(this)
}
}).inject(this.node);
//this.contentNode.getElements("div.line").setStyles(this.css.configContentLine);
this.loadTodayMeeting( function(){
var x = this.node.getSize().x - 8;
this.node.setStyle( "right", "-"+x+"px" );
this.resetNodeSize();
this.resetNodeSizeFun = this.resetNodeSize.bind(this);
this.app.addEvent("resize", this.resetNodeSizeFun );
this.hideFun = this.hide.bind(this);
this.app.node.addEvent("mousedown", this.hideFun);
}.bind(this));
},
loadStatusArea : function(){
var area = new Element("div", {
"styles" : this.css.statusArea
}).inject( this.contentNode );
var html = ""+this.lp.config.meetingStatus+"
" +
""+
"
" +
"
"+this.lp.config.wait+"
" +
""+
""+
"
" +
"
"+this.lp.config.progress+"
" +
""+
""+
"
" +
"
"+this.lp.config.invite+"
" +
""+
""+
"
" +
"
"+this.lp.config.completed+"
" +
""+
""+
"
" +
"
"+this.lp.config.conflict+"
" +
"";
area.set("html", html);
area.getElements("div.titleDiv").setStyles( this.css.titleDiv );
area.getElements("div.statusStyle").setStyles( this.css.statusStyle );
area.getElements("div.statusIconStyle").setStyles( this.css.statusIconStyle );
area.getElements("div.statusIconStyle2").setStyles( this.css.statusIconStyle2 );
area.getElements("div.statusTextStyle").setStyles( this.css.statusTextStyle );
},
loadTodayMeetingNode: function(){
var area = new Element("div.meetingArea", {
"styles" : this.css.meetingArea
}).inject( this.contentNode );
new Element("div.titleDiv", {
"styles" : this.css.titleDiv,
"text" : this.lp.meetingNotice
}).inject( area );
this.meetingNode = Element("div", {
"styles" : this.css.meetingNode
}).inject( area );
},
loadTodayMeeting : function( callback ){
var today = new Date();
var user = layout.desktop.session.user;
var dn = user.distinguishedName;
var y = today.getFullYear();
var m = today.getMonth()+1;
var d = today.getDate();
this.app.actions.listMeetingDay(y, m, d, function(json) {
var data = [];
json.data.each( function( d ){
if( d.invitePersonList.contains( dn ) || d.applicant == dn ){
if( !d.rejectPersonList.contains( dn ) ){
data.push( d );
}
}
}.bind(this));
if( user.distinguishedName ){
var userName = user.distinguishedName.split("@")[0]
}else{
var userName = user.name
}
var lp = data.length ? this.lp.meetingTopInfor : this.lp.noMeetingTopInfor ;
this.meetingTopNode = new Element("div", {
"styles" : this.css.meetingTopNode,
"html" : lp.replace("{userName}",userName).replace("{count}",data.length )
}).inject( this.meetingNode );
this.scrollNode = new Element("div.scrollNode", {
"styles" : this.css.scrollNode
}).inject( this.meetingNode );
this.meetingItemContainer = new Element("div.meetingItemContainer", {
"styles" : this.css.meetingItemContainer
}).inject( this.scrollNode );
data.each( function( d, i ){
var itemNode = new Element("div.meetingItemNode", {
"styles" : this.css.meetingItemNode,
"events" : {
click : function(){
this.obj.openMeeting( this.data );
}.bind({ obj : this, data : d })
}
}).inject( this.meetingItemContainer );
this.tooltipList = this.tooltipList || [];
this.tooltipList.push( new MWF.xApplication.Meeting.MeetingTooltip(this.app.content, itemNode, this.app, d, {
axis : "x",
hiddenDelay : 300,
displayDelay : 300
})
);
var colorNode = new Element("div.meetingItemColorNode", {
"styles" : this.css.meetingItemColorNode,
"text" : i+1
}).inject( itemNode );
var textNode = new Element("div.meetingItemTextNode", {
"styles" : this.css.meetingItemTextNode,
"text" : d.subject
}).inject( itemNode );
switch (d.status){
case "wait":
colorNode.setStyles({"background-color": "#4990E2"});
break;
case "processing":
colorNode.setStyles({"background-color": "#66CC7F"});
break;
case "completed":
//add attachment
colorNode.setStyles({"background-color": "#ccc"});
break;
}
if (d.myWaitAccept){
colorNode.setStyles({"background-color": "#F6A623"});
}
var y = itemNode.getSize().y ;
colorNode.setStyle("margin-top", ( y - 20)/2 );
}.bind(this));
this.setScrollBar( this.scrollNode );
if( callback )callback();
}.bind(this));
},
trigger : function(){
this.isHidden ? this.show( true ) : this.hide( true )
},
hide: function( isFireEvent ){
var x = this.node.getSize().x - 9;
var fx = new Fx.Morph(this.node, {
"duration": "300",
"transition": Fx.Transitions.Expo.easeOut
});
fx.start({
//"opacity": 0
}).chain(function(){
this.isHidden = true;
//this.node.setStyle("display", "none");
this.node.setStyles({
"right": "-"+x+"px"
});
this.trapezoid.setStyles( this.css.trapezoid_toLeft );
//if(isFireEvent)this.app.fireEvent("resize");
}.bind(this));
},
show: function( isFireEvent ){
this.node.setStyles(this.css.node);
this.trapezoid.setStyles( this.css.trapezoid_toRight );
//var x = this.node.getSize().x - 8;
//this.node.setStyles( "right", "-"+x+"px" );
var fx = new Fx.Morph(this.node, {
"duration": "500",
"transition": Fx.Transitions.Expo.easeOut
});
this.app.fireAppEvent("resize");
fx.start({
"opacity": 1
}).chain(function(){
this.node.setStyles({
//"position": "static",
//"width": "auto"
"right": "0px"
});
this.isHidden = false;
//if(isFireEvent)this.app.fireEvent("resize");
}.bind(this))
},
//show: function(){
// this.node.setStyles(this.css.configNode);
// var fx = new Fx.Morph(this.node, {
// "duration": "500",
// "transition": Fx.Transitions.Expo.easeOut
// });
// fx.start({
// "opacity": 1
// }).chain(function(){
// this.hideFun = this.hide.bind(this);
// this.app.content.addEvent("mousedown", this.hideFun);
// }.bind(this));
//},
//hide: function(){
// this.node.destroy();
// this.app.content.removeEvent("mousedown", this.hideFun);
// MWF.release(this);
//},
resetNodeSize: function(){
var size = this.container.getSize();
this.node.setStyle("height", size.y - 50 );
this.trapezoid.setStyle("top", ( (size.y - 50)/2 - this.trapezoid.getSize().y/2 ));
var y = size.y - 395;
var meetContainerY = this.meetingItemContainer.getSize().y + 12;
this.scrollNode.setStyle("height", Math.min( y, meetContainerY ) );
},
getSize : function(){
//var size = this.node.getSize();
//return {
// x : this.isHidden ? 9 : size.x,
// y : size.y
//}
return { x : 9, y : 0 }
},
showByType : function( type ){
},
reload : function(){
this.destory();
this.app.reload();
},
openMeeting : function( data ){
var form = new MWF.xApplication.Meeting.MeetingForm(this, data, {}, {app:this.app});
form.view = this.app;
form.open();
},
destory : function(){
this.tooltipList.each( function( t ){
t.destory();
});
this.app.removeEvent("resize", this.resetNodeSizeFun );
this.app.node.removeEvent("mousedown", this.hideFun);
this.node.destory();
}
});