ÿþuse "xcontrol.vframe.vbusiness.vd" use "xbase.vframe.vbusiness.vd" use "vbind.vbind.wface.vd" use "publiccode.vutil.vbusiness.vd" use "stringArray.vd" unit trade [ class QuickInputNewProductWin : public xwin { xdwtable dw_detail; xdwtable dw_props; xdwtable dw_base; xnode m_agentNode; //Agent Condition string m_refno; xaserverarg parg; StringArray m_guids; string[128] m_colNames; string[128] m_colTexts; int m_colCount; bool m_toold; //string m_suppliers; int hObject = 0; int SetAgent() { string xfNodeAgentArea = "agentarea"; xnode anode = GetAgentNode(xfNodeAgentArea); if(m_agentNode) { SetAgentNodeContent (anode,m_agentNode); } else { msxml::IXMLDOMElement xframeElement = GetElement(); msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*"); if(agent) { string s = agent.xml; m_agentNode = SetAgentNodeContent (anode,s); } } return 1; } //û‹ÖS§NÁTh„vP[y˜ xml RetrieveGoodsTreeChildItems(string sno) { xml x = new xml; x.setNativePointer(x.CreateInstance()); xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); arg.AddArg("no",sno); if(url::get("/sale/data/SO/goods/goodslib/ChildFolderList", arg.GetString(),x)!=1) { string error = x.GetXmlDoc().text; //alert(error); return 0; }else return x; } //ÒceQ§NÁT{|y˜„vP[y˜ int MakeGoodsFolder(string sno,int level ) { xcombobox cbx_type = GetControl("cbx_category"); xml x = RetrieveGoodsTreeChildItems(sno); if(!x) return 0; msxml::IXMLDOMNodeList nlist = x.GetXmlDoc().SelectNodes("//Item"); int len = nlist.length; for (int i = 0; i < len; i++) { msxml::IXMLDOMElement e = nlist.item(i); string name = e.getAttribute("cname"); string no= e.getAttribute("no"); if(level == 1) xcombobox::AddItem(cbx_type.GetId(),no +" "+ name); else xcombobox::AddItem(cbx_type.GetId()," "+ no +" " + name); if(level ==1) MakeGoodsFolder(no,level + 1); } return 1; } //&q¹pÀo;mYtýQpe int OnSetFocus(ref TEvent evt,int param) { //͑nå]wQag SetAgent(); return 1; } string GetNo() { /* string typ = m_refno.left(1); string second = m_refno.mid(1,1); if(second<"0" || second > "9") typ += second; if(m_refno=="[°e§NÁT]") typ="N"; if(m_refno.left(1)=="[") typ="N"; */ string typ="C"; if(m_refno.left(1)=="[") typ="N"; xml x=new xml; x.setNativePointer(xml::CreateInstance()); xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); arg.AddArg("count", "1" ); arg.AddArg("type", typ ); if(url::get("/sale/data/SO/goods/usegoods/goodslib/asknos", arg.GetString(),x)!=1)return ""; return x.GetXmlDoc().text; } string GetGuid() { return publiccode::GetGuid(); } int ValidData(string colname, string coldata) { if(colname=="Supplier") { return 1; } return 1; } int OnSave() { m_refno = GetControl("cbx_category").GetText(); m_refno = m_refno.ltrim(); if(m_refno.find(" ",0)>=0) m_refno = m_refno.left(m_refno.find(" ")); xcell xc = GetControl("dw_list"); //xc.AcceptText(); int vRow = xc.GetValidRow(); string strXml = ""; string strRow = ""; strXml =""; string dstr=""; for(int i=0; i < m_guids.length(); i++) { dstr += "<Item update.delete='1' guid='" + m_guids.item(i)+"'/>"; } m_guids.length_ = 0; string sdate = publiccode::GetCurrentDate(); string userid = publiccode::GetUser().id; bool bUpdate = false; for(int row=2; row < vRow; ++row) { int vCol = xc.GetValidCol(row); strRow = ""; if(vCol > m_colCount) vCol = m_colCount; bool hasdata = false; bUpdate = false; for(int col = 1; col <= vCol; ++col) { string colName = m_colNames[col - 1]; int srow = xc.GetSpanTop(row,col); string val = xc.GetItemString(srow,col); if(val.find("&")>=0) val = "<![CDATA[" + val +"]]>"; else if(val.find("<")>=0) val = "<![CDATA[" + val +"]]>"; if(val=="") continue; if(srow == row) hasdata = true; if(colName=="No")continue; strRow += "<" + colName +">" + val + "</"+colName+">"; } 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 == "CName" && val == "") { alert("÷‹“eQ-N‡e Tðy"); return 0; } /*if(colName == "EName" && val == "") { alert("÷‹“eQñ‚‡e Tðy"); return 0; }*/ if(colName == "Packing" && val == "") { alert("÷‹“eQSň¹e_"); return 0; } if(colName == "InnerQty" && val == "") { alert("÷‹“eQ…Q±{pe"); return 0; } if(colName == "PackingRate" && val == "") { alert("÷‹“eQY±{pe"); return 0; } if(colName == "PackageL" && val == "") { alert("÷‹“eQ§NÁT•¦^"); return 0; } if(colName == "PackageW" && val == "") { alert("÷‹“eQ§NÁT½[¦^"); return 0; } if(colName == "PackageH" && val == "") { alert("÷‹“eQ§NÁTؚ¦^"); return 0; } } val = xc.GetItemString(srow,1); if(val.find("&")>=0) val = "<![CDATA[" + val +"]]>"; else if(val.find("<")>=0) val = "<![CDATA[" + val +"]]>"; colName = "No"; if(val != "") { bUpdate = true; strRow += "<" + colName +">" + val + "</"+colName+">"; } else { val = GetNo(); strRow += "<" + colName +">" + val + "</"+colName+">"; xc.SetItemString(srow,1,val); } string guid = GetGuid(); strRow += "<FolderID>"+ parg.GetArgString("guid")+"</FolderID>"; strRow += "<CreateID>"+userid+"</CreateID>"; strRow += "<CreateDate>"+sdate+"</CreateDate>"; if(dw_base.GetItemString(1,"CategoryID")!="") strRow += "<CategoryID>"+dw_base.GetItemString(1,"CategoryID")+"</CategoryID>"; if(dw_base.GetItemString(1,"SupplierID")!="") strRow += "<SupplierID>"+dw_base.GetItemString(1,"SupplierID")+"</SupplierID>"; strXml += "<Item update.new='1' update.modify='1' guid=\"" + guid +"\">" + strRow +"</Item>"; m_guids.push_back(guid); xc.Redraw(); } } xml x=new xml; x.setNativePointer(xml::CreateInstance()); xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); arg.AddArg("series", m_refno ); arg.AddArg("content", "<data>" + dstr + strXml + "</data>"); string error = ""; if(url::get("/sale/data/ProductLibrary3/update/newestproduct", arg.GetString(),x)!=1) { error = x.GetXmlDoc().text; alert(error); } else { if(!m_toold) { alert("ÝOX[bŸR"); }else { if(url::get("/workflow/action/ProductLibrary3/bill.update.tooldserver", arg.GetString(),x)!=1) { error = x.GetXmlDoc().text; alert("pencò]ÝOX[FO Tek NbŸR\r\n err:"+error); return 1; } else { alert("pencÝOX[v^ TekbŸR!"); } } } if(parg)parg.AddArg("data.modify","1"); return 1; } int SendCtrlCmd(xcontrol xc, string cmd) { win32::SendMessage(xc.GetId(),0x401,cmd,0); return 1; } //}TäNÑS^ýQpe int OnCmdDispatch(string comdid) { xcell dw_list; if(comdid.left(3) == "IK_") { string cmd = comdid.mid(3, comdid.length()); SendCtrlCmd(GetControl("dw_list"),cmd); return 1; } else if(comdid=="xmFileOpen") { dw_list = GetControl("dw_list"); dw_list.OpenFile(); dw_list.Redraw(); return 1; } else if(comdid=="xmFileSave") { dw_list = GetControl("dw_list"); dw_list.SaveFile(); return 1; } else if(comdid=="xmFileSaveAs") { dw_list = GetControl("dw_list"); dw_list.SaveFileAs(); return 1; } else if(comdid=="xmSave") { OnSave(); return 1; } else if(comdid=="xmCancel") { CloseWindow(); return 1; } else if(comdid=="xmValid") { xcell xc = GetControl("dw_list"); //xc.SetRunState(); xc.SetReadOnly(true); return 1; } return 0; } int OnCellClicked(ref TNotifyEvent evt,int p) { ref DWNMHDR hdr = trust(evt.pnmh as ref DWNMHDR); 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(ref TNotifyEvent evt,int p) { ref CELLNMHDR hdr = trust(evt.pnmh as ref CELLNMHDR); /*int currentrow; int currentcol; const string data; int anchorrow; int anchorcol;*/ if(hdr. currentcol==1 && hdr.data !="") { xcell xc = GetControl("dw_list"); xc.SetItemString(hdr.currentrow,hdr.currentcol, ""); } return 1; } int OnCategoryChanged(ref TCommandEvent evt,int lParam) { string id = ""; string name = ""; xcombobox cbx_type = GetControl("cbx_category"); int h = xcombobox::GetCurSel(cbx_type.GetId()); string str = xcombobox::GetLBText(cbx_type.GetId(),h); str = str.trim(); //m_refno = str.left(str.find(" ")); //LoadTemplate(m_refno); return 1; } int addCol(string col,string text) { m_colNames[m_colCount] = col ; m_colTexts[m_colCount] = text ; m_colCount++; } int LoadTemplate(string refno) { xcell dw_list = GetControl("dw_list"); xml x = vcontrol::RetrieveData("/sale/data/Quote/quick/newestproducts","refno",refno); m_colCount = 0; msxml::IXMLDOMDocument doc = x.GetXmlDoc(); msxml::IXMLDOMNodeList texts = doc.selectNodes("//row[1]/cell"); msxml::IXMLDOMNodeList items = doc.selectNodes("//row[position()=2]/cell"); int len = items.length; for(int i=0;i<len;i++) { msxml::IXMLDOMNode node =items.item(i).selectSingleNode("@columnName"); if(!node) node =items.item(i).selectSingleNode("@column"); if(node) addCol(node.text,texts.item(i+1).text); } if(x) dw_list.LoadTemplate(x.GetXmlDoc()); int vCol = dw_list.GetValidCol(1); dw_list.SetRowColumn(1,1); dw_list.SetAnchorRowColumn(1,32); SendCtrlCmd(dw_list,"xmFormatBold"); SendCtrlCmd(dw_list,"xmFormatAlignCenter"); dw_list.SetAnchorRowColumn(1,1); return 1; } //}TäNYt‹NöN int OnXCommand(ref TXCommandEvent evt,int param) { return OnCmdDispatch(evt.pStrID); } int OnAttachEvent() { //Ñ~š[å]wQag¹pûQ‹NöN AttachEvent("WM_XCOMMAND",OnXCommand); //·ƒÖS&q¹p‹NöN ÿ(uŽN͑nå]wQag AttachEvent("WM_SETFOCUS",OnSetFocus); AttachEvent("cbx_category","CBN_SELCHANGE",OnCategoryChanged); AttachEvent("dw_list","CELL_ITEMCHANGED", OnCellItemChanged); AttachEvent("dw_list","DWV_CLICKED", OnCellClicked); } int onload() { parg = 0; m_toold = false; dw_base = GetControl("dw_base"); dw_base.openUrl("/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(GetParam()) { parg = GetParam(); xcombobox cbx_type = GetControl("cbx_category"); string txt = parg.GetArgString("CategoryNo").trim() + " " + parg.GetArgString("CName").trim(); xcombobox::AddItem(cbx_type.GetId(),txt, cast(parg.GetArgString("guid") as int)); cbx_type.SetText(txt); } LoadTemplate("[°e§NÁT]"); m_guids = StringArray::make(); SetAgent(); OnAttachEvent(); return 1; } int onloaded() { return 1; } }; ]