// C_YYSPay.cpp : implementation file
//

#include "stdafx.h"
#include "smsmanager.h"
#include "C_SFQuery.h"

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

/////////////////////////////////////////////////////////////////////////////
// CC_SFQuery dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_Corp_LXR_SF.h"

CC_SFQuery::CC_SFQuery(CWnd* pParent /*=NULL*/)
	: CDialog(CC_SFQuery::IDD, pParent)
{
	//{{AFX_DATA_INIT(CC_SFQuery)
	m_tBegin = COleDateTime::GetCurrentTime();
	m_tEnd = COleDateTime::GetCurrentTime();
	m_lCorp = -1;
	m_lStatus = -1;
	m_lExpressType = -1;
	m_lProductType = -1;
	m_lPayType = -1;
	//}}AFX_DATA_INIT
	m_bInit = false;
	m_bRefresh = false;
	m_pSFDlg = NULL;
}


void CC_SFQuery::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CC_SFQuery)
	DDX_Control(pDX, IDC_C_SFQUERY_CORPID, m_E_CorpID);
	DDX_Control(pDX, IDC_C_SFQUERY_CORP, m_L_Corp);
	DDX_Control(pDX, IDC_C_SFQUERY_S1, m_S_S1);
	DDX_Control(pDX, IDC_C_SFQUERY_LIST, m_wndList);
	DDX_DateTimeCtrl(pDX, IDC_C_SFQUERY_TBEGIN, m_tBegin);
	DDX_DateTimeCtrl(pDX, IDC_C_SFQUERY_TEND, m_tEnd);
	DDX_CBIndex(pDX, IDC_C_SFQUERY_CORP, m_lCorp);
	DDX_CBIndex(pDX, IDC_C_SFQUERY_STATUS, m_lStatus);
	DDX_CBIndex(pDX, IDC_C_SFQUERY_EXPRESSTYPE, m_lExpressType);
	DDX_CBIndex(pDX, IDC_C_SFQUERY_PAYTYPE, m_lPayType);
	DDX_CBIndex(pDX, IDC_C_SFQUERY_PRODUCTTYPE, m_lProductType);
	
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CC_SFQuery, CDialog)
	//{{AFX_MSG_MAP(CC_SFQuery)
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_C_SFQUERY_QUERY, OnCAgentpayQuery)
	ON_NOTIFY(NM_DBLCLK, IDC_C_SFQUERY_LIST, OnDblclkCAgentpayList)
	ON_NOTIFY(NM_RCLICK, IDC_C_SFQUERY_LIST, OnRclickCAgentpayList)
	ON_BN_CLICKED(IDC_C_SFQUERY_QUERY2, OnCPayQuery2)
	ON_CBN_SELCHANGE(IDC_C_SFQUERY_CORP, OnSelchangeCPayCorp)
	//}}AFX_MSG_MAP
	ON_COMMAND(MENU_SFQUERY_COPY, On_User_Copy)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CC_SFQuery message handlers

void CC_SFQuery::Close()
{
	Close_Corp();
	Close_PayData();
}

BOOL CC_SFQuery::RefreshInfo()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_TAB) )
	{
		return false;
	}

#ifndef SMSMANAGER_KF
	//m_pMainFrame->SendFrame(SMSFUNC_CORP_NAME,NULL,0);
#endif
	return true;
}

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

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

BOOL CC_SFQuery::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("������ҵ") );
		this->Close_Corp();              //�ر�ԭ����
		for ( int i=0;i<pCorp->lCount;i++ )
		{
			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_PTR)pos);
			pData ++;
		}
		m_L_Corp.SetCurSel(0);
		return true;
	}


	return false;
}
BOOL CC_SFQuery::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame)
{
	if (pHead->lFuncType == SMSFUNC_CORP_SF_SEE)
	{
		ANS_Corp_SF_See     * pSF = (ANS_Corp_SF_See     *)pFrame;
		ANS_Corp_SFData     * pData = (ANS_Corp_SFData *)(pFrame + sizeof(ANS_Corp_SF_See));
		Close_PayData();
		for (int i = 0; i < pSF->lCount; i++)
		{
			ANS_Corp_SFData * pNewData = new ANS_Corp_SFData;
			*pNewData = *pData;
			POSITION pos = m_SFData.AddTail(pNewData);

			pData++;
		}
		RefreshMonPayData();
		return true;
	}
	if (pHead->lFuncType == SMSFUNC_CORP_SF_ADD ||
		pHead->lFuncType == SMSFUNC_CORP_SF_CANCEL ||
		pHead->lFuncType == SMSFUNC_CORP_SF_ROUTE)
	{

		if (m_pSFDlg)
		{
			m_pSFDlg->ProcessSocket(pHead, pFrame);
		}
		return true;
	}

	return false;
}
BOOL CC_SFQuery::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;��ҵID,80; ״̬,60; �������,80;��Ʒ����,80;���ʽ,80;  �µ�ʱ��,130;�˵���,120;  �ļ�����,120;   ��ַ,350;"));
	m_wndList.SetGridLines(true);
//	m_wndList.SetImageList(&m_Image,LVSIL_SMALL);

	m_bInit = true;


	COleDateTime t = COleDateTime::GetCurrentTime();
	COleDateTime t2 = t - COleDateTimeSpan(10, 0, 0, 0);
	m_tBegin.SetDate(t2.GetYear(), t2.GetMonth(), t2.GetDay());  //��ʼ
	m_tEnd.SetDate(t.GetYear(),t.GetMonth(),t.GetDay());//����

	m_lExpressType = 0;
	m_lProductType = 0;
	m_lStatus = 0;
	m_lPayType = 0;  //Ĭ�ϲ鿴�����ֻ�����

	UpdateData(false);

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

void CC_SFQuery::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 CC_SFQuery::PreTranslateMessage(MSG* pMsg) 
{
	if ( pMsg->hwnd == m_E_CorpID && pMsg->message == WM_KEYDOWN )
	{
		if ( pMsg->wParam == 13 ) //�س���
		{
			this->OnCPayQuery2();
			return true;
		}
	}
	
	return CDialog::PreTranslateMessage(pMsg);
}

void CC_SFQuery::OnCAgentpayQuery() 
{

	UpdateData(true);
	if ( m_tEnd < m_tBegin )
	{
		MessageBox( _T("��ѯ�������ڲ���С����ʼ���ڣ������!") , _T("����") , MB_ICONWARNING );
		return ;
	}
	if (!m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE,false))   //ֻ������ѯ120���ڵ�����
	{
		if (COleDateTime::GetCurrentTime() - m_tBegin>COleDateTimeSpan(90, 0, 0, 0))
		{
			MessageBox(_T("ֻ������ѯ3�����ڵ����ݣ������!"), _T("����"), MB_ICONWARNING);
			return;

		}
	}
	REQ_Corp_SF_See * pSee = new REQ_Corp_SF_See;memset(pSee,0,sizeof(REQ_Corp_SF_See));

	//��ҵ
	if ( m_lCorp <= 0 )  //ѡ��������ҵ
	{
		pSee->lCorpID = -1;
	}
	else
	{
		POSITION pos = (POSITION)m_L_Corp.GetItemData(m_lCorp);
		POSITION pos2 = pos;
		ANS_Corp_NameData * pData = m_Corp.GetNext( pos );
		if (pData)
		{
			pSee->lCorpID = pData->lCorpID;
		}
		else
		{
			return;
		}
	}

	m_tBegin.GetAsSystemTime(pSee->tBegin );
	m_tEnd.GetAsSystemTime(pSee->tEnd );

	pSee->lCorpType = -1;  //�������ִ������û�
	pSee->lExpressType = m_lExpressType;
	pSee->lProductType = m_lProductType;
	pSee->lStatus  = m_lStatus;
	pSee->lSFPayType = m_lPayType;

	m_pMainFrame->SendFrame(SMSFUNC_CORP_SF_SEE,(BYTE*)pSee,sizeof(REQ_Corp_SF_See));

}

void CC_SFQuery::RefreshMonPayData()
{
	long lAgentID = -10;  //��ʾ���е�
	m_wndList.ShowWindow(SW_HIDE);
	m_wndList.DeleteAllItems(); //ɾ��ԭ�е�����
	
	POSITION pos = m_SFData.GetHeadPosition();
	POSITION pos2=0;
	int i=0;
	TCHAR Buf[128]={0};
	CString str;
	while ( pos )
	{
		pos2 = pos;
		ANS_Corp_SFData * pData = m_SFData.GetNext(pos);
		if ( pData )
		{
			//m_wndList.SetHeadings(_T("���,50;��ҵID,60; ״̬,60; �������,60;��Ʒ����,60;���ʽ,60;  �µ�ʱ��,130;�˵���,120;  �ļ�����,120;   ��ַ,250;"));
			_stprintf(Buf, _T("%d"), i + 1);
			m_wndList.InsertItem(i, Buf, 0);
			m_wndList.SetItemData(i, (DWORD_PTR)pos2);
			int iTemp = 1;
			if (pData->lCorpType == 1)
				str.Format(_T("A-%d"), pData->lCorpID);
			else
				str.Format(_T("%d"), pData->lCorpID);
			m_wndList.SetItemText(i, iTemp++, str);

			switch (pData->lStatus)
			{
			case 1:
				m_wndList.SetItemText(i, iTemp++, _T("��ȡ��"));
				break;
			case 2:
				m_wndList.SetItemText(i, iTemp++, _T("���ռ�"));
				break;
			case 3:
				m_wndList.SetItemText(i, iTemp++, _T("��ǩ��"));
				break;
			case 0:
			default:
				m_wndList.SetItemText(i, iTemp++, _T("���µ�"));
				break;
			}

			switch (pData->lExpressType)
			{
			default:
				str = _T("˳����");
				break;
			}
			m_wndList.SetItemText(i, iTemp++, str);

			switch (pData->express_type) //�����Ʒ��������¼�������Ʒ��������ֻ������������˳��Լ������𷽿�ʹ�á�
			{
			case 0:  //˳����
				str = _T("˳����");
				break;
			case 1:  //˳���ػ�
				str = _T("˳���ػ�");
				break;
			case 2:  //˳�ἴ��
				str = _T("˳�ἴ��");
				break;
			case 3:  //˳��γ�
				str = _T("˳��γ�");
				break;
			default:
				str = _T("������Ʒ");
				break;
			}
			m_wndList.SetItemText(i, iTemp++, str);

			switch (pData->pay_method)
			{
			case 0:
				str = _T("�ĸ��½�");
				break;
			case 1:
				str = _T("���");
				break;
			case 2:
				str = _T("�շ���");
				break;
			case 3:
				str = _T("��������");
				break;
			default:
				str = _T("��������");
				break;
			}
			m_wndList.SetItemText(i, iTemp++, str);



			str.Format(_T("%04d.%02d.%02d %02d:%02d"), pData->tCreate.wYear, pData->tCreate.wMonth, pData->tCreate.wDay, pData->tCreate.wHour, pData->tCreate.wMinute);
			m_wndList.SetItemText(i, iTemp++, str);

			m_wndList.SetItemText(i, iTemp++, pData->Res_mailno);
			m_wndList.SetItemText(i, iTemp++, pData->Cargo_name);
			//m_wndList.SetItemText(i, iTemp++, pData->d_contact);
			m_wndList.SetItemText(i, iTemp++, pData->d_address);

			i++;
		}
	}

	m_wndList.ShowWindow(SW_SHOW);
}

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

	On_User_See();
}

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

long CC_SFQuery::GetCurrentSelected()
{
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	if ( pos )
	{
		return m_wndList.GetNextSelectedItem(pos);
	}
	return -1;
}
void CC_SFQuery::On_User_See()
{
	long lItem = this->GetCurrentSelected();
	if ( lItem <0 )
		return ;

	ANS_Corp_SFData * pData = NULL;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	if ( (DWORD_PTR)pos>=0 )
	{
		pData = m_SFData.GetNext( pos );
	}

	if (pData)
	{
		DLG_Corp_LXR_SF dlg(this);
		m_pSFDlg = &dlg;
		//dlg.SetParam(m_See.lYWYCount,m_See.lDefaultYWYID,m_pYWYData,*pData,false);
		dlg.SetParam(0, 0, NULL, *pData, false);
		dlg.DoModal();
		m_pSFDlg = NULL;
	}
}
void CC_SFQuery::Close_PayData()
{
	//������������
	while (!m_SFData.IsEmpty())
	{
		ANS_Corp_SFData * pData = m_SFData.GetHead();
		m_SFData.RemoveHead();
		delete pData;
	}
}

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

void CC_SFQuery::OnCPayQuery2() 
{
	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);
			OnSelchangeCPayCorp();
			return ;
		}
	}
	for ( i=0 ; i<lSel ; i++ )
	{
		m_L_Corp.GetLBText(i,strTemp);
		if ( strTemp.Find(strFind)>=0 )
		{
			m_L_Corp.SetCurSel(i);
			OnSelchangeCPayCorp();
			return ;
		}
	}	
}

void CC_SFQuery::OnSelchangeCPayCorp() 
{
	
}

void CC_SFQuery::ShowRMenu()
{
	CMenu menu;
	menu.CreatePopupMenu();

	menu.AppendMenu(MF_STRING, MENU_SFQUERY_COPY, _T(" �������� "));

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

void CC_SFQuery::On_User_Copy()
{
	m_wndList.CopyToClipboard();
}