// CostCal.cpp : implementation file // #include "stdafx.h" #include "ylgl.h" #include "CostCal.h" #include "MyMdi.H" #include "ModifyDinDan.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) { m_filter = _T(""); m_date2 = GetTmFromStr(g_date); m_date1 = m_date2 - CTimeSpan(30, 0, 0, 0); } //m_date1 = m_date2-CTimeSpan(30, 0, 0, 0); CostCal::~CostCal() { } void CostCal::DoDataExchange(CDataExchange* pDX) { MyFormView::DoDataExchange(pDX); 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); } BEGIN_MESSAGE_MAP(CostCal, MyFormView) 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) ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST2, OnCustomdrawList) ON_BN_CLICKED(Btn_ExportExcel, OnBnClickedExportexcel) 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; i < g_userarray.GetSize(); i++) { m_combo1.AddString(g_userarray.ElementAt(i).ElementAt(1)); } m_combo1.GetWindowRect(rc2); ScreenToClient(rc2); rc2.bottom += 200; m_combo1.MoveWindow(rc2); GetDlgItem(IDC_BUTclose)->GetWindowRect(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 < m_List1.m_arLabels.GetSize(); ii++) { m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii)); } } 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(3) == m_filter) 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(3).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); double fsumcost = 0; double fsumsale = 0; float fcost = 0; float fprice = 0; int cot = 0; CString scost; for (int i = m_List1.m_arLabels.GetSize() - 1; i >= 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; i < m_List1.GetItemCount(); i++) { if (g_id == m_List1.GetItemText(i, 0)) { m_List1.SetItemState(i, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); m_List1.EnsureVisible(i, FALSE); break; } } } } void CostCal::OnBUTclose() { GetParent()->SendMessage(WM_CLOSE); } void CostCal::OnButton1() { UpdateData(); m_filter.TrimLeft(); m_filter.TrimRight(); FillGrid(); } void CostCal::OnSelchangeCombo1() { SetTimer(1, 100, NULL); } void CostCal::OnTimer(UINT nIDEvent) { KillTimer(nIDEvent); OnButton1(); } BOOL CostCal::PreTranslateMessage(MSG* pMsg) { 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 (...) { } return TRUE; } 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); pLVCD->clrText = crText; // Tell Windows to paint the control itself. *pResult = CDRF_DODEFAULT; } } void CostCal::OnClickList2(NMHDR* pNMHDR, LRESULT* pResult) { 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"); #if JEFF_TEST_OFF // 2015开始禁用跨年数据; // 这里没有出现又份数据; BOOL bNeedThisYear = 0; int g_nYearposPre = -1; int g_nYearposTemp = g_nYearpos; if (g_nYearpos == -1 && g_hisyeararray.GetSize()) { if (2014 <= atoi(g_date.Left(4))) g_nYearposPre = 0; else g_nYearposPre = -1; bNeedThisYear = FALSE; } #else 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; #endif 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; i < oldsize + ThisYearList1array.GetSize(); i++) { m_List1array.ElementAt(i).Copy(ThisYearList1array.ElementAt(i - oldsize)); } } if (g_nYearposPre != -1)//加去年 { g_nYearpos = g_nYearposPre; CArrayThisYearList1array; 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 < oldsize + ThisYearList1array.GetSize(); i++) { m_List1array.ElementAt(i).Copy(ThisYearList1array.ElementAt(i - oldsize)); } } g_nYearpos = g_nYearposTemp; // double fsumcost=0; // double fsumsale=0; float fcost = 0; float fprice = 0; // int cot=0; CString scost, name; for (int i = m_List1array.GetSize() - 1; 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 < m_sparray.GetSize(); i++) { if (name == m_sparray.ElementAt(i).ElementAt(1)) return atof(m_sparray.ElementAt(i).ElementAt(3)); } return 0; } void CostCal::OnDatetimechangeDatetimepicker1(NMHDR* pNMHDR, LRESULT* pResult) { GetData(); *pResult = 0; } void CostCal::OnDatetimechangeDatetimepicker2(NMHDR* pNMHDR, LRESULT* pResult) { GetData(); *pResult = 0; } void CostCal::OnBnClickedExportexcel() { CString str = "成本核算"; ListToXLS(&m_List1, "c:\\" + str + ".xls", 1); }