// IncomeInput.cpp : implementation file
//
#include "stdafx.h"
#include "ylgl.h"
#include "IncomeInput.h"
#include "MyMdi.H"
#include "SelPayType.h"
#include "Login2.h"
#include "SelExpendType.h"

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

/////////////////////////////////////////////////////////////////////////////
// IncomeInput

IMPLEMENT_DYNCREATE(IncomeInput, MyFormView)

IncomeInput::IncomeInput()
: MyFormView(IncomeInput::IDD)
{
	//{{AFX_DATA_INIT(IncomeInput)
	m_bz = _T("");
	m_date = g_date;
	m_money = _T("");
	m_name = _T("");
	m_renyuan1 = _T("");
	m_renyuan2 = g_user.name;
	m_year = atoi(g_date.Mid(0, 4));
	m_month = atoi(g_date.Mid(5, 2));
	m_day = atoi(g_date.Mid(8, 2));
	m_bInit = 0;
	//}}AFX_DATA_INIT
}

IncomeInput::~IncomeInput()
{
}

void IncomeInput::DoDataExchange(CDataExchange* pDX)
{
	MyFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(IncomeInput)
	DDX_Control(pDX, IDC_EDITdate, m_datectrl);
	DDX_Control(pDX, IDC_SPIN3, m_spinday);
	DDX_Control(pDX, IDC_SPIN2, m_spinmonth);
	DDX_Control(pDX, IDC_SPIN1, m_spinyear);
	DDX_Control(pDX, IDC_COMBO2, m_comboren);
	DDX_Control(pDX, IDC_EDITmoney, m_editctrl1);
	DDX_Control(pDX, IDC_LIST2, m_List1);
	DDX_Control(pDX, IDC_STATIC1, m_static1);
	DDX_Text(pDX, IDC_EDITbz, m_bz);
	DDV_MaxChars(pDX, m_bz, 1000);
	DDX_Text(pDX, IDC_EDITdate, m_date);
	DDX_Text(pDX, IDC_EDITmoney, m_money);
	DDX_Text(pDX, IDC_EDITname, m_name);
	DDX_Text(pDX, IDC_EDITrenyuan1, m_renyuan1);
	DDX_Text(pDX, IDC_EDITrenyuan2, m_renyuan2);
	DDX_Text(pDX, IDC_EDITyear, m_year);
	DDV_MinMaxUInt(pDX, m_year, 1900, 3000);
	DDX_Text(pDX, IDC_EDITmonth, m_month);
	DDV_MinMaxUInt(pDX, m_month, 1, 12);
	DDX_Text(pDX, IDC_EDITday, m_day);
	DDV_MinMaxUInt(pDX, m_day, 1, 31);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(IncomeInput, MyFormView)
	//{{AFX_MSG_MAP(IncomeInput)
	ON_BN_CLICKED(IDC_BUTsave, OnBUTsave)
	ON_BN_CLICKED(IDC_BUTdel, OnBUTdel)
	ON_BN_CLICKED(IDC_BUTclose, OnBUTclose)
	ON_NOTIFY(NM_CLICK, IDC_LIST2, OnClickList2)
	ON_EN_CHANGE(IDC_EDITyear, OnChangeEDITyear)
	ON_EN_CHANGE(IDC_EDITmonth, OnChangeEDITmonth)
	ON_EN_CHANGE(IDC_EDITday, OnChangeEDITday)
	ON_BN_CLICKED(IDC_BUTprint, OnBUTprint)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// IncomeInput diagnostics

#ifdef _DEBUG
void IncomeInput::AssertValid() const
{
	MyFormView::AssertValid();
}

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

/////////////////////////////////////////////////////////////////////////////
// IncomeInput message handlers

void IncomeInput::OnInitialUpdate()
{
	MyFormView::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);

	GetDlgItem(IDC_BUTdel)->EnableWindow(IsHasRights2new(59));

	m_static1.SetFont(&g_titlefont);

	m_List1.SetHeadings("id,0;��Ŀ����, 160;���, 100;����, 120;������,100;������,100;��ע,120");
	m_List1.LoadColumnInfo(106);
	m_spinyear.SetRange(1900, 3000);
	m_spinmonth.SetRange(1, 12);
	m_spinday.SetRange(1, 31);

	m_comboren.GetWindowRect(rc2);
	ScreenToClient(rc2);
	rc2.bottom += 400;
	m_comboren.MoveWindow(rc2);
	for (int i = 0; i < g_userarray.GetSize(); i++)
		m_comboren.AddString(g_userarray.ElementAt(i).ElementAt(1));
	m_bInit = 1;
	GetData();
}

void IncomeInput::FillGrid()
{
	m_List1.DeleteAllItems2();
	int ii = 0;
	m_List1.m_arLabels.SetSize(m_List1array.GetSize(), 1);
	int count = 0;
	for (ii = 0; ii < m_List1.m_arLabels.GetSize(); ii++)
	{

		m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii));

	}
	m_List1.m_arLabels.SetSize(count, 1);
	ii = count;
	m_List1.m_LabelCount = ii;
	m_List1.SetItemCountEx(ii);
}

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

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

void IncomeInput::ListSelChange()
{
	POSITION pos;
	pos = m_List1.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		ClearCtrl();
		return;
	}
	int iItem = m_List1.GetNextSelectedItem(pos);

	CString id = m_List1.GetItemText(iItem, 0);
	for (int ii = 0; ii < m_List1array.GetSize(); ii++)
	{
		if (m_List1array.ElementAt(ii).ElementAt(0) == id)
		{
			m_renyuan1 = m_List1array.ElementAt(ii).ElementAt(4);
			m_name = m_List1array.ElementAt(ii).ElementAt(1);
			m_money = m_List1array.ElementAt(ii).ElementAt(2);

			m_date = m_List1array.ElementAt(ii).ElementAt(3);
			m_renyuan2 = m_List1array.ElementAt(ii).ElementAt(5);
			m_bz = m_List1arrayBak.ElementAt(ii).ElementAt(6);

			UpdateData(false);
			break;
		}
	}
	GetDlgItem(IDC_BUTsave)->EnableWindow(0);
}

//����
void IncomeInput::OnBUTsave()
{
	// TODO: Add your control notification handler code here
	UpdateData();
	if (!CheckDateOK(m_date))return;
	if (g_nYearpos != -1)
	{
		AfxMessageBox("��ǰΪ��ʷ���ݲ鿴״̬,���ܸ�����ʷ����!", MB_ICONSTOP);
		return;
	}
	m_name.TrimRight();
	if (m_name.IsEmpty())
	{
		AfxMessageBox("���ϲ�ȫ!", MB_ICONINFORMATION);
		return;
	}
	SelPayType seltype;
	seltype.m_mode = 1;
	if (seltype.DoModal() != IDOK)return;
	CString paytype;
	if (seltype.m_radio1 == 0)
		paytype = "�ֽ�";
	else if (seltype.m_radio1 == 1)
		paytype = "POS��ˢ��";
	else if (seltype.m_radio1 == 4)
		paytype = "����ת��";
	else if ( seltype.m_radio1 == 5)
		paytype = "����ȯ";
	else if(seltype.m_radio1 == 6)
		paytype = "֧����";
	else if(seltype.m_radio1 == 7)
		paytype = "�Ƹ�ͨ";
	else if(seltype.m_radio1 == 8)
		paytype = "΢��֧��";
	else if(seltype.m_radio1 == 9)
		paytype = seltype.m_strCustomPayType;

	CString jdd = _T("");
	if (atoi(g_cominfoarray.ElementAt(0).ElementAt(115)))
	{
		//����վ��
		SelExpendType dlg;
		dlg.m_mode = 3;
		if (dlg.DoModal() == IDOK)
			jdd = dlg.m_sel;
		else
		{
			MessageBox(_T("��ѡ��վ��"));
			return;
		}
	}

	CString sql = _T("");
	sql.Format("insert into singleincome([name],[money],[dat],[renyuan1],[renyuan2],[bz],[paytype],[time],[jdd])values('%s','%s','%s','%s','%s','%s','%s','curtimereplace','%s')", m_name, m_money, m_date, m_renyuan1, m_renyuan2, m_bz, paytype, jdd);
	sql += SGLIN_REF;
	g_sendhead.bsql = 1;
	g_pMainWnd->ProcessChatMessageRequest2(sql); if (g_bSendOK == 0)return;

	AfxMessageBox("����ɹ�!", MB_ICONINFORMATION);
	GetData();
}

void IncomeInput::OnBUTdel()
{
	// TODO: Add your control notification handler code here
	if (IsHasRights2new(59) == 0)return;
	POSITION pos;
	pos = m_List1.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		return;
	}
	if (AfxMessageBox("ȷ��ɾ����?", MB_YESNO | MB_ICONINFORMATION) != IDYES)return;
	int iItem = m_List1.GetNextSelectedItem(pos);
	CString id = m_List1.GetItemText(iItem, 0);
	CString bz = m_List1.GetItemText(iItem, 1);
	CString money = m_List1.GetItemText(iItem, 2);
	CString date = m_List1.GetItemText(iItem, 3);

	CString sql;
	sql.Format("delete from singleincome where id=%d ", atoi(id));
	sql += SGLIN_REF;
	g_sendhead.bsql = 1;
	g_pMainWnd->ProcessChatMessageRequest2(sql); if (g_bSendOK == 0)return;
	GetData();

	CString str;
	str = "ɾ����������";
	str += bz;
	str += "���:";
	str += money;
	str += "����:";
	str += date;

	WriteLog(_T("��������"), str);
}

void IncomeInput::GetData()
{
	if (m_bInit == 0)return;
	m_spinyear.EnableWindow(0);
	m_spinmonth.EnableWindow(0);
	m_spinday.EnableWindow(0);

	UpdateData();
	CString sql, strdate;
	strdate.Format("%04d-%02d-%02d", m_year, m_month, m_day);
	sql.Format("dat='" + strdate + "' and sale2type='' or dat='" + strdate + "' and sale2type is null");

	g_sendhead.bsql = 0;
	g_sendhead.code[0] = 87;
	g_sendhead.tabcount = 1;
	g_pMainWnd->ProcessChatMessageRequest2(sql);
	if (g_bSendOK == 0)
	{

		m_spinyear.EnableWindow(1);
		m_spinmonth.EnableWindow(1);
		m_spinday.EnableWindow(1);

		return;
	}
	DataToArray(&m_List1array);
	m_List1arrayBak.SetSize(m_List1array.GetSize());
	for (int i = 0; i < m_List1array.GetSize(); i++)
	{
		m_List1arrayBak.ElementAt(i).Copy(m_List1array.ElementAt(i));
		if (m_List1array.ElementAt(i).ElementAt(6).GetLength()>256)
			m_List1array.ElementAt(i).SetAt(6, m_List1array.ElementAt(i).ElementAt(6).Left(256) + "..");
	}

	FillGrid();


	m_spinyear.EnableWindow(1);
	m_spinmonth.EnableWindow(1);
	m_spinday.EnableWindow(1);

}

void IncomeInput::ClearCtrl()
{
	UpdateData();

	m_date = g_date;
	m_bz = _T("");
	m_money = _T("");
	m_name = _T("");
	m_renyuan1 = _T("");
	m_renyuan2 = g_user.name;
	m_comboren.SetCurSel(-1);
	UpdateData(false);
	GetDlgItem(IDC_BUTsave)->EnableWindow(1);
}

void IncomeInput::OnChangeEDITyear()
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the MyFormView::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	GetData();
	// TODO: Add your control notification handler code here

}

void IncomeInput::OnChangeEDITmonth()
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the MyFormView::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	GetData();
	// TODO: Add your control notification handler code here

}

void IncomeInput::OnChangeEDITday()
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the MyFormView::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	GetData();
	// TODO: Add your control notification handler code here

}

BOOL IncomeInput::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 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;
			}
		}
		return MyFormView::PreTranslateMessage(pMsg);
	}
	catch (...)
	{
	}
}

void IncomeInput::OnBUTprint()
{
	// TODO: Add your control notification handler code here
	POSITION pos;
	pos = m_List1.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		AfxMessageBox("����ѡ����Ҫ�򵥵���Ŀ!", MB_ICONINFORMATION);
		return;
	}
	int iItem;
	iItem = m_List1.GetNextSelectedItem(pos);
	CStringArray array;
	array.Add("");
	array.Add(g_cominfoarray.ElementAt(0).ElementAt(48));
	array.Add("");
	CString str = "��ַ:" + g_cominfoarray.ElementAt(0).ElementAt(12);
	str += "   �绰:" + g_cominfoarray.ElementAt(0).ElementAt(11);
	array.Add(str);
	CString name = m_List1.GetItemText(iItem, 4);
	array.Add("�ͻ�����:" + name);
	array.Add("");
	CString date;
	date.Format("����:%s��%s��%s��", g_date.Mid(0, 4), g_date.Mid(5, 2), g_date.Mid(8, 2));
	array.Add(date);
	array.Add(" �� �� �� Ŀ ");
	array.Add(" ��  ��  ");
	array.Add(" ������  ");
	int count = 0;
	float money = 0;
	//	while (pos)
	{
		count++;
		//	if(count>4)break;
		array.Add(m_List1.GetItemText(iItem, 1));

		array.Add(m_List1.GetItemText(iItem, 2));
		money += atof(m_List1.GetItemText(iItem, 2));

		array.Add("");
	}

#ifndef ZHIAI_VERSION
	while (array.GetSize() < 22)
		array.Add("");
#else
	while(array.GetSize ()<31)
		array.Add ("");	
#endif
	CString smoney;
	smoney.Format("%0.1f", money);

	if (atoi(g_cominfoarray.ElementAt(0).ElementAt(87)))//��
	{
		str = "�������        Ӧ��:" + smoney;
		str += "     ʵ��:" + smoney;
		str += "     Ƿ��:0";
		array.Add(str);
		str.Format("�ϼ������(��д):           %s �f   %s Ǫ   %s ��   %s ʰ   %s Ԫ", \
			GetHMoney(GetW(smoney)), GetHMoney(GetK(smoney)), GetHMoney(GetB(smoney)), GetHMoney(GetS(smoney)), GetHMoney(GetG(smoney)));
	}
	else
	{
		str = "�������             Ӧ��:" + smoney;
		str += "          ʵ��:" + smoney;
		str += "          Ƿ��:0";
		array.Add(str);
		str.Format("�ϼ������(��д):                %s �f     %s Ǫ     %s ��     %s ʰ     %s Ԫ", \
			GetHMoney(GetW(smoney)), GetHMoney(GetK(smoney)), GetHMoney(GetB(smoney)), GetHMoney(GetS(smoney)), GetHMoney(GetG(smoney)));
	}

	array.Add(str);


	array.Add(g_cominfoarray.ElementAt(0).ElementAt(120));

	if (atoi(g_cominfoarray.ElementAt(0).ElementAt(87)))//��
		array.Add("����:" + g_user.name);
	else
		array.Add("                ����:" + g_user.name);
	array.Add("�˿�ǩ��:");
	array.Add("��\r\nһ\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��\r\n��");
	g_pMainWnd->PrintReceipt(&array);	// �������� ��ʹ��PrintReceipt_01,����Ҫ��ʾ֧����ʽ Jeff
}

void IncomeInput::OnButton1()
{
	// TODO: Add your control notification handler code here
	Login2 dlg;
	dlg.m_mode = 3;
	if (dlg.DoModal() != IDOK)return;
	if (IsHasRightsnew2(49, dlg.m_rights) == 0)return;
	((CEdit*)GetDlgItem(IDC_EDITdate))->SetReadOnly(0);

}