ÿþ#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 <adt/xarray.hpp> #include <xcontrol/xcell.hpp> #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) QuickInputNewProductWin : public xframe { public: QuickInputNewProductWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} public: static QuickInputNewProductWin* CreateInstance(void* implPtr, void* hWnd) { return new QuickInputNewProductWin(implPtr, (HWND)hWnd); } public: xdwtable dw_detail; xdwtable dw_props; xdwtable dw_base; xnode m_agentNode; //Agent Condition xstring m_refno; xaserverarg parg; xarray<xstring> m_guids; xstring m_colNames[128]; xstring m_colTexts[128]; int m_colCount; bool m_toold; //xstring m_suppliers; int hObject = 0; 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; } //û‹ÖS§NÁTh„vP[y˜ xml RetrieveGoodsTreeChildItems(xstring sno) { xml x ; xaserverarg arg ; arg.AddArg(L"no",sno); if(xurl::get(L"/sale/data/SO/goods/goodslib/ChildFolderList", arg.GetString(),x)!=1) { xstring error = x.text(); //alert(error); return 0; }else return x; } //ÒceQ§NÁT{|y˜„vP[y˜ int MakeGoodsFolder(xstring sno,int level ) { xcombobox cbx_type = GetControl(L"cbx_category"); xml x = RetrieveGoodsTreeChildItems(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"no"); if(level == 1) cbx_type.AddItem(no +L" "+ name); else cbx_type.AddItem(L" "+ no +L" " + name); if(level ==1) MakeGoodsFolder(no,level + 1); } return 1; } //&q¹pÀo;mYtýQpe int OnSetFocus(TEvent* evt, LPARAM param) { //͑nå]wQag SetAgent(); return 1; } xstring GetNo() { /* xstring typ = m_refno.left(1); xstring second = m_refno.mid(1,1); if(second<"0" || second > "9") typ += second; if(m_refno==L"[°e§NÁT]") typ=L"N"; if(m_refno.left(1)==L"[") typ=L"N"; */ xstring typ=L"C"; if(m_refno.left(1)==L"[") typ=L"N"; xml x; xaserverarg arg ; arg.AddArg(L"count", L"1" ); arg.AddArg(L"type", typ ); if(xurl::get(L"/sale/data/SO/goods/usegoods/goodslib/asknos", arg.GetString(),x)!=1)return L""; return x.text(); } xstring GetGuid() { return publiccode::GetGuid(); } int ValidData(xstring colname, xstring coldata) { if(colname==L"Supplier") { return 1; } return 1; } int OnSave() { m_refno =xcontrol(GetControl(L"cbx_category")).GetText(); m_refno = m_refno.ltrim(); if(m_refno.find(L" ",0)>=0) m_refno = m_refno.left(m_refno.find(L" ")); xcell xc = GetControl(L"dw_list"); //xc.AcceptText(); int vRow = xc.GetValidRow(); xstring strXml = L""; xstring strRow = L""; strXml =L""; xstring dstr=L""; for(int i=0; i < m_guids.length(); i++) { dstr += L"<Item update.delete='1' guid='" + m_guids.item(i)+L"'/>"; } m_guids.clear(); xstring sdate = publiccode::GetCurrentDate(); xstring userid = publiccode::GetUser().id; bool bUpdate = false; int col = 0; xstring colName = L""; int srow = 0; xstring val = L""; for(int row=2; row < vRow; ++row) { int vCol = xc.GetValidCol(row); strRow = L""; if(vCol > m_colCount) vCol = m_colCount; bool hasdata = false; bUpdate = false; for(col = 1; col <= vCol; ++col) { colName = m_colNames[col - 1]; srow = xc.GetSpanTop(row,col); val = xc.GetItemString(srow,col); if(val.find(L"&")>=0) val = L"<![CDATA[" + val +L"]]>"; else if(val.find(L"<")>=0) val = L"<![CDATA[" + val +L"]]>"; if(val==L"") continue; if(srow == row) hasdata = true; if(colName==L"No")continue; strRow += L"<" + colName +L">" + val + L"</"+colName+L">"; } if(hasdata) { for(col = 1; col <= vCol; ++col) { colName = m_colNames[col - 1]; srow = xc.GetSpanTop(row,col); val = xc.GetItemString(srow,col); if(colName == L"CName" && val == L"") { alert(L"÷‹“eQ-N‡e Tðy"); return 0; } /*if(colName == L"EName" && val == L"") { alert(L"÷‹“eQñ‚‡e Tðy"); return 0; }*/ if(colName == L"Packing" && val == L"") { alert(L"÷‹“eQSň¹e_"); return 0; } if(colName == L"InnerQty" && val == L"") { alert(L"÷‹“eQ…Q±{pe"); return 0; } if(colName == L"PackingRate" && val == L"") { alert(L"÷‹“eQY±{pe"); return 0; } if(colName == L"PackageL" && val == L"") { alert(L"÷‹“eQ§NÁT•¦^"); return 0; } if(colName == L"PackageW" && val == L"") { alert(L"÷‹“eQ§NÁT½[¦^"); return 0; } if(colName == L"PackageH" && val == L"") { alert(L"÷‹“eQ§NÁTؚ¦^"); return 0; } } val = xc.GetItemString(srow,1); if(val.find(L"&")>=0) val = L"<![CDATA[" + val +L"]]>"; else if(val.find(L"<")>=0) val = L"<![CDATA[" + val +L"]]>"; colName = L"No"; if(val != L"") { bUpdate = true; strRow += L"<" + colName +L">" + val + L"</"+colName+L">"; } else { val = GetNo(); strRow += L"<" + colName +L">" + val + L"</"+colName+L">"; xc.SetItemString(srow,1,val); } xstring guid = GetGuid(); strRow += L"<FolderID>"+ parg.GetArgString(L"guid")+L"</FolderID>"; strRow += L"<CreateID>"+userid+L"</CreateID>"; strRow += L"<CreateDate>"+sdate+L"</CreateDate>"; if(dw_base.GetItemString(1,L"CategoryID")!=L"") strRow += L"<CategoryID>"+dw_base.GetItemString(1,L"CategoryID")+L"</CategoryID>"; if(dw_base.GetItemString(1,L"SupplierID")!=L"") strRow += L"<SupplierID>"+dw_base.GetItemString(1,L"SupplierID")+L"</SupplierID>"; strXml += L"<Item update.new='1' update.modify='1' guid=\"" + guid +L"\">" + strRow +L"</Item>"; m_guids.push_back(guid); xc.Redraw(); } } xml x; xaserverarg arg ; arg.AddArg(L"series", m_refno ); arg.AddArg(L"content", L"<data>" + dstr + strXml + L"</data>"); xstring error = L""; if(xurl::get(L"/sale/data/ProductLibrary3/update/newestproduct", arg.GetString(),x)!=1) { error = x.text(); alert(error); } else { if(!m_toold) { alert(L"ÝOX[bŸR"); }else { if(xurl::get(L"/workflow/action/ProductLibrary3/bill.update.tooldserver", arg.GetString(),x)!=1) { error = x.text(); alert(L"pencò]ÝOX[FO Tek NbŸR\r\n err:"+error); return 1; } else { alert(L"pencÝOX[v^ TekbŸR!"); } } } if(parg)parg.AddArg(L"data.modify",L"1"); return 1; } int SendCtrlCmd(xcontrol xc, xstring cmd) { SendMessage(xc.GetHWND(),0x401,(WPARAM)cmd.c_str(), 0); return 1; } //}TäNÑS^ýQpe int OnCmdDispatch(xstring comdid) { xcell dw_list; if(comdid.left(3) == L"IK_") { xstring cmd = comdid.mid(3, comdid.length()); SendCtrlCmd(GetControl(L"dw_list"),cmd); return 1; } else if(comdid==L"xmFileOpen") { dw_list = GetControl(L"dw_list"); dw_list.OpenFile(); dw_list.Redraw(); return 1; } else if(comdid==L"xmFileSave") { dw_list = GetControl(L"dw_list"); dw_list.SaveFile(); return 1; } else if(comdid==L"xmFileSaveAs") { dw_list = GetControl(L"dw_list"); dw_list.SaveFileAs(); return 1; } else if(comdid==L"xmSave") { OnSave(); return 1; } else if(comdid==L"xmCancel") { CloseWindow(); return 1; } else if(comdid==L"xmValid") { xcell xc = GetControl(L"dw_list"); //xc.SetRunState(); xc.SetReadOnly(true); return 1; } return 0; } int OnCellClicked(TEvent* evt, int p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; if(hdr.col ==1)hdr.idFrom = -1; if(hdr.col ==2)hdr.idFrom = -1; if(hdr.row==1)hdr.idFrom = -1; return 2; } int OnCellItemChanged(TEvent* evt, int p) { CELLNMHDR& hdr = *(CELLNMHDR*)evt->notify.pnmh; /*int currentrow; int currentcol; const xstring data; int anchorrow; int anchorcol;*/ if(hdr. currentcol==1 && hdr.data !=L"") { xcell xc = GetControl(L"dw_list"); xc.SetItemString(hdr.currentrow,hdr.currentcol, L""); } return 1; } int OnCategoryChanged(TEvent* evt, int lParam) { xstring id = L""; xstring name = L""; xcombobox cbx_type = GetControl(L"cbx_category"); int h = cbx_type.GetCurSel(); xstring str = cbx_type.GetLBText(h); str = str.trim(); //m_refno = str.left(str.find(L" ")); //LoadTemplate(m_refno); return 1; } int addCol(xstring col,xstring text) { m_colNames[m_colCount] = col ; m_colTexts[m_colCount] = text ; m_colCount++; return m_colCount - 1; } int LoadTemplate(xstring refno) { xcell dw_list = GetControl(L"dw_list"); xml x = ViewObject::RetrieveData(L"/sale/data/Quote/quick/newestproducts",L"refno",refno); m_colCount = 0; KXMLDOMDocument doc = x; KXMLDOMNodeList texts = doc.selectNodes(L"//row[1]/cell"); KXMLDOMNodeList items = doc.selectNodes(L"//row[position()=2]/cell"); int len = items.length(); for(int i=0;i<len;i++) { KXMLDOMNode node =items.item(i).selectSingleNode(L"@columnName"); if(!node) node =items.item(i).selectSingleNode(L"@column"); if(node) addCol(node.text(),texts.item(i+1).text()); } if(x) dw_list.LoadTemplate(x); int vCol = dw_list.GetValidCol(1); dw_list.SetRowColumn(1,1); dw_list.SetAnchorRowColumn(1,32); SendCtrlCmd(dw_list,L"xmFormatBold"); SendCtrlCmd(dw_list,L"xmFormatAlignCenter"); dw_list.SetAnchorRowColumn(1,1); return 1; } //}TäNYt‹NöN int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } int OnAttachEvent() { //Ñ~š[å]wQag¹pûQ‹NöN AttachEvent(L"WM_XCOMMAND", (FEvent)&QuickInputNewProductWin::OnXCommand); //·ƒÖS&q¹p‹NöN ÿ(uŽN͑nå]wQag AttachEvent(L"WM_SETFOCUS", (FEvent)&QuickInputNewProductWin::OnSetFocus); AttachEvent(L"cbx_category",L"CBN_SELCHANGE", (FEvent)&QuickInputNewProductWin::OnCategoryChanged); AttachEvent(L"dw_list",L"CELL_ITEMCHANGED", (FEvent)&QuickInputNewProductWin::OnCellItemChanged); AttachEvent(L"dw_list",L"DWV_CLICKED", (FEvent)&QuickInputNewProductWin::OnCellClicked); return 1; } int onload() { SetArg(); parg = 0; m_toold = false; dw_base = GetControl(L"dw_base"); dw_base.openUrl(L"/sale/view/ProductLibrary/template/newitemgroup"); dw_base.SetColHeaderHeight(0); dw_base.SetRowSelectorWidth(0); dw_base.SetHScrollState(false); dw_base.SetVScrollState(false); dw_base.SetEditUpperMode(true); if(GetWinParam()) { parg = GetArg(); xcombobox cbx_type = GetControl(L"cbx_category"); xstring txt = parg.GetArgString(L"CategoryNo").trim() + L" " + parg.GetArgString(L"CName").trim(); cbx_type.AddItem(txt, (LPARAM)parg.GetArgString(L"guid").c_str(true)); //leak cbx_type.SetText(txt); } LoadTemplate(L"[°e§NÁT]"); SetAgent(); OnAttachEvent(); return 1; } int onloaded() { return 1; } };