// C_PayToUser.cpp : implementation file
//

#include "stdafx.h"
#include "smsmanager.h"
#include "C_PayToUser.h"

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

/////////////////////////////////////////////////////////////////////////////
// CC_PayToUser dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_Corp_PayToUser_Print.h"
#include "DLG_C_PayToUser_See.h"

CC_PayToUser::CC_PayToUser(CWnd* pParent /*=NULL*/)
	: CDialog(CC_PayToUser::IDD, pParent)
{
	//{{AFX_DATA_INIT(CC_PayToUser)
	m_tBegin = COleDateTime::GetCurrentTime();
	m_tEnd = COleDateTime::GetCurrentTime();
	m_strPayID = _T("");
	m_lStatus = -1;
	m_lType = -1;
	m_lUserType = -1;
	//}}AFX_DATA_INIT
	m_bInit = false;
	m_bRefresh = false;

}


void CC_PayToUser::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CC_PayToUser)
	DDX_Control(pDX, IDC_C_PAYTOUSER_PAYID, m_E_PayID);
	DDX_Control(pDX, IDC_C_PAYTOUSER_S1, m_S_S1);
	DDX_Control(pDX, IDC_C_PAYTOUSER_LIST, m_wndList);
	DDX_DateTimeCtrl(pDX, IDC_C_PAYTOUSER_TBEGIN, m_tBegin);
	DDX_DateTimeCtrl(pDX, IDC_C_PAYTOUSER_TEND, m_tEnd);
	DDX_Text(pDX, IDC_C_PAYTOUSER_PAYID, m_strPayID);
	DDX_CBIndex(pDX, IDC_C_PAYTOUSER_STATUS, m_lStatus);
	DDX_CBIndex(pDX, IDC_C_PAYTOUSER_TYPE, m_lType);
	DDX_CBIndex(pDX, IDC_C_PAYTOUSER_USERTYPE, m_lUserType);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CC_PayToUser, CDialog)
	//{{AFX_MSG_MAP(CC_PayToUser)
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_C_PAYTOUSER_QUERY, OnCAgentpayQuery)
	ON_NOTIFY(NM_DBLCLK, IDC_C_PAYTOUSER_LIST, OnDblclkCAgentpayList)
	ON_NOTIFY(NM_RCLICK, IDC_C_PAYTOUSER_LIST, OnRclickCAgentpayList)
	//}}AFX_MSG_MAP
	ON_COMMAND(MENU_PAYTOUSER_SEE     , On_User_See )
	ON_COMMAND(MENU_PAYTOUSER_PZ      , On_User_PZ )
	ON_COMMAND(MENU_PAYTOUSER_FH      , On_User_FH )
	ON_COMMAND(MENU_PAYTOUSER_EXPORT  , On_User_Export )
	ON_COMMAND(MENU_PAYTOUSER_PRINT  , On_User_Print )
	

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CC_PayToUser message handlers

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

}

BOOL CC_PayToUser::RefreshInfo()
{
	return true;
}

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

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

BOOL CC_PayToUser::ProcessSocket(Socket_Head *pHead)
{
	CString strTemp;

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

			pData ++;
		}
		RefreshAgentCJData();
		return true;
	}
	if(pHead->lFuncType == SMSFUNC_PAYTOUSER_SET )
	{
		ANS_PayToUser_Set     * pSet = (ANS_PayToUser_Set *)pHead->pFrame;

		if ( pSet->bOK )
		{
			switch( pSet->lPayStatus )
			{
			case 1:
				 m_wndList.SetItemText(pSet->lItem ,3, _T("����׼") );
				 break;
			case 2:
				 m_wndList.SetItemText(pSet->lItem ,3, _T("�Ѹ���") );
				 break;
			}
			MessageBox(_T("���ĸ���ƾ֤״̬�ɹ���") , _T("��Ϣ") , MB_ICONINFORMATION );
		}
		else
		{
			MessageBox( _T("���ĸ���ƾ֤״̬ʧ�ܣ�") , _T("����") , MB_ICONWARNING );
		}
	}
		
	
	return false;
}

BOOL CC_PayToUser::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;ƾ֤��,60;  ��������,90; ״̬,60;������,80;ʵ�����,80;��ҵ����,180; ID,60;������,80;��������,90;��׼��,80;��׼����,90;֧����,80;֧��ʱ��,90;��ע,150;"));
	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_lStatus=0;
	m_lType = 0;
	m_lUserType=0;

	UpdateData(false);

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

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

void CC_PayToUser::OnCAgentpayQuery() 
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE) )
	{
		return ;
	}

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

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


	pCJ->lPayID = _ttol(m_strPayID);
	pCJ->lPayType = m_lType;
	pCJ->lPayStatus=m_lStatus;
	pCJ->lUserType =m_lUserType;

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

	m_pMainFrame->SendFrame(SMSFUNC_PAYTOUSER_SEE,(BYTE*)pCJ,sizeof(REQ_PayToUser_See));

}

void CC_PayToUser::RefreshAgentCJData()
{
	long lAgentID = -10;  //��ʾ���е�
	m_wndList.ShowWindow(SW_HIDE);
	m_wndList.DeleteAllItems(); //ɾ��ԭ�е�����
	
	POSITION pos = m_PayData.GetHeadPosition();
	POSITION pos2=0;
	CString str;
	int i=0;
	TCHAR Buf[128]={0};
	double fTotal=0;
	double fSFTotal=0;
	long lCount=0;
	long lPrice=0;
	long lSFPrice=0;
	while ( pos )
	{
		pos2 = pos;
		ANS_PayToUserData * pData = m_PayData.GetNext(pos);
		if ( pData )
		{

			//m_wndList.SetHeadings(_T("���,50;ƾ֤��,60;��������,60; ״̬,60;������,80;ʵ�����,1800;��ҵ����,150; ID,60;������,80;��������,80;��׼��,80;��׼����,80;֧����,80;֧��ʱ��,80;��ע,150;"));

			long lTemp=1;
			_stprintf( Buf , _T("%d") , i+1 );
			m_wndList.InsertItem( i , Buf , 0 );
			m_wndList.SetItemData( i , (DWORD)pos2 );    //��Pos
			str.Format( _T("%d") , pData->lPayID ); //ƾ֤��
			m_wndList.SetItemText(i,lTemp++,str);
			if ( pData->lPayType==1 )
			{
				if ( pData->lUserType == 1 )
					m_wndList.SetItemText(i,lTemp++,_T("�������˿�"));
				else
				if ( pData->lUserType == 10 )
					m_wndList.SetItemText(i,lTemp++,_T("ADC�˿�"));
				else
					m_wndList.SetItemText(i,lTemp++,_T("�ն��û��˿�"));
			}
			else
				m_wndList.SetItemText(i,lTemp++,_T("�����̳��"));
				
			switch(pData->lPayStatus )
			{
			case 0:
			default:
				m_wndList.SetItemText(i,lTemp++,_T("�ѳ���"));
				break;
			case 1:
				m_wndList.SetItemText(i,lTemp++,_T("����׼"));
				break;
			case 2:
				m_wndList.SetItemText(i,lTemp++,_T("�Ѹ���"));
				break;
			}
			lPrice = lTemp;
			str.Format( _T("%.2f") , pData->fPrice );
			m_wndList.SetItemText(i,lTemp++,str);
			lSFPrice = lTemp;
			str.Format( _T("%.2f") , pData->fSFPrice );
			m_wndList.SetItemText(i,lTemp++,str);
			m_wndList.SetItemText(i,lTemp++,pData->szCorpName);
			str.Format( _T("%d") , pData->lCorpID );
			m_wndList.SetItemText(i,lTemp++,str);

			m_wndList.SetItemText(i,lTemp++,pData->szCD_User);
			str.Format( _T("%04d.%02d.%02d") , pData->tCD.wYear,pData->tCD.wMonth,pData->tCD.wDay);
			m_wndList.SetItemText(i,lTemp++,str);
			m_wndList.SetItemText(i,lTemp++,pData->szPZ_User);
			str.Format( _T("%04d.%02d.%02d") , pData->tPZ.wYear,pData->tPZ.wMonth,pData->tPZ.wDay);
			m_wndList.SetItemText(i,lTemp++,str);
			m_wndList.SetItemText(i,lTemp++,pData->szFH_User);
			str.Format( _T("%04d.%02d.%02d") , pData->tFH.wYear,pData->tFH.wMonth,pData->tFH.wDay);
			m_wndList.SetItemText(i,lTemp++,str);

			m_wndList.SetItemText(i,lTemp++,pData->szBZ);

			
			fTotal += pData->fPrice;
			fSFTotal += pData->fSFPrice;
			
			i++;
		}

	}

		m_wndList.InsertItem(i,_T(""),0 );
		i++;
		m_wndList.InsertItem(i,_T("�ϼ�"),0 );
		_stprintf( Buf , _T("%.2f") , fTotal );
		m_wndList.SetItemText( i , lPrice , Buf );
		_stprintf( Buf , _T("%.2f") , fSFTotal );
		m_wndList.SetItemText( i , lSFPrice , Buf );

	m_wndList.ShowWindow(SW_SHOW);
}

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

	On_User_See();
}

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

	ShowRMenu();
}

void CC_PayToUser::ShowRMenu()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_TAB,false) )
	{
		return ;
	}
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE,false) )
	{
		return ;
	}

	CMenu menu;
	menu.CreatePopupMenu();
	BOOL bLock = false;
	ANS_PayToUserData * 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_PAYTOUSER_SEE    , _T(" �� �� ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_PAYTOUSER_SEE    , _T(" �� �� ") );
	}
	menu.AppendMenu(MF_SEPARATOR );
	if ( lItem>=0 && pData && pData->lPayStatus==0)
	{
		menu.AppendMenu(MF_STRING     , MENU_PAYTOUSER_PZ    , _T(" �� ׼ ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_PAYTOUSER_PZ    , _T(" �� ׼ ") );
	}
	if ( lItem>=0 && pData && pData->lPayStatus==1)
	{
		menu.AppendMenu(MF_STRING     , MENU_PAYTOUSER_FH    , _T(" �� �� ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_PAYTOUSER_FH    , _T(" �� �� ") );
	}
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING     , MENU_PAYTOUSER_EXPORT    , _T(" �������� ") );
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING     , MENU_PAYTOUSER_PRINT    , _T(" ��ӡ����ƾ֤ ") );
	//��ʾ�˵�
	POINT pt ;
	::GetCursorPos( &pt );
	//this->ClientToScreen( &pt);
	menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
	menu.DestroyMenu();
}

long CC_PayToUser::GetCurrentSelected()
{
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	if ( pos )
	{
		return m_wndList.GetNextSelectedItem(pos);
	}
	return -1;
}
void CC_PayToUser::On_User_See()
{
	long lItem = GetCurrentSelected();
	if ( lItem < 0 )
		return ;
	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	ANS_PayToUserData * pData = m_PayData.GetNext( pos );
	if (pData)
	{
		DLG_C_PayToUser_See dlg(this);
		dlg.SetParam(*pData,false);
		dlg.DoModal();
	}

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

	ANS_PayToUserData * pData = NULL;
	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	pData = m_PayData.GetNext( pos );

	if ( !pData) 
		return ;

	int iRet = MessageBox( _T("�Ƿ���׼�˱ʸ����֧������׼�󽫲��ܸ�ԭ��") , _T("����") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 );
	if ( iRet != IDYES )
		return ;

	REQ_PayToUser_Set * pSet = new REQ_PayToUser_Set;
	memset(pSet , 0 , sizeof(REQ_PayToUser_Set));
	pSet->lPayID = pData->lPayID;
	pSet->lPayStatus = 1; //�ó�����׼
	pSet->lItem = lItem;
	::GetLocalTime(&pSet->tTime);
	
	m_pMainFrame->SendFrame( SMSFUNC_PAYTOUSER_SET , (BYTE*)pSet , sizeof(REQ_PayToUser_Set));


}
void CC_PayToUser::On_User_FH()
{
	long lItem = GetCurrentSelected();
	if ( lItem < 0 )
		return ;
	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	ANS_PayToUserData * pData = m_PayData.GetNext( pos );
	if (pData)
	{
		DLG_C_PayToUser_See dlg(this);
		dlg.SetParam(*pData,true);
		if ( dlg.DoModal()==IDOK )
		{
			REQ_PayToUser_Set * pSet = new REQ_PayToUser_Set;
			memset(pSet , 0 , sizeof(REQ_PayToUser_Set));
			pSet->lPayID = pData->lPayID;
			pSet->lPayStatus = 2; //�ó��Ѹ���
			pSet->lItem = lItem;
			pSet->fPrice = _tstof(dlg.m_strSFPrice);
			_tcscpy(pSet->szBZ , dlg.m_strBZ );
			::GetLocalTime(&pSet->tTime);
			
			m_pMainFrame->SendFrame( SMSFUNC_PAYTOUSER_SET , (BYTE*)pSet , sizeof(REQ_PayToUser_Set));
		}
	}
}
void CC_PayToUser::On_User_Export()
{
	m_wndList.CopyToClipboard();
}
void CC_PayToUser::On_User_Print()
{
	long lItem = this->GetCurrentSelected();
	if ( lItem<0 )
		return ;
	ANS_PayToUserData * pData = NULL;
	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	pData = m_PayData.GetNext( pos );

	if ( !pData) 
		return ;

	DLG_Corp_PayToUser_Print dlg(this);
	dlg.SetParam(pData);
	dlg.DoModal();

}