Esempio n. 1
0
    def post(self, filter_case, *args, **kwargs):
        if not self.current_user.is_admin:
            return self.send_error(status_code=404)

        try:
            modify_attendance_id = self.get_argument("maid")
            check_date = self.get_argument("check-date")
        except tornado.web.MissingArgumentError:
            return self.send_error(status_code=400)

        # if not maid:
        #     self.finish("modify_attendance_id not given!")
        #
        # check_date = self.get_argument("check-date")
        # action = self.get_argument("action")
        # modify_attendance_id = maid

        modify_attendance = self.get_modify_attendance_by_id(modify_attendance_id)

        if not modify_attendance:
            return self.finish(u"审核出错!")

        original_attendance = modify_attendance.attendance

        if filter_case == "approval":
            # 审批通过
            modify_attendance.modify_status = 2     # 审批通过
            modify_attendance.modify_time = datetime.datetime.now()     # 保存审批时间
            original_attendance.is_maintainable = 3     # 原始考勤不可维护
            original_attendance.check_in = modify_attendance.modify_check_in
            original_attendance.check_out = modify_attendance.modify_check_out
            set_attendance_status(original_attendance)
            self.session.commit()
            self.log.info("[{ip}] Modify Attendance Pass: {admin}".format(ip=self.request.remote_ip,
                                                                          admin=self.current_user.email))
            self.finish("ok")
        elif filter_case == "notapproval":
            # 审批拒绝
            modify_attendance.modify_status = 3     # 审批拒绝
            modify_attendance.modify_time = datetime.datetime.now()     # 保存审批时间
            original_attendance.is_maintainable = 2     # 原始考勤可以维护
            self.log.info("[{ip}] Modify Attendance Reject: {admin}".format(ip=self.request.remote_ip,
                                                                            admin=self.current_user.email))
            self.session.commit()
            self.finish("ok")
        else:
            self.send_error(404)
Esempio n. 2
0
def update_attendances_daily(check_date=None):
    """ Runs on 23:59 per day

    :param check_date: datetime object
    :return:
    """
    if not check_date:
        check_date = datetime.datetime.now()

    default_time = check_date.replace(hour=0, minute=0, second=0, microsecond=0)
    date = default_time.strftime("%Y-%m-%d")
    session = DB_Session()
    users = session.query(User).filter(
        User.is_present == 1,
        User.is_admin == 0,
        User.is_test == 0,
    ).order_by(User.id).all()
    # no_check_out_users = filter(lambda x: x.check_out is None, users)
    for user in users:
        today_attendance = filter(lambda x: x.date == date, user.attendance)
        if today_attendance:
            today_attendance = today_attendance[0]
            if today_attendance.check_out:
                continue
            else:
                today_attendance.check_out = default_time
        else:
            legal_hour, legal_minute = map(int, user.banci.split(":"))
            legal_check_in = default_time.replace(hour=legal_hour, minute=legal_minute)
            legal_check_out = legal_check_in + datetime.timedelta(hours=9)
            today_attendance = Attendance(
                userid=user.id,
                check_out=default_time,
                check_in=default_time,
                date=date,
                updatetime=datetime.datetime.now(),
                legal_check_in=legal_check_in,
                legal_check_out=legal_check_out
            )
            session.add(today_attendance)
        set_attendance_status(today_attendance)

    session.commit()