// CostCal.cpp : implementation file // #include "stdafx.h" #include "ylgl.h" #include "CostCal.h" #include "MyMdi.H" #include "ModifyDinDan.h" #include "InputPsw.h" #include "ImportPhoto.h" #include "ImportPhoto.h" #include "outsourcingDlg.h" #include "outsourcingDlg2.h" #include "outsourcing2.h" #include "outsourcing3.h" #include "outsourcing4.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #pragma comment(lib, "Shlwapi.lib") ///////////////////////////////////////////////////////////////////////////// // CostCal IMPLEMENT_DYNCREATE(CostCal, MyFormView) CostCal::CostCal() : MyFormView(CostCal::IDD) { //{{AFX_DATA_INIT(CostCal) m_filter = _T(""); m_date2 = GetTmFromStr(g_date); m_date1 = m_date2-CTimeSpan(30, 0, 0, 0); //}}AFX_DATA_INIT } //m_date1 = m_date2-CTimeSpan(30, 0, 0, 0); CostCal::~CostCal() { } void CostCal::DoDataExchange(CDataExchange* pDX) { MyFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CostCal) 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); DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER1, m_date1); DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER2, m_date2); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CostCal, MyFormView) //{{AFX_MSG_MAP(CostCal) ON_BN_CLICKED(IDC_BUTclose, OnBUTclose) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1) ON_WM_TIMER() ON_NOTIFY(NM_CLICK, IDC_LIST2, OnClickList2) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATETIMEPICKER1, OnDatetimechangeDatetimepicker1) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATETIMEPICKER2, OnDatetimechangeDatetimepicker2) //}}AFX_MSG_MAP ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST2, OnCustomdrawList) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CostCal diagnostics #ifdef _DEBUG void CostCal::AssertValid() const { MyFormView::AssertValid(); } void CostCal::Dump(CDumpContext& dc) const { MyFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CostCal message handlers void CostCal::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); m_static1.SetFont (&g_titlefont); #ifdef CHILD_VERSION m_List1.SetHeadings("订单号,100;家长姓名,100;宝宝姓名,100;接单人,100;售价,100;成本,100;商品名称,100;单价,100;数量,100" ); #else m_List1.SetHeadings("订单号,100;男宾姓名,100;女宾姓名,100;接单人,100;售价,100;成本,100;商品名称,100;单价,100;数量,100" ); #endif m_List1.LoadColumnInfo (321); m_List1.m_bSortSupport=0; GetData(); // 与服务器通信,获取信息; for(int i=0; iGetWindowRect(rc2); SetComboHei(&m_combo1, rc2.Height ()); } void CostCal::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=0; i--) { fprice=GetSPPriceFromName(m_List1.m_arLabels.ElementAt (i).ElementAt (6)); fcost+=atof(m_List1.m_arLabels.ElementAt (i).ElementAt (8))*fprice; scost.Format ("%0.2f", fprice); if(m_List1.m_arLabels.ElementAt (i).ElementAt (0)!="") { fsumcost+=fcost; fsumsale+=atof(m_List1.m_arLabels.ElementAt (i).ElementAt (4)); scost.Format ("%0.2f", fcost);fcost=0; cot++; } } scost.Format ("%d", (int)fsumsale); SetDlgItemText(IDC_EDITmoney2, scost); scost.Format ("%d", (int)fsumcost); SetDlgItemText(IDC_EDITmoney3, scost); scost.Format ("%d", (int)(fsumsale-fsumcost)); SetDlgItemText(IDC_EDITmoney4, scost); scost.Format ("%d", (int)(fsumsale/cot)); SetDlgItemText(IDC_EDITmoney5, scost); scost.Format ("%d", (int)(fsumcost/cot)); SetDlgItemText(IDC_EDITmoney6, scost); scost.Format ("%d", (int)((fsumsale-fsumcost)/cot)); SetDlgItemText(IDC_EDITmoney7, scost); scost.Format ("%d", cot); SetDlgItemText(IDC_EDIT1, scost); /////////////////////////////////////////////// CString srate; if(fsumsale>0.1) { srate.Format("%0.1f", 100.0*(fsumsale-fsumcost)/fsumsale); srate+="%"; } else srate="100%"; scost.Format ("单数:%d 总售价:%d 总成本:%d 毛利:%d 毛利率:%s 平均售价:%d 平均成本:%d 平均毛利:%d", cot, (int)fsumsale, (int)fsumcost, (int)(fsumsale-fsumcost), srate,(int)(fsumsale/cot), (int)(fsumcost/cot), (int)((fsumsale-fsumcost)/cot)); SetDlgItemText(IDC_EDIT1, scost); if(!g_id.IsEmpty ()) { for(int i=0; iSendMessage(WM_CLOSE); } void CostCal::OnButton1() { // TODO: Add your control notification handler code here UpdateData(); m_filter.TrimLeft (); m_filter.TrimRight (); FillGrid(); } void CostCal::OnSelchangeCombo1() { // TODO: Add your control notification handler code here SetTimer(1, 100, NULL); } void CostCal::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default KillTimer(nIDEvent); OnButton1(); } BOOL CostCal::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; } } return MyFormView::PreTranslateMessage(pMsg); } catch(...) { } } void CostCal::OnCustomdrawList ( NMHDR* pNMHDR, LRESULT* pResult ) { NMLVCUSTOMDRAW* pLVCD = reinterpret_cast( pNMHDR ); // Take the default processing unless we set this to something else below. *pResult = 0; // First thing - check the draw stage. If it's the control's prepaint // stage, then tell Windows we want messages for every item. if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage ) { *pResult = CDRF_NOTIFYITEMDRAW; } else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage ) { // This is the prepaint stage for an item. Here's where we set the // item's text color. Our return value will tell Windows to draw the // item itself, but it will use the new color we set here. // We'll cycle the colors through red, green, and light blue. COLORREF crText; int pos=pLVCD->nmcd.dwItemSpec; if(pos%2) pLVCD->clrTextBk = g_gridcol1; else pLVCD->clrTextBk = g_gridcol2; while(m_List1.m_arLabels.ElementAt (pos).ElementAt (0).IsEmpty ()) { pos--; if(pos<1)break; } if(atof(m_List1.m_arLabels.ElementAt (pos).ElementAt (5))>atof(m_List1.m_arLabels.ElementAt (pos).ElementAt (4))) crText = RGB(220,0,0); else crText = RGB(20,133,20); // Store the color back in the NMLVCUSTOMDRAW struct. pLVCD->clrText = crText; // Tell Windows to paint the control itself. *pResult = CDRF_DODEFAULT; } } void CostCal::OnClickList2(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here POSITION pos; pos=m_List1.GetFirstSelectedItemPosition(); if(pos==NULL) { return; } int iItem=m_List1.GetNextSelectedItem(pos); g_id=m_List1.GetItemText (iItem, 0); while(g_id=="") { iItem--; g_id=m_List1.GetItemText (iItem, 0); } *pResult = 0; } void CostCal::GetData() { UpdateData(); GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(0); GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(0); CString date1,date2; date1=m_date1.Format("%Y-%m-%d"); date2=m_date2.Format("%Y-%m-%d"); int g_nYearposTemp=g_nYearpos; int g_nYearposPre=-1; BOOL bNeedThisYear=0; if(g_nYearpos==-1 && g_hisyeararray.GetSize ()) g_nYearposPre=0; if(g_nYearpos!=-1) bNeedThisYear=1; if(m_sparray.GetSize ()==0) { g_sendhead.bsql=0; g_sendhead.code[0]=224; g_sendhead.code[1]=4; g_sendhead.tabcount=2; CString filter="time1>='"+date1+"' and time1<='"+date2+"';"; g_pMainWnd->ProcessChatMessageRequest2(filter); if(g_bSendOK==0) { GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(1); GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(1); g_nYearpos=g_nYearposTemp; return; } DataToArray(&m_List1array,&m_sparray); } else { g_sendhead.bsql=0; g_sendhead.code[0]=224; g_sendhead.tabcount=1; CString filter="time1>='"+date1+"' and time1<='"+date2+"'"; g_pMainWnd->ProcessChatMessageRequest2(filter); if(g_bSendOK==0) { GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(1); GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(1); g_nYearpos=g_nYearposTemp; return; } DataToArray(&m_List1array); } if(bNeedThisYear)//加今年 { g_nYearpos=-1;//今年 CArrayThisYearList1array; if(m_sparray.GetSize ()==0) { g_sendhead.bsql=0; g_sendhead.code[0]=224; g_sendhead.code[1]=4; g_sendhead.tabcount=2; CString filter="time1>='"+date1+"' and time1<='"+date2+"';"; g_pMainWnd->ProcessChatMessageRequest2(filter); if(g_bSendOK==0) { GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(1); GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(1); g_nYearpos=g_nYearposTemp; return; } DataToArray(&ThisYearList1array,&m_sparray); } else { g_sendhead.bsql=0; g_sendhead.code[0]=224; g_sendhead.tabcount=1; CString filter="time1>='"+date1+"' and time1<='"+date2+"'"; g_pMainWnd->ProcessChatMessageRequest2(filter); if(g_bSendOK==0) { GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(1); GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(1); g_nYearpos=g_nYearposTemp; return; } DataToArray(&ThisYearList1array); } int oldsize=m_List1array.GetSize (); m_List1array.SetSize(oldsize+ThisYearList1array.GetSize ()); for(int i=oldsize; iThisYearList1array; g_sendhead.bsql=0; g_sendhead.code[0]=224; g_sendhead.tabcount=1; CString filter="time1>='"+date1+"' and time1<='"+date2+"'"; g_pMainWnd->ProcessChatMessageRequest2(filter); if(g_bSendOK==0) { GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(1); GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(1); g_nYearpos=g_nYearposTemp; return; } DataToArray(&ThisYearList1array); int oldsize=m_List1array.GetSize (); m_List1array.SetSize(oldsize+ThisYearList1array.GetSize ()); for(int i=oldsize; i=0; i--) { name=m_List1array.ElementAt (i).ElementAt (6); // name.MakeLower (); if(name.GetLength ()>2) { if(name.Right (2)=="x2"||name.Right (2)=="x3"||name.Right (2)=="x4"||name.Right (2)=="x5"||name.Right (2)=="x6"||name.Right (2)=="x7"||name.Right (2)=="x8"||name.Right (2)=="x9") { scost=name.Right (2); scost.Delete (0); name=name.Left (name.GetLength ()-2); // m_List1array.ElementAt (i).SetAt (6, name); m_List1array.ElementAt (i).SetAt (8, scost); } if(name.Right (2)=="X2"||name.Right (2)=="X3"||name.Right (2)=="X4"||name.Right (2)=="X5"||name.Right (2)=="X6"||name.Right (2)=="X7"||name.Right (2)=="X8"||name.Right (2)=="X9") { scost=name.Right (2); scost.Delete (0); name=name.Left (name.GetLength ()-2); // m_List1array.ElementAt (i).SetAt (6, name); m_List1array.ElementAt (i).SetAt (8, scost); } if(name.Right (3)=="X10") { scost=name.Right (3); scost.Delete (0); name=name.Left (name.GetLength ()-3); // m_List1array.ElementAt (i).SetAt (6, name); m_List1array.ElementAt (i).SetAt (8, scost); } if(name.Right (3)=="x10") { scost=name.Right (3); scost.Delete (0); name=name.Left (name.GetLength ()-3); // m_List1array.ElementAt (i).SetAt (6, name); m_List1array.ElementAt (i).SetAt (8, scost); } } fprice=GetSPPriceFromName(name); fcost+=atof(m_List1array.ElementAt (i).ElementAt (8))*fprice; scost.Format ("%0.2f", fprice); m_List1array.ElementAt (i).SetAt (7, scost); if(m_List1array.ElementAt (i).ElementAt (0)!="") { // fsumcost+=fcost; // fsumsale+=atof(m_List1array.ElementAt (i).ElementAt (4)); scost.Format ("%0.2f", fcost);fcost=0; m_List1array.ElementAt (i).SetAt (5, scost); // cot++; } } /* scost.Format ("%d", (int)fsumsale); SetDlgItemText(IDC_EDITmoney2, scost); scost.Format ("%d", (int)fsumcost); SetDlgItemText(IDC_EDITmoney3, scost); scost.Format ("%d", (int)(fsumsale-fsumcost)); SetDlgItemText(IDC_EDITmoney4, scost); scost.Format ("%d", (int)(fsumsale/cot)); SetDlgItemText(IDC_EDITmoney5, scost); scost.Format ("%d", (int)(fsumcost/cot)); SetDlgItemText(IDC_EDITmoney6, scost); scost.Format ("%d", (int)((fsumsale-fsumcost)/cot)); SetDlgItemText(IDC_EDITmoney7, scost); scost.Format ("%d", cot); SetDlgItemText(IDC_EDIT1, scost);*/ FillGrid(); GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(1); GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(1); } float CostCal::GetSPPriceFromName(CString name) { int pos=name.Find (","); if(pos!=-1) { float fret=0.0; while(pos!=-1) { fret+=GetSPPriceFromName(name.Left (pos)); name=name.Right (name.GetLength ()-pos-1); pos=name.Find (","); } fret+=GetSPPriceFromName(name); return fret; } for(int i=0; i