// TabDlg.cpp : implementation file
//

#include "stdafx.h"
#include "smsmanager.h"
#include "TabDlg.h"

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

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

CTabDlg::CTabDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTabDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTabDlg)
	m_lCorp = -1;
	m_tBegin = COleDateTime::GetCurrentTime();
	m_tEnd = COleDateTime::GetCurrentTime();
	m_lMobileType = -1;
	m_bOld = FALSE;
	//}}AFX_DATA_INIT
	m_bInit = false;
	m_bRefresh = false;
	m_bQueryAll = false;

	m_lQueryCurCorpID = 0;

	lSmsCount=0;
	lSmsCountIndex=0;
	lMmsSmsCount=0;
	lMmsSmsCountIndex=0;
}


void CTabDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTabDlg)
	DDX_Control(pDX, IDC_TAB_CORPID, m_E_CorpID);
	DDX_Control(pDX, IDC_TAB_OLD, m_B_Old);
	DDX_Control(pDX, IDC_TAB_CORP, m_L_Corp);
	DDX_Control(pDX, IDC_TAB_S1, m_S_S1);
	DDX_Control(pDX, IDC_TAB_LIST, m_wndList);
	DDX_CBIndex(pDX, IDC_TAB_CORP, m_lCorp);
	DDX_DateTimeCtrl(pDX, IDC_TAB_TBEGIN, m_tBegin);
	DDX_DateTimeCtrl(pDX, IDC_TAB_TEND, m_tEnd);
	DDX_CBIndex(pDX, IDC_TAB_MOBILETYPE, m_lMobileType);
	DDX_Check(pDX, IDC_TAB_OLD, m_bOld);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTabDlg, CDialog)
	//{{AFX_MSG_MAP(CTabDlg)
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_TAB_QUERY, OnTabQuery)
	ON_BN_CLICKED(IDC_TAB_OLD, OnTabOld)
	ON_BN_CLICKED(IDC_TAB_QUERY2, OnTabQuery2)
	ON_NOTIFY(NM_RCLICK, IDC_TAB_LIST, OnRclickTabList)
	//}}AFX_MSG_MAP
	ON_COMMAND(MENU_TAB_COPY , On_User_Copy )
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTabDlg message handlers

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

BOOL CTabDlg::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;

	//��ʼ��List
	m_Image.Create(16,16,ILC_COLOR16|ILC_MASK,5,5);
//	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_TAB) );
	m_wndList.SubClassWindow2();
	m_wndList.SetHeadings(_T("���,50;��ҵID,80;��ҵ����,250; ��������,100;��������,100;"));
	m_wndList.SetGridLines(true);
	m_wndList.SetImageList(&m_Image,LVSIL_SMALL);

	m_bInit = true;

/*
	//Ĭ��ȡ���µ�����
	SYSTEMTIME t; ::GetLocalTime(&t);
	t.wDay = 1;//��1����
	t.wMonth = t.wMonth-1;
	if ( t.wMonth <=0 )
	{
		t.wMonth = 12;
		t.wYear  = t.wYear-1;
	}
	m_tBegin.SetDate( t.wYear,t.wMonth,t.wDay );  //��ʼ
	if ( t.wMonth == 1 ||
		 t.wMonth == 3 ||
		 t.wMonth == 5 ||
		 t.wMonth == 7 ||
		 t.wMonth == 8 ||
		 t.wMonth == 10 ||
		 t.wMonth == 12 )
	{
		 t.wDay = 31;
	}
	else
		if (t.wMonth == 2 )
			t.wDay = 28;
		else
			t.wDay = 30;
	m_tEnd.SetDate( t.wYear,t.wMonth,t.wDay );//����
*/
	COleDateTime t = COleDateTime::GetCurrentTime();
	COleDateTimeSpan tSpan2(1,0,0,0);
	t = t-tSpan2;
	m_tBegin.SetDate( t.GetYear(),t.GetMonth(),1 );  //��ʼ
	m_tEnd.SetDate( t.GetYear(),t.GetMonth(),t.GetDay() );//����

	m_lMobileType = 0;  //Ĭ�ϲ鿴�����ֻ�����

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

void CTabDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	if ( m_bInit )
	{
		CRect rect;
		m_S_S1.GetWindowRect(&rect);
		m_wndList.MoveWindow( 0 , 0+rect.Height()+5 , cx,cy-rect.Height()-5);
	}	
}

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

BOOL CTabDlg::RefreshInfo()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_TAB) )
	{
		return false;
	}
	m_pMainFrame->SendFrame(SMSFUNC_CORP_NAME,NULL,0);

	return true;
}

BOOL CTabDlg::ProcessSocket(Socket_Head *pHead)
{
	CString strTemp;
	//ȡ������Ϣ
	if (pHead->lFuncType == SMSFUNC_CORP_NAME)
	{
		m_bRefresh = true;  //�Ѿ�ˢ�¹�
		ANS_Corp_Name     * pCorp = (ANS_Corp_Name *)pHead->pFrame;
		ANS_Corp_NameData * pData = (ANS_Corp_NameData *)(pHead->pFrame+sizeof(ANS_Corp_Name));
		m_L_Corp.ResetContent();  //ɾ��ԭ���е���ҵ
		m_L_Corp.AddString(_T("������ҵ"));
		m_L_Corp.SetItemData(0,-1);

		//m_L_Corp.AddString( _T("������ҵ") );
		this->Close();              //�ر�ԭ����
		for ( int i=0;i<pCorp->lCount;i++ )
		{
			//if ( pData->lAgentID == m_pMainFrame->m_lUserID &&
			//	 pData->bAgentModify ) //���ҵ���ҵ
			BOOL bShow = false;
#ifdef MANAGER_VER_YWY
			if ( pData->lYWYID == m_pMainFrame->m_lUserID )
			{
				bShow = true;
			}
#else
			if ( pData->lAgentID == m_pMainFrame->m_lUserID ) //���ҵ���ҵ
			{
				bShow = true;
			}

#endif
			if ( bShow )
			{
				ANS_Corp_NameData * pNewData = new ANS_Corp_NameData;
				*pNewData = *pData;
				POSITION pos = m_Corp.AddTail(pNewData);
				strTemp.Format( _T("%d-%s"),pData->lCorpID,pData->szCorpName);
				long lItem = m_L_Corp.AddString( strTemp );
				m_L_Corp.SetItemData( lItem , (DWORD)pos);
			}
			pData ++;
		}

		if ( m_L_Corp.GetCount()>1 )
			m_L_Corp.SetCurSel(1);

		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_TAB )
	{
		ANS_Tab     * pTab  = (ANS_Tab *)pHead->pFrame;
		ANS_TabData * pData = (ANS_TabData *)(pHead->pFrame+sizeof(ANS_Tab));
		TCHAR Buf[32];
		long lCount;
		if ( m_bQueryAll )
		{
			//_T("���,50;��ҵID,80;��ҵ����,150; ��������,100;��������,100;"));
			lCount = m_wndList.GetItemCount();
			m_wndList.InsertItem( lCount , _itot(lCount+1,Buf,10),0);  //���
			_stprintf(Buf , _T("%d") , m_lCurCorpID);
			m_wndList.SetItemText(lCount,1,Buf);
			m_wndList.SetItemText(lCount,2,m_strCurName);

			long lSendCount=0;
			long lRecvCount=0;
			for ( int i=0;i<pTab->lCount;i++)
			{
				switch( pData->lSmsType )
				{
				case SMSTYPE_RECV:
					 lRecvCount += pData->lCount;
					 break;
				default:
					 lSendCount += pData->lSFCount;
					 break;
				}
				pData++;
			}
			m_lAllSend   +=lSendCount;
			m_lAllRecv   +=lRecvCount;

			m_wndList.SetItemText( lCount ,3 , _itot(lSendCount,Buf,10));  //����
			m_wndList.SetItemText( lCount ,4 , _itot(lRecvCount,Buf,10));  //����
			QueryNext();
		}
		else
		{
			long lSmsCount = 0;
			long lSmsSFCount=0;
			for ( int i=0;i<pTab->lCount;i++)
			{
				lCount = m_wndList.GetItemCount();
				m_wndList.InsertItem( lCount , _itot(i+1,Buf,10),0);  //���
				_tcscpy( Buf , _T("δ֪") );
				switch( pData->lSmsType )
				{
				case SMSTYPE_SEND:
					_tcscpy(Buf , _T("�� ��") );
					break;
				case SMSTYPE_ZF:
					_tcscpy(Buf , _T("ת ��") );
					break;
				case SMSTYPE_ALARM:
					_tcscpy(Buf , _T("�ճ�����") );
					break;
				case SMSTYPE_EMAIL:
					_tcscpy(Buf , _T("�����ʲ�") );
					break;
				case SMSTYPE_RECV:
					_tcscpy(Buf , _T("�� ��") );
					break;
				case SMSTYPE_SP:
					_tcscpy(Buf , _T("���ֶ���") );
					break;
				case SMSTYPE_SWT:
					_tcscpy(Buf , _T("��������ͨ") );
					break;
#ifdef SMSCENTER_ADC
				case SMSTYPE_ADC:
					_tcscpy(Buf , _T("ADCҵ��") );
					break;
#endif
				}
				m_wndList.SetItemText( lCount ,1 , Buf );            //����
				m_wndList.SetItemText( lCount ,2 , _itot(pData->lCount,Buf,10));  //����
				m_wndList.SetItemText( lCount ,3 , _itot(pData->lSFCount,Buf,10));  //����
				lSmsCount += pData->lCount;
				lSmsSFCount += pData->lSFCount;
				pData++;
			}
			lCount = m_wndList.GetItemCount();
			m_wndList.InsertItem( lCount , _T(""),0);  //�ϼ�
			m_wndList.SetItemText( lCount,1, _T("�� ��"));  //�ϼ�
			m_wndList.SetItemText( lCount,2, _itot(lSmsCount,Buf,10));  //�ϼ�
			m_wndList.SetItemText( lCount,3, _itot(lSmsSFCount,Buf,10));  //�ϼ�
		}


		return true;
	}
	return false;
}

void CTabDlg::Close()
{
	//������������
	while (!m_Corp.IsEmpty())
	{
		ANS_Corp_NameData * pData = m_Corp.GetHead();
		m_Corp.RemoveHead();
		delete pData;
	}
}

BOOL CTabDlg::SetRefresh(BOOL bRefresh)
{
	m_bRefresh = bRefresh;
	return m_bRefresh;
}


void CTabDlg::OnTabQuery() 
{
	UpdateData(true);
	if ( m_tEnd < m_tBegin )
	{
		MessageBox( _T("��ѯ�������ڲ���С����ʼ���ڣ������!") , _T("����") , MB_ICONWARNING );
		return ;
	}
	/*
	COleDateTime tNow = COleDateTime::GetCurrentTime();
	COleDateTimeSpan tSpan2(3,0,0,0);
	if ( tNow - m_tEnd < tSpan2 )
	{
		MessageBox( _T("��Ϊ״̬����ظ�ʱ�����ӳ٣��ʵ�ֻ�ܲ�ѯ��ǰ����ģ�") ,_T("��ʾ"), MB_ICONWARNING);
		return ;
	}
	*/
	if ( COleDateTime::GetCurrentTime() - m_tBegin > COleDateTimeSpan(400,0,0,0) )
	{
		MessageBox( _T("��ѯ���ڿ�Ȳ��ܴ���13���£������!") , _T("����") , MB_ICONWARNING );
		return ;
	}
	if ( m_tEnd - m_tBegin > COleDateTimeSpan(400,0,0,0) )
	{
		MessageBox( _T("��ѯ���ڿ�Ȳ��ܴ���13���£������!") , _T("����") , MB_ICONWARNING );
		return ;
	}

	if ( m_lCorp < 0 )
	{
		MessageBox( _T("û�пɹ���ѯ����ҵ�������!") , _T("����") , MB_ICONWARNING );
		return ;
	}

	lSmsCount=0;
	lSmsCountIndex=0;

	lMmsSmsCount=0;
	lMmsSmsCountIndex=0;

	m_tBegin.GetAsSystemTime(m_tQueryBegin);
	m_tEnd.GetAsSystemTime(m_tQueryEnd);
	m_tQueryEnd.wHour=23;
	m_tQueryEnd.wMinute=59;
	m_tQueryEnd.wSecond=59;

	POSITION pos = (POSITION)m_L_Corp.GetItemData(m_lCorp);
	if ( (long)pos == -1 ) //��ѯ������ҵ
	{
		m_wndList.DeleteAllItems();
		m_wndList.DeleteAllColumns();
		m_wndList.SetHeadings(_T("���,50;��ҵID,80;��ҵ����,250; ��������,100;��������,100;"));

		m_bQueryAll = true;
		m_lAllSend = 0;
		m_lAllRecv = 0;
		m_lQueryCurCorpID=0;
		QueryNext();
	}
	else
	{
		m_wndList.DeleteAllItems();
		m_wndList.DeleteAllColumns();
		m_wndList.SetHeadings(_T("���,50;��ҵID,80;��ҵ����,250; ��������,100;��������,100;"));
		//m_wndList.SetHeadings(_T("���,50; ��������,100;��������,100;�Ʒ�����,100;"));

		long lCorpID = 0;
		POSITION pos2 = pos;
		ANS_Corp_NameData * pData = m_Corp.GetNext( pos );
		if (pData)
		{
			lCorpID = pData->lCorpID;
		}
		else
		{
			return;
		}

		m_bQueryAll = false;

		REQ_Bill4 * pBill = new REQ_Bill4;memset(pBill,0,sizeof(REQ_Bill4));
		pBill->lUserID = -1;                //��ѯ�û�ID

		m_tBegin.GetAsSystemTime(pBill->tBegin);
		m_tEnd.GetAsSystemTime(pBill->tEnd);
		pBill->lCorpID = lCorpID;
		pBill->tEnd.wHour=23;
		pBill->tEnd.wMinute=59;
		pBill->tEnd.wSecond=59;
		pBill->bJCB = false;             //����ѯ����
		m_pMainFrame->SendFrame(SMSFUNC_BILL4,(BYTE*)pBill,sizeof(REQ_Bill4));

		/*
		REQ_Tab * pTab = new REQ_Tab;memset(pTab,0,sizeof(REQ_Tab));
		m_tBegin.GetAsSystemTime( pTab->tBegin );
		m_tEnd.GetAsSystemTime( pTab->tEnd );
		pTab->lMobileType = m_lMobileType-1;  //�ֻ�����
		pTab->bOld = m_bOld;            //�Ƿ��ѯ������
		m_pMainFrame->SendFrame(SMSFUNC_TAB,(BYTE*)pTab,sizeof(REQ_Tab));
		m_bQueryAll = false;
		*/
	}
	return ;
}

void CTabDlg::OnTabOld() 
{
	if ( m_B_Old.GetCheck() )
	{
		GetDlgItem(IDC_TAB_MOBILETYPE)->EnableWindow(true);
	}
	else
	{
		GetDlgItem(IDC_TAB_MOBILETYPE)->EnableWindow(false);
	}
	
}

void CTabDlg::OnTabQuery2() 
{
	CString strTemp;
	CString strFind;
	m_E_CorpID.GetWindowText(strFind);
	if ( strFind.GetLength()<=0 )
		return ;
	long lSel   = m_L_Corp.GetCurSel();
	long lCount = m_L_Corp.GetCount();
	for ( int i=lSel+1 ; i<lCount ; i++ )
	{
		m_L_Corp.GetLBText(i,strTemp);
		if ( strTemp.Find(strFind)>=0 )
		{
			m_L_Corp.SetCurSel(i);
			return ;
		}
	}
	for ( i=0 ; i<lSel ; i++ )
	{
		m_L_Corp.GetLBText(i,strTemp);
		if ( strTemp.Find(strFind)>=0 )
		{
			m_L_Corp.SetCurSel(i);
			return ;
		}
	}
}


void CTabDlg::OnRclickTabList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	ShowRMenu();
}

void CTabDlg::ShowRMenu()
{
	if (!m_pMainFrame->GetUserPurview(PURVIEW_TAB,false))  //û�в鿴Ȩ��
		return ;

	CMenu menu;
	menu.CreatePopupMenu();
	//����
	menu.AppendMenu(MF_STRING     , MENU_TAB_COPY, _T(" �������� ") );

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

void CTabDlg::On_User_Copy()
{
	m_wndList.CopyToClipboard();
	MessageBox(_T("�����Ѹ��ƣ������Excelճ����ȥ") , _T("��ʾ") , MB_ICONINFORMATION);
}

void CTabDlg::QueryNext()
{

	if ( m_lQueryCurCorpID>=m_L_Corp.GetCount()-1 )  //��ѯ���
	{
		long lItem=m_wndList.GetItemCount();
		m_wndList.InsertItem(lItem,_T(""),0);
		m_wndList.InsertItem(lItem,_T("�ϼ�"),0);
		CString str;
		str.Format(_T("%d") , lSmsCount );
		m_wndList.SetItemText(lItem,lSmsCountIndex,str);

		str.Format(_T("%d") , lMmsSmsCount );
		m_wndList.SetItemText(lItem,lMmsSmsCountIndex,str);

		return;
	}
	m_lQueryCurCorpID ++ ; 
	m_L_Corp.SetCurSel(m_lQueryCurCorpID);

	POSITION pos = (POSITION)m_L_Corp.GetItemData(m_lQueryCurCorpID);
	POSITION pos2 = pos;
	ANS_Corp_NameData * pData = m_Corp.GetNext( pos );
	if (pData)
	{
		REQ_Bill4 * pBill = new REQ_Bill4;memset(pBill,0,sizeof(REQ_Bill4));
		pBill->lUserID = -1;                //��ѯ�û�ID

		pBill->tBegin = m_tQueryBegin;
		pBill->tEnd = m_tQueryEnd;
		pBill->bJCB = false;

		pBill->lCorpID = pData->lCorpID;
		m_lCurCorpID  = pData->lCorpID;
		m_strCurName  = pData->szCorpName;
		m_pMainFrame->SendFrame(SMSFUNC_BILL4,(BYTE*)pBill,sizeof(REQ_Bill4));
	}
	else
	{
		return;
	}

/*
	long lCur=m_L_Corp.GetCurSel();
	if ( lCur>=m_L_Corp.GetCount()-1 )  //��ѯ���
	{
		TCHAR Buf[32]={0};
		long lCount = m_wndList.GetItemCount();
		m_wndList.InsertItem( lCount , _itot(lCount+1,Buf,10),0);  //���
		_tcscpy(Buf , _T("�� ��"));
		m_wndList.SetItemText(lCount,1,Buf);
		m_wndList.SetItemText( lCount ,3 , _itot(m_lAllSend,Buf,10));  //����
		m_wndList.SetItemText( lCount ,4 , _itot(m_lAllRecv,Buf,10));  //����
	
		return;
	}
	lCur++;
	m_L_Corp.SetCurSel(lCur);
	POSITION pos = (POSITION)m_L_Corp.GetItemData(lCur);
	REQ_Tab * pTab = new REQ_Tab;memset(pTab,0,sizeof(REQ_Tab));
	POSITION pos2 = pos;
	ANS_Corp_NameData * pData = m_Corp.GetNext( pos );
	if (pData)
	{
		pTab->lCorpID = pData->lCorpID;
		m_lCurCorpID  = pData->lCorpID;
		m_strCurName  = pData->szCorpName;
	}
	else
	{
		return;
	}
	m_tBegin.GetAsSystemTime( pTab->tBegin );
	m_tEnd.GetAsSystemTime( pTab->tEnd );
	pTab->lMobileType = m_lMobileType-1;  //�ֻ�����
	pTab->bOld = m_bOld;            //�Ƿ��ѯ������
	m_pMainFrame->SendFrame(SMSFUNC_TAB,(BYTE*)pTab,sizeof(REQ_Tab));
*/
}



BOOL CTabDlg::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame)
{
	CString str;
	if ( pHead->lFuncType == SMSFUNC_BILL4 )
	{
		ANS_Bill4     * pBill = (ANS_Bill4 *)pFrame;
		ANS_BillData4 * pData = (ANS_BillData4 *)(pFrame+sizeof(ANS_Bill4));

		if ( pBill->lCount ==2 )
		{
			long lItem = m_wndList.GetItemCount();
			str.Format(_T("%d") , lItem+1);
			m_wndList.InsertItem(lItem,str,0);
			long lTemp=1;
			str.Format(_T("%d") , pBill->lCorpID);
			m_wndList.SetItemText(lItem,lTemp++,str);
			m_wndList.SetItemText(lItem,lTemp++,pBill->szCorpName);
			str.Format(_T("%d") , pData[0].lSendCount );
			lSmsCount += pData[0].lSendCount;
			lSmsCountIndex = lTemp;
			m_wndList.SetItemText(lItem,lTemp++,str);

			str.Format(_T("%d") , pData[1].lSendCount );
			lMmsSmsCount += pData[1].lSendCount;
			lMmsSmsCountIndex = lTemp;
			m_wndList.SetItemText(lItem,lTemp++,str);
		}
		if ( m_bQueryAll )
			QueryNext();
		return true;
	}
	return false;
}