// FFaxLog.cpp : implementation file
//

#include "stdafx.h"
#include "corpsms.h"
#include "FFaxLog.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFFaxLog dialog
#include "MainFrm.h"
#include "ProcessSocket.h"

#include "DLG_BAK.h"
//#include "DLG_Find_Fail.h"
//#include "DLG_Find_FaxLog.h"
//#include "DLG_SMSLog_Export.h"



CFFaxLog::CFFaxLog(CWnd* pParent /*=NULL*/)
	: CDialog(CFFaxLog::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFFaxLog)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_bInit = false;
	m_bRefresh = false;
	m_lRefreshStatusIndex = 0;
	m_bShowToday = true;

	m_bShowAllRecord = false;
	m_bNewDB = true;
}


void CFFaxLog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFFaxLog)
	DDX_Control(pDX, IDC_FAXLOG_LIST, m_wndList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFFaxLog, CDialog)
	//{{AFX_MSG_MAP(CFFaxLog)
	ON_WM_SIZE()
	ON_NOTIFY(NM_RCLICK, IDC_FAXLOG_LIST, OnRclickSmslogList)
	ON_NOTIFY(NM_DBLCLK, IDC_FAXLOG_LIST, OnDblclkSmslogList)
	ON_NOTIFY(LVN_KEYDOWN, IDC_FAXLOG_LIST, OnKeydownSmslogList)
	//}}AFX_MSG_MAP
	ON_COMMAND( MENU_LOG_DEL , On_User_Del )
	ON_COMMAND( MENU_LOG_SEE , On_User_See )
	ON_COMMAND( MENU_LOG_SEND , On_User_Send )
	ON_COMMAND( MENU_LOG_EXPORT , On_User_Export )
	ON_COMMAND( MENU_LOG_REFRESH , On_User_Refresh )
	ON_COMMAND( MENU_LOG_REFSTATUS , On_User_RefStatus )
	ON_COMMAND( MENU_LOG_FIND  , On_User_Find )
	ON_COMMAND( MENU_LOG_BAK  , On_User_Bak )
	ON_COMMAND( MENU_LOG_QUERYFAIL , On_User_QueryFail )

	ON_COMMAND( MENU_LOG_SHOWALLRECORD  , On_User_Refresh_All)
	
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFFaxLog message handlers

BOOL CFFaxLog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//ȡ�ù��ò���
	//CMainFrame * pFrame = static_cast <CMainFrame *>((CMainFrame *)AfxGetMainWnd());
	this->GetParent()->GetParentFrame();
	m_pMainFrame = (CMainFrame *)this->GetParent()->GetParentFrame();
	m_pSocket    = &m_pMainFrame->m_Socket;
	m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );

	//��ʼ��List
	m_Image.Create(16,16,ILC_COLOR32|ILC_MASK,5,5);
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMSDF) );
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMSYF) );
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMSJS) );
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMSSB) );
	m_wndList.SubClassWindow2();
	m_wndList.SetHeadings(_T("���,50;  ״̬,70;״̬˵��,180;������ʱ,70;���ź���,100;���ź���,150;      �������,130;�ύʱ��,130;����ʱ��,130;"));
	m_wndList.SetGridLines(true);
	m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
	//m_wndList.SetBkColor( RGB(237,191,175) );
	//m_wndList.SetTextBkColor( RGB(237,191,175) );

	m_bInit = true;
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CFFaxLog::ReHide()
{
	ShowWindow( SW_HIDE );
	return true;
}

BOOL CFFaxLog::ReShow(BOOL bRefresh)
{
USES_CONVERSION;
	m_AdoRS.Close();
	if ( m_strBakDBName.GetLength()<=0 )
	{
		m_adoConnection.Close();
		m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );
	}
	else
	{
		//������
		char szPasswd[64]={0};strcpy(szPasswd , ACCESS_PASSWD );
		char szKey[64]={0};strcpy( szKey , ACCESS_KEY );
		char szNew2[64]={0};long lOut=sizeof(szNew2);
		TCHAR szNew[64]={0};
		CDes des;
		des.Decrypt( szPasswd , strlen(szPasswd),szNew2,lOut,szKey,8);
#ifdef UNICODE
		_tcscpy(szNew,A2W(szNew2));
#else
		_tcscpy(szNew,szNew2);
#endif
		m_adoConnection.Close();
		if ( !m_adoConnection.ConnectAccess(m_strBakDBName,szNew ) ) //�������ݿ����,��Ҫ���´���
		{
			MessageBox( _T("�򿪱����ļ���������!") , _T("����") , MB_ICONWARNING );
			m_bShowToday = true;
			m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );
		}
		else
		{
			m_bShowToday = false;
			m_AdoRS.SetAdoConnection( &m_adoConnection );  //��������
		}
	}
	ShowWindow( SW_SHOW );
	if ( bRefresh || !m_bRefresh || m_bNewDB )
	{
		RefreshInfo();
		m_bNewDB = false;
	}
	return true;
}

BOOL CFFaxLog::RefreshInfo()
{
	m_wndList.ShowWindow( SW_HIDE );  //Ϊ�˼ӿ���ʾ�ٶ�
	m_bRefresh = true;
	m_wndList.DeleteAllItems();
	TCHAR szSelect[256]={0};

	CString strTop;
	if ( !m_bShowAllRecord && m_pMainFrame->m_Setup.lTopRecord>0 )
	{
		strTop.Format(_T(" top %d "),m_pMainFrame->m_Setup.lTopRecord );
	}

	if ( m_bShowToday )
	{
		//����ѯ�����
		SYSTEMTIME t;::GetLocalTime(&t);
		if ( m_pMainFrame->m_Setup.bSQLUse )
			_stprintf( szSelect , _T("select %s * from faxlog where SubTime>='%04d%02d%02d' %s order by SubTime desc"),strTop,t.wYear,t.wMonth,t.wDay,m_strFindAdd );  //��ѯ�ѷ�����
		else
			_stprintf( szSelect , _T("select %s * from faxlog where SubTime>=#%04d-%02d-%02d# %s order by SubTime desc"),strTop,t.wYear,t.wMonth,t.wDay,m_strFindAdd );  //��ѯ�ѷ�����
	}
	else
	{
		if ( m_strFindAdd.GetLength()>0 )
			_stprintf( szSelect , _T("select * from faxlog where 1 %s order by SubTime desc"),m_strFindAdd );  //��ѯ���ռ�¼
		else
			_stprintf( szSelect , _T("select * from faxlog order by SubTime desc") );  //��ѯ��־,��ʾȫ���ģ�����ֻ��ʾͷ����
	}
	BOOL b = m_AdoRS.Open( szSelect );
	long lSendID=0;
	long lStatus=0;
	TCHAR szStatus[24]={0};
	TCHAR szSendNum[24]={0};
	TCHAR szRecver[64]={0};
	TCHAR szRecvNum[64]={0};
	TCHAR szMsg[180]={0};
	COleDateTime tSub;
	COleDateTime tRecv;
	CString strSubTime;
	CString strRecvTime;
	long lCount = m_AdoRS.GetRecordCount();
	if ( !m_bShowAllRecord && m_pMainFrame->m_Setup.lTopRecord>0 &&
		 lCount>m_pMainFrame->m_Setup.lTopRecord )
	{
		lCount = m_pMainFrame->m_Setup.lTopRecord;
	}
	m_bShowAllRecord = false;  //��ʾ��һ�κ󣬲�����ȫ����ʾ
	if ( b && lCount )
	{
		CAdoFaxLog adoSms;
		m_AdoRS.RecordBinding( adoSms );

		m_AdoRS.MoveFirst();
		long iItem = 0;
		while( !m_AdoRS.IsEOF() && iItem<lCount )
		{

			//	m_wndList.SetHeadings(_T("���,50;  ״̬,70;״̬˵��,180;������ʱ,70;���ź���,100;���ź���,150;      �������,130;�ύʱ��,130;����ʱ��,130;"));
			long lIcon = GetStatusText( adoSms.m_Status , szStatus );
			_tcscpy(szRecvNum,adoSms.m_RecvNum);
			if ( _tcslen(adoSms.m_Recver)>0 )
			{
				_tcscat( szRecvNum , _T("-") );
				_tcscat( szRecvNum , adoSms.m_Recver );
			}

			if ( adoSms.m_SubTime.GetStatus() == COleDateTime::valid )
			{
				strSubTime.Format(_T("%04d.%02d.%02d %02d:%02d") , adoSms.m_SubTime.GetYear(),adoSms.m_SubTime.GetMonth(),adoSms.m_SubTime.GetDay(),adoSms.m_SubTime.GetHour(),adoSms.m_SubTime.GetMinute() );
			}
			if ( adoSms.m_RecvTime.GetStatus() == COleDateTime::valid )
			{
				strRecvTime.Format(_T("%04d.%02d.%02d %02d:%02d") , adoSms.m_RecvTime.GetYear(),adoSms.m_RecvTime.GetMonth(),adoSms.m_RecvTime.GetDay(),adoSms.m_RecvTime.GetHour(),adoSms.m_RecvTime.GetMinute() );
			}
			CString strTimes;
			if ( adoSms.m_Times>0 )
				strTimes.Format(_T(" %d") , adoSms.m_Times);
			m_wndList.InsertItemAndCol( iItem , _itot( lCount-iItem,szSelect,10) , szStatus,adoSms.m_StatusMsg,strTimes,adoSms.m_SendNum,szRecvNum,adoSms.m_Title,strSubTime,strRecvTime );
			m_wndList.SetItemData(  iItem, adoSms.m_SendID );
			m_wndList.SetIconIndex( iItem , lIcon );


			iItem++;
			memset(&adoSms,0,sizeof(adoSms));
			m_AdoRS.MoveNext();
		}
	}
	RefreshStatus();
	m_wndList.ShowWindow( SW_SHOW );  //Ϊ�˼ӿ���ʾ�ٶ�

	if ( strTop.GetLength()>0 && lCount>=m_pMainFrame->m_Setup.lTopRecord)  //��ʾ��ʾ����ʾ���м�¼����ѡ��
	{
		CMenu menu;
		menu.CreatePopupMenu();
		menu.AppendMenu(MF_SEPARATOR );
		menu.AppendMenu(MF_STRING     , MENU_LOG_SHOWALLRECORD, _T(" ��ʾ���м�¼ ") );
		menu.AppendMenu(MF_SEPARATOR );
		CRect rect;
		GetWindowRect(&rect);
		//ClientToScreen(&rect);
		//��ʾ�˵�
		POINT pt ;
		pt.x = rect.Width()/2;
		pt.y = rect.Height()/3;
		ClientToScreen(&pt);
		//menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
		menu.TrackPopupMenu(TPM_CENTERALIGN,pt.x,pt.y, this, NULL);
		menu.DestroyMenu();
	}

	return true;
}


void CFFaxLog::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	if ( m_bInit )
	{
		m_wndList.MoveWindow( 0 , 0 , cx,cy);
	}
}

long CFFaxLog::GetStatusText(long lStatus, TCHAR *pStatus)
{
	_tcscpy( pStatus , _T("δ֪״̬") );
	long lIcon = 0;
	switch(lStatus)
	{
		case SEND_STATUS_SUB_OK:
			 _tcscpy( pStatus , _T("�ύ�ɹ�") );
			 break;
		case SEND_STATUS_SUB_FILT:
			 _tcscpy( pStatus , _T("�����") );
			 break;
		case SEND_STATUS_SUB_ERROR:
		case SEND_STATUS_SUB_USERNOSMS:
		case SEND_STATUS_SUB_CORPNOSMS:
		case SEND_STATUS_SUB_CORPOVRDATE:
			 _tcscpy( pStatus , _T("�ύʧ��") );
			 lIcon = 3;
			 break;
		case SEND_STATUS_SUB_NUMNOSUP:
			 _tcscpy( pStatus , _T("Ŀ������") );
			 lIcon = 3;
			 break;
		case SEND_STATUS_FILT_ERROR:
			 _tcscpy( pStatus , _T("���ʧ��") );
			 lIcon = 3;
			 break;
		case SEND_STATUS_SEND_OK:
			 _tcscpy( pStatus , _T("���ͳɹ�") );
			 lIcon = 1;
			 break;
		case SEND_STATUS_SEND_ERROR:
			 _tcscpy( pStatus , _T("����ʧ��") );
			 lIcon = 3;
			 break;
		case SEND_STATUS_RECV_OK:
			 _tcscpy( pStatus , _T("���ճɹ�") );
			 lIcon = 2;
			 break;
		case SEND_STATUS_RECV_ERROR:
			 _tcscpy( pStatus , _T("����ʧ��") );
			 lIcon = 3;
			 break;
	}
	return lIcon;
}

void CFFaxLog::OnRclickSmslogList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;
	ShowRMenu();
}

void CFFaxLog::ShowRMenu()
{
	CMenu menu;
	menu.CreatePopupMenu();
	BOOL bLock = false;
	long lItem = this->GetCurrentSelected();
	BOOL bNoStatus  = m_pMainFrame->m_Setup.bSDK & SDK_NOSTATUS ? true:false;



	if ( lItem >= 0 )
	{
		menu.AppendMenu(MF_STRING     , MENU_LOG_SEE , _T(" �� �� ") );
		menu.AppendMenu(MF_STRING     , MENU_LOG_SEND, _T(" �ٴη��� ") );
		menu.AppendMenu(MF_STRING     , MENU_LOG_DEL , _T(" ɾ �� ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LOG_SEE , _T(" �� �� ") );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LOG_SEND, _T(" �ٴη��� ") );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LOG_DEL, _T(" ɾ �� ") );
	}
	menu.AppendMenu(MF_SEPARATOR );
	//����
	menu.AppendMenu(MF_STRING     , MENU_LOG_EXPORT, _T(" ����... ") );
	//ˢ��
	menu.AppendMenu(MF_STRING     , MENU_LOG_FIND , _T(" ����... ") );
	menu.AppendMenu(MF_SEPARATOR );
	if ( lItem >= 0 )
		menu.AppendMenu(MF_STRING     , MENU_LOG_BAK , _T(" ����... ") );
	else
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED, MENU_LOG_BAK , _T(" ����... ") );
	menu.AppendMenu(MF_SEPARATOR );

	BOOL bFindFail = m_pMainFrame->m_Setup.bSDK & SDK_ALLOWFINDFAIL ? true:false;
	if ( bFindFail && !bNoStatus )
	{
		menu.AppendMenu(MF_STRING     , MENU_LOG_QUERYFAIL, _T(" ��ʧ�ܶ��� ") );
		menu.AppendMenu(MF_SEPARATOR );
	}

	//ˢ��
	menu.AppendMenu(MF_STRING     , MENU_LOG_REFRESH, _T(" ˢ �� ") );
	if ( !bNoStatus )  //�������Ҫ״̬��û��ˢ��״̬�IJ˵�
	{
		//ˢ��
		menu.AppendMenu(MF_STRING     , MENU_LOG_REFSTATUS, _T(" ˢ��״̬ ") );
	}

	//��ʾ�˵�
	POINT pt ;
	::GetCursorPos( &pt );
	//this->ClientToScreen( &pt);
	menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
	menu.DestroyMenu();
}

long CFFaxLog::GetCurrentSelected()
{
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	if ( pos )
	{
		return m_wndList.GetNextSelectedItem(pos);
	}
	return -1;
}
void CFFaxLog::On_User_See()
{
	long lItem = GetCurrentSelected();
	if ( lItem <0 )
		return ;
/*
	SMS_See sms = GetSms(lItem);
	sms.lType = SMS_SEE_TYPE_LOG;
	DLG_FaxLogSee dlg(this);
	dlg.SetParam(sms);
	dlg.DoModal();
*/
}
void CFFaxLog::On_User_Send()
{
	long lItem = GetCurrentSelected();
	if ( lItem <0 )
		return ;

	if ( m_pMainFrame->m_pFuncView->On_User_List_Add() ) //�½��б�
	{
		//��������
		m_pMainFrame->m_pFuncView->m_DLGSend.List_SetMsg( _T("\"%Memo%\"") );
		//���Ӻ���
		long lCount = m_wndList.GetSelectedCount();
		if ( lCount <= 0 )
			return ;
		//��������
		long lSize = sizeof(Send_User)*lCount;
		BYTE *pS = new BYTE[lSize];
		memset( pS , 0 , lSize );
		Send_User * pUser = (Send_User * )pS;
		
		TCHAR szSelect[128]={0};
		POSITION pos = m_wndList.GetFirstSelectedItemPosition();
		while ( pos )
		{
			long lItem = m_wndList.GetNextSelectedItem( pos );
			long lSendID = m_wndList.GetItemData( lItem );
			if ( lSendID > 0 )
			{
				_stprintf( szSelect , _T("select * from faxlog where SendID=%d"), lSendID );
				BOOL b = m_AdoRS.Open( szSelect );
				if ( b && m_AdoRS.GetRecordCount() )
				{
					m_AdoRS.MoveFirst();
					m_AdoRS.GetCollect( _T("Recver")     , pUser->szName);
					m_AdoRS.GetCollect( _T("RecvNum")    , pUser->szMobile);
					m_AdoRS.GetCollect( _T("Msg")        , pUser->szBZ);
				}
			}
			else
			{
				m_wndList.GetItemText(lItem,3,pUser->szMobile,sizeof(pUser->szMobile));
				m_wndList.GetItemText(lItem,4,pUser->szBZ,sizeof(pUser->szBZ));
			}
			pUser ++;
		}
		m_pMainFrame->m_pFuncView->On_User_List_AddUser(lCount,(Send_User*)pS);
		delete pS;
	}
}

void CFFaxLog::On_User_Del()
{
	long lCount = m_wndList.GetSelectedCount();
	long *lDel = new long[lCount+2];
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	long i = 0;
	while(pos)
	{
		lDel[i]= m_wndList.GetNextSelectedItem(pos);
		i ++;
	}
	long lSendID = 0;
	TCHAR szSelect[128];
	//��תɾ��
	m_wndList.ShowWindow( SW_HIDE );  //�ӿ���ʾ���ٶ�
	for ( i = lCount ; i>0 ; i-- )
	{
		lSendID = m_wndList.GetItemData( lDel[i-1] );
		_stprintf( szSelect , _T("delete from faxlog where SendID=%d ") , lSendID );
		BOOL b = m_AdoRS.Open( szSelect );
		if ( b && m_AdoRS.GetRecordCount() )
		{
			m_wndList.DeleteItem(lDel[i-1]);  //���б���ɾ��
		}
	}
	m_wndList.ShowWindow( SW_SHOW );  //�ӿ���ʾ���ٶ�
	delete lDel;
}
void CFFaxLog::On_User_Export()
{
/*
	//����Ҫ״̬�Ķ���ͨ���ж����ء����ͳɹ�����
	BOOL bNoStatus  = m_pMainFrame->m_Setup.bSDK & SDK_NOSTATUS ? true:false;

	DLG_SMSLog_Export dlg(this);
	dlg.SetParam(&m_AdoRS,&m_wndList,bNoStatus);
	dlg.DoModal();	
*/
}
void CFFaxLog::On_User_Refresh()
{
	RefreshInfo();
}
void CFFaxLog::On_User_QueryFail()
{
/*
	DLG_Find_Fail dlg(this);

	if ( dlg.DoModal() == IDOK )
	{
		m_wndList.ShowWindow(SW_HIDE );  //�ӿ���ʾ�ٶ�
		m_wndList.DeleteAllItems();
		m_wndList.ShowWindow(SW_SHOW ); //�ӿ���ʾ�ٶ�

		REQ_List * pList = new REQ_List;
		memset(pList , 0 , sizeof(REQ_List));

		_tcscpy( pList->szMobile , _T("FAIL") );
		dlg.m_tQBegin.GetAsSystemTime(pList->tBegin);
		dlg.m_tQEnd.GetAsSystemTime(pList->tEnd);
		pList->lCorpID = m_pMainFrame->m_lCorpID;
		pList->lMobileType = -1;
		pList->lMsgType = -1;
		pList->lMsgType = -1;
		pList->bJF = false;

		m_pMainFrame->SendFrame( SMSFUNC_LIST , (BYTE*)pList , sizeof(REQ_List) );

	}
*/
}
void CFFaxLog::On_User_Find()
{
/*
	CString strTemp;
	DLG_Find_FaxLog dlg(this);
	BOOL bNoStatus  = m_pMainFrame->m_Setup.bSDK & SDK_NOSTATUS ? true:false;
	dlg.SetParam(!m_bShowToday , !bNoStatus );
	if ( dlg.DoModal() == IDOK )
	{
		m_strFindAdd = _T("");
		if ( !m_bShowToday )
		{
			strTemp.Format( _T(" AND SubTime>=#%04d-%02d-%02d# AND SubTime<=#%04d-%02d-%02d 23:59:59#"),dlg.m_TBegin.GetYear(),dlg.m_TBegin.GetMonth(),dlg.m_TBegin.GetDay(),dlg.m_TEnd.GetYear(),dlg.m_TEnd.GetMonth(),dlg.m_TEnd.GetDay());
			m_strFindAdd = strTemp;
		}
		if ( dlg.m_lStatus>=0 )
		{
			strTemp.Format( _T(" AND Status=%d"),dlg.m_lStatus );
			m_strFindAdd += strTemp;
		}
		if ( dlg.m_strSendNum.GetLength()>0 )
		{
			strTemp.Format( _T(" AND SendNum like '%%%s%%'"),dlg.m_strSendNum );
			m_strFindAdd += strTemp;
		}
		if ( dlg.m_strRecvNum.GetLength()>0 )
		{
			strTemp.Format( _T(" AND RecvNum like '%%%s%%'"),dlg.m_strRecvNum );
			m_strFindAdd += strTemp;
		}
		if ( dlg.m_strMsg.GetLength()>0 )
		{
			strTemp.Format( _T(" AND Msg like '%%%s%%'"),dlg.m_strMsg );
			m_strFindAdd += strTemp;
		}
		On_User_Refresh();

		m_strFindAdd = _T("");  //ˢ�º󣬲�ѯ����
	}
*/
}
void CFFaxLog::On_User_Bak()
{
USES_CONVERSION;
/*
	long lCount = m_wndList.GetSelectedCount();
	DLG_BAK dlg(this);
	dlg.SetParam(lCount);

	if ( dlg.DoModal() == IDOK )
	{
		//�������ݿ�
		TCHAR szPath[512]={0};
		TCHAR szBakPath[64]={0};
		TCHAR szOldDB[512]={0};
		TCHAR szNewDB[512]={0};
		this->m_pMainFrame->GetCurrentPath( szPath );
		_stprintf(szOldDB , _T("%s%s"),szPath,ACCESS_SOURCE);
		_stprintf(szBakPath,_T("Bak_%d_%s"),m_pMainFrame->m_lCorpID,m_pMainFrame->m_pCurUser->szUser);
		_tcscat(szPath,szBakPath);
		::CreateDirectory(szPath,NULL); //��������û�����ȴ�����˵
		_stprintf(szNewDB , _T("%s\\FaxLog_%s.bak"),szPath,dlg.m_strTitle);
		if ( !CopyFile( szOldDB , szNewDB , false ) ) //copy�ļ�ʧ��
		{
			MessageBox( _T("ϵͳ�ļ���ʧ1�������°�װ!") , _T("��������") , MB_ICONWARNING );
			return ;
		}

		//���µı������ݿ�
		CAdoConnection bakadoConnection;
		CAdoRecordSet  bakAdoRS;

		//������
		char szPasswd[64]={0};strcpy(szPasswd , ACCESS_PASSWD );
		char szKey[64]={0};strcpy( szKey , ACCESS_KEY );
		char szNew2[64]={0};long lOut=sizeof(szNew2);
		TCHAR szNew[64]={0};
		CDes des;
		des.Decrypt( szPasswd , strlen(szPasswd),szNew2,lOut,szKey,8);
#ifdef UNICODE
		_tcscpy(szNew , A2W(szNew2));
#else
		_tcscpy(szNew , szNew2);
#endif
		if ( !bakadoConnection.ConnectAccess(szNewDB,szNew ) ) //�������ݿ����,��Ҫ���´���
		{
			MessageBox( _T("ϵͳ�ļ���ʧ2�������°�װ!") , _T("��������") , MB_ICONWARNING );
			return;
		}
		bakAdoRS.SetAdoConnection( &bakadoConnection );  //��������


		if ( !bakAdoRS.Open(_T("faxlog"),adCmdTable) )
		{
			MessageBox( _T("ϵͳ�ļ���ʧ3�������°�װ!") , _T("��������") , MB_ICONWARNING );
			return;
		}

		long *lDel = new long[lCount+2];
		int  lDelCount=0;
		TCHAR szSelect[256]={0};
		POSITION pos = m_wndList.GetFirstSelectedItemPosition();
		while ( pos )
		{
			long lItem = m_wndList.GetNextSelectedItem( pos );
			long lSendID = m_wndList.GetItemData( lItem );
			lDel[lDelCount]=lItem;
			if ( lSendID > 0 )
			{
				_stprintf( szSelect , _T("select * from faxlog where SendID=%d"), lSendID );
				BOOL b = m_AdoRS.Open( szSelect );
				if ( b && m_AdoRS.GetRecordCount() )
				{
					CAdoFaxLog adoSms;
					m_AdoRS.RecordBinding( adoSms );
					m_AdoRS.MoveFirst();

					//���뵽��һ����
					BOOL b = bakAdoRS.RecordBinding( adoSms );
					b = bakAdoRS.AddNew(adoSms);
					b = bakAdoRS.Update();
				}
			}
			lDelCount ++;
		}
		
		//��תɾ��
		m_wndList.ShowWindow( SW_HIDE );  //�ӿ���ʾ���ٶ�
		for ( int i=lDelCount-1 ; i>=0 ; i-- )
		{
			long lSendID = m_wndList.GetItemData( lDel[i] );
			_stprintf( szSelect , _T("delete from faxlog where SendID=%d ") , lSendID );
			BOOL b = m_AdoRS.Open( szSelect );
			if ( b && m_AdoRS.GetRecordCount() )
			{
				m_wndList.DeleteItem(lDel[i]);  //���б���ɾ��
			}
		}
		m_wndList.ShowWindow( SW_SHOW );  //�ӿ���ʾ���ٶ�

		delete lDel;

		//����������
		CString strName;
		strName.Format( _T("����_%s") , dlg.m_strTitle );
		m_pMainFrame->m_pFuncView->AddBak_FaxLog(strName);
	}
*/
}

void CFFaxLog::On_User_RefStatus()
{
	RefreshStatus();
}
void CFFaxLog::On_User_Refresh_All()
{
	m_bShowAllRecord = true;
	On_User_Refresh();
}

void CFFaxLog::RefreshStatus(BOOL bBegin)
{
	//��һ��������״̬Ϊδ�̶��Ķ���
	long lCount = m_wndList.GetItemCount();
	long * pSendID= new long[STATUS_MAX_QUERY*3+100];
	long lCount2=0;
	if ( bBegin )
		m_lRefreshStatusIndex = 0;
	else
		m_lRefreshStatusIndex ++;
	for ( int i=m_lRefreshStatusIndex*STATUS_MAX_QUERY;i<lCount;i++ )  //ÿ������ѯ1000����¼
	{
		long lStatus = GetItemStatus(i);
		if ( lStatus == SEND_STATUS_SUB_OK ||   //�������֣���Ҫ����ȡ״̬
			 lStatus == SEND_STATUS_SUB_FILT ||
			 lStatus == SEND_STATUS_SEND_OK ||
			 lStatus == SEND_STATUS_SEND_ERROR)
		{
			pSendID[lCount2] = i;
			lCount2 ++;
			pSendID[lCount2] = m_wndList.GetItemData( i ); //ȡ��SendID
			lCount2 ++;
			pSendID[lCount2] =lStatus;
			lCount2 ++;
		}
		if ( lCount2 >= STATUS_MAX_QUERY*3 )  //����1000����
			break;
	}
	lCount = lCount2/3;  //ȡ����Ҫȡ״̬�ĸ���
	if ( lCount > 0 )
	{
		long lSize = sizeof(REQ_FaxStatus)+sizeof(ANS_FaxStatus_Data2)*lCount;
		BYTE * pData = new BYTE[lSize];memset(pData,0,lSize);
		REQ_FaxStatus * pStatus = (REQ_FaxStatus *)pData;
		ANS_FaxStatus_Data2 * pStatusData = (ANS_FaxStatus_Data2 *)(pData+sizeof(REQ_FaxStatus));
		pStatus->lCorpID = m_pMainFrame->m_lCorpID;
		pStatus->lCount  = lCount;
		for ( i=0;i<lCount;i++)
		{
			pStatusData->lItemID = pSendID[i*3];
			pStatusData->lSendID = pSendID[i*3+1];
			pStatusData->lStatus = pSendID[i*3+2];
			pStatusData++;
		}
		m_pMainFrame->SendFrame( SMSFUNC_FAXSTATUS , pData , lSize );
	}
	delete pSendID;
}

long CFFaxLog::GetItemStatus(long iItem)
{
	TCHAR szStatus[16]={0};
	TCHAR szTime[32]={0};
	m_wndList.GetItemText( iItem , 1 , szStatus , sizeof(szStatus) );
	m_wndList.GetItemText( iItem , 7 , szTime ,sizeof(szTime));
	szTime[4]=0;
	szTime[7]=0;
	szTime[10]=0;
	long lYear=_ttol(szTime);
	long lMon =_ttol(szTime+5);
	long lDay =_ttol(szTime+8);

	CTime t1(lYear,lMon,lDay,0,0,0);
	CTime t2 = CTime::GetCurrentTime();
	CTime t3 = t1 + CTimeSpan( 10, 0, 0, 0 );
	if ( t3 < t2 ) //2��ǰ����Ϣ������
	{
		return SEND_STATUS_UNKNOW;
	}
	if ( !_tcscmp( szStatus , _T("�ύ�ɹ�") ) )
		return SEND_STATUS_SUB_OK;
	if ( !_tcscmp( szStatus , _T("�����") ) )
		return SEND_STATUS_SUB_FILT;
	if ( !_tcscmp( szStatus , _T("�ύʧ��") ) )
		return SEND_STATUS_SUB_ERROR;
	if ( !_tcscmp( szStatus , _T("Ŀ������") ) )
		return SEND_STATUS_SUB_NUMNOSUP;
	if ( !_tcscmp( szStatus , _T("���ʧ��") ) )
		return SEND_STATUS_FILT_ERROR;
	if ( !_tcscmp( szStatus , _T("���ͳɹ�") ) )
		return SEND_STATUS_SEND_OK;
	if ( !_tcscmp( szStatus , _T("����ʧ��") ) )
		return SEND_STATUS_SEND_ERROR;
	if ( !_tcscmp( szStatus , _T("���ճɹ�") ) )
		return SEND_STATUS_RECV_OK;
	if ( !_tcscmp( szStatus , _T("����ʧ��") ) )
		return SEND_STATUS_RECV_ERROR;
//	if ( !_tcscmp( szStatus , _T("δ֪״̬") ) )
		return SEND_STATUS_UNKNOW;

}

SMS_See CFFaxLog::GetSms(long lItem)
{
	SMS_See sms={0};

	long lSendID = m_wndList.GetItemData(lItem);
	CString strSelect;
	long lStatus;
	TCHAR szSender[16]={0};
	TCHAR szRecver[16]={0};
	COleDateTime t;
	strSelect.Format( _T("select * from faxlog where SendID=%d") , lSendID );
	if ( m_AdoRS.Open( strSelect ) && m_AdoRS.GetRecordCount() )
	{
		m_AdoRS.MoveFirst();
		m_AdoRS.GetCollect( _T("Status")  , lStatus );
		m_AdoRS.GetCollect( _T("SendNum") , sms.szSender );
		m_AdoRS.GetCollect( _T("Recver")  , szRecver );
		m_AdoRS.GetCollect( _T("RecvNum") , sms.szRecver );
		m_AdoRS.GetCollect( _T("Title")     , sms.szMsg );
		m_AdoRS.GetCollect( _T("SubTime") , t );t.GetAsSystemTime(sms.tSend);
		m_AdoRS.GetCollect( _T("RecvTime"), t );t.GetAsSystemTime(sms.tRecv);

		GetStatusText( lStatus , sms.szStatus );
		if ( _tcslen(szSender)>0 )
		{
			_tcscat( sms.szSender , _T("-") );
			_tcscat( sms.szSender , szSender );
		}
		if ( _tcslen(szRecver)>0 )
		{
			_tcscat( sms.szRecver , _T("-") );
			_tcscat( sms.szRecver , szRecver );
		}
	}

	return sms;
}

void CFFaxLog::OnDblclkSmslogList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;
	On_User_See();
}

void CFFaxLog::OnKeydownSmslogList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
	*pResult = 0;

	if ( pLVKeyDow->wVKey == VK_DELETE )
	{
		On_User_Del();
	}
	if ( pLVKeyDow->wVKey == VK_SPACE)
	{
		On_User_See();
	}
	if ( pLVKeyDow->wVKey == 'S' || pLVKeyDow->wVKey == 's')
	{
		On_User_Send();
	}
	if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r')
	{
		On_User_Refresh();
	}
	if ( pLVKeyDow->wVKey == 'T' || pLVKeyDow->wVKey == 't')
	{
		On_User_RefStatus();
	}
	if ( pLVKeyDow->wVKey == 'F' || pLVKeyDow->wVKey == 'f')
	{
		On_User_Find();
	}
	if ( pLVKeyDow->wVKey == 'B' || pLVKeyDow->wVKey == 'b')
	{
		On_User_Bak();
	}
	if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a')
	{
		m_wndList.SelectAllItems();
	}
}

long CFFaxLog::GetStatusText2(long lStatus, TCHAR *pStatus)
{
	_tcscpy( pStatus , _T("δ֪״̬") );
	long lIcon = 0;
	switch(lStatus)
	{
		case SEND_STATUS_SUB_OK:
			 _tcscpy( pStatus , _T("�ύ�ɹ�") );
			 break;
		case SEND_STATUS_SUB_FILT:
			 _tcscpy( pStatus , _T("�����") );
			 break;
		case SEND_STATUS_SUB_ERROR:
		case SEND_STATUS_SUB_USERNOSMS:
		case SEND_STATUS_SUB_CORPNOSMS:
		case SEND_STATUS_SUB_CORPOVRDATE:
			 _tcscpy( pStatus , _T("�ύʧ��") );
			 lIcon = 3;
			 break;
		case SEND_STATUS_SUB_NUMNOSUP:
			 _tcscpy( pStatus , _T("Ŀ������") );
			 lIcon = 3;
			 break;
		case SEND_STATUS_FILT_ERROR:
			 _tcscpy( pStatus , _T("���ʧ��") );
			 lIcon = 3;
			 break;
		case SEND_STATUS_SEND_OK:
			 _tcscpy( pStatus , _T("���ͳɹ�") );
			 lIcon = 1;
			 break;
		case SEND_STATUS_SEND_ERROR:
			 _tcscpy( pStatus , _T("����ʧ��") );
			 lIcon = 3;
			 break;
		case SEND_STATUS_RECV_OK:
			 _tcscpy( pStatus , _T("���ͳɹ�") );
			 lIcon = 1;
			 break;
		case SEND_STATUS_RECV_ERROR:
			 _tcscpy( pStatus , _T("����ʧ��") );
			 lIcon = 3;
			 break;
	}
	return lIcon;
}

void CFFaxLog::OnOK() 
{
	//CDialog::OnOK();
}

void CFFaxLog::OnCancel() 
{
	//CDialog::OnCancel();
}

void CFFaxLog::SetToday(BOOL bToday)
{
	if ( m_bShowToday != bToday )
	{
		m_bShowToday = bToday;
		m_bRefresh = false;
	}

}

void CFFaxLog::SetBakDBName(CString strDBName)
{
	m_strBakDBName = strDBName;
	m_bNewDB = true;
}

BOOL CFFaxLog::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame)
{
	//�޸Ĺ��õ�ַ��
	if (pHead->lFuncType == SMSFUNC_FAXSTATUS)
	{
		ANS_FaxStatus  *      pStatus = (ANS_FaxStatus *)pFrame;
		ANS_FaxStatus_Data *  pData   = (ANS_FaxStatus_Data *)(pFrame+sizeof(ANS_FaxStatus));
		for ( int i = 0;i<pStatus->lCount;i++)
		{
			if ( pData->lStatus != -1 )  //�����ֵΪ-1,֤��״̬û�䣬���Բ��ظ���
			{
				COleDateTime tSend(pData->tSendTime );
				COleDateTime tRecv(pData->tRecvTime );
				//������������ݿ�
				TCHAR szBuf[32];
				TCHAR szSelect[128]={0};
				CString str;
				_stprintf( szSelect , _T("select * from faxlog where SendID=%d") , pData->lSendID );
				if ( m_AdoRS.Open(szSelect) && !m_AdoRS.IsEOF() )
				{
					m_AdoRS.PutCollect( _T("Status") , pData->lStatus );
					m_AdoRS.PutCollect( _T("Times") , pData->lTimes );
					m_AdoRS.PutCollect( _T("StatusMsg") , pData->szStatusMsg );
					m_AdoRS.PutCollect( _T("SendTime") , tSend );
					m_AdoRS.PutCollect( _T("RecvTime") , tRecv );
					m_AdoRS.Update();
					m_AdoRS.Close();
				}
				//������ʾ
				if ( pData->lItemID>=0 && pData->lItemID<m_wndList.GetItemCount() )
				{
					long lSendID = m_wndList.GetItemData(pData->lItemID);
					if ( lSendID == pData->lSendID )  //������ʾ����
					{
						long lIcon = GetStatusText( pData->lStatus , szBuf );
						m_wndList.SetItemText(pData->lItemID,1,szBuf);
						m_wndList.SetIconIndex( pData->lItemID , lIcon );

						m_wndList.SetItemText(pData->lItemID,2,pData->szStatusMsg);
						if ( pData->lTimes >0 )
						{
							str.Format(_T(" %d") , pData->lTimes );
							m_wndList.SetItemText(pData->lItemID,3,str);
						}
						if ( tRecv.GetStatus() == COleDateTime::valid )
						{
							_stprintf( szBuf , _T("%04d.%02d.%02d %02d:%02d") , tRecv.GetYear(),tRecv.GetMonth(),tRecv.GetDay(),tRecv.GetHour(),tRecv.GetMinute() );
							m_wndList.SetItemText(pData->lItemID,8,szBuf);
						}
					}
				}
			}
			pData ++;  //����������һ��
		}
		RefreshStatus( false );  //��ѯ��1000����״̬
		return true;
	}

	return false;
}