| 1 |
- MWF.xApplication.Attendance=MWF.xApplication.Attendance||{};MWF.require("MWF.xAction.org.express.RestActions",null,false);MWF.xDesktop.requireApp("Attendance","lp."+MWF.language,null,false);MWF.xDesktop.requireApp("Attendance","Common",null,false);MWF.xApplication.Attendance.MyIndex=new Class({Extends:MWF.widget.Common,Implements:[Options,Events],options:{style:"default"},statusColor:{normal:"#9acd32",levelAsked:"#4f94cd",late:"#fede03",noSign:"#ee807f",appealSuccess:"#2ac497",lackOfTime:"#dec674",abNormalDuty:"#fedcbd"},initialize:function(t,e,i,s){this.setOptions(s);this.app=e;this.lp=e.lp;this.path="/x_component_Attendance/$MyIndex/";this.cssPath="/x_component_Attendance/$MyIndex/"+this.options.style+"/css.wcss";this._loadCss();this.actions=i;this.node=$(t);this.holidayData={};this.today=new Date;this.setDate();this.todayDate=this.today.format(this.lp.dateFormatDay);this.todayHloidayName="";this.todayIsWorkDay=false;this.userName=layout.desktop.session.user.distinguishedName},setDate:function(t){this.date=t||new Date;this.year=this.date.getFullYear().toString();var e=this.date.getMonth()+1;this.month=e.toString().length==2?e:"0"+e;this.getCycleDate()},destroy:function(){this.node.empty()},reload:function(){this.node.empty();this.load()},load:function(){this.loadTitleNode();this.loadContent()},loadTitleNode:function(){var t=this.date.format(this.app.lp.dateFormatMonth);this.titleNode=new Element("div.titleNode",{styles:this.css.titleNode}).inject(this.node);this.titleTextNode=new Element("div",{styles:this.css.titleTextNode,text:t}).inject(this.titleNode);this.titleTextNode.setStyles({"margin-left":"30px",cursor:"default"});var e="考勤周期:"+this.cycleStartDateString+"至"+this.cycleEndDateString;this.titleCycleTextNode=new Element("div",{styles:this.css.titleCycleTextNode,text:e}).inject(this.titleNode);this.titleScheduleIconNode=new Element("div",{styles:this.css.titleScheduleIconNode,title:this.lp.seeSchedule}).inject(this.titleNode);this.titleScheduleIconNode.addEvents({mouseover:function(){this.titleScheduleIconNode.setStyles(this.css.titleScheduleIconNode_over)}.bind(this),mouseout:function(){this.titleScheduleIconNode.setStyles(this.css.titleScheduleIconNode)}.bind(this),mousedown:function(){this.titleScheduleIconNode.setStyles(this.css.titleScheduleIconNode_down)}.bind(this),mouseup:function(){this.titleScheduleIconNode.setStyles(this.css.titleScheduleIconNode_over)}.bind(this),click:function(){this.showSchedule()}.bind(this)})},changeMonthPrev:function(){this.date.decrement("month",1);this.setDate(this.date);var t=this.date.format(this.app.lp.dateFormatMonth);this.titleTextNode.set("text",t);this.reloadContent()},changeMonthNext:function(){this.date.increment("month",1);this.setDate(this.date);var t=this.date.format(this.app.lp.dateFormatMonth);this.titleTextNode.set("text",t);this.reloadContent()},changeMonthSelect:function(){if(!this.monthSelector)this.createMonthSelector();this.monthSelector.show()},createMonthSelector:function(){this.monthSelector=new MWF.xApplication.Attendance.MonthSelector(this.date,this)},changeMonthTo:function(t){this.setDate(t);var e=this.date.format(this.app.lp.dateFormatMonth);this.titleTextNode.set("text",e);this.reloadContent()},getCycleDate:function(){this.actions.getCyclePerson(this.year,this.month,function(t){t.data=t.data||[];this.cycleStartDateString=t.data.cycleStartDateString;this.cycleEndDateString=t.data.cycleEndDateString;this.cycleStartDate=new Date(this.cycleStartDateString);this.cycleEndDate=new Date(this.cycleEndDateString);this.isCrossMonth=this.cycleStartDate.getMonth()!=this.cycleEndDate.getMonth()}.bind(this),null,false)},getScheduleData:function(o){var t={personList:this.app.getNameFlag(this.userName)};this.app.orgActions.listUnitSupNestedWithPerson(t,function(t){var e=t.data;var i=function(t,e){return e.level-t.level};debugger;e.sort(i);var s=true;for(var a=0;a<e.length;a++){var n=e[a];if(n.level==1){this.actions.listScheduleByTopUnit(n.distinguishedName,function(t){if(t.data){if(o)o(t.data);s=false}}.bind(this),null,false)}else{this.actions.listScheduleByUnit(n.distinguishedName,function(t){if(t.data&&t.data.length>0){if(o)o(t.data);s=false}}.bind(this),null,false)}if(!s)break}}.bind(this),null,false)},showSchedule:function(){if(this.scheduleNode){this.scheduleNode.setStyle("display","block");this.scheduleNode.position({relativeTo:this.titleScheduleIconNode,position:"bottomLeft",edge:"upperCenter",offset:{x:-60,y:0}})}else{this.getScheduleData(function(t){if(!t||t.length==0){this.app.notice(this.lp.unfindSchedule,"error")}else{this.scheduleNode=new Element("div",{styles:this.css.scheduleNode}).inject(this.node);this.scheduleNode.position({relativeTo:this.titleScheduleIconNode,position:"bottomLeft",edge:"upperCenter",offset:{x:-60,y:0}});this.scheduleNode.addEvent("mousedown",function(t){t.stopPropagation()});document.body.addEvent("mousedown",function(){this.scheduleNode.setStyle("display","none")}.bind(this));var e=t[0];var i=new Element("table",{width:"100%",border:"0",cellpadding:"5",cellspacing:"0",styles:this.css.filterTable,class:"filterTable"}).inject(this.scheduleNode);var s=new Element("tr").inject(i);new Element("td",{text:this.lp.scheduleTable,styles:this.css.scheduleTdHead,colspan:"2"}).inject(s);var s=new Element("tr").inject(i);new Element("td",{text:this.lp.schedule.workTime+":",styles:this.css.scheduleTdTitle}).inject(s);new Element("td",{text:e.onDutyTime||"",styles:this.css.scheduleTdValue}).inject(s);var s=new Element("tr").inject(i);new Element("td",{text:this.lp.schedule.offTime+":",styles:this.css.scheduleTdTitle}).inject(s);new Element("td",{text:e.offDutyTime||"",styles:this.css.scheduleTdValue}).inject(s);var s=new Element("tr").inject(i);new Element("td",{text:this.lp.schedule.lateTime+":",styles:this.css.scheduleTdTitle}).inject(s);new Element("td",{text:e.lateStartTime||"",styles:this.css.scheduleTdValue}).inject(s);var s=new Element("tr").inject(i);new Element("td",{text:this.lp.schedule.leaveEarlyTime+":",styles:this.css.scheduleTdTitle}).inject(s);new Element("td",{text:e.leaveEarlyStartTime||"",styles:this.css.scheduleTdValue}).inject(s);var s=new Element("tr").inject(i);new Element("td",{text:this.lp.schedule.absenteeismTime+":",styles:this.css.scheduleTdTitle}).inject(s);new Element("td",{text:e.absenceStartTime||"",styles:this.css.scheduleTdValue}).inject(s)}}.bind(this))}},reloadContent:function(){this.calendarArea.empty();this.statusColorArea.empty();this.pieChartArea.empty();this.lineChartArea.empty();this.loadData()},loadContent:function(){this.loadContentNode();this.loadData();this.setNodeScroll();this.setContentSize()},reloadChart:function(){this.pieChartArea.empty();this.lineChartArea.empty();this.loadPieChart();this.loadLineChart()},loadContentNode:function(){this.elementContentNode=new Element("div.elementContentNode",{styles:this.css.elementContentNode}).inject(this.node);this.app.addEvent("resize",function(){this.setContentSize();this.reloadChart()}.bind(this));this.elementContentListNode=new Element("div.elementContentListNode",{styles:this.css.elementContentListNode}).inject(this.elementContentNode);this.topContentArea=new Element("div.topContentArea",{styles:this.css.topContentArea}).inject(this.elementContentListNode);this.calendarArea=new Element("div.calendarArea",{styles:this.css.calendarArea}).inject(this.topContentArea);this.statusColorArea=new Element("div.statusColorArea",{styles:this.css.statusColorArea}).inject(this.topContentArea);this.pieChartArea=new Element("div.pieChartArea",{styles:this.css.pieChartArea}).inject(this.topContentArea);this.middleContentArea=new Element("div.middleContentArea",{styles:this.css.middleContentArea}).inject(this.elementContentListNode);this.lineChartArea=new Element("div.lineChartArea",{styles:this.css.lineChartArea}).inject(this.middleContentArea)},loadData:function(){this.listDetailFilterUser(function(t){this.detailData=t||{};this.anaylyseDetail();this.loadStatusColorNode();this.loadPieChart();this.loadLineChart();this.loadHolidayData(function(){this.loadCalendarContent()}.bind(this))}.bind(this),this.userName,this.year,this.month)},loadHolidayData:function(i){if(this.holidayData&&this.holidayData[this.year]){if(i)i()}else{this.listHolidayFilter(function(t){var e={workdays:[],holidays:[],names:[]};t.each(function(t){if(!e.names.contains(t.configName)){e.names.push(t.configName)}if(!e[t.configName]){e[t.configName]={};e[t.configName].holidays=[];e[t.configName].workdays=[]}if(t.configType=="Holiday"){if(t.configDate==this.todayDate){this.todayHloidayName=t.configName}e.holidays.push(t.configDate);e[t.configName].holidays.push(t.configDate)}else{if(t.configDate==this.todayDate){this.todayIsWorkDay=true}e.workdays.push(t.configDate);e[t.configName].workdays.push(t.configDate)}});this.holidayData[this.year]=e;if(i)i()}.bind(this),null,this.year)}},loadCalendarContent:function(){this.canlendarToolbar=new Element("div.canlendarToolbar",{styles:this.css.canlendarToolbar}).inject(this.calendarArea);this.canlendarToolbarText=new Element("div",{styles:this.css.canlendarToolbarText,text:this.lp.index.attendanceCalendar}).inject(this.canlendarToolbar);this.calendarDate=this.date.clone();if(this.isCrossMonth){this.calendarRightArrowNode=new Element("div",{styles:this.css.calendarRightArrowNode}).inject(this.canlendarToolbar);this.calendarCurrentMonthNode=new Element("div",{styles:this.css.calendarCurrentMonthNode,text:this.calendarDate.getMonth()+1+"月"}).inject(this.canlendarToolbar);this.calendarLeftArrowNode=new Element("div",{styles:this.css.calendarLeftArrowNode}).inject(this.canlendarToolbar);this.calendarLeftArrowNode.addEvents({click:function(){this.changeCalendarMonthPrev()}.bind(this)});this.calendarRightArrowNode.addEvents({click:function(){this.changeCalendarMonthNext()}.bind(this)});this.switchCalendarArrow(this.calendarDate)}this.calendarNode=new Element("div.calendarNode",{styles:this.css.calendarNode}).inject(this.calendarArea);this.calendar=new MWF.xApplication.Attendance.Calendar(this.calendarNode,this,{holiday:this.holidayData[this.year],detail:this.detailData,eventData:this.eventData},{date:this.date,cycleStart:this.cycleStartDate,cycleEnd:this.cycleEndDate});this.calendar.load()},switchCalendarArrow:function(t){var e=new Date(t.getFullYear(),t.getMonth(),1,0,0,0);if(e<=this.cycleStartDate){this.calendarLeftArrowNode.setStyles(this.css.calendarLeftArrowNode_disable);this.calendarLeftDisable=true}else{this.calendarLeftArrowNode.setStyles(this.css.calendarLeftArrowNode);this.calendarLeftDisable=false}var i=new Date(t.getFullYear(),t.getMonth()+1,0,23,59,59);if(i>=this.cycleEndDate){this.calendarRightArrowNode.setStyles(this.css.calendarRightArrowNode_disable);this.calendarRightDisable=true}else{this.calendarRightArrowNode.setStyles(this.css.calendarRightArrowNode);this.calendarRightDisable=false}},changeCalendarMonthPrev:function(){if(this.calendarLeftDisable)return;jQuery(this.calendarNode).fullCalendar("prev");this.calendarDate.decrement("month",1);this.calendarCurrentMonthNode.set("text",this.calendarDate.getMonth()+1+"月");this.switchCalendarArrow(this.calendarDate)},changeCalendarMonthNext:function(){if(this.calendarRightDisable)return;jQuery(this.calendarNode).fullCalendar("next");this.calendarDate.increment("month",1);this.calendarCurrentMonthNode.set("text",this.calendarDate.getMonth()+1+"月");this.switchCalendarArrow(this.calendarDate)},listHolidayFilter:function(e,t,i,s){var a={};if(t)a.q_Name=t;if(i)a.q_Year=i;if(s){a.q_Month=s.toString().length==2?s:"0"+s}else{a.q_Month="(0)"}this.actions.listHolidayFilter(a,function(t){if(e)e(t.data)}.bind(this))},loadHolidayNode:function(){this.holidayAreaNode=new Element("div.holidayAreaNode",{styles:this.css.holidayAreaNode}).inject(this.canlendarToolbar);this.holidayActionNode=new Element("div",{styles:this.css.holidayActionNode}).inject(this.holidayAreaNode);this.holidayActionTextNode=new Element("div",{styles:this.css.holidayActionTextNode,text:this.lp.holiday.holidaySchedule}).inject(this.holidayActionNode);this.holidayActionIconNode=new Element("div",{styles:this.css.holidayActionIconNode}).inject(this.holidayActionNode);this.holidayActionNode.addEvents({mouseover:function(){this.holidayActionIconNode.setStyles(this.css.holidayActionIconNode_over)}.bind(this),mouseout:function(){this.holidayActionIconNode.setStyles(this.css.holidayActionIconNode)}.bind(this),click:function(t){this.switchHoliday(t.target);t.stopPropagation()}.bind(this)})},switchHoliday:function(t){var s=this;var e=false;if(this.holidayListNode){if(this.holidayListNode.retrieve("year")==this.year){e=true}else{this.holidayListNode.destroy()}}if(e){var i=t.getParent();this.holidayListNode.inject(i);if(this.holidayListNode.getStyle("display")=="block"){this.holidayListNode.setStyle("display","none")}else{this.holidayListNode.setStyle("display","block")}}else{var a=this.holidayData[this.year];var n=this.holidayListNode=new Element("div",{styles:this.css.holidayListNode});this.holidayListNode.store("year",this.year);this.app.content.addEvent("click",function(){s.holidayListNode.setStyle("display","none")});a.names.each(function(t){var e=new Element("div",{text:t,styles:this.css.holidayNode}).inject(n);e.store("holidays",a[t].holidays);e.store("workdays",a[t].workdays);e.addEvents({mouseover:function(){this.setStyles(s.css.holidayNode_over)},mouseout:function(){this.setStyles(s.css.holidayNode)},click:function(t){s.holidayListNode.setStyle("display","none");var e=this.retrieve("holidays");var i=this.retrieve("workdays");this.setStyles(s.css.holidayNode);s.changeMonthTo(new Date((e||i)[0]));t.stopPropagation()}})}.bind(this));var i=t.getParent();this.holidayListNode.inject(i)}},loadStatusColorNode:function(){this.statusColorTable=new Element("table",{styles:this.css.statusColorTable}).inject(this.statusColorArea);for(var t in this.statusColor){var e=new Element("tr",{styles:this.css.statusColorTr}).inject(this.statusColorTable);var i=new Element("td",{styles:this.css.statusColorTd}).inject(e);i.setStyle("background-color",this.statusColor[t]);var e=new Element("tr",{styles:this.css.statusTextTr}).inject(this.statusColorTable);var i=new Element("td",{styles:this.css.statusTextTd,text:this.lp[t]+this.totalData[t]+"天"+(this.rateData[t]?"("+this.rateData[t]+")":"")}).inject(e)}},loadPieChart:function(){this.pieChartNode=new Element("div.pieChartNode",{styles:this.css.pieChartNode}).inject(this.pieChartArea);this.pieChart=new MWF.xApplication.Attendance.Echarts(this.pieChartNode,this,this.totalData,this.css);this.pieChart.load()},loadLineChart:function(){this.lineChartNode=new Element("div.lineChartNode",{styles:this.css.lineChartNode}).inject(this.lineChartArea);this.lineChart=new MWF.xApplication.Attendance.Echarts(this.lineChartNode,this,this.detailData,{type:"line",date:this.date,cycleStart:new Date(this.cycleStartDate.getFullYear(),this.cycleStartDate.getMonth(),this.cycleStartDate.getDate()),cycleEnd:new Date(this.cycleEndDate.getFullYear(),this.cycleEndDate.getMonth(),this.cycleEndDate.getDate())});this.lineChart.load()},listDetailFilterUser:function(i,t,e,s){var a={};if(t)a.q_empName=t;if(e)a.cycleYear=e;if(s)a.cycleMonth=s.toString().length==2?s:"0"+s;this.actions.listDetailFilterUser(a,function(t){var e=t.data||[];e.sort(function(t,e){return parseInt(t.recordDateString.replace(/-/g,""))-parseInt(e.recordDateString.replace(/-/g,""))});if(i)i(e)}.bind(this))},setContentSize:function(){var t=this.toolbarNode?this.toolbarNode.getSize():{x:0,y:0};var e=this.titleNode?this.titleNode.getSize():{x:0,y:0};var i=this.node.getSize();var s=this.elementContentNode.getStyle("padding-top").toFloat();var a=this.elementContentNode.getStyle("padding-bottom").toFloat();var n=this.filterConditionNode?this.filterConditionNode.getSize():{x:0,y:0};var o=i.y-t.y-s-a-n.y-e.y;this.elementContentNode.setStyle("height",""+o+"px")},setNodeScroll:function(){var t=this;MWF.require("MWF.widget.ScrollBar",function(){new MWF.widget.ScrollBar(this.elementContentNode,{indent:false,style:"xApp_TaskList",where:"before",distance:30,friction:4,axis:{x:false,y:true},onScroll:function(t){}})}.bind(this))},anaylyseDetail:function(){var e=[];var i={levelAsked:0,noSign:0,late:0,appealSuccess:0,lackOfTime:0,abNormalDuty:0,normal:0};this.detailData.each(function(t){if(this.isAskForLevel(t,"am")){e.push({text:this.lp.levelAsked,start:t.recordDateString,backgroundColor:this.statusColor.levelAsked});i.levelAsked=i.levelAsked+.5}else if(this.isAppealSuccess(t,"am")){e.push({text:this.lp.appealSuccess,start:t.recordDateString,backgroundColor:this.statusColor.appealSuccess});i.appealSuccess=i.appealSuccess+.5}else if(this.isAbsent(t,"am")){e.push({text:this.lp.noSign,start:t.recordDateString,backgroundColor:this.statusColor.noSign});i.noSign=i.noSign+.5}else if(this.isLate(t,"am")){e.push({text:this.lp.late+","+this.lp.signTime+":"+t.onDutyTime,start:t.recordDateString,backgroundColor:this.statusColor.late});i.late=i.late+.5}else if(this.isLackOfTime(t,"am")){e.push({text:this.lp.lackOfTime+","+this.lp.signTime+":"+t.onDutyTime,start:t.recordDateString,backgroundColor:this.statusColor.lackOfTime});i.lackOfTime=i.lackOfTime+.5}else if(this.isAbnormalDuty(t,"am")){e.push({text:this.lp.abNormalDuty+","+this.lp.signTime+":"+t.onDutyTime,start:t.recordDateString,backgroundColor:this.statusColor.abNormalDuty});i.abNormalDuty=i.abNormalDuty+.5}else if(this.isHoliday(t,"am")){return}else if(this.isWeekend(t,"am")){return}else{i.normal=i.normal+.5;e.push({text:this.lp.normal+","+this.lp.signTime+":"+t.onDutyTime,start:t.recordDateString,backgroundColor:this.statusColor.normal})}if(this.isAskForLevel(t,"pm")){i.levelAsked=i.levelAsked+.5;e.push({text:"请假或外出报备",start:t.recordDateString,backgroundColor:this.statusColor.levelAsked})}else if(this.isAppealSuccess(t,"pm")){e.push({text:this.lp.appealSuccess,start:t.recordDateString,backgroundColor:this.statusColor.appealSuccess});i.appealSuccess=i.appealSuccess+.5}else if(this.isAbsent(t,"pm")){i.noSign=i.noSign+.5;e.push({text:"缺勤",start:t.recordDateString,backgroundColor:this.statusColor.noSign})}else if(this.isLackOfTime(t,"pm")){e.push({text:this.lp.lackOfTime+","+this.lp.signTime+":"+t.offDutyTime,start:t.recordDateString,backgroundColor:this.statusColor.lackOfTime});i.lackOfTime=i.lackOfTime+.5}else if(this.isAbnormalDuty(t,"pm")){e.push({text:this.lp.abNormalDuty+","+this.lp.signTime+":"+t.offDutyTime,start:t.recordDateString,backgroundColor:this.statusColor.abNormalDuty});i.abNormalDuty=i.abNormalDuty+.5}else if(this.isHoliday(t,"pm")){return}else if(this.isWeekend(t,"pm")){return}else{i.normal=i.normal+.5;e.push({text:"出勤,打卡时间:"+t.offDutyTime,start:t.recordDateString,backgroundColor:this.statusColor.normal})}}.bind(this));this.totalData=i;var t=0;for(var s in i){t+=i[s]}this.rateData={levelAsked:!i.levelAsked||!t?0:(i.levelAsked/t*100).toFixed(2)+"%",noSign:!i.noSign||!t?0:(i.noSign/t*100).toFixed(2)+"%",late:!i.late||!t?0:(i.late/t*100).toFixed(2)+"%",lackOfTime:!i.lackOfTime||!t?0:(i.lackOfTime/t*100).toFixed(2)+"%",abNormalDuty:!i.abNormalDuty||!t?0:(i.abNormalDuty/t*100).toFixed(2)+"%",normal:!i.normal||!t?0:(i.normal/t*100).toFixed(2)+"%",appealSuccess:!i.appealSuccess||!t?0:(i.appealSuccess/t*100).toFixed(2)+"%"};this.eventData=e},isAppealSuccess:function(t,e){return t.appealStatus==9},isAskForLevel:function(t,e){if(e=="am"){return t.isGetSelfHolidays&&(t.selfHolidayDayTime=="全天"||t.selfHolidayDayTime=="上午")}else{return t.isGetSelfHolidays&&(t.selfHolidayDayTime=="全天"||t.selfHolidayDayTime=="下午")}},isAbsent:function(t,e){if(e=="am"){return t.isAbsent&&(t.absentDayTime=="全天"||t.absentDayTime=="上午")}else{return t.isAbsent&&(t.absentDayTime=="全天"||t.absentDayTime=="下午")}},isLate:function(t,e){return t.isLate},isWorkOvertime:function(t,e){return t.isWorkOvertime},isLackOfTime:function(t,e){return t.isLackOfTime},isAbnormalDuty:function(t,e){if(e=="am"){return t.isAbnormalDuty&&(t.abnormalDutyDayTime=="全天"||t.abnormalDutyDayTime=="上午")}else{return t.isAbnormalDuty&&(t.abnormalDutyDayTime=="全天"||t.abnormalDutyDayTime=="下午")}},isHoliday:function(t,e){if(e=="am"){return t.isHoliday&&(!t.onDutyTime||t.onDutyTime=="")}else{return t.isHoliday&&(!t.offDutyTime||t.offDutyTime=="")}},isWeekend:function(t,e){if(t.isWorkday)return false;if(e=="am"){return t.isWeekend&&(!t.onDutyTime||t.onDutyTime=="")}else{return t.isWeekend&&(!t.offDutyTime||t.offDutyTime=="")}},toFixed:function(t,e){var i=t+"";if(!e)e=0;if(i.indexOf(".")==-1)i+=".";i+=new Array(e+1).join("0");if(new RegExp("^(-|\\+)?(\\d+(\\.\\d{0,"+(e+1)+"})?)\\d*$").test(i)){var i="0"+RegExp.$2,s=RegExp.$1,a=RegExp.$3.length,n=true;if(a==e+2){a=i.match(/\d/g);if(parseInt(a[a.length-1])>4){for(var o=a.length-2;o>=0;o--){a[o]=parseInt(a[o])+1;if(a[o]==10){a[o]=0;n=o!=1}else break}}i=a.join("").replace(new RegExp("(\\d+)(\\d{"+e+"})\\d$"),"$1.$2")}if(n)i=i.substr(1);return(s+i).replace(/\.$/,"")}return this+""}});
|