þÿ#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 "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) CustomCodeNew : public listwin { public: xdwgrid dw_list; xdwgrid dw_detail; //xnode m_agentNode; //Agent Condition //xstring m_agentCond; //Agent Node public: CustomCodeNew(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {} public: static CustomCodeNew* CreateInstance(void* implPtr, void* hWnd) { CustomCodeNew* pWin = new CustomCodeNew(implPtr, (HWND)hWnd); return pWin; } int SetAgent() { xstring xfNodeAgentArea = L"agentarea"; xnode anode = GetAgentNode(xfNodeAgentArea); KXMLDOMElement xframeElement = GetElement(); KXMLDOMNode agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*"); if (agent) SetAgentNode(anode, agent.xml()); return 1; } //S»–d code = k=0 xstring str_replace(xstring code, xstring key, xstring b, int k) { int i = code.find(key, k); if (i > -1) { xstring tmp; if (i == 0) tmp = b + code.mid(i + key.length(), code.length()); else if (i + key.length() == code.length()) tmp = code.mid(0, i) + b; else tmp = code.mid(0, i) + b + code.mid(i + key.length(), code.length()); str_replace(tmp, key, b, i + b.length() + 1); } else return L"" + code; } xstring str_replace(xstring code, xstring key, xstring b) { return str_replace(code, key, b, 0); } int OnRetrieveDetail(xstring ClassifyID) { dw_detail.Reset(); xml x ; xaserverarg arg; arg.AddArg(L"ClassifyID", ClassifyID); if (xurl::get(L"/sale/data/ProductCode/entity/list_customclassify", arg.GetString(), x) != 1) { trace(x.text()); return -1; } dw_detail.AcceptText(); dw_detail.Retrieve(x); dw_detail.Redraw(); } //ˆLe9SØ dw_detail ßw@e9SØ int OnRowClicked(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; dw_list.Redraw(); dw_detail.Reset(); KXMLDOMElement e = dw_list.GetRowElement(row);//ƒ·S֐ N-ˆLv„Oá`o xstring ClassifyID = e.selectSingleNode(L"ClassifyID").text(); //u3b¥‰} OnRetrieveDetail(ClassifyID); return 1; } //q&p¹oÀm;YtQýep int OnSetFocus(TEvent* evt, LPARAM param) { SetAgent(); //‘Ín]åQwga return 1; } xstring GetDecElement(xstring strp) { dw_detail.AcceptText(); dw_detail = new xdwgrid; dw_detail = GetControl(L"dw_detail"); xml x ; dw_detail.DwUpdateAllToEx(x); //trace(x.xml()); KXMLDOMElement e = x.selectSingleNode(L"root"); KXMLDOMNodeList nlist = e.selectNodes(L"//dw_t_exp_custom_classify_query"); xstring str = L""; if (nlist) { int i; int s = nlist.length(); if (s > 0) { for (i = 0; i < s; i++) { KXMLDOMElement xitem = nlist.item(i); xstring content = xitem.selectSingleNode(strp).text(); if (i == (s - 1) && content != L"") { str += L"" + xstring((i + 1))+ L"." + content; } else if (content != L"") { str += L"" + xstring((i + 1)) + L"." + content + L"; "; } } } } return str; } int OnDetailSave() { dw_detail.AcceptText(); xml x ; dw_detail.DwUpdateAllToEx(x); xaserverarg arg; KXMLDOMNodeList nlist = x.selectNodes(L"root/dw_t_exp_custom_classify_query[(@update.new='1') or (@update.modify='1') or (@update.delete='1') ]"); xml y ; y.loadXML(L"<root/>"); KXMLDOMElement eee = y.selectSingleNode(L"root"); if (nlist) { int i; int s = nlist.length(); if (s > 0) { for (i = 0; i < s; i++) { KXMLDOMElement xitem = nlist.item(i); eee.appendChild(xitem); } } } arg.AddArg(L"content", eee.xml()); if (xurl::get(L"/sale/data/ProductCode/pref/CDElements.save", arg.GetString(), x) != 1) { trace(L"error:" + (xstring)x.xml()); alert(L"OÝ[XY1%!"); return 0; } else { dw_detail.ResetUpdateStatus(); alert(L"OÝ[XbRŸ2!"); } dw_detail.Redraw(); return 1; } //OÝ[X int OnSave() { dw_list.AcceptText(); //xstring Specifications = GetDecElement(L"default_value"); xml x ; dw_list.DwUpdateAllToEx(x); xaserverarg arg; KXMLDOMNodeList nlist = x.selectNodes(L"root/dw_code_customno[(@update.new='1') or (@update.modify='1') or (@update.delete='1') ]"); int s = nlist.length(); if (s == 0) { OnDetailSave(); return 1; } xml y ; y.loadXML(L"<root/>"); KXMLDOMElement eee = y.selectSingleNode(L"root"); int i; for (i = 0; i < s; i++) { KXMLDOMElement xitem = nlist.item(i); eee.appendChild(xitem); } arg.AddArg(L"content", eee.xml()); //arg.AddArg(L"Spec",Specifications); //arg.AddArg(L"dbmap",L"CustomCodeNew.dbmap"); if (xurl::get(L"/sale/data/ProductCode/pref/customcode.save", arg.GetString(), x) != 1) { trace(L"error:" + (xstring)x.xml()); alert(L"OÝ[XY1%!"); return 0; } else { //alert(L"OÝ[XbRŸ1!"); dw_list.ResetUpdateStatus(); int total_row = dw_detail.GetRowCount(); if (total_row > 0) OnDetailSave(); else alert(L"OÝ[XbRŸ!"); } dw_list.Redraw(); return 1; } //e°Xž int OnAddRow() { dw_list.AcceptText(); dw_list.InsertRow(0); int rows = dw_list.GetRowCount(); dw_list.SetRow(rows); dw_list.ShowRowTo(rows); xstring ClassifyID = publiccode::GetGuid(); dw_list.SetItemString(rows, L"ClassifyID", ClassifyID); OnRetrieveDetail(ClassifyID); //dw_detail.Reset(); return 1; } //cÒQe int OnInsertRow() { dw_list.AcceptText(); int row1 = dw_list.GetRow(); if (row1 < 1) return 0; dw_list.InsertRow(row1); dw_list.SetRow(row1); xstring ClassifyID = publiccode::GetGuid(); dw_list.SetItemString(row1, L"ClassifyID", ClassifyID); OnRetrieveDetail(ClassifyID); //dw_detail.Reset(); } //R –d int OnDeleteRow() { int row2 = dw_list.GetRow(); if (row2 < 1) return 0; xstring ClassifyID = dw_list.GetItemString(row2, L"ClassifyID"); xaserverarg arg; arg.AddArg(L"ClassifyID", ClassifyID); xml x ; if (xurl::get(L"/sale/data/Custom3/custom/GetGDNLineClassifyID", arg.GetString(), x) != 1) { trace(L"error:" + (xstring)x.xml()); return 0; } else { xstring r = x.text(); int r1 = r.toInt(); if (x) { if (r1 > 0) { alert(L"]ò_u(mwQsS÷ÿ eàlÕR –dÿ"); return 0; } } } dw_list.DeleteRow(row2); } int OnDetailDelete() { //int row = dw_detail.GetRow(); //if(row < 1) // return 0; dw_detail.DeleteRow(0); return 1; } int OnDetailAdd() { int row = dw_detail.GetRowCount(); xstring ClassifyID, g_name, HSCode; int e_seq; if (row < 1) { int row2 = dw_list.GetRow(); if (row2 < 1) return 0; ClassifyID = dw_list.GetItemString(row2, L"ClassifyID"); g_name = dw_list.GetItemString(row2, L"g_name"); HSCode = dw_list.GetItemString(row2, L"code_t"); e_seq = 0; } else { ClassifyID = dw_detail.GetItemString(row, L"ClassifyID"); g_name = dw_detail.GetItemString(row, L"g_name"); e_seq = dw_detail.GetItemString(row, L"e_seq").toInt() + 1; HSCode = dw_detail.GetItemString(row, L"spsh"); } dw_detail.InsertRow(0); row = dw_detail.GetRowCount(); dw_detail.SetItemString(row, L"ClassifyID", ClassifyID); dw_detail.SetItemString(row, L"e_seq",xstring(e_seq)); dw_detail.SetItemString(row, L"g_name", g_name); dw_detail.SetItemString(row, L"spsh", HSCode); } int OnRefresh() { OnRetrieve(); return 0; } //R }dw_listepcn int OnRetrieve() { xaserverarg arg; arg.AddArg(L"id", L"dw_code_customno"); xcontrol xs = GetControl(L"HSCode"); arg.AddArg(L"HSCode", xs.GetText()); xml x ; if (getUrl(L"/sale/data/ProductCode/entity/list", arg.GetString(), x) != 1) { return -1; } else { dw_list.Retrieve(x); dw_list.Redraw(); } return 1; } //T}NäSÑ^Qýep int OnCmdDispatch(xstring comdid) { if (comdid == L"Save") OnSave(); else if (comdid == L"AddRow") OnAddRow(); else if (comdid == L"InsertRow") OnInsertRow(); else if (comdid == L"DeleteRow") OnDeleteRow(); else if (comdid == L"xmDetailSave") OnSave(); else if (comdid == L"xmDetailDelete") OnDetailDelete(); else if (comdid == L"xmDetailAdd") OnDetailAdd(); else if (comdid == L"Refresh") OnRefresh(); else if (comdid == L"xmSearch") OnRetrieve(); return 0; } //T}NäYtN‹Nö int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } int OnGridRClicked(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int idfrom = hdr.idFrom; xaserverarg arg; arg.AddArg(L"__ModifyRows_" + xstring(idfrom), L"by‘ÏOîe9"); hdr.data = arg.GetString(); return 1; } int OnItemChanged(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; xstring colname = hdr.colname; xstring value = hdr.data; int row = hdr.row; if (colname == L"taxhscode") { xaserverarg arg; arg.AddArg(L"code", value); xml x ; if (xurl::get(L"/sale/data/ProductCode/pref/custominfo", arg.GetString(), x) != 1) { trace(L"error:" + (xstring)x.xml()); return 0; } else { KXMLDOMNodeList items = x.selectNodes(L"root/Item"); if (items.length() > 0) { KXMLDOMNode t = items.item(0); if (t.selectSingleNode(L"UOM"))dw_list.SetItemString(row, L"code_unit", t.selectSingleNode(L"UOM").text()); if (t.selectSingleNode(L"VATRates"))dw_list.SetItemString(row, L"VATRate", t.selectSingleNode(L"VATRates").text()); if (t.selectSingleNode(L"VATRefundRate"))dw_list.SetItemString(row, L"retax", t.selectSingleNode(L"VATRefundRate").text()); } } } } //lèQŒN‹Nö int OnAttachEvent() { //~Ñ[š]åQwgap¹QûN‹Nö AttachEvent(L"WM_XCOMMAND", (FEvent)&CustomCodeNew::OnXCommand); //ƒ·SÖq&p¹N‹Nöÿ u(NŽ‘Ín]åQwga AttachEvent(L"WM_SETFOCUS", (FEvent)&CustomCodeNew::OnSetFocus); AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&CustomCodeNew::OnRowClicked); AttachEvent(L"dw_list", L"DWV_RCLICKED", (FEvent)&CustomCodeNew::OnGridRClicked); AttachEvent(L"dw_list", L"DWV_ITEMCHANGED", (FEvent)&CustomCodeNew::OnItemChanged); //AttachEvent(L"dw_list",L"DWV_DOUBLECLICKED",OnDoubleClicked); //AttachEvent(L"dw_list",L"DWV_ITEMCHANGED",OnItemChanged); //AttachEvent(L"dw_detail",L"DWV_ITEMCHANGED",OnDetailChanged); return 1; } int OnInitial() { SetAgent(); OnAttachEvent(); OnRetrieve(); return 1; } int onload() { dw_list = GetControl(L"dw_list"); dw_detail = GetControl(L"dw_detail"); dw_list.openUrl(L"/sale/view/ProductCode/template/customnocodenew/list"); dw_list.SetColumnState(L"code_s", false); //dw_list.SetColumnState(L"ClassifyID",false); dw_list.SetColumnState(L"code_t_1", false); dw_detail.openUrl(L"/sale/view/ProductCode/template/customnocodenew/list_customclassify"); dw_detail.SetColumnState(L"ClassifyID", false); //dw_detail.SetColumnState(L"e_seq",false); dw_detail.SetColumnState(L"kp_flag", false); dw_detail.SetColumnState(L"g_name", false); dw_detail.SetColumnState(L"spsh", false); OnInitial(); //dw_list.SetEditUpperModeEx(1); //dw_detail.SetEditUpperModeEx(1); return 1; } };