#pragma once
|
|
#include <wobject/xwin.hpp>
|
#include <wobject/xurl.hpp>
|
#include <xcontrol/xdwgrid.hpp>
|
#include <xcontrol/xdwpages.hpp>
|
#include <xcontrol/xcombobox.hpp>
|
#include "frame.vframe.vbusiness.hpp"
|
#include <wobject/xurl.hpp>
|
#include "../vutil/publiccode.vutil.vbusiness.hpp"
|
|
class listEx
|
{
|
public:
|
xcombobox dw_col;
|
KXMLDOMDocument m_configDoc;
|
xwin* m_this;
|
public:
|
listEx() {}
|
public:
|
bool Init(xwin* w, KXMLDOMDocument c)
|
{
|
m_this = w;
|
m_configDoc = c;
|
return true;
|
}
|
|
int alert(string str)
|
{
|
return m_this->alert(str);
|
}
|
|
string GetServerUrl()
|
{
|
return L"";
|
}
|
|
xnode SetAgentNodeContent(xnode n, string str)
|
{
|
return m_this->SetAgentNode(n, str);
|
}
|
|
bool AttachEvent(string control, string notify, xview::FEvent fevt)
|
{
|
return m_this->AttachEvent(control, notify, fevt);
|
}
|
|
int getUrl(string aurl, string para, KXMLDOMDocument x)
|
{
|
return xurl::get(GetServerUrl(),aurl, para, x);
|
}
|
|
string EditCombo(KXMLDOMElement d)
|
{
|
if (d.selectSingleNode(L"datas")) {
|
KXMLDOMElement e = d.selectSingleNode(L"datas");
|
KXMLDOMElement ele;
|
string c1;
|
string c2;
|
|
if (e.selectSingleNode(L"@xquery") && e.selectSingleNode(L"@column1") && e.selectSingleNode(L"@column2")) {
|
xstring xq = e.selectSingleNode(L"@xquery").text();
|
c1 = e.selectSingleNode(L"@column1").text();
|
c2 = e.selectSingleNode(L"@column2").text();
|
xstring pa = L"";
|
if (e.selectSingleNode(L"@param"))
|
pa = e.selectSingleNode(L"@param").text();
|
KXMLDOMDocument x;
|
xaserverarg arg;
|
if (pa !=L"") {
|
arg.AddArg(pa.mid(0, pa.find(L"=", 0)), pa.mid(pa.find(L"=", 0) + 1, pa.length()), L"xsd:string");
|
}
|
if (xaserver::ExecXQuery(GetServerUrl(), L"[" + xq + L"]", arg.GetString(), x) != 1)
|
//if(getUrl(xq, arg, x)!=1)
|
{
|
//trace("error:"+x.GetXml());
|
return L"";
|
}
|
ele = x.documentElement();
|
}
|
else {
|
ele = e;
|
c1 = L"@column1";
|
c2 = L"@column2";
|
}
|
|
KXMLDOMNodeList nlist = ele.selectNodes(L"*");
|
int i = 0;
|
int s = nlist.length();
|
string str = L"";
|
for (i = 0; i < s; i++) {
|
KXMLDOMElement xitem = nlist.item(i);
|
string name = L"";
|
if (xitem.selectSingleNode(c1))
|
name = xitem.selectSingleNode(c1).text();
|
xstring value = L"";
|
if (xitem.selectSingleNode(c2))
|
value = xitem.selectSingleNode(c2).text();
|
xstring tmp = L"<item text='" + value + L"' data='" + name + L"'/>";
|
str += tmp;
|
}
|
//trace(str);
|
return str;
|
}
|
return L"";
|
}
|
|
string EditDate(KXMLDOMElement e)
|
{
|
string str = L"<xedit name='_cb_grid_value1' bind='_cb_grid_search'/><xlabel caption='~' width='8'/><xedit name='_cb_grid_value2' bind='_cb_grid_search'/>";
|
return str;
|
}
|
|
string EditSheet(KXMLDOMElement d)
|
{
|
xstring str = L"<xedit name='_cb_grid_value1' bind='_cb_grid_search'/>";
|
if (d.selectSingleNode(L"@sheet")) {
|
KXMLDOMDocument x;
|
if (x.loadXML(d.selectSingleNode(L"@sheet").text()))
|
{
|
KXMLDOMElement e = x.documentElement();
|
if (e.selectSingleNode(L"edit")) {
|
KXMLDOMElement ed = e.selectSingleNode(L"edit");
|
if (ed.selectSingleNode(L"@edittype"))
|
{
|
xstring edittype = ed.selectSingleNode(L"@edittype").text();
|
if (edittype == L"ddlb") {
|
str = L"<xcombobox name='_cb_grid_value1' bind='_cb_grid_search'>";
|
xstring ddlbxml = ed.selectSingleNode(L"@ddlbxml").text();//ed.GetAttribute("ddlbxml");
|
KXMLDOMDocument y;
|
if (y.loadXML(L"" + ddlbxml))
|
{
|
KXMLDOMElement ele = y.documentElement();
|
KXMLDOMNodeList nlist = ele.selectNodes(L"row");
|
int i = 0;
|
int s = nlist.length();
|
xstring tmp = L"";
|
for (i = 0; i < s; i++) {
|
KXMLDOMElement xitem = nlist.item(i);
|
xstring name = xitem.selectSingleNode(L"Êý¾ÝÁÐ").text();
|
xstring value = xitem.selectSingleNode(L"ÏÔʾÁÐ").text();
|
xstring tmp1 = L"<item text='" + value + L"' data='" + name + L"'/>";
|
tmp += tmp1;
|
}
|
str += tmp;
|
}
|
str += L"</xcombobox>";
|
}
|
}
|
}
|
}
|
}
|
return str;
|
}
|
|
string EditTree(KXMLDOMElement e)
|
{
|
if (e.selectSingleNode(L"@xpage") && e.selectSingleNode(L"@column1") && e.selectSingleNode(L"@column2")) {
|
xstring xq = e.selectSingleNode(L"@xpage").text();
|
xstring c1 = e.selectSingleNode(L"@column1").text();
|
xstring c2 = e.selectSingleNode(L"@column2").text();
|
|
xaserverarg arg;
|
m_this->OpenWindow(L"dev:xpage[" + xq + L"]", (LPARAM) & arg);
|
//trace(arg.GetString());
|
xstring d1 = arg.GetArgString(c1);
|
xstring d2 = arg.GetArgString(c2);
|
//trace(CategoryID, CName);
|
xcombobox cb_value = m_this->GetControl(L"_cb_grid_value1");
|
cb_value.ResetContent();
|
if (d1 != L"" && d2 != L"") {
|
int k = cb_value.AddItem(d2.c_str(), d1.c_str());
|
cb_value.SetCurSel( k);
|
}
|
}
|
return L"";
|
}
|
|
int OnSelectDialog()
|
{
|
int h = dw_col.GetCurSel();
|
if (h < 0) return 0;
|
int dt0 = dw_col.GetItemData( h);
|
xstring str = dt0;
|
KXMLDOMDocument x;
|
if (x.loadXML(str))
|
{
|
KXMLDOMElement e = x.documentElement();
|
if (e.selectSingleNode(L"@editer")) {
|
string edittype = e.getAttribute(L"editer");
|
if (e.selectSingleNode(L"datas")) {
|
KXMLDOMElement d = e.selectSingleNode(L"datas");
|
if (edittype == L"tree" || edittype == L"grid") {
|
EditTree(d);
|
}
|
}
|
}
|
}
|
return 0;
|
}
|
|
int OnDropDown(TNotifyEvent* evt, LPARAM p)
|
{
|
OnSelectDialog();
|
return 1;
|
}
|
|
xstring GetSysDefault(xstring str)
|
{
|
xstring ret = str;
|
if (str == L"now")
|
{
|
ret = publiccode::GetCurrentDate();
|
ret = ret.left(10);
|
}
|
else if (str == L"year")
|
{
|
ret = publiccode::GetCurrentDate();
|
ret = ret.left(4) + L"-01-01";
|
}
|
else if (str.left(4) == L"year")
|
{
|
ret = publiccode::GetCurrentDate();
|
if (str == L"year-1")
|
ret = xstring(ret.left(4).toInt() - 1) + L"-01-01";
|
else if (str == L"year-2")
|
ret = xstring(ret.left(4).toInt() - 2) + L"-01-01";
|
else if (str == L"year-3")
|
ret = xstring(ret.left(4).toInt() - 3) + L"-01-01";
|
else if (str == L"year-4")
|
ret = xstring(ret.left(4).toInt() - 4) + L"-01-01";
|
else if (str == L"year-5")
|
ret = xstring(ret.left(4).toInt() - 5) + L"-01-01";
|
else if (str == L"year-x")
|
ret = L"1900-00-00";
|
if (str == L"year+1")
|
ret = xstring(ret.left(4).toInt() + 1) + L"-01-01";
|
else if (str == L"year+2")
|
ret = xstring(ret.left(4).toInt() + 2) + L"-01-01";
|
else if (str == L"year+3")
|
ret = xstring(ret.left(4).toInt() + 3) + L"-01-01";
|
else if (str == L"year+4")
|
ret = xstring(ret.left(4).toInt() + 4) + L"-01-01";
|
else if (str == L"year+5")
|
ret = xstring(ret.left(4).toInt() + 5) + L"-01-01";
|
else if (str == L"year+x")
|
ret = L"2150-12-31";
|
}
|
else if (str.left(3) == L"now")
|
{
|
xaserverarg arg;
|
if (str == L"now-90")
|
arg.AddArg(L"code", L"1", L"");
|
else if (str == L"now-30")
|
arg.AddArg(L"code", L"2", L"");
|
else if (str == L"now-60")
|
arg.AddArg(L"code", L"4", L"");
|
else if (str == L"now-180")
|
arg.AddArg(L"code", L"5", L"");
|
else
|
arg.AddArg(L"code", str, L"");
|
KXMLDOMDocument x;
|
if (xurl::get(this->GetServerUrl(),L"/sale/data/product/pref/report/initdate", arg.GetString(), x) != 1)
|
return L"";
|
KXMLDOMElement e = x.documentElement();
|
|
ret = (xstring)L"" + e.selectSingleNode(L"sDate").text();
|
}
|
else if (str == L"userid")
|
{
|
ret = publiccode::GetUser().id;
|
}
|
else if (str == L"userno")
|
{
|
ret = publiccode::GetUser().no;
|
}
|
else if (str == L"username")
|
{
|
ret = publiccode::GetUser().name;
|
}
|
return ret;
|
}
|
|
int SetSearchDefault(KXMLDOMElement e, int flag)
|
{
|
if (e.selectSingleNode(L"@default"))
|
{
|
bstring dstr = e.selectSingleNode(L"@default").text();
|
xstring d = GetSysDefault(dstr);
|
xcombobox xc = m_this->GetControl(L"_cb_grid_value1");
|
if (flag == 1 || flag == 3)
|
{
|
int h = xc.FindString(d);
|
if (h < 0) h = 0;
|
xc.SetCurSel( h);
|
}
|
else if (flag == 2) //ÈÕÆÚ
|
{
|
xc.SetText(d);
|
xcombobox xc2 = m_this->GetControl(L"_cb_grid_value2");
|
//xc2.SetText(GetSysDefault("now"));
|
}
|
else
|
{
|
xc.SetText(d);
|
}
|
}
|
return 1;
|
}
|
|
int ComboChange(int h)
|
{
|
string str = (string)dw_col.GetItemData(h);
|
//alert(str);
|
KXMLDOMDocument x;
|
int flag = 0;
|
if (x.loadXML(str))
|
{
|
//trace("299 ComboChange");
|
xstring xcText = L"";
|
xcontrol xc = m_this->GetControl(L"_cb_grid_value1");
|
if (xc)
|
xcText = xc.GetText();
|
xstring box = L"<hbox>";
|
KXMLDOMElement e = x.documentElement();
|
if (e.selectSingleNode(L"@editer"))
|
{
|
xstring edittype = e.selectSingleNode(L"@editer").text();
|
xstring tmp = L"";
|
if (edittype == L"ddlb") {
|
tmp = L"<xcombobox name='_cb_grid_value1'>";
|
tmp += EditCombo(e);
|
tmp += L"</xcombobox>";
|
flag = 1;
|
}
|
else if (edittype == L"date") {
|
//tmp += EditDate(e);
|
//tmp = "<xdatetimepick name='_cb_grid_value1'/><xlabel caption='~' width='8'/><xdatetimepick name='_cb_grid_value2'/>";
|
tmp = L"<xedit name='_cb_grid_value1' bind='_cb_grid_search'/><xlabel caption='~' width='8'/><xedit name='_cb_grid_value2' bind='_cb_grid_search'/>";
|
flag = 2;
|
}
|
else if (edittype == L"tree" || edittype == L"grid") {
|
tmp = L"<xcombobox name='_cb_grid_value1' bind='_cb_grid_search'>";
|
//tmp += EditTree(e);
|
tmp += L"</xcombobox>";
|
flag = 3;
|
}
|
else {
|
tmp = L"<xedit name='_cb_grid_value1' bind='_cb_grid_search'/>";
|
flag = 99;
|
}
|
box += tmp;
|
}
|
else if (e.selectSingleNode(L"@sheet"))
|
{
|
box += EditSheet(e);
|
}
|
else
|
{
|
box += L"<xedit name='_cb_grid_value1' bind='_cb_grid_search'/>";
|
flag = 99;
|
}
|
box += L"</hbox>";
|
//alert(box);
|
xnode anode = m_this->GetAgentNode(L"_cb_grid_value");
|
if (anode.getNativePointer() == 0) return -1;
|
|
SetAgentNodeContent(anode, box);
|
|
SetSearchDefault(e, flag);
|
|
if (xcText != L"")
|
{
|
xcontrol xc2 = m_this->GetControl(L"_cb_grid_value1");
|
if (xc2)
|
xc2.SetText(xcText);
|
}
|
//if(flag == 3)
|
// AttachEvent("_cb_grid_value1","CBN_DROPDOWN",OnDropDown); --> TO list
|
}
|
return flag;
|
}
|
|
int OnCombboChange(TEvent* evt, LPARAM lParam)
|
{
|
int h = dw_col.GetCurSel();
|
if (h < 0) return 0;
|
ComboChange(h);
|
return 1;
|
}
|
|
string searchcol(KXMLDOMElement e)
|
{
|
if (e.selectSingleNode(L"xml")) {
|
string colprop = e.selectSingleNode(L"xml").text();
|
//trace(colprop);
|
KXMLDOMDocument y;
|
y.loadXML(colprop);
|
//msxml::IXMLDOMElement prop= y.GetXmlDoc().selectSingleNode(L"cell/cellprop[1]");
|
KXMLDOMElement cellprop = y.documentElement();
|
if (cellprop.selectSingleNode(L"cellprop/@searchcolumn")) {
|
string searchcolumn = cellprop.selectSingleNode(L"cellprop/@searchcolumn").text();
|
return searchcolumn;
|
}
|
}
|
return L"ÊÇ";
|
}
|
|
int setSheetSearch(KXMLDOMDocument x)
|
{
|
KXMLDOMElement e = x.documentElement();
|
KXMLDOMElement ele = e.selectSingleNode(L"//row[@rowindex='3']");
|
KXMLDOMNodeList nlist = ele.selectNodes(L"cell");
|
int i = 0;
|
int s = nlist.length();
|
string agentstr = L"<vbox>";
|
int k = 0;
|
for (i = 0; i < s; i++)
|
{
|
KXMLDOMElement xitem = nlist.item(i);
|
//if(!xitem.selectSingleNode(L"text")) continue;
|
if (xitem.selectSingleNode(L"text")) {}
|
else continue;
|
//trace(xitem.text);
|
xstring colindex = xitem.selectSingleNode(L"@colindex").text();
|
//¿í¶È¡¶10²»ÏÔʾ£¿£¿ÒѾÓÐÁËÊÇ·ñÊDzéѯÁеÄÊôÐÔ£¬ÎªÊ²Ã´»¹ÒªÕâ¸ö£¿
|
//if(!e.selectSingleNode(L"//col/item[@colend='"+colindex+"']")) continue;
|
if (e.selectSingleNode(L"//col/item[@colend='" + colindex + L"']"))
|
{
|
KXMLDOMElement colwidth = e.selectSingleNode(L"//col/item[@colend='" + colindex + L"']");
|
xstring width = colwidth.selectSingleNode(L"@width").text();
|
if (width.toInt() < 10) continue;
|
}
|
//ÁÐ
|
//if(!e.selectSingleNode(L"//row[@rowindex='5']/cell[@colindex='"+colindex+"']")) continue;
|
if (e.selectSingleNode(L"//row[@rowindex='5']/cell[@colindex='" + colindex +L"']")) {}
|
else continue;
|
KXMLDOMElement colename = e.selectSingleNode(L"//row[@rowindex='5']/cell[@colindex='" + colindex + L"']");
|
//²éѯÁÐ
|
string searchcolumn = searchcol(colename);
|
if (searchcolumn == L"·ñ") continue;
|
//Ó¢ÎÄÃû
|
string ename = colename.selectSingleNode(L"@column").text();
|
//ÖÐÎÄÃû
|
string cname = L"";
|
if (xitem.selectSingleNode(L"text"))
|
cname = xitem.selectSingleNode(L"text").text();
|
|
KXMLDOMElement sheetEle = x.createElement(L"column");
|
sheetEle.setAttribute(L"name",ename);
|
sheetEle.setAttribute(L"cname", cname);
|
//ÓÐÊôÐÔ
|
if (colename.selectSingleNode(L"xml"))
|
{
|
string colprop = colename.selectSingleNode(L"xml").text();
|
//trace(colprop);
|
KXMLDOMDocument y;
|
y.loadXML(colprop);
|
//msxml::IXMLDOMElement prop= y.GetXmlDoc().selectSingleNode(L"cell/cellprop[1]");
|
KXMLDOMElement cellprop = y.documentElement();
|
//msxml::IXMLDOMElement prop ;
|
KXMLDOMElement n = cellprop.selectSingleNode(L"cellprop[1]");
|
sheetEle.setAttribute(L"sheet", n.xml());
|
}
|
if (cname != L"")
|
dw_col.AddItem(cname, sheetEle.xml());
|
}
|
return 1;
|
}
|
|
int rowSearch(string tpl)
|
{
|
//trace(m_configDoc.xml);
|
//if(!m_configDoc) return -1; //---
|
xnode anode = m_this->GetAgentNode(L"gridSearch");
|
if (!anode) return -1;
|
//string str = "<hbox><xcombobox name='_cb_grid_col' width='120'/><xspace width='5'/><vbox><xspace height='1'/><hbox height='19' name='_cb_grid_value'/></vbox><xspace width='5'/><hbox height='20' width='140'><xtoolbutton caption='²éÕÒ' name='_cb_grid_search' width='50' image='6,21'/><xtoolbutton caption='¸ß¼¶²éÕÒ' name='_cb_grid_search_ad' width='80' image='6,10'/></hbox></hbox>";
|
string str = L"<hbox><xcombobox name='_cb_grid_col' width='120'/><xspace width='5'/><vbox><xspace height='1' visible='unlayer'/><hbox height='19' name='_cb_grid_value'/></vbox><xspace width='5'/><xtoolbutton caption='²éÕÒ' name='_cb_grid_search' height='20' width='50' src='icons/find.png' image0='6,21'/><xtoolbutton caption='¸ß¼¶...' name='_cb_grid_search_ad' height='20' width='80' src='icons/trans.png' image0='6,10'/></hbox>";
|
SetAgentNodeContent(anode, str);
|
dw_col = m_this->GetControl(L"_cb_grid_col");
|
/*xcontrol xc= m_this.GetControl("_cb_grid_col");
|
dw_col = GetControlCombox("_cb_grid_col");
|
dw_col.setNativePointer(xc.ptr_native_);
|
int id = dw_col.ptr_native_;
|
trace("dw_col = %d",id); */
|
if (m_configDoc) {}
|
else return 1;
|
if (m_configDoc.selectSingleNode(L"Config/search"))
|
{
|
KXMLDOMNodeList nlist = m_configDoc.selectNodes(L"Config/search[1]/column");
|
int s = nlist.length();
|
if (s > 0)
|
{
|
int i = 0;
|
for (i = 0; i < s; i++)
|
{
|
KXMLDOMElement e = nlist.item(i);
|
if (e.selectSingleNode(L"@cname")) {}
|
else continue;
|
string name = e.selectSingleNode(L"@cname").text();
|
dw_col.AddItem(name, e.xml());
|
}
|
}
|
}
|
else
|
{
|
KXMLDOMDocument x;
|
int ret = getUrl(tpl, L"<args/>", x);
|
if (ret == 1 && x.xml() != L"")
|
{
|
setSheetSearch(x);
|
}
|
}
|
//AttachEvent("_cb_grid_col","CBN_SELCHANGE",OnCombboChange); //TO list
|
if (dw_col.GetCount() > 0)
|
{
|
dw_col.SetCurSel( 0);
|
ComboChange(0);
|
}
|
return 1;
|
}
|
string GridSearchEx()
|
{
|
//alert("ex");
|
int h = dw_col.GetCurSel();
|
if (h < 0) return L"";
|
string str = (string)dw_col.GetItemData(h);
|
KXMLDOMDocument x;
|
if (x.loadXML(str))
|
{
|
KXMLDOMElement e = x.documentElement();
|
xstring name = e.selectSingleNode(L"@name").text();
|
xstring cls = L"";// = "".space(256);
|
if (e.selectSingleNode(L"@editer"))
|
cls = e.selectSingleNode(L"@editer").text();
|
else if (e.selectSingleNode(L"@sheet"))
|
cls = e.selectSingleNode(L"@sheet").text();
|
xcombobox xc = m_this->GetControl(L"_cb_grid_value1");
|
xstring value = L"";
|
x.loadXML(L"<items join='and'/>");
|
e = x.documentElement();
|
KXMLDOMElement ele = x.createElement(L"item");
|
ele.setAttribute(L"name", name.c_str());
|
//if(cls == "ComboBox")
|
if (cls == L"ddlb" || cls == L"tree" || cls == L"grid")
|
{
|
value = xc.GetText();
|
value = (string)xc.GetItemData();
|
ele.setAttribute(L"op", L"like");
|
}
|
//else if(cls == "SysDateTimePick32")
|
else if (cls == L"date")
|
{
|
value = xc.GetText();
|
ele.setAttribute(L"op", L">=");
|
xcombobox xc2 = m_this->GetControl(L"_cb_grid_value2");
|
if (xc2.GetText() != L"")
|
{
|
KXMLDOMElement ele2 = x.createElement(L"item");
|
ele2.setAttribute(L"name", name.c_str());
|
ele2.setAttribute(L"op", L"<=");
|
ele2.setAttribute(L"value", (xc2.GetText() +L" 23:59:59").c_str());
|
e.appendChild(ele2);
|
}
|
}
|
else if (cls != L"")
|
{
|
value = xc.GetText();
|
KXMLDOMDocument x2;
|
if (x2.loadXML(cls))
|
{
|
KXMLDOMElement ele3 = x2.documentElement();
|
if (ele3.selectSingleNode(L"edit"))
|
{
|
KXMLDOMElement ed = ele3.selectSingleNode(L"edit");
|
if (ed.selectSingleNode(L"@edittype"))
|
{
|
string edittype = ed.selectSingleNode(L"@edittype").text();
|
if (edittype == L"ddlb")
|
{
|
value = (string)xc.GetItemData();
|
}
|
}
|
}
|
}
|
ele.setAttribute(L"op", L"like");
|
}
|
else
|
{
|
value = xc.GetText();
|
ele.setAttribute(L"op", L"like");
|
}
|
ele.setAttribute(L"value", value.c_str());
|
if (value != L"")
|
e.appendChild(ele);
|
return e.xml();
|
}
|
return L"";
|
}
|
};
|