#include #include #include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) HrOrg : public xwin { public: xdwgrid dw_list; xtreeview tv_org; xstring sOrgID; xstring sOrgName; xstring sRootOrgID; xstring sRootOrgName; xnode m_agentNode; //Agent Condition xstring m_agentCond; //Agent Node public: HrOrg(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {} public: static HrOrg* CreateInstance(void* implPtr, void* hWnd) { HrOrg* pWin = new HrOrg(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; } int OnRetrieve() { HCURSOR hIcon = xutil::SetCursorWait(); xml x; xaserverarg arg; arg.AddArg(L"guid", sOrgID); if (xurl::get(L"OrganizationStruct/list.HrOrg", arg.GetString(), x) != 1) { trace(x.text()); return -1; } else { dw_list.Retrieve(x); dw_list.Redraw(); } dw_list.SetReadOnly(true); xutil::RestoreCursor(hIcon); return 1; } //½¹µã¼¤»î´¦Àíº¯Êý int OnSetFocus(TEvent* evt, LPARAM param) { SetAgent(); //OnRetrieve(); //ÖØÖù¤¾ßÌõ return 1; } int OnCreateTree(xstring sguid, HTREEITEM parentitem) { //int wid = ; xml x; xaserverarg arg; arg.AddArg(L"sguid", sguid); if (xurl::post(L"/sale/data/OrganizationStruct/tree.child.OrgChart", arg.GetString(), x) != 1) { trace(x.xml()); return -1; } //trace(x.GetXml()); auto list = x.selectNodes(L"//Org"); int i = 0, s = list.length(); KXMLDOMElement xitem; xstring sname; xstring sguid; if (s > 0) { for (i = 0; i < s; i++) { xitem = list.item(s - i - 1); sname = xitem.selectSingleNode(L"OrgName").text(); sguid = xitem.selectSingleNode(L"@guid").text(); HTREEITEM curItem = tv_org.InsertChildItemEx(parentitem, sname, xitem, 15, 4); OnCreateTree(sguid, curItem); /*xstring id = xitem.selectSingleNode(L"ModuleID").text(); xstring Name=L""; if(xitem.selectSingleNode(L"ModuleName")) Name=xitem.selectSingleNode(L"ModuleName").text(); xstring image = 15; if(xitem.selectSingleNode(L"ModuelImage")) image=xitem.selectSingleNode(L"ModuelImage").text(); int curItem=tv_org.InsertItem(tv_menu.GetId(), parentItem,0,Name,id,image.toInt()); xstring child=xitem.selectSingleNode(L"@child").text();//item.getAttribute(L"HasChild"); if (child != L"0") tv_org.SetItemChild1(tv_menu.GetId(), curItem,1);*/ } } return 1; } int OnTreeExpanding(TEvent* evt, int p) { NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; HTREEITEM sitem = nmtv.itemNew.hItem; xstring id = tv_org.GetItemData(sitem); HCURSOR hCursor = xutil::SetCursorWait(); OnCreateTree(id, sitem); xutil::RestoreCursor(hCursor); return 1; } //Ê÷µã»÷ʼþ int OnTreeSelecded(TEvent* evt, int p) { NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; HTREEITEM hItem = nmtv.itemNew.hItem; int wid = 0; HTREEITEM hitem = tv_org.GetSelectedItem(); KXMLDOMElement ele = tv_org.GetItemData(hitem); HTREEITEM hroot = tv_org.GetParentItem(hitem); HTREEITEM hparent = tv_org.GetParentItem(hroot); if (!hparent) { hparent = hroot; hroot = hitem; } bool found = false; if (hparent) found = true; while (tv_org.GetParentItem(hparent)) { hroot = hparent; hparent = tv_org.GetParentItem(hroot); } if (found) { KXMLDOMElement ele1 = tv_org.GetItemData(hroot); //trace(ele1.xml); //sRootOrgID = ele1.selectSingleNode(L"CompanyID").text(); //sRootOrgName = ele1.selectSingleNode(L"CompanyID/@_displaystring").text(); } xstring ls_orgid = ele.selectSingleNode(L"@guid").text(); sOrgID = ls_orgid + L""; //trace(sOrgID); sOrgName = ele.selectSingleNode(L"OrgName").text(); OnRetrieve(); return 1; } int OnTreeMoveNode(TEvent* evt, int p) { TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh; HTREEITEM xfrom = nmtv.FromItem; HTREEITEM xto = nmtv.ToItem; int ret = MessageBox(GetHWND(), L"È·¶¨Òƶ¯×éÖ¯½Úµã£¿", L"Ìáʾ£º", 1); //trace(ret); int wid = 0; if (ret == 2) { tv_org.DeleteItem(xto); return -1; } //xstring fid = tv_org.GetItemData(wid, xfrom); //xstring tid = tv_org.GetItemData(wid, xto); HTREEITEM xtop = tv_org.GetParentItem(xto); KXMLDOMElement ef = tv_org.GetItemData(xfrom); KXMLDOMElement et = tv_org.GetItemData(xtop); xstring fid = ef.selectSingleNode(L"@guid").text();//ef.xml; xstring tid = et.selectSingleNode(L"@guid").text();//et.xml; xml x; xaserverarg arg; arg.AddArg(L"from", fid); arg.AddArg(L"to", tid); //trace(et.xml); //return 1; if (xurl::post(L"OrganizationStruct/move.update.HrOrg", arg.GetString(), x) != 1) { trace(L"error:" + (xstring)x.xml()); alert(L"ÒÆ¶¯×éÖ¯½Úµã³ö´í!"); tv_org.DeleteItem(xto); return 0; } tv_org.DeleteItem(xfrom); return 1; } //xgridexË«»÷ int OnDoubleClicked(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; if (row < 1 || row > dw_list.GetRowCount()) return 1; KXMLDOMElement e = dw_list.GetRowElement(row); xstring sguid = e.selectSingleNode(L"@guid").text(); xaserverarg& arg = *new xaserverarg; arg.AddArg(L"operate", L"modify"); arg.AddArg(L"guid", sguid); arg.AddArg(L"tvOrgID", sOrgID); arg.AddArg(L"tvOrgName", sOrgName); arg.AddArg(L"tvRootOrgID", sRootOrgID); arg.AddArg(L"tvRootOrgName", sRootOrgName); //trace(row.toString()); //win::OpenWindow(L"dev:xpage[HrOrgMaint.xpage]",arg); openUrl(L"×éÖ¯¼Ü¹¹.vface/xpage/HrOrg/maint", &arg); return 1; } int AddRow() { /*int wid = ; int hitem=tv_org.GetSelectedItem(wid); int root=tv_org.GetRootItem(wid); if (hitem == root) { win32::MessageBox(GetHWND(),L"¸ù×éÖ¯£¡",L"Ìáʾ",0); return -1; }*/ //int row = dw_list.GetNextSelectRow(1); //IXMLDOMElement e = dw_list.GetRowElement(row); //xstring sguid = e.getAttribute(L"guid"); xaserverarg& arg = *new xaserverarg; arg.AddArg(L"operate", L"new0"); arg.AddArg(L"guid", L""); arg.AddArg(L"tvOrgID", sOrgID); arg.AddArg(L"tvOrgName", sOrgName); arg.AddArg(L"tvRootOrgID", sRootOrgID); arg.AddArg(L"tvRootOrgName", sRootOrgName); openUrl(L"×éÖ¯¼Ü¹¹.vface/xpage/HrOrg/maint", &arg); return 1; } int ModifyRow() { int row = dw_list.GetNextSelectRow(1); if (row < 1) { row = dw_list.GetRow(); if (row < 1) { MessageBox(GetHWND(), L"ÇëÑ¡ÖÐÒªÐ޸ĵÄ×éÖ¯Êý¾ÝÐУ¡", L"Ìáʾ", 0); return -1; } } KXMLDOMElement e = dw_list.GetRowElement(row); xstring sguid = e.selectSingleNode(L"@guid").text(); xaserverarg& arg = *new xaserverarg; arg.AddArg(L"operate", L"modify"); arg.AddArg(L"guid", sguid); arg.AddArg(L"tvOrgID", sOrgID); arg.AddArg(L"tvOrgName", sOrgName); arg.AddArg(L"tvRootOrgID", sRootOrgID); arg.AddArg(L"tvRootOrgName", sRootOrgName); openUrl(L"×éÖ¯¼Ü¹¹.vface/xpage/HrOrg/maint", &arg); return 1; } int OnDeleteItem(xstring sguid) { int wid = 0; HTREEITEM hitem = tv_org.GetSelectedItem(); HTREEITEM ditem = tv_org.GetChildItem(hitem); KXMLDOMElement e = tv_org.GetItemData(ditem); if (e) { xstring dguid = e.selectSingleNode(L"@guid").text(); while (dguid != sguid) { ditem = tv_org.GetNextItem(ditem); e = tv_org.GetItemData(ditem); dguid = e.selectSingleNode(L"@guid").text(); } tv_org.DeleteItem(ditem); } return 1; } int DeleteRow() { int row = dw_list.GetNextSelectRow(1); if (row < 1) { row = dw_list.GetRow(); if (row < 1) { //win::MessageBox(GetHWND(),L"ÇëÑ¡ÖÐҪɾ³ýµÄ×éÖ¯Êý¾ÝÐУ¡",L"Ìáʾ",0); return -1; } } KXMLDOMElement e = dw_list.GetRowElement(row); xstring sguid = e.selectSingleNode(L"@guid").text(); xstring sName = e.selectSingleNode(L"OrgName").text(); sName += L""; xml x; xaserverarg arg; arg.AddArg(L"guid", sguid); if (xurl::get(L"OrganizationStruct/child.OrgNums", arg.GetString(), x) != 1) { trace(x.text()); return -1; } else { KXMLDOMElement ele = x.documentElement(); xstring snums = ele.selectSingleNode(L"@num").text(); int num = snums.toInt(); if (num != 0) { MessageBox(GetHWND(), L"×éÖ¯ " + sName + L" ´æÔÚϼ¶×éÖ¯µ¥Ôª£¬½ûֹɾ³ý£¡", L"Ìáʾ", 0); return 1; } } int MB_YESNO = 0x00000004; int IDYES = 6; if (MessageBox(GetHWND(), L"È·ÈÏҪɾ³ý×éÖ¯ " + sName + L" µÄÐÅÏ¢Âð£¿", L"Ìáʾ", MB_YESNO) != IDYES) return 1; arg.AddArg(L"guid", sguid); //trace(sguid); xml x1; if (xurl::post(L"/sale/data/OrganizationStruct/delete.HrOrg", arg.GetString(), x1) != 1) { xstring error = x1.text(); trace(error); } else { //win32::MessageBox(GetHWND(),L"ɾ³ý³É¹¦£¡",L"Ìáʾ",0); dw_list.DeleteRow(row); OnDeleteItem(sguid); } return 1; } int Productlinemaint() { xaserverarg& arg = *new xaserverarg; arg.AddArg(L"id", L"²úÆ·Ïß"); openUrl(L"¹«¹²ÉèÖÃ.vface/worknode/quickcode/config", &arg); //openUrl(L"ÏÂÀ­´°¿Ú.vface/xpage/hremployee/select", arg); return 1; } int setTree() { xstring str = L""; str += L""; str += L""; str += L""; xstring xfNodeAgentArea = L"tree"; xnode anode = new xnode; anode.setNativePointer(GetAgentNode(xfNodeAgentArea)); SetAgentNode(anode, str); tv_org = GetControl(L"tv_org"); AttachEvent(L"tv_org", L"TVN_SELCHANGED", (FEvent)&HrOrg::OnTreeSelecded); HTREEITEM root = tv_org.GetRootItem(); if (root > 0) { tv_org.ExpandItemEx(root); } return 1; } //ÃüÁî·¢²¼º¯Êý int OnCmdDispatch(xstring comdid) { if (comdid == L"AddRow") { return AddRow(); } else if (comdid == L"ModifyRow") { return ModifyRow(); } else if (comdid == L"DeleteRow") { return DeleteRow(); } else if (comdid == L"OrgType") { xaserverarg& arg = *new xaserverarg; arg.AddArg(L"id", L"×éÖ¯ÀàÐÍ"); openUrl(L"¹«¹²ÉèÖÃ.vface/worknode/quickcode/config", &arg); //openUrl(L"×éÖ¯¼Ü¹¹.vface/xpage/HrOrg/type"); } else if (comdid == L"Refresh") { OnRetrieve(); setTree(); AttachEvent(L"tv_org", L"TVN_ENDDRAG", (FEvent)&HrOrg::OnTreeMoveNode); } else if (comdid == L"Productlinemaint") { Productlinemaint(); } return 0; } //ÃüÁî´¦Àíʼþ int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } int OnAttachEvent() { //°ó¶¨¹¤¾ßÌõµã»÷ʼþ AttachEvent(L"WM_XCOMMAND", (FEvent)&HrOrg::OnXCommand); //»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ AttachEvent(L"WM_SETFOCUS", (FEvent)&HrOrg::OnSetFocus); //»ñµÃÊ÷µÄµã»÷ʼþ AttachEvent(L"tv_org", L"TVN_SELCHANGED", (FEvent)&HrOrg::OnTreeSelecded); AttachEvent(L"tv_org", L"TVN_ITEMEXPANDING", (FEvent)&HrOrg::OnTreeExpanding); AttachEvent(L"tv_org", L"TVN_ENDDRAG", (FEvent)&HrOrg::OnTreeMoveNode); //Ë«»÷ AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&HrOrg::OnDoubleClicked); return 1; } int OnInitial() { SetAgent(); OnAttachEvent(); return 1; } int onload() { tv_org = GetControl(L"tv_org"); dw_list = new xdwgrid; dw_list.setNativePointer(GetControl(L"dw_list")); dw_list.openUrl(L"×éÖ¯¼Ü¹¹.vface/template/HrOrg/list"); dw_list.SetSelectionMode(1); dw_list.SetReadOnly(true); dw_list.SetColumnState(L"OrgPlat", false); dw_list.SetColumnState(L"OrgComLeader", false); dw_list.SetColumnState(L"OrgSupLeader", false); dw_list.SetColumnState(L"OrgProLine", false); OnInitial(); //OnCreateTree(L"00000000-0000-0000-0000-000000000000", 0); HTREEITEM root = tv_org.GetRootItem(); if (root > 0) { tv_org.ExpandItemEx(root); KXMLDOMElement ele = tv_org.GetItemData(root); if (ele) { xstring ls_orgid = ele.selectSingleNode(L"@guid").text(); sOrgID = ls_orgid + L""; sOrgName = ele.selectSingleNode(L"OrgName").text(); OnRetrieve(); } } return 1; } };