#include <wobject/xstring.hpp> 
 | 
#include <xcontrol/xtreeview.hpp> 
 | 
#include <xcontrol/xdwgrid.hpp> 
 | 
#include <wobject/xdouble.hpp> 
 | 
#include <xcontrol/xlayersheet.hpp> 
 | 
#include <xcontrol/xcell.hpp> 
 | 
  
 | 
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" 
 | 
#include "vbusiness/vframe/maint.vframe.vbusiness.hpp" 
 | 
#include "viewobject/view.base.hpp" 
 | 
  
 | 
using xml = KXMLDOMDocument; 
 | 
class __declspec(dllexport) ForwarderMaint : public maint 
 | 
{ 
 | 
public: 
 | 
    KXMLDOMDocument m_configDoc; 
 | 
  
 | 
    xdwtable dw_base; 
 | 
    xstring m_userid; 
 | 
    xstring m_username; 
 | 
    xstring ContactID; 
 | 
    xcell dw_cell; 
 | 
    xstring m_EntityID = L""; 
 | 
public: 
 | 
    ForwarderMaint(void* implPtr, HWND hWnd) :maint(implPtr, hWnd) {} 
 | 
public: 
 | 
    static ForwarderMaint* CreateInstance(void* implPtr, void* hWnd) 
 | 
    { 
 | 
        ForwarderMaint* pWin = new ForwarderMaint(implPtr, (HWND)hWnd); 
 | 
        return pWin; 
 | 
    } 
 | 
  
 | 
    int setCellReadOnly() 
 | 
    { 
 | 
        dw_base =GetControl(L"dw_base"); 
 | 
        dw_cell = dw_base.QueryItem(L"ixcell"); 
 | 
        xstring strnew = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='±£»¤' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>"; 
 | 
        //dw_cell.SetCellProps(2,2,strnew);             
 | 
        return 0; 
 | 
    } 
 | 
  
 | 
    xstring GetGuid() { 
 | 
        return publiccode::GetGuid(); 
 | 
    } 
 | 
    int OnClear() { 
 | 
        if (m_EntityID == L"") { 
 | 
            m_userid = publiccode::GetUser().personid; 
 | 
            m_username = publiccode::GetUser().name; 
 | 
            dw_base = GetControl(L"dw_base"); 
 | 
            dw_base.SetItemString(1, L"ForwarderID", GetGuid()); 
 | 
            dw_base.SetItemString(1, L"PartyID", GetGuid()); 
 | 
            dw_base.SetItemString(1, L"PStatus", L"1"); 
 | 
            dw_base.SetItemDisplayString(1, L"PStatus", L"ÆÕͨ"); 
 | 
            dw_base.SetItemString(1, L"CreatorID", m_userid); 
 | 
            dw_base.SetItemString(1, L"PADStatus", L"1"); 
 | 
            dw_base.SetItemString(1, L"AddressID", GetGuid()); 
 | 
            dw_base.SetItemString(1, L"PADIdentifyAddressFlag", L"Y"); 
 | 
            dw_base.SetItemString(1, L"PADPrimaryFlag", L"Y"); 
 | 
            //dw_base.SetItemString(1,L"BankAccountID",GetGuid());                 
 | 
            dw_base.SetItemString(1, L"Type", L"5"); 
 | 
            dw_base.SetItemString(1, L"EnterName", m_userid); 
 | 
            dw_base.SetItemDisplayString(1, L"EnterName", m_username); 
 | 
            dw_base.SetItemString(1, L"CreateDate", publiccode::GetCurrentDate()); 
 | 
            /*xdwtable dw =  new xdwtable; 
 | 
            dw.setNativePointer(dw_base.GetCurTable()); 
 | 
            xdwtable dwcon =  new xdwtable; 
 | 
            dwcon.setNativePointer(dw.FindDwTable(L"Contacters",0)); 
 | 
            dwcon.SetItemString(1,L"ContactID",GetGuid()); 
 | 
            dwcon.SetItemString(1,L"PCStatus",L"1");*/ 
 | 
            //dw_base.SetItemString(1,L"EBankAccountID",GetGuid());     
 | 
            //dw_base.SetItemString(1,L"CBankAccountID",GetGuid()); 
 | 
            /*xdwtable dweon =  new xdwtable; 
 | 
            dweon.setNativePointer(dw_base.FindDwTable(L"item1",0)); 
 | 
            xdwtable dwcon =  new xdwtable; 
 | 
            dwcon.setNativePointer(dw_base.FindDwTable(L"item2",0)); 
 | 
            dweon.SetItemString(1,L"EPBAStatus",L"Y"); 
 | 
            dwcon.SetItemString(1,L"CPBAStatus",L"Y"); 
 | 
            dweon.SetItemString(1,L"ECurrencyCode",L"USD"); 
 | 
            dwcon.SetItemString(1,L"CCurrencyCode",L"RMB");*/ 
 | 
            dw_base.SetItemString(1, L"ForwarderType", L"1"); 
 | 
            dw_base.SetItemDisplayString(1, L"ForwarderType", L"Ô¤¸¶»õ"); 
 | 
            //dw_base.SetItemString(1,L"PrimaryContactID",dwcon.GetItemString(1,L"ContactID"));     
 | 
            return 0; 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            setCellReadOnly(); 
 | 
        } 
 | 
        return 0; 
 | 
    } 
 | 
  
 | 
    int OnAddrow() 
 | 
    { 
 | 
        dw_base = GetControl(L"dw_base"); 
 | 
        xdwtable dw = dw_base.GetCurTable(); 
 | 
        xstring dw_n = dw.GetDwName(); 
 | 
        if (dw_n == L"item") 
 | 
        { 
 | 
            dw.InsertRow(0); 
 | 
            int rows = dw.GetRowCount(); 
 | 
            dw.SetRow(rows); 
 | 
        } 
 | 
        return 1; 
 | 
    } 
 | 
    int OnInsertRow() 
 | 
    { 
 | 
        dw_base = GetControl(L"dw_base"); 
 | 
        xdwtable dw = dw_base.GetCurTable(); 
 | 
        xstring dw_n = dw.GetDwName(); 
 | 
        if (dw_n == L"item") 
 | 
        { 
 | 
            int row = dw.GetRow(); 
 | 
            if (row < 1) return 0; 
 | 
            dw.InsertRow(row); 
 | 
            dw.SetRow(row); 
 | 
        } 
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    int OnDeleteRow() 
 | 
    { 
 | 
        dw_base = new xdwtable; 
 | 
        dw_base.setNativePointer(GetControl(L"dw_base")); 
 | 
        xdwtable dw = dw_base.GetCurTable(); 
 | 
        xstring dw_n = dw.GetDwName(); 
 | 
        if (dw_n == L"item") 
 | 
        { 
 | 
            int row = dw.GetRow(); 
 | 
            if (row < 1) return 0; 
 | 
            /*xstring del = dw.GetItemString(row,8); 
 | 
            if(del!=L"") 
 | 
            { 
 | 
                if(m_dels==L"") 
 | 
                { 
 | 
                    m_dels=del; 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    xstring temp=m_dels; 
 | 
                    m_dels=del + L"|" + temp; 
 | 
                //+= L"|"+del; 
 | 
                } 
 | 
  
 | 
            }*/ 
 | 
            dw.DeleteRow(row); 
 | 
            dw.SetRow(row - 1); 
 | 
        } 
 | 
        //trace(m_dels); 
 | 
        return 1; 
 | 
    } 
 | 
    xstring getGoodsNo() 
 | 
    { 
 | 
        xml x; 
 | 
  
 | 
        xaserverarg arg; 
 | 
  
 | 
        if (getUrl(L"/sale/data/LogisticsCode/pref/PartyNo", arg.GetString(), x) != 1) 
 | 
        { 
 | 
            trace(x.xml()); 
 | 
            return L""; 
 | 
        } 
 | 
        KXMLDOMElement e = x.documentElement(); 
 | 
        if (e) 
 | 
        { 
 | 
            xstring code = e.text(); 
 | 
            trace(code); 
 | 
            return L"F" + code; 
 | 
        } 
 | 
        return L"F1000"; 
 | 
    } 
 | 
    int OnPreSave() 
 | 
    { 
 | 
        dw_base.AcceptText(); 
 | 
        dw_base = GetControl(L"dw_base"); 
 | 
        xstring ForwarderNo = dw_base.GetItemString(1, L"ForwarderNo"); 
 | 
        if (ForwarderNo == L"") 
 | 
        { 
 | 
            dw_base.SetItemString(1, L"ForwarderNo", getGoodsNo()); 
 | 
        } 
 | 
        xdwtable dwcon =dw_base.FindDwTable(L"item", 0); 
 | 
        int i; 
 | 
        for (i = 1; i <= dwcon.GetRowCount(); i++) 
 | 
        { 
 | 
            xstring aTemp; 
 | 
            xstring aName = dwcon.GetItemString(i, L"ContacterName"); 
 | 
            trace(aName); 
 | 
            if (aName == L"") 
 | 
            { 
 | 
                aTemp = dwcon.GetItemString(i, L"Mobile") + dwcon.GetItemString(i, L"TEL") + dwcon.GetItemString(i, L"Fax") + dwcon.GetItemString(i, L"Email") + dwcon.GetItemString(i, L"PCRemark") + dwcon.GetItemString(i, L"fz"); 
 | 
                trace(aTemp); 
 | 
                if (aTemp != L"") 
 | 
                { 
 | 
                    alert(L"ÁªÏµÈËÃû³Æ±ØÌ"); 
 | 
                    return -1; 
 | 
                } 
 | 
            } 
 | 
            else { 
 | 
                xstring ContactID = dwcon.GetItemString(i, L"ContactID"); 
 | 
                if (ContactID == L"") 
 | 
                { 
 | 
                    dwcon.SetItemString(i, L"ContactID", GetGuid()); 
 | 
                    dwcon.SetItemString(i, L"PCStatus", L"Y"); 
 | 
                    dw_base.SetItemString(1, L"PrimaryContactID", dwcon.GetItemString(1, L"ContactID")); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        xdwtable dwcon2 = dw_base.FindDwTable(L"item2", 0); 
 | 
        int k; 
 | 
        xstring sPBABankName2 = L""; 
 | 
        xstring sPBABankAccountNo2 = L""; 
 | 
        for (k = 1; k <= dwcon2.GetRowCount(); k++) 
 | 
        { 
 | 
            sPBABankName2 = dwcon2.GetItemString(k, L"CBank"); 
 | 
            sPBABankAccountNo2 = dwcon2.GetItemString(k, L"CBankNo"); 
 | 
  
 | 
            xstring sPBAAll2 = sPBABankName2 + sPBABankAccountNo2; 
 | 
  
 | 
            if (sPBAAll2 != L"") 
 | 
            { 
 | 
                if (sPBABankName2 == L"") 
 | 
                { 
 | 
                    alert(L"ÈËÃñ±ÒÒøÐÐÃû³Æ²»ÄÜΪ¿Õ"); 
 | 
                    return -1; 
 | 
                } 
 | 
                if (sPBABankAccountNo2 == L"") 
 | 
                { 
 | 
                    alert(L"ÈËÃñ±ÒÒøÐÐÕË»§²»ÄÜΪ¿Õ"); 
 | 
                    return -1; 
 | 
                } 
 | 
                dwcon2.SetItemString(k, L"CPBAStatus", L"Y"); 
 | 
                dwcon2.SetItemString(k, L"CCurrencyCode", L"RMB"); 
 | 
                dwcon2.SetItemString(k, L"CBankAccountID", GetGuid()); 
 | 
  
 | 
                if (dwcon2.GetItemString(k, L"CBankAccountID") != L"" && m_EntityID == L"") 
 | 
                { 
 | 
                    dw_base.SetItemString(1, L"CBkAccountID", dwcon2.GetItemString(k, L"CBankAccountID")); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        xdwtable  dwcon1 = dw_base.FindDwTable(L"item1", 0); 
 | 
        int j; 
 | 
        xstring sPBABankName1 = L""; 
 | 
        xstring sPBABankAccountNo1 = L""; 
 | 
        for (j = 1; j <= dwcon1.GetRowCount(); j++) 
 | 
        { 
 | 
            xstring sPBABankName1 = dwcon1.GetItemString(j, L"EBank"); 
 | 
            xstring sPBABankAccountNo1 = dwcon1.GetItemString(j, L"EBankNo"); 
 | 
  
 | 
            xstring sPBAAll1 = sPBABankName1 + sPBABankAccountNo1; 
 | 
            if (sPBAAll1 != L"") 
 | 
            { 
 | 
                if (sPBABankName1 == L"") 
 | 
                { 
 | 
                    alert(L"ÃÀ½ðÒøÐÐÃû³Æ²»ÄÜΪ¿Õ"); 
 | 
                    return -1; 
 | 
                } 
 | 
                if (sPBABankAccountNo1 == L"") 
 | 
                { 
 | 
                    alert(L"ÃÀ½ðÒøÐÐÕË»§²»ÄÜΪ¿Õ"); 
 | 
                    return -1; 
 | 
                } 
 | 
                dwcon1.SetItemString(j, L"EPBAStatus", L"Y"); 
 | 
                dwcon1.SetItemString(j, L"ECurrencyCode", L"USD"); 
 | 
                dwcon1.SetItemString(j, L"EBankAccountID", GetGuid()); 
 | 
                if (dwcon1.GetItemString(j, L"EBankAccountID") != L"" && m_EntityID == L"") 
 | 
                { 
 | 
                    dw_base.SetItemString(1, L"EBkAccountID", dwcon1.GetItemString(j, L"EBankAccountID")); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return 1; 
 | 
    } 
 | 
    int OnPostSave() 
 | 
    { 
 | 
        dw_base = GetControl(L"dw_base"); 
 | 
        xaserverarg args; 
 | 
  
 | 
        xml x; 
 | 
  
 | 
        dw_base.DwUpdateAllTo(x); 
 | 
        //trace(x.xml()); 
 | 
  
 | 
        //Ö÷ÁªÏµÈË 
 | 
        xstring spGuid; 
 | 
        KXMLDOMElement e; 
 | 
        auto list = x.selectNodes(L"//item"); 
 | 
        int nlen = list.length(); 
 | 
        int i; 
 | 
        for (i = 0; i < nlen; i++) 
 | 
        { 
 | 
            e = list.item(i); 
 | 
            if (i == 0) spGuid = e.selectSingleNode(L"@guid").text(); 
 | 
            xstring sP = e.selectSingleNode(L"PPrimaryFlag").text(); 
 | 
            if (sP == L"Y") 
 | 
            { 
 | 
                spGuid = e.selectSingleNode(L"@guid").text(); 
 | 
                break; 
 | 
            } 
 | 
        } 
 | 
        if (spGuid == L"") 
 | 
        { 
 | 
            trace(L"error"); 
 | 
            return 0; 
 | 
        } 
 | 
        args.AddArg(L"contact", spGuid); 
 | 
        //trace(L"<---->"); 
 | 
        //trace(spGuid); 
 | 
        xml x1; 
 | 
  
 | 
        if (getUrl(L"/sale/data/SupplierSubmit/pref/primarycontact", args.GetString(), x) != 1) 
 | 
        { 
 | 
            xstring error = x1.text(); 
 | 
            trace(error); 
 | 
            return 0; 
 | 
        } 
 | 
  
 | 
  
 | 
        return 1; 
 | 
    } 
 | 
    int OnSave() 
 | 
    { 
 | 
        dw_base = GetControl(L"dw_base"); 
 | 
        xstring SName = dw_base.GetItemString(1, L"Name"); 
 | 
        if (SName == L"") { 
 | 
            alert(L"ÇëÊäÈë»õ´úÃû³Æ£¡"); 
 | 
            return -1; 
 | 
        } 
 | 
        int rec = OnPreSave(); 
 | 
        if (rec == -1)    return -1; 
 | 
        xml x; 
 | 
  
 | 
        dw_base.DwUpdateAllTo(x); 
 | 
        trace(x.xml()); 
 | 
        xaserverarg arg; 
 | 
  
 | 
        arg.AddArg(L"content", x.xml()); 
 | 
        arg.AddArg(L"dbmap", L"Forwarder.dbmap"); 
 | 
        //arg.AddArg(L"m_dels",m_dels);                 
 | 
        if (getUrl(L"/sale/data/LogisticsCode/entity/save", arg.GetString(), x) != 1) 
 | 
        { 
 | 
            trace(L"error:" + (xstring)x.xml()); 
 | 
            alert(L"±£´æÊ§°Ü!"); 
 | 
            return 0; 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            trace(x.xml()); 
 | 
            if (x.selectSingleNode(L"error")) 
 | 
            { 
 | 
                alert(L"±£´æ³ö´í2!"); 
 | 
                return 0; 
 | 
            } 
 | 
            alert(L"±£´æ³É¹¦!"); 
 | 
            dw_base.ResetUpdateStatus(); 
 | 
            OnPostSave(); 
 | 
        } 
 | 
        dw_base.Redraw(); 
 | 
        //m_dels=L"";                 
 | 
        return 0; 
 | 
    } 
 | 
    int OnCmdDispatch(xstring comdid) 
 | 
    { 
 | 
        if (comdid.find(L"action:bill.row.add", 0) >= 0) { 
 | 
            OnAddrow(); 
 | 
        } 
 | 
        else if (comdid.find(L"bill.row.insert", 0) >= 0) { 
 | 
            OnInsertRow(); 
 | 
        } 
 | 
        else if (comdid.find(L"bill.row.delete", 0) >= 0) { 
 | 
            OnDeleteRow(); 
 | 
        } 
 | 
        else if (comdid.find(L"bill.save", 0) >= 0) { 
 | 
            //trace(1); 
 | 
            OnSave(); 
 | 
        } 
 | 
        return 0; 
 | 
    } 
 | 
  
 | 
    int OnXCommand(TEvent* evt, LPARAM param) 
 | 
    { 
 | 
        return OnCmdDispatch(evt->xcommand.pStrID); 
 | 
    } 
 | 
    int OnCellChanged(TEvent* evt, LPARAM p) 
 | 
    { 
 | 
        dw_base = GetControl(L"dw_base"); 
 | 
        DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; 
 | 
        xstring colname = hdr.colname; 
 | 
        xstring coldata = hdr.data; 
 | 
        trace(colname); 
 | 
        if (colname == L"ForwarderNo") 
 | 
        { 
 | 
            xstring cspec = dw_base.GetItemString(1, 1); 
 | 
            trace(cspec); 
 | 
            xstring SpecRule = L"^\\d*$"; 
 | 
            xaserverarg args; 
 | 
  
 | 
            args.AddArg(L"CSpec", cspec); 
 | 
            args.AddArg(L"SpecRule", SpecRule); 
 | 
            xml  x; 
 | 
  
 | 
            getUrl(L"/sale/data/LogisticsCode/pref/forwarderno/check", args.GetString(), x); 
 | 
  
 | 
            if (x.selectSingleNode(L"root/spec")) 
 | 
            { 
 | 
                alert(L"ÇëÊäÈëÊý×Ö£¡"); 
 | 
                return 0; 
 | 
            } 
 | 
  
 | 
        } 
 | 
        //Ö»ÄÜѡһ¸öÖ÷ÁªÏµÈË 
 | 
        else if (colname == L"PPrimaryFlag" && coldata == L"Y") 
 | 
        { 
 | 
            xdwtable dw_pc; 
 | 
            dw_pc = dw_base.FindDwTable(L"item"); 
 | 
            if (dw_pc) 
 | 
            { 
 | 
                int i; 
 | 
                for (i = 1; i <= dw_pc.GetRowCount(); i++) 
 | 
                { 
 | 
                    if (i != hdr.row) 
 | 
                        dw_pc.SetItemString(i, L"PPrimaryFlag", L"N"); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return 1; 
 | 
    } 
 | 
    int OnAttachEvent() 
 | 
    { 
 | 
        AttachEvent(L"WM_XCOMMAND", (FEvent)&ForwarderMaint::OnXCommand); 
 | 
        //AttachEvent(L"WM_SETFOCUS",OnSetFocus); 
 | 
        AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&ForwarderMaint::OnCellChanged); 
 | 
        return 1; 
 | 
    } 
 | 
    int onload() 
 | 
    { 
 | 
  
 | 
        SetArg(); 
 | 
        dw_base = GetControl(L"dw_base"); 
 | 
  
 | 
        OnAttachEvent(); 
 | 
        //if(!m_configDoc) return -1; 
 | 
  
 | 
        maint::onload(); 
 | 
  
 | 
        OnClear(); 
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
    int onloaded() 
 | 
    { 
 | 
        return maint::onloaded(); 
 | 
    } 
 | 
  
 | 
}; 
 |