Files
Sun1602/ProgramCommon/AttendanceParser.cpp
T
2022-10-26 12:25:11 +08:00

96 lines
2.9 KiB
C++

#include "StdAfx.h"
#ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
#include "AttendanceParser.h"
BOOL AttendanceParser::LoadScript(eSCRIPT_CODE script_code, BOOL is_reload)
{
__UNUSED((script_code, is_reload));
int row_size = GetRowSize();
for (int script_row = 0; script_row < row_size; ++script_row)
{
ATTENDANCE attendance;
GetData(script_row, attendance.year, "Index1");
GetData(script_row, attendance.month, "Index2");
int temp_type = 0;
GetData(script_row, temp_type, "Type");
if (temp_type < eATTENDANCE_CALENDAR || temp_type >= eATTENDANCE_MAX)
{
SUNLOG(eCRITICAL_LOG, _T("[%s] 考勤类型无效 (%d)"),
__FUNCTION__, attendance.type);
ASSERT(false);
}
attendance.type = static_cast<eATTENDANCE_TYPE>(temp_type);
GetData(script_row, attendance.title, "TitleString");
GetData(script_row, attendance.explanation, "ExplanationString");
char temp_buffer[32];
ZeroMemory(&temp_buffer, sizeof(temp_buffer));
for (int i = 0; i < ATTENDANCE::kDayMaxCount; ++i)
{
_snprintf(temp_buffer, _countof(temp_buffer), "Emphasis%d", i+1);
GetData(script_row, attendance.day_emphasis[i], temp_buffer);
_snprintf(temp_buffer, _countof(temp_buffer), "RewardCode%d", i+1);
GetData(script_row, attendance.day_reward_index[i], temp_buffer);
}
if (IsValidAttendance(&attendance) == false)
{
continue;
}
ATTENDANCE_TAG attendance_tag = std::make_pair(attendance.year, attendance.month);
attendance_map.insert(std::make_pair(attendance_tag, attendance));
}
return TRUE;
}
const bool AttendanceParser::IsValidAttendance(ATTENDANCE* attendance)
{
if (attendance == NULL)
{
SUNLOG(eCRITICAL_LOG, _T("[%s] 考勤为空"), __FUNCTION__);
ASSERT(false);
return false;
}
if (attendance->type < eATTENDANCE_CALENDAR || attendance->type >= eATTENDANCE_MAX)
{
SUNLOG(eCRITICAL_LOG, _T("[%s] 考勤类型无效 (%d)"),
__FUNCTION__, attendance->type);
ASSERT(false);
return false;
}
const ATTENDANCE* prev_attendance = GetAttendance(attendance->year, attendance->month);
if (prev_attendance)
{
SUNLOG(eCRITICAL_LOG, _T("[%s] There is such attendance (%d, %d)"),
__FUNCTION__, attendance->year, attendance->month);
ASSERT(false);
return false;
}
return true;
}
const ATTENDANCE* AttendanceParser::GetAttendance( DWORD year, BYTE month )
{
ATTENDANCE_TAG attendance_tag = std::make_pair(year, month);
ATTENDANCE_MAP::iterator find_iter = attendance_map.find(attendance_tag);
if (find_iter == attendance_map.end())
{
return NULL;
}
return &(find_iter->second);
}
#endif // _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM