From 6e93e717799723de98287f5a036ab34367bd08cd Mon Sep 17 00:00:00 2001 From: xj qian <qianxj15@sina.com> Date: 星期五, 05 七月 2024 17:15:44 +0800 Subject: [PATCH] update some --- jrj/project/business/VATNotify/simple.maint.vatnotify.cpp | 882 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 882 insertions(+), 0 deletions(-) diff --git a/jrj/project/business/VATNotify/simple.maint.vatnotify.cpp b/jrj/project/business/VATNotify/simple.maint.vatnotify.cpp new file mode 100644 index 0000000..c137345 --- /dev/null +++ b/jrj/project/business/VATNotify/simple.maint.vatnotify.cpp @@ -0,0 +1,882 @@ +#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) simplemaintvatnotifyWin : public xframe + { + public: + xdwtable dw_profit; + xdwgrid dw_item; + xdwgrid dw_fob; + xstring InvNo; + xstring CurInvNo; + xnode m_agentNode; //Agent Condition + + public: + simplemaintvatnotifyWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} + public: + static simplemaintvatnotifyWin* CreateInstance(void* implPtr, void* hWnd) + { + simplemaintvatnotifyWin* pWin = new simplemaintvatnotifyWin(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; + } + + xstring GetEntityData(int pr) + { + xml x ; + dw_item.AcceptText(); + dw_item.DwUpdateAllToEx(x); + return x.xml(); + } + + //焦点激活处理函数 + int OnSetFocus(TEvent* evt, LPARAM param) + { + //重置工具条 + SetAgent(); + return 1; + } + + int OnPrint() + { + xaserverarg& arg = *new xaserverarg; + + arg.AddArg(L"EntityName", L"VATNotify"); + arg.AddArg(L"EntityID", L"", L""); + xstring InvoiceNo = dw_item.GetItemString(dw_item.GetRow(), L"NInvoiceNo"); + if (InvoiceNo == L"") InvoiceNo = dw_item.GetItemString(dw_item.GetRow(), L"InvoiceNo"); + xstring SupplierID = dw_item.GetItemString(dw_item.GetRow(), L"SupplierID"); + arg.AddArg(L"EntityNo", InvoiceNo, L""); + arg.AddArg(L"SupplierID", SupplierID); + arg.AddArg(L"VATNotifyID", L""); + + openUrl(L"/sale/view/view.base/xpage/Template/PrintViewEx", &arg); + return 1; + } + + int OnPrintItem() + { + xaserverarg& arg = *new xaserverarg; + + arg.AddArg(L"EntityName", L"VATNotify", L""); + arg.AddArg(L"EntityID", L"", L""); + xstring InvoiceNo = dw_item.GetItemString(dw_item.GetRow(), L"NInvoiceNo"); + if (InvoiceNo == L"") InvoiceNo = dw_item.GetItemString(dw_item.GetRow(), L"InvoiceNo"); + xstring SupplierID = dw_item.GetItemString(dw_item.GetRow(), L"SupplierID"); + arg.AddArg(L"EntityNo", InvoiceNo, L""); + arg.AddArg(L"SupplierID", SupplierID); + arg.AddArg(L"VATNotifyID", dw_item.GetGuid(dw_item.GetRow())); + trace(InvoiceNo + L"====L" + dw_item.GetGuid(dw_item.GetRow())); + + openUrl(L"/sale/view/view.base/xpage/Template/PrintViewEx", &arg); + return 1; + } + + int allbill() { + int MB_OKCANCEL = 1; + int IDOK = 1; + int ret =MessageBox(GetHWND(), L"全数开票?", L"提示", MB_OKCANCEL); + if (ret != IDOK) return 1; + dw_item.AcceptText(); + for (int ll_row = 1; ll_row <= dw_item.GetRowCount(); ll_row++) + { + xstring ls_dtlno = dw_item.GetItemString(ll_row, L"InvoiceNo"); + dw_item.SetItemString(ll_row, L"NInvoiceNo", ls_dtlno); + dw_item.SetItemString(ll_row, L"NAmount", dw_item.GetItemString(ll_row, L"Amount")); + xstring sdate = publiccode::GetCurrentDate(); + dw_item.SetItemString(ll_row, L"NotifyDate", sdate); + dw_item.ItemChangeTo(ll_row, L"NAmount", dw_item.GetItemString(ll_row, L"Amount")); + } + dw_item.Redraw(); + return 1; + } + + int allbillno() { + int MB_OKCANCEL = 1; + int IDOK = 1; + int ret =MessageBox(GetHWND(), L"全数不开票?", L"提示", MB_OKCANCEL); + if (ret != IDOK) return 1; + dw_item.AcceptText(); + for (int ll_row = 1; ll_row <= dw_item.GetRowCount(); ll_row++) + { + xstring ls_dtlno = dw_item.GetItemString(ll_row, L"InvoiceNo"); + dw_item.ItemChangeTo(ll_row, L"NAmount", dw_item.GetItemString(ll_row, L"")); + dw_item.ItemChangeTo(ll_row, L"NQuantity", dw_item.GetItemString(ll_row, L"")); + dw_item.SetItemString(ll_row, L"NQtyUnit", L""); + dw_item.SetItemString(ll_row, L"NotifyDate", L""); + dw_item.SetItemString(ll_row, L"NClassifyID", L""); + dw_item.SetItemDisplayString(ll_row, L"NClassifyID", L""); + dw_item.SetItemString(ll_row, L"NName", L""); + dw_item.SetItemString(ll_row, L"NInvoiceNo", L""); + } + dw_item.Redraw(); + return 1; + } + + int onebill() + { + int ll_row = dw_item.GetNextSelectRow(1); + if (ll_row < 1) return 1; + + int MB_OKCANCEL = 1; + int IDOK = 1; + int ret =MessageBox(GetHWND(), L"确认开票吗?", L"提示", MB_OKCANCEL); + if (ret != IDOK) return 1; + dw_item.AcceptText(); + + while (ll_row > 0 && ll_row <= dw_item.GetRowCount()) + { + xstring ls_dtlno = dw_item.GetItemString(ll_row, L"InvoiceNo"); + dw_item.SetItemString(ll_row, L"NInvoiceNo", ls_dtlno); + //dw_item.SetItemString(ll_row,L"NAmount",dw_item.GetItemString(ll_row,L"Amount")); + xstring sdate = publiccode::GetCurrentDate(); + dw_item.SetItemString(ll_row, L"NotifyDate", sdate); + dw_item.ItemChangeTo(ll_row, L"NAmount", dw_item.GetItemString(ll_row, L"Amount")); + ll_row = dw_item.GetNextSelectRow(ll_row + 1); + } + + dw_item.Redraw(); + return 1; + } + + int onebillno() { + int ll_row = dw_item.GetNextSelectRow(1); + if (ll_row < 1) return 1; + + int MB_OKCANCEL = 1; + int IDOK = 1; + int ret = MessageBox(GetHWND(), L"确认不予开票吗?", L"提示", MB_OKCANCEL); + if (ret != IDOK) return 1; + dw_item.AcceptText(); + + while (ll_row > 0 && ll_row <= dw_item.GetRowCount()) + { + xstring ls_dtlno = dw_item.GetItemString(ll_row, L"InvoiceNo"); + dw_item.ItemChangeTo(ll_row, L"NAmount", dw_item.GetItemString(ll_row, L"")); + dw_item.ItemChangeTo(ll_row, L"NQuantity", dw_item.GetItemString(ll_row, L"")); + dw_item.SetItemString(ll_row, L"NotifyDate", L""); + dw_item.SetItemString(ll_row, L"NClassifyID", L""); + dw_item.SetItemDisplayString(ll_row, L"NClassifyID", L""); + dw_item.SetItemString(ll_row, L"NQtyUnit", L""); + dw_item.SetItemString(ll_row, L"NName", L""); + dw_item.SetItemString(ll_row, L"NInvoiceNo", L""); + ll_row = dw_item.GetNextSelectRow(ll_row + 1); + } + dw_item.Redraw(); + return 1; + } + + int CalcRate() + { + for (int row = 1; row <= dw_fob.GetRowCount(); row++) + { + xstring InvoiceNo = dw_fob.GetItemString(row, L"InvoiceNo"); + xstring ClassifyID = dw_fob.GetItemString(row, L"ClassifyID"); + double sumAmt = GetSumAmount(InvoiceNo, ClassifyID); + double sumQty = GetSumQuantity(InvoiceNo, ClassifyID); + double fobAmt = dw_fob.GetItemDouble(row, L"FobAmt"); + double rate = sumAmt / fobAmt; + double LimitAmt = fobAmt * rate; + dw_fob.SetItemDouble(row, L"Rate", rate); + dw_fob.SetItemDouble(row, L"LimitAmt", LimitAmt); + dw_fob.SetItemDouble(row, L"RestAmt", LimitAmt - sumAmt); + } + RecalcProfitData(); + dw_fob.Redraw(); + + return 1; + } + + int onimport() { + //OpenWindow(L"dev:xpage[import.vatnotify.vx]",0); + return 1; + } + + int OnFobItemChanged(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"Rate" || colname == L"FobAmt") + { + xstring InvoiceNo = dw_fob.GetItemString(row, L"InvoiceNo"); + xstring ClassifyID = dw_fob.GetItemString(row, L"ClassifyID"); + double sumAmt = GetSumAmount(InvoiceNo, ClassifyID); + double sumQty = GetSumQuantity(InvoiceNo, ClassifyID); + double fobAmt = dw_fob.GetItemDouble(row, L"FobAmt"); + double rate = dw_fob.GetItemDouble(row, L"Rate"); + double LimitAmt = fobAmt * rate; + dw_fob.SetItemDouble(row, L"LimitAmt", LimitAmt); + dw_fob.SetItemDouble(row, L"RestAmt", LimitAmt - sumAmt); + dw_fob.Redraw(); + RecalcProfitData(); + return 1; + } + + 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; + xstring ClassifyID = dw_item.GetItemString(row, L"NClassifyID"); + if (ClassifyID == L"") ClassifyID = dw_item.GetItemString(row, L"ClassifyID"); + xstring InvoiceNo = dw_item.GetItemString(row, L"NInvoiceNo"); + if (InvoiceNo == L"") InvoiceNo = dw_item.GetItemString(row, L"InvoiceNo"); + int ll_find = FobLookup(ClassifyID); + + //trace(L"\r\n"+ ll_find.toString()+L":"+ ClassifyID); + + if (colname == L"NAmount") + { + if (ll_find > 0) + { + //xstring qtyUnit = dw_fob.GetItemString(ll_find,L"CQtyUnit"); + xstring qtyUnit = dw_fob.GetItemString(ll_find, L"QtyUnit"); + double limitAmt = dw_fob.GetItemDouble(ll_find, L"LimitAmt"); + double CQuantity = dw_fob.GetItemDouble(ll_find, L"CQuantity"); + double sumAmt = GetSumAmount(InvoiceNo, ClassifyID); + double amt = dw_item.GetItemDouble(row, L"NAmount"); + //double qty = CQuantity * amt /limitAmt; + double qty = dw_item.GetItemDouble(row, L"Quantity"); + if (qtyUnit.trim() != L"千克") + { + int d = xstring(qty).toInt(); + xstring s = xstring(d); + qty = s.toDouble(); + } + else + { + dw_item.SetItemDouble(row, L"NQuantity", qty); + xstring sqty = dw_item.GetItemString(row, L"NQuantity"); + qty = sqty.toDouble(); + } + double restAmt = limitAmt - sumAmt; + dw_fob.SetItemDouble(ll_find, L"RestAmt", restAmt); + dw_item.ItemChangeTo(row, L"NQuantity", xstring(qty)); + dw_fob.Redraw(); + } + return 1; + } + else if (colname == L"NQuantity") + { + if (ll_find > 0) + { + double CQuantity1 = dw_fob.GetItemDouble(ll_find, L"CQuantity"); + double sumQty = GetSumQuantity(InvoiceNo, ClassifyID); + double restQuantity = CQuantity1 - sumQty; + dw_fob.SetItemDouble(ll_find, L"RestQty", restQuantity); + + xstring qtyUnit2 = dw_fob.GetItemString(ll_find, L"QtyUnit"); + dw_item.SetItemString(row, L"NQtyUnit", qtyUnit2); + + dw_fob.Redraw(); + } + return 1; + } + else if (colname == L"NInvoiceNo") + { + row = dw_item.GetRow(); + InvoiceNo = dw_item.GetItemString(row, L"NInvoiceNo"); + if (InvoiceNo == L"") InvoiceNo = dw_item.GetItemString(row, L"InvoiceNo"); + RetrieveFob(InvoiceNo); + RetrieveProfit(InvoiceNo); + return 1; + } + else if (colname == L"NClassifyID") + { + xstring NQuantity = dw_item.GetItemString(dw_item.GetRow(), L"NQuantity"); + if (NQuantity != L"") dw_item.ItemChangeTo(dw_item.GetRow(), L"NQuantity", NQuantity); + xstring NAmount = dw_item.GetItemString(dw_item.GetRow(), L"NAmount"); + if (NAmount != L"") dw_item.ItemChangeTo(dw_item.GetRow(), L"NAmount", NAmount); + xstring sdate = publiccode::GetCurrentDate(); + dw_item.SetItemString(dw_item.GetRow(), L"NotifyDate", sdate); + + //xstring qtyUnit1 = dw_fob.GetItemString(ll_find,L"CQtyUnit"); + xstring qtyUnit1 = dw_fob.GetItemString(ll_find, L"QtyUnit"); + dw_item.SetItemString(dw_item.GetRow(), L"NQtyUnit", qtyUnit1); + dw_item.SetItemString(dw_item.GetRow(), L"VATRefundRate", dw_fob.GetItemString(ll_find, L"VATRefundRate")); + dw_item.Redraw(); + + return 1; + } + /* + if dwo.name='notifycname' then + if trim(data)='' then + this.setItem(row,'notifycustid','') + else + //cwd + if pos(data,'"') > 0 then + ll_find = dw_3.find(L"cname='"+data+L"'",0,dw_3.rowCount()) + else + ll_find = dw_3.find('cname=L"'+data+'"',0,dw_3.rowCount()) + end if + //end + // ll_find = dw_3.find('cname=L"'+data+'"',0,dw_3.rowCount()) + if ll_find > 0 then + this.setItem(row,'notifycustid',dw_3.getItemString(ll_find,'custid')) + this.setItem(row,'custunit',dw_3.getItemString(ll_find,'custunit')) + + decimal ld_rate + ls_custid = dw_3.getItemString(ll_find,'custid') + select retax into :ld_rate from code_t_custom where code_s = :ls_custid; + this.setitem(row,'retax',ld_rate) + end if + end if + if not isnull(this.getItemDecimal(row,'notifybuyamt')) then + dwoex = this.object.notifybuyamt + this.event itemchanged(row,dwoex,xstring(this.getItemDecimal(row,'notifybuyamt'))) + end if + if not isnull(this.getItemDecimal(row,'notifycustqty')) then + dwoex = this.object.notifycustqty + this.event itemchanged(row,dwoex,xstring(this.getItemDecimal(row,'notifycustqty'))) + end if + dw_1.setitem( dw_1.getrow(), 'notifydate',today()) + */ + return 1; + } + + double GetSumAmountExcept(xstring InvoiceNo, xstring ClassifyID, xstring InvoiceNoExcept) + { + xml x ; + + xaserverarg arg = ViewObject::MakeArg(); + arg.AddArg(L"ClassifyID", ClassifyID); + arg.AddArg(L"InvoiceNo", InvoiceNo); + arg.AddArg(L"InvoiceExcept", InvoiceNoExcept); + + if (xurl::get(L"/sale/data/VATNotify/entity/suminfo", arg.GetString(), x) != 1) + { + xstring error = x.text(); + alert(L"err:" + error); + return 0.0; + } + KXMLDOMNode n = x.selectSingleNode(L"data/Item/amt"); + if (!n) return 0.0; + xstring str = n.text(); + return str.toDouble(); + } + + double GetSumQuantityExcept(xstring InvoiceNo, xstring ClassifyID, xstring InvoiceNoExcept) + { + xml x ; + + xaserverarg arg = ViewObject::MakeArg(); + arg.AddArg(L"ClassifyID", ClassifyID); + arg.AddArg(L"InvoiceNo", InvoiceNo); + arg.AddArg(L"InvoiceExcept", InvoiceNoExcept); + + if (xurl::get(L"/sale/data/VATNotify/entity/suminfo", arg.GetString(), x) != 1) + { + xstring error = x.text(); + alert(L"err:" + error); + return 0.0; + } + KXMLDOMNode n = x.selectSingleNode(L"data/Item/qty"); + if (!n) return 0.0; + xstring str = n.text(); + return str.toDouble(); + } + + double GetSumAmount(xstring InvoiceNo, xstring ClassifyID) + { + double amt = 0; + xstring InvoiceNoExcept = dw_item.GetItemString(1, L"InvoiceNo"); + if (InvoiceNoExcept != L"") amt = GetSumAmountExcept(InvoiceNo, ClassifyID, InvoiceNoExcept); + + for (int ll_row = 1; ll_row <= dw_item.GetRowCount(); ll_row++) + { + xstring ls_dtlno = dw_item.GetItemString(ll_row, L"NInvoiceNo"); + if (ls_dtlno == L"") ls_dtlno = dw_item.GetItemString(ll_row, L"InvoiceNo"); + if (InvoiceNo == ls_dtlno) + { + xstring classifyID = dw_item.GetItemString(ll_row, L"NClassifyID"); + if (classifyID == L"") classifyID = dw_item.GetItemString(ll_row, L"ClassifyID"); + if (classifyID == ClassifyID) + amt += dw_item.GetItemDouble(ll_row, L"NAmount"); + } + } + return amt; + } + + int RecalcProfitData() + { + double fobAmt = GetSumFobAmt(); + double limitAmt = GetSumLimitAmount(); + double RefundAmt = GetSumRefund(); + double goodsAmt = limitAmt - RefundAmt; + double freight = dw_profit.GetItemDouble(1, L"Freight"); + double comm = dw_profit.GetItemDouble(1, L"Comm"); + double netAmount = fobAmt - freight - comm; + double exchCost = (limitAmt - RefundAmt) / fobAmt; + dw_profit.SetItemDouble(1, L"NetAmount", netAmount); + dw_profit.SetItemDouble(1, L"SaleAmount", fobAmt); + dw_profit.SetItemDouble(1, L"SaleCost", goodsAmt); + dw_profit.SetItemDouble(1, L"Drawback", RefundAmt); + dw_profit.SetItemDouble(1, L"ExchCost", exchCost); + dw_profit.Redraw(); + return 1; + } + double GetSumLimitAmount() + { + double amt = 0; + for (int ll_row = 1; ll_row <= dw_fob.GetRowCount(); ll_row++) + { + amt += dw_fob.GetItemDouble(ll_row, L"LimitAmt"); + } + return amt; + } + double GetSumRefund() + { + double amt = 0; + for (int ll_row = 1; ll_row <= dw_fob.GetRowCount(); ll_row++) + { + double rate = dw_fob.GetItemDouble(ll_row, L"VATRate"); + double refundRate = dw_fob.GetItemDouble(ll_row, L"VATRefundRate"); + double d = dw_fob.GetItemDouble(ll_row, L"LimitAmt"); + double val = d / (100.0 + rate) * refundRate; + amt += val; + } + return amt; + } + double GetSumFobAmt() + { + double amt = 0; + for (int ll_row = 1; ll_row <= dw_fob.GetRowCount(); ll_row++) + { + amt += dw_fob.GetItemDouble(ll_row, L"FobAmt"); + } + return amt; + } + + double GetSumQuantity(xstring InvoiceNo, xstring ClassifyID) + { + double qty = 0; + xstring InvoiceNoExcept = dw_item.GetItemString(1, L"InvoiceNo"); + if (InvoiceNoExcept != L"") qty = GetSumQuantityExcept(InvoiceNo, ClassifyID, InvoiceNoExcept); + + for (int ll_row = 1; ll_row <= dw_item.GetRowCount(); ll_row++) + { + xstring ls_dtlno = dw_item.GetItemString(ll_row, L"NInvoiceNo"); + if (ls_dtlno == L"") ls_dtlno = dw_item.GetItemString(ll_row, L"InvoiceNo"); + if (InvoiceNo == ls_dtlno) + { + xstring classifyID = dw_item.GetItemString(ll_row, L"NClassifyID"); + if (classifyID == L"") classifyID = dw_item.GetItemString(ll_row, L"ClassifyID"); + if (classifyID == ClassifyID) + { + qty += dw_item.GetItemDouble(ll_row, L"NQuantity"); + } + } + } + return qty; + } + + int FobLookup(xstring ClassifyID) + { + for (int ll_row = 1; ll_row <= dw_fob.GetRowCount(); ll_row++) + { + if (dw_fob.GetItemString(ll_row, L"ClassifyID") == ClassifyID) return ll_row; + } + return -1; + } + + int addother() { + return 1; + } + int deleteother() { + return 1; + } + //命令发布函数 + int OnCmdDispatch(xstring comdid) + { + if (comdid == L"save") { + return OnSave(); + } + else if (comdid == L"xmParse") + return OnParse(); + else if (comdid == L"allbill") { + return allbill(); + } + else if (comdid == L"allbillno") { + return allbillno(); + } + else if (comdid == L"onebill") { + return onebill(); + } + else if (comdid == L"onebillno") { + return onebillno(); + } + else if (comdid == L"import") { + return onimport(); + } + else if (comdid == L"addother") { + return addother(); + } + else if (comdid == L"deleteother") { + return deleteother(); + } + else if (comdid == L"xmPrint") { + return OnPrint(); + } + else if (comdid == L"xmPrintItem") { + return OnPrintItem(); + } + else if (comdid == L"xmCalcRate") { + return CalcRate(); + } + return 0; + } + + int OnRowChanged(TEvent* evt, LPARAM p) + { + DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; + int row = hdr.row; + + xstring InvoiceNo = dw_item.GetItemString(row, L"NInvoiceNo"); + if (InvoiceNo == L"") InvoiceNo = dw_item.GetItemString(row, L"InvoiceNo"); + if (InvoiceNo != CurInvNo) + { + CurInvNo = InvoiceNo; + RetrieveFob(InvoiceNo); + RetrieveProfit(InvoiceNo); + RecalcProfitData(); + } + + return 1; + } + + int OnParse() + { + xaserverarg arg; + + OpenWindow(L"dev:xpage[VATNotifyParse.vx]", arg); + if (arg.GetArgString(L"process") == L"ok") + { + int row = dw_item.GetRow(); + int row1 = dw_item.InsertRow(0); + dw_item.SetItemString(row1, L"SupplierID", dw_item.GetItemString(row, L"SupplierID")); + dw_item.SetItemDisplayString(row1, L"SupplierID", dw_item.GetItemDisplayString(row, L"SupplierID")); + dw_item.SetItemString(row1, L"Amount", arg.GetArgString(L"Amount")); + dw_item.SetItemString(row1, L"Quantity", arg.GetArgString(L"Quantity")); + dw_item.SetItemString(row1, L"CQuantity", arg.GetArgString(L"CustQuantity")); + dw_item.SetItemString(row1, L"ClassifyID", dw_item.GetItemString(row, L"ClassifyID")); + dw_item.SetItemDisplayString(row1, L"ClassifyID", dw_item.GetItemDisplayString(row, L"ClassifyID")); + } + return 1; + } + + //命令处理事件 + int OnXCommand(TEvent* evt, LPARAM param) + { + return OnCmdDispatch(evt->xcommand.pStrID); + } + + int OnSave() + { + xml x ; + + dw_item.AcceptText(); + dw_item.DwUpdateAllToEx(x); + xaserverarg arg = ViewObject::MakeArg(); + arg.AddArg(L"content", x.xml()); + + + + //trace(x.xml); + //return 1; + if (xurl::get(L"/sale/data/VATNotify/base/update", 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_item.ResetUpdateStatus(); + } + else + { + alert(L"保存失败1!"); + return 1; + } + + dw_fob.AcceptText(); + xml x1 ; + + dw_fob.DwUpdateAllToEx(x1); + arg.AddArg(L"content", x1.xml()); + int MB_OKCANCEL = 1; + int IDOK = 1; + + /* + for(int ll_row=1; ll_row <= dw_fob.GetRowCount(); ll_row++) + { + xstring RestQty = dw_fob.GetItemString(ll_row,L"RestQty"); + //xstring ClassifyID=dw_fob.GetItemString(ll_row,L"CName"); + if(RestQty !=L"0.00" ){ + //xstring qty =RestQty; + int ret = win32::MessageBox(GetHWND(),L" 存在结存数量不为0的物品,确认保存吗?",L"提示",MB_OKCANCEL); + if(ret !=IDOK) return 1; + } + } + */ + + + //return 0; + if (xurl::get(L"/sale/data/VATNotify/fob/update", arg.GetString(), x1) != 1) + { + xstring error1 = x1.text(); + alert(L"err:" + error1); + return 1; + } + str = x1.documentElement().getAttribute(L"text"); + if (str == L"true") + { + dw_fob.ResetUpdateStatus(); + alert(L"保存成功!"); + } + else + { + alert(L"保存失败2!"); + return 1; + } + return 1; + } + + int OnAttachEvent() + { + //绑定工具条点击事件 + AttachEvent(L"WM_XCOMMAND", (FEvent)&simplemaintvatnotifyWin::OnXCommand); + //获取焦点事件,用于重置工具条 + AttachEvent(L"WM_SETFOCUS", (FEvent)&simplemaintvatnotifyWin::OnSetFocus); + AttachEvent(L"dw_item", L"DWV_ITEMCHANGED", (FEvent)&simplemaintvatnotifyWin::OnItemChanged); + AttachEvent(L"dw_fob", L"DWV_ITEMCHANGED", (FEvent)&simplemaintvatnotifyWin::OnFobItemChanged); + AttachEvent(L"dw_item", L"DWV_ROWFOCUSCHANGED", (FEvent)&simplemaintvatnotifyWin::OnRowChanged); + AttachEvent(L"dw_item", L"DWV_ASKDATA", (FEvent)&simplemaintvatnotifyWin::OnAskDataItem); + AttachCloseWindow(); + return 1; + } + + int RetrieveFob(xstring InvoiceNo, bool start = false) + { + if (!start) + { + dw_fob.Filter(L"InvoiceNo", InvoiceNo); + dw_fob.Redraw(); + if (dw_fob.GetRowCount() > 0) return 1; + } + + //start = true; + xml x ; + + xaserverarg arg; + + arg.AddArg(L"invoiceno", InvoiceNo); + if (getUrl(L"/sale/data/VATNotify/entity/fob", arg.GetString(), x) != 1) + { + trace(x.text()); + return -1; + } + else + { + //trace(x.xml); + if (start) + { + dw_fob.Retrieve(x); + dw_fob.Redraw(); + } + else + { + xml x1 ; + + dw_fob.DwUpdateAllToEx(x1); + KXMLDOMElement docElement = x1.documentElement(); + if (docElement) + { + KXMLDOMNodeList lst = x.selectNodes(L"data/Item"); + int n = lst.length(); + for (int i = 0; i < n; i++) + { + KXMLDOMElement e = lst.item(i); + docElement.appendChild(e); + e.Release(); + } + docElement.Release(); + lst.Release(); + dw_fob.Retrieve(x1); + } + else + { + dw_fob.Retrieve(x); + } + dw_fob.Filter(L"InvoiceNo", InvoiceNo); + dw_fob.Redraw(); + } + } + return 1; + } + + int RetrieveProfit(xstring InvoiceNo) + { + xml x ; + + xaserverarg arg; + + arg.AddArg(L"invoiceno", InvoiceNo); + if (getUrl(L"/sale/data/VATNotify/entity/profit", arg.GetString(), x) != 1) + { + trace(x.text()); + return -1; + } + else + { + dw_profit.Retrieve(x); + dw_profit.Redraw(); + } + return 1; + } + + int OnRetrieve() + { + HCURSOR hCursor = xutil::SetCursorWait(); + + + xml x ; + + xaserverarg arg; + + + if (GetWinParam()) + { + int pArg = GetArg(); + + } + else + { + xutil::RestoreCursor(hCursor); + return 1; + } + if (getUrl(L"/sale/data/VATNotify/entity/base", arg.GetString(), x) != 1) + { + trace(x.text()); + xutil::RestoreCursor(hCursor); + return -1; + } + else + { + dw_item.Retrieve(x); + dw_item.Redraw(); + dw_item.SetSelectionMode(1); + } + if (dw_item.GetRowCount() > 0) + { + xstring InvoiceNo = dw_item.GetItemString(1, L"NInvoiceNo"); + if (InvoiceNo == L"") InvoiceNo = dw_item.GetItemString(1, L"InvoiceNo"); + CurInvNo = InvoiceNo; + RetrieveFob(InvoiceNo); + RetrieveProfit(InvoiceNo); + RecalcProfitData(); + } + + xutil::RestoreCursor(hCursor); + return 1; + } + + //base AskData + int OnAskDataItem(TEvent* evt, LPARAM p) + { + DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; + int row = hdr.row; + xstring x = hdr.colname; + if (x == L"userInvoiceNo") //下拉 + { + xstring sInvoiceNo = dw_item.GetItemString(row, L"NInvoiceNo"); + hdr.data = sInvoiceNo; + } + + return 1; + } + + int onload() + { + dw_item = GetControl(L"dw_item"); + dw_item.openUrl(L"/sale/view/VATNotify/template/VATNotify/item"); + dw_item.SetColumnState(L"InvoiceNo", false); + dw_item.SetColumnState(L"CName", false); + //dw_item.SetColumnState(L"CreatorID",false); + //dw_item.SetColumnState(L"CreateDate",false); + dw_item.SetColumnState(L"VATRate", false); + dw_item.SetColumnState(L"VATRefundRate", false); + dw_item.SetColumnState(L"IsFinish", false); + dw_item.SetColumnState(L"Type", false); + dw_item.SetColumnState(L"QtyUnitName", false); + dw_item.SetColumnState(L"QtyUnit", false); + dw_item.SetColumnState(L"CQtyUnit", false); + + dw_fob = GetControl(L"dw_fob"); + dw_fob.openUrl(L"/sale/view/VATNotify/template/VATNotify/fob"); + dw_profit = GetControl(L"dw_profit"); + dw_profit.openUrl(L"/sale/view/VATNotify/template/VATNotify/profit"); + dw_profit.SetColHeaderHeight(0); + dw_profit.SetRowSelectorWidth(0); + dw_profit.SetHScrollState(false); + dw_profit.SetVScrollState(false); + + InvNo = L""; + CurInvNo = L""; + xaserverarg arg; + + + if (GetWinParam()) + { + int pArg = GetArg(); + + InvNo = arg.GetArgString(L"invoiceno"); + SetWindowText(GetHWND(), InvNo); + } + CurInvNo = InvNo; + + OnRetrieve(); + OnAttachEvent(); + + return 1; + } + + int onloaded() + { + SetAgent(); + + return 1; + } + }; -- Gitblit v1.9.3