def get_next_page_flag(): from Entity import DBTransaction, Attendances logger.info('get_next_page_flag() start.') try: # 社員ID、当日の日付により、勤務情報を取得 attendances = Attendances.Attendance() attendances = attendances.query.filter_by(enterprise_id=g.user.enterprise_id, employee_id=g.user.employee_id, date=datetime.date.today()).first() # 次画面のフラグを算出 if attendances is None: page_flag = 1 result_code = 0 elif attendances.start_time is not None and attendances.end_time is None: page_flag = 2 result_code = 0 elif attendances.end_time is not None and attendances.report_end_time is None: page_flag = 3 result_code = 0 elif attendances.end_time is not None and attendances.report_end_time is not None: page_flag = 4 result_code = 0 else: page_flag = -1 result_code = -1 logger.info('get_next_page_flag() end.') return jsonify({'result_code': result_code, 'page_flag': page_flag}) except Exception, e: logger.error(e) return jsonify({'result_code': -9, 'page_flag': -1})
def update_attendance_work_end_info(): from Entity import DBTransaction, Attendances logger.info('update_attendance_work_end_info() start.') try: # 社員ID、システム日付により、当日の勤務情報を取得 attendances = Attendances.Attendance() attendances = attendances.query.filter_by( enterprise_id=g.user.enterprise_id, employee_id=g.user.employee_id, date=datetime.date.today()).first() # 出勤情報更新 attendances.end_time = datetime.datetime.now() attendances.end_longitude = request.json.get('end_longitude') attendances.end_latitude = request.json.get('end_latitude') attendances.end_spot_name = request.json.get('end_spot_name') attendances.update_by = g.user.name attendances.update_at = datetime.datetime.now() attendances.update_cnt += 1 DBTransaction.session_commit() logger.info('update_attendance_work_end_info() end.') return jsonify({'result_code': 0}) except Exception, e: logger.error(e) return jsonify({'result_code': -9})
def insert_attendance_work_start_info(): from Entity import DBTransaction, Attendances, Dispatches logger.info('insert_attendance_work_start_info() start.') try: # 派遣情報取得 dispatch = Dispatches.Dispatch() dispatch = dispatch.query.filter_by(enterprise_id=g.user.enterprise_id, employee_id=g.user.employee_id, end_date=None).first() # 派遣ID dispatch_id = dispatch.dispatch_id # 出勤情報編集 attendances = Attendances.Attendance() attendances.dispatch_id = dispatch_id attendances.enterprise_id = g.user.enterprise_id attendances.employee_id = g.user.employee_id attendances.date = datetime.datetime.now().strftime("%Y-%m-%d ") attendances.start_time = datetime.datetime.now() attendances.start_longitude = request.json.get('start_longitude') attendances.start_latitude = request.json.get('start_latitude') attendances.start_spot_name = request.json.get('start_spot_name') attendances.create_by = g.user.name attendances.create_at = datetime.datetime.now() attendances.update_by = g.user.name attendances.update_at = datetime.datetime.now() # 出勤情報のコミット DBTransaction.add_table_object(attendances) DBTransaction.session_commit() logger.info('insert_attendance_work_start_info() end.') return jsonify({'result_code': 0}) except Exception, e: logger.error(e) return jsonify({'result_code': -9})
def delete_attendance_report_info(): from Entity import DBTransaction, Attendances logger.info('delete_attendance_report_info() start.') try: # 社員ID、日付により、更新の勤務情報を取得 search_ymd_string = request.json.get('delete_work_date') search_ymd = datetime.datetime.strptime(search_ymd_string, "%Y-%m-%d") if search_ymd > datetime.datetime.now(): logger.error('未来日の更新ができない') return jsonify({'result_code': -1}) # 一般ユーザの場合、当月しか更新できない # !! 権限決めてから修正要、################ if g.user.auth_id != '2' and g.user.auth_id != '3': system_date = datetime.datetime.now() if system_date.year != search_ymd.year or system_date.month != search_ymd.month: logger.error('利用者は当月しか更新できない') return jsonify({'result_code': -2}) attendances = Attendances.Attendance() attendances = attendances.query.filter_by( enterprise_id=g.user.enterprise_id, employee_id=g.user.employee_id, date=search_ymd).first() # 取得した勤務情報を削除 DBTransaction.del_table_object(attendances) DBTransaction.session_commit() logger.info('delete_attendance_report_info() end.') return jsonify({'result_code': 0}) except Exception, e: logger.error(e) return jsonify({'result_code': -9})
def update_attendance_report_info(): from Entity import DBTransaction, Attendances logger.info('update_attendance_report_info() start.') try: # 社員ID、システム日付により、当日の勤務情報を取得 attendances = Attendances.Attendance() attendances = attendances.query.filter_by( enterprise_id=g.user.enterprise_id, employee_id=g.user.employee_id, date=datetime.date.today()).first() # 出勤時間の前に年月日を付け date_string = datetime.datetime.now().strftime("%Y-%m-%d ") report_start_time = date_string + request.json.get( 'report_start_time')[0:5] report_end_time = date_string + request.json.get( 'report_end_time')[0:5] # 出勤情報更新 attendances.report_start_time = datetime.datetime.strptime( report_start_time, "%Y-%m-%d %H:%M") attendances.report_end_time = datetime.datetime.strptime( report_end_time, "%Y-%m-%d %H:%M") attendances.exclusive_minutes = request.json.get( 'report_exclusive_minutes') attendances.total_minutes = request.json.get('report_total_minutes') attendances.update_by = g.user.name attendances.update_at = datetime.datetime.now() attendances.update_cnt += 1 DBTransaction.session_commit() logger.info('update_attendance_report_info() end.') return jsonify({'result_code': 0}) except Exception, e: logger.error(e) return jsonify({'result_code': -9})
def update_attendance_report_info_by_date(): from Entity import DBTransaction, Attendances, Dispatches logger.info('update_attendance_report_info_by_date() start.') try: # 更新日付の取得 update_date_string = request.json.get('update_date') update_date = datetime.datetime.strptime(update_date_string, "%Y-%m-%d") if update_date > datetime.datetime.now(): logger.error('未来日の更新ができない') return jsonify({'result_code': -1}) # 一般ユーザの場合、当月しか更新できない # !! 権限決めてから修正要、################ if g.user.auth_id != '2' and g.user.auth_id != '3': system_date = datetime.datetime.now() if system_date.year != update_date.year or system_date.month != update_date.month: logger.error('利用者は当月しか更新できない') return jsonify({'result_code': -2}) # 出勤時間の前に年月日を付け report_start_time_string = update_date_string + ' ' + request.json.get( 'report_start_time')[0:5] report_end_time_string = update_date_string + ' ' + request.json.get( 'report_end_time')[0:5] report_start_time = datetime.datetime.strptime( report_start_time_string, "%Y-%m-%d %H:%M") report_end_time = datetime.datetime.strptime(report_end_time_string, "%Y-%m-%d %H:%M") # 控除時間、総時間の取得 exclusive_minutes = request.json.get('report_exclusive_minutes') total_minutes = request.json.get('report_total_minutes') # 社員ID、更新日付により、当日の勤務情報を取得 attendances = Attendances.Attendance() attendances = attendances.query.filter_by( enterprise_id=g.user.enterprise_id, employee_id=g.user.employee_id, date=update_date).first() # データが存在する場合、更新を行い if attendances is not None: # 変更履歴を作成 update_history_time = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") update_history_user_id = g.user.employee_id # レポート開始時間変更履歴 updated = False if attendances.report_start_time is None: updated = True else: time_compare = attendances.report_start_time - report_start_time if time_compare.seconds != 0: updated = True if updated: update_history_field_name = 'report_start_time' update_history_before = attendances.report_start_time update_history_after = report_start_time log_string = make_log_string(update_history_time, update_history_user_id, update_history_field_name, update_history_before, update_history_after) attendances.modification_log = unicode( attendances.modification_log) + log_string attendances.report_start_time = report_start_time # レポート終了時間変更履歴 updated = False if attendances.report_end_time is None: updated = True else: time_compare = attendances.report_end_time - report_end_time if time_compare.seconds != 0: updated = True if updated: update_history_field_name = 'report_end_time' update_history_before = attendances.report_end_time update_history_after = report_end_time log_string = make_log_string(update_history_time, update_history_user_id, update_history_field_name, update_history_before, update_history_after) attendances.modification_log = unicode( attendances.modification_log) + log_string attendances.report_end_time = report_end_time # 控除時間変更履歴 if attendances.exclusive_minutes != exclusive_minutes: update_history_field_name = 'exclusive_minutes' update_history_before = attendances.exclusive_minutes update_history_after = exclusive_minutes log_string = make_log_string(update_history_time, update_history_user_id, update_history_field_name, update_history_before, update_history_after) attendances.modification_log = unicode( attendances.modification_log) + log_string attendances.exclusive_minutes = exclusive_minutes # 総時間変更履歴 if attendances.total_minutes != total_minutes: update_history_field_name = 'total_minutes' update_history_before = attendances.total_minutes update_history_after = total_minutes log_string = make_log_string(update_history_time, update_history_user_id, update_history_field_name, update_history_before, update_history_after) attendances.modification_log = unicode( attendances.modification_log) + log_string attendances.total_minutes = total_minutes # 出勤情報更新 attendances.update_by = g.user.name attendances.update_at = datetime.datetime.now() attendances.update_cnt += 1 # データが存在しない場合、挿入を行い else: # 派遣情報取得 dispatch = Dispatches.Dispatch() dispatch = dispatch.query.filter_by( enterprise_id=g.user.enterprise_id, employee_id=g.user.employee_id, end_date=None).first() # 派遣ID dispatch_id = dispatch.dispatch_id # 出勤情報編集 attendances = Attendances.Attendance() attendances.dispatch_id = dispatch_id attendances.enterprise_id = g.user.enterprise_id attendances.employee_id = g.user.employee_id attendances.date = update_date attendances.start_time = datetime.datetime.now() attendances.start_longitude = 0 attendances.start_latitude = 0 attendances.start_spot_name = '後追記:位置記録しない' attendances.modification_log = '追加データ' attendances.report_start_time = report_start_time attendances.report_end_time = report_end_time attendances.exclusive_minutes = exclusive_minutes attendances.total_minutes = total_minutes attendances.create_by = g.user.name attendances.create_at = datetime.datetime.now() attendances.update_by = g.user.name attendances.update_at = datetime.datetime.now() # 出勤情報の挿入 DBTransaction.add_table_object(attendances) # 出勤情報のコミット DBTransaction.session_commit() logger.info('update_attendance_report_info_by_date() end.') return jsonify({'result_code': 0}) except Exception, e: logger.error(e) return jsonify({'result_code': -9})
def get_attendance_info_by_year_month(): from Entity import DBTransaction, Attendances logger.info('get_attendance_info_by_year_month() start.') try: search_year = request.json.get('search_year') search_month = request.json.get('search_month') # 月の全日リストの取得 month_days_list = GetMonthList.get_month_days(search_year, search_month) # 月間出勤情報リスト monthly_work_time_list = [] # 出力の空リスト作成 for day in month_days_list: # 出力編集 result_dict = { 'work_date': day, 'which_day': Jholiday.get_which_day( datetime.datetime.strptime(day, "%Y-%m-%d")), 'report_start_time': '', 'report_end_time': '', 'report_exclusive_minutes': '', 'report_total_minutes': '' } # 月間出勤情報リストに追加 monthly_work_time_list.append(result_dict) # 社員ID、パラメータの年月により、当月の勤務情報を取得 attendances = Attendances.Attendance() attendances = attendances.query.filter( Attendances.Attendance.enterprise_id == g.user.enterprise_id, Attendances.Attendance.employee_id == g.user.employee_id, extract('year', Attendances.Attendance.date) == search_year, extract('month', Attendances.Attendance.date) == search_month).all() # 出勤日合計、出勤時間合計 total_days = len(attendances) total_hours = 0 # 月間出勤情報リスト設定(出勤データがある日のみ) for element in attendances: # NULL対策 report_start_time = '' report_end_time = '' report_exclusive_minutes = 0 report_total_minutes = 0 if element.report_start_time is not None: report_start_time = element.report_start_time.strftime( '%H:%M:%S') if element.report_end_time is not None: report_end_time = element.report_end_time.strftime('%H:%M:%S') if element.exclusive_minutes is not None: report_exclusive_minutes = element.exclusive_minutes if element.total_minutes is not None: report_total_minutes = element.total_minutes # 日付によりインデクスを作成し、出勤データがある日を月リストに設定 index = int(element.date.strftime('%d')) - 1 monthly_work_time_list[index][ 'report_start_time'] = report_start_time monthly_work_time_list[index]['report_end_time'] = report_end_time monthly_work_time_list[index][ 'report_exclusive_minutes'] = report_exclusive_minutes monthly_work_time_list[index][ 'report_total_minutes'] = report_total_minutes # 出勤時間合計 total_hours = total_hours + report_total_minutes logger.info('get_attendance_info_by_year_month() end.') return (jsonify({ 'result_code': 0, 'total_days': total_days, 'total_hours': total_hours, 'monthly_work_time_list': monthly_work_time_list })) except Exception, e: logger.error(e) return jsonify({'result_code': -9})
def get_user_list_info_by_section_month_state(): from Entity import Users, Attendances, Attendance_supervision, Sections, Status logger.info('get_user_list_info_by_section_month_states() start.') try: search_year = request.json.get('enterprise_id') search_month = request.json.get('employee_id') users = Users.User() users.clear_query_cache() users = users.query.filter().all() total_hours = 0 total_section_id = 0 total_status_id = 0 # total_status_name = '' # total_section_name = '' # total_users_name = '' # 月間出勤情報status = 0リスト monthly_work_time_list = [] for element_user in users: total_users_name = element_user.name # 社員ID、パラメータの年月により、当月の勤務情報を取得 attendances = Attendances.Attendance() attendances.clear_query_cache() attendances = session.query(Attendances).\ join(Attendance_supervision, Attendances.Attendance.dispatch_id == Attendance_supervision.AttendanceSupervision.dispatch_id).filter( Attendances.Attendance.enterprise_id == element_user.enterprise_id, Attendances.Attendance.employee_id == element_user.employee_id, extract('year', Attendances.Attendance.date) == search_year, extract('month', Attendances.Attendance.date) == search_month).all() # 出勤日合計、出勤時間合計、ステータスID、課ID total_days = len(attendances) # 月間出勤情報リスト取得 for element in attendances: # NULL対策 report_total_minutes = 0 if element.total_minutes is not None: report_total_minutes = element.total_minutes # 出勤時間合計 total_hours = total_hours + report_total_minutes # 課ID # total_section_id = element.section_id # ステータスID # total_status_id = element.status_id sections = Sections.Sections.sections() sections.clear_query_cache() sections = sections.query.filter( Sections.Sections.enterprise_id == element_user.enterprise_id, Sections.Sections.section_id == total_section_id).first() total_section_name = sections.name status = Status.Status.status() status.clear_query_cache() status = status.query.filter( Status.Status.status.enterprise_id == element_user.enterprise_id, Status.Status.status.status_id == total_status_id).first() total_status_name = status.name # 出力編集 result_dict = { 'total_days': total_days, 'total_hours': total_hours, 'total_status_name': total_status_name, 'total_section_name': total_section_name, 'total_users_name': total_users_name } # 管理員一覧画面情報リストに追加 monthly_work_time_list.append(result_dict) logger.info('get_user_list_info_by_section_month_states() end.') return (jsonify({ 'result_code': 0, 'monthly_work_time_list': monthly_work_time_list })) except Exception, e: logger.error(e) return jsonify({'result_code': -1})