#include <wobject/xstring.hpp> 
 | 
#include <xcontrol/xtreeview.hpp> 
 | 
#include <xcontrol/xdwgrid.hpp> 
 | 
#include <xcontrol/xcell.hpp> 
 | 
#include <adt/xarray.hpp> 
 | 
  
 | 
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" 
 | 
#include "viewobject/view.base.hpp" 
 | 
  
 | 
using xml = KXMLDOMDocument; 
 | 
    class __declspec(dllexport) ExchangeFileView : public xframe 
 | 
    { 
 | 
    public: 
 | 
        xcell    dw_exchangefile; 
 | 
        xdwtable dw_arg; 
 | 
        xdwgrid dw_exch; 
 | 
        xstring filename; 
 | 
        xnode    m_agentNode;    //Agent Condition 
 | 
  
 | 
    public: 
 | 
        ExchangeFileView(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} 
 | 
    public: 
 | 
        static ExchangeFileView* CreateInstance(void* implPtr, void* hWnd) 
 | 
        { 
 | 
            ExchangeFileView* pWin = new ExchangeFileView(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 OnCellClicked(TEvent* evt, LPARAM p) 
 | 
        { 
 | 
            DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; 
 | 
            //if(hdr.col ==1)hdr.idFrom = -1; 
 | 
            //if(hdr.col ==2)hdr.idFrom = -1; 
 | 
            if (hdr.row == 1)hdr.idFrom = -1; 
 | 
            return 2; 
 | 
        } 
 | 
  
 | 
        int OnValid() 
 | 
        { 
 | 
            int row = dw_exchangefile.GetValidRow(); 
 | 
            int col = dw_exchangefile.GetValidCol(); 
 | 
            for (int i = 2; i < row; i++) 
 | 
            { 
 | 
  
 | 
            } 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        int OnCellItemChanged(TEvent* evt, LPARAM p) 
 | 
        { 
 | 
            DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; 
 | 
            /*int currentrow; 
 | 
            int currentcol; 
 | 
            const xstring data; 
 | 
            int anchorrow; 
 | 
            int anchorcol;*/ 
 | 
            if (hdr.col == 1 && hdr.data != L"") 
 | 
            { 
 | 
                //dw_exchangefile.SetItemString(hdr.currentrow,hdr.currentcol, L""); 
 | 
            } 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        //½¹µã¼¤»î´¦Àíº¯Êý 
 | 
        int OnSetFocus(TEvent* evt, LPARAM param) 
 | 
        { 
 | 
            //ÖØÖù¤¾ßÌõ 
 | 
            SetAgent(); 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        int OnDeleteRow() 
 | 
        { 
 | 
            dw_exch.DeleteRow(0); 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        int OnInsertRow() 
 | 
        { 
 | 
            int row = dw_exch.InsertRow(0); 
 | 
            xstring sdate = publiccode::GetCurrentDate(); 
 | 
            dw_exch.SetItemString(row, L"CreateDate", sdate); 
 | 
            dw_exch.SetItemString(row, L"SEDate", sdate); 
 | 
            dw_exch.SetItemString(row, L"CurrencyCode", L"USD"); 
 | 
            xstring suserid = publiccode::GetUser().id; 
 | 
            xstring susername = publiccode::GetUser().name; 
 | 
            dw_exch.SetItemString(row, L"CreatorID", suserid); 
 | 
            dw_exch.SetItemDisplayString(row, L"CreatorID", susername); 
 | 
  
 | 
            if (row > 1) 
 | 
            { 
 | 
                xstring exchrate = dw_exch.GetItemString(row - 1, L"ExchRate"); 
 | 
                if (exchrate != L"") dw_exch.SetItemString(row, L"ExchRate", exchrate); 
 | 
            } 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
  
 | 
        int OnTran() 
 | 
        { 
 | 
            //get head 
 | 
            xstring head = L""; 
 | 
            xstring val = L""; 
 | 
            int cols = dw_exchangefile.GetValidCol(1); 
 | 
            for (int col = 1; col <= cols; ++col) 
 | 
            { 
 | 
                val = dw_exchangefile.GetItemString(1, col); 
 | 
                val = val.trim(); 
 | 
                if (val == L"")continue; 
 | 
                if (val.find(L"(") >= 0) val = val.left(val.find(L"(")); 
 | 
                if (val.find(L"£¨") >= 0) val = val.left(val.find(L"£¨")); 
 | 
                if (val.find(L"[") >= 0) val = val.left(val.find(L"[")); 
 | 
                if (val.find(L"¡¾") >= 0) val = val.left(val.find(L"¡¾")); 
 | 
                if (val.find(L"/") >= 0) val = val.left(val.find(L"/")); 
 | 
                if (val.find(L"\r") >= 0) val = val.left(val.find(L"\r")); 
 | 
                if (val.find(L"\n") >= 0) val = val.left(val.find(L"\n")); 
 | 
                if (head == L"") head = val; else head += L"," + val; 
 | 
            } 
 | 
  
 | 
            xml x; 
 | 
             
 | 
            xaserverarg arg ; 
 | 
            arg.AddArg(L"head", head); 
 | 
            //alert(head); 
 | 
            if (getUrl(L"/sale/data/AR/match/bank", arg.GetString(), x) != 1)return 1; 
 | 
            KXMLDOMNode n = x.selectSingleNode(L"data/Bank"); 
 | 
            if (!n) 
 | 
            { 
 | 
                alert(L"δƥÅäµ½ºÏÊʵÄÒøÐУ¬ÇëÏÈÅäÖÃÊý¾Ýת»»ÐÅÏ¢"); 
 | 
                return 1; 
 | 
            } 
 | 
  
 | 
            KXMLDOMNodeList items = n.selectNodes(L"Item"); 
 | 
            int len = items.length(); 
 | 
            xarray<int> indexs; 
 | 
            xarray<xstring> columns; 
 | 
            xstring bank = n.selectSingleNode(L"@name").text(); 
 | 
            for (int i = 0; i < len; i++) 
 | 
            { 
 | 
                KXMLDOMElement e = items.item(i); 
 | 
                xstring str = e.getAttribute(L"index"); 
 | 
                indexs.push_back(str.toInt()); 
 | 
                columns.push_back(e.selectSingleNode(L"DataColumn").text()); 
 | 
            } 
 | 
  
 | 
            if (MessageBox(GetHWND(), L"ÊÇ·ñÔØÈë" + bank + L"½á»ãÊý¾Ý!", L"Ìáʾ", 1) == 2)  return 1; 
 | 
  
 | 
            SwitchLayer(L"sheet2", L"frame"); 
 | 
            //set bank account 
 | 
            xml xb = ViewObject::RetrieveData(L"/sale/data/AR/tran/bank/info", L"bank", bank); 
 | 
            if (xb) 
 | 
            { 
 | 
                KXMLDOMNode nt = xb.selectSingleNode(L"/data/Item/Account"); 
 | 
                if (nt) 
 | 
                { 
 | 
                    dw_arg.SetItemString(1, L"Bank", nt.text()); 
 | 
                    if (nt.selectSingleNode(L"@_displaystring")) 
 | 
                        dw_arg.SetItemDisplayString(1, L"Bank", nt.selectSingleNode(L"@_displaystring").text()); 
 | 
                } 
 | 
  
 | 
            } 
 | 
  
 | 
            //clear data 
 | 
            for (int m = dw_exch.GetRowCount(); m > 0; m--)    dw_exch.DeleteRow(m); 
 | 
  
 | 
  
 | 
            //¶ÁÈ¡¿Í»§×ª»»ÐÅÏ¢ 
 | 
            xml xc; 
 | 
             
 | 
            if (getUrl(L"/sale/data/AR/tran/customer", L"", xc) != 1) 
 | 
            { 
 | 
                trace(xc.text()); 
 | 
                return -1; 
 | 
            } 
 | 
  
 | 
            HCURSOR  hCursor = xutil::SetCursorWait(); 
 | 
            KXMLDOMDocument xdoc = xc; 
 | 
  
 | 
            int rows = dw_exchangefile.GetValidRow(); 
 | 
            for (int row = 2; row <= rows; ++row) 
 | 
            { 
 | 
                val = dw_exchangefile.GetItemString(row, indexs.item(0)); 
 | 
                if (val.trim() == L"") continue; 
 | 
                int curRow = dw_exch.InsertRow(0); 
 | 
  
 | 
                //init 
 | 
                xstring sdate = publiccode::GetCurrentDate(); 
 | 
                dw_exch.SetItemString(curRow, L"CreateDate", sdate); 
 | 
                dw_exch.SetItemString(curRow, L"SEDate", sdate); 
 | 
                xstring suserid = publiccode::GetUser().id; 
 | 
                xstring susername = publiccode::GetUser().name; 
 | 
                dw_exch.SetItemString(curRow, L"CreatorID", suserid); 
 | 
                dw_exch.SetItemDisplayString(curRow, L"CreatorID", susername); 
 | 
  
 | 
                for (int k = 0; k < indexs.length(); k++) 
 | 
                { 
 | 
                    val = dw_exchangefile.GetItemString(row, indexs.item(k)); 
 | 
                    if (columns.item(k) == L"ExchRate") 
 | 
                    { 
 | 
                        double d = val.toDouble(); 
 | 
                        if (d > 100.0) d = d / 100.0; 
 | 
                        dw_exch.SetItemDouble(curRow, L"ExchRate", d); 
 | 
                    } 
 | 
                    else if (columns.item(k) == L"CurrencyCode") 
 | 
                    { 
 | 
                        if (val == L"ÃÀÔª") val = L"USD"; 
 | 
                    } 
 | 
                    else if (columns.item(k) == L"CustomerID") 
 | 
                    { 
 | 
                        if (xdoc) 
 | 
                        { 
 | 
                            KXMLDOMNode n1 = xdoc.selectSingleNode(L"/data/Item[contains(\"" + val + L"\",RawColumn)]"); 
 | 
                            if (n1) 
 | 
                            { 
 | 
                                //alert(n1.xml); 
 | 
                                if (n1.selectSingleNode(L"DataColumn"))dw_exch.SetItemString(curRow, columns.item(k).c_str(), n1.selectSingleNode(L"DataColumn").text()); 
 | 
                                if (n1.selectSingleNode(L"DataColumn/@_displaystring"))dw_exch.SetItemDisplayString(curRow, columns.item(k).c_str(), n1.selectSingleNode(L"DataColumn/@_displaystring").text()); 
 | 
                            } 
 | 
                        } 
 | 
                    } 
 | 
                    else 
 | 
                        dw_exch.SetItemString(curRow, columns.item(k).c_str(), val); 
 | 
                } 
 | 
            } 
 | 
            xutil::RestoreCursor(hCursor); 
 | 
            alert(L"ת»»Íê³É!"); 
 | 
  
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        int OnSaveData() 
 | 
        { 
 | 
            xstring exchRate = dw_arg.GetItemString(1, L"ExchRate"); 
 | 
            xstring Bank = dw_arg.GetItemString(1, L"Bank"); 
 | 
            if (Bank == L"") 
 | 
            { 
 | 
                alert(L"ÇëÊäÈë½á»ãÒøÐÐ!"); 
 | 
                return 1; 
 | 
            } 
 | 
            if (exchRate == L"") 
 | 
            { 
 | 
                alert(L"ÇëÊäÈë»ãÂÊ!"); 
 | 
                return 1; 
 | 
            } 
 | 
            for (int row = 1; row <= dw_exch.GetRowCount(); row++) 
 | 
            { 
 | 
                if (dw_exch.GetItemString(row, L"ExchRate") == L"") 
 | 
                { 
 | 
                    dw_exch.SetItemString(row, L"ExchRate", exchRate); 
 | 
                } 
 | 
                /*else 
 | 
                { 
 | 
  
 | 
                }*/ 
 | 
                if (dw_exch.GetItemString(row, L"Bank") == L"") 
 | 
                { 
 | 
                    dw_exch.SetItemString(row, L"Bank", Bank); 
 | 
                    dw_exch.SetItemDisplayString(row, L"Bank", dw_arg.GetItemDisplayString(1, L"Bank")); 
 | 
                } 
 | 
            } 
 | 
            dw_exch.Redraw(); 
 | 
  
 | 
            xml x; 
 | 
             
 | 
            dw_exch.AcceptText(); 
 | 
            dw_exch.DwUpdateAllToEx(x); 
 | 
            xaserverarg arg ; 
 | 
             
 | 
            arg.AddArg(L"content", x.xml()); 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
            //trace(x.xml()); 
 | 
            if (xurl::get(L"/sale/data/AR/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_exch.ResetUpdateStatus(); 
 | 
                alert(L"±£´æ³É¹¦!"); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                alert(L"±£´æÊ§°Ü!"); 
 | 
            } 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        int OnSave(bool saveas = false) 
 | 
        { 
 | 
  
 | 
            xstring myurl = L"data/SettleExchange"; 
 | 
            xstring sfilename = filename; 
 | 
            if (filename == L"" || saveas) 
 | 
            { 
 | 
                xaserverarg arg ; 
 | 
                 
 | 
                arg.AddArg(L"src", L"data/SettleExchange"); 
 | 
                OpenWindow(L"dev:xpage[trade.document.saveas.vx]",arg); 
 | 
                if (arg.GetArgString(L"result") == L"ok") 
 | 
                { 
 | 
                    sfilename = arg.GetArgString(L"filename"); 
 | 
                } 
 | 
                else 
 | 
                    return 1; 
 | 
            } 
 | 
  
 | 
            xstring content = dw_exchangefile.GetData(); 
 | 
  
 | 
            xstring sguid = publiccode::GetGuid(); 
 | 
            xstring sname = sguid; 
 | 
            xstring str = sname.mid(0, 2); 
 | 
            str = str.toUpper(); 
 | 
            xstring suri = L"attachment" + str; 
 | 
            int ret = xaserver::UploadData(suri, sguid + L".jpg", content); 
 | 
            if (ret < 0) 
 | 
            { 
 | 
                alert(L"ÉÏ´«Îļþ³ö´í!"); 
 | 
                return 0; 
 | 
            } 
 | 
  
 | 
            xml x; 
 | 
             
 | 
            xaserverarg args ; 
 | 
             
 | 
            args.AddArg(L"myurl", myurl); 
 | 
            args.AddArg(L"name", sfilename); 
 | 
            args.AddArg(L"filepath", sname); 
 | 
            args.AddArg(L"fileext", L"xdoc"); 
 | 
            args.AddArg(L"filesource", sfilename); 
 | 
  
 | 
  
 | 
  
 | 
            if (xurl::get(L"/sale/data/TDocument3/attachment/add", args.GetString(), x) != 1) 
 | 
            { 
 | 
                alert(L"±£´æ³ö´íÁË!"); 
 | 
                return 0; 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                filename = sfilename; 
 | 
                SetWindowText(GetHWND(), L"½á»ãÎļþ:" + filename); 
 | 
                alert(x.text()); 
 | 
            } 
 | 
  
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        int SendCtrlCmd(xcontrol xc, xstring cmd) 
 | 
        { 
 | 
            SendMessage(xc.GetHWND(), 0x401, (WPARAM)cmd.c_str(), 0); 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
  
 | 
  
 | 
        //ÃüÁî·¢²¼º¯Êý 
 | 
        int OnCmdDispatch(xstring comdid) 
 | 
        { 
 | 
            if (comdid == L"xmFileOpen") 
 | 
            { 
 | 
                xaserverarg args ; 
 | 
             
 | 
                args.AddArg(L"src", L"data/SettleExchange"); 
 | 
                args.AddArg(L"process", L"path"); 
 | 
                OpenWindow(L"dev:xpage[trade.document.selectdlg.vx]",args); 
 | 
                if (args.GetArgString(L"result") == L"ok") 
 | 
                { 
 | 
                    xstring u = args.GetArgString(L"src"); 
 | 
                    xml x; 
 | 
                     
 | 
                    xaserver::LoadUrl(GetServerUrl(), u, L"", x); 
 | 
                    dw_exchangefile.LoadTemplateEx(x.documentElement()); 
 | 
                    dw_exchangefile.Redraw(); 
 | 
                    filename = args.GetArgString(L"filename"); 
 | 
                    SetWindowText(GetHWND(), L"½á»ãÎļþ:" + filename); 
 | 
                } 
 | 
                return 1; 
 | 
            } 
 | 
            else if (comdid == L"xmFileNew") 
 | 
            { 
 | 
                dw_exchangefile.openUrl(L"/sale/view/AR/template/file"); 
 | 
                dw_exchangefile.Redraw(); 
 | 
                filename = L""; 
 | 
                SetWindowText(GetHWND(), L"½á»ãÎļþ:[new]"); 
 | 
                return 1; 
 | 
            } 
 | 
            else if (comdid == L"xmFileSave") 
 | 
            { 
 | 
                return OnSave(); 
 | 
            } 
 | 
            if (comdid == L"xmAddRow") 
 | 
            { 
 | 
                return OnInsertRow(); 
 | 
            } 
 | 
            else if (comdid == L"xmDeleteRow") 
 | 
            { 
 | 
                return OnDeleteRow(); 
 | 
            } 
 | 
            else if (comdid == L"xmSave") 
 | 
            { 
 | 
                return OnSaveData(); 
 | 
            } 
 | 
            else if (comdid == L"xmFileSaveAs") 
 | 
            { 
 | 
                return OnSave(/*saveas*/true); 
 | 
            } 
 | 
            else if (comdid.left(3) == L"IK_") 
 | 
            { 
 | 
                xstring cmd = comdid.mid(3, comdid.length()); 
 | 
                SendCtrlCmd(GetControl(L"dw_raw"), cmd); 
 | 
                return 1; 
 | 
            } 
 | 
            else if (comdid == L"xmTrans") 
 | 
            { 
 | 
                OpenWindow(L"dev:xpage[ExchangeColumnTran.vx]"); 
 | 
                return 1; 
 | 
            } 
 | 
            else if (comdid == L"xmClient") 
 | 
            { 
 | 
                OpenWindow(L"dev:xpage[CustomerTran.AR.vx]"); 
 | 
                return 1; 
 | 
            } 
 | 
            else if (comdid == L"xmBank") 
 | 
            { 
 | 
                OpenWindow(L"dev:xpage[ExchangeBankTran.vx]"); 
 | 
                return 1; 
 | 
            } 
 | 
            else if (comdid == L"xmTran") 
 | 
            { 
 | 
                return OnTran(); 
 | 
            } 
 | 
            return 0; 
 | 
        } 
 | 
  
 | 
        //ÃüÁî´¦Àíʼþ 
 | 
        int OnXCommand(TEvent* evt, LPARAM param) 
 | 
        { 
 | 
            return OnCmdDispatch(evt->xcommand.pStrID); 
 | 
        } 
 | 
  
 | 
        int OnAttachEvent() 
 | 
        { 
 | 
            //°ó¶¨¹¤¾ßÌõµã»÷ʼþ 
 | 
            AttachEvent(L"WM_XCOMMAND", (FEvent)&ExchangeFileView::OnXCommand); 
 | 
            //»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ 
 | 
            AttachEvent(L"WM_SETFOCUS", (FEvent)&ExchangeFileView::OnSetFocus); 
 | 
            AttachEvent(L"dw_exchangefile", L"CELL_ITEMCHANGED", (FEvent)&ExchangeFileView::OnCellItemChanged); 
 | 
            AttachEvent(L"dw_exchangefile", L"DWV_CLICKED", (FEvent)&ExchangeFileView::OnCellClicked); 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
  
 | 
  
 | 
        int onload() 
 | 
        { 
 | 
            dw_arg = GetControl(L"dw_arg"); 
 | 
            dw_arg.openUrl(L"/sale/view/AR/template/import/arg"); 
 | 
            dw_arg.SetColHeaderHeight(0); 
 | 
            dw_arg.SetRowSelectorWidth(0); 
 | 
            dw_arg.SetHScrollState(false); 
 | 
            dw_arg.SetVScrollState(false); 
 | 
  
 | 
            dw_exchangefile = GetControl(L"dw_raw"); 
 | 
            dw_exch = GetControl(L"dw_exch"); 
 | 
            dw_exch.openUrl(L"/sale/view/AR/template/listex"); 
 | 
            OnAttachEvent(); 
 | 
  
 | 
  
 | 
            filename = L""; 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        int onloaded() 
 | 
        { 
 | 
            SetAgent(); 
 | 
            SetWindowText(GetHWND(), L"½á»ãÎļþ:[new]"); 
 | 
  
 | 
            return 1; 
 | 
        } 
 | 
    }; 
 |