起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3498|回复: 3

[结贴] X5 OA计算请假天数

[复制链接]

27

主题

65

帖子

221

积分

中级会员

Rank: 3Rank: 3

积分
221
QQ
发表于 2017-8-17 16:12:01 | 显示全部楼层 |阅读模式
版本: BeX5V3.5 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
以下是 common.js的代码,现在代码是周六日算休息日,我们实际是周日算休息,要改那几个才可以实现周六算上班
define(function(require) {
        var justep = require("$UI/system/lib/justep");
        var biz = require("$UI/system/lib/biz");
        var KnowledgeInterface = require("$UI/HTTCOA/knowledge/js/knowledgeInterface");
        var Data = require("$UI/system/components/justep/data/data");
       
        var defBeginTimeAM = "8:30";
        var defEndTimeAM = "12:00";
        var defBeginTimePM = "13:00";
        var defEndTimePM = "17:30";
        var num =0;
        // 取上下班时间
        // function setSpecDayHours(beginDate){
        // var ksql = "select
        // e.fMorningBeginDate,e.fMorningendDate,e.fAfternoonBeginDate,e.fAfternoonendDate
        // from OA_WM_TimeEnactment e where e.fYear="+parseInt(beginDate.substring(0,
        // 4), 10);
        // var dataModel = "/OA/workTime/data";
        // var param = new justep.Request.ActionParam();
        // param.setString('ksql', ksql);
        // param.setString('dataModel', dataModel);
        // var result = justep.Request.sendBizRequest(
        // "/OA/workTime/process/leave/leaveProcess", "mainActivity",
        // "ksqlQueryAction", param, null, null, true);
        // var resultList = justep.XML.eval(result.responseXML,
        // "//rows/row");
        // for(var i=0;i<resultList.length;i++){
        // defBeginTimeAM = justep.XML.getNodeText(justep.XML.eval(
        // resultList[i], "cell[1]", "single"));
        // defEndTimeAM = justep.XML.getNodeText(justep.XML.eval(
        // resultList[i], "cell[2]", "single"));
        // defBeginTimePM = justep.XML.getNodeText(justep.XML.eval(
        // resultList[i], "cell[3]", "single"));
        // defEndTimePM = justep.XML.getNodeText(justep.XML.eval(
        // resultList[i], "cell[4]", "single"));
        // }
        //       
        // }
        return {
                // 计算周末天数
                removeWeek : function(beginDate, endDate) {
                        var begin =new Date(beginDate.toString().split('-')[0],Number(beginDate.toString().split('-')[1])-1,beginDate.toString().split('-')[2]);
                        var end =new Date(endDate.toString().split('-')[0],Number(endDate.toString().split('-')[1])-1,endDate.toString().split('-')[2]);
                    var        less=end-begin;
                        var beginDay=begin.getDay();
                        var endDay=end.getDay();
                        var number=Math.floor(less / (1000 * 60 * 60) / 24 + 1);
                        if (number == 1) {
                                return 0;
                        }
                        var day1 = beginDay ? (7 + 1 - beginDay) : 1;// 第一周的天数
                        var day2 = endDay ? endDay : 7;// 最后一周的天数
                        var num1 = number - day1 - day2;// 中间的天数
                        if (num1 < 0) {
                                if(endDay == 0){
                                        if(beginDay==6){
                                                return 1;
                                        }else{
                                                return 2;
                                        }
                                }else if(endDay == 6){
                                        return 1;
                                }else{
                                        return 0;
                                }
                        }
                        total = parseInt(num1 / 7) * 2 + (day1 ==1 ? 1 : 2)
                                        + (day2 <=5 ? 0 : day2-5);
                        return total;
                },
               
                // 计算请假天数               
                calLeaveData : function(beginTime, endTime) {                       
                        var beginDate = this.getDateFormDateTime(beginTime);
                        var endDate = this.getDateFormDateTime(endTime);
                        var bTime = this.getTimeFormDateTime(beginTime);
                        var eTime = this.getTimeFormDateTime(endTime);
                       
                        var hour = 0;
                        if(beginDate == endDate) {
                                 var flag = this.isHoliday(beginDate); // 判断该日为休息
                                 if(flag) {
                                 hour = 0;
                                 } else {
                                        hour = this.getSpecDayHour(bTime,eTime);
                                 }                                 
                        } else {
                                var week=this.removeWeek(beginDate,endDate);
                               
                                var bHour = 0;
                                var itvHour = 0;
                                var eHour = 0;
                                 if(!this.isHoliday(beginDate)) {
                                        bHour = this.getSpecDayHour(bTime,defEndTimePM);
                                 }
                               
                                 if(!this.isHoliday(endDate)) {
                                        eHour = this.getSpecDayHour(defBeginTimeAM,eTime);
                                 }
                                var arrBDate = beginDate.split("-");
                                var arrEDate = endDate.split("-");
                                var bDate = new Date();
                                var eDate = new Date();
                                bDate.setFullYear(arrBDate[0],arrBDate[1]*1-1,arrBDate[2]);
                                eDate.setFullYear(arrEDate[0],arrEDate[1]*1-1,arrEDate[2]);
                                itvHour = ((eDate - bDate)/(3600*24*1000)- 1) * 8;
                                var reArray = this.getHolidays(itvHour,beginDate,endDate);
                                // itvHour = itvHour - holidays * 8;
                                hour = bHour + reArray["itvHour"] + eHour-(week*8)+(num*8);
                                num=0;
                        }
                        return hour;
                       
                },
                // isHoliday(date) : 判断某一天是否为假期,返回值类型:布尔值
                // getHolidays(beginDate,endDate) 获取某日期段内的休息日天数,返回类型:数值
                // 注意:getHolidays 的查询条件应该是 (fDate > beginDate) and (fDate < endDate)
                // 伪ksql: select count(xx) from xx where (fDate > beginDate) and (fDate <
                // endDate)
               
               
                // 计算小时(只计算同一天)
                getSpecDayHour : function(bTime,eTime) {
                        var hour = 0;
                        var rBTime = this.getRealBTime(bTime);
                        var rETime = this.getRealETime(eTime);
                        return this.calHour(rBTime,rETime);
                },
                // 判断是否是节假日
                getHolidays : function(itvHour,beginDate,endDate){
                        var datetime1=new Date(beginDate.toString().split("-")[0],Number(beginDate.toString().split("-")[1])-1,beginDate.toString().split("-")[2]);
                        var time1=new Date(datetime1.getTime()+24 * 60 * 60 * 1000);
                        var s1=time1.getFullYear()+"-"+(time1.getMonth()+1)+"-"+time1.getDate();
                       
                        var datetime2=new Date(endDate.toString().split("-")[0],Number(endDate.toString().split("-")[1])-1,endDate.toString().split("-")[2]);
                        var time2=new Date(datetime2.getTime()-24 * 60 * 60 * 1000);
                        var s2=time2.getFullYear()+"-"+(time2.getMonth()+1)+"-"+time2.getDate();
                       
                        var ksql = "select e.fDate,e.fState from OA_WM_Holiday e where  e.fDate between stringToDate('"+s1+"') and stringToDate('"+s2+"')";                                                                                                                                                                                                                 
                        var dataModel = "/OA/workTime/data";
                        /*var param = new justep.Request.ActionParam();
                        param.setString('ksql', ksql);
                        param.setString('dataModel', dataModel);
                        var result = justep.Request.sendBizRequest(
                                        "/OA/workTime/process/leave/leaveProcess", "mainActivity",
                                        "ksqlQueryAction", param, null, null, true);
                        var resultList = justep.XML.eval(result.responseXML,
                        "//rows/row");*/
                        var resultList="";
                        var params = new biz.Request.ActionParam();
                        params.setParam("ksql", ksql);
                        params.setParam("dataModel", dataModel);
                        //var ctx = this.getContext();
                        var options = {
                                //context : ctx,
                                process : "/OA/workTime/process/leave/leaveProcess",
                                activity : "mainActivity",
                                action : "ksqlQueryAction",
                                parameters : params,
                                callback: function(data){
                                        if(data.state){
                                                resultList=data.response;
                                        }//else{
                                        //        Request.errorMessage(resultData, "执行失败!", null, null);
                                        //}       
                                }
                        };               
                        var r=biz.Request.sendBizRequest(options);
                       
                        var fLeaveTypeID;
                        var fDate="";
                        var count=0;
                        var num1=0;
                        var reArray = new Array();
                        var date = new Date();
                        for(var i=0;i<resultList.length;i++){
                                fLeaveTypeID = justep.XML.getNodeText(justep.XML.eval(
                                                resultList[i], "cell[2]", "single"));
                                fDate = justep.XML.getNodeText(justep.XML.eval(
                                                resultList[i], "cell[1]", "single"));
                                var arrBDate = fDate.split("-");
                                date.setFullYear(arrBDate[0],arrBDate[1]*1-1,arrBDate[2]);
                                if(fLeaveTypeID =='2'){// 上班
                                        if(date.getDay()=="0" ||date.getDay()=="6"){// 并且是周末
                                                num++;
                                                num1++;
                                        }  
                                }
                                if(fLeaveTypeID =='1'){// 休息
                                        if(date.getDay()!="0" && date.getDay()!="6"){// 并且不是周末
                                          count++;
                                          num1--;
                                        }
                                }
                        }
                        itvHour=itvHour-(count*8);
                        reArray["itvHour"] = (itvHour);
                        reArray["num1"] = (num1);
                        return reArray;
                },
                //
                               
                calHour : function(bTime,eTime) {
                        var result = 0;
                        var arrT1 = bTime.split(":");
                        var arrT2 = eTime.split(":");
                        var h1 = parseInt(arrT1[0].replace(/^[0]/g,""));
                        var h2 = parseInt(arrT2[0].replace(/^[0]/g,""));
                        var m1 = parseInt(arrT1[1].split(":")[0].replace(/^[0]/g,""));
                        var m2 = parseInt(arrT2[1].split(":")[0].replace(/^[0]/g,""));
                        if(this.compareTime(bTime,defEndTimeAM) && this.compareTime(defBeginTimePM,eTime)) {
                                result =  Math.ceil(((h2*60+m2) - (h1*60+m1) - this.calMinute(defEndTimeAM,defBeginTimePM))/60);
                        } else  {
                                result = Math.ceil(((h2*60+m2) - (h1*60+m1))/60);
                        }
                        return result;
                },
                // 判断某一天是否为假期
                isHoliday : function(beginDate){
                        var ksql = "select e.fState from OA_WM_Holiday e where e.fDate = stringToDate('"+beginDate+"')";
                        var dataModel = "/OA/workTime/data";
                        /*var param = new justep.Request.ActionParam();
                        param.setString('ksql', ksql);
                        param.setString('dataModel', dataModel);
                        var result = justep.Request.sendBizRequest(
                                        "/OA/workTime/process/leave/leaveProcess", "mainActivity",
                                        "ksqlQueryAction", param, null, null, true);
                        var resultList = justep.XML.eval(result.responseXML,
                        "//rows/row");*/
                        var resultList="";
                        var params = new biz.Request.ActionParam();
                        params.setParam("ksql", ksql);
                        params.setParam("dataModel", ksql);
                        //var ctx = this.getContext();
                        var options = {
                                //context : ctx,
                                process : "/OA/workTime/process/leave/leaveProcess",
                                activity : "mainActivity",
                                action : "ksqlQueryAction",
                                parameters : params,
                                callback: function(data){
                                        if(data.state){
                                                resultList=data.response;
                                        }       
                                }
                        };               
                        var r=biz.Request.sendBizRequest(options);

                        var fState="";
                        for(var i=0;i<resultList.length;i++){
                                 fState = justep.XML.getNodeText(justep.XML.eval(
                                                resultList[i], "cell[1]", "single"));
                                    var arrBDate = beginDate.split("-");
                                        var bDate = new Date();
                                        bDate.setFullYear(arrBDate[0],arrBDate[1]*1-1,arrBDate[2]);
                                        if(fState =='1'){// 休息
                                                return true;
                                        }else if(fState =='2'){// 上班
                                                if(bDate.getDay()=="0" ||bDate.getDay()=="6"){// 并且是周末
                                               num++;
                                                }
                                                return false;
                                        }
                        }
                },
               
                isHoliday1 : function(beginDate){                       
                        var ksql = "select e.fState from OA_WM_Holiday e where e.fDate = stringToDate('"+beginDate+"')";
                        var dataModel = "/OA/workTime/data";
                        /*var param = new justep.Request.ActionParam();
                        param.setString('ksql', ksql);
                        param.setString('dataModel', dataModel);
                        var result = justep.Request.sendBizRequest(
                                        "/OA/workTime/process/leave/leaveProcess", "mainActivity",
                                        "ksqlQueryAction", param, null, null, true);
                        var resultList = justep.XML.eval(result.responseXML,
                        "//rows/row");*/
                        var resultList="";
                        var params = new biz.Request.ActionParam();
                        params.setParam("ksql", ksql);
                        params.setParam("dataModel", ksql);
                        //var ctx = this.getContext();
                        var options = {
                                //context : ctx,
                                process : "/OA/workTime/process/leave/leaveProcess",
                                activity : "mainActivity",
                                action : "ksqlQueryAction",
                                parameters : params,
                                callback: function(data){
                                        if(data.state){
                                                resultList=data.response;
                                        }       
                                }
                        };               
                        var r=biz.Request.sendBizRequest(options);
                        var fState="";
                        for(var i=0;i<resultList.length;i++){
                                 fState = justep.XML.getNodeText(justep.XML.eval(
                                                resultList[i], "cell[1]", "single"));
                        }
                        var arrBDate = beginDate.toString().split("-");
                        var bDate = new Date();
                        bDate.setFullYear(arrBDate[0],arrBDate[1]*1-1,arrBDate[2]);
                        if(fState =='1'){
                                if(bDate.getDay()!="0" && bDate.getDay()!="6"){
                                        return true;
                                }
                        }
                        if(fState =='2'){
                                if(bDate.getDay()=="0" || bDate.getDay()=="6"){
                                        return false;
                                }
                        }
                },
               
                calMinute : function(bTime,eTime) {
                        var result = 0;
                        var arrT1 = bTime.split(":");
                        var arrT2 = eTime.split(":");
                        var h1 = parseInt(arrT1[0].replace(/^[0]/g,""));
                        var h2 = parseInt(arrT2[0].replace(/^[0]/g,""));
                        var m1 = parseInt(arrT1[1].split(":")[0].replace(/^[0]/g,""));
                        var m2 = parseInt(arrT2[1].split(":")[0].replace(/^[0]/g,""));
                        return ((h2*60+m2) - (h1*60+m1));
                },
               
                // 获得实际开始时间
                getRealBTime : function(bTime) {
                        var rBTime = "";
                        if(!this.compareTime(defBeginTimeAM,bTime)) {
                                rBTime = defBeginTimeAM;
                        } else if(!this.compareTime(defEndTimeAM,bTime)) {
                                rBTime = bTime;
                        } else if(!this.compareTime(defBeginTimePM,bTime)) {
                                rBTime = defBeginTimePM;
                        } else if(!this.compareTime(defEndTimePM,bTime)) {
                                rBTime = bTime;
                        } else {
                                rBTime = defEndTimePM;
                        }
                        return rBTime;
                },
               
                // 获得实际结束时间
                getRealETime : function(eTime) {
                        var rETime = "";
                        if(!this.compareTime(defBeginTimeAM,eTime)) {
                                rETime = defBeginTimeAM;
                        } else if(this.compareTime(defEndTimePM,eTime)) {
                                rETime = defEndTimePM;
                        } else if(this.compareTime(defEndTimeAM,eTime) && (!this.compareTime(defBeginTimePM,eTime))) {
                                rETime = defEndTimeAM;
                        } else {
                                rETime = eTime;
                        }
                       
                        return rETime;
                },
                // time1 <= time2 则返回true,否则返回false
                // time格式:08:30 或 12:30:30
                compareTime : function(time1,time2) {
                        var arrT1 = time1.split(":");
                        var arrT2 = time2.split(":");
                       
                        var h1 = parseInt(arrT1[0].replace(/^[0]/g,""));
                        var h2 = parseInt(arrT2[0].replace(/^[0]/g,""));
                        var m1 = parseInt(arrT1[1].split(":")[0].replace(/^[0]/g,""));
                        var m2 = parseInt(arrT2[1].split(":")[0].replace(/^[0]/g,""));
                       
                        if(h2 > h1) {
                                return true;
                        } else if(h2 < h1) {
                                return false;
                        } else {
                                if(m2 >= m1) {
                                        return true;
                                } else {
                                        return false;
                                }
                        }
                },
               
                getDateFormDateTime : function(dateTime) {                       
                        var date = "";
                        try {
                                date = dateTime.toString().split(" ")[0];
                        } catch(e){}
                       
                        return date;
                },
               
                getTimeFormDateTime : function(dateTime) {
                        var time = "";
                        try {
                                time = (dateTime.toString().split(" ")[1]).substring(0,5);
                        } catch(e){}
                       
                        return time;
                }
       
        };
});

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35918
发表于 2017-8-17 16:31:10 | 显示全部楼层
这个是OA的不是平台的案例,需要自己跟踪具体的代码看看什么地方控制的
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

27

主题

65

帖子

221

积分

中级会员

Rank: 3Rank: 3

积分
221
QQ
 楼主| 发表于 2017-8-17 17:04:49 | 显示全部楼层
jishuang 发表于 2017-8-17 16:31
这个是OA的不是平台的案例,需要自己跟踪具体的代码看看什么地方控制的

这个是北京起步办公自动化下载的
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35918
发表于 2017-8-17 17:24:48 | 显示全部楼层
是项目组的,不是平台提供的,目前需要自己跟踪调试代码去修改
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-26 19:55 , Processed in 0.073288 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表