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)
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()