#include #include #include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) FCL : public listwin { public: xcombobox ddlb_1; int changeddlb; xdwgrid dw_list; int m_PageSize; //ÿҳÏÔʾÊýÁ¿ int m_PageIndex; //µÚ¼¸Ò³ xstring m_QueryTxt; //²éѯÌõ¼þ xdwtable dw_base; xnode m_agentNode; //Agent Condition xstring m_agentCond; //Agent Node xstring m_config; xstring m_spec; public: FCL(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {} public: static FCL* CreateInstance(void* implPtr, void* hWnd) { FCL* pWin = new FCL(implPtr, (HWND)hWnd); return pWin; } int SetAgent() { xstring xfNodeAgentArea = L"agentarea"; xnode anode = GetAgentNode(xfNodeAgentArea); if (m_agentNode) { SetAgentNode(anode, m_agentNode); } else { KXMLDOMElement xframeElement = GetElement(); KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*"); if (agent) { xstring s = agent.xml(); m_agentNode = SetAgentNode(anode, s); } } return 1; } int OnRetrieve() { xaserverarg arg; xdwpages zz = GetControl(L"pages"); xml x; getUrl(L"/sale/data/FCL/entity/list", arg.GetString(), x); KXMLDOMElement e = x.documentElement(); if (e.selectSingleNode(L"@TotalPage")) { xstring s = e.selectSingleNode(L"@TotalPage").text(); //×ÜÊýÁ¿ zz.SetMaxPage(s.toInt()); } dw_list.Retrieve(x); dw_list.Redraw(); return 1; } int SetPriceBaseEmpty() { int rows = dw_base.GetColumnCount(); int i; for (i = 1; i <= rows; i++) { dw_base.SetItemString(1, i, L""); //dw_base.SetItemDisplayString(1,i,L""); } dw_base.ResetUpdateStatus(); dw_base.Redraw(); return 1; } int SetCellEdit(int row, xstring name, xstring value, xstring display) { dw_base.SetItemString(row, name.c_str(), value); dw_base.Redraw(); if (display != L"") { dw_base.SetItemDisplayString(row, name.c_str(), display); } dw_base.AcceptText(); dw_base.ResetUpdateStatus(); dw_base.Redraw(); return 1; } int OnSetCTGValue(int row) { dw_base.AcceptText(); SetPriceBaseEmpty(); KXMLDOMElement e = dw_list.GetRowElement(row); auto list = e.selectNodes(L"*"); if (list) { int s = list.length(); int i; for (i = 0; i < s; i++) { xml x; ; KXMLDOMElement xitem = list.item(i); x.loadXML(xitem.xml()); //trace(xitem.xml); KXMLDOMElement e1 = x.documentElement(); xstring name = e1.tagName(); trace(name); trace(e1.text()); xstring display; if (e1.selectSingleNode(L"@_displaystring")) { display = e1.selectSingleNode(L"@_displaystring").text(); SetCellEdit(1, name, e1.text(), L"" + display); } else SetCellEdit(1, name, e1.text(), L""); } } return 1; } int OnRowClicked(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; OnSetCTGValue(row); return 1; } int setMaint() { xml x; dw_base.DwUpdateAllTo(x); int row = dw_list.GetRow(); dw_list.SetItemString(row, L"PriceInfo", x.xml()); return 1; } int SetTotalAmount(int row, xstring name) { if (name == L"price20base" || name == L"price20BAF" || name == L"price20CAF" || name == L"price20add" || name == L"price20comm" || name == L"price20other") { double price20base = dw_base.GetItemString(row, L"price20base").toDouble(); double price20BAF = dw_base.GetItemString(row, L"price20BAF").toDouble(); double price20CAF = dw_base.GetItemString(row, L"price20CAF").toDouble(); double price20add = dw_base.GetItemString(row, L"price20add").toDouble(); double price20comm = dw_base.GetItemString(row, L"price20comm").toDouble(); double price20other = dw_base.GetItemString(row, L"price20other").toDouble(); double price20 = price20base + price20BAF + (price20CAF / 100) * price20base + price20add - (price20comm / 100) * price20base + price20other; dw_base.SetItemString(1, L"price20", xstring(price20)); } if (name == L"price40base" || name == L"price40BAF" || name == L"price40CAF" || name == L"price40add" || name == L"price40comm" || name == L"price40other") { double price40base = dw_base.GetItemString(row, L"price40base").toDouble(); double price40BAF = dw_base.GetItemString(row, L"price40BAF").toDouble(); double price40CAF = dw_base.GetItemString(row, L"price40CAF").toDouble(); double price40add = dw_base.GetItemString(row, L"price40add").toDouble(); double price40comm = dw_base.GetItemString(row, L"price40comm").toDouble(); double price40other = dw_base.GetItemString(row, L"price40other").toDouble(); double price40 = price40base + price40BAF + (price40CAF / 100) * price40base + price40add - (price40comm / 100) * price40base + price40other; dw_base.SetItemString(1, L"price40", xstring(price40)); } if (name == L"price40Hbase" || name == L"price40HBAF" || name == L"price40HCAF" || name == L"price40Hadd" || name == L"price40Hcomm" || name == L"price40Hother") { double price40Hbase = dw_base.GetItemString(row, L"price40Hbase").toDouble(); double price40HBAF = dw_base.GetItemString(row, L"price40HBAF").toDouble(); double price40HCAF = dw_base.GetItemString(row, L"price40HCAF").toDouble(); double price40Hadd = dw_base.GetItemString(row, L"price40Hadd").toDouble(); double price40Hcomm = dw_base.GetItemString(row, L"price40Hcomm").toDouble(); double price40Hother = dw_base.GetItemString(row, L"price40Hother").toDouble(); double price40H = price40Hbase + price40HBAF + (price40HCAF / 100) * price40Hbase + price40Hadd - (price40Hcomm / 100) * price40Hbase + price40Hother; dw_base.SetItemString(1, L"price40h", xstring(price40H)); } return 1; } int OnPriceBaseChanged(TEvent* evt, LPARAM p) { trace(L"123"); DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; xstring name = hdr.colname; xstring value = hdr.data; SetTotalAmount(1, name); xstring price20 = dw_base.GetItemString(1, L"price20"); xstring price40 = dw_base.GetItemString(1, L"price40"); xstring price40h = dw_base.GetItemString(1, L"price40h"); dw_list.SetItemString(dw_list.GetRow(), L"price20", price20); dw_list.SetItemString(dw_list.GetRow(), L"price40", price40); dw_list.SetItemString(dw_list.GetRow(), L"price40h", price40h); dw_list.Redraw(); setMaint(); return 1; } int OnListChanged(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; xstring colname = hdr.colname; xstring value = hdr.data; if (colname == L"port") { xml x; xaserverarg arg; arg.AddArg(L"code", value); if (getUrl(L"/sale/data/FCL/pref/shipthread", arg.GetString(), x) != 1) { trace(x.xml()); } KXMLDOMElement e = x.documentElement(); dw_list.SetItemString(row, L"shipthread", e.text()); dw_list.Redraw(); } return 1; } int OnChangePages(TEvent* evt, LPARAM p) { PAGENMHDR& h = *(PAGENMHDR*)evt->notify.pnmh; int c = h.cur; HCURSOR hCursor = xutil::SetCursorWait(); m_pageIndex = c; OnRetrieve(); xutil::RestoreCursor(hCursor); return 1; } int onSave() { xml x; dw_list.DwUpdateAllToEx(x); trace(x.xml()); return 1; } int OnAddrow() { int row = dw_list.InsertRow(0); dw_list.SetItemString(row, L"modifieddate", publiccode::GetCurrentDate()); SetPriceBaseEmpty(); return 1; } int OnInsertRow() { int row = dw_list.GetRow(); if (row < 1) return 0; int newrow = dw_list.InsertRow(row); dw_list.SetItemString(newrow, L"modifieddate", publiccode::GetCurrentDate()); SetPriceBaseEmpty(); return 1; } int OnDeleteRow() { int row = dw_list.GetRow(); if (row > 0 && row <= dw_list.GetRowCount()) { dw_list.DeleteRow(row); //OnSetCTGValue(row); } return 1; } int OnCmdDispatch(xstring comdid) { if (comdid.find(L"add", 0) >= 0) OnAddrow(); else if (comdid.find(L"insert", 0) >= 0) OnInsertRow(); else if (comdid.find(L"del", 0) >= 0) OnDeleteRow(); else if (comdid.find(L"save", 0) >= 0) onSave(); return 1; } int OnSetFocus(TEvent* evt, LPARAM p) { SetAgent(); return 1; } int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } int OnItemError(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; xstring value = hdr.data; int e = hdr.idFrom; if (e == -1000) alert(L"¡¾" + value + L"¡¿²»ÊÇÓÐЧµÄÊý×Ö!"); if (e == -1001) alert(L"¡¾" + value + L"¡¿²»ÊÇÓÐЧµÄÊý×Ö!"); if (e == -1002) alert(L"¡¾" + value + L"¡¿²»ÊÇÓÐЧµÄÈÕÆÚ!"); return 1; } int OnAttachEvent() { AttachEvent(L"WM_XCOMMAND", (FEvent)&FCL::OnXCommand); AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&FCL::OnRowClicked); AttachEvent(L"WM_SETFOCUS", (FEvent)&FCL::OnSetFocus); AttachEvent(L"pages", L"PAGE_CLICK", (FEvent)&FCL::OnChangePages); AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&FCL::OnPriceBaseChanged); AttachEvent(L"dw_base", L"DWV_ITEMERROR", (FEvent)&FCL::OnItemError); AttachEvent(L"dw_list", L"DWV_ITEMCHANGED", (FEvent)&FCL::OnListChanged); return 1; } int OnInit() { dw_list = GetControl(L"dw_list"); dw_list.openUrl(L"/sale/view/FCL/template/FCL/List"); dw_base = GetControl(L"dw_base"); dw_base.openUrl(L"/sale/view/FCL/template/FCL/pricebase"); dw_list.SetReadOnlyColumn(L"shipthread", true); dw_list.SetReadOnlyColumn(L"price20", true); dw_list.SetReadOnlyColumn(L"price40", true); dw_list.SetReadOnlyColumn(L"price40h", true); return 1; } int onload() { m_PageSize = 30; //ÿҳÏÔʾÊýÁ¿ m_PageIndex = 1; //µÚ¼¸Ò³ m_QueryTxt = L""; //²éѯÌõ¼þ OnInit(); OnAttachEvent(); OnRetrieve(); SetAgent(); return 1; } };