// DLG_SMSJS_Export.cpp : implementation file
//

#include "stdafx.h"
#include "corpsms.h"
#include "DLG_SMSJS_Export.h"

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

/////////////////////////////////////////////////////////////////////////////
// DLG_SMSJS_Export dialog


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

}


void DLG_SMSJS_Export::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(DLG_SMSJS_Export)
	DDX_Control(pDX, IDD_SMSJS_EXPORT_SEL, m_B_OnlySel);
	DDX_Control(pDX, IDD_SMSJS_EXPORT_HEAD, m_B_AddHead);
	DDX_Control(pDX, IDD_SMSJS_EXPORT_LIST, m_L_List);
	DDX_Control(pDX, IDD_SMSJS_EXPORT_FILENAME, m_E_FileName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(DLG_SMSJS_Export, CDialog)
	//{{AFX_MSG_MAP(DLG_SMSJS_Export)
	ON_BN_CLICKED(IDD_SMSJS_EXPORT_CLEAR, OnSmsjsExportClear)
	ON_BN_CLICKED(IDD_SMSJS_EXPORT_SELALL, OnSmsjsExportSelall)
	ON_BN_CLICKED(IDD_SMSJS_EXPORT_GETFILE, OnSmsjsExportGetfile)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// DLG_SMSJS_Export message handlers

BOOL DLG_SMSJS_Export::OnInitDialog() 
{
	CDialog::OnInitDialog();

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

void DLG_SMSJS_Export::InitList()
{
	m_L_List.Init(true,-1,-1,-1);
	m_L_List.InsertColumn( 0 , _T("˳��")     , LVCFMT_LEFT , 40  , 0);
	m_L_List.InsertColumn( 1 , _T("  �ֶ���") , LVCFMT_LEFT , 120 , 1);
	m_L_List.SetTextColor( RGB(0,0,255) );
	TCHAR * pItem[] =  
	{ 
		_T("���ͺ���"), 
		_T("������"),
		_T("���պ���"),
		_T("����ʱ��"),
		_T("����"),
		_T("�ֻ�������")
#ifdef MOBSET_OEM_SNLD
		_T("�dz�"),
		_T("�Ա�"),
		_T("����"),
		_T("��˾"),
		_T("ְ��"),
		_T("�绰"),
		_T("����"),
		_T("Email"),
		_T("QQ"),
		_T("��ע"),
#endif
#ifdef YQ_VER
		_T("�������"),
		_T("�ֻ�������")
#endif
	};
	TCHAR Buf[256];
	int lCount=6;
#ifdef MOBSET_OEM_SNLD
	lCount += 10;
#endif
	for ( int i = 0 ; i<lCount ; i++ )
	{
		m_L_List.InsertItem( i , _itot(i+1,Buf,10) );
		m_L_List.SetItemText(i , 1 , pItem[i] );
		m_L_List.SetItemData(i , i );  //���������Ϊ��˳�����ڴ���
	}
#ifdef YQ_VER
	lCount += 2;
	int j=0;
	for ( ; i<lCount ; i++ )
	{
		m_L_List.InsertItem( i , _itot(i+1,Buf,10) );
		m_L_List.SetItemText(i , 1 , pItem[i] );
		m_L_List.SetItemData(i , 20+j );  //���������Ϊ��˳�����ڴ���
		j++;
	}

#endif

	m_L_List.CheckAll();
	m_L_List.NoverCheck();
	m_L_List.ReShowSort();
}

void DLG_SMSJS_Export::OnSmsjsExportClear() 
{
	m_L_List.ClearAll();
}

void DLG_SMSJS_Export::OnSmsjsExportSelall() 
{
	m_L_List.CheckAll();	
}

void DLG_SMSJS_Export::OnOK() 
{
	long lItemCount = m_L_List.GetItemCount();
	long lExPortItem[50];memset(&lExPortItem,0,sizeof(lExPortItem));
	for ( int j=0 ; j < 50 ; j++ ) lExPortItem[j] = -1;
	long lCheckCount = 0;
	for ( int i=0 ; i<lItemCount ; i++ )
	{
		if ( m_L_List.GetCheck(i) )
		{
			lExPortItem[lCheckCount] = m_L_List.GetItemData(i) ;
			lCheckCount ++;
		}
	}

	if ( lCheckCount <=0 )
	{
		MessageBox( _T("��������ߵ��ֶ��б���ѡ��һ�����������ֶΡ�") , _T("ѡ�����") , MB_OK|MB_ICONWARNING );
		return;
	}
	TCHAR szFileName[512];
	m_E_FileName.GetWindowText( szFileName , sizeof(szFileName) );
	if ( _tcslen(AllTrim(szFileName)) <=0 )
	{
		MessageBox( _T("��������뵼�����ļ�����") , _T("����") , MB_OK|MB_ICONWARNING );
		m_E_FileName.SetFocus();
		return;
	}

	CFile fTalk;
	if ( !fTalk.Open( szFileName , CFile::modeReadWrite|CFile::modeCreate ) )
	{
		TCHAR Buf[512];
		_stprintf( Buf , _T("�����ļ�:%s\n��������!") , szFileName );
		MessageBox( Buf , _T("����") , MB_ICONWARNING|MB_OK );
		return;
	}
	
	CString str;
	CString strTemp,strTemp2;
	long lAdrCount = m_pList->GetItemCount();
	TCHAR Buf[1024];
	TCHAR Buf2[1024];
	TCHAR Buf3[1024];
#ifdef UNICODE
	char  szTempA[4096];
#endif
	long lRecnCount= 0;  //�ܼ�¼��
	long lFileSize = 0;  //�ļ����ֽ���
	long lBufLen   = 0;
	COleDateTime t;

	if ( m_B_AddHead.GetCheck() )//�����ֶ�ͷ
	{
		_tcscpy(Buf,_T(";"));

		for ( int j = 0; j<lCheckCount ; j++ )
		{
			switch( lExPortItem[j] )
			{
			case 0:  //�����
				_tcscat(Buf , _T("���ͺ���"));
				break;
			case 1:  //������
				_tcscat(Buf , _T("������"));
				break;
			case 2:  //���պ���
				_tcscat(Buf , _T("���պ���"));
				break;
			case 3:  //����ʱ��
				_tcscat(Buf , _T("����ʱ��"));
				break;
			case 4:  //����
				_tcscat(Buf , _T("��������"));
				break;
			case 5:  //������
				_tcscat(Buf , _T("������"));
				break;
			case 6:  //�dz�
				_tcscat(Buf , _T("�dz�"));
				break;
			case 7:  //�Ա�
				_tcscat(Buf , _T("�Ա�"));
				break;
			case 8:  //����
				_tcscat(Buf , _T("����"));
				break;
			case 9:  //��˾
				_tcscat(Buf , _T("��˾"));
				break;
			case 10:  //ְ��
				_tcscat(Buf , _T("ְ��"));
				break;
			case 11:  //�绰
				_tcscat(Buf , _T("�绰"));
				break;
			case 12:  //����
				_tcscat(Buf , _T("����"));
				break;
			case 13:  //Email
				_tcscat(Buf , _T("Email"));
				break;
			case 14:  //QQ
				_tcscat(Buf , _T("QQ"));
				break;
			case 15:  //��ע
				_tcscat(Buf , _T("��ע"));
				break;

			case 20:  //����
				_tcscat(Buf , _T("����"));
				break;
			case 21:  //������
				_tcscat(Buf , _T("������"));
				break;
			}
			if ( j < lCheckCount-1 ) //���һ�����ü�","��
				_tcscat(Buf , _T(",") );
		}
		_tcscat(Buf , _T("\r\n") );  //����
#ifdef UNICODE
		CAdoRecordSet::Ado_W2A(Buf,szTempA);
		lBufLen = strlen(szTempA);
		fTalk.Write( szTempA , lBufLen );
#else
		lBufLen = _tcslen(Buf);
		fTalk.Write( Buf , lBufLen );
#endif

		lFileSize  = lFileSize + lBufLen ;   //ȡ�����ֽ���
	}
	for ( i = 0; i<lAdrCount ; i++ )
	{
		memset(Buf , 0 , sizeof(Buf) );
		BOOL bExport=true;
		if ( m_B_OnlySel.GetCheck() )
		{
			UINT uStatus= m_pList->GetItemState(i,LVIS_SELECTED);
			if ( uStatus&LVIS_SELECTED )
				bExport = true;
			else
				bExport = false;
		}
		long lSmsID = m_pList->GetItemData(i);
		CString str;
		str.Format( _T("select * from smsrecv where RecvID=%d") , lSmsID );
		if ( bExport && m_pAdo->Open(str) && m_pAdo->GetRecordCount()>0 )
		{
			m_pAdo->MoveFirst();
			for( int j = 0 ; j< lCheckCount ; j++ )  //������ѡ�е��ֶΣ�ȡͨѶ¼���ݽ��б��档
			{
				memset(Buf2 , 0 , sizeof(Buf2) );
				memset(Buf3 , 0 , sizeof(Buf3) );
				switch( lExPortItem[j] )
				{
				case 0:  //���ͺ���
					m_pAdo->GetCollect( _T("SendNum") , Buf2 );
					break;
				case 1:  //������
					m_pAdo->GetCollect( _T("Sender") , Buf2 );
					break;
				case 2:  //���պ���
					m_pAdo->GetCollect( _T("Recvnum") , Buf2 );
					break;
				case 3:  //����ʱ��
					m_pAdo->GetCollect( _T("RecvTime") , t );
					if (t.GetStatus()==COleDateTime::valid)
						_stprintf(Buf2,_T("%04d.%02d.%02d %02d:%02d") , t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute());
					else
						memset(Buf2,0,sizeof(Buf2));
					break;
				case 4:  //����
					m_pAdo->GetCollect( _T("Msg") , Buf2 );
					ExChar(Buf2 , _T("\r") );
					ExChar(Buf2 , _T("\n") );
					str=Buf2;
					str.Replace( _T(",") , _T("��") );
					_tcscpy(Buf2 , str );
					break;
				case 5:  //������
					m_pAdo->GetCollect( _T("Province") , strTemp );
					m_pAdo->GetCollect( _T("City") , strTemp2 );
					if ( strTemp2.GetLength()>0 )
						_stprintf(Buf2 , _T("%s-%s") ,strTemp,strTemp2  );
					else
						_tcscpy(Buf2 , strTemp  );
					break;
				case 6:  //�dz�
					m_pAdo->GetCollect( _T("NickName") , Buf2 );
					break;
				case 7:  //�Ա�
					m_pAdo->GetCollect( _T("Sex") , Buf2 );
					break;
				case 8:  //����
					m_pAdo->GetCollect( _T("Birthday") , t );
					if (t.GetStatus()==COleDateTime::valid)
						_stprintf(Buf2,_T("%04d.%02d.%02d") , t.GetYear(),t.GetMonth(),t.GetDay());
					else
						memset(Buf2,0,sizeof(Buf2));
					break;
				case 9:  //��˾
					m_pAdo->GetCollect( _T("Ltd") , Buf2 );
					break;
				case 10:  //ְ��
					m_pAdo->GetCollect( _T("Job") , Buf2 );
					break;
				case 11:  //�绰
					m_pAdo->GetCollect( _T("Tel") , Buf2 );
					break;
				case 12:  //����
					m_pAdo->GetCollect( _T("Fax") , Buf2 );
					break;
				case 13:  //Email
					m_pAdo->GetCollect( _T("Email") , Buf2 );
					break;
				case 14:  //QQ
					m_pAdo->GetCollect( _T("QQ") , Buf2 );
					break;
				case 15:  //��ע
					m_pAdo->GetCollect( _T("BZ") , Buf2 );
					ExChar(Buf2 , _T("\r") );
					ExChar(Buf2 , _T("\n") );
					break;

				case 20:  //����
					m_pAdo->GetCollect( _T("Type1") , Buf2 );
					m_pAdo->GetCollect( _T("Type2") , Buf3 );
					if ( _tcslen(Buf3)>0 )
					{
						_tcscat( Buf2 , _T("-") );
						_tcscat( Buf2 , Buf3 );
					}
					break;
				case 21:  //������
					m_pAdo->GetCollect( _T("Province") , Buf2 );
					m_pAdo->GetCollect( _T("City") , Buf3 );
					if ( _tcslen(Buf3)>0 )
					{
						_tcscat( Buf2 , _T("-") );
						_tcscat( Buf2 , Buf3 );
					}
					break;
				}
				_tcscat(Buf , Buf2 );
				if ( j < lCheckCount-1 ) //���һ�����ü�","��
					_tcscat(Buf , _T(",") );
			}
			_tcscat(Buf , _T("\r\n") );  //����
#ifdef UNICODE
			CAdoRecordSet::Ado_W2A(Buf,szTempA);
			lBufLen = strlen(szTempA);
			fTalk.Write( szTempA , lBufLen );
#else
			lBufLen = _tcslen(Buf);
			fTalk.Write( Buf , lBufLen );
#endif
			lRecnCount++;                        //ȡ���ܼ�¼��
			lFileSize  = lFileSize + lBufLen ;   //ȡ�����ֽ���
		}
	}
	fTalk.Close();
	this->EndWaitCursor();
	_stprintf(Buf , _T("���������б��ɹ����������£�\n�����ļ�����:TXT\n������¼��:%d\n�����ֽ���:%d\n�����ļ���:%s") , lRecnCount , lFileSize , szFileName);
	MessageBox( Buf , _T("�����ɹ�"),MB_OK|MB_ICONINFORMATION );
	CDialog::OnOK();
}

void DLG_SMSJS_Export::OnSmsjsExportGetfile() 
{
#define FILE_FILTER_TEXT \
	TEXT("txt�ı��ļ� (*.txt)\0*.txt\0")\
	TEXT("Excel csv �ļ� (*.csv)\0*.csv\0")\
    TEXT("�����ļ� (*.*)\0*.*;\0\0")

	TCHAR szFile[ 256 ];
	TCHAR szFileB[ 256 ];
	*szFileB = NULL;
	_stprintf( szFile , _T("SmsRecv") );

	
	OPENFILENAME  sOpen;
	sOpen.lStructSize = sizeof( sOpen );
	sOpen.hwndOwner = this->m_hWnd ;
	sOpen.Flags = OFN_EXPLORER|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY;
	sOpen.lpstrFilter = FILE_FILTER_TEXT;
	sOpen.lpstrDefExt = _T("txt");
	sOpen.lpstrCustomFilter = NULL;
	sOpen.nMaxCustFilter    = 0;
	sOpen.lpstrFile = szFile;
	sOpen.nMaxFile  = sizeof( szFile );
	sOpen.lpstrFileTitle = szFileB;
	sOpen.nMaxFileTitle = sizeof( szFileB );
	sOpen.lpstrInitialDir = NULL;
	sOpen.lpstrTitle = _T("ѡ�񵼳��б����ļ�");
	if ( ::GetSaveFileName( &sOpen ) )
	{
		m_E_FileName.SetWindowText(sOpen.lpstrFile);
	}		
}

void DLG_SMSJS_Export::SetParam(CAdoRecordSet *pAdo, CReportCtrl *pList)
{
	m_pAdo = pAdo;
	m_pList = pList;
}