ÿþ#include <wobject/xstring.hpp> #include <xcontrol/xtreeview.hpp> #include <xcontrol/xdwgrid.hpp> #include <wobject/xdouble.hpp> #include <xcontrol/xlayersheet.hpp> #include <xcontrol/xdatetimepick.hpp> #include <xcontrol/ximageview.hpp> #include "xcontrol/xshtml.hpp" #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" #include "viewobject/productlibrary.view.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) ProductSearchDlg : public xwin { public: ProductSearchDlg(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {} public: static ProductSearchDlg* CreateInstance(void* implPtr, void* hWnd) { return new ProductSearchDlg(implPtr, (HWND)hWnd); } public: int hObject = 0; //§NÁT“^§NÁTRhˆ xdwgrid dw_list; xnode m_agentNode; //Agent Condition xtreeview tv_folder; xstring agentFor; 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; } //&q¹pÀo;mYtýQpe int OnSetFocus(TEvent* evt, LPARAM param) { //͑nå]wQag SetAgent(); return 1; } int OnShowImage(xstring skuid) { ximageview im = GetControl(L"im1"); //im.RemoveImage(); im.Reset(); xml xp; xaserverarg arg_pic; arg_pic.AddArg(L"SKUID",skuid); if(xurl::get(L"/sale/data/ProductLibrary3/pref/picture/imagelistSKU",arg_pic.GetString(),xp)!=1) { trace(xstring(L"xxx") + xp.xml()); }else { //imageElement = xp.documentElement(); KXMLDOMNodeList nlistp= xp.selectNodes(L"ImageList/image"); int lenp = nlistp.length(); for(int ip=0;ip<lenp;ip++) { KXMLDOMElement xitem = nlistp.item(ip); xstring picname = xitem.selectSingleNode(L"PicPath").text(); xstring goodno = xitem.selectSingleNode(L"GoodsNo").text(); if(picname == L"/business/products/Thumbs//") picname = L"/business/products/Thumbs/00/00000000-0000-0000-0000-000000000000.jpg"; im.AddImages(picname, L""); } im.Redraw(); //SendMessage(im.GetId(),0x000f,0,1); //InvalidateRect(im.GetId(),cast(0 as ref xrect),true); } return 1; } int OnRowChanged(TEvent* evt, int p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; xshtml xs = GetControl(L"html_detail"); xstring html = makeHtml(row); xs.SetContent(html); xs.Redraw(); xstring id = dw_list.GetGuid(row); OnShowImage(id); return 1; } xml GetGoodsPropList(xstring guid) { xml x; xaserverarg arg ; arg.AddArg(L"guid", guid); if(xurl::get(L"/sale/data/SO/goods/goodsprop/list", arg.GetString(),x)!=1) { xstring error = x.text(); alert(error); } return x; } xml GetGoodsPropListEx(xstring guid) { xml x; xstring fields=L"<data>"; /* fields +=L"<field name='HighestPrice' label='gؚ÷N'/>"; fields +=L"<field name='LowestPrice' label='gNO÷N'/>"; fields +=L"<field name='BulkPrice' label='ce'÷N'/>"; fields +=L"<field name='CardPrice' label='¸~aS÷N'/>"; fields +=L"<field name='BuyPrice' label='Ǒ-÷N'/>"; fields +=L"<field name='SupplierID' label=''n'/>"; */ fields +=L"<field name='Packing' label='Sň¹e_'/>"; fields +=L"<field name='PackingRate' label='Ïk±{peϑ'/>"; fields +=L"<field name='VolumeDesc' label='Sň:\x'/>"; fields +=L"<field name='GWPerPkg' label='Ûk͑'/>"; fields +=L"<field name='NWPerPkg' label='ÀQ͑'/>"; //fields +=L"<field name='DeveloperID' label='_ÑSºNXT'/>"; fields +=L"<field name='AttributeValue_1' label='§NÁT^\'`'/>"; //fields +=L"<field name='Remark' label='Yèl'/>"; fields += L"</data>"; x.loadXML(fields); return x; } xstring makeHtml(int row) { xstring id = dw_list.GetGuid(row); xml x = GetGoodsPropList(id); xml x1 = GetGoodsPropListEx(id); xstring html = L"<html><style> .text{ font-weight:400} .label { font-weight:400;}</style><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'>"; html += L"<div ><span style='font-weight:700;width:50;font-size:10pt' >÷S:</span><span style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"SKUNo") + L"</span> <span style='font-weight:700;width:50;font-size:10pt' >{|y˜:</span><span style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"RefNo") + L"</span></div>"; html += L"<div ><span style='font-weight:700;width:50;font-size:10pt' >lQøS‹W÷S:</span><span style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"GoodsNo") + L"</span></div>"; html += L"<div ><span style='font-weight:700;width:50;font-size:10pt' >ÁT T:</span><span style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"CName") + L"</span></div>"; if (dw_list.GetItemString(row, L"CSpec") != L"") html += L"<div ><span style='font-weight:700;width:50;font-size:10pt' >ĉ<span style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"CSpec") + L"</span></div>"; KXMLDOMNodeList fieldsEx = x1.selectNodes(L"data/field"); xstring ls_detail=L""; xstring ls_item =L""; xstring name; xstring label; int len = fieldsEx.length(); int i= 0; for(i=0;i<len; true) { int cnt = 0; ls_item = L""; while(cnt < 2) { name = fieldsEx.item(i).selectSingleNode(L"@name").text(); label = fieldsEx.item(i).selectSingleNode(L"@label").text(); ls_item += L"<td>" + label + L"</td>" + L"<td style='text-align:center'>" + dw_list.GetItemString(row,name.c_str()) + L"</td>" ; cnt++; i++; if(i ==len)break; } ls_detail += L"<tr>" + ls_item + L"</tr>"; } html += (xstring)L"<div style='margin-left:8px;margin-right:16px;'>" + +L"<table><colgroup span='1' width='70'/><colgroup span='1' width='120'/><colgroup span='1' width='70'/><colgroup span='1' width='120'/>" + ls_detail +L"</table>" +L"</div>" ; xstring ls_star=L""; KXMLDOMNodeList fields = x.selectNodes(L"data/field"); len = fields.length(); ls_detail = L""; if(len > 0) html += L"<div ><span style='font-weight:700;width:50;font-size:10pt' >€b/g‰Bl:</span></div>" ; for(i=0;i<len; true) { ls_item=L""; int count = 0; while(count < 2) { name = fields.item(i).selectSingleNode(L"@name").text(); label = fields.item(i).selectSingleNode(L"@label").text(); if(name==L"QualityTerm" || name==L"PackTerm" || label==L"(Ï‘" || label==L"Sň(Ï‘" || label==L"€b/g‰Bl") { i++; if(i >= len)count = 2; continue; } else if(dw_list.GetItemString(row,name.c_str())=L"") { KXMLDOMNodeList options = fields.item(i).selectNodes(L"item"); int tlen = options.length(); xstring terms = L"" ; for(int k=0; k<tlen; k++) { if(options.item(k).text()) { if(k>0) terms += L", L"; terms += (xstring)L"[" + options.item(k).text() + L"]"; } } ls_star += L"<div ><span style='font-weight:700;width:50;font-size:10pt' >" + label +L"*:</span><span style='width:90;font-size:10pt'>" + terms + L"</span></div>" ; }else { ls_item = L"<td>" + label + L"</td>" + L"<td>" + dw_list.GetItemString(row,name.c_str()) + L"</td>" ; count++; } i++; if(i >= len)count = 2; } ls_item = L"<tr>" + ls_item + L"</tr>"; ls_detail += ls_item; } html += (xstring)L"<div style='margin-left:8px;margin-right:16px;'>" + +L"<table><colgroup span='1' width='70'/><colgroup span='1' width='120'/><colgroup span='1' width='70'/><colgroup span='1' width='120'/>" + ls_detail +L"</table>" +L"</div>" ; if(dw_list.GetItemString(row,L"QualityTerm")!=L"") { html += L"<div style='height:12px'/>"; html += L"<div ><span style='font-weight:700;width:50;font-size:10pt' >(Ï‘:</span></div>" ; html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString(row,L"QualityTerm") + L"</span></div>" ; } if(dw_list.GetItemString(row,L"PackTerm")!=L"") { html += L"<div style='height:12px'/>"; html += L"<div ><span style='font-weight:700;width:50;font-size:10pt' >Sň(Ï‘:</span></div>" ; html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString(row,L"PackTerm") + L"</span></div>" ; } if(dw_list.GetItemString(row,L"Remark")!=L"") { //html += L"<div style='height:12px'/>"; html += L"<div ><span style='font-weight:700;width:50;font-size:10pt' >Yèl:</span></div>" ; html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString(row,L"Remark") + L"</span></div>" ; } html += L"<div style='height:24px'/>"; //fhy˜ html += ls_star; //>f:yþVGr /*xstring picname = L"1FA9E331-F95C-4E51-B80C-73FB9B911D8D.jpg";//dw_list.GetItemString(row,L"ImgName"); //ItemID+L".jpg"; xstring str = picname.mid(0,2); str = str.toUpper(); xstring serversrc =L"http://192.168.7.241:1001/business/products/chanpin/"+str+L"/"+picname; html += L"<div ><span style='font-weight:700;width:50;font-size:10pt' >þVGr:</span>"; html += L"<control visible='layer' controlclass='ximage' data='' src='"+ serversrc +L"'/></div>"; */ html += L"</body></html>"; //trace(html); return html; } int OnPreviewImage() { HTREEITEM hItem = tv_folder.GetSelectedItem(); KXMLDOMElement e1= tv_folder.GetItemData(hItem); xstring categoryid = e1.selectSingleNode(L"@guid").text(); //alert(categoryid); xaserverarg arg; arg.AddArg(L"SKUID",L""); arg.AddArg(L"CategoryID",categoryid); OpenWindow(L"dev:xpage[PictureViewDlg.Product3.vx]",arg); return 1; } int DeleteRow(int row) { int IDOK = 1; int MB_OKCANCEL = 1; int MB_ICONQUESTION = 32; if(MessageBox(GetHWND(),L"nx¤‹ Rd–cš[„vy˜ ÿ Rd–T\ Ný€b` Y?",L"Ðc:y",MB_OKCANCEL|MB_ICONQUESTION)!=IDOK) return 1; xstring id = dw_list.GetGuid(row); if(ProductLibraryView::DeleteItem(id)==1) dw_list.DeleteRow(0); return 1; } int OnSearch() { HTREEITEM hItem = tv_folder.GetSelectedItem(); return RetrieveItem(hItem); } //}TäNÑS^ýQpe int OnCmdDispatch(xstring comdid) { int hCursor; xstring name=L""; if(comdid==L"xmClose") { CloseWindow(); return 1; } else if(comdid==L"xmDelete") { int row = dw_list.GetRow(); if(row < 1) return 1; DeleteRow(row); return 1; } else if(comdid==L"xmSearch") { OnSearch(); return 1; } else if(comdid==L"xmPreviewImage") { return OnPreviewImage(); } return 0; } //}TäNYt‹NöN int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } //å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; } //ÒceQ§NÁT{|y˜„vP[y˜ int MakeGoodsFolderItem(HTREEITEM hItem, xstring sno) { xml x = ProductLibraryView::GetTreeChildItems3(sno); if(!x) return 0; KXMLDOMNodeList nlist = x.selectNodes(L"//Item"); int len = nlist.length(); for (int i = 0; i < len; i++) { KXMLDOMElement e = nlist.item(i); xstring name = e.getAttribute(L"CName"); xstring no = e.getAttribute(L"CategoryNo"); xstring label = no.trim() + L" " + name; HTREEITEM h= tv_folder.InsertChildItem(hItem,label,e,15); tv_folder.SetItemChild(h,1); } return 1; } //ÒceQ°e§NÁTîvU_P[y˜ int MakeUserGoodsFolderItem(HTREEITEM hItem, xstring sno) { xml x = ProductLibraryView::GetTreeUserChildItems3(sno); if(!x) return 0; KXMLDOMNodeList nlist = x.selectNodes(L"//Item"); int len = nlist.length(); for (int i = 0; i < len; i++) { KXMLDOMElement e = nlist.item(i); xstring name = e.getAttribute(L"CName"); xstring no = e.getAttribute(L"CategoryNo"); xstring label = no.trim() + L" " + name; HTREEITEM h= tv_folder.InsertChildItem(hItem,label,e,15); xstring child = e.getAttribute(L"Childs"); if(child==L"") tv_folder.SetItemChild(h,1); else if(child !=L"0") tv_folder.SetItemChild(h,1); } return 1; } //hU\_ 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); xstring no = L""; KXMLDOMElement e; if(name == L"'÷S“^" && !child ) { no =L""; if(hTopItem != hItem) { e= tv_folder.GetItemData(hItem); no = e.getAttribute(L"categoryid"); }else { e= tv_folder.GetItemData(hItem); no = e.getAttribute(L"categoryid"); } MakeGoodsFolderItem(hItem, no); } return 1; } int ResetAgent(xstring agentAsk) { if(agentFor != agentAsk) { agentFor = agentAsk; m_agentNode = 0; SetAgent(); } return 1; } int RetrieveItem(HTREEITEM hItem) { HTREEITEM hTopItem = LookupTopFolder(hItem); xstring name = tv_folder.GetItemLabel(hTopItem); xstring selectname = tv_folder.GetItemLabel(hItem); ximageview im = GetControl(L"im1"); xcontrol query = GetControl(L"sl_search"); xstring queryString = query.GetText(); if(agentFor !=L"goodslib")SwitchLayer(L"goodslibsheet",L"sheetframe"); if(name == L"*NºN“^") ResetAgent(L"userlib"); else ResetAgent(L"goodslib"); HCURSOR hCursor = xutil::SetCursorWait(); if(name == L"*NºN“^" || name==L"'÷S“^") { xstring no=L"N000005"; if(name==L"*NºN“^") no=L"U000005"; if(hItem != hTopItem) { KXMLDOMElement e= tv_folder.GetItemData(hItem); no = e.getAttribute(L"guid"); } dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(no)); dw_list = GetControl(L"dw_list"); dw_list.Reset(); dw_list.SetReadOnly(true); if(queryString==L"") { if(name == L"*NºN“^") dw_list.Retrieve(ProductLibraryView::GetMaintRoleList3(no)); else dw_list.Retrieve(ProductLibraryView::GetMaintList3(no)); } else { if(name == L"*NºN“^") dw_list.Retrieve(ProductLibraryView::GetMaintRoleList3(no,queryString)); else { if(queryString !=L"") { if(no==L"N000005") dw_list.Retrieve(ProductLibraryView::GetMaintList3(L"",queryString,L"")); else dw_list.Retrieve(ProductLibraryView::GetMaintList3(no,queryString,L"")); }else dw_list.Retrieve(ProductLibraryView::GetMaintList3(no)); } } //dw_list.PostRetrieve(); dw_list.Redraw(); xshtml xs = GetControl(L"html_detail"); if(dw_list.GetRowCount() >0) { xs.SetContent(makeHtml(1)); xstring id = dw_list.GetGuid(1); OnShowImage(id); }else { im.Reset(); im.Redraw(); xs.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>"); } xs.Redraw(); xutil::RestoreCursor(hCursor); } dw_list.SetReadOnly(true); return 1; } int OnTreeSelChanged(TEvent* evt, int p) { NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; HTREEITEM hItem = nmtv.itemNew.hItem; return RetrieveItem(hItem); } 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); xstring name = e.getAttribute(L"cname"); xstring sImage = e.getAttribute(L"image"); int image = 15; //if(sImage) image = sImage.toInt(); HTREEITEM h= tv_folder.InsertChildItem(hItem,name,e ,image); 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"); ExpandChildFolder(0,e); return 1; } int OnAttachEvent() { //Ñ~š[å]wQag¹pûQ‹NöN AttachEvent(L"WM_XCOMMAND", (FEvent)&ProductSearchDlg::OnXCommand); //·ƒÖS&q¹p‹NöN ÿ(uŽN͑nå]wQag AttachEvent(L"WM_SETFOCUS", (FEvent)&ProductSearchDlg::OnSetFocus); AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductSearchDlg::OnRowChanged); AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", (FEvent)&ProductSearchDlg::OnTreeExpanding); AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ProductSearchDlg::OnTreeSelChanged); AttachEvent(L"im1",L"IMG_LDBCLICK", (FEvent)&ProductSearchDlg::OnImgDBClicked); return 1; } int OnImgDBClicked(TEvent* evt, int p) { IMGNNMHDR& nmtv = *(IMGNNMHDR*)evt->notify.pnmh; xstring src = nmtv.path; /*if(src.length()() > 60) src = src.right(44); else src=src.mid(src.find(L"Thumbs", 0)+6, 50); */ xaserverarg arg ; //arg.AddArg(L"src",L"/business/products/chanpin"+src); arg.AddArg(L"src",src); //win::OpenWindow(L"dev:xpage[BigPicture.vx]",arg); //int h = (L"/sale/view/ProductLibrary/xpage/bigpictureview", arg); OpenWindow(L"dev:xpage[BigPictureView.Product3.vx]", arg); /* xwin x = new xwin; x.setNativePointer(h); m_winHwnd = x.GetHWND(); xstring sh = doc.xml(); int p = cast(sh as int); SendMessage(m_winHwnd, 0x401, p, 0); */ return 1; } int onload() { SetArg(); agentFor = L"goodslib"; OnAttachEvent(); tv_folder = GetControl(L"tv_folder"); dw_list = GetControl(L"dw_list"); xaserverarg arg = GetArg(); hObject = 0; if(arg) { hObject = arg.GetArgString(L"HWND").toInt(); } InitialFolder(); dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(L"")); dw_list = GetControl(L"dw_list"); dw_list.SetReadOnly(true); if(dw_list.GetRowCount()) { xshtml xs = GetControl(L"html_detail"); xs.SetContent(makeHtml(1)); } tv_folder.ExpandItem(tv_folder.GetRootItem()); tv_folder.ItemFocus(tv_folder.GetRootItem()); HTREEITEM hItem = tv_folder.GetRootItem(); tv_folder.ItemFocus(hItem); return 1; } int onloaded() { SetAgent(); return 1; } };