#include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" class __declspec(dllexport) SO3list : public listwin { public: string m_sType; //Ê÷Ñ¡ÖеÄÀàÐÍ string m_sTypeTxt; //Ê÷Ñ¡ÖеÄÊý¾Ý string urlTree; string myDataUrl; string rows; xcombobox ddlb_1; xcombobox cbx_datashow; int changeddlb; xtreeview tv_folder; xdwgrid dw_goods; xdwgrid dw_source; public: SO3list(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {} public: static SO3list* CreateInstance(void* implPtr, void* hWnd) { SO3list* pWin = new SO3list(implPtr, (HWND)hWnd); return pWin; } //process tree //²éÕÒµ±Ç°Ê÷ÏîµÄ¶¥¼¶Ä¿Â¼ 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 = nlist.item(i); string name = e.getAttribute(L"name"); HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image); ExpandCatChildFolder(h, e, 35); } return 1; } int ExpandFolderItem(HTREEITEM hItem, string no) { KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),urlTree, L"no", no, L"rows", rows); if (!x) return 0; KXMLDOMNodeList nlist = x.selectNodes(L"/data/item"); int len = nlist.length(); for (int i = 0; i < len; i++) { KXMLDOMElement e = nlist.item(i); string name = e.getAttribute(L"name"); HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35); ExpandCatChildFolder(h, e, 35); } return 1; } //Ê÷Õ¹¿ª int OnTreeExpanding(TEvent* evt, int p) { NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; HTREEITEM hItem = nmtv.itemNew.hItem; HTREEITEM hTopItem = LookupTopFolder(hItem); string name = tv_folder.GetItemLabel(hTopItem); HTREEITEM child = tv_folder.GetChildItem(hItem); KXMLDOMElement e = 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 = nlist.item(i); string 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, 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) { if (changeddlb) return 1; return OnPreRetrieve(); } int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg arg) { if (updateItem == L"del") { int DelRow = dw_list.GetRow(); dw_list.DeleteRow(DelRow); return 1; } else if (updateItem == L"setstate") { int row = dw_list.GetRow(); if (row < 1) return 1; KXMLDOMElement ele = dw_list.GetRowElement(row); string id = GetEntityIDName(1); string entity = ele.selectSingleNode(id).text(); //trace(entity); SetAgent(L"list", entity); if (arg.GetArgString(L"state") != L"") //this.dw_list.SetItemString(row, "ApprovalStatus", arg.GetArgString(L"state")); dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state")); if (arg.GetArgString(L"billstatus") != L"") { string billstatus = arg.GetArgString(L"billstatus"); string statusName = GetBillStatusName(billstatus); dw_list.SetItemString(row, L"ApprovalStatus", billstatus); dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName); } dw_list.Redraw(); } return 1; } bool IsEmptyQueryStr(string queryStr) { if (queryStr == L"") return true; if (queryStr == L"") return true; if (queryStr == L"") return true; //trace(queryStr); return false; } //¼ìË÷ int OnPreRetrieve() { HTREEITEM hItem = tv_folder.GetSelectedItem(); if (!hItem) return 1; HCURSOR hCursor = xutil::SetCursorWait(); KXMLDOMElement e1 = tv_folder.GetItemData(hItem); string no = e1.getAttribute(L"no"); KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),myDataUrl, L"no", no, L"QueryTxt", m_QueryTxt, L"rows", rows); if (x) { dw_list.Retrieve(x); dw_list.Redraw(); } else { dw_list.Reset(); dw_list.Redraw(); dw_goods.Reset(); dw_goods.Redraw(); } dw_list.SetReadOnly(true); xutil::RestoreCursor(hCursor); return 1; /* xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); arg.AddArg(L"pageindex", m_pageIndex.toString(),""); //µÚ¼¸Ò³ arg.AddArg(L"pagenumber", m_pageNumber.toString(),""); //ÿҳÊýÁ¿ arg.AddArg(L"QueryTxt", m_QueryTxt,""); //²éѯÌõ¼þ arg.AddArg(L"sType",m_sType,""); arg.AddArg(L"sTypeTxt",m_sTypeTxt,""); xml x = ViewObject::MakeXml(); KXMLDOMElement n = m_configDoc.selectSingleNode(L"//list/dwview[@type='dwgrid'][1]"); if(n) { KXMLDOMElement e = n; if(e.selectSingleNode(L"@dataUrl")) { string dataUrl = e.selectSingleNode(L"@dataUrl").text; if(dataUrl.left(1)!="/") dataUrl = GetEntityName(1)+"/"+dataUrl; getUrl(dataUrl, arg.GetString(), x); KXMLDOMElement ele=x.GetXmlDoc().documentElement; if(dw_pages.ptr_native_) { if(ele.selectSingleNode(L"@TotalPage")) { string s=ele.selectSingleNode(L"@TotalPage").text; //×ÜÊýÁ¿ dw_pages.SetMaxPage(s.toInt()); } } dw_list.Retrieve(x); dw_list.Redraw(); dw_list.SetReadOnly(true); } else { SetEntityData(arg); } } else { SetEntityData(arg); } */ } //ÀúÊ·Êý¾Ý int Onhistroydata() { int row = dw_list.GetNextSelectRow(1); if (row > 0) { KXMLDOMElement e = dw_list.GetRowElement(row); xaserverarg& arg = * new xaserverarg; string sCustomerID = e.selectSingleNode(L"CustomerID").text(); arg.AddArg(L"CustomerID", sCustomerID, L""); string 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/SO/xpage/histroydata", &arg); } return 1; } //xcomboboxÏÂÀ­ 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"]"); string 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 OnSelectDataShowDdlb(TEvent* evt, LPARAM p) { HWND wid = cbx_datashow.GetHWND(); int CB_GETCURSEL = 0x0147; int nIndex = SendMessage(wid, CB_GETCURSEL, 0, 0); KXMLDOMElement e = cbx_datashow.GetElement(); KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]"); rows = e2.selectSingleNode(L"@rows").text(); OnPreRetrieve(); return 1; } int PreOnCmdDispatch(string comdid) { if (comdid == L"action:bill.new") { string s = publiccode::GetUser().id; string no = publiccode::GetUser().no; if (no != L"00303" && no != L"admin") { KXMLDOMDocument supplier_x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s); if (supplier_x) { if ((xstring)supplier_x.text() != L"ÒµÎñÔ±") { alert(L"µ±Ç°½ÇÉ«²»ÊÇÒµÎñÔ±²»ÄÜÐÂÔöµ¥×Ó£¬ÇëÖØÐÂÑ¡Ôñ½ÇÉ«"); return 0; } } } } if (comdid == L"action:bill.annex") { string deptname = publiccode::GetUser().deptname; if (deptname == L"²É¹º²¿") { return 1; } int row = dw_list.GetRow(); if (row < 1) return 1; xstring guid = dw_list.GetItemString(row, L"SOID"); xaserverarg& arg = * new xaserverarg(); if (guid.length() <= 0)return 1; arg.AddArg(L"entityid", guid); arg.AddArg(L"Type", L"Y"); OpenWindow(L"dev:xpage[maint.Document.SO3.v3.vx]", arg); return 0; } if (comdid == L"action:bill.histroydata") return Onhistroydata(); else if (comdid == L"action:bill.refresh") { changeddlb = 1; HTREEITEM RItem = tv_folder.GetRootItem(); while (tv_folder.GetChildItem(RItem)) tv_folder.DeleteItem(tv_folder.GetChildItem(RItem)); ExpandFolderItem(RItem, L"Category:Customer"); tv_folder.ExpandItem(RItem); tv_folder.ItemFocus(RItem); changeddlb = 0; return OnPreRetrieve(); } if (comdid == L"action:bill.saveas") { dw_list.SaveAs(L""); return 1; } if (comdid == L"action:bill.SourceRemark") return OnSourceRemark(); return 1; } int OnSourceRemark() { xstring name = L"ÍâÏúºÏͬ"; KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name); KXMLDOMNodeList items = x.selectNodes(L"data/Item"); KXMLDOMNode t = items.item(0); xstring Content = L""; if (t.selectSingleNode(L"Content")) { Content = t.selectSingleNode(L"Content").text(); } xaserverarg& arg = *new xaserverarg; arg.AddArg(L"value", Content); OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg); return 1; } int OnRowChanged(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; if (row < 1) return 1; //fixed one event only one process listwin::OnRowChanged(evt, p); HCURSOR hCursor = xutil::SetCursorWait(); xstring SONo = dw_list.GetItemString(row, L"SONo"); KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/item", L"id", SONo); if (x) dw_goods.Retrieve(x); else dw_goods.Reset(); dw_goods.Redraw(); dw_goods.SetReadOnly(true); x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/itemwithsource", L"id", SONo); if (x) dw_source.Retrieve(x); else dw_source.Reset(); dw_source.Redraw(); dw_source.SetReadOnly(true); xutil::RestoreCursor(hCursor); return 1; } int AttachListon() { AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&SO3list::OnTreeSelChanged); //Ê÷Ñ¡Ôñ AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SO3list::OnRowChanged);//°ó¶¨Ðиü¸Ä´¥·¢Ê¼þOnRowChanged AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&listwin::OnDoubleClicked); AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDdlb);//°ó¶¨ÏÂÀ­¿ò¸ü¸Ä´¥·¢Ê¼þOnSelectDdlb AttachEvent(L"cbx_datashow", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDataShowDdlb);//°ó¶¨Ñ¡ÔñÊý¾ÝÏÔʾÏÂÀ­ÁбíʼþOnSelectDataShowDdlb return 1; } int onload() { changeddlb = 0; listwin::onload(); ddlb_1 = GetControl(L"cbx_1"); cbx_datashow = GetControl(L"cbx_datashow"); dw_goods = GetControl(L"dw_goods"); dw_goods.openUrl(GetServerUrl(),L"/sale/view/SaleOrder/template/item"); dw_source = GetControl(L"dw_source"); dw_source.openUrl(GetServerUrl(), L"/sale/view/SaleOrder/template/sourceitem"); dw_goods.SetColumnState(L"ItemID", false); dw_goods.SetColumnState(L"LineType", false); dw_goods.SetColumnState(L"Brand", false); dw_goods.SetColumnState(L"Assortment", false); dw_goods.SetColumnState(L"ClassifyID", false); dw_goods.SetColumnState(L"UnitFreight", false); //dw_goods.SetColumnState(L"CName",false);//Òþ²ØÁÐ dw_goods.SetColumnState(L"Brand", false); dw_goods.SetColumnState(L"SKUNo", false); dw_goods.SetColumnState(L"SOLineNo", false); dw_goods.SetColumnState(L"CustomerPONo", false); dw_goods.SetColumnState(L"ScheduleShipDate", false); dw_goods.SetColumnState(L"PackTechNote", false); dw_goods.SetColumnState(L"EnquiryPriceListID", false); dw_goods.SetColumnState(L"Submitter", false); dw_goods.SetColumnState(L"POSupplierID", false); dw_goods.SetColumnState(L"QuoteLineID", false); dw_list.SetColumnState(L"CreatorID", false); dw_list.SetColumnState(L"SOID", false); string groupname = publiccode::GetUser().groupname; if (groupname == L"²É¹ºÐ¡×é") { dw_list.SetColumnState(L"USDAmount", false); dw_list.SetColumnState(L"RMBAmount", false); dw_goods.SetColumnState(L"UnitPrice", false); dw_goods.SetColumnState(L"Amount", false); dw_goods.SetColumnState(L"UnitCommPrice", false); dw_goods.SetColumnState(L"CommissionRate", false); dw_source.SetColumnState(L"UnitPrice", false); dw_source.SetColumnState(L"Amount", false); dw_source.SetColumnState(L"FOBAmount", false); dw_source.SetColumnState(L"BuyUnitPrice", false); dw_source.SetColumnState(L"BuyAmount", false); dw_source.SetColumnState(L"CostRate", false); } rows = L"500"; myDataUrl = L"/sale/data/SaleOrder/folder/list"; urlTree = L"/sale/data/SaleOrder/folder"; tv_folder = GetControl(L"tv_folder"); tv_folder.SetLineAtRoot(true); InitialFolder(); return 1; } int onloaded() { listwin::onloaded(); //attach my control event AttachListon(); dw_list.SetColumnState(L"SOID", 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 ) return 1; KXMLDOMElement e = tv_folder.GetItemData(hItem); 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; } };