zoukankan      html  css  js  c++  java
  • openerp 7.0 升级笔记 HR考勤(二)

    要想实现在一定条件下,点击签到图标弹出对话窗口,还是有一定的麻烦,使用一般的窗口弹出代码没有效果,经过2个晚上的研究,才通过修改js程序实现了这个目的。

    在hr_attendance下有个static目录,全部copy到extension目录下,删除css和xml,只保留js,因为hr_attendance_extension类继承自hr_attendance,因此这个新的js文件将完全代替原目录下的js文件,这点和django是一样的。

    修改原来的do_update_attendance函数,如下:

    do_update_attendance: function () {
                var self = this;
                //jerry add start 弹出考勤说明对话框
                var action = {
                    type: 'ir.actions.act_window',
                    res_model: 'hr.attendance.reason',
                    view_mode: 'form',
                    view_type: 'form',
                    views: [[false, 'form']],
                    target: 'new',
                    context: {}
                };
                var hr_attendance_extension =new instance.web.Model("hr.attendance")
                var self = this;
                hr_attendance_extension.call('get_status', [[]]).then(function (result){                
                    //员工迟到1小时之内,或者下班前一小时之内,弹出对话框               
                    if(result=='late' || result=='leave_early'){
                        instance.client.action_manager.do_action(action);
                    }
                    //原计划弹出对话框后,先不要将考勤情况写入,图标也不要变化,但是实现不了。
                    //因此改成,点击对话框的确定按钮后,更新之前的记录,加入考勤说明
                //jerry add end*************************************
                    var hr_employee = new instance.web.DataSet(self, 'hr.employee');
                    hr_employee.call('attendance_action_change', [
                        [self.employee.id]
                    ]).done(function (result) {
                            //签到图标更换
                            self.last_sign = new Date();
                            self.set({"signed_in": ! self.get("signed_in")});
                        });
                });
            },

    由于对js一点也不熟悉,导致走了好多冤枉路,不过最终有成果,还是令人欣慰的。

    这里记录一下遇到的问题,和仍有价值的弯路。

    1、javescript时间计算,copy自网络,感谢原作者。

    /*
             * 获得时间差,时间格式为 年-月-日 小时:分钟:秒 或者 年/月/日 小时:分钟:秒
             * 其中,年月日为全格式,例如 : 2010-10-12 01:00:00
             * 返回精度为:秒,分,小时,天
             */
            GetDateDiff:function(startTime, endTime, diffType) {
                //将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式
                //startTime = startTime.replace(/\-/g, "/");
                //endTime = endTime.replace(/\-/g, "/");
                //将计算间隔类性字符转换为小写
                diffType = diffType.toLowerCase();
                var sTime = new Date(startTime); //开始时间
                var eTime = new Date(endTime); //结束时间
                //作为除数的数字
                var divNum = 1;
                switch (diffType) {
                    case "second":
                        divNum = 1000;
                        break;
                    case "minute":
                        divNum = 1000 * 60;
                        break;
                    case "hour":
                        divNum = 1000 * 3600;
                        break;
                    case "day":
                        divNum = 1000 * 3600 * 24;
                        break;
                    default:
                        break;
                }
                return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(divNum));
            },

    一开始为了使用这个函数,计算当前时间和设定的工作时间的差,在py文件中建立了一个获取work_time的函数,并且转为datetime类型的,然后在js中调用,结果总是提示internal 500 error,耽误了不少时间,后来直接将所有的动作都在py中完成,只将status传进来,就再也没有问题了。

    2、Float转datetime的函数,也许以后会用到。

    def _time_to_datetime(self,time):
            now=datetime.datetime.now()
            float_time=string.atof(time)
            h=int(float_time)
            m=int((float_time-h)*60)
            datetime_time=datetime.datetime(year=now.year,month=now.month,day=now.day,hour=h,minute=m)
            return datetime_time

    考勤的基本功能就是这样,接下来是数据统计,准备来尝试实现考勤的报表,另外与工资模块结合,晚点再做。

  • 相关阅读:
    Howto: (Almost) Everything In Active Directory via C#
    C#中使用Win32类库
    Use Case框图
    养成精通英语的三十个好习惯
    关于SQL2005EXPRESS默认远程无法连接的解决
    CAB之Service
    在模块中添加MVP模式兼容的视图
    SCSF 系列:Smart Client Software Factory 中 MVP 模式最佳实践
    Composite UI Application Block学习笔记之Event Broker[转载]
    老板的灵魂提问: 别人家的视频能自动播放为什么你开发的无法自动播放?为什么网页上的音视频无法自动播放了?
  • 原文地址:https://www.cnblogs.com/jerry2005/p/2804199.html
Copyright © 2011-2022 走看看