MWF.xDesktop.requireApp("Attendance", "Explorer", null, false);
MWF.xDesktop.requireApp("Template", "Explorer", null, false);
MWF.xDesktop.requireApp("Template", "MDomItem", null, false);
MWF.xDesktop.requireApp("Organization", "Selector.package", null, false);
MWF.xApplication.Attendance.ImportExplorer = new Class({
Extends: MWF.xApplication.Attendance.Explorer,
Implements: [Options, Events],
initialize: function(node, app, actions, options){
this.setOptions(options);
this.app = app;
this.path = "/x_component_Attendance/$ImportExplorer/";
this.cssPath = "/x_component_Attendance/$ImportExplorer/"+this.options.style+"/css.wcss";
this._loadCss();
this.actions = actions;
this.node = $(node);
this.initData();
if (!this.personActions) this.personActions = new MWF.xAction.org.express.RestActions();
},
loadView : function(){
this.view = new MWF.xApplication.Attendance.ImportExplorer.View(this.elementContentNode, this.app,this, this.viewData, this.options.searchKey );
this.view.load();
this.setContentSize();
},
createDocument: function(){
if(this.view)this.view._createDocument();
},
importExcel : function(){
this.importer = new MWF.xApplication.Attendance.ImportExplorer.Importer( this );
this.importer.upload();
},
checkData : function(){
var selector = new MWF.xApplication.Attendance.ImportExplorer.YearMonthSelctor(this);
selector.edit();
},
analyseData : function(){
this.actions.analyseDetail("0","0",function(){
this.app.notice("分析考勤数据成功","success")
}.bind(this))
},
staticData : function(){
this.actions.staticAllDetail(function(){
this.app.notice("统计考勤数据成功","success")
}.bind(this))
},
downloadTemplate : function(){
window.open( this.path + encodeURIComponent( "dataTemplate.xls" ), "_blank" )
},
showDescription: function( el ){
if( this.descriptionNode ){
this.descriptionNode.setStyle("display","block");
this.descriptionNode.position({
relativeTo: el,
position: 'bottomLeft',
edge: 'upperCenter',
offset:{
x : -60,
y : 0
}
});
}else{
this.descriptionNode = new Element("div", {"styles": this.css.descriptionNode}).inject(this.node);
this.descriptionNode.position({
relativeTo: el,
position: 'bottomLeft',
edge: 'upperCenter',
offset:{
x : -60,
y : 0
}
});
this.descriptionNode.addEvent("mousedown", function(e){e.stopPropagation();});
document.body.addEvent("mousedown", function(){ this.descriptionNode.setStyle("display","none")}.bind(this));
var table = new Element("table", {
"width" : "100%", "border" : "0", "cellpadding" : "5", "cellspacing" : "0", "styles" : this.css.filterTable, "class" : "filterTable"
}).inject( this.descriptionNode );
var tr = new Element("tr").inject(table);
new Element("td",{ "text" : "数据导入步骤" , "styles" : this.css.descriptionTdHead }).inject(tr);
var tr = new Element("tr").inject(table);
new Element("td",{ "text" :"1、下载Excel模板,根据模板格式填写考勤数据;" , "styles" : this.css.descriptionTdValue }).inject(tr);
var tr = new Element("tr").inject(table);
new Element("td",{ "text" : "2、点击导入考勤数据按钮,选择考勤数据并确定,系统将校验考勤数据是否正确并导入数据;" , "styles" : this.css.descriptionTdValue }).inject(tr);
var tr = new Element("tr").inject(table);
new Element("td",{ "text" : "3、点击核对考勤数据按钮,选择需要核对的年度和月份,系统将核对需要考勤的人员的数据;" , "styles" : this.css.descriptionTdValue }).inject(tr);
var tr = new Element("tr").inject(table);
new Element("td",{ "text" : "4、点击分析考勤数据按钮,系统将生成出勤明细数据;" , "styles" : this.css.descriptionTdValue }).inject(tr);
var tr = new Element("tr").inject(table);
new Element("td",{ "text" : "5、点击统计考勤数据按钮,系统将生成个人、部门、公司的出勤率统计。" , "styles" : this.css.descriptionTdValue }).inject(tr);
}
}
});
MWF.xApplication.Attendance.ImportExplorer.View = new Class({
Extends: MWF.xApplication.Attendance.Explorer.View,
_createItem: function(data){
return new MWF.xApplication.Attendance.ImportExplorer.Document(this.table, data, this.explorer, this);
},
_getCurrentPageData: function(callback, count){
this.actions.listAttachmentInfo(function(json){
if (callback) callback(json);
});
},
_removeDocument: function(document, all){
this.actions.deleteAttachment(document.id, function(json){
this.explorer.view.reload();
this.app.notice(this.app.lp.deleteDocumentOK, "success");
}.bind(this));
},
_createDocument: function(){
//var permission = new MWF.xApplication.Attendance.ImportExplorer.Importer(this.explorer);
//permission.create();
},
_openDocument: function( documentData ){
this.actions.getAttachmentStream( documentData.id )
}
})
MWF.xApplication.Attendance.ImportExplorer.Document = new Class({
Extends: MWF.xApplication.Attendance.Explorer.Document
,
openVaild : function( e ){
//this.importer = new MWF.xApplication.Attendance.ImportExplorer.Importer( this );
}
})
MWF.xApplication.Attendance.ImportExplorer.YearMonthSelctor = new Class({
Extends: MWF.xApplication.Attendance.Explorer.PopupForm,
_createTableContent: function(){
var html = "
"+
"| 选择核对月份 |
" +
" | "+
" |
" +
" | "+
" |
" +
"
"
this.formTableArea.set("html",html);
MWF.xDesktop.requireApp("Template", "MForm", function(){
this.form = new MForm( this.formTableArea, {}, {
isEdited : this.isEdited || this.isNew,
itemTemplate : {
cycleYear : {
text:"年度",
type : "select",
selectValue : function(){
var years = []; d = new Date();
for(var i=0 ; i<5; i++){
years.push(d.getFullYear());
d.setFullYear(d.getFullYear()-1)
}
return years;
}
},
cycleMonth : {
text:"月份",
type : "select",
defaultValue : function(){ return new Date().getMonth(); },
selectValue : ["1","2","3","4","5","6","7","8","9","10","11","12"]
}
}
}, this.app);
this.form.load();
}.bind(this), true);
},
_ok: function( data, callback ){
this.app.restActions.checkDetail( data.cycleYear, data.cycleMonth, function(json){
this.app.notice("考勤数据核对成功");
this.close();
}.bind(this));
}
})
MWF.xApplication.Attendance.ImportExplorer.Importer = new Class({
Extends: MWF.widget.Common,
initialize: function( explorer, data ){
this.explorer = explorer;
this.app = explorer.app;
this.data = data || {};
this.css = this.explorer.css;
this.actions = this.explorer.actions;
this.load();
},
load: function(){
},
_openCheckPage : function( ){
this.checkMarkNode = new Element("div", {
"styles": this.css.checkMarkNode,
"events": {
"mouseover": function(e){e.stopPropagation();},
"mouseout": function(e){e.stopPropagation();}
}
}).inject(this.app.content, "after");
this.checkAreaNode = new Element("div", {
"styles": this.css.checkAreaNode
});
this.createNode();
this.checkAreaNode.inject(this.checkMarkNode, "after");
this.checkAreaNode.fade("in");
this.setCheckNodeSize();
this.setCheckNodeSizeFun = this.setCheckNodeSize.bind(this);
this.addEvent("resize", this.setCheckNodeSizeFun);
},
createNode: function(){
var _self = this;
this.checkNode = new Element("div", {
"styles": this.css.checkNode
}).inject(this.checkAreaNode);
this.closeCheckNode = new Element("div", {
"styles": this.css.closeCheckNode
}).inject(this.checkNode);
this.closeCheckNode.addEvent("click", function(){
this.closeLayout();
}.bind(this))
this.checkFormNode = new Element("div", {
"styles": this.css.checkFormNode
}).inject(this.checkNode);
var lp = this.app.lp.importer;
this.checkFormTitleNode = new Element("div", {
"styles": this.css.checkFormTitleNode,
"text" : "考勤数据导入校验结果"
}).inject(this.checkFormNode);
this.checkFormDescriptionNode = new Element("div", {
"styles": this.css.checkFormDescriptionNode,
"text" : "您上传的文件:“" + this.uploadFileName + "”未通过校验,请修改后重新导入。"
}).inject(this.checkFormNode);
this.checkTableContainer = new Element("div", {
"styles": this.css.checkTableContainer
}).inject(this.checkFormNode);
this.checkTableArea = new Element("div", {
"styles": this.css.checkTableArea
}).inject(this.checkTableContainer);
if( this.checkData.checkStatus != "error" ){
}else{
//"rowCount": 46,
// "errorCount": 46,
var table = new Element("table", {
"width" : "100%", "border" : "", "cellpadding" : "5", "cellspacing" : "0", "styles" : this.css.editTable, "class" : "editTable"
}).inject( this.checkTableArea );
var tr = new Element("tr").inject(table);
var td = new Element("td", { "styles" : this.css.editTableTitle, "text" : "员工号" }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableTitle, "text" : "员工名字" }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableTitle, "text" : "日期" }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableTitle, "text" : "上班时间" }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableTitle, "text" : "下班时间" }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableTitle, "text" : "检查结果" }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableTitle, "text" : "描述" }).inject(tr);
td.setStyle( "width" , "300px" );
this.checkData.detailList.each(function( d ){
var tr = new Element("tr").inject(table);
var td = new Element("td", { "styles" : this.css.editTableValue , "text": d.employeeNo }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableValue , "text": d.employeeName }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableValue , "text": d.recordDateString }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableValue , "text": d.onDutyTime }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableValue , "text": d.offDutyTime }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableValue , "text": d.checkStatus == "error" ? "错误" : "正确" }).inject(tr);
var td = new Element("td", { "styles" : this.css.editTableValue , "text": d.description }).inject(tr);
}.bind(this))
}
//this.checkFormNode.set("html", html);
this.setScrollBar(this.checkTableContainer)
//
//this.cancelActionNode = new Element("div", {
// "styles": this.css.checkCancelActionNode,
// "text": this.app.lp.cancel
//}).inject(this.checkFormNode);
//this.checkOkActionNode = new Element("div", {
// "styles": this.css.checkOkActionNode,
// "text": this.app.lp.ok
//}).inject(this.checkFormNode);
//
//this.cancelActionNode.addEvent("click", function(e){
// this.cancelCreate(e);
//}.bind(this));
//this.checkOkActionNode.addEvent("click", function(e){
// this.okCreate(e);
//}.bind(this));
},
setCheckNodeSize: function(){
var size = this.app.node.getSize();
var allSize = this.app.content.getSize();
this.checkAreaNode.setStyles({
"width": ""+size.x+"px",
"height": ""+size.y+"px"
});
var hY = size.y*0.9;
var mY = size.y*0.2/2;
this.checkNode.setStyles({
"height": ""+hY+"px",
"margin-top": ""+mY+"px"
});
var formHeight = hY*0.95;
if (formHeight< 250) formHeight = 250;
this.checkFormNode.setStyles({
"height": ""+formHeight+"px"
});
var titlesize = this.checkFormTitleNode.getSize();
var descriptionsize = this.checkFormDescriptionNode.getSize();
var tableHeight = formHeight - titlesize.y - descriptionsize.y - 50;
this.checkTableContainer.setStyles({
"height": ""+tableHeight+"px"
});
},
closeLayout: function(e){
this.checkMarkNode.destroy();
this.checkAreaNode.destroy();
delete this;
},
upload : function(){
if (!this.uploadFileAreaNode){
this.uploadFileAreaNode = new Element("div");
var html = "";
this.uploadFileAreaNode.set("html", html);
this.fileUploadNode = this.uploadFileAreaNode.getFirst();
this.fileUploadNode.addEvent("change", function(){
var files = fileNode.files;
if (files.length){
for (var i = 0; i < files.length; i++) {
var file = files.item(i);
var tmp = file.name.split(".");
this.uploadFileName = file.name;
if( tmp[tmp.length-1].toLowerCase() != "xls" && tmp[tmp.length-1].toLowerCase() != "xlsx" ){
this.app.notice("请导入excel文件!","error");
return;
}
var formData = new FormData();
formData.append('file', file);
this.actions.uploadAttachment( function( json ){
var id = json.id;
this.actions.checkAttachment(id, function(data){
this.checkData = data.data;
if( this.checkData.checkStatus == "error" ){
this._openCheckPage()
}else{
this.app.notice("文件已经成功上传并通过校验,系统正在导入,请不要关闭页面!","success");
this.import( id );
}
}.bind(this))
}.bind(this), function(xhr, text, error){
var errorText = error;
if (xhr) errorText = xhr.responseText;
this.app.notice( errorText,"error");
}.bind(this), formData, file);
}
}
}.bind(this));
}
var fileNode = this.uploadFileAreaNode.getFirst();
fileNode.click();
},
import: function( id ){
this.actions.importAttachment( id, function(json){
if( json.type == "ERROR" ){
this.app.notice( json.message , "error");
}else{
this.app.notice("数据导入成功!","success");
//this.app.notice("数据导入成功,系统正在分析打卡记录!","success");
//var recordList = json.data.dateRecordList;
//var listCount = recordList.length;
//var prcessedCount = 0;
//
//this.actions.analyseDetail( "(0)" , "(0)" ,function(){
//
// this.app.notice("分析打卡数据成功,系统正在统计考勤记录!","success");
//
// recordList.each( function( r ){
// this.actions.staticDetail( r.year , r.month ,function(){
// prcessedCount ++;
// if( prcessedCount == listCount ){
// this.app.notice("统计考勤记录成功,已完成所有导入步骤!","success");
// }
// }.bind(this))
// }.bind(this))
//
//}.bind(this))
}
}.bind(this))
}
})