ÿþ#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) FactoryTempDeductView : public xframe { public: xdwgrid dw_list; xdwtable dw_arg; xstring searchStr; xstring argStr; xnode m_agentNode; //Agent Condition public: FactoryTempDeductView(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} public: static FactoryTempDeductView* CreateInstance(void* implPtr, void* hWnd) { FactoryTempDeductView* pWin = new FactoryTempDeductView(implPtr, (HWND)hWnd); return pWin; } 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 OnSave() { xml x ; dw_list.AcceptText(); dw_list.DwUpdateAllToEx(x); xaserverarg arg ; xml x0; x0.loadXML(L"<data/>"); KXMLDOMNodeList t = x.selectNodes(L"data/Item[(@update.new='1') or (@update.modify='1') or (@update.delete='1') ]"); KXMLDOMElement e1= x0.documentElement(); xstring val0 = x.xml(); for(int i=0;i<t.length();i++) { KXMLDOMElement e= t.item(i); e1.appendChild(e); } arg.AddArg(L"content",x0.xml()); if(xurl::get(L"/sale/data/expense3/update/FactoryTempDeduct", arg.GetString(),x)!=1) { xstring error = x.text(); alert(L"err:"+error); return 1; } xstring str = x.documentElement().getAttribute(L"text"); if(str == L"true") { dw_list.ResetUpdateStatus(); alert(L"ÝOX[bŸR!"); }else { alert(L"ÝOX[1Y%!"); } return 1; } int OnAddRow() { dw_list.InsertRow(0); int row = dw_list.GetRowCount(); dw_list.SetItemString(row, L"Remark", L"‰”‰”¡[$R-N"); dw_list.SetItemString(row, L"SuspendStatus", L"*g‚fcb"); dw_list.SetItemString(row, L"ReleaseLevel", L"*gʑ>e"); dw_list.SetItemString(row, L"Range", L",gèè•"); return 1; } int OnDeleteRow() { dw_list.DeleteRow(0); return 1; } int OnSearch() { xaserverarg arg ; arg.AddArg(L"argurl",L"/sale/view/Expense3/FactoryTempDeduct/QueryArg"); if(argStr !=L"") arg.AddArg(L"arg",argStr); OpenWindow(L"dev:xpage[view.total.arg.vx]",arg ); xstring arstr = arg.GetArgString(L"arg"); if(arstr != L"" && arg.GetArgString(L"action")==L"ok") { argStr = arstr; //int hCursor = xutil::SetCursorWait(); OnRetrieve(); //xutil::RestoreCursor(hCursor); } return 1; } //}TäNÑS^ýQpe int OnCmdDispatch(xstring comdid) { if(comdid == L"xmSave") return OnSave(); else if(comdid == L"xmAddRow") return OnAddRow(); else if(comdid == L"xmDeleteRow") return OnDeleteRow(); else if(comdid == L"xmSearch") return OnSearch(); else if(comdid == L"xmRefresh") return OnRetrieve(); else if(comdid == L"xmSearchEx") return OnSearchEx(); return 0; } int OnSearchEx() { xaserverarg arg; arg.AddArg(L"text", searchStr); OpenWindow(L"dev:xpage[search.dialog.vx]", arg); xstring str = arg.GetArgString(L"text"); if(str != searchStr) { searchStr = str; dw_list.Filter(L"*",searchStr); return 1; } return 1; } int OnItemAskStyle(TEvent* evt, LPARAM p) { int DMS_CSSSTYLE = 0x8; DWASKSTYLENMHDR& hdr = *(DWASKSTYLENMHDR*)evt->notify.pnmh; int row = hdr.row; int col = hdr.col; xstring colname = hdr.colname; int rows = dw_list.GetRowCount(); if(row < 1 || row > rows) { return 1; } if(colname==L"SupplierID") { int DeductAmount = dw_list.GetItemDouble(row,L"DeductAmount"); int BusinessBalance = dw_list.GetItemDouble(row,L"BusinessBalance"); if(BusinessBalance >= DeductAmount) { hdr.mask = DMS_CSSSTYLE; hdr.pCssStyle = (LPTSTR)L"color:#ff0000"; } } return 1; } //}TäNYt‹NöN int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } int OnItemChanged(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; xstring colname=hdr.colname; xstring value = hdr.data; int row = hdr.row; xstring dwname = L"dw_list"; if(value == L"") return 1; KXMLDOMNodeList nlist; xstring SupplierID = dw_list.GetItemString(row,L"SupplierID"); xstring InvoiceNo = dw_list.GetItemString(row,L"InvoiceNo"); double DeductAmount = 0.00; double DeductedAmount = 0.00; double ReleaseAmount = 0.00; xml x; if(colname == L"InvoiceNo" && SupplierID != L"") { x = ViewObject::RetrieveData(L"/sale/data/expense3/view/FactoryTempDeductByInvoiceNo", L"InvoiceNo", value, L"SupplierID", SupplierID); if((xstring)x.text() != L"") { alert(L"dkYЏ÷Sò]‚fcbÿ"); dw_list.SetItemString(row,L"InvoiceNo",L""); return 1; } } else if(colname == L"SupplierID" && InvoiceNo != L"") { x = ViewObject::RetrieveData(L"/sale/data/expense3/view/FactoryTempDeductByInvoiceNo", L"SupplierID", value, L"InvoiceNo", InvoiceNo); if((xstring)x.text() != L"") { alert(L"dkYЏ÷S„vdkå]‚Sò]‚fcbÿ"); dw_list.SetItemString(row,L"SupplierID",L""); dw_list.SetItemDisplayString(row,L"SupplierID",L""); return 1; } } else if(colname == L"ApplyID") { nlist = GetElement().selectNodes(L"//*[@name='"+dwname+L"']/trans[@for='"+colname+L"']"); ViewObject::TransData(nlist, dw_list, hdr.row, colname, value); } else if(colname == L"SuspendStatus") { xstring SuspendStatus = dw_list.GetItemString(row,L"SuspendStatus"); if(SuspendStatus == L"*g‚fcb") { dw_list.SetItemString(row, L"ReleaseLevel", L"*gʑ>e"); } dw_list.SetRowSort(L"SuspendStatus",false);//’c^ true=P^ false=ck^ } else if(colname == L"ReleaseLevel") { xstring ReleaseLevel = dw_list.GetItemString(row, L"SuspendStatus"); } else if(colname == L"ReleaseAmount") { ReleaseAmount = dw_list.GetItemDouble(row,L"ReleaseAmount"); DeductAmount = dw_list.GetItemDouble(row,L"DeductAmount"); dw_list.SetItemDouble(row,L"LeftAmount",DeductAmount - ReleaseAmount); if(ReleaseAmount == DeductAmount) { dw_list.SetItemString(row,L"ReleaseLevel",L"hQèÊ‘>e"); } else if(ReleaseAmount > 0.0) { dw_list.SetItemString(row,L"ReleaseLevel",L"èRʑ>e"); } else if(ReleaseAmount == 0.0) { dw_list.SetItemString(row,L"ReleaseLevel",L"*gʑ>e"); } } else if(colname == L"DeductedAmount") { DeductAmount = dw_list.GetItemDouble(row,L"DeductAmount"); DeductedAmount = dw_list.GetItemDouble(row,L"DeductedAmount"); dw_list.SetItemDouble(row, L"NoDeductAmount", DeductAmount - DeductedAmount ); if((DeductAmount - DeductedAmount) == 0.0) { dw_list.SetItemString(row,L"Remark",L""¡R‚fcb'>k"); dw_list.SetItemString(row,L"SuspendStatus", L"hQ萂fcb"); } } else if(colname == L"Remark") { xstring Remark = dw_list.GetItemString(row,L"Remark"); if(Remark == L""¡R‚fcb'>k") { dw_list.SetItemString(row,L"SuspendStatus", L"hQ萂fcb"); } } else if(colname == L"DeductAmount") { DeductAmount = dw_list.GetItemDouble(row, L"DeductAmount"); DeductedAmount = dw_list.GetItemDouble(row, L"DeductedAmount"); ReleaseAmount = dw_list.GetItemDouble(row, L"ReleaseAmount"); dw_list.SetItemDouble(row, L"NoDeductAmount", DeductAmount - DeductedAmount);//*g‚fcbё˜ dw_list.SetItemDouble(row, L"LeftAmount", DeductAmount - ReleaseAmount);//‚fcbYO˜ } if(colname == L"InvoiceNo") { nlist = GetElement().selectNodes(L"//*[@name='"+dwname+L"']/trans[@for='"+colname+L"']"); ViewObject::TransData(nlist, dw_list, hdr.row, colname, value); } dw_list.Redraw(); return 1; } int OnAttachEvent() { //Ñ~š[å]wQag¹pûQ‹NöN AttachEvent(L"WM_XCOMMAND", (FEvent)&FactoryTempDeductView::OnXCommand); //·ƒÖS&q¹p‹NöN ÿ(uŽN͑nå]wQag AttachEvent(L"WM_SETFOCUS", (FEvent)&FactoryTempDeductView::OnSetFocus); AttachEvent(L"dw_list",L"DWV_ITEMCHANGED", (FEvent)&FactoryTempDeductView::OnItemChanged); AttachEvent(L"dw_list",L"DWV_ASKSTYLE", (FEvent)&FactoryTempDeductView::OnItemAskStyle); return 1; } int OnRetrieve() { xml x ; xaserverarg arg ; arg.AddArg(L"QueryArg",argStr); //trace(argStr); if (getUrl(L"/sale/data/expense3/view/FactoryTempDeductList",arg.GetString(),x)!=1) { trace(x.text()); return -1; }else { dw_list.Retrieve(x); dw_list.Redraw(); } return 1; } int onload() { dw_list = GetControl(L"dw_list"); dw_list.openUrl(L"/sale/view/Expense3/FactoryTempDeduct/list"); dw_list.SetAskStyle(true); dw_list.SetSelectionMode(1); OnAttachEvent(); return 1; } int onloaded() { SetAgent(); OnSearch(); return 1; } };