// outsourcing.cpp : implementation file
//
#include "stdafx.h"
#include "LYFZIPManage.h"
#include "outsourcing.h"
#include "MyMdi.H"
#include "ModifyDinDan.h"
#include "InputPsw.h"
#include "ClientDlg.h"
#include "ImportPhoto.h"
#include "ImportPhoto.h"
#include "outsourcingDlg.h"
#include "outsourcingDlg2.h"
#include "NeroDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#pragma comment(lib, "Shlwapi.lib")
/////////////////////////////////////////////////////////////////////////////
// outsourcing

IMPLEMENT_DYNCREATE(outsourcing, CFormView)
outsourcing::outsourcing()
	: CFormView(outsourcing::IDD)
{
	//{{AFX_DATA_INIT(outsourcing)
	m_filter = _T("");
	//}}AFX_DATA_INIT
}

outsourcing::~outsourcing()
{
}

void outsourcing::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(outsourcing)
	DDX_Control(pDX, IDC_COMBO1, m_combo1);
	DDX_Control(pDX, IDC_LIST2, m_List1);
	DDX_Control(pDX, IDC_STATIC1, m_static1);
	DDX_CBString(pDX, IDC_COMBO1, m_filter);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(outsourcing, CFormView)
	//{{AFX_MSG_MAP(outsourcing)
	ON_BN_CLICKED(IDC_BUTclose, OnBUTclose)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTmodify, OnBUTmodify)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST2, OnDblclkList2)
	ON_BN_CLICKED(IDC_BUTexport, OnBUTexport)
	ON_BN_CLICKED(IDC_BUTmodify2, OnBUTmodify2)
	ON_NOTIFY(NM_RDBLCLK, IDC_LIST2, OnRdblclkList2)
	ON_BN_CLICKED(IDC_BUTToPhotoPrint, OnBUTToPhotoPrint)
	ON_BN_CLICKED(IDC_BUTburncd, OnBUTburncd)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// outsourcing diagnostics

#ifdef _DEBUG
void outsourcing::AssertValid() const
{
	CFormView::AssertValid();
}

void outsourcing::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// outsourcing message handlers

void outsourcing::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	// TODO: Add your specialized code here and/or call the base class
	CMyMdi Mdi;
	Mdi.SetSubView((CWnd*)GetParent(), (CWnd*)this);
	
	// Here we create the outbar control using the splitter as its parent
	// and setting its id to the first pane.
	CRect rc2;
	GetWindowRect(rc2);
	::MoveWindow(m_hWnd,g_rc.left,g_rc.top,g_rc.Width(),g_rc.Height(),TRUE);

 	EnumChildWindows(m_hWnd,(WNDENUMPROC)EnumChildProc,0);

	m_static1.SetFont (&g_titlefont);
	m_List1.SetHeadings("������,100;�б�����,100;Ů������,100;���,100;�Ӽ�,100;ȡ������,100;�ӵ���,100;��Ʒ����,100;�Ƿ񷢳�,100;�Ƿ����,100;�Ƿ����,100;�Ƿ�ȡ��,100;�б��绰,100;Ů���绰,100" );
 	m_List1.LoadColumnInfo (121);
	m_List1.m_bSortSupport=0;
 //	DWORD begin=::GetTickCount ();
	if(g_bShowOK==0)
	{
	CString filter="qjstatus='δȡ' and kind<>'5'";
	g_sendhead.bsql=0;
	g_sendhead.code[0]=33;
	g_sendhead.tabcount=1;
	g_pMainWnd->ProcessChatMessageRequest2(filter);if(g_bSendOK==0)return;
	}
	else
	{
	CString filter="kind<>'5'";
	g_sendhead.bsql=0;
	g_sendhead.code[0]=33;
	g_sendhead.tabcount=1;
	g_pMainWnd->ProcessChatMessageRequest2(filter);if(g_bSendOK==0)return;
	}
 
 
//	DWORD end=::GetTickCount ()-begin;
//	CString timestamp;
//	timestamp.Format ("%d s", end);
//	AfxMessageBox(timestamp);
 

	DataToArray(&m_List1array);





 	for(int i=0; i<g_userarray.GetSize (); i++)
	{
		m_combo1.AddString (g_userarray.ElementAt (i).ElementAt (1) );
	}
    FillGrid();
	m_combo1.GetWindowRect (rc2);
	ScreenToClient(rc2);
	rc2.bottom +=200;
	m_combo1.MoveWindow (rc2);  
	
	GetDlgItem(IDC_BUTexport)->EnableWindow(IsHasRights2new(12));
 
	GetDlgItem(IDC_BUTmodify2)->EnableWindow(IsHasRights2new(14));
}

void outsourcing::FillGrid()
{
	m_List1.DeleteAllItems2 ();
	int ii=0;
	m_List1.m_arLabels.SetSize( m_List1array.GetSize (), 1 );
	int count=0;
	if(m_filter.IsEmpty ())
	{
	  for(ii=0; ii<m_List1.m_arLabels.GetSize (); ii++)
	  {
		m_List1.m_arLabels.ElementAt (count++).Copy (m_List1array.ElementAt (ii));
	  }
	}
	else
	{
		int type=GetType(m_filter);
		if(type==1)//�绰
		{BOOL bFinded=0;
		for(ii=0; ii<m_List1.m_arLabels.GetSize (); ii++)
		{
			if(bFinded && m_List1array.ElementAt (ii).ElementAt (0).IsEmpty ())
			{	
				m_List1.m_arLabels.ElementAt (count++).Copy (m_List1array.ElementAt (ii));
				continue;
			}
if(m_List1array.ElementAt (ii).ElementAt (12).Find (m_filter)!=-1\
|| m_List1array.ElementAt (ii).ElementAt (13).Find (m_filter)!=-1 )
			{
	            bFinded=1;
			    m_List1.m_arLabels.ElementAt (count++).Copy (m_List1array.ElementAt (ii));
			}
else
{
	bFinded=0;
}
		}
		}
		else if(type==2)//ƴ��
		{BOOL bFinded=0;
		m_filter.MakeUpper ();
		for(ii=0; ii<m_List1.m_arLabels.GetSize (); ii++)
		{
			if(bFinded && m_List1array.ElementAt (ii).ElementAt (0).IsEmpty ())
			{	
				m_List1.m_arLabels.ElementAt (count++).Copy (m_List1array.ElementAt (ii));
				continue;
			}
if(m_List1array.ElementAt (ii).ElementAt (14).Find (m_filter)!=-1\
|| m_List1array.ElementAt (ii).ElementAt (15).Find (m_filter)!=-1 )
			{
	            bFinded=1;
			    m_List1.m_arLabels.ElementAt (count++).Copy (m_List1array.ElementAt (ii));
			}
else
{
	bFinded=0;
}
		}
		}
		else
		{
		BOOL bFinded=0;
		for(ii=0; ii<m_List1.m_arLabels.GetSize (); ii++)
		{
			if(bFinded && m_List1array.ElementAt (ii).ElementAt (0).IsEmpty ())
			{	
				m_List1.m_arLabels.ElementAt (count++).Copy (m_List1array.ElementAt (ii));
				continue;
			}
if(m_List1array.ElementAt (ii).ElementAt (0).Find (m_filter)!=-1 ||m_List1array.ElementAt (ii).ElementAt (1).Find (m_filter)!=-1 || m_List1array.ElementAt (ii).ElementAt (2).Find (m_filter)!=-1 || m_List1array.ElementAt (ii).ElementAt (6).Find (m_filter)!=-1\
|| m_List1array.ElementAt (ii).ElementAt (12).Find (m_filter)!=-1\
|| m_List1array.ElementAt (ii).ElementAt (13).Find (m_filter)!=-1 )
			{
	            bFinded=1;
			    m_List1.m_arLabels.ElementAt (count++).Copy (m_List1array.ElementAt (ii));
			}
else
{
	bFinded=0;
}
		}
		}
	}
	m_List1.m_arLabels.SetSize(count, 1);
	ii=count;
	m_List1.m_LabelCount=ii;
	m_List1.SetItemCountEx (ii);
	CString str;
	str.Format ("����:%d", ii);
	SetDlgItemText(IDC_STATIC2, str);
}

void outsourcing::OnBUTclose() 
{
	// TODO: Add your control notification handler code here
	GetParent()->SendMessage(WM_CLOSE);
}

void outsourcing::OnButton1() 
{
	// TODO: Add your control notification handler code here
/*	CString oldid="";
	BOOL bOK=1;
	CString str;
    for(int i=0; i<m_List1.GetItemCount (); i++)
	{
		if(!m_List1.GetItemText (i, 0).IsEmpty ())
		{
		if(oldid!=m_List1.GetItemText (i, 0))
		{
			if(bOK && i>0)
			{
			 	CString sql;
				sql= "update dindan set status3='OK' where id='"+oldid+"'";
				g_sendhead.bsql=1;
				g_pMainWnd->ProcessChatMessageRequest2(sql); 
				str+=oldid;
			}
			bOK=1;
			oldid=m_List1.GetItemText (i, 0);
		}
		}
		if(m_List1.GetItemText (i, 11)!="OK")
			bOK=0;
	}
	MessageBox(str);*/
 


 

	UpdateData();
	m_filter.TrimLeft ();
	m_filter.TrimRight ();
	FillGrid();
}

void outsourcing::OnSelchangeCombo1() 
{
	// TODO: Add your control notification handler code here
	SetTimer(1, 100, NULL);	
}

void outsourcing::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	KillTimer(nIDEvent);
	OnButton1();
}
 

BOOL outsourcing::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	try
	{
	if(pMsg->message==WM_KEYDOWN)
	{
		switch (pMsg->wParam)
		{
		case VK_RETURN:
			OnButton1();
			return 1;
		case 0x43: // copy
			if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) )
			{
				GetFocus()->SendMessage(WM_COPY);
				return TRUE;
			}
			break;
		case 0x56: //Ctrl + V:
			if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) )
			{
				GetFocus()->SendMessage(WM_PASTE);
				return TRUE;
			}
			break;
		case 0x58: // cut
			if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) )
			{
				GetFocus()->SendMessage(WM_CUT);
				return TRUE;
			}
			break;
		case 0x5A: //undo
		case 0x59: //redo
			if ( ( GetKeyState( VK_CONTROL ) & 0x80 ) )
			{
				GetFocus()->SendMessage(WM_UNDO);
				return TRUE;
			}
			break;
		}
	}
/*	else if(pMsg->message==WM_LBUTTONDOWN)
	{
		CPoint pt;
		CRect rc,rc2;
	    ::GetCursorPos (&pt);
        m_List1.GetWindowRect (rc2);
	    pt.x-=rc2.left ;
	    pt.y-=rc2.top ;
		m_List1.GetHeaderCtrl()->GetItemRect (0, rc);
		rc.right =rc.left +rc2.Width ();
		if(rc.PtInRect (pt))
			return 1;
	}*/
	return CFormView::PreTranslateMessage(pMsg);
	}
	catch(...)
	{
	}
}

void outsourcing::GetNo(CString str, CStringArray &array)
{
	if(!str.IsEmpty ())
	{
		int pos=str.Find (",");
		while(pos!=-1)
		{
			array.Add (str.Left (pos));
			str=str.Right (str.GetLength ()-pos-1);
			pos=str.Find (",");
		}
		array.Add(str);
	}
}

extern int   CALLBACK   BrowseProc(HWND   hwnd,   UINT   msg,   LPARAM   lParam,   LPARAM   lpData);
/*{
switch(msg)
{
case   BFFM_INITIALIZED:
SendMessage(hwnd,   BFFM_SETSELECTION,   TRUE,   NULL);
break;
case   BFFM_SELCHANGED:
{
char   szFileName[MAX_PATH];
LPITEMIDLIST   pidlCurrent   =   (LPITEMIDLIST)lParam;
SHGetPathFromIDList(pidlCurrent,   szFileName);
SendMessage(hwnd,   BFFM_SETSTATUSTEXT,   0,   (LPARAM)szFileName);
}
break;
}
return   0;
}*/

void outsourcing::GetSavePath(CString &path)
{
char   lpszDisplayName[MAX_PATH],   szFileName[MAX_PATH];
LPITEMIDLIST   pidlDesktop,   pidlCurrent;
if(SHGetSpecialFolderLocation(NULL,   CSIDL_DESKTOP,   &pidlDesktop)
==   NOERROR)
{
BROWSEINFO   bi;
bi.hwndOwner   =   this->m_hWnd;
bi.pidlRoot   =   pidlDesktop;
bi.pszDisplayName   =   lpszDisplayName;
bi.lpszTitle   =   "\n�ĵ������Ŀ¼:";
bi.ulFlags   =   BIF_STATUSTEXT&BIF_RETURNONLYFSDIRS   ;
bi.lpfn   =   BrowseProc;
bi.lParam   =   0;
bi.iImage   =   0;
pidlCurrent   =   SHBrowseForFolder(&bi);

SHGetPathFromIDList(pidlCurrent,   szFileName);
path   =   szFileName;
}
}

int outsourcing::FindArray(CStringArray *pArray, CString *pStr)
{
	for(int i=0; i<pArray->GetSize (); i++)
	{
		if(pArray->ElementAt (i)==*pStr)
			return i;
	}
	return -1;
}

void outsourcing::OnDblclkList2(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
    OnBUTmodify();	
	*pResult = 0;
}

void outsourcing::OnBUTexport() 
{
	if(IsHasRights2new(12)==0)return;
	// TODO: Add your control notification handler code here
   POSITION pos;
	pos=m_List1.GetFirstSelectedItemPosition();	
	if(pos==NULL)
	{
		AfxMessageBox("����ѡ����Ҫ����Ƭ�Ķ���!", MB_ICONINFORMATION);
		return;
	}
	int iItem=m_List1.GetNextSelectedItem(pos);	
	CString id=m_List1.GetItemText (iItem, 0);
	CString path;
    path=g_path3+"\\";
	path+=id;
	path +="\\";
 
	CStringArray array;

	CString dir;
    GetSavePath(dir);
    if(dir.IsEmpty())
	{
		return;
	}
	CString name1=m_List1.GetItemText (iItem, 1);
	CString name2=m_List1.GetItemText (iItem, 2);
	dir.TrimRight ('\\');
	dir+="\\";
	dir+=id;
	dir+=name1;
	dir+=name2;
	dir+="��ƺõ�Ƭ";
	dir+="\\";
	::CreateDirectory (dir, NULL);


	CStringArray desarray;
	CStringArray dirarray; 

	CString savepath=dir;
	CString str;
	if(1)
	{
	using namespace helper_coffs;
	ffsco o;
	o.dirs(1);
	o.find(LPCSTR(path), LPCSTR("*.*"));
	ffsco::typeT coo;
	ffsco::typeT::iterator it;
	coo = o.co_dir();
	for (it = coo.begin();
	coo.end() != it;
	it ++) 
	{
		str=(*it).c_str();
		if(FindArray(&dirarray, &str)==-1)
		{
			dirarray.Add (str);
			if(str!=dirarray.ElementAt (0))
			{
				str=savepath+str.Right (str.GetLength ()-dirarray.ElementAt (0).GetLength ());	
				if(::PathFileExists (str)==0)
					::CreateDirectory (str, NULL);
			}

		}
	}
	}
	if(1)
	{
		for(int i=0; i<dirarray.GetSize (); i++)
		{
	using namespace helper_coffs;
	ffsco o;
	o.dirs(0);
	o.find(LPCSTR(dirarray.ElementAt (i)), LPCSTR("*.jpg"));
	ffsco::typeT coo;
	ffsco::typeT::iterator it;
	coo = o.co_file();
	for (it = coo.begin();
	coo.end() != it;
	it ++) 
	{
		str=(*it).c_str();
		if(str.GetAt (str.ReverseFind ('\\')+1)=='s')continue;
		array.Add  (str); 
		desarray.Add  (savepath+dirarray.ElementAt (i).Right (dirarray.ElementAt (i).GetLength ()-dirarray.ElementAt (0).GetLength ())+str.Right (str.GetLength ()-str.ReverseFind ('\\')-1)); 
	}
		}
	}

	if(array.GetSize ()==0)
	{
		AfxMessageBox("�˵�δ��Ƭ!", MB_ICONINFORMATION);
		return;
	}

	ImportPhoto dlg;
	dlg.m_mode =1;
	dlg.m_pArray=&array;
	dlg.m_pDesArray=&desarray;
	dlg.m_savepath =dir;
	dlg.DoModal ();		AfxMessageBox("��Ƭ�ɹ�!", MB_ICONINFORMATION);	
}

void outsourcing::OnBUTmodify() 
{
	// TODO: Add your control notification handler code here
	POSITION pos;
	pos=m_List1.GetFirstSelectedItemPosition();	
	if(pos==NULL)
	{
		return;
	}
	int iItem=m_List1.GetNextSelectedItem(pos);
	CString id=m_List1.GetItemText (iItem, 0);
	while(id=="")
	{
		iItem--;
		id=m_List1.GetItemText (iItem, 0);
	}
	
 	outsourcingDlg dlg;
	dlg.m_id =id;
	dlg.m_name1 =m_List1.GetItemText (iItem, 1);
	dlg.m_name2 =m_List1.GetItemText (iItem, 2);
    if(dlg.DoModal ()!=IDOK)return;

	for(int i=0; i<m_List1array.GetSize (); i++)
	{
		if(id==m_List1array.ElementAt (i).ElementAt (0))
		{
			iItem=i;
			break;
		}
	}

	int pos2;
	CString name;	
	while(id==m_List1array.ElementAt (iItem).ElementAt (0) || m_List1array.ElementAt (iItem).ElementAt (0).IsEmpty ())
	{
		name=m_List1array.ElementAt (iItem).ElementAt (7);
		for(int i=0; i<dlg.m_sparray.GetSize (); i++)
		{
			if(name==dlg.m_sparray.ElementAt (i).ElementAt (0))
			{
				pos2=i;
				break;
			}
		}
		m_List1array.ElementAt (iItem).SetAt (8, dlg.m_sparray .ElementAt (pos2).ElementAt(2));
		m_List1array.ElementAt (iItem).SetAt (9, dlg.m_sparray .ElementAt (pos2).ElementAt(3));
		m_List1array.ElementAt (iItem).SetAt (10, dlg.m_sparray .ElementAt (pos2).ElementAt(4));
		m_List1array.ElementAt (iItem).SetAt (11, dlg.m_sparray .ElementAt (pos2).ElementAt(5));
		iItem++;
		if(iItem>=m_List1array.GetSize ())break;
	}
	FillGrid();
}
void outsourcing::OnBUTmodify2() 
{
	// TODO: Add your control notification handler code here
	if(IsHasRights2new(14)==0)return;
	// TODO: Add your control notification handler code here
	POSITION pos;
	pos=m_List1.GetFirstSelectedItemPosition();	
	if(pos==NULL)
	{
		return;
	}
	int iItem=m_List1.GetNextSelectedItem(pos);
	CString id=m_List1.GetItemText (iItem, 0);
	while(id=="")
	{
		iItem--;
		id=m_List1.GetItemText (iItem, 0);
	}
	
 	outsourcingDlg2 dlg;
	dlg.m_id =id;
	dlg.m_name1 =m_List1.GetItemText (iItem, 1);
	dlg.m_name2 =m_List1.GetItemText (iItem, 2);
    if(dlg.DoModal ()!=IDOK)return;
}

void outsourcing::OnRdblclkList2(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	OnBUTmodify2();
	*pResult = 0;
}

void outsourcing::OnBUTToPhotoPrint() 
{
	// TODO: Add your control notification handler code here
	g_pMainWnd->ToPhotoPrint() ;
}

void outsourcing::OnBUTburncd() 
{
	// TODO: Add your control notification handler code here
}