def update_history_late_overtime_monthly(): """ Runs every month 1st. Calculate last month's late & overtime hour :return: """ check_month = (datetime.date.today() - datetime.timedelta(days=2)).strftime("%Y-%m") session = DB_Session() users = session.query(User).filter( User.is_admin == 0, User.is_test == 0, ).order_by(User.id).all() for user in users: if user.is_present == 0 and user.dismiss_time.strftime("%Y-%m") != check_month: continue attendance_list = session.query(Attendance).filter( Attendance.date.like("{0}%".format(check_month)), Attendance.userid == user.id ).all() late, overtime = get_late_overtime_total(attendance_list) history = HistoryLateOvertimeHour( userid=user.id, month=check_month, late=late, overtime=overtime ) session.add(history) session.commit()
def refresh_all_status_by_date(date): from lib.models import DB_Session session = DB_Session() attendances = ( session.query(Attendance).filter(Attendance.date == date.strftime("%Y-%m-%d")).order_by(Attendance.id).all() ) for attendance in attendances: set_attendance_status(attendance) print attendance.attendance_status session.commit() print len(attendances)
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()
attendances = ( session.query(Attendance).filter(Attendance.date == date.strftime("%Y-%m-%d")).order_by(Attendance.id).all() ) for attendance in attendances: set_attendance_status(attendance) print attendance.attendance_status session.commit() print len(attendances) if __name__ == "__main__": # refresh_all_status_by_date(datetime.date(2016, 1, 1)) # from lib.models import DB_Session from lib.models import User user = session.query(User).filter(User.name == u"王刘强").one() attendance = session.query(Attendance).filter(Attendance.userid == user.id, Attendance.date == "2016-01-08").one() set_attendance_status(attendance) print attendance.attendance_status # session = DB_Session() # users = session.query(User).filter( # User.is_admin == 0, # User.is_test == 0, # User.is_present == 1 # ).all() # # for user in users: # lcih, lcim = map(int, user.banci.split(":")) # attendance = session.query(Attendance).filter( # Attendance.userid == user.id,
dismiss_time = user.dismiss_time count = 0 attendances = user.attendance for attendance in attendances: if attendance.legal_check_in.strftime("%Y-%m") == month: if attendance.legal_check_in.weekday() not in [5, 6]: if dismiss_time: if attendance.legal_check_in < dismiss_time: count += 1 else: count += 1 return count if __name__ == "__main__": session = DB_Session() user = session.query(User).filter( User.name == u"许文强" ).one() # attendance = session.query(Attendance).filter( # Attendance.userid == user.id, # Attendance.date == "2016-01-08" # ).one() # print attendance.attendance_status # print get_late_overtime_hour(attendance) print get_workday_count_by_month(user, "2016-03") # print get_history_late_overtime(user) # get_history_late_overtime(user)