From b1d01ea6fa62ce12c2e592b3315186f6b3c8359d Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期三, 17 七月 2024 15:20:38 +0800
Subject: [PATCH] Merge branch 'master' of http://116.62.18.175:6699/r/mis-prj

---
 jrj/project/business/SystemSettings/Flow3.cpp |  476 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 476 insertions(+), 0 deletions(-)

diff --git a/jrj/project/business/SystemSettings/Flow3.cpp b/jrj/project/business/SystemSettings/Flow3.cpp
new file mode 100644
index 0000000..b12854a
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Flow3.cpp
@@ -0,0 +1,476 @@
+#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) flow :  public xframe
+	{
+	public:
+		xtreeview tv_1;
+		xlayersheet	tab_1;
+		xdwgrid	dw_flow;
+		xdwgrid	dw_state;
+		xdwgrid	dw_button;
+		xdwgrid	dw_role;
+		xdwgrid	dw_bill;
+		xdwgrid	dw_scene;
+		xdwgrid	dw_buttonright;
+		xdwgrid	dw_datafieldright;
+		xstring 	flowid;
+	
+		xtreeview tv_folder;
+
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		flow(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static flow* CreateInstance(void* implPtr, void* hWnd)
+		{
+			flow* pWin = new flow(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		xstring GetSheetType(int index)
+		{
+			if (index == 0)  return L"flowitem";
+			else if (index == 1) return L"state";
+			else if (index == 2) return L"actionrole";
+			else if (index == 3) return L"button";
+			else if (index == 4) return L"role";
+			else if (index == 5) return L"bill";
+			else if (index == 6) return L"scene";
+			else if (index ==7) return L"fieldrole";
+			else return L"unkown";
+		}
+		xdwgrid GetSheetDwgrid(int index)
+		{
+			xstring typ = GetSheetType(index);
+			if(typ==L"flowitem") return dw_flow;
+			if(typ==L"actionrole") return dw_buttonright;
+			if(typ==L"state") return dw_state;
+			if(typ==L"button") return dw_button;
+			if(typ==L"role") return dw_role;
+			if(typ==L"bill") return dw_bill;
+			if(typ==L"scene") return dw_scene;
+			if(typ==L"fieldrole") return dw_datafieldright;
+			return 0;
+		}
+		xdwgrid GetSheetDbmap(int index)
+		{
+			xstring typ = GetSheetType(index);
+			if(typ==L"flowitem") return "flow.dbmap";
+			if(typ==L"actionrole") return "workflow.actionrole.dbmap";
+			if(typ==L"state") return "state.dbmap";
+			if(typ==L"button") return "button.dbmap";
+			if(typ==L"role") return "role.dbmap";
+			if(typ==L"bill") return "bill.dbmap";
+			if(typ==L"scene") return "scene.dbmap";
+			if(typ==L"fieldrole") return "workflow.datarole.dbmap";
+			return 0;
+		}
+		
+		xstring GetDwname(xstring typ)
+		{
+			if(typ==L"flowitem") return L"/sale/view/Flow3/template/flow";
+			if(typ==L"actionrole") return L"/sale/view/Flow3/template/buttonright";
+			if(typ==L"state") return L"/sale/view/Flow3/template/state";
+			if(typ==L"button") return L"/sale/view/Flow3/template/button";
+			if(typ==L"role") return L"/sale/view/Flow3/template/role";
+			if(typ==L"bill") return L"/sale/view/Flow3/template/bill";
+			if(typ==L"scene") return L"/sale/view/Flow3/template/scene";
+			if(typ==L"fieldrole") return L"/sale/view/Flow3/template/datafieldright";
+			return L"";
+		}
+		
+		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 OnSave()
+		{
+			if(flowid==L"") return 1;
+				
+			xstring sdbmap;
+			xml x ;
+			
+			int index = tab_1.GetSheetIndex();
+			sdbmap = (xstring)GetSheetDbmap(index);
+			xdwgrid dw_list = GetSheetDwgrid(index);
+			dw_list.DwUpdateAllToEx(x);
+			//trace(x.xml());
+
+			KXMLDOMNodeList ls = x.documentElement().selectNodes(L"*[@update.modify='1' and @update.new='1']");
+			int len = ls.length();
+			for(int k=0;k<len;k++)
+			{
+				KXMLDOMElement e;
+				if(ls.item(k).selectSingleNode(L"flowID"))
+				{
+					e = ls.item(k).selectSingleNode(L"flowID");
+					e.setAttribute(L"update.modify",L"1");
+					e.text() = flowid;
+				}else
+				{
+					e = x.createElement(L"flowID");
+					e.setAttribute(L"update.modify",L"1");
+					e.text() = flowid;
+					ls.item(k).appendChild(e);
+				}
+			}
+				
+			xaserverarg arg ;
+			;
+			arg.AddArg(L"content",x.xml());
+			arg.AddArg(L"sdbmap",sdbmap);
+			trace(x.xml());
+			if(xurl::get(L"/sale/data/Flow3/save/flow", arg.GetString(),x)!=1)
+			{
+				xstring error = x.text();
+				alert(L"err:"+error);
+				return 1;
+			}
+			
+			dw_list.ResetUpdateStatus();
+			
+			//alert(x.xml());
+			alert(L"保存成功!");
+			
+			return 1;
+		}
+		int OnAddrow()
+		{
+			int i = tab_1.GetSheetIndex();
+			xdwgrid dw_list = GetSheetDwgrid(i);
+			dw_list.InsertRow(0);
+			
+			return 1;
+		}
+		
+		int OnInsertrow()
+		{
+			int i = tab_1.GetSheetIndex();
+			xdwgrid dw_list = GetSheetDwgrid(i);
+			dw_list.InsertRow(dw_list.GetRow());
+			return 1;
+		}
+		
+		int OnDeleterow()
+		{
+			int i = tab_1.GetSheetIndex();
+			xdwgrid dw_list = GetSheetDwgrid(i);
+			dw_list.DeleteRow(0);
+				
+			return 1;
+		}
+		
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			
+			//alert(evt.hWnd.toString());
+			
+			return 1;
+		}
+
+		int OnClicked(TEvent* evt, int p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			int row = hdr.row;
+			xstring colname=hdr.colname;
+
+			//trace(colname);
+			
+			xaserverarg arg ;
+			;	
+
+			xstring comdid =L"";
+			xstring data=L"";
+			xstring display=L"";
+			xdwgrid dw_list;
+			
+			int index = tab_1.GetSheetIndex();
+			dw_list = GetSheetDwgrid(index);
+			
+			arg.AddArg(L"sdata",L"");
+			arg.AddArg(L"flowid",flowid);
+			
+			if(colname==L"billID")
+			{
+				arg.AddArg(L"stype",L"bill");
+				arg.AddArg(L"datacolumn",L"billID");
+				arg.AddArg(L"displaycolumn",L"billName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/bill");
+			}
+			else if(colname==L"stateSource")
+			{
+				arg.AddArg(L"stype",L"state");
+				arg.AddArg(L"datacolumn",L"stateID");
+				arg.AddArg(L"displaycolumn",L"stateName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
+			}
+			else if(colname==L"state")
+			{
+				arg.AddArg(L"stype",L"state");
+				arg.AddArg(L"datacolumn",L"stateID");
+				arg.AddArg(L"displaycolumn",L"stateName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
+			}
+			else if(colname==L"stateTarget")
+			{
+				arg.AddArg(L"stype",L"state");
+				arg.AddArg(L"datacolumn",L"stateID");
+				arg.AddArg(L"displaycolumn",L"stateName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
+			}
+			else if(colname==L"roles")
+			{
+				arg.AddArg(L"stype",L"role");
+				arg.AddArg(L"datacolumn",L"roleName");
+				arg.AddArg(L"displaycolumn",L"roleName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/role");
+			}
+			else if(colname==L"flowAction")
+			{
+				arg.AddArg(L"stype",L"button");
+				arg.AddArg(L"datacolumn",L"buttonName");
+				arg.AddArg(L"displaycolumn",L"buttonName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/button");
+			}
+			else 
+				return 1;
+			
+			OpenWindow(L"dev:xpage[FlowTermSelect.vx]",arg);
+			comdid = arg.GetArgString(L"comdid");
+			
+			if(comdid==L"xmOk")
+			{
+				data = arg.GetArgString(L"data");
+				display = arg.GetArgString(L"display");
+				dw_list.SetItemDisplayString(row,colname,display); 
+				dw_list.SetItemString(row,colname,data); 
+				dw_list.Redraw();
+			}	
+
+			return 1;
+		}					
+
+		int OnImport()
+		{
+			int i = tab_1.GetSheetIndex();
+			xdwgrid dw_list = GetSheetDwgrid(i);
+			
+			xaserverarg arg ;
+			;	
+			arg.SetArg(L"stype",GetSheetType(i),L"xstring");
+			arg.SetArg(L"sdata",L"ddd",L"xstring");
+			arg.SetArg(L"flowID",flowid,L"xstring");
+			int obj = cast(dw_list as int);
+			arg.SetArg(L"dwobj",obj.toString(),L"xstring");
+			arg.SetArg(L"dwname",GetDwname(GetSheetType(i)),L"xstring");
+			OpenWindow(L"dev:xpage[FlowTermImport.vx]",arg);
+
+			return 1;
+		}
+			
+		int  OnRetrieve()
+		{
+			if(flowid==L"") return 1;
+			
+			xml x ;
+			
+			xaserverarg arg ;
+			;	
+			
+			//int i = tab_1.GetSheetIndex();
+			for(int i=0;i<7;i++)
+			{
+				//alert(i.toString());
+				arg.SetArg(L"stype",GetSheetType(i),L"xstring");
+				arg.SetArg(L"sdata",L"ddd",L"xstring");
+				arg.SetArg(L"flowID",flowid,L"xstring");
+				
+				//trace(arg.GetString());
+				if (getUrl(L"/sale/data/Flow3/retrieve/flowex",arg.GetString(),x)!=1)
+				{
+					//trace(x.text());
+					//return -1;
+					continue;
+				}
+				xdwgrid dw_list = GetSheetDwgrid(i);
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			
+			return 1;
+		}
+		
+		int OnTreeSelChanged(TEvent* evt, int p)
+		{
+			NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+			
+			HTREEITEM hItem = nmtv.itemNew.hItem;
+			KXMLDOMElement& e = *(KXMLDOMElement*)tv_1.GetItemData(hItem);
+			flowid = e.getAttribute(L"flowID");
+				
+			HCURSOR hCursor = xutil::SetCursorWait();
+			SetFlowChart(e);
+			OnRetrieve();
+			xutil::RestoreCursor(hCursor);
+			
+			return 1;
+		}	
+
+		int OnTabSelectSheet(TEvent* evt, int p)
+		{
+			//OnRetrieve();
+			
+			return 1;
+		}
+			
+		int SetFlowChart(KXMLDOMElement e)
+		{
+			xstring flowUrl = e.getAttribute(L"flowchart");
+			xflowchart flowchart = GetControl(L"flowchart");
+			xml f ;
+		
+			if(flowUrl != L"")
+			{
+				if(xaserver::FetchXml(flowUrl,L"",f)==1)
+				{
+					flowchart.LoadEx(f.documentElement());
+				}
+			}else
+			{
+				f.loadXML(L"<sheet/>");
+				flowchart.LoadEx(f.documentElement());
+			}
+			return 1;
+		}
+
+			
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if (comdid == L"xmSave") 
+				return OnSave();
+			if (comdid == L"xmAddrow")
+				return OnAddrow();
+			if (comdid == L"xmInsertrow")
+				return OnInsertrow();
+			if (comdid == L"xmDeleterow")
+				return OnDeleterow();
+			if (comdid == L"xmImport")
+				return OnImport();
+				
+			return 0;
+		}
+
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&flow::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&flow::OnSetFocus);
+			
+			AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&flow::OnTreeSelChanged);
+			AttachEvent(L"tab_1",L"LYSN_SELECTEDSHEET", (FEvent)&flow::OnTabSelectSheet);
+			AttachEvent(L"dw_flow",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
+			AttachEvent(L"dw_buttonright",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
+			AttachEvent(L"dw_button",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
+			AttachEvent(L"dw_state",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
+			
+			return 1;
+		}
+		
+		int CreateFlowFloder()
+		{
+			
+			xml x = ViewObject::RetrieveData(L"/sale/data/flow3/flowfolder");
+			if(x)
+			{
+				KXMLDOMNodeList nlist = x.selectNodes(L"//item"); 
+				int len = nlist.length();
+				int hItem = 0;
+				for (int i = 0; i < len; i++)
+				{	
+					KXMLDOMElement e = nlist.item(i);
+					xstring name = e.getAttribute(L"flowName");
+					xstring no = e.getAttribute(L"flowNo");
+					xstring label = name;//no.trim() + L" " + name;
+					int h= tv_folder.InsertChildItem(hItem,label, trust(e as int),22);				
+					//tv_folder.SetItemChild(h,1);
+				}
+			}
+			
+			return 1;
+		}
+
+		int onload()
+		{
+			flowid = L"";
+			tv_folder = GetControl(L"tv_folder");
+			CreateFlowFloder();
+			
+			tv_1 = GetControl(L"tv_1");
+			tab_1 = GetControl(L"tab_1");
+			dw_flow = GetControl(L"dw_flow");
+			dw_flow.openUrl(L"/sale/view/Flow3/template/flow");
+			dw_state = GetControl(L"dw_state");
+			dw_state.openUrl(L"/sale/view/Flow3/template/state");
+			dw_button = GetControl(L"dw_button");
+			dw_button.openUrl(L"/sale/view/Flow3/template/button");
+			dw_role = GetControl(L"dw_role");
+			dw_role.openUrl(L"/sale/view/Flow3/template/role");
+			dw_bill = GetControl(L"dw_bill");
+			dw_bill.openUrl(L"/sale/view/Flow3/template/bill");
+			dw_scene = GetControl(L"dw_scene");
+			dw_scene.openUrl(L"/sale/view/Flow3/template/scene");
+			dw_buttonright = GetControl(L"dw_buttonright");
+			dw_buttonright.openUrl(L"/sale/view/Flow3/template/buttonright");
+			dw_datafieldright = GetControl(L"dw_datafieldright");
+			dw_datafieldright.openUrl(L"/sale/view/Flow3/template/datafieldright");
+			
+			OnAttachEvent();	
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			OnRetrieve();
+			
+			return 1;
+		}		
+	};
\ No newline at end of file

--
Gitblit v1.9.3