// FMmsYF.cpp : implementation file
//

#include "stdafx.h"
#include "CorpSms.h"
#include "FMmsYF.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFMmsYF dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_SmsList_Export.h"

CFMmsYF::CFMmsYF(CWnd* pParent /*=NULL*/)
	: CDialog(CFMmsYF::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFMmsYF)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_bInit = false;
	m_bRefresh = false;
	m_bShowToday = true;
}


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


BEGIN_MESSAGE_MAP(CFMmsYF, CDialog)
	//{{AFX_MSG_MAP(CFMmsYF)
	ON_WM_SIZE()
	ON_NOTIFY(NM_DBLCLK, IDC_MMSYF_LIST, OnDblclkSmsyfList)
	ON_NOTIFY(NM_RCLICK, IDC_MMSYF_LIST, OnRclickSmsyfList)
	ON_NOTIFY(LVN_KEYDOWN, IDC_MMSYF_LIST, OnKeydownSmsyfList)
	//}}AFX_MSG_MAP
	ON_COMMAND( MENU_YF_ADD , On_User_Add )
	ON_COMMAND( MENU_YF_SEE , On_User_See )
	ON_COMMAND( MENU_YF_RESEND  , On_User_ReSend )
	ON_COMMAND( MENU_YF_DEL     , On_User_Del )
	ON_COMMAND( MENU_YF_REFRESH , On_User_Refresh )
	ON_COMMAND( MENU_YF_FIND    , On_User_Find )
	ON_COMMAND( MENU_YF_EXPORT  , On_User_Export )

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFMmsYF message handlers

BOOL CFMmsYF::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 );
	m_AdoRS2.SetAdoConnection( &m_pMainFrame->m_adoConnection );

	//��ʼ��List
	m_Image.Create(16,16,ILC_COLOR32|ILC_MASK,5,5);
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_MMS_SEND) );
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) );
	m_wndList.SubClassWindow2();
	m_wndList.SetHeadings(_T("���,50;   ����ʱ��,135;������,60;���Ŵ�С,100;   ��ʱʱ��,135;    ���ű���,200;"));
	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 CFMmsYF::ReHide()
{
	ShowWindow( SW_HIDE );
	return true;
}

BOOL CFMmsYF::ReShow(BOOL bRefresh)
{
	ShowWindow( SW_SHOW );
	if ( bRefresh || !m_bRefresh )
	{
		RefreshInfo();
	}
	return true;
}

BOOL CFMmsYF::RefreshInfo()
{
	m_wndList.ShowWindow( SW_HIDE );  //Ϊ�˼ӿ���ʾ�ٶ�
	m_bRefresh = true;
	m_wndList.DeleteAllItems();
	TCHAR szSelect[512]={0};
	if ( m_bShowToday )
	{
		//����ѯ�����
		SYSTEMTIME t;::GetLocalTime(&t);
		if ( m_pMainFrame->m_Setup.bSQLUse )
			_stprintf( szSelect , _T("select * from mmsbox where BoxType='1' and CreateTime>='%04d%02d%02d' %s order by CreateTime "), t.wYear,t.wMonth,t.wDay,m_strFindAdd );  //��ѯ�ѷ�����
		else
			_stprintf( szSelect , _T("select * from mmsbox where BoxType='1' and CreateTime>=#%04d-%02d-%02d# %s order by CreateTime "), t.wYear,t.wMonth,t.wDay,m_strFindAdd );  //��ѯ�ѷ�����
	}
	else
	{
		_stprintf( szSelect , _T("select * from mmsbox where BoxType='1' %s order by CreateTime ") , m_strFindAdd );  //��ѯ�ѷ�����
	}
	BOOL b = m_AdoRS.Open( szSelect );
	CAdoRecordSet    AdoRS;
	AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );
	long lCount = 0;
	COleDateTime ot;
	SYSTEMTIME   t={0};
	long lBoxID=0;
	long lSMSCount=0;
	long lSize=0;
	CString strID;
	CString strCreateTime;
	CString strUserCount;
	CString strTitle;
	CString strSize;
	COleDateTime tTimer;
	CString strTimer;
	if ( b && m_AdoRS.GetRecordCount() )
	{
		m_AdoRS.MoveFirst();
		while( !m_AdoRS.IsEOF() )
		{
			m_AdoRS.GetCollect( _T("BoxID") , lBoxID );
			m_AdoRS.GetCollect( _T("CreateTime") , ot ); ot.GetAsSystemTime(t);
			lSize=0;
			strTitle=CString(_T(""));
			m_AdoRS.GetCollect( _T("mmSize") , lSize );strSize.Format(_T("%6.1fk") , (double)lSize/1024.0f);
			m_AdoRS.GetCollect( _T("Title") , strTitle );
			m_AdoRS.GetCollect(_T("Timer"), tTimer);

			//ȡ��¼����
			lSMSCount = 0;
			_stprintf( szSelect , _T("select Count(*) from mmsitem where BoxID=%d") , lBoxID );
			BOOL b2 = AdoRS.Open(szSelect);
			if ( b2 && AdoRS.GetRecordCount() )
			{
				AdoRS.MoveFirst();
				long lIndex = 0;
				AdoRS.GetCollect( lIndex , lSMSCount );
			}

			strID.Format( _T("%d") , lCount+1 );
			strCreateTime.Format(_T("%04d.%02d.%02d %02d:%02d") , t.wYear,t.wMonth,t.wDay,t.wHour,t.wMinute);
			strUserCount.Format(_T("%d"),lSMSCount);
			strTimer = _T("");
			if (tTimer.GetStatus() == COleDateTime::valid)
			{
				strTimer.Format(_T("%04d.%02d.%02d %02d:%02d"), tTimer.GetYear(), tTimer.GetMonth(), tTimer.GetDay(), tTimer.GetHour(), tTimer.GetMinute());
			}
			m_wndList.InsertItemAndCol(0,strID,strCreateTime,strUserCount,strSize, strTimer,strTitle);
			m_wndList.SetItemData(0,lBoxID);
		
			lCount++;
			m_AdoRS.MoveNext();
		}
	}
	m_wndList.ShowWindow( SW_SHOW );  //Ϊ�˼ӿ���ʾ�ٶ�
	return true;
}

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

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

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

void CFMmsYF::ShowRMenu()
{
	CMenu menu;
	menu.CreatePopupMenu();
	BOOL bLock = false;
	long lItem = this->GetCurrentSelected();

	menu.AppendMenu(MF_STRING     , MENU_YF_ADD, _T(" �½��б� ") );

	if ( lItem >= 0 )
	{
		menu.AppendMenu(MF_STRING     , MENU_YF_SEE, _T(" �� �� ") );
		menu.AppendMenu(MF_STRING     , MENU_YF_RESEND, _T(" �ٴη��� ") );
		menu.AppendMenu(MF_STRING     , MENU_YF_DEL, _T(" ɾ �� ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_YF_SEE, _T(" �� �� ") );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_YF_RESEND, _T(" �ٴη��� ") );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_YF_DEL, _T(" ɾ �� ") );
	}
	menu.AppendMenu(MF_SEPARATOR );

	//ˢ��
	menu.AppendMenu(MF_STRING     , MENU_YF_EXPORT, _T(" ����... ") );
	menu.AppendMenu(MF_STRING     , MENU_YF_FIND , _T(" ����... ") );
	menu.AppendMenu(MF_SEPARATOR );
	//ˢ��
	menu.AppendMenu(MF_STRING     , MENU_YF_REFRESH, _T(" ˢ �� ") );

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

long CFMmsYF::GetCurrentSelected()
{
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	if ( pos )
	{
		return m_wndList.GetNextSelectedItem(pos);
	}
	return -1;
}
void CFMmsYF::On_User_Add()
{
	m_pMainFrame->m_pFuncView->On_User_List_Add_Mms();
}
void CFMmsYF::On_User_See()
{
	long lItem = GetCurrentSelected();
	if ( lItem < 0 )
		return ;
	long lBoxID = m_wndList.GetItemData( lItem );
	if ( lBoxID <= 0 )
		return ;
	m_pMainFrame->m_pFuncView->On_User_List_Read_Mms( lBoxID );
}
void CFMmsYF::On_User_ReSend()
{
	long lItem = GetCurrentSelected();
	if ( lItem < 0 )
		return ;
	long lBoxID = m_wndList.GetItemData( lItem );
	if ( lBoxID <= 0 )
		return ;
	m_pMainFrame->m_pFuncView->On_User_List_ReSend_Mms( lBoxID );
}
void CFMmsYF::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 ++;
	}
	//��תɾ��
	m_wndList.ShowWindow( SW_HIDE );  //�ӿ���ʾ���ٶ�
	for ( i = lCount ; i>0 ; i-- )
	{
		long lBoxID = m_wndList.GetItemData( lDel[i-1] );
		if ( lBoxID <= 0 )
			continue ;
		
		if ( m_pMainFrame->m_pFuncView->m_DLGSendMms.GetBoxID() == lBoxID )
		{
			long lRet = MessageBox( _T("Ҫɾ�����б����б༭���Ƿ�ȷʵɾ����") , _T("����") , MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2);
			if ( lRet != IDYES )
				continue ;
			
			if ( !m_pMainFrame->m_pFuncView->m_DLGSendMms.List_Save() )
				continue;
			if ( !m_pMainFrame->m_pFuncView->m_DLGSendMms.List_New() )
				continue;
		}
		
		TCHAR szSelect[128]={0};
		_stprintf( szSelect , _T("delete from mmsbox where BoxID=%d") , lBoxID );  //��ɾ��smsBox
		BOOL b = m_AdoRS.Open( szSelect );
		_stprintf( szSelect , _T("delete from mmsitem where BoxID=%d") , lBoxID );//��ɾ��BoxItem
		b = m_AdoRS.Open( szSelect );
		m_wndList.DeleteItem( lDel[i-1] ); //ɾ��List�е�Item

	}
	m_wndList.ShowWindow( SW_SHOW );  //�ӿ���ʾ���ٶ�
	delete lDel;
}
void CFMmsYF::On_User_Refresh()
{
	RefreshInfo();
}
void CFMmsYF::On_User_Find()
{
	CString strTemp;
	DLG_Find_SmsBox dlg(this);
	dlg.SetParam( !m_bShowToday );
	if ( dlg.DoModal() == IDOK )
	{
		m_strFindAdd = _T("");

		if ( !m_bShowToday )
		{
			strTemp.Format( _T(" AND CreateTime>=#%04d-%02d-%02d# AND CreateTime<=#%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_strMsg.GetLength()>0 )
		{
			strTemp.Format( _T(" AND Msg like '%%%s%%'"),dlg.m_strMsg );
			m_strFindAdd += strTemp;
		}
		On_User_Refresh();

		m_strFindAdd = _T("");  //ˢ�º󣬲�ѯ����
	}
}
void CFMmsYF::On_User_Export()
{
	DLG_SmsList_Export dlg(this);
	dlg.SetParam(&m_AdoRS2,&m_wndList,0);
	dlg.DoModal();
}
void CFMmsYF::OnKeydownSmsyfList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
	*pResult = 0;

	if ( pLVKeyDow->wVKey == VK_DELETE )
	{
		On_User_Del();
	}
	if ( pLVKeyDow->wVKey == VK_INSERT)
	{
		On_User_Add();
	}
	if ( pLVKeyDow->wVKey == VK_SPACE)
	{
		On_User_See();
	}
	if ( pLVKeyDow->wVKey == 'S' || pLVKeyDow->wVKey == 's')
	{
		On_User_ReSend();
	}
	if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r')
	{
		On_User_Refresh();
	}
	if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a')
	{
		m_wndList.SelectAllItems();
	}
	if ( pLVKeyDow->wVKey == 'F' || pLVKeyDow->wVKey == 'f')
	{
		On_User_Find();
	}


}

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

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

BOOL CFMmsYF::SetToday(BOOL bToday)
{
	if ( m_bShowToday != bToday )
	{
		m_bShowToday = bToday;
		m_bRefresh = false;
	}
	return m_bShowToday;
}