#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) FCL : public listwin
|
{
|
public:
|
xcombobox ddlb_1;
|
int changeddlb;
|
xdwgrid dw_list;
|
int m_PageSize; //ÿҳÏÔʾÊýÁ¿
|
int m_PageIndex; //µÚ¼¸Ò³
|
xstring m_QueryTxt; //²éѯÌõ¼þ
|
xdwtable dw_base;
|
xnode m_agentNode; //Agent Condition
|
xstring m_agentCond; //Agent Node
|
xstring m_config;
|
xstring m_spec;
|
public:
|
FCL(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
|
public:
|
static FCL* CreateInstance(void* implPtr, void* hWnd)
|
{
|
FCL* pWin = new FCL(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()
|
{
|
xaserverarg arg;
|
|
xdwpages zz = GetControl(L"pages");
|
xml x;
|
|
getUrl(L"/sale/data/FCL/entity/list", arg.GetString(), x);
|
KXMLDOMElement e = x.documentElement();
|
if (e.selectSingleNode(L"@TotalPage"))
|
{
|
xstring s = e.selectSingleNode(L"@TotalPage").text(); //×ÜÊýÁ¿
|
zz.SetMaxPage(s.toInt());
|
}
|
dw_list.Retrieve(x);
|
dw_list.Redraw();
|
return 1;
|
}
|
int SetPriceBaseEmpty()
|
{
|
int rows = dw_base.GetColumnCount();
|
int i;
|
for (i = 1; i <= rows; i++)
|
{
|
dw_base.SetItemString(1, i, L"");
|
//dw_base.SetItemDisplayString(1,i,L"");
|
}
|
dw_base.ResetUpdateStatus();
|
dw_base.Redraw();
|
return 1;
|
}
|
int SetCellEdit(int row, xstring name, xstring value, xstring display)
|
{
|
dw_base.SetItemString(row, name.c_str(), value);
|
dw_base.Redraw();
|
if (display != L"")
|
{
|
dw_base.SetItemDisplayString(row, name.c_str(), display);
|
}
|
dw_base.AcceptText();
|
dw_base.ResetUpdateStatus();
|
dw_base.Redraw();
|
return 1;
|
}
|
int OnSetCTGValue(int row)
|
{
|
dw_base.AcceptText();
|
SetPriceBaseEmpty();
|
KXMLDOMElement e = dw_list.GetRowElement(row);
|
auto list = e.selectNodes(L"*");
|
if (list)
|
{
|
int s = list.length();
|
int i;
|
for (i = 0; i < s; i++)
|
{
|
xml x;
|
;
|
KXMLDOMElement xitem = list.item(i);
|
x.loadXML(xitem.xml());
|
//trace(xitem.xml);
|
KXMLDOMElement e1 = x.documentElement();
|
xstring name = e1.tagName();
|
trace(name);
|
trace(e1.text());
|
xstring display;
|
if (e1.selectSingleNode(L"@_displaystring"))
|
{
|
display = e1.selectSingleNode(L"@_displaystring").text();
|
SetCellEdit(1, name, e1.text(), L"" + display);
|
}
|
else
|
SetCellEdit(1, name, e1.text(), L"");
|
|
}
|
}
|
return 1;
|
}
|
int OnRowClicked(TEvent* evt, LPARAM p)
|
{
|
DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
|
int row = hdr.row;
|
OnSetCTGValue(row);
|
return 1;
|
}
|
int setMaint()
|
{
|
xml x;
|
|
dw_base.DwUpdateAllTo(x);
|
int row = dw_list.GetRow();
|
dw_list.SetItemString(row, L"PriceInfo", x.xml());
|
return 1;
|
}
|
int SetTotalAmount(int row, xstring name)
|
{
|
if (name == L"price20base" || name == L"price20BAF" || name == L"price20CAF" || name == L"price20add" || name == L"price20comm" || name == L"price20other")
|
{
|
double price20base = dw_base.GetItemString(row, L"price20base").toDouble();
|
double price20BAF = dw_base.GetItemString(row, L"price20BAF").toDouble();
|
double price20CAF = dw_base.GetItemString(row, L"price20CAF").toDouble();
|
double price20add = dw_base.GetItemString(row, L"price20add").toDouble();
|
double price20comm = dw_base.GetItemString(row, L"price20comm").toDouble();
|
double price20other = dw_base.GetItemString(row, L"price20other").toDouble();
|
double price20 = price20base + price20BAF + (price20CAF / 100) * price20base + price20add - (price20comm / 100) * price20base + price20other;
|
dw_base.SetItemString(1, L"price20", xstring(price20));
|
}
|
|
if (name == L"price40base" || name == L"price40BAF" || name == L"price40CAF" || name == L"price40add" || name == L"price40comm" || name == L"price40other")
|
{
|
double price40base = dw_base.GetItemString(row, L"price40base").toDouble();
|
double price40BAF = dw_base.GetItemString(row, L"price40BAF").toDouble();
|
double price40CAF = dw_base.GetItemString(row, L"price40CAF").toDouble();
|
double price40add = dw_base.GetItemString(row, L"price40add").toDouble();
|
double price40comm = dw_base.GetItemString(row, L"price40comm").toDouble();
|
double price40other = dw_base.GetItemString(row, L"price40other").toDouble();
|
double price40 = price40base + price40BAF + (price40CAF / 100) * price40base + price40add - (price40comm / 100) * price40base + price40other;
|
dw_base.SetItemString(1, L"price40", xstring(price40));
|
}
|
|
if (name == L"price40Hbase" || name == L"price40HBAF" || name == L"price40HCAF" || name == L"price40Hadd" || name == L"price40Hcomm" || name == L"price40Hother")
|
{
|
double price40Hbase = dw_base.GetItemString(row, L"price40Hbase").toDouble();
|
double price40HBAF = dw_base.GetItemString(row, L"price40HBAF").toDouble();
|
double price40HCAF = dw_base.GetItemString(row, L"price40HCAF").toDouble();
|
double price40Hadd = dw_base.GetItemString(row, L"price40Hadd").toDouble();
|
double price40Hcomm = dw_base.GetItemString(row, L"price40Hcomm").toDouble();
|
double price40Hother = dw_base.GetItemString(row, L"price40Hother").toDouble();
|
double price40H = price40Hbase + price40HBAF + (price40HCAF / 100) * price40Hbase + price40Hadd - (price40Hcomm / 100) * price40Hbase + price40Hother;
|
dw_base.SetItemString(1, L"price40h", xstring(price40H));
|
}
|
return 1;
|
}
|
int OnPriceBaseChanged(TEvent* evt, LPARAM p)
|
{
|
trace(L"123");
|
DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
|
xstring name = hdr.colname;
|
xstring value = hdr.data;
|
SetTotalAmount(1, name);
|
xstring price20 = dw_base.GetItemString(1, L"price20");
|
xstring price40 = dw_base.GetItemString(1, L"price40");
|
xstring price40h = dw_base.GetItemString(1, L"price40h");
|
dw_list.SetItemString(dw_list.GetRow(), L"price20", price20);
|
dw_list.SetItemString(dw_list.GetRow(), L"price40", price40);
|
dw_list.SetItemString(dw_list.GetRow(), L"price40h", price40h);
|
dw_list.Redraw();
|
setMaint();
|
return 1;
|
}
|
int OnListChanged(TEvent* evt, LPARAM p)
|
{
|
DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
|
int row = hdr.row;
|
xstring colname = hdr.colname;
|
xstring value = hdr.data;
|
if (colname == L"port")
|
{
|
xml x;
|
|
xaserverarg arg;
|
|
arg.AddArg(L"code", value);
|
if (getUrl(L"/sale/data/FCL/pref/shipthread", arg.GetString(), x) != 1)
|
{
|
trace(x.xml());
|
}
|
KXMLDOMElement e = x.documentElement();
|
dw_list.SetItemString(row, L"shipthread", e.text());
|
dw_list.Redraw();
|
}
|
|
|
return 1;
|
}
|
int OnChangePages(TEvent* evt, LPARAM p)
|
{
|
PAGENMHDR& h = *(PAGENMHDR*)evt->notify.pnmh;
|
int c = h.cur;
|
HCURSOR hCursor = xutil::SetCursorWait();
|
m_pageIndex = c;
|
OnRetrieve();
|
xutil::RestoreCursor(hCursor);
|
return 1;
|
}
|
int onSave()
|
{
|
xml x;
|
|
dw_list.DwUpdateAllToEx(x);
|
trace(x.xml());
|
return 1;
|
}
|
|
int OnAddrow()
|
{
|
int row = dw_list.InsertRow(0);
|
dw_list.SetItemString(row, L"modifieddate", publiccode::GetCurrentDate());
|
SetPriceBaseEmpty();
|
return 1;
|
}
|
int OnInsertRow()
|
{
|
int row = dw_list.GetRow();
|
if (row < 1) return 0;
|
int newrow = dw_list.InsertRow(row);
|
dw_list.SetItemString(newrow, L"modifieddate", publiccode::GetCurrentDate());
|
SetPriceBaseEmpty();
|
return 1;
|
}
|
|
int OnDeleteRow()
|
{
|
int row = dw_list.GetRow();
|
if (row > 0 && row <= dw_list.GetRowCount())
|
{
|
dw_list.DeleteRow(row);
|
//OnSetCTGValue(row);
|
}
|
return 1;
|
}
|
|
int OnCmdDispatch(xstring comdid)
|
{
|
if (comdid.find(L"add", 0) >= 0)
|
OnAddrow();
|
else if (comdid.find(L"insert", 0) >= 0)
|
OnInsertRow();
|
else if (comdid.find(L"del", 0) >= 0)
|
OnDeleteRow();
|
else if (comdid.find(L"save", 0) >= 0)
|
onSave();
|
return 1;
|
}
|
int OnSetFocus(TEvent* evt, LPARAM p) {
|
SetAgent();
|
return 1;
|
}
|
int OnXCommand(TEvent* evt, LPARAM param)
|
{
|
return OnCmdDispatch(evt->xcommand.pStrID);
|
}
|
int OnItemError(TEvent* evt, LPARAM p)
|
{
|
DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
|
xstring value = hdr.data;
|
int e = hdr.idFrom;
|
if (e == -1000)
|
alert(L"¡¾" + value + L"¡¿²»ÊÇÓÐЧµÄÊý×Ö!");
|
if (e == -1001)
|
alert(L"¡¾" + value + L"¡¿²»ÊÇÓÐЧµÄÊý×Ö!");
|
if (e == -1002)
|
alert(L"¡¾" + value + L"¡¿²»ÊÇÓÐЧµÄÈÕÆÚ!");
|
return 1;
|
}
|
int OnAttachEvent()
|
{
|
AttachEvent(L"WM_XCOMMAND", (FEvent)&FCL::OnXCommand);
|
AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&FCL::OnRowClicked);
|
AttachEvent(L"WM_SETFOCUS", (FEvent)&FCL::OnSetFocus);
|
AttachEvent(L"pages", L"PAGE_CLICK", (FEvent)&FCL::OnChangePages);
|
AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&FCL::OnPriceBaseChanged);
|
AttachEvent(L"dw_base", L"DWV_ITEMERROR", (FEvent)&FCL::OnItemError);
|
AttachEvent(L"dw_list", L"DWV_ITEMCHANGED", (FEvent)&FCL::OnListChanged);
|
return 1;
|
|
}
|
int OnInit()
|
{
|
dw_list = GetControl(L"dw_list");
|
dw_list.openUrl(L"/sale/view/FCL/template/FCL/List");
|
dw_base = GetControl(L"dw_base");
|
dw_base.openUrl(L"/sale/view/FCL/template/FCL/pricebase");
|
dw_list.SetReadOnlyColumn(L"shipthread", true);
|
dw_list.SetReadOnlyColumn(L"price20", true);
|
dw_list.SetReadOnlyColumn(L"price40", true);
|
dw_list.SetReadOnlyColumn(L"price40h", true);
|
return 1;
|
}
|
|
int onload()
|
{
|
m_PageSize = 30; //ÿҳÏÔʾÊýÁ¿
|
m_PageIndex = 1; //µÚ¼¸Ò³
|
m_QueryTxt = L""; //²éѯÌõ¼þ
|
OnInit();
|
OnAttachEvent();
|
OnRetrieve();
|
SetAgent();
|
return 1;
|
}
|
};
|