pageotmanage.cpp

来自「人事管理系统」· C++ 代码 · 共 338 行

CPP
338
字号
// PageOTManage.cpp : implementation file
//

#include "stdafx.h"
#include "personelmanage.h"
#include "PageOTManage.h"

#include "SelDeptDlg.h"
#include "QueryEmpDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPageOTManage property page

IMPLEMENT_DYNCREATE(CPageOTManage, CResizablePage)

CPageOTManage::CPageOTManage() : CResizablePage(CPageOTManage::IDD)
{
	//{{AFX_DATA_INIT(CPageOTManage)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_psp.dwFlags &= (~PSP_HASHELP);
	m_psp.dwFlags |= ( PSP_USEHICON );
	HICON hIconTab = AfxGetApp()->LoadIcon(IDI_PERSON);
	m_psp.hIcon = hIconTab;
}

CPageOTManage::~CPageOTManage()
{
}

void CPageOTManage::DoDataExchange(CDataExchange* pDX)
{
	CResizablePage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPageOTManage)
	DDX_Control(pDX, IDC_LIST_OT, m_ctrlOT);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPageOTManage, CResizablePage)
	//{{AFX_MSG_MAP(CPageOTManage)
	ON_BN_CLICKED(IDC_BUTTON_QUERYBYDEPT, OnButtonQuerybydept)
	ON_BN_CLICKED(IDC_BUTTON_QUERYBYEMP, OnButtonQuerybyemp)
	ON_BN_CLICKED(IDC_BUTTON_SHOWALL, OnButtonShowall)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPageOTManage message handlers

BOOL CPageOTManage::OnInitDialog() 
{
	CResizablePage::OnInitDialog();
	
	// TODO: Add extra initialization here
	AddAnchor(IDC_BUTTON_QUERYBYDEPT, TOP_LEFT);
	AddAnchor(IDC_BUTTON_QUERYBYEMP, TOP_LEFT);
	AddAnchor(IDC_BUTTON_SHOWALL, TOP_LEFT);
	AddAnchor(IDC_LIST_OT, TOP_LEFT, BOTTOM_RIGHT);

	DWORD dwStyle = m_ctrlOT.GetExtendedStyle();
	dwStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT;
	m_ctrlOT.SetExtendedStyle(dwStyle);

	FillOTList();
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPageOTManage::FillOTList()
{
	CString strOvertimeID;
	CString strEmployeeID;
	CString strApproverID;
	CString strSubmitTime;
	CString strStartTime;
	CString strEndTime;
	CString strReason;
	CString strStatus;
	CString strType;
	CString strDenyReason;
	CString strHours;

	CString strConnection = _T("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BlueHill;Data Source=dragonflylong\\sqlexpress");
	CADODatabase *pDb = new CADODatabase;
	pDb->SetConnectionString(strConnection);

	try
	{
		if(pDb->Open())
		{
			CADORecordset *pRs = new CADORecordset(pDb);
			if(pRs->Open("tblOvertime", CADORecordset::openTable))
			{
				DelAllColumns();
				//以下添加表头
				m_ctrlOT.InsertColumn(0, "OvertimeID", LVCFMT_LEFT, 64);
				m_ctrlOT.InsertColumn(1, "EmployeeID", LVCFMT_LEFT, 64);
				m_ctrlOT.InsertColumn(2, "ApproverID", LVCFMT_LEFT, 64);
				m_ctrlOT.InsertColumn(3, "SubmitTime", LVCFMT_LEFT, 128);
				m_ctrlOT.InsertColumn(4, "StartTime", LVCFMT_LEFT, 128);
				m_ctrlOT.InsertColumn(5, "EndTime", LVCFMT_LEFT, 128);
				m_ctrlOT.InsertColumn(6, "Reason", LVCFMT_LEFT, 128);	
				m_ctrlOT.InsertColumn(7, "Status", LVCFMT_LEFT, 64);
				m_ctrlOT.InsertColumn(8, "Type", LVCFMT_LEFT, 64);
				m_ctrlOT.InsertColumn(9, "DenyReason", LVCFMT_LEFT, 128);
				m_ctrlOT.InsertColumn(10, "Hours", LVCFMT_LEFT, 64);
				
				int cur = 0;
				while(!pRs->IsEOF())
				{
					pRs->GetFieldValue("OvertimeID", strOvertimeID);
					m_ctrlOT.InsertItem(cur, strOvertimeID);
					pRs->GetFieldValue("EmployeeID", strEmployeeID);
					m_ctrlOT.SetItemText(cur, 1, strEmployeeID);
					pRs->GetFieldValue("ApproverID", strApproverID);
					m_ctrlOT.SetItemText(cur, 2, strApproverID);
					pRs->GetFieldValue("SubmitTime", strSubmitTime);
					m_ctrlOT.SetItemText(cur, 3, strSubmitTime);
					pRs->GetFieldValue("StartTime", strStartTime);
					m_ctrlOT.SetItemText(cur, 4, strStartTime);
					pRs->GetFieldValue("EndTime", strEndTime);
					m_ctrlOT.SetItemText(cur, 5, strEndTime);
					pRs->GetFieldValue("Reason", strReason);
					m_ctrlOT.SetItemText(cur, 6, strReason);
					pRs->GetFieldValue("Status", strStatus);
					m_ctrlOT.SetItemText(cur, 7, strStatus);
					pRs->GetFieldValue("Type", strType);
					m_ctrlOT.SetItemText(cur, 8, strType);
					pRs->GetFieldValue("DenyReason", strDenyReason);
					m_ctrlOT.SetItemText(cur, 9, strDenyReason);
					pRs->GetFieldValue("Hours", strHours);
					m_ctrlOT.SetItemText(cur, 10, strHours);

					cur++;
					pRs->MoveNext();
				}
				pRs->Close();
			}
			delete pRs;
			pDb->Close();
		}
		delete pDb;
	}
	catch(CADOException)
	{
	}
}

void CPageOTManage::DelAllColumns()
{
	m_ctrlOT.DeleteAllItems();
	for(int i = 0, j = m_ctrlOT.GetHeaderCtrl()->GetItemCount(); i < j; i++)
		m_ctrlOT.DeleteColumn(0);
}


void CPageOTManage::OnButtonQuerybydept() 
{
	// TODO: Add your control notification handler code here
	CSelDeptDlg selDept;
	if(selDept.DoModal() == IDOK)
	{
		CString strOvertimeID, strName, strSubmitTime, strReason, strStatus, strDescription;
		long nDeptID = -1;
		CString selDeptName = selDept.GetSelDeptName();
		selDeptName.TrimRight();

		CString strQuery = "SELECT [DeptID] FROM [tblDepartment] WHERE DeptName = '" + selDeptName + "'";
		CADODatabase *pDb = new CADODatabase;
		try
		{
			if(pDb->Open())
			{
				CADORecordset *pRs = new CADORecordset(pDb);
				//首先由部门名得到部门ID
				if(pRs->Open(strQuery, CADORecordset::openQuery))
				{
					if(pRs->GetRecordCount() > 0)
						pRs->GetFieldValue("DeptID", nDeptID);
					pRs->Close();
				}
				CADOParameter pInDeptID(CADORecordset::typeInteger, sizeof(long), CADOParameter::paramInput);
				pInDeptID.SetValue(nDeptID);

				CADOCommand pCmd(pDb, "spwinOTbyGroup", CADOCommand::typeCmdStoredProc);
				pCmd.AddParameter(&pInDeptID);
				if(pRs->Execute(&pCmd))
				{
					if(pRs->GetRecordCount() > 0)
					{
						DelAllColumns();

						m_ctrlOT.InsertColumn(0, "加班编号", LVCFMT_LEFT, 64);
						m_ctrlOT.InsertColumn(1, "员工姓名", LVCFMT_LEFT, 64);
						m_ctrlOT.InsertColumn(2, "提交时间", LVCFMT_LEFT, 128);
						m_ctrlOT.InsertColumn(3, "原因", LVCFMT_LEFT, 128);
						m_ctrlOT.InsertColumn(4, "状态", LVCFMT_LEFT, 128);
						m_ctrlOT.InsertColumn(5, "描述", LVCFMT_LEFT, 128);

						int cur = 0;
						while(!pRs->IsEOF())
						{
							pRs->GetFieldValue("加班编号", strOvertimeID);
							m_ctrlOT.InsertItem(cur, strOvertimeID);
							pRs->GetFieldValue("员工姓名", strName);
							m_ctrlOT.SetItemText(cur, 1, strName);
							pRs->GetFieldValue("提交时间", strSubmitTime);
							m_ctrlOT.SetItemText(cur, 2, strSubmitTime);
							pRs->GetFieldValue("原因", strReason);
							m_ctrlOT.SetItemText(cur, 3, strReason);
							pRs->GetFieldValue("状态", strStatus);
							m_ctrlOT.SetItemText(cur, 4, strStatus);
							pRs->GetFieldValue("描述", strDescription);
							m_ctrlOT.SetItemText(cur, 5, strDescription);
							
							cur++;
							pRs->MoveNext();
						}
					}
					else
						AfxMessageBox("未得到任何信息!");
					pRs->Close();
				}
				delete pRs;
				pDb->Close();
			}
			delete pDb;
		}
		catch(CADOException)
		{
		}
	}
	
}

void CPageOTManage::OnButtonQuerybyemp() 
{
	// TODO: Add your control notification handler code here
	CString strName, strEmail;
	long deptID;
	CString strDeptID;
	CString query = "SELECT o.OvertimeID, e.Name, o.SubmitTime, o.Reason, o.Status, t.Description FROM  tblEmployee as e INNER JOIN tblOvertime as o ON e.EmployeeID = o.EmployeeID INNER JOIN tblOvertimeType as t ON o.Type = t.type ";

	CQueryEmpDlg queryEmp;
	if(queryEmp.DoModal() == IDOK)
	{
		strName = queryEmp.m_strName;
		strEmail = queryEmp.m_strEmail;
		deptID = queryEmp.m_nSelDeptID;
		strDeptID.Format("%d", deptID);

		//得到查询串
		if(strName.GetLength() > 0)
		{
			query += " WHERE e.Name = '" + strName + "' ";
			if(strEmail.GetLength() > 0)
				query += " AND e.Email = '" + strEmail + "' ";
			if(deptID != -1)
				query += " AND e.DeptID = " + strDeptID;
		}
		else if(strEmail.GetLength() > 0)
		{
			query += " WHERE e.Email = '" + strEmail + "' ";
			if(deptID != -1)
				query += " AND e.DeptID = " + strDeptID;
		}
		else if(deptID != -1)
			query += " WHERE e.DeptID = " + strDeptID;
		////////////////////////////////////////////////////
		CString strOvertimeID, strName, strSubmitTime, strReason, strStatus, strDescription;
		CADODatabase *pDb = new CADODatabase;
		try
		{
			if(pDb->Open())
			{
				CADORecordset *pRs = new CADORecordset(pDb);
				if(pRs->Open(query, CADORecordset::openQuery))
				{
					if(pRs->GetRecordCount() > 0)
					{
						DelAllColumns();

						m_ctrlOT.InsertColumn(0, "加班编号", LVCFMT_LEFT, 64);
						m_ctrlOT.InsertColumn(1, "员工姓名", LVCFMT_LEFT, 64);
						m_ctrlOT.InsertColumn(2, "提交时间", LVCFMT_LEFT, 128);
						m_ctrlOT.InsertColumn(3, "原因", LVCFMT_LEFT, 128);
						m_ctrlOT.InsertColumn(4, "状态", LVCFMT_LEFT, 128);
						m_ctrlOT.InsertColumn(5, "描述", LVCFMT_LEFT, 128);

						int cur = 0;
						while(!pRs->IsEOF())
						{
							pRs->GetFieldValue("OvertimeID", strOvertimeID);
							m_ctrlOT.InsertItem(cur, strOvertimeID);
							pRs->GetFieldValue("Name", strName);
							m_ctrlOT.SetItemText(cur, 1, strName);
							pRs->GetFieldValue("SubmitTime", strSubmitTime);
							m_ctrlOT.SetItemText(cur, 2, strSubmitTime);
							pRs->GetFieldValue("Reason", strReason);
							m_ctrlOT.SetItemText(cur, 3, strReason);
							pRs->GetFieldValue("Status", strStatus);
							m_ctrlOT.SetItemText(cur, 4, strStatus);
							pRs->GetFieldValue("Description", strDescription);
							m_ctrlOT.SetItemText(cur, 5, strDescription);
							
							cur++;
							pRs->MoveNext();
						}
					}
					else
						AfxMessageBox("未得到任何信息!");
					pRs->Close();
				}
				delete pRs;
				pDb->Close();
			}
			delete pDb;
		}
		catch(CADOException)
		{
		}
	}
}

void CPageOTManage::OnButtonShowall() 
{
	// TODO: Add your control notification handler code here
	FillOTList();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?