#include <wobject/xstring.hpp>
|
#include <xcontrol/xtreeview.hpp>
|
#include <xcontrol/xdwgrid.hpp>
|
|
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
|
#include "viewobject/view.base.hpp"
|
|
class __declspec(dllexport) SO3list : public listwin
|
{
|
public:
|
string m_sType; //Ê÷Ñ¡ÖеÄÀàÐÍ
|
string m_sTypeTxt; //Ê÷Ñ¡ÖеÄÊý¾Ý
|
string urlTree;
|
string myDataUrl;
|
string rows;
|
xcombobox ddlb_1;
|
xcombobox cbx_datashow;
|
|
int changeddlb;
|
|
xtreeview tv_folder;
|
xdwgrid dw_goods;
|
xdwgrid dw_source;
|
public:
|
SO3list(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
|
public:
|
static SO3list* CreateInstance(void* implPtr, void* hWnd)
|
{
|
SO3list* pWin = new SO3list(implPtr, (HWND)hWnd);
|
return pWin;
|
}
|
|
//process tree
|
//²éÕÒµ±Ç°Ê÷ÏîµÄ¶¥¼¶Ä¿Â¼
|
HTREEITEM LookupTopFolder(HTREEITEM hItem)
|
{
|
HTREEITEM hRoot = tv_folder.GetRootItem();
|
while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
|
return hItem;
|
}
|
|
int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
|
{
|
KXMLDOMNodeList nlist = ele.selectNodes(L"item");
|
int len = nlist.length();
|
if (len > 0) tv_folder.SetItemChild(hItem, 1);
|
for (int i = 0; i < len; i++)
|
{
|
KXMLDOMElement e = nlist.item(i);
|
string name = e.getAttribute(L"name");
|
HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
|
ExpandCatChildFolder(h, e, 35);
|
}
|
return 1;
|
}
|
|
int ExpandFolderItem(HTREEITEM hItem, string no)
|
{
|
KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),urlTree, L"no", no, L"rows", rows);
|
if (!x) return 0;
|
KXMLDOMNodeList nlist = x.selectNodes(L"/data/item");
|
int len = nlist.length();
|
for (int i = 0; i < len; i++)
|
{
|
KXMLDOMElement e = nlist.item(i);
|
string name = e.getAttribute(L"name");
|
HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
|
ExpandCatChildFolder(h, e, 35);
|
}
|
return 1;
|
}
|
|
//Ê÷Õ¹¿ª
|
int OnTreeExpanding(TEvent* evt, int p)
|
{
|
NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
|
HTREEITEM hItem = nmtv.itemNew.hItem;
|
HTREEITEM hTopItem = LookupTopFolder(hItem);
|
string name = tv_folder.GetItemLabel(hTopItem);
|
HTREEITEM child = tv_folder.GetChildItem(hItem);
|
|
KXMLDOMElement e = tv_folder.GetItemData(hItem);
|
if (!child)ExpandFolderItem(hItem, e.getAttribute(L"no"));
|
|
return 1;
|
}
|
|
//Õ¹¿ª×ÓÎļþ
|
int ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
|
{
|
KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
|
int len = nlist.length();
|
for (int i = 0; i < len; i++)
|
{
|
KXMLDOMElement e = nlist.item(i);
|
string name = e.getAttribute(L"name");
|
xstring sImage = e.getAttribute(L"image");
|
xstring child = e.getAttribute(L"child");
|
int image = 15;
|
if (sImage) image = sImage.toInt();
|
HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
|
if (child != L"no") tv_folder.SetItemChild(h, 1);
|
//ExpandChildFolder(h, e);
|
}
|
return 1;
|
}
|
|
//³õʼ»¯Îļþ¼Ð
|
int InitialFolder()
|
{
|
KXMLDOMElement xframeElement = GetElement();
|
KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
|
if (e)
|
ExpandChildFolder(0, e);
|
return 1;
|
}
|
|
int OnTreeSelChanged(TEvent* evt, LPARAM p)
|
{
|
if (changeddlb) return 1;
|
return OnPreRetrieve();
|
}
|
|
int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg arg)
|
{
|
if (updateItem == L"del")
|
{
|
int DelRow = dw_list.GetRow();
|
dw_list.DeleteRow(DelRow);
|
return 1;
|
}
|
else if (updateItem == L"setstate")
|
{
|
int row = dw_list.GetRow();
|
if (row < 1) return 1;
|
KXMLDOMElement ele = dw_list.GetRowElement(row);
|
string id = GetEntityIDName(1);
|
string entity = ele.selectSingleNode(id).text();
|
//trace(entity);
|
SetAgent(L"list", entity);
|
if (arg.GetArgString(L"state") != L"")
|
//this.dw_list.SetItemString(row, "ApprovalStatus", arg.GetArgString(L"state"));
|
dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state"));
|
if (arg.GetArgString(L"billstatus") != L"")
|
{
|
string billstatus = arg.GetArgString(L"billstatus");
|
string statusName = GetBillStatusName(billstatus);
|
dw_list.SetItemString(row, L"ApprovalStatus", billstatus);
|
dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName);
|
}
|
|
dw_list.Redraw();
|
}
|
return 1;
|
}
|
|
bool IsEmptyQueryStr(string queryStr)
|
{
|
if (queryStr == L"") return true;
|
if (queryStr == L"<items join='and'/>") return true;
|
if (queryStr == L"<items join=\"and\"/>") return true;
|
//trace(queryStr);
|
return false;
|
}
|
|
//¼ìË÷
|
int OnPreRetrieve()
|
{
|
HTREEITEM hItem = tv_folder.GetSelectedItem();
|
if (!hItem) return 1;
|
|
HCURSOR hCursor = xutil::SetCursorWait();
|
KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
|
string no = e1.getAttribute(L"no");
|
KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),myDataUrl, L"no", no, L"QueryTxt", m_QueryTxt, L"rows", rows);
|
if (x)
|
{
|
dw_list.Retrieve(x);
|
dw_list.Redraw();
|
}
|
else
|
{
|
dw_list.Reset();
|
dw_list.Redraw();
|
dw_goods.Reset();
|
dw_goods.Redraw();
|
}
|
dw_list.SetReadOnly(true);
|
xutil::RestoreCursor(hCursor);
|
return 1;
|
/*
|
xaserverarg arg = new xaserverarg;
|
arg.setNativePointer(arg.CreateInstance());
|
arg.AddArg(L"pageindex", m_pageIndex.toString(),""); //µÚ¼¸Ò³
|
arg.AddArg(L"pagenumber", m_pageNumber.toString(),""); //ÿҳÊýÁ¿
|
arg.AddArg(L"QueryTxt", m_QueryTxt,""); //²éѯÌõ¼þ
|
arg.AddArg(L"sType",m_sType,"");
|
arg.AddArg(L"sTypeTxt",m_sTypeTxt,"");
|
xml x = ViewObject::MakeXml();
|
|
KXMLDOMElement n = m_configDoc.selectSingleNode(L"//list/dwview[@type='dwgrid'][1]");
|
if(n)
|
{
|
KXMLDOMElement e = n;
|
if(e.selectSingleNode(L"@dataUrl"))
|
{
|
string dataUrl = e.selectSingleNode(L"@dataUrl").text;
|
if(dataUrl.left(1)!="/") dataUrl = GetEntityName(1)+"/"+dataUrl;
|
getUrl(dataUrl, arg.GetString(), x);
|
KXMLDOMElement ele=x.GetXmlDoc().documentElement;
|
if(dw_pages.ptr_native_)
|
{
|
if(ele.selectSingleNode(L"@TotalPage"))
|
{
|
string s=ele.selectSingleNode(L"@TotalPage").text; //×ÜÊýÁ¿
|
dw_pages.SetMaxPage(s.toInt());
|
}
|
}
|
dw_list.Retrieve(x);
|
dw_list.Redraw();
|
dw_list.SetReadOnly(true);
|
}
|
else
|
{
|
SetEntityData(arg);
|
}
|
}
|
else
|
{
|
SetEntityData(arg);
|
}
|
*/
|
}
|
|
//ÀúÊ·Êý¾Ý
|
int Onhistroydata()
|
{
|
int row = dw_list.GetNextSelectRow(1);
|
if (row > 0)
|
{
|
KXMLDOMElement e = dw_list.GetRowElement(row);
|
xaserverarg& arg = * new xaserverarg;
|
string sCustomerID = e.selectSingleNode(L"CustomerID").text();
|
arg.AddArg(L"CustomerID", sCustomerID, L"");
|
string sCustomerName = e.selectSingleNode(L"CustomerName").text();
|
arg.AddArg(L"CustomerName", sCustomerName, L"");
|
arg.AddArg(L"EntityName", GetEntityName(1), L"");
|
arg.AddArg(L"EntityID", GetEntityID(1), L"");
|
openUrl(L"/sale/view/SO/xpage/histroydata", &arg);
|
}
|
return 1;
|
}
|
|
//xcomboboxÏÂÀ
|
int OnSelectDdlb(TEvent* evt, LPARAM p)
|
{
|
changeddlb = 1;
|
HWND wid = ddlb_1.GetHWND();
|
int CB_GETCURSEL = 0x0147;
|
int nIndex =SendMessage(wid, CB_GETCURSEL, 0, 0);
|
KXMLDOMElement e = ddlb_1.GetElement();
|
KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
|
string no = e2.selectSingleNode(L"@element").text();
|
|
HTREEITEM hItem = tv_folder.GetRootItem();
|
while (tv_folder.GetChildItem(hItem))
|
tv_folder.DeleteItem(tv_folder.GetChildItem(hItem));
|
ExpandFolderItem(hItem, no);
|
|
changeddlb = 0;
|
return 1;
|
}
|
|
|
int OnSelectDataShowDdlb(TEvent* evt, LPARAM p)
|
{
|
HWND wid = cbx_datashow.GetHWND();
|
int CB_GETCURSEL = 0x0147;
|
int nIndex = SendMessage(wid, CB_GETCURSEL, 0, 0);
|
KXMLDOMElement e = cbx_datashow.GetElement();
|
KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
|
rows = e2.selectSingleNode(L"@rows").text();
|
OnPreRetrieve();
|
|
return 1;
|
}
|
|
int PreOnCmdDispatch(string comdid)
|
{
|
if (comdid == L"action:bill.new")
|
{
|
string s = publiccode::GetUser().id;
|
string no = publiccode::GetUser().no;
|
if (no != L"00303" && no != L"admin")
|
{
|
KXMLDOMDocument supplier_x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s);
|
if (supplier_x)
|
{
|
if ((xstring)supplier_x.text() != L"ÒµÎñÔ±")
|
{
|
alert(L"µ±Ç°½ÇÉ«²»ÊÇÒµÎñÔ±²»ÄÜÐÂÔöµ¥×Ó£¬ÇëÖØÐÂÑ¡Ôñ½ÇÉ«");
|
return 0;
|
}
|
}
|
}
|
}
|
if (comdid == L"action:bill.annex")
|
{
|
string deptname = publiccode::GetUser().deptname;
|
if (deptname == L"²É¹º²¿")
|
{
|
return 1;
|
}
|
|
int row = dw_list.GetRow();
|
if (row < 1) return 1;
|
xstring guid = dw_list.GetItemString(row, L"SOID");
|
xaserverarg& arg = * new xaserverarg();
|
|
if (guid.length() <= 0)return 1;
|
|
arg.AddArg(L"entityid", guid);
|
arg.AddArg(L"Type", L"Y");
|
OpenWindow(L"dev:xpage[maint.Document.SO3.v3.vx]", arg);
|
|
return 0;
|
}
|
if (comdid == L"action:bill.histroydata") return Onhistroydata();
|
else if (comdid == L"action:bill.refresh")
|
{
|
changeddlb = 1;
|
HTREEITEM RItem = tv_folder.GetRootItem();
|
while (tv_folder.GetChildItem(RItem))
|
tv_folder.DeleteItem(tv_folder.GetChildItem(RItem));
|
ExpandFolderItem(RItem, L"Category:Customer");
|
tv_folder.ExpandItem(RItem);
|
tv_folder.ItemFocus(RItem);
|
changeddlb = 0;
|
return OnPreRetrieve();
|
}
|
if (comdid == L"action:bill.saveas")
|
{
|
dw_list.SaveAs(L"");
|
return 1;
|
}
|
if (comdid == L"action:bill.SourceRemark") return OnSourceRemark();
|
|
return 1;
|
}
|
|
int OnSourceRemark()
|
{
|
xstring name = L"ÍâÏúºÏͬ";
|
KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),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& arg = *new xaserverarg;
|
arg.AddArg(L"value", Content);
|
OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg);
|
|
return 1;
|
}
|
|
int OnRowChanged(TEvent* evt, LPARAM p)
|
{
|
DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
|
int row = hdr.row;
|
|
|
if (row < 1) return 1;
|
|
//fixed one event only one process
|
listwin::OnRowChanged(evt, p);
|
|
HCURSOR hCursor = xutil::SetCursorWait();
|
|
xstring SONo = dw_list.GetItemString(row, L"SONo");
|
KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/item", L"id", SONo);
|
if (x)
|
dw_goods.Retrieve(x);
|
else
|
dw_goods.Reset();
|
dw_goods.Redraw();
|
dw_goods.SetReadOnly(true);
|
|
x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/itemwithsource", L"id", SONo);
|
if (x)
|
dw_source.Retrieve(x);
|
else
|
dw_source.Reset();
|
dw_source.Redraw();
|
dw_source.SetReadOnly(true);
|
|
xutil::RestoreCursor(hCursor);
|
|
return 1;
|
}
|
|
|
int AttachListon()
|
{
|
AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&SO3list::OnTreeSelChanged); //Ê÷Ñ¡Ôñ
|
AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SO3list::OnRowChanged);//°ó¶¨Ðиü¸Ä´¥·¢Ê¼þOnRowChanged
|
AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&listwin::OnDoubleClicked);
|
AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDdlb);//°ó¶¨ÏÂÀ¿ò¸ü¸Ä´¥·¢Ê¼þOnSelectDdlb
|
AttachEvent(L"cbx_datashow", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDataShowDdlb);//°ó¶¨Ñ¡ÔñÊý¾ÝÏÔʾÏÂÀÁбíʼþOnSelectDataShowDdlb
|
return 1;
|
}
|
|
int onload()
|
{
|
changeddlb = 0;
|
listwin::onload();
|
ddlb_1 = GetControl(L"cbx_1");
|
cbx_datashow = GetControl(L"cbx_datashow");
|
dw_goods = GetControl(L"dw_goods");
|
dw_goods.openUrl(GetServerUrl(),L"/sale/view/SaleOrder/template/item");
|
dw_source = GetControl(L"dw_source");
|
dw_source.openUrl(GetServerUrl(), L"/sale/view/SaleOrder/template/sourceitem");
|
|
dw_goods.SetColumnState(L"ItemID", false);
|
dw_goods.SetColumnState(L"LineType", false);
|
dw_goods.SetColumnState(L"Brand", false);
|
dw_goods.SetColumnState(L"Assortment", false);
|
dw_goods.SetColumnState(L"ClassifyID", false);
|
dw_goods.SetColumnState(L"UnitFreight", false);
|
//dw_goods.SetColumnState(L"CName",false);//Òþ²ØÁÐ
|
|
dw_goods.SetColumnState(L"Brand", false);
|
dw_goods.SetColumnState(L"SKUNo", false);
|
dw_goods.SetColumnState(L"SOLineNo", false);
|
dw_goods.SetColumnState(L"CustomerPONo", false);
|
dw_goods.SetColumnState(L"ScheduleShipDate", false);
|
|
dw_goods.SetColumnState(L"PackTechNote", false);
|
dw_goods.SetColumnState(L"EnquiryPriceListID", false);
|
dw_goods.SetColumnState(L"Submitter", false);
|
dw_goods.SetColumnState(L"POSupplierID", false);
|
dw_goods.SetColumnState(L"QuoteLineID", false);
|
|
dw_list.SetColumnState(L"CreatorID", false);
|
dw_list.SetColumnState(L"SOID", false);
|
|
|
string groupname = publiccode::GetUser().groupname;
|
if (groupname == L"²É¹ºÐ¡×é")
|
{
|
dw_list.SetColumnState(L"USDAmount", false);
|
dw_list.SetColumnState(L"RMBAmount", false);
|
|
dw_goods.SetColumnState(L"UnitPrice", false);
|
dw_goods.SetColumnState(L"Amount", false);
|
dw_goods.SetColumnState(L"UnitCommPrice", false);
|
dw_goods.SetColumnState(L"CommissionRate", false);
|
|
dw_source.SetColumnState(L"UnitPrice", false);
|
dw_source.SetColumnState(L"Amount", false);
|
dw_source.SetColumnState(L"FOBAmount", false);
|
dw_source.SetColumnState(L"BuyUnitPrice", false);
|
dw_source.SetColumnState(L"BuyAmount", false);
|
dw_source.SetColumnState(L"CostRate", false);
|
}
|
|
rows = L"500";
|
myDataUrl = L"/sale/data/SaleOrder/folder/list";
|
urlTree = L"/sale/data/SaleOrder/folder";
|
tv_folder = GetControl(L"tv_folder");
|
tv_folder.SetLineAtRoot(true);
|
InitialFolder();
|
|
return 1;
|
}
|
|
int onloaded()
|
{
|
listwin::onloaded();
|
|
//attach my control event
|
AttachListon();
|
|
dw_list.SetColumnState(L"SOID", false);
|
|
HTREEITEM hItem = tv_folder.GetRootItem();
|
ExpandFolderItem(hItem, L"Category:Customer");
|
tv_folder.ExpandItem(hItem);
|
//tv_folder.ItemFocus(tv_folder.GetChildItem(hItem));
|
tv_folder.ItemFocus(hItem);
|
|
|
return -1;
|
}
|
|
int ProcessUsedArg(xaserverarg arg)
|
{
|
HTREEITEM hItem = tv_folder.GetCaretItem();
|
if (hItem ) return 1;
|
KXMLDOMElement e = tv_folder.GetItemData(hItem);
|
xstring no = e.getAttribute(L"no");
|
if (no.find(L"Customer:") >= 0)
|
{
|
arg.AddArg(L"CustomerID", e.getAttribute(L"id"));
|
xstring name = e.getAttribute(L"name");
|
if (name.find(L"(L") >= 0) name = name.left(name.find(L"(L"));
|
arg.AddArg(L"CustomerName", name);
|
}
|
return 1;
|
}
|
};
|