From a4d2315ee4ca3f6177b4fb2526bed2feff3d89be Mon Sep 17 00:00:00 2001
From: lifan <2308045698@qq.com>
Date: 星期三, 22 十月 2025 16:52:58 +0800
Subject: [PATCH] update
---
jrj/project/total3/ViewTotalWin.cpp | 545 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 545 insertions(+), 0 deletions(-)
diff --git a/jrj/project/total3/ViewTotalWin.cpp b/jrj/project/total3/ViewTotalWin.cpp
new file mode 100644
index 0000000..2feff78
--- /dev/null
+++ b/jrj/project/total3/ViewTotalWin.cpp
@@ -0,0 +1,545 @@
+#include <wobject/xwin.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <xcontrol/xoffice.hpp>
+#include <xcontrol/xcell.hpp>
+#include <xcontrol/xflowchart.hpp>
+#include <xcontrol/ximageview.hpp>
+#include <xcontrol/xcombobox.hpp>
+
+#include <vbusiness/vutil/publiccode.vutil.vbusiness.hpp>
+#include "viewobject/view.base.hpp"
+
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ViewTotalWin : public xwin
+{
+public:
+ ViewTotalWin(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+ static ViewTotalWin* CreateInstance(void* implPtr, void* hWnd)
+ {
+ return new ViewTotalWin(implPtr, (HWND)hWnd);
+ }
+public:
+ xdwgrid dw_list;
+ xoffice dw_office;
+ xcell dw_cell;
+ xnode m_agentNode; //Agent Condition
+ KXMLDOMElement rptEle;
+ xstring m_category;
+ xstring argStr;
+ xstring searchStr;
+ xstring fieldRoleStr;
+ HWND hWndImageView;
+ HWND hWndRetrieveTip;
+ bool dataretrieveing;
+
+ 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;
+ }
+
+ int OnSearch()
+ {
+ xaserverarg arg ;
+
+ arg.AddArg(L"text", searchStr);
+ //trace(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 OnSetFocus(TEvent * evt, int param)
+ {
+ //重置工具条
+ SetAgent();
+ return 1;
+ }
+
+ //命令发布函数
+ int OnCmdDispatch(xstring comdid)
+ {
+ xstring UserNo = publiccode::GetUser().no;
+
+ int hCursor = 0;
+ if (comdid == L"xmSearch") return OnSearch();
+ if (comdid == L"xmOwner") return OnOwnerData();
+ //if(UserNo !=L"00603")
+ //{
+ if (comdid == L"xmAnalysis")
+ {
+ HCURSOR hCursor = xutil::SetCursorWait();
+ xstring str = dw_list.DataAnalysis(L"");
+ xaserverarg arg ;
+
+ arg.AddArg(L"html", str);
+ arg.SetParam(L"obj",(LPARAM)&dw_list);
+ OpenWindow(L"dev:xpage[data.vanalysis.vx]", arg);
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+ if (comdid == L"xmSaveAs")
+ {
+ dw_list.SaveAs(L"");
+ return 1;
+ }
+ if (comdid == L"xmRemarks")
+ {
+ xstring name = rptEle.getAttribute(L"name");
+ xml x = ViewObject::RetrieveData(L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
+ KXMLDOMNodeList items = x.selectNodes(L"data/Item");
+ KXMLDOMNode t = items.item(0);
+ xstring Content = L"";
+ if (t.selectSingleNode(L"Content"))
+ {
+ Content = t.selectSingleNode(L"Content").text();
+ }
+
+ xaserverarg arg1 =GetArg();
+ arg1.AddArg(L"value", Content);
+ OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg1);
+ return 1;
+
+ }
+ //}
+ if (comdid == L"xmTrans1")
+ return OnTransData();
+ if (comdid == L"xmQuery")
+ {
+ if (rptEle)
+ {
+ xstring argUrl = rptEle.getAttribute(L"arg");
+ if (argUrl != L"")
+ {
+ xaserverarg ar ;
+ //ar.setNativePointer(ar.CreateInstance());
+ ar.AddArg(L"argurl", argUrl);
+ if (argStr != L"")
+ ar.AddArg(L"arg", argStr);
+ OpenWindow(L"dev:xpage[view.total.arg.vx]", ar);
+ xstring arstr = ar.GetArgString(L"arg");
+ if (arstr != L"" && ar.GetArgString(L"action") == L"ok")
+ {
+ argStr = arstr;
+ HCURSOR hCursor = xutil::SetCursorWait();
+ //trace(rptEle.getAttribute(L"data"));
+ OnRetrieve(rptEle.getAttribute(L"data"), argStr);
+ xutil::RestoreCursor(hCursor);
+ }
+ }
+ else
+ {
+ argStr = L"";
+ OnRetrieve(rptEle.getAttribute(L"data"), argStr);
+ }
+ }
+ return 1;
+ }
+ if (comdid == L"xmLookImage")
+ {
+
+ int row = dw_list.GetRow();
+ xstring skuid = dw_list.GetGuid(row);
+ OnLookImage(skuid);
+ return 1;
+ }
+ if (comdid == L"CalculationFormula")
+ {
+ OpenWindow(L"dev:xpage[CalculationFormula.vx]", 0);
+ SetAgent();
+ return 1;
+ }
+ return 0;
+ }
+
+ int OnLookImage(xstring skuid)
+ {
+ HCURSOR hCursor = xutil::SetCursorWait();
+ xaserverarg arg;
+ arg.AddArg(L"guid", skuid);
+ OpenWindow(L"dev:xpage[ViewPictures.vx]", arg);
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+
+ int AdjustField(xdwgrid dw)
+ {
+ xstring str = fieldRoleStr;
+ for (int i = 1; i < dw.GetColumnCount(); i++)
+ {
+ xstring colname = dw.GetColumnName(i);
+ if (str.find(L"!" + colname + L",") >= 0)
+ {
+ dw.SetColumnState((LPCTSTR)colname.c_str(), false);
+ }
+ }
+ return 1;
+ }
+
+ int SwitchReport(KXMLDOMElement e)
+ {
+ xstring dwname = e.getAttribute(L"template");
+ xstring dataurl = e.getAttribute(L"data");
+ xstring sheettype = e.getAttribute(L"reporttype");
+ if (rptEle != e)
+ {
+ argStr = L"";
+ rptEle = e;
+ }
+ if (sheettype == L"") sheettype = L"report";
+ SwitchLayer(L"dw_" + sheettype, L"report");
+ if (sheettype == L"report")dw_list.openUrl(dwname);
+ if (hWndImageView) DestroyWindow(hWndImageView);
+
+ AdjustField(dw_list);
+
+ SetAgent();
+ return 1;
+ }
+
+ int OnCombboChanged(TEvent* evt, int lParam)
+ {
+ int h = xcombobox::GetCurSel(evt->command.hCtrl);
+ if (h > -1)
+ {
+ HCURSOR hCursor = xutil::SetCursorWait();
+ KXMLDOMElement e = xcombobox::GetItemData(evt->command.hCtrl, h);
+ SwitchReport(e);
+ PostMessage(GetHWND(), 0x401, (WPARAM)L"xmQuery", 0);
+ //OnCmdDispatch(L"xmQuery");
+ xutil::RestoreCursor(hCursor);
+ }
+ return 1;
+ }
+
+ int OnTransData()
+ {
+ int ret = MessageBox(GetHWND(), L"是否更新数据?\n更新过程预计需要四十分钟,如果中间弹出等待时间过长的提示,请点击中间重试按钮,或等待到一定时间再点击", L"提示", 0x4 /*yesno*/);
+ if (ret != 6 /*IDYES */) return 1;
+
+ xml x ;
+ HCURSOR hCursor = xutil::SetCursorWait();
+ if (xurl::get(L"/sale/data/Total3/total/transdata", L"", x) != 1)
+ {
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+ else
+ {
+ xutil::RestoreCursor(hCursor);
+ alert(L"数据传输完成!");
+ return 1;
+ }
+
+ return 1;
+ }
+
+ int OnOwnerData()
+ {
+ int ret = MessageBox(GetHWND(), L"是否更新归属数据?\n更新过程预计需要些时间,如果中间弹出等待时间过长的提示,请点击中间重试按钮,或等待到一定时间再点击", L"提示", 0x4 /*yesno*/);
+ if (ret != 6 /*IDYES */) return 1;
+
+ xml x;
+ HCURSOR hCursor = xutil::SetCursorWait();
+ if (xurl::get(L"/sale/data/CustomerV3/owner/reload", L"", x) != 1)
+ {
+ xutil::RestoreCursor(hCursor);
+ return 1;
+ }
+ else
+ {
+ xutil::RestoreCursor(hCursor);
+ alert(x.text());
+ return 1;
+ }
+
+ return 1;
+ }
+ //命令处理事件
+ int OnXCommand(TEvent* evt, int param)
+ {
+ return OnCmdDispatch(evt->xcommand.pStrID);
+ }
+
+ int SendImageMessage(int row)
+ {
+ if (dw_list.GetItemString(row, L"GDNLineID") != L"")
+ SendMessage(hWndImageView, 0x401, (WPARAM)(L"xmRetrieve:GDNLineID:" + dw_list.GetItemString(row, L"GDNLineID")).c_str(),0);
+ else if (dw_list.GetItemString(row, L"ItemID") != L"")
+ SendMessage(hWndImageView, 0x401, (WPARAM)(L"xmRetrieve:SKUID:" + dw_list.GetItemString(row, L"ItemID")).c_str(), 0);
+ else if (dw_list.GetItemString(row, L"SKUID") != L"")
+ SendMessage(hWndImageView, 0x401, (WPARAM)(L"xmRetrieve:SKUID:" + dw_list.GetItemString(row, L"SKUID")).c_str(), 0);
+ else if (dw_list.GetItemString(row, L"GoodsNo") != L"")
+ SendMessage(hWndImageView, 0x401, (WPARAM)(L"xmRetrieve:GoodsNo:" + dw_list.GetItemString(row, L"GoodsNo")).c_str(), 0);
+ return 1;
+ }
+
+ int OnDWClick(TEvent* evt, int p)
+ {
+ DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+ xstring value = hdr.data;
+ xstring colname = hdr.colname;
+ int row = hdr.row;
+
+ if (row < 1) return 1;
+
+ if (rptEle)
+ {
+ xstring str = rptEle.getAttribute(L"forward");
+ if (str == L"false") return 1;
+ }
+
+ /*
+ xstring s = publiccode::GetUser().id;
+ xml supplier_x = ViewObject::RetrieveData(L"/sale/data/SupplierV3/entity/FindBySaleType",L"id", s);
+ if(supplier_x.text == L"样品间" || supplier_x.text == L"主管"){
+ return 1;
+ }
+
+ xaserverarg arg;
+ if(colname==L"SONo")
+ {
+ xstring SONo = dw_list.GetItemString(row,colname);
+ arg=new xaserverarg;
+
+ arg.AddArg(L"EntityNo",SONo);
+ arg.AddArg(L"ReadOnly",L"true");
+ OpenWindow(L"dev:xpage[base.maint.so.vx]",arg.getNativePointer());
+ }
+ if(colname==L"InvoiceNo")
+ {
+ xstring InvoiceNo= dw_list.GetItemString(row,colname);
+ arg=new xaserverarg;
+
+ arg.AddArg(L"EntityNo",InvoiceNo);
+ arg.AddArg(L"ReadOnly",L"true");
+ OpenWindow(L"dev:xpage[maint.GDN3.vx]",arg.getNativePointer());
+ }
+ if(colname==L"InvoiceNoEx")
+ {
+ xstring InvoiceNoEx= dw_list.GetItemString(row,colname);
+ arg=new xaserverarg;
+
+ arg.AddArg(L"EntityNo",InvoiceNoEx);
+ arg.AddArg(L"invoiceno",InvoiceNoEx);
+ arg.AddArg(L"ReadOnly",L"true");
+ OpenWindow(L"dev:xpage[maint.vatnotify.vx]",arg.getNativePointer());
+ }
+ */
+
+ if (hWndImageView != 0 && IsWindow(hWndImageView))
+ {
+ SendImageMessage(row);
+ }
+ else if (colname == L"HasImage")
+ {
+ xwin* pwin = OpenWindow(L"dev:xpage[testImage.vx]", 0);
+ hWndImageView = pwin->GetHWND();
+ SendImageMessage(row);
+ }
+
+ return 1;
+ }
+
+ int OnRowChanged(TEvent* evt, int p)
+ {
+
+ DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+ int row = hdr.row;
+ if (row < 1) return 1;
+
+ if (hWndImageView != 0 && IsWindow(hWndImageView))
+ {
+ SendImageMessage(row);
+ }
+ return 1;
+ }
+
+ int ShowRetrieveingTip()
+ {
+ dataretrieveing = true;
+ xwin* pwin = OpenWindow(L"dev:xpage[TestRetrieveing.vx]", 0);
+ hWndRetrieveTip = pwin->GetHWND();
+ return 1;
+ }
+ int CloseRetrieveTip()
+ {
+ dataretrieveing = false;
+ SendMessage(hWndRetrieveTip, 0x401, (WPARAM)L"RetrieveFinished", 0);
+ hWndRetrieveTip = 0;
+
+ return 1;
+ }
+
+ int OnRetrieveFinished(TEvent* evt, int p)
+ {
+ CloseRetrieveTip();
+ //dataretrieveing = false;
+ //alert(L"读取完成");
+ return 1;
+ }
+
+ int OnAttachEvent()
+ {
+ //绑定工具条点击事件
+ AttachEvent(L"WM_XCOMMAND", (FEvent)&ViewTotalWin::OnXCommand);
+ //获取焦点事件,用于重置工具条
+ AttachEvent(L"WM_SETFOCUS", (FEvent)&ViewTotalWin::OnSetFocus);
+ AttachEvent(L"cb_report", L"CBN_SELCHANGE", (FEvent)&ViewTotalWin::OnCombboChanged);
+ AttachEvent(L"dw_report", L"DWV_CLICKED", (FEvent)&ViewTotalWin::OnDWClick);
+ AttachEvent(L"dw_report", L"DWV_ROWFOCUSCHANGED", (FEvent)&ViewTotalWin::OnRowChanged);//绑定行更改触发事件OnRowChanged
+ AttachEvent(L"dw_report", xstring(0x400 + 81), (FEvent)&ViewTotalWin::OnRetrieveFinished);
+
+ return 1;
+ }
+
+ int OnRetrieve(xstring dataurl, xstring argstr)
+ {
+ if (!rptEle) return 0;
+ if (dataretrieveing) return -1;
+ dw_list.Reset();
+
+ xml x ;
+ xaserverarg arg ;
+
+ arg.AddArg(L"arg", argstr);
+ trace(argstr);
+ xstring sheettype = rptEle.getAttribute(L"reporttype");
+ if (sheettype == L"") sheettype = L"report";
+ //ShowRetrieveingTip();
+ if (xurl::get(dataurl, arg.GetString(), x) != 1)
+ {
+
+ trace((xstring)L"错误信息=L" + x.text());
+ dw_list.Redraw();
+ return -1;
+ }
+ else
+ {
+ if (sheettype == L"report")
+ {
+ //CloseRetrieveTip();
+ dw_list.Retrieve(x);
+ dw_list.Redraw();
+ dw_list.SetReadOnly(true);
+ }
+ else if (sheettype == L"cell")
+ {
+ }
+ else if (sheettype == L"office")
+ {
+ dw_office.LoadTemplate(x,0);
+ for (int i = 0; i < dw_office.GetSheetCount(); i++)
+ {
+ xcell sheet = dw_office.GetSheet(i);
+ sheet.SetReadOnly(true);
+ }
+ }
+ }
+ return 1;
+ }
+
+ xml getReportSet(xstring category)
+ {
+ xml x ;
+ xaserverarg arg ;
+
+ arg.AddArg(L"category", category);
+ if (xurl::get(L"/sale/data/Total3/reportset", arg.GetString(), x) != 1)
+ {
+ return 0;
+ }
+ return x;
+ }
+
+ xstring GetReportFieldRole()
+ {
+ xml x ;
+ xaserverarg arg ;
+
+ if (xurl::get(L"/sale/data/Total3/report/field", arg.GetString(), x) != 1)
+ {
+ return L"";
+ }
+ xstring str = x.text();
+ return str;
+ }
+
+ int onload()
+ {
+ dw_list = GetControl(L"dw_report");
+ dw_office = GetControl(L"dw_office");
+ dw_cell = GetControl(L"dw_cell");
+ dw_list.openUrl(L"/sale/view/Total3/template/sodetail");
+
+ fieldRoleStr = GetReportFieldRole();
+
+ argStr = L"";
+ xcombobox xc = GetControl(L"cb_report");
+
+ m_category = L"total/trade";
+ SetArg();
+ if (GetWinParam()) {
+ xaserverarg arg = GetArg();
+ m_category = arg.GetArgString(L"category");
+ }
+ xml x = getReportSet(m_category);
+ if (x)
+ {
+ KXMLDOMNodeList nlist = x.selectNodes(L"//reports/report");
+ int len = nlist.length();
+ for (int i = 0; i < len; i++)
+ {
+ KXMLDOMElement rpt = nlist.item(i);
+ xstring name = rpt.getAttribute(L"name");
+ xc.AddItem( name, rpt.ptr());
+ if (i == 0) xc.SetText(name);
+ if (i == 0) rptEle = rpt;
+ }
+ }
+ searchStr = L"";
+ hWndImageView = 0;
+ hWndRetrieveTip = 0;
+ dataretrieveing = false;
+ OnAttachEvent();
+
+ return 1;
+ }
+
+ int onloaded()
+ {
+ SetAgent();
+
+ if (rptEle)
+ {
+ SwitchReport(rptEle);
+ //OnCmdDispatch(L"xmQuery");
+ }
+
+ return 1;
+ }
+};
\ No newline at end of file
--
Gitblit v1.9.3