Example #1
0
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})
Example #2
0
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})
Example #3
0
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})
Example #4
0
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})
Example #5
0
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})
Example #6
0
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})
Example #7
0
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})
Example #8
0
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})