// FBack.cpp : implementation file
//

#include "stdafx.h"
#include "corpsms.h"
#include "FBack.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFBack dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_Back_Add.h"
#include "DLG_User_InportP2.h"
#include "DLG_Back_Export.h"

CFBack::CFBack(CWnd* pParent /*=NULL*/)
	: CDialog(CFBack::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFBack)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_bInit = false;
	m_bRefresh = false;
	m_bRefresh2= false;

}


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


BEGIN_MESSAGE_MAP(CFBack, CDialog)
	//{{AFX_MSG_MAP(CFBack)
	ON_WM_SIZE()
	ON_NOTIFY(NM_DBLCLK, IDC_QUERYFILT_LIST, OnDblclkQueryfiltList)
	ON_NOTIFY(LVN_KEYDOWN, IDC_QUERYFILT_LIST, OnKeydownQueryfiltList)
	ON_NOTIFY(NM_RCLICK, IDC_QUERYFILT_LIST, OnRclickQueryfiltList)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
	ON_COMMAND( MENU_BACK_ADD    , On_R_Add )
	ON_COMMAND( MENU_BACK_MODIFY , On_R_Modify )
	ON_COMMAND( MENU_BACK_DELETE , On_R_Delete )
	ON_COMMAND( MENU_BACK_INPORT , On_R_Inport )
	ON_COMMAND( MENU_BACK_EXPORT , On_R_Export )
	ON_COMMAND( MENU_BACK_REFRESH, On_R_Refresh )
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFBack message handlers

BOOL CFBack::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_BACK) );
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) );
	m_wndList.SubClassWindow2();
	m_wndList.SetHeadings(_T("���,50; ״̬,60; �ֻ�����,100; ˵��,250;"));
	m_wndList.SetGridLines(true);
	//m_wndList.SetCheckboxes(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
}

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

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

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

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

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

BOOL CFBack::RefreshInfo()
{
/*
	BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false;
	if ( bQuery )
	{
		REQ_BACK_See * pSee = new REQ_BACK_See;
		pSee->lCorpID = m_pMainFrame->m_lCorpID;
		pSee->lUserID = m_pMainFrame->m_lUserID;
		m_pMainFrame->SendFrame( SMSFUNC_BACK_SEE , (BYTE*)pSee , sizeof( REQ_BACK_See ) );  //����ȡ���ϵ�����
	}
*/
	ShowBack();
	return true;
}

BOOL CFBack::ProcessSocket(Socket_Head *pHead)
{
	return false;
}

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

	//����
	menu.AppendMenu(MF_STRING     , MENU_BACK_ADD, _T(" ���Ӻ����� ") );
	menu.AppendMenu(MF_SEPARATOR );
	//�޸�
	if ( lItem >=0 && !bLock)
	{
		menu.AppendMenu(MF_STRING     , MENU_BACK_MODIFY, _T(" �� �� ") );
		menu.AppendMenu(MF_STRING     , MENU_BACK_DELETE, _T(" ɾ �� ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_BACK_MODIFY, _T(" �� �� ") );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_BACK_DELETE, _T(" ɾ �� ") );
	}
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING     , MENU_BACK_INPORT, _T(" ����... ") );
	menu.AppendMenu(MF_STRING     , MENU_BACK_EXPORT, _T(" ����... ") );
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING     , MENU_BACK_REFRESH, _T(" ˢ �� ") );
	//��ʾ�˵�
	POINT pt ;
	::GetCursorPos( &pt );
	//this->ClientToScreen( &pt);
	menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
	menu.DestroyMenu();
}

long CFBack::GetCurrentSelected()
{
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	if ( pos )
	{
		return m_wndList.GetNextSelectedItem(pos);
	}
	return -1;
}

void CFBack::OnDblclkQueryfiltList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	On_R_Modify();
}

void CFBack::OnKeydownQueryfiltList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
	*pResult = 0;

	if ( pLVKeyDow->wVKey == VK_DELETE )
	{
		On_R_Delete();
	}
	if ( pLVKeyDow->wVKey == VK_INSERT)
	{
		On_R_Add();
	}
	if ( pLVKeyDow->wVKey == VK_SPACE)
	{
		On_R_Modify();
	}
	if ( pLVKeyDow->wVKey == 'I' || pLVKeyDow->wVKey == 'i')
	{
		On_R_Inport();
	}
	if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r')
	{
		On_R_Refresh();
	}
	if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a')
	{
		m_wndList.SelectAllItems();
	}
}

void CFBack::OnRclickQueryfiltList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	ShowRMenu();
}

void CFBack::On_R_Add()
{
	Back_Data data={0};
	data.lStatus = 1;  //Ĭ������
	DLG_Back_Add dlg(this);
	dlg.SetParam(data);
	if ( dlg.DoModal()==IDOK )
	{
		data = dlg.GetParam();
		if ( m_AdoRS.Open( _T("Back") , adCmdTable ) )
		{
			m_AdoRS.AddNew();
			m_AdoRS.PutCollect( _T("Status") , data.lStatus );
			m_AdoRS.PutCollect( _T("Mobile") , data.szMobile );
			m_AdoRS.PutCollect( _T("BZ")     , data.szBZ );
			m_AdoRS.Update();
			m_AdoRS.GetCollect( _T("BackID")     , data.lBackID );
			m_AdoRS.Close();


			//���µ��б���
			TCHAR szBuf[32]={0};
			long i=m_wndList.GetItemCount();
			m_wndList.InsertItem( i , _itot(i+1,szBuf,10) );  //���
			m_wndList.SetItemData( i , data.lBackID );
			if ( data.lStatus == 1 )
				m_wndList.SetItemText(i,1, _T("����") );
			else
				m_wndList.SetItemText(i,1, _T("") );
			m_wndList.SetItemText(i,2, data.szMobile );
			m_wndList.SetItemText(i,3, data.szBZ );
		}

	}
}
void CFBack::On_R_Modify()
{

	long lItem = this->GetCurrentSelected();
	if ( lItem < 0 )
		return ;
	Back_Data data=GetQueryFiltData(lItem);
	
	DLG_Back_Add dlg(this);
	dlg.SetParam(data);
	if ( dlg.DoModal()==IDOK )
	{
		data = dlg.GetParam();

		CString str;
		str.Format(_T("select * from back where BackID=%d") , data.lBackID );
		if ( m_AdoRS.Open( str) && !m_AdoRS.IsEOF() )
		{
			m_AdoRS.PutCollect( _T("Status") , data.lStatus );
			m_AdoRS.PutCollect( _T("Mobile") , data.szMobile );
			m_AdoRS.PutCollect( _T("BZ")     , data.szBZ );
			m_AdoRS.Update();
			m_AdoRS.PutCollect( _T("BackID")     , data.lBackID );
			m_AdoRS.Close();
			
			//���µ��б���
			TCHAR szBuf[32]={0};
			long i=lItem;
			m_wndList.SetItemData( i , data.lBackID );
			if ( data.lStatus == 1 )
				m_wndList.SetItemText(i,1, _T("����") );
			else
				m_wndList.SetItemText(i,1, _T("") );
			m_wndList.SetItemText(i,2, data.szMobile );
			m_wndList.SetItemText(i,3, data.szBZ );
		}
	}
}
void CFBack::On_R_Delete()
{

	CString str;
	long lCount = m_wndList.GetSelectedCount();
	long * lDel = new long[lCount];
	memset(lDel , 0 , sizeof(long)*lCount);
	long lIndex=0;
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	while(pos)
	{
		lDel[lIndex]   = m_wndList.GetNextSelectedItem(pos);
		lIndex++;
	}

	m_wndList.ShowWindow( SW_HIDE );  //Ϊ�˼ӿ���ʾ�ٶ�
	for ( int i = lIndex-1 ; i>=0 ; i-- )
	{
		long lBackID = m_wndList.GetItemData(lDel[i]);
		m_wndList.DeleteItem(lDel[i]); //��ListCtrl��ɾ��
		
		//�����ݿ���ɾ��
		str.Format( _T("delete from back where backid=%d") , lBackID );
		m_AdoRS.Open(str);
	}
	delete lDel;
	m_wndList.ShowWindow( SW_SHOW );  //Ϊ�˼ӿ���ʾ�ٶ�
	

}
void CFBack::On_R_Inport()
{
	m_wndList.ShowWindow(SW_HIDE);  //�ӿ���ʾ�ٶ�
	Inport_Field  Field[] = 
	{
		{_T("�ֻ�����"),0,7,-1},
		{_T("˵��"),0,12,-1},
		{_T("״̬"),0,13,-1},
	};
	DLG_User_InportP2 dlg(this);
	dlg.SetParam(&Field[0],sizeof(Field)/sizeof(Inport_Field),6);
	//DLG_Send_Inport dlg(this);
	//dlg.SetInport(true);
	dlg.DoModal();

	RefreshInfo(); //ˢ��

	
}
void CFBack::On_R_Export()
{
	DLG_Back_Export dlg(this);
	dlg.SetParam(&m_AdoRS2,&m_wndList,0);
	dlg.DoModal();
}

void CFBack::On_R_Refresh()
{
	RefreshInfo();
}

Back_Data CFBack::GetQueryFiltData(long lItem)
{
	Back_Data data={0};
	long lID = m_wndList.GetItemData(lItem);
	if ( lID >= 0 )
	{
		//m_wndList.SetHeadings(_T("���,50; ״̬,60; ����,60; �� ��,100  �ֻ�����,120;   �� ע,200;"));
		data.lBackID = lID;
		CString str;
		str = m_wndList.GetItemText( lItem , 1 );
		if ( str == _T("����") )
			data.lStatus = 1;
		else
			data.lStatus = 0;
		m_wndList.GetItemText( lItem , 2 , data.szMobile , sizeof(data.szMobile));
		m_wndList.GetItemText( lItem , 3 , data.szBZ , sizeof(data.szBZ));
	}
	return data;
}

BOOL CFBack::QueryMobile(const TCHAR *pMobile, long lID)
{
	long lCount = m_wndList.GetItemCount();
	for ( int i=0 ; i<lCount ; i++ )
	{
		long lID2 = m_wndList.GetItemData(i);
		if ( lID2 != lID )
		{
			CString strMobile;
			strMobile = m_wndList.GetItemText(i,4);
			if ( strMobile == CString(pMobile) )
			{
				return true;
			}
		}
	}

	return false;
}

void CFBack::OnDestroy() 
{
	CDialog::OnDestroy();
	
}

void CFBack::ShowBack()
{
	m_wndList.ShowWindow( SW_HIDE );  //Ϊ�˼ӿ���ʾ�ٶ�
	m_wndList.DeleteAllItems();

	CString strWhere;
	strWhere =  _T("Select * from Back Order by Mobile ");

	BOOL b = m_AdoRS.Open( strWhere );
	long lCount = m_AdoRS.GetRecordCount();
	if ( b && lCount )
	{
		COleDateTime t;
		m_AdoRS.MoveFirst();
		for ( int i = 0 ; i< lCount ; i++ )
		{
			Back_Data data={0};
			TCHAR szBuf[32]={0};
			
			COleDateTime t;
			m_AdoRS.GetCollect( _T("BackID")  , data.lBackID);
			m_AdoRS.GetCollect( _T("Status")  , data.lStatus);
			m_AdoRS.GetCollect( _T("Mobile")  , data.szMobile);
			m_AdoRS.GetCollect( _T("BZ")      , data.szBZ);
			m_AdoRS.MoveNext();


			//m_wndList.SetHeadings(_T("���,50;  ����,80;  �绰,80;�ֻ�,100;  ����,90;  ʡ��,100;  ����,100;  ����,100;"));
			m_wndList.InsertItem( i , _itot(i+1,szBuf,10) );  //���
			m_wndList.SetItemData( i , data.lBackID );
			if ( data.lStatus == 1 )
				m_wndList.SetItemText(i,1, _T("����") );
			else
				m_wndList.SetItemText(i,1, _T("") );
			m_wndList.SetItemText(i,2, data.szMobile );
			m_wndList.SetItemText(i,3, data.szBZ );
		}
	}

	m_wndList.ShowWindow( SW_SHOW );  //Ϊ�˼ӿ���ʾ�ٶ�

	return ;
}

BOOL CFBack::AddUser(PAddress user, long lItem)
{
	Back_Data data = {0};
	data.lStatus = 1;
	if ( _tcslen(user.szTel) >0 && _ttol(user.szTel)==0 )
		data.lStatus = 0;
	_tcscpy(data.szMobile , user.szMobile );
	_tcscpy(data.szBZ     , user.szBZ );

	
	if ( m_AdoRS.Open( _T("Back") , adCmdTable ) )
	{
		m_AdoRS.AddNew();
		m_AdoRS.PutCollect( _T("Status") , data.lStatus );
		m_AdoRS.PutCollect( _T("Mobile") , data.szMobile );
		m_AdoRS.PutCollect( _T("BZ")     , data.szBZ );
		m_AdoRS.Update();
		m_AdoRS.PutCollect( _T("BackID")     , data.lBackID );
		m_AdoRS.Close();
	}

	return true;
}