#include <wobject/xstring.hpp>
|
#include <xcontrol/xtreeview.hpp>
|
#include <xcontrol/xdwgrid.hpp>
|
|
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
|
#include "viewobject/view.base.hpp"
|
|
using xml = KXMLDOMDocument;
|
class __declspec(dllexport) ExchangeSignFastWin : public xframe
|
{
|
public:
|
xdwgrid dw_unexch;
|
xdwgrid dw_list;
|
xdwgrid dw_obj;
|
xdwtable dw_arg;
|
|
xnode m_agentNode; //Agent Condition
|
|
public:
|
ExchangeSignFastWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
|
public:
|
static ExchangeSignFastWin* CreateInstance(void* implPtr, void* hWnd)
|
{
|
ExchangeSignFastWin* pWin = new ExchangeSignFastWin(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;
|
}
|
|
bool IsNoEmptyValue(xstring val)
|
{
|
if (val != L"" && val != L".00" && val != L"0.00" && val != L"-0.00") return true;
|
return false;
|
}
|
|
int OnSave()
|
{
|
for (int row = dw_list.GetRowCount(); row >= 1; row--)
|
{
|
if (dw_list.GetItemDouble(row, L"ExchAmt") != 0.0) continue;
|
if (dw_list.GetItemDouble(row, L"BankDeduction") != 0.0) continue;
|
if (dw_list.GetItemDouble(row, L"ForeignBankDeduction") != 0.0)continue;
|
dw_list.DeleteRow(row);
|
dw_list.Redraw();
|
}
|
xml x;
|
|
dw_list.AcceptText();
|
dw_list.DwUpdateAllToEx(x);
|
|
//trace(x.xml());
|
xml x0 ;
|
x0.loadXML(L"<data/>");
|
|
KXMLDOMNodeList t = x.selectNodes(L"data/Item[@update.modify or @update.delete]");
|
KXMLDOMElement e1 = x0.documentElement();
|
int len = t.length();
|
for (int i = 0; i < len; i++)
|
{
|
e1.appendChild(t.item(i));
|
}
|
xaserverarg arg ;
|
arg.AddArg(L"content", x0.xml());
|
|
if (xurl::get(L"/sale/data/AR/update/item", arg.GetString(), x) != 1)
|
{
|
xstring error = x.text();
|
alert(L"err:" + error);
|
return 1;
|
}
|
xstring str = x.documentElement().getAttribute(L"text");
|
if (str == L"true")
|
{
|
dw_list.ResetUpdateStatus();
|
alert(L"±£´æ³É¹¦!");
|
}
|
else
|
{
|
alert(L"±£´æÊ§°Ü!");
|
}
|
|
return 1;
|
}
|
|
//ÃüÁî·¢²¼º¯Êý
|
int OnCmdDispatch(xstring comdid)
|
{
|
if (comdid == L"xmSave")
|
{
|
return OnSave();
|
}
|
else if (comdid == L"xmClose")
|
{
|
CloseWindow();
|
return 1;
|
}
|
else if (comdid == L"xmSearch")
|
{
|
return OnRetrieve(0);
|
}
|
return 0;
|
}
|
|
int OnCombboChanged(TEvent* evt, int lParam)
|
{
|
xstring id = L"";
|
xstring name = L"";
|
int h = xcombobox::GetCurSel(evt->command.hCtrl);
|
if (h > -1)
|
{
|
xstring txt = xcombobox::GetLBText(evt->command.hCtrl, h);
|
if (txt == L"ÏÞ¶¨¿Í»§")
|
{
|
OnRetrieve(1);
|
}
|
else if (txt == L"²»ÏÞ¶¨¿Í»§")
|
{
|
OnRetrieve(0);
|
}
|
}
|
return 1;
|
}
|
|
int OnDoubleClicked(TEvent* evt, int p)
|
{
|
dw_unexch.AcceptText();
|
int row = dw_unexch.GetRow();
|
|
HCURSOR hCursor = xutil::SetCursorWait();
|
double AdjustAmount = dw_unexch.GetItemDouble(row, L"AdjustAmount");//µ÷ÕûÊý
|
double amted = dw_unexch.GetItemDouble(row, L"ʵÊÕ»ã½ð¶î");//Íù´Î
|
double samt = dw_unexch.GetItemDouble(row, L"Ó¦ÊÕ»ã½ð¶î");//Ó¦ÊÕ»ã½ð¶î
|
double amt = samt - amted - AdjustAmount;
|
if (dw_obj)
|
{
|
xstring val = dw_unexch.GetItemDouble(row, L"ExchAmt");
|
if (IsNoEmptyValue(val))
|
{
|
dw_unexch.ItemChangeTo(row, L"ExchAmt", L"");
|
}
|
double amt1 = dw_obj.GetItemDouble(dw_obj.GetRow(), L"BalanceAmt");
|
|
int v1 = (amt * 100.0).toString().toInt();
|
int v2 = (amt1 * 100.0).toString().toInt();
|
if (v2 > v1)
|
{
|
dw_unexch.ItemChangeTo(row, L"Amount", xstring(amt));
|
//dw_unexch.ItemChangeTo(row,L"ExchAmt",amt.toString());
|
}
|
else
|
{
|
dw_unexch.ItemChangeTo(row, L"Amount", dw_obj.GetItemString(dw_obj.GetRow(), L"BalanceAmt"));
|
//dw_unexch.ItemChangeTo(row,L"ExchAmt",dw_obj.GetItemString(dw_obj.GetRow(),L"BalanceAmt"));
|
}
|
}
|
else
|
{
|
//dw_unexch.ItemChangeTo(row,L"ExchAmt",amt.toString());
|
dw_unexch.ItemChangeTo(row, L"Amount", xstring(amt));
|
}
|
dw_unexch.Redraw();
|
xutil::RestoreCursor(hCursor);
|
return 1;
|
}
|
|
int evalExchAmt()
|
{
|
double amt = 0;
|
xstring currencyCode = dw_obj.GetItemString(dw_obj.GetRow(), L"CurrencyCode");
|
for (int i = 1; i <= dw_list.GetRowCount(); i++)
|
{
|
double amt0 = dw_list.GetItemDouble(i, L"Amount");
|
xstring currencyCode1 = dw_list.GetItemString(i, L"CurrencyCode");
|
if (currencyCode == L"CNY" || currencyCode == L"RMB")
|
{
|
if (currencyCode1 == L"USD") amt0 = amt0 * dw_list.GetItemDouble(i, L"ExchRate");
|
}
|
amt += amt0;
|
//amt += dw_list.GetItemDouble(i,L"BankDeduction");
|
//amt += dw_list.GetItemDouble(i,L"ForeignBankDeduction");
|
}
|
if (dw_obj)
|
{
|
dw_obj.SetItemDouble(dw_obj.GetRow(), L"SignAmt", amt);
|
double amt1 = dw_obj.GetItemDouble(dw_obj.GetRow(), L"Amount");
|
double BalanceAmt = amt1 - amt;
|
dw_obj.SetItemDouble(dw_obj.GetRow(), L"BalanceAmt", BalanceAmt);
|
dw_obj.Redraw();
|
}
|
return 1;
|
}
|
|
//ÃüÁî´¦Àíʼþ
|
int OnXCommand(TEvent* evt, LPARAM param)
|
{
|
return OnCmdDispatch(evt->xcommand.pStrID);
|
}
|
|
int Found(xstring InvoiceNo)
|
{
|
for (int row = 1; row <= dw_list.GetRowCount(); row++)
|
{
|
if (dw_list.GetItemString(row, L"InvoiceNo") == InvoiceNo) return row;
|
}
|
return 0;
|
}
|
|
int ChangedListData(xstring colname, int row, xstring value)
|
{
|
if (colname == L"ExchRate" || colname == L"AcctAmount" || colname == L"CustomerCapitalExpense" || colname == L"BankRMBDeduction" || colname == L"Amount" || colname == L"ExchAmt" || colname == L"BankDeduction" || colname == L"ForeignBankDeduction")
|
{
|
int crow = Found(dw_unexch.GetItemString(row, L"InvoiceNo"));
|
if (crow < 1)
|
{
|
crow = dw_list.InsertRow(0);
|
dw_list.SetItemString(crow, L"InvoiceNo", dw_unexch.GetItemString(row, L"InvoiceNo"));
|
dw_list.SetItemString(crow, L"SEItemID", publiccode::GetGuid());
|
if (dw_obj)
|
{
|
if (dw_obj.GetRowCount() > 0)
|
dw_list.SetItemString(crow, L"SEID", dw_obj.GetGuid(dw_obj.GetRow()));
|
}
|
dw_list.SetItemString(crow, colname, value);
|
}
|
else
|
{
|
dw_list.SetItemString(crow, colname, value);
|
}
|
dw_list.Redraw();
|
evalExchAmt();
|
}
|
return 1;
|
}
|
|
int OnItemChanged(TEvent* evt, LPARAM p)
|
{
|
DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
|
xstring colname = hdr.colname;
|
xstring value = hdr.data;
|
int row = hdr.row;
|
|
if (colname == L"ExchRate" || colname == L"BankDeduction" || colname == L"BankRMBDeduction" || colname == L"ForeignBankDeduction" || colname == L"ExchAmt" || colname == L"Amount" || colname == L"CustomerCapitalExpense") {
|
double ExchAmt = dw_unexch.GetItemDouble(row, L"ExchAmt");
|
double Amt = dw_unexch.GetItemDouble(row, L"Amount");
|
double BankDeduction = dw_unexch.GetItemDouble(row, L"BankDeduction");
|
double ForeignBankDeduction = dw_unexch.GetItemDouble(row, L"ForeignBankDeduction");
|
double CustomerCapitalExpense = dw_unexch.GetItemDouble(row, L"CustomerCapitalExpense");
|
if (colname == L"BankDeduction" || colname == L"ForeignBankDeduction" || colname == L"ExchAmt" || colname == L"CustomerCapitalExpense")
|
{
|
dw_unexch.SetItemDouble(row, L"ExchAmt", Amt + BankDeduction + ForeignBankDeduction + CustomerCapitalExpense);
|
ChangedListData(L"ExchAmt", row, dw_unexch.GetItemString(row, L"ExchAmt"));
|
}
|
if (colname == L"Amount")
|
{
|
dw_unexch.SetItemDouble(row, L"ExchAmt", Amt + BankDeduction + ForeignBankDeduction + CustomerCapitalExpense);
|
ChangedListData(L"ExchAmt", row, dw_unexch.GetItemString(row, L"ExchAmt"));
|
}
|
|
Amt = dw_unexch.GetItemDouble(row, L"Amount");
|
double exchRate = dw_unexch.GetItemDouble(row, L"ExchRate");
|
double rmbDeduction = dw_unexch.GetItemDouble(row, L"BankRMBDeduction");
|
dw_unexch.ItemChangeTo(row, L"AcctAmount", xstring((Amt * exchRate /*- rmbDeduction*/)));
|
|
//cala balance
|
double ttlamt = dw_unexch.GetItemDouble(row, L"Ó¦ÊÕ»ã½ð¶î");
|
double AdjustAmount = dw_unexch.GetItemDouble(row, L"AdjustAmount");
|
ExchAmt = dw_unexch.GetItemDouble(row, L"ExchAmt");
|
double ExchAmted = dw_unexch.GetItemDouble(row, L"ʵÊÕ»ã½ð¶î");
|
dw_unexch.SetItemDouble(row, L"δÊÕ»ã½ð¶î", ttlamt - AdjustAmount - ExchAmt - ExchAmted);
|
|
dw_unexch.Redraw();
|
}
|
ChangedListData(colname, row, value);
|
|
return 1;
|
|
}
|
|
int OnAttachEvent()
|
{
|
//°ó¶¨¹¤¾ßÌõµã»÷ʼþ
|
AttachEvent(L"WM_XCOMMAND", (FEvent)&ExchangeSignFastWin::OnXCommand);
|
//»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ
|
//AttachEvent(L"WM_SETFOCUS",OnSetFocus);
|
AttachEvent(L"dw_unexch", L"DWV_DOUBLECLICKED", (FEvent)&ExchangeSignFastWin::OnDoubleClicked);//ÐÐË«»÷
|
AttachEvent(L"cbx_customer", L"CBN_SELCHANGE", (FEvent)&ExchangeSignFastWin::OnCombboChanged);//ÊôÐÔ×éÇл»listÖÐÁеÄÊýÁ¿±ä»¯
|
AttachEvent(L"dw_unexch", L"DWV_ITEMCHANGED", (FEvent)&ExchangeSignFastWin::OnItemChanged);
|
return 1;
|
|
}
|
|
xstring GetQueryArg()
|
{
|
dw_arg.AcceptText();
|
xml x;
|
|
dw_arg.DwUpdateAllTo(x);
|
return x.xml();
|
}
|
|
int OnRetrieve(int customer = 1)
|
{
|
HCURSOR hCursor = xutil::SetCursorWait();
|
xml x;
|
|
xaserverarg arg ;
|
arg.setNativePointer(arg.CreateInstance());
|
int row = dw_obj.GetRow();
|
if (row < 1) return 1;
|
xstring CustomerID = dw_obj.GetItemString(row, L"CustomerID");
|
//alert(CustomerID);
|
xstring SEID = dw_obj.GetGuid(dw_obj.GetRow());
|
|
trace(L"+++L" + CustomerID + L"+++L" + SEID);
|
|
arg.AddArg(L"CustomerID", CustomerID);
|
arg.AddArg(L"SEID", SEID);
|
|
xstring path = L"/sale/data/AR/item/noexch/listwithcustomer";
|
if (customer == 0) path = L"/sale/data/AR/item/noexch/list";
|
|
xstring path1 = L"/sale/data/AR/item/exch/listwithcustomer";
|
if (customer == 0) path1 = L"/sale/data/AR/item/exch/list";
|
|
arg.AddArg(L"QueryTxt", xcontrol(GetControl(L"sle_search")).GetText());
|
arg.AddArg(L"QueryArg", GetQueryArg());
|
trace(L"SEID+++L" + SEID + L"+++QueryTxt+++L" + xcontrol(GetControl(L"sle_search")).GetText() + L"+++QueryArg+++L" + GetQueryArg());
|
if (getUrl(path, arg.GetString(), x) != 1)
|
{
|
trace(L"´íÎóÐÅÏ¢1=L" + xstring(x.text()));
|
xutil::RestoreCursor(hCursor);
|
return -1;
|
}
|
else
|
{
|
dw_unexch.Retrieve(x);
|
dw_unexch.Redraw();
|
}
|
|
//trace(x.xml());
|
if (getUrl(path1, arg.GetString(), x) != 1)
|
{
|
trace(L"´íÎóÐÅÏ¢2=L" + xstring(x.text()));
|
xutil::RestoreCursor(hCursor);
|
return -1;
|
}
|
else
|
{
|
dw_list.Retrieve(x);
|
dw_list.Redraw();
|
dw_list.SetReadOnly(true);
|
}
|
xutil::RestoreCursor(hCursor);
|
return 1;
|
}
|
|
int onload()
|
{
|
SetArg();
|
dw_list = GetControl(L"dw_list");
|
dw_list.openUrl(L"/sale/view/AR/template/unexch");
|
dw_unexch = GetControl(L"dw_unexch");
|
dw_unexch.openUrl(L"/sale/view/AR/template/unexch");
|
|
|
dw_list.SetColumnState(L"SEID", false);
|
dw_list.SetColumnState(L"SEItemID", false);
|
|
dw_unexch.SetColumnState(L"SEID", false);
|
dw_unexch.SetColumnState(L"SEItemID", false);
|
|
dw_arg = GetControl(L"dw_arg");
|
dw_arg.openUrl(L"/sale/view/AR/template/queryarg");
|
dw_arg.SetColHeaderHeight(0);
|
dw_arg.SetRowSelectorWidth(0);
|
dw_arg.SetHScrollState(false);
|
dw_arg.SetVScrollState(false);
|
//dw_arg.SetItemString(1,L"DateType",L"±¾Äê");
|
|
/*xaserverarg arg = GetParam();
|
xstring CustomerIDOne = arg.GetArgString(L"CustomerID");
|
xstring SEIDOne = arg.GetArgString(L"SEID");*/
|
if (GetWinParam())dw_obj = GetParam();
|
OnAttachEvent();
|
|
return 1;
|
}
|
|
int onloaded()
|
{
|
//SetAgent();
|
if (dw_obj)OnRetrieve(1);
|
|
|
return 1;
|
}
|
};
|