#include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" class __declspec(dllexport) ListGDN3Win : public listwin { public: ListGDN3Win(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {} public: static ListGDN3Win* CreateInstance(void* implPtr, void* hWnd) { ListGDN3Win* pWin = new ListGDN3Win(implPtr, (HWND)hWnd); return pWin; } public: xstring m_sType; //Ê÷Ñ¡ÖеÄÀàÐÍ xstring m_sTypeTxt; //Ê÷Ñ¡ÖеÄÊý¾Ý xstring urlTree; xstring myDataUrl; xstring searchStr; xstring rows; bool readed; int changeddlb; xcombobox ddlb_1; xcombobox cbx_datashow; xtreeview tv_folder; xdwgrid dw_goods; xdwgrid dw_source; xdwtable dw_profit; xdwgrid dw_custom; //process tree //²éÕÒµ±Ç°Ê÷ÏîµÄ¶¥¼¶Ä¿Â¼ HTREEITEM LookupTopFolder(HTREEITEM hItem) { HTREEITEM hRoot = tv_folder.GetRootItem(); while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem); return hItem; } //½¹µã¼¤»î´¦Àíº¯Êý int OnSetFocus(TEvent* evt, int param) { //ÖØÖù¤¾ßÌõ int row = dw_list.GetRow(); if (row < 1) return 1; KXMLDOMElement ele = dw_list.GetRowElement(row); xstring id = GetEntityIDName(1); trace(L"\rn---" + id); xstring entity = ele.selectSingleNode(id).text(); //trace(entity); SetAgent(L"list", entity); return 1; } 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)); string 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(urlTree,L"no",no); /*xml x = xml::Make(); xaserverarg arg = xaserverarg::Make(); arg.AddArg(L"no", no); xaserver::ExecXQuery(GetServerUrl(), L"[customerfolder.gdn.sql.xq]", arg.GetString(), x); */ KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(), L"[customerfolder.gdn.sql.xq]", L"id", 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)); string name = e.getAttribute(L"name"); HTREEITEM h = tv_folder.InsertChildItem(hItem, name, (LPARAM)&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); 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)); 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, (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) { if (changeddlb) return 1; return OnPreRetrieve(); return 1; } 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(); SetAgent(L"list", entity); if (arg.GetArgString(L"state") != L"") //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"") return true; if (queryStr == L"") return true; return false; } //¼ìË÷ int OnPreRetrieveEx() { if (readed) return 1; HTREEITEM hItem = tv_folder.GetSelectedItem(); if (!hItem) { hItem = tv_folder.GetRootItem(); if (!hItem) return 1; } HCURSOR hCursor = xutil::SetCursorWait(); KXMLDOMElement& e1 = *(KXMLDOMElement*)tv_folder.GetItemData(hItem); xstring no = e1.getAttribute(L"no"); //xml x = 0; //x = ViewObject::RetrieveData(myDataUrl,L"no",no,L"QueryTxt", m_QueryTxt,L"rows",rows); xstring DeptName = publiccode::GetUser().deptname; xaserverarg arg ; arg.AddArg(L"no", no); arg.AddArg(L"QueryTxt", m_QueryTxt); arg.AddArg(L"rows", rows); trace(no + L"***" + m_QueryTxt + L"***" + rows); /*if(DeptName==L"¸úµ¥²¿"){ dw_list.DwRetrieve(GetServerUrl(),L"[list.creator.gdn.sql.xq]",arg.GetString()); }else{ dw_list.DwRetrieve(GetServerUrl(),L"[list.folder.gdn.sql.xq]",arg.GetString()); }*/ dw_list.DwRetrieve(GetServerUrl(), L"[list.folder.gdn.sql.xq]", arg.GetString()); dw_list.SetReadOnly(true); dw_list.SetRowSort(L"ETD", false); if (dw_list.GetRowCount() >= 1) RetrieveDetail(1); xutil::RestoreCursor(hCursor); return 1; } 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"); trace(L"\r\n" + no + L"\r\n" + m_QueryTxt); KXMLDOMDocument x = ViewObject::RetrieveData(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_list.SetReadOnly(true); dw_list.SetRowSort(L"ETD", false); if (dw_list.GetRowCount() >= 1) RetrieveDetail(1); xutil::RestoreCursor(hCursor); return 1; } int RetrieveDetail(int row) { xstring EntityID = dw_list.GetGuid(row); xstring InvoiceNo = dw_list.GetItemString(row, L"InvoiceNo"); dw_goods.DwRetrieve(GetServerUrl(), L"[gdnline.gdn.sql.xq]", L"EntityID", EntityID); dw_goods.SetReadOnly(true); //dw_source.DwRetrieve(GetServerUrl(),L"[source.gdn.sql.xq]",L"EntityID", EntityID ); KXMLDOMDocument x = ViewObject::RetrieveData(L"/sale/data/GDN/source/maintex1", L"GDNID", EntityID); if (x) dw_source.Retrieve(x); else dw_source.Reset(); dw_source.Redraw(); dw_source.SetReadOnly(true); KXMLDOMDocument x1 = ViewObject::RetrieveData(L"/sale/data/Custom3/maint/custom/data", L"invno", InvoiceNo); if (x1) dw_custom.Retrieve(x1); else dw_custom.Reset(); dw_custom.Redraw(); dw_custom.SetReadOnly(true); dw_profit.DwRetrieve(GetServerUrl(), L"[profit.dgn.sql.xq]", L"EntityID", EntityID); dw_profit.SetReadOnly(true); return 1; } 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; HCURSOR hCursor = xutil::SetCursorWait(); RetrieveDetail(row); xutil::RestoreCursor(hCursor); return 1; } /* int PreOnCmdDispatch(xstring comdid) { //·µ»Ø0¡ª¡ª²»ÔÚÖ´ÐÐÒÔÏ´úÂ룻·µ»ØÆäËû¡ª¡ªÖ´ÐÐÒÔÏ´úÂë¡£ if(comdid==L"action:bill.merge") { OpenWindow(L"dev:xpage[Merge.GDN.vx]"); return 0; } else if(comdid==L"action:bill.check.ask") { int row = dw_list.GetRow(); xstring ApprovalStatus = dw_list.GetItemString(row,L"ApprovalStatus"); if(ApprovalStatus == L"9"){ alert(L"ºÏ²¢Æ±²»ÔÊÐíÌá½»ÉóÅú!"); return 0; } xstring InvoiceNo = dw_list.GetItemString(row,L"InvoiceNo"); xml x = ViewObject::RetrieveData(L"/sale/data/Gdn/checksource",L"invno",InvoiceNo); if(!x) return 1; if(x.selectSingleNode(L"error")) { alert(x.selectSingleNode(L"error").text); return 0; } } else if(comdid==L"action:bill.new") { xstring s = publiccode::GetUser().id; xml supplier_x = ViewObject::RetrieveData(L"/sale/data/SupplierV3/entity/FindBySaleType",L"id", s); if(supplier_x) { if(supplier_x.text != L"ÒµÎñÔ±") { alert(L"µ±Ç°½ÇÉ«²»ÊÇÒµÎñÔ±²»ÄÜÐÂÔöµ¥×Ó£¬ÇëÖØÐÂÑ¡Ôñ½ÇÉ«"); return 0; } } } return 1; } */ int OnSearch() { xaserverarg& arg = *new xaserverarg; arg.AddArg(L"text", searchStr); OpenWindow(L"dev:xpage[search.dialog.vx]", (LPARAM)&arg); xstring str = arg.GetArgString(L"text"); if (str != searchStr) { searchStr = str; dw_list.Filter(L"*", searchStr); return 1; } return 1; } int PreOnCmdDispatch(xstring comdid) { 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(); } else if (comdid == L"action:bill.merge") { OpenWindow(L"dev:xpage[Merge.GDN.vx]"); return 0; } else if (comdid == L"xmSaveAs") return dw_list.SaveAs(L""); else if (comdid == L"xmSearch") return OnSearch(); else if (comdid.find(L"bill.print") > 0) { xstring EntityIDS = dw_list.GetGuid(dw_list.GetRow()); KXMLDOMDocument xs = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudge", L"GDNID", EntityIDS); xstring Results1 = xs.text(); if (Results1 != L"") { alert(Results1); return 0; } OnPrintOne(); OnPrint(); return 1; } else if (comdid == L"action:bill.new") { if (publiccode::GetUser().name != L"admin") { xstring s = publiccode::GetUser().id; KXMLDOMDocument supplier_x = ViewObject::RetrieveData(L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s); if (supplier_x) { if (supplier_x.text() != L"¸úµ¥") { alert(L"µ±Ç°½ÇÉ«²»ÊǸúµ¥Ô±²»ÄÜÐÂÔöµ¥×Ó£¬ÇëÖØÐÂÑ¡Ôñ½ÇÉ«"); return 0; } } } } else if (comdid == L"action:bill.GDNDelay") { xstring EntityIDEx = dw_list.GetGuid(dw_list.GetRow()); xaserverarg& argEx = *new xaserverarg; argEx.setNativePointer(argEx.CreateInstance()); trace(EntityIDEx); argEx.AddArg(L"GDNID", EntityIDEx); OpenWindow(L"dev:xpage[GDNDelay.vx]", (LPARAM)&argEx); return 1; } else if (comdid == L"action:bill.check.ask") { int row = dw_list.GetRow(); xstring ApprovalStatus = dw_list.GetItemString(row, L"ApprovalStatus"); if (ApprovalStatus == L"9") { alert(L"ºÏ²¢Æ±²»ÔÊÐíÌá½»ÉóÅú!"); return 0; } xstring EntityID = dw_list.GetGuid(dw_list.GetRow()); KXMLDOMDocument xx = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudge", L"GDNID", EntityID); xstring Results = xx.text(); if (Results != L"") { alert(Results); return 0; } KXMLDOMDocument xx2 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudgeEx", L"GDNID", EntityID); xstring Results2 = xx2.text(); if (Results2 != L"") { alert(Results2); return 0; } KXMLDOMDocument xx3 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudgeExS", L"GDNID", EntityID); xstring Results3 = xx3.text(); if (Results3 != L"") { alert(Results3); return 0; } KXMLDOMDocument xx4 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudgeAmount", L"GDNID", EntityID); xstring Results4 = xx4.text(); if (Results4 != L"") { alert(Results4); return 0; } /*xml xx5= ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNCost",L"GDNID",EntityID); xstring Results5=xx5.text(); if(Results5 !=L"") { alert(Results5); return 0; }*/ xaserverarg& arg = *new xaserverarg; arg.setNativePointer(arg.CreateInstance()); trace(EntityID); arg.AddArg(L"GDNID", EntityID); OpenWindow(L"dev:xpage[GDNDelay.vx]", (LPARAM)&arg); } else if (comdid == L"action:bill.SourceRemark") return OnSourceRemark(); return 1; } int OnSourceRemark() { xstring name = L"³öÔËÃ÷ϸµ¥"; KXMLDOMDocument x = ViewObject::RetrieveData(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& arg1 = *new xaserverarg; arg1.setNativePointer(arg1.CreateInstance()); arg1.AddArg(L"value", Content); OpenWindow(L"dev:xpage[memo.edit.new.vx]", (LPARAM)&arg1); return 1; } int OnPrint() { int row = dw_list.GetRow(); xstring GDNID = dw_list.GetGuid(row); KXMLDOMDocument x = ViewObject::RetrieveData(L"/sale/data/GDN/CheckCDLine", L"GDNID", GDNID); xstring r = x.text(); int r1 = r.toInt(); if (x) { if (r1 > 0) { alert(L"±¨¹ØÊýÁ¿ºÍ±¨¹Ø½ð¶îÓë³öÔËÊýÁ¿ºÍ½ð¶î²»Ò»ÖÂ\r\n²¿·Ö±¨¹ØÊýÁ¿ºÍ½ð¶îÐèÒªºË¶Ô£¡"); } } //alert(GDNID); return 1; } int OnPrintOne() { int row = dw_list.GetRow(); xstring GDNID = dw_list.GetGuid(row); KXMLDOMDocument x = ViewObject::RetrieveData(L"/sale/data/GDN/CheckGW", L"GDNID", GDNID); xstring r = x.text(); int r1 = r.toInt(); if (x) { if (r1 > 0) { alert(L"Ã«ÖØ×ÜÁ¿»ò¾»×ÜÖØÁ¿²»Ò»Ö£¬ÐèÒªºË¶Ô£¡"); } } //alert(GDNID); return 1; } //xcomboboxÏÂÀ­ int OnSelectDdlb(TEvent* evt, LPARAM p) { changeddlb = 1; int CB_GETCURSEL = 0x0147; int nIndex = SendMessageW(HWND(), 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 OnSelectDataShowDdlb(TEvent* evt, LPARAM p) { int CB_GETCURSEL = 0x0147; int nIndex = SendMessageW(HWND(), 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 PostOnAttachEvent() { AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ListGDN3Win::OnTreeSelChanged); //Ê÷Ñ¡Ôñ //AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING",(FEvent)&ListGDN3Win::OnTreeExpanding); //Ê÷Õ¹¿ª AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ListGDN3Win::OnRowChanged); AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&ListGDN3Win::OnSelectDdlb); AttachEvent(L"cbx_datashow", L"CBN_SELCHANGE", (FEvent)&ListGDN3Win::OnSelectDataShowDdlb); return 1; } virtual xstring GetTemplateUrl() { return L"/sale/view/GDN/template/GDN/ListEx"; } int onload() { listwin::onload(); dw_list.SetColumnState(L"CurrencyNo", false); ddlb_1 = GetControl(L"cbx_1"); cbx_datashow = GetControl(L"cbx_datashow"); dw_goods = GetControl(L"dw_goods"); //dw_goods.openUrl(L"/sale/view/GDN/template/GDNItem1"); dw_goods.SetDataObject(GetServerUrl(), L"dev:sheet[GDN.v3.EX.tpl/GDNItem]"); dw_goods.SetColumnState(L"ItemID", false); dw_goods.SetColumnState(L"LineType", false); dw_goods.SetColumnState(L"LineNo", false); dw_goods.SetColumnState(L"Assortment", false); dw_goods.SetColumnState(L"SOLineNo", false); dw_goods.SetColumnState(L"SKUNo", false); dw_goods.SetColumnState(L"POCreatorID", false); dw_goods.SetColumnState(L"BuyAmount", false); dw_goods.SetColumnState(L"CostRate", false); dw_goods.SetColumnState(L"CommissionRate", false); dw_goods.SetColumnState(L"DiscountRate", false); dw_goods.SetColumnState(L"Remark", false); dw_goods.SetColumnState(L"DiscountRate", false); dw_goods.SetColumnState(L"SOLineID", false); dw_goods.SetColumnState(L"PONo", false); dw_source = GetControl(L"dw_source"); //dw_source.openUrl(L"/sale/view/GDN/template/item/sourcing"); dw_source.SetDataObject(GetServerUrl(), L"dev:sheet[GDN.v3.EX.tpl/SourcingItem]"); dw_source.SetColumnState(L"POID", false); dw_source.SetColumnState(L"InvoiceNo", false); dw_source.SetColumnState(L"ETD", false); dw_source.SetColumnState(L"SOLineID", false); dw_source.SetColumnState(L"ItemID", false); dw_source.SetColumnState(L"POItemID", false); dw_source.SetColumnState(L"GDNLineID", false); dw_source.SetColumnState(L"Amount", false); dw_profit = GetControl(L"dw_profit"); //dw_profit.openUrl(L"/sale/view/GDN/template/Profit"); dw_profit.SetDataObject(GetServerUrl(), L"dev:sheet[GDN.v3.EX.tpl/Profit]"); dw_profit.SetColHeaderHeight(0); dw_profit.SetRowSelectorWidth(0); dw_profit.SetHScrollState(false); dw_custom = GetControl(L"dw_custom"); dw_custom.openUrl(L"/sale/view/Custom3/template/maint"); dw_custom.SetColumnState(L"ClassifyID", false); dw_custom.SetColumnState(L"AmountEx", false); //dw_custom.SetReadOnlyColumn(L"CustName",true); dw_custom.SetColumnState(L"LineNo", false); rows = L"500"; myDataUrl = L"/sale/data/GDN3/folder/list"; urlTree = L"/sale/data/GDN3/folder"; tv_folder = GetControl(L"tv_folder"); //tv_folder.SetLineAtRoot(true); InitialFolder(); return 1; } int onloaded() { HTREEITEM hItem = tv_folder.GetRootItem(); ExpandFolderItem(hItem, L"Category:Customer"); tv_folder.ExpandItem(hItem); tv_folder.ItemFocus(hItem); listwin::onloaded(); searchStr = L""; readed = true; //attach my control event PostOnAttachEvent(); readed = false; return 1; } int ProcessUsedArg(xaserverarg arg) { xstring action = arg.GetArgString(L"Action"); //trace(L"\r\n*******************action:"+action+L"\r\n"); if (action == L"bill.open") { int row = dw_list.GetRow(); xstring ApprovalStatus = dw_list.GetItemString(row, L"ApprovalStatus"); if (ApprovalStatus == L"9") { arg.AddArg(L"ReadOnly", L"true"); arg.AddArg(L"ReadOnlyEx", L"true"); } } else { arg.AddArg(L"ReadOnly", L"false"); } 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; } };