#pragma once
|
|
#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) HrEmployee : public xwin
|
{
|
public:
|
|
xtreeview tv_org;
|
xdwgrid dw_emp;
|
|
xstring is_orgid;
|
xstring is_orgname;
|
xstring is_inflag;
|
xdwtable dw_empmaint;
|
xnode m_agentNode; //Agent Condition
|
xstring m_agentCond; //Agent Node
|
|
|
public:
|
HrEmployee(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
|
public:
|
static HrEmployee* CreateInstance(void* implPtr, void* hWnd)
|
{
|
HrEmployee* pWin = new HrEmployee(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 OnSetFocus(TEvent* evt, LPARAM param)
|
{
|
SetAgent();
|
//ÖØÖù¤¾ßÌõ
|
return 1;
|
}
|
|
int OnRetrieve(xstring ls_orgid)
|
{
|
xml x;
|
|
xaserverarg arg;
|
|
arg.AddArg(L"OrgID", ls_orgid);
|
//trace(ls_orgid);
|
//if (xaserver::ExecXQuery(GetServerUrl(),L"[MSSqlHrEmployee.xq]",arg.GetString(),x) == 1)
|
if (xurl::get(L"OrganizationStruct/list.Employee", arg.GetString(), x) == 1)
|
{
|
dw_emp.Retrieve(x);
|
dw_emp.Redraw();
|
}
|
//trace(x.GetXml());
|
return 1;
|
}
|
|
int OnSave()
|
{
|
HCURSOR hIcon = xutil::SetCursorWait();
|
xml x;
|
|
dw_emp.AcceptText();
|
dw_emp.DwUpdateAllToEx(x);
|
|
xstring val = x.xml();
|
xaserverarg arg;
|
|
arg.AddArg(L"content", val);
|
//trace(x.GetXml());
|
//return 1;
|
if (xurl::post(L"OrganizationStruct/update.Employee", arg.GetString(), x) != 1)
|
{
|
trace(x.documentElement().text());
|
alert(L"±£´æÊ§°Ü");
|
}
|
else {
|
dw_emp.ResetUpdateStatus();
|
alert(L"±£´æ³É¹¦");
|
}
|
trace(x.xml());
|
xutil::RestoreCursor(hIcon);
|
return 1;
|
}
|
|
int OnSubTree(xstring id, HTREEITEM parentitem)
|
{
|
//int wid = tv_org.GetId();
|
if (!tv_org.GetChildItem(parentitem)) return 1;
|
xml x;
|
|
xaserverarg arg;
|
|
arg.AddArg(L"sguid", id);
|
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"//item");
|
int i = 0, s = list.length();
|
KXMLDOMElement xitem;
|
xstring sName;
|
xstring sguid;
|
xstring stype;
|
if (s > 0)
|
{
|
for (i = 0; i < s; i++)
|
{
|
xitem = list.item(i);
|
sName = xitem.selectSingleNode(L"name").text();
|
sguid = xitem.selectSingleNode(L"id").text();
|
stype = xitem.selectSingleNode(L"typ").text();
|
//int curItem = tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4);
|
HTREEITEM curItem = 0;
|
if (stype == L"Org")
|
{
|
curItem = tv_org.InsertChildItemEx(parentitem, sName, xitem, 15, 4);
|
tv_org.SetItemChild1(curItem, 1);
|
}
|
else
|
{
|
curItem = tv_org.InsertChildItemEx(parentitem, sName, xitem, 21, 21);
|
}
|
//OnSubTree(sguid,curItem);
|
}
|
}
|
return 1;
|
}
|
|
int OnCreateTree(xstring id, HTREEITEM parentitem)
|
{
|
//while (tv_1.GetRootItem()>0)
|
// tv_1.DeleteItem(tv_1.GetRootItem());
|
//int wid = tv_org.GetId();
|
xml x;
|
|
x.loadXML(L"<item><id>" + id + L"</id><no/><name>Äþ²¨¼Ò¶û¼Ñ</name><typ>Org</typ></item>");
|
//KXMLDOMDocument root = x;
|
//KXMLDOMElement RDoc = x.documentElement;
|
//KXMLDOMElement ele = RDoc.selectSingleNode(L"//Org");
|
KXMLDOMElement ele = x.selectSingleNode(L"//item");
|
HTREEITEM hItem = tv_org.InsertChildItemEx(0, L"Äþ²¨¼Ò¶û¼Ñ", ele, 15, 4);
|
tv_org.SetItemChild1(hItem, 1);
|
return 1;
|
|
/*xaserverarg arg=new xaserverarg;
|
|
arg.AddArg(L"sguid",id);
|
if(xurl::post(L"/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1)
|
{
|
trace(x.GetXml());
|
return -1;
|
}
|
//trace(x.GetXml());
|
var list=x.selectNodes(L"//item");
|
int i=0,s=list.length;
|
KXMLDOMElement xitem;
|
xstring sName;
|
xstring sguid;
|
if (s >0)
|
{
|
for (i=0;i<s;i++)
|
{
|
xitem= list.item(i);
|
sName = xitem.selectSingleNode(L"@name").text();
|
sguid = xitem.selectSingleNode(L"@id").text();
|
int curItem = tv_org.InsertChildItemEx(wid,hItem,sName,xitem,15,4);
|
tv_org.SetItemChild1(wid,curItem,1);
|
//OnSubTree(sguid,curItem);
|
}
|
}
|
return 1;*/
|
}
|
|
int OnTreeExpanding(TEvent* evt, int p)
|
{
|
NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
|
HTREEITEM sitem = nmtv.itemNew.hItem;
|
|
HCURSOR hCursor = xutil::SetCursorWait();
|
//xstring id = tv_org.GetItemData(tv_org.GetId(), sitem);
|
KXMLDOMElement ele = tv_org.GetItemData(sitem);
|
xstring id = ele.selectSingleNode(L"id").text();
|
OnSubTree(id, sitem);
|
xutil::RestoreCursor(hCursor);
|
return 1;
|
}
|
|
int OnTreeSelChanged(TEvent* evt, int p)
|
{
|
//int wid = tv_org.GetId();
|
HTREEITEM hitem = tv_org.GetSelectedItem();
|
KXMLDOMElement ele = tv_org.GetItemData(hitem);
|
if (ele)
|
{
|
xstring ls_orgid = ele.selectSingleNode(L"id").text();
|
is_orgid = ls_orgid;
|
OnRetrieve(ls_orgid);
|
}
|
return 1;
|
}
|
|
int OnAddRow()
|
{
|
//int wid = tv_org.GetId();
|
HTREEITEM hitem = tv_org.GetSelectedItem();
|
if (!hitem)
|
{
|
alert(L"ÇëÑ¡Ôñ¸Úλ£¡");
|
return 0;
|
}
|
else
|
{
|
KXMLDOMElement ele = tv_org.GetItemData(hitem);
|
xstring stype = ele.selectSingleNode(L"typ").text();
|
if (stype != L"Pos")
|
{
|
alert(L"ÇëÑ¡Ôñ¸Úλ£¡");
|
return 0;
|
}
|
}
|
|
OpenWindow(L"dev:xpage[HrEmployeeAdd.vx]", (LPARAM)this);
|
//openUrl(L"×éÖ¯¼Ü¹¹.vface/xpage/Hr/HrEmployeeAdd", this);
|
return 1;
|
}
|
|
int OnModifyRow()
|
{
|
int row = dw_emp.GetNextSelectRow(1);
|
if (row < 1)
|
{
|
row = dw_emp.GetRow();
|
if (row < 1)
|
{
|
MessageBox(GetHWND(), L"ÇëÑ¡ÖÐÒªÐ޸ĵÄÈÎÖ°ÐÅÏ¢ÐУ¡", L"Ìáʾ", 0);
|
return -1;
|
}
|
}
|
//int wid = dw_emp.GetId();
|
KXMLDOMElement e = dw_emp.GetRowElement(row);
|
xstring sPersonID = e.selectSingleNode(L"PersonID").text();
|
//trace(e.xml);
|
xaserverarg& arg = *new xaserverarg;
|
|
arg.AddArg(L"operate", L"modify");
|
arg.AddArg(L"guid", sPersonID);
|
//xwin::OpenWindow(L"dev:xpage[HrPersonMaint.xpage]",arg);
|
openUrl(L"×éÖ¯¼Ü¹¹.vface/xpage/Hr/HrPersonMaint", &arg);
|
return 1;
|
}
|
|
int OnDeleteRow()
|
{
|
int ll_row = dw_emp.GetNextSelectRow(1);
|
if (ll_row < 1)
|
{
|
ll_row = dw_emp.GetRow();
|
if (ll_row < 1)
|
{
|
MessageBox(GetHWND(), L"ÇëÑ¡ÖÐҪɾ³ýµÄÈÎÖ°ÐÅÏ¢ÐУ¡", L"Ìáʾ", 0);
|
return -1;
|
}
|
}
|
xstring sName = dw_emp.GetItemDisplayString(ll_row, L"PersonID");
|
if (MessageBox(GetHWND(), L"È·¶¨É¾³ý" + sName + L"ÈÎÖ°ÐÅÏ¢Âð£¿", L"Ìáʾ", 1) != 1)
|
return 0;
|
|
KXMLDOMElement ele = dw_emp.GetRowElement(ll_row);
|
xstring empid = ele.selectSingleNode(L"@guid").text();
|
|
xml x;
|
|
xaserverarg args;
|
args.setNativePointer(args.CreateInstance());
|
args.AddArg(L"guid", empid);
|
//if(xaserver::ExecXAction(GetServerUrl(),L"[MSSqlHrEmployeeDel.xq]",args.GetString(),x) !=1)
|
if (xurl::post(L"OrganizationStruct/delete.Employee", args.GetString(), x) != 1)
|
{
|
xstring error = x.text();
|
trace(error);
|
}
|
else
|
{
|
dw_emp.DeleteRow(ll_row);
|
}
|
|
return 1;
|
}
|
|
int SetText()
|
{
|
SetWindowText(GetHWND(), L"ËùÊô×éÖ¯:" + is_orgname + L" ²Ù×÷״̬£º" + is_inflag);
|
return 1;
|
}
|
|
//xgridexË«»÷
|
int OnDoubleClicked(TEvent* evt, LPARAM p)
|
{
|
DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
|
int row = hdr.row;
|
if (row < 1 || row > dw_emp.GetRowCount())
|
return 1;
|
KXMLDOMElement e = dw_emp.GetRowElement(row);
|
xstring sPersonID = e.selectSingleNode(L"PersonID").text();
|
xaserverarg& arg = *new xaserverarg;
|
|
arg.AddArg(L"operate", L"modify");
|
arg.AddArg(L"guid", sPersonID);
|
//xwin::OpenWindow(L"dev:xpage[HrPersonMaint.xpage]",arg);
|
openUrl(L"×éÖ¯¼Ü¹¹.vface/xpage/Hr/HrPersonMaint", &arg);
|
return 1;
|
}
|
|
//ÃüÁî·¢²¼º¯Êý
|
int OnCmdDispatch(xstring comdid)
|
{
|
if (comdid == L"Save") return OnSave();
|
else if (comdid == L"AddRow") return OnAddRow();
|
else if (comdid == L"ModifyRow") return OnModifyRow();
|
else if (comdid == L"DeleteRow") return OnDeleteRow();
|
else if (comdid == L"Refresh") return OnRetrieve(is_orgid);
|
/*else if(comdid ==L"adjustorg") return OnAdjustOrg();*/
|
|
return 0;
|
}
|
|
//ÃüÁî´¦Àíʼþ
|
int OnXCommand(TEvent* evt, LPARAM param)
|
{
|
return OnCmdDispatch(evt->xcommand.pStrID);
|
}
|
|
int OnAttachEvent()
|
{
|
//°ó¶¨¹¤¾ßÌõµã»÷ʼþ
|
AttachEvent(L"WM_XCOMMAND", (FEvent)&HrEmployee::OnXCommand);
|
//»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ
|
AttachEvent(L"WM_SETFOCUS", (FEvent)&HrEmployee::OnSetFocus);
|
//»ñµÃÊ÷µÄÑ¡Ôñʼþ
|
AttachEvent(L"tv_org", L"TVN_SELCHANGED", (FEvent)&HrEmployee::OnTreeSelChanged);
|
AttachEvent(L"tv_org", L"TVN_ITEMEXPANDING", (FEvent)&HrEmployee::OnTreeExpanding);
|
AttachEvent(L"dw_emp", L"DWV_DOUBLECLICKED", (FEvent)&HrEmployee::OnDoubleClicked);
|
return 1;
|
}
|
|
int OnInitial()
|
{
|
m_agentNode = new xnode;
|
SetAgent();
|
OnAttachEvent();
|
|
return 1;
|
}
|
|
int onload()
|
{
|
tv_org = GetControl(L"tv_org");
|
dw_emp = new xdwgrid;
|
dw_emp.setNativePointer(GetControl(L"dw_emp"));
|
dw_emp.openUrl(L"×éÖ¯¼Ü¹¹.vface/template/HrEmployee/list");
|
//dw_emp.SetReadOnly(true);
|
//dw_emp.SetSelectionMode(1);
|
|
OnInitial();
|
OnCreateTree(L"00000000-0000-0000-0000-000000000000", 0);
|
//int wid = tv_org.GetId();
|
HTREEITEM root = tv_org.GetRootItem();
|
tv_org.ExpandItem( root);
|
return 1;
|
}
|
};
|