ÿþ#include <wobject/xstring.hpp> #include <xcontrol/xtreeview.hpp> #include <xcontrol/xdwgrid.hpp> #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) Quote3list : public listwin { public: xstring m_sType; //h -N„v{|‹W xstring m_sTypeTxt; //h -N„vpenc xstring urlTree; xstring myDataUrl; xcombobox ddlb_1; xtreeview tv_folder; xdwgrid dw_goods; int changeddlb; public: Quote3list(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {} public: static Quote3list* CreateInstance(void* implPtr, void* hWnd) { Quote3list* pWin = new Quote3list(implPtr, (HWND)hWnd); return pWin; } //process tree //åg~bS_MRhy˜„vv˜§~îvU_ HTREEITEM LookupTopFolder(HTREEITEM hItem) { HTREEITEM hRoot = tv_folder.GetRootItem(); while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem); return hItem; } int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image) { KXMLDOMNodeList nlist = ele.selectNodes(L"item"); int len = nlist.length(); if (len > 0) tv_folder.SetItemChild(hItem, 1); for (int i = 0; i < len; i++) { KXMLDOMElement* e = new KXMLDOMElement(nlist.item(i)); xstring name = e->getAttribute(L"name"); HTREEITEM h = tv_folder.InsertChildItem(hItem, name, (LPARAM)e, image); ExpandCatChildFolder(h, *e, 35); } return 1; } int ExpandFolderItem(HTREEITEM hItem, xstring no) { xml x = ViewObject::RetrieveData(GetServerUrl(), urlTree, L"no", no); if (!x) return 0; KXMLDOMNodeList nlist = x.selectNodes(L"/data/item"); int len = nlist.length(); for (int i = 0; i < len; i++) { KXMLDOMElement* e = new KXMLDOMElement(nlist.item(i)); xstring name = e->getAttribute(L"name"); HTREEITEM h = tv_folder.InsertChildItem(hItem, name, (LPARAM)e, 35); ExpandCatChildFolder(h, *e, 35); } return 1; } //hU\_ int OnTreeExpanding(TEvent* evt, LPARAM p) { NMTREEVIEW* nmtv = (NMTREEVIEW*)evt->notify.pnmh; HTREEITEM hItem = nmtv->itemNew.hItem; HTREEITEM hTopItem = LookupTopFolder(hItem); xstring name = tv_folder.GetItemLabel(hTopItem); HTREEITEM child = tv_folder.GetChildItem(hItem); KXMLDOMElement* e = (KXMLDOMElement*)tv_folder.GetItemData(hItem); if (!child)ExpandFolderItem(hItem, e->getAttribute(L"no")); return 1; } int ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement) { KXMLDOMNodeList nlist = pElement.selectNodes(L"Item"); int len = nlist.length(); for (int i = 0; i < len; i++) { KXMLDOMElement& e = *new KXMLDOMElement(nlist.item(i)); xstring name = e.getAttribute(L"name"); xstring sImage = e.getAttribute(L"image"); xstring child = e.getAttribute(L"child"); int image = 15; if (sImage) image = sImage.toInt(); HTREEITEM h = tv_folder.InsertChildItem(hItem, name, (LPARAM)&e, image); if (child != L"no") tv_folder.SetItemChild(h, 1); ExpandChildFolder(h, e); } return 1; } int InitialFolder() { KXMLDOMElement xframeElement = GetElement(); KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial"); if (e)ExpandChildFolder(0, e); return 1; } int OnTreeSelChanged(TEvent* evt, LPARAM p) { return OnPreRetrieve(); } int ViewUpdate(int pr, xstring updateItem, xaserverarg arg) { if (updateItem == L"del") { int DelRow = dw_list.GetRow(); dw_list.DeleteRow(DelRow); } else if (updateItem == L"setstate") { int row = dw_list.GetRow(); if (row < 1) return 1; KXMLDOMElement ele = dw_list.GetRowElement(row); xstring id = GetEntityIDName(1); xstring entity = ele.selectSingleNode(id).text(); //trace(entity); SetAgent(L"list", entity); if (arg.GetArgString(L"state") != L"") //this.dw_list.SetItemString(row, L"ApprovalStatus", arg.GetArgString(L"state")); dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state")); if (arg.GetArgString(L"billstatus") != L"") { xstring billstatus = arg.GetArgString(L"billstatus"); xstring statusName = GetBillStatusName(billstatus); dw_list.SetItemString(row, L"ApprovalStatus", billstatus); dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName); } dw_list.Redraw(); } return 1; } bool IsEmptyQueryStr(xstring queryStr) { if (queryStr == L"") return true; if (queryStr == L"<items join='and'/>") return true; if (queryStr == L"<items join=\"and\"/>") return true; trace(queryStr); return false; } //Àh"} int OnPreRetrieve() { HTREEITEM hItem = tv_folder.GetSelectedItem(); if (!hItem) return 1; HCURSOR hCursor = xutil::SetCursorWait(); KXMLDOMElement& e1 = *(KXMLDOMElement*)tv_folder.GetItemData(hItem); xstring no = e1.getAttribute(L"no"); xml x = 0; if (!(no == L"Category:All" && IsEmptyQueryStr(m_QueryTxt))) trace(L"===no===L" + no + L"===QueryTxt====L" + m_QueryTxt); x = ViewObject::RetrieveData(GetServerUrl(), myDataUrl, L"no", no, L"QueryTxt", m_QueryTxt); if (x) { dw_list.Retrieve(x); dw_list.Redraw(); } else { dw_list.Redraw(); dw_goods.Redraw(); } dw_list.SetReadOnly(true); xutil::RestoreCursor(hCursor); return 1; } //†SòSpenc int Onhistroydata() { return 1; int row = dw_list.GetNextSelectRow(1); if (row > 0) { KXMLDOMElement e = dw_list.GetRowElement(row); xaserverarg* arg = new xaserverarg; xstring sCustomerID = e.selectSingleNode(L"CustomerID").text(); arg->AddArg(L"CustomerID", sCustomerID, L""); xstring sCustomerName = e.selectSingleNode(L"CustomerName").text(); arg->AddArg(L"CustomerName", sCustomerName, L""); arg->AddArg(L"EntityName", GetEntityName(1), L""); arg->AddArg(L"EntityID", GetEntityID(1), L""); openUrl(L"/sale/view/Quote3/xpage/histroydata", arg); } return 1; } int OnPrint() { xstring Count = L""; xml x = ViewObject::RetrieveData(GetServerUrl(), L"/sale/data/Quote3/GetQuoteID", L"EntityID", GetEntityID(1)); if (x.selectSingleNode(L"root/@value")) Count = x.selectSingleNode(L"root/@value").text(); if (Count != L"0") { OnPrint2(); } else { OnPrint1(); return 0; } } int OnPrint2() { xaserverarg& argx = *new xaserverarg; argx.AddArg(L"QuoteNo", GetEntityNo(1)); OpenWindow(L"dev:xpage[xmQuoteBillList.vx]", (LPARAM)&argx); if (argx.GetArgString(L"action") != L"ok") return 0; xstring printStr = argx.GetArgString(L"items"); xaserverarg& arg = *new xaserverarg; arg.setNativePointer(arg.CreateInstance()); arg.AddArg(L"DataUrl", L"/sale/data/Quote3/print/mydata"); arg.AddArg(L"EntityName", L"Quote"); arg.AddArg(L"EntityID", GetEntityID(1) + printStr); arg.AddArg(L"EntityNo", GetEntityNo(1)); openUrl(L"/sale/view/view.base/xpage/Template/PrintViewEx", &arg); return 0; } int OnPrint1() { xaserverarg& arg = *new xaserverarg; arg.AddArg(L"EntityName", L"Quote", L""); arg.AddArg(L"EntityID", GetEntityID(1), L""); arg.AddArg(L"EntityNo", GetEntityNo(1), L""); openUrl(L"/sale/view/view.base/xpage/Template/PrintViewEx", &arg); return 0; } int OnRowChanged(TEvent* evt, LPARAM p) { //fixed one event only one process listwin::OnRowChanged(evt, p); DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; listwin::OnRowChanged(evt, p); HCURSOR hCursor = xutil::SetCursorWait(); xstring QuoteNo = dw_list.GetItemString(row, L"QuoteNo"); //alert(QuoteNo); xml x = ViewObject::RetrieveData(GetServerUrl(), L"/sale/data/Quote3/maint", L"id", QuoteNo); if (x) dw_goods.Retrieve(x); else dw_goods.Reset(); dw_goods.Redraw(); dw_goods.SetReadOnly(true); xutil::RestoreCursor(hCursor); return 1; } int OnShare() { xaserverarg& arg = *new xaserverarg; int row = dw_list.GetRow(); if (row < 1) return 0; arg.AddArg(L"EntityID", dw_list.GetItemString(row, L"QuoteID")); arg.AddArg(L"EntityNo", dw_list.GetItemString(row, L"QuoteNo")); arg.AddArg(L"EntityName", L"¥bsQUS"); arg.AddArg(L"notify", L"1"); OpenWindow(L"dev:xpage[UserGroupShare.vx]", (LPARAM)&arg); return 1; } int OnShareInfo() { xaserverarg& arg = *new xaserverarg; int row = dw_list.GetRow(); if (row < 1) return 0; //xstring PartyID = dw_list.GetItemString(row,L"PartyID"); //arg.AddArg(L"PartyID",PartyID); //OpenWindow(L"dev:xpage[XmShare.Custumer.v3.vx]",cast(arg as int)); return 1; } int OnRefresh() { HTREEITEM hItem = tv_folder.GetRootItem(); while (tv_folder.GetChildItem(hItem)) tv_folder.DeleteItem(tv_folder.GetChildItem(hItem)); xstring no = L"Category:Customer"; ExpandFolderItem(hItem, no); changeddlb = 0; return 1; } int PreOnCmdDispatch(xstring comdid) { if (comdid == L"action:bill.histroydata") return Onhistroydata(); else if (comdid == L"action:bill.refresh") return OnPreRetrieve(); else if (comdid == L"action:bill.print") return OnPrint(); else if (comdid == L"action:bill.share") return OnShare(); else if (comdid == L"action:bill.shareinfo") return OnShareInfo(); else if (comdid == L"action:bill.new") { xstring s = publiccode::GetUser().id; xstring no = publiccode::GetUser().no; if (no != L"00303" && no != L"admin") { xml supplier_x = ViewObject::RetrieveData(GetServerUrl(), L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s); if (supplier_x) { if ((xstring)supplier_x.text() != L"N¡RXT") { alert(L"S_MR҉r‚ N/fN¡RXT Ný€°ežXUSP[ ÿ÷‹Í‘°e éb҉r‚"); return 0; } } } } else if (comdid == L"xmCopy") { OnCopyQuote(); return 1; } else if (comdid == L"XmShareMessage") { xaserverarg& arg = *new xaserverarg; xstring UserID = publiccode::GetUser().personid; arg.AddArg(L"UserID", UserID); OpenWindow(L"dev:xpage[XmShare.Quote.v3.vx]", (LPARAM)&arg); return 1; } return 1; } int OnCopyQuote() { xaserverarg& arg = *new xaserverarg; int row = dw_list.GetRow(); if (row < 1) return 0; arg.AddArg(L"QuoteName", L"Quote"); arg.AddArg(L"QuoteID", dw_list.GetItemString(row, L"QuoteID")); //arg.AddArg(L"QuoteNo",L""); arg.AddArg(L"hWnd", xstring((__int64)GetHWND())); OpenWindow(L"dev:xpage[quote3.maint.vx]", (LPARAM)&arg); return 1; } //xcombobox NÉb int OnSelectDdlb(TEvent evt, LPARAM p) { changeddlb = 1; HWND wid = ddlb_1.GetHWND(); int CB_GETCURSEL = 0x0147; int nIndex = SendMessage(wid, CB_GETCURSEL, 0, 0); KXMLDOMElement e = ddlb_1.GetElement(); KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring((nIndex + 1)) + L"]"); xstring no = e2.selectSingleNode(L"@element").text(); HTREEITEM hItem = tv_folder.GetRootItem(); while (tv_folder.GetChildItem(hItem)) tv_folder.DeleteItem(tv_folder.GetChildItem(hItem)); ExpandFolderItem(hItem, no); changeddlb = 0; return 1; } int AttachListon() { AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&Quote3list::OnTreeSelChanged); //h éb //AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING",(FEvent)&Quote3list::OnTreeExpanding); //hU\_ AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&Quote3list::OnRowChanged); AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&Quote3list::OnSelectDdlb); AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&Quote3list::OnDoubleClicked); return 1; } int onload() { listwin::onload(); ddlb_1 = GetControl(L"cbx_1"); dw_goods = GetControl(L"dw_goods"); dw_goods.openUrl(GetServerUrl(), L"/sale/view/Quote3/template/item/pricelist"); dw_goods.SetColumnState(L"ItemID", false); dw_goods.SetColumnState(L"EnquiryLineID", false); dw_goods.SetColumnState(L"ClassifyID", false); myDataUrl = L"/sale/data/Quote3/folder/list"; urlTree = L"/sale/data/Quote3/folder"; tv_folder = GetControl(L"tv_folder"); //tv_folder.SetLineAtRoot(true); InitialFolder(); return 1; } int onloaded() { listwin::onloaded(); //attach my control event OnPreRetrieve(); AttachListon(); dw_list.SetColumnState(L"QuoteID", false); HTREEITEM hItem = tv_folder.GetRootItem(); ExpandFolderItem(hItem, L"Category:Customer"); tv_folder.ExpandItem(hItem); ///tv_folder.ItemFocus(tv_folder.GetChildItem(hItem)); tv_folder.ItemFocus(hItem); return 1; } int ProcessUsedArg(xaserverarg arg) { HTREEITEM hItem = tv_folder.GetCaretItem(); if (hItem) { KXMLDOMElement& e = *(KXMLDOMElement*)tv_folder.GetItemData(hItem); if (e) { xstring no = e.getAttribute(L"no"); if (no.find(L"Customer:") >= 0) { arg.AddArg(L"CustomerID", e.getAttribute(L"id")); xstring name = e.getAttribute(L"name"); if (name.find(L"(L") >= 0) name = name.left(name.find(L"(L")); arg.AddArg(L"CustomerName", name); } } } return 1; } };