#include <wobject/xstring.hpp> 
 | 
#include <xcontrol/xtreeview.hpp> 
 | 
#include <xcontrol/xdwgrid.hpp> 
 | 
#include <wobject/xdouble.hpp> 
 | 
#include <xcontrol/xlayersheet.hpp> 
 | 
  
 | 
#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; 
 | 
  
 | 
        return 1; 
 | 
  
 | 
        xstring id = (string)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(); 
 | 
        } 
 | 
  
 | 
        string str = ele.xml(); 
 | 
        if(ele.selectSingleNode(L"@guid")) 
 | 
            sOrgID = ele.selectSingleNode(L"@guid").text(); 
 | 
        if(ele.selectSingleNode(L"OrgName")) 
 | 
            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"<vbox name='tree' >"; 
 | 
        str += L"<xtree name='tv_org' imagelist='0' drag='true'>"; 
 | 
        str += L"<treeitem src='xquery:[OrgChart.hr.xq]' src1='xquery:[OrgStructureRetrieve.xq]' xcaption='OrgName' xroot='/root' xpath='Org' xchildpath='Org' image='15' loop='yes' xdata='.'/>"; 
 | 
        str += L"</xtree></vbox>"; 
 | 
        xstring xfNodeAgentArea = L"tree"; 
 | 
        xnode anode = 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) 
 | 
        { 
 | 
            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 = 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) 
 | 
        { 
 | 
            tv_org.ExpandItemEx(root); 
 | 
            KXMLDOMElement ele = tv_org.GetItemData(root); 
 | 
            if (ele) 
 | 
            { 
 | 
                if(ele.selectSingleNode(L"@guid")) 
 | 
                    sOrgID = ele.selectSingleNode(L"@guid").text(); 
 | 
                if(ele.selectSingleNode(L"OrgName")) 
 | 
                    sOrgName = ele.selectSingleNode(L"OrgName").text(); 
 | 
                OnRetrieve(); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
}; 
 |