// C_AgentCJ.cpp : implementation file
//

#include "stdafx.h"
#include "smsmanager.h"
#include "C_AgentCJ.h"

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

/////////////////////////////////////////////////////////////////////////////
// CC_AgentCJ dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_HZB_Export.h"
#include "DLG_Pay_TC.h"
#include "DLG_C_AgentCJ_See.h"
#include "DLG_C_AgentCJ_Pay.h"

CC_AgentCJ::CC_AgentCJ(CWnd* pParent /*=NULL*/)
	: CDialog(CC_AgentCJ::IDD, pParent)
{
	//{{AFX_DATA_INIT(CC_AgentCJ)
	m_tBegin = COleDateTime::GetCurrentTime();
	m_tEnd = COleDateTime::GetCurrentTime();
	m_lCJType = -1;
	//}}AFX_DATA_INIT
	m_bInit = false;
	m_bRefresh = false;

	memset(&m_SeeData , 0 , sizeof(m_SeeData));
}


void CC_AgentCJ::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CC_AgentCJ)
	DDX_Control(pDX, IDC_C_AGENTCJ_S1, m_S_S1);
	DDX_Control(pDX, IDC_C_AGENTCJ_LIST, m_wndList);
	DDX_Control(pDX, IDC_C_AGENTCJ_AGENTID, m_E_AgentID);
	DDX_Control(pDX, IDC_C_AGENTCJ_AGENT, m_L_Agent);
	DDX_DateTimeCtrl(pDX, IDC_C_AGENTCJ_TBEGIN, m_tBegin);
	DDX_DateTimeCtrl(pDX, IDC_C_AGENTCJ_TEND, m_tEnd);
	DDX_CBIndex(pDX, IDC_C_AGENTCJ_TYPE, m_lCJType);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CC_AgentCJ, CDialog)
	//{{AFX_MSG_MAP(CC_AgentCJ)
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_C_AGENTCJ_QUERY3, OnCAgentpayQuery3)
	ON_BN_CLICKED(IDC_C_AGENTCJ_QUERY, OnCAgentpayQuery)
	ON_NOTIFY(NM_DBLCLK, IDC_C_AGENTCJ_LIST, OnDblclkCAgentpayList)
	ON_NOTIFY(NM_RCLICK, IDC_C_AGENTCJ_LIST, OnRclickCAgentpayList)
	//}}AFX_MSG_MAP
	ON_COMMAND(MENU_AGENTCJ_SEE     , On_User_See )
	ON_COMMAND(MENU_AGENTCJ_YS      , On_User_YS )
	ON_COMMAND(MENU_AGENTCJ_EXPORT  , On_User_Export )

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CC_AgentCJ message handlers

void CC_AgentCJ::Close()
{
	//������������
	while (!m_PayData.IsEmpty())
	{
		ANS_Agent_CJData * pData = m_PayData.GetHead();
		m_PayData.RemoveHead();
		delete pData;
	}

}

BOOL CC_AgentCJ::RefreshInfo()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_TAB) )
	{
		return false;
	}
	m_pMainFrame->SendFrame(SMSFUNC_AGENT_NAME,NULL,0);   //ȡ������Ϣ
	m_pMainFrame->SendFrame(SMSFUNC_YWY_NAME,NULL,0);   //ȡ������Ϣ
	return true;
}

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

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

BOOL CC_AgentCJ::ProcessSocket(Socket_Head *pHead)
{
	CString strTemp;
	//ȡ��������Ϣ
	if (pHead->lFuncType == SMSFUNC_AGENT_NAME)
	{
		ANS_Agent_Name     * pAgent = (ANS_Agent_Name *)pHead->pFrame;
		ANS_Agent_NameData * pData = (ANS_Agent_NameData *)(pHead->pFrame+sizeof(ANS_Agent_Name));
		m_L_Agent.ResetContent();
		long lItem=0;
		CString strTemp;
		lItem = m_L_Agent.AddString( _T("�������") );
		m_L_Agent.SetItemData( lItem , (DWORD_PTR)-10);
		for ( int i=0;i<pAgent->lCount;i++ )
		{
			//ANS_Agent_NameData * pNewData = new ANS_Agent_NameData;
			//*pNewData = *pData;
			//pos = m_Agent.AddTail(pNewData);

			strTemp.Format( _T("%d-%s"),pData->lAgentID,pData->szAgentName);
			lItem = m_L_Agent.AddString( strTemp );
			//m_L_Agent.SetItemData( lItem , (DWORD_PTR)pos);
			m_L_Agent.SetItemData( lItem , (DWORD_PTR)pData->lAgentID);

			pData ++;
		}
		m_L_Agent.SetCurSel(0);
		return true;
	}

	if(pHead->lFuncType == SMSFUNC_AGENT_CJ )
	{
		ANS_Agent_CJ     * pPay = (ANS_Agent_CJ *)pHead->pFrame;
		ANS_Agent_CJData * pData= (ANS_Agent_CJData *)(pHead->pFrame+sizeof(ANS_Agent_CJ));
		Close();
		
		for ( int i=0 ; i<pPay->lCount ; i++ )
		{
			ANS_Agent_CJData * pNewData = new ANS_Agent_CJData;
			*pNewData = *pData;
			POSITION pos = m_PayData.AddTail(pNewData);

			pData ++;
		}
		RefreshAgentCJData();
		return true;
	}
	if(pHead->lFuncType == SMSFUNC_AGENT_TC )
	{
		ANS_Agent_TC     * pPay = (ANS_Agent_TC *)pHead->pFrame;
		ANS_Agent_TCData * pData= (ANS_Agent_TCData *)(pHead->pFrame+sizeof(ANS_Agent_TC));

		DLG_C_AgentCJ_See dlg(this);
		dlg.SetParam(&m_SeeData , pPay , pData );
		dlg.DoModal();
		return true;
	}
	if(pHead->lFuncType == SMSFUNC_AGENT_CJFF )
	{
		ANS_Agent_CJFF     * pPay = (ANS_Agent_CJFF *)pHead->pFrame;
		ANS_Agent_CJFFData * pData= (ANS_Agent_CJFFData *)(pHead->pFrame+sizeof(ANS_Agent_CJFF));

		for ( int i=0 ; i< pPay->lCount ; i++ )
		{
			m_wndList.SetItemText( pData->lItem , 5 , _T(" �Ѹ�") );

			pData ++;
		}
		CString str;
		str.Format( _T("֧���������ɹ���������%d����¼��") , pPay->lCount );
		MessageBox( str , _T("��Ϣ") , MB_ICONINFORMATION );
		return true;
	}

	

	
	return false;
}

BOOL CC_AgentCJ::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_LIST) );
	m_wndList.SubClassWindow2();
	m_wndList.SetHeadings(_T("���,50;    ��������,200; ����·�,80;�����,80;������,80;�Ƿ�֧��,80; ֧��ʱ��,120;������,80; ��ע,120;"));
	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 );//����
	*/

	SYSTEMTIME t; ::GetLocalTime(&t);
	m_tBegin.SetDate( t.wYear,t.wMonth,1 );  //��ʼ
	m_tEnd.SetDate( t.wYear,t.wMonth,t.wDay );//����

	m_lCJType = 0;

	UpdateData(false);

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

void CC_AgentCJ::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);
	}	
}

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

BOOL CC_AgentCJ::PreTranslateMessage(MSG* pMsg) 
{
	if ( pMsg->hwnd == m_E_AgentID && pMsg->message == WM_KEYDOWN )
	{
		if ( pMsg->wParam == 13 ) //�س���
		{
			this->OnCAgentpayQuery3();
			return true;
		}
	}
	
	return CDialog::PreTranslateMessage(pMsg);
}

void CC_AgentCJ::OnCAgentpayQuery() 
{
	UpdateData(true);
	if ( m_tEnd < m_tBegin )
	{
		MessageBox( _T("��ѯ�������ڲ���С����ʼ���ڣ������!") , _T("����") , MB_ICONWARNING );
		return ;
	}

	REQ_Agent_CJ * pCJ = new REQ_Agent_CJ;memset(pCJ,0,sizeof(REQ_Agent_CJ));

	//������
	pCJ->lAgentID = m_L_Agent.GetItemData(m_L_Agent.GetCurSel());
	if (pCJ->lAgentID<=0 )  //ѡ�����д����� 
		pCJ->lAgentID = -1;


	m_tBegin.GetAsSystemTime( pCJ->tBegin );
	m_tEnd.GetAsSystemTime( pCJ->tEnd );
	pCJ->lType = m_lCJType; 
	m_pMainFrame->SendFrame(SMSFUNC_AGENT_CJ,(BYTE*)pCJ,sizeof(REQ_Agent_CJ));

}

void CC_AgentCJ::RefreshAgentCJData()
{
	long lAgentID = -10;  //��ʾ���е�
	m_wndList.ShowWindow(SW_HIDE);
	m_wndList.DeleteAllItems(); //ɾ��ԭ�е�����
	
	POSITION pos = m_PayData.GetHeadPosition();
	POSITION pos2=0;
	int i=0;
	TCHAR Buf[128]={0};
	double fTotal=0;
	long lCount=0;
	while ( pos )
	{
		pos2 = pos;
		ANS_Agent_CJData * pData = m_PayData.GetNext(pos);
		if ( pData )
		{
			/*
			if ( (lAgentID == -10) ||
				 (lAgentID == -11 && pData->lAgentID <=0 ) ||
				 (lAgentID == -12 && pData->lAgentID >0 ) ||
				 (lAgentID == pData->lAgentID ) )
			*/
			{
				//m_wndList.SetHeadings(_T("���,50;    ��������,200; ����·�,80;�����,80;������,80;�Ƿ�֧��,80; ֧��ʱ��,120; ��ע,120;"));

				_stprintf( Buf , _T("%d") , i+1 );
				m_wndList.InsertItem( i , Buf , 0 );   //ItemΪ0��ԭ���ǵ�ת��ʾ
				//_stprintf( Buf , _T("%d-%s"),pData->lAgentID,pData->szAgentName);
				m_wndList.SetItemText( i , 1 , pData->szAgentName);
				_stprintf( Buf , _T("%04d-%02d") , pData->tCJTime.wYear , pData->tCJTime.wMonth );
				m_wndList.SetItemText( i , 2 , Buf );
				_stprintf( Buf , _T("%8.2f") , pData->fCJTotal);
				m_wndList.SetItemText( i , 3 , Buf );
				_stprintf( Buf , _T("%7d") , pData->lCJCount );
				m_wndList.SetItemText( i , 4 , Buf );
				if ( pData->lCJType==1 )
					m_wndList.SetItemText( i , 5 , _T(" �Ѹ�") );
				else
					m_wndList.SetItemText( i , 5 , _T(" �") );

				_stprintf( Buf , _T("%04d.%02d.%02d") , pData->lCJFFTime.wYear,pData->lCJFFTime.wMonth,pData->lCJFFTime.wDay);
				m_wndList.SetItemText( i , 6 , Buf );
				m_wndList.SetItemText( i , 7 , pData->szCJFFUser );
				m_wndList.SetItemText( i , 8 , pData->szBZ );

				m_wndList.SetItemData(i , (DWORD_PTR)pos2 );

				fTotal += pData->fCJTotal;
				lCount += pData->lCJCount;

				i++;
			}
		}
	}



		m_wndList.InsertItem(i,_T(""),0 );
		i++;
		m_wndList.InsertItem(i,_T("�ϼ�"),0 );
		_stprintf( Buf , _T("%8.2f") , fTotal );
		m_wndList.SetItemText( i , 3 , Buf );
		_stprintf( Buf , _T("%8d") , lCount);
		m_wndList.SetItemText( i , 4 , Buf );

	m_wndList.ShowWindow(SW_SHOW);
}

void CC_AgentCJ::OnDblclkCAgentpayList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	On_User_See();
}

void CC_AgentCJ::OnRclickCAgentpayList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	ShowRMenu();
}

void CC_AgentCJ::ShowRMenu()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_TAB) )
	{
		return ;
	}

	CMenu menu;
	menu.CreatePopupMenu();
	BOOL bLock = false;
	ANS_Agent_CJData * pData = NULL;
	long lItem = this->GetCurrentSelected();
	if ( lItem>=0 )
	{
		POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
		pData = m_PayData.GetNext( pos );
	}
	//����
	if ( lItem>=0 )
	{
		menu.AppendMenu(MF_STRING     , MENU_AGENTCJ_SEE    , _T(" �� �� ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_AGENTCJ_SEE    , _T(" �� �� ") );
	}
	menu.AppendMenu(MF_SEPARATOR );
	if ( lItem>=0 && pData && pData->lCJType==0)
	{
		menu.AppendMenu(MF_STRING     , MENU_AGENTCJ_YS    , _T(" ֧����� ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_AGENTCJ_YS    , _T(" ֧����� ") );
	}
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING     , MENU_AGENTCJ_EXPORT    , _T(" �� �� ") );
	//��ʾ�˵�
	POINT pt ;
	::GetCursorPos( &pt );
	//this->ClientToScreen( &pt);
	menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
	menu.DestroyMenu();
}

long CC_AgentCJ::GetCurrentSelected()
{
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	if ( pos )
	{
		return m_wndList.GetNextSelectedItem(pos);
	}
	return -1;
}
void CC_AgentCJ::On_User_See()
{
	long lItem = GetCurrentSelected();
	if ( lItem < 0 )
		return ;
	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	ANS_Agent_CJData * pData = m_PayData.GetNext( pos );
	if (pData)
	{
		m_SeeData = *pData;

		REQ_Agent_TC * pTC = new REQ_Agent_TC;memset(pTC,0,sizeof(REQ_Agent_TC));
		
		//������
		pTC->lAgentID = m_SeeData.lAgentID;
		pTC->tProcessTime=m_SeeData.tCJTime;

		m_pMainFrame->SendFrame(SMSFUNC_AGENT_TC,(BYTE*)pTC,sizeof(REQ_Agent_TC));
	}

}
void CC_AgentCJ::On_User_YS()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_TAB) )
	{
		return ;
	}
	long lItem = this->GetCurrentSelected();
	if ( lItem <0 )
		return ;

	DLG_C_AgentCJ_Pay dlg(this);
	if ( dlg.DoModal() != IDOK )
		return ;

	long lCount = m_wndList.GetItemCount();
	ANS_Agent_CJFFData * pData = new ANS_Agent_CJFFData[lCount];
	memset(pData , 0 , sizeof(ANS_Agent_CJFFData)*lCount );
	long lDataCount=0;

	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	ANS_Agent_CJData * pCJData2;
	POSITION pos2;
	while(pos)
	{
		long lItem   = m_wndList.GetNextSelectedItem(pos);
		pos2  = (POSITION)m_wndList.GetItemData(lItem);
		pCJData2      = m_PayData.GetNext(pos2);  //ȡ���б��е�pos
		if ( pCJData2->lCJType==0 )
		{
			pData[lDataCount].lItem = lItem;
			pData[lDataCount].lCJID = pCJData2->lCJID;
			pData[lDataCount].lAgentID=pCJData2->lAgentID;
			lDataCount++;
		}
	}

	if ( lDataCount >0 )
	{
		long lSize = sizeof(REQ_Agent_CJFF) + sizeof(ANS_Agent_CJFFData)*lDataCount ;
		BYTE * pSendData = new BYTE[lSize];
		memset(pSendData,0,lSize);

		REQ_Agent_CJFF * pCJFF = (REQ_Agent_CJFF*)pSendData;
		ANS_Agent_CJFFData * pCJFFData = (ANS_Agent_CJFFData*)(pSendData+sizeof(REQ_Agent_CJFF));
		pCJFF->lCount = lDataCount;
		dlg.m_tTime.GetAsSystemTime(pCJFF->tTime);
		_tcscpy(pCJFF->szBZ , dlg.m_strBZ );

		memcpy(pCJFFData , pData , sizeof(ANS_Agent_CJFFData)*lDataCount );

		m_pMainFrame->SendFrame( SMSFUNC_AGENT_CJFF , (BYTE*)pSendData , lSize);
	}

	delete pData;

}
void CC_AgentCJ::On_User_Export()
{
	//m_wndList.SetHeadings(_T("���,50;    ��������,200; ����·�,80;�����,80;������,80;�Ƿ�֧��,80; ֧��ʱ��,120;������,80; ��ע,120;"));

	SortItem item[32]={0};
	_tcscpy(item[0].szItem,_T("��������"));
	_tcscpy(item[1].szItem,_T("����·�"));
	_tcscpy(item[2].szItem,_T("�����"));
	_tcscpy(item[3].szItem,_T("������"));
	_tcscpy(item[4].szItem,_T("�Ƿ�֧��"));
	_tcscpy(item[5].szItem,_T("֧��ʱ��"));
	_tcscpy(item[6].szItem,_T("������"));
	_tcscpy(item[7].szItem,_T("��ע"));
	DLG_HZB_Export dlg(this);
	dlg.SetParam( &m_wndList );
	dlg.SetListItem(item,8,-3);
	dlg.DoModal();
}