📄 timecardlist.cpp
字号:
// TimeCardList.cpp : implementation file
//
#include "stdafx.h"
#include "hrms.h"
#include "TimeCardList.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTimeCardList dialog
CTimeCardList::CTimeCardList(CWnd* pParent /*=NULL*/)
: CDialog(CTimeCardList::IDD, pParent)
{
//{{AFX_DATA_INIT(CTimeCardList)
//}}AFX_DATA_INIT
m_CurSel = -1;
}
void CTimeCardList::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTimeCardList)
DDX_Control(pDX, IDC_LIST1, m_TimeCardList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTimeCardList, CDialog)
//{{AFX_MSG_MAP(CTimeCardList)
ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangeCombo2)
ON_CBN_SELCHANGE(IDC_COMBO3, OnSelchangeCombo3)
ON_BN_CLICKED(IDC_EXPORT, OnExport)
ON_COMMAND(IDM_DELETEITEM, OnDeleteitem)
ON_NOTIFY(NM_RCLICK, IDC_LIST1, OnRclickList1)
ON_COMMAND(IDM_QUIT, OnQuit)
ON_COMMAND(IDM_SEARCH_RECORD, OnSearchRecord)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTimeCardList message handlers
BOOL CTimeCardList::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CComboBox * pCom = (CComboBox*)GetDlgItem(IDC_COMBO1);
CTimeCardDlg::InitEmployeeList(pCom);
m_TimeCardList.SetExtendedStyle(
LVS_EX_FULLROWSELECT
| LVS_EX_ONECLICKACTIVATE
| LVS_EX_GRIDLINES );
m_TimeCardList.InsertColumn(0, "日期", LVCFMT_LEFT, 80);
m_TimeCardList.InsertColumn(1, "姓名", LVCFMT_LEFT, 50);
m_TimeCardList.InsertColumn(2, "迟到", LVCFMT_LEFT, 50);
m_TimeCardList.InsertColumn(3, "早退", LVCFMT_LEFT, 50);
m_TimeCardList.InsertColumn(4, "缺勤", LVCFMT_LEFT, 50);
m_TimeCardList.InsertColumn(5, "缺勤类型", LVCFMT_LEFT, 80);
m_TimeCardList.InsertColumn(6, "工作时间", LVCFMT_LEFT, 80);
OnSelchangeCombo1();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CTimeCardList::ShowTimeCardList(CString name, int year, int month)
{
ASSERT(!name.IsEmpty());
ASSERT(month > 0 && month < 13);
CADOOperation tmCard;
CString sql, str;
DWORD num = 0;
int i = 0;
sql.Format("\
select timecart_date,\
timecart_reason,\
timecart_worklong, \
timecart_late_leave_early & 1 as late, \
timecart_late_leave_early & 2 as leave_early\
from tb_timecard, tb_employee\
where year(timecart_date) = %d \
and month(timecart_date) = %d \
and tb_employee.employee_name = '%s' and\
tb_employee.employee_id = tb_timecard.employee_id", year, month, name);
tmCard.OpenRecordset(sql);
m_TimeCardList.DeleteAllItems();
if(tmCard.IsLastRow())
{
tmCard.CloseRecorset();
return TRUE;
}
tmCard.MoveFirst();
do
{
tmCard.GetItemContent("timecart_date", CADOOperation::ADO_TYPE_STRING, &str);
m_TimeCardList.InsertItem(i, str.GetBuffer(0));
m_TimeCardList.SetItemText(i, 1, name);
tmCard.GetItemContent("late", CADOOperation::ADO_TYPE_INT, &num);
if(0!=num)
m_TimeCardList.SetItemText(i, 2, "是");
else
m_TimeCardList.SetItemText(i, 2, "否");
tmCard.GetItemContent("leave_early", CADOOperation::ADO_TYPE_INT, &num);
if(0!=num)
m_TimeCardList.SetItemText(i, 3, "是");
else
m_TimeCardList.SetItemText(i, 3, "否");
tmCard.GetItemContent("timecart_reason", CADOOperation::ADO_TYPE_INT, &num);
switch(num)
{
case 0:
m_TimeCardList.SetItemText(i, 4, "否");
break;
case 1:
m_TimeCardList.SetItemText(i, 4, "是");
m_TimeCardList.SetItemText(i, 5, "事假");
break;
case 2:
m_TimeCardList.SetItemText(i, 4, "是");
m_TimeCardList.SetItemText(i, 5, "公假");
break;
case 3:
m_TimeCardList.SetItemText(i, 4, "是");
m_TimeCardList.SetItemText(i, 5, "病假");
break;
default:
tmCard.CloseRecorset();
return FALSE;
}
tmCard.GetItemContent("timecart_worklong", CADOOperation::ADO_TYPE_INT, &num);
str.Format("%d小时%d分", num/60, num%60);
m_TimeCardList.SetItemText(i, 6, str);
i++;
tmCard.MoveNext();
}while(!tmCard.IsLastRow());
tmCard.CloseRecorset();
return TRUE;
}
void CTimeCardList::OnSelchangeCombo1()
{
// TODO: Add your control notification handler code here
CString name;
GetDlgItemText(IDC_COMBO1, name);
InitYearComboBox(name);
OnSelchangeCombo2();
}
void CTimeCardList::OnSelchangeCombo2()
{
// TODO: Add your control notification handler code here
CString name;
int year;
GetDlgItemText(IDC_COMBO1, name);
year = GetDlgItemInt(IDC_COMBO2);
InitMonthComboBox(name, year);
UpdateTimeCardList();
}
void CTimeCardList::OnSelchangeCombo3()
{
// TODO: Add your control notification handler code here
UpdateTimeCardList();
}
void CTimeCardList::UpdateTimeCardList()
{
CString str;
int year, month;
GetDlgItemText(IDC_COMBO1, str);
str.Replace(" ", "");
if(str.IsEmpty())
{
MessageBox("请输入一个合法的名字!", "提示", MB_OK | MB_ICONWARNING);
return ;
}
year = GetDlgItemInt(IDC_COMBO2);
month = GetDlgItemInt(IDC_COMBO3);
if(year < 0 || (month >12 && month < 0))
{
MessageBox("请选择合理的日期范围!", "提示", MB_OK | MB_ICONWARNING);
return ;
}
if(month > 12 || month < 1)
{
m_TimeCardList.DeleteAllItems();
return;
}
ShowTimeCardList(str, year, month);
CollectTimeCard(str, year, month);
}
BOOL CTimeCardList::InitYearComboBox(CString name)
{
CComboBox* pYear;
CADOOperation yl;
CString sql, con;
pYear = (CComboBox* )GetDlgItem(IDC_COMBO2);
pYear->ResetContent();
sql.Format("\
select distinct year(timecart_date) as yea\
from tb_timecard, tb_employee \
where tb_employee.employee_name = '%s' \
and tb_employee.employee_id = tb_timecard.employee_id", name);
yl.OpenRecordset(sql);
if(yl.IsLastRow())
{
yl.CloseRecorset();
return TRUE;
}
yl.MoveFirst();
do
{
yl.GetItemContent("yea", CADOOperation::ADO_TYPE_STRING, &con);
pYear->AddString(con);
yl.MoveNext();
}while(!yl.IsLastRow());
yl.CloseRecorset();
pYear->SetCurSel(pYear->GetCount()-1);
return TRUE;
}
BOOL CTimeCardList::InitMonthComboBox(CString name, int year)
{
CComboBox* pMonth;
CADOOperation ml;
CString sql, con;
pMonth = (CComboBox* )GetDlgItem(IDC_COMBO3);
sql.Format("\
select distinct month(timecart_date) as mon\
from tb_timecard, tb_employee\
where year(timecart_date) = %d and tb_employee.employee_name = '%s'\
and tb_employee.employee_id = tb_timecard.employee_id", year, name);
pMonth->ResetContent();
ml.OpenRecordset(sql);
if(ml.IsLastRow())
{
ml.CloseRecorset();
return TRUE;
}
ml.MoveFirst();
do
{
ml.GetItemContent("mon", CADOOperation::ADO_TYPE_STRING, &con);
pMonth->AddString(con);
ml.MoveNext();
}while(!ml.IsLastRow());
ml.CloseRecorset();
pMonth->SetCurSel(pMonth->GetCount()-1);
return TRUE;
}
void CTimeCardList::OnExport()
{
// TODO: Add your control notification handler code here
SYSTEMTIME sysTime;
::GetSystemTime(&sysTime);
CString str;
str.Format("%d-%d-%d", sysTime.wYear, sysTime.wMonth, sysTime.wDay);
CFileDialog file(FALSE, ".doc", str,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Word 文件(*.doc) | .doc||", NULL);
if(IDOK != file.DoModal())
return ;
str = file.GetPathName();
ExportToWord(str);
}
BOOL CTimeCardList::ExportToWord(CString &file)
{
CADOOperation tmCard;
CString sql, name;
int year, month;
GetDlgItemText(IDC_COMBO1, name);
year = GetDlgItemInt(IDC_COMBO2);
month = GetDlgItemInt(IDC_COMBO3);
sql.Format("\
select tb_employee.employee_id as 员工编号, \
tb_employee.employee_name as 员工姓名, \
timecart_date as 考勤卡日期,\
timecart_reason as 缺勤原因,\
timecart_worklong 工作时间, \
timecart_late_leave_early & 1 是否迟到, \
timecart_late_leave_early & 2 是否早退\
from tb_timecard, tb_employee\
where year(timecart_date) = %d \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -