LiFan
2024-07-16 6a4764ee747fff45d89ef48f98873d6409e4f85e
jrj/project/business/BasicCode/ForwarderMaint.cpp
@@ -1,461 +1,467 @@
use "system.vl"
use "win.vl"
use "maint.vl"
use "file.vl"
use "dev:vm[xcell.vm]"
unit vbusiness.entity
[
   ForwarderMaint is extend maint;
   about ForwarderMaint
   [
      field:
      [
         msxml::IXMLDOMDocument m_configDoc;
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
         xdwtable__ dw_base;
         string m_userid;
         string m_username;
         string ContactID;
         xcell__ dw_cell;
      ]
      method:
      [
         int alert(string str)
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
class __declspec(dllexport) ForwarderMaint : public xframe
{
public:
   KXMLDOMDocument m_configDoc;
   xdwtable dw_base;
   xstring m_userid;
   xstring m_username;
   xstring ContactID;
   xcell dw_cell;
public:
   ForwarderMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
public:
   static ForwarderMaint* CreateInstance(void* implPtr, void* hWnd)
   {
      ForwarderMaint* pWin = new ForwarderMaint(implPtr, (HWND)hWnd);
      return pWin;
   }
   int alert(xstring str)
   {
      //win::MessageBox(GetHWND(),str,L"提示22:",0);
      TApp::alert(this, str);
      return 0;
   }
   int setCellReadOnly()
   {
      dw_base = new xdwtable;
      dw_base.setNativePointer(GetControl(L"dw_base"));
      dw_cell = new xcell;
      dw_cell.setNativePointer(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 TApp::GetGuid();
   }
   int OnClear() {
      if (m_EntityID == L"") {
         trace(1);
         m_userid = TApp::GetUserInfo().id;
         m_username = TApp::GetUserInfo().name;
         dw_base = new xdwtable;
         dw_base.setNativePointer(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", TApp::GetCurDate());
         /*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"));
      }
      else
      {
         setCellReadOnly();
      }
      return 0;
   }
   int OnAddrow()
   {
      dw_base = new xdwtable;
      dw_base.setNativePointer(GetControl(L"dw_base"));
      xdwtable dw = new xdwtable;
      dw.setNativePointer(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 = new xdwtable;
      dw_base.setNativePointer(GetControl(L"dw_base"));
      xdwtable dw = new xdwtable;
      dw.setNativePointer(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 = new xdwtable;
      dw.setNativePointer(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"")
         {
            //win__::MessageBox(this.GetHWND(),str,"提示22:",0);
            TApp::alert(this,str);
            return 0;
         }
         int setCellReadOnly()
         {
            dw_base = new xdwtable__;
            dw_base.setNativePointer(this.GetControl("dw_base"));
            dw_cell = new xcell__;
            dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));
            string strnew = "<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
            //dw_cell.SetCellProps(2,2,strnew);
            return 0;
         }
         string GetGuid(){
            return TApp::GetGuid();
         }
         int OnClear(){
            if(this.m_EntityID ==""){
               trace(1);
               m_userid = TApp::GetUserInfo().id;
               m_username = TApp::GetUserInfo().name;
               dw_base = new xdwtable__;
               dw_base.setNativePointer(this.GetControl("dw_base"));
               dw_base.SetItemString(1,"ForwarderID",GetGuid());
               dw_base.SetItemString(1,"PartyID",GetGuid());
               dw_base.SetItemString(1,"PStatus","1");
               dw_base.SetItemDisplayString(1,"PStatus","普通");
               dw_base.SetItemString(1,"CreatorID",m_userid);
               dw_base.SetItemString(1,"PADStatus","1");
               dw_base.SetItemString(1,"AddressID",GetGuid());
               dw_base.SetItemString(1,"PADIdentifyAddressFlag","Y");
               dw_base.SetItemString(1,"PADPrimaryFlag","Y");
               //dw_base.SetItemString(1,"BankAccountID",GetGuid());
               dw_base.SetItemString(1,"Type","5");
               dw_base.SetItemString(1,"EnterName",m_userid);
               dw_base.SetItemDisplayString(1,"EnterName",m_username);
               dw_base.SetItemString(1,"CreateDate",TApp::GetCurDate());
               /*xdwtable__ dw =  new xdwtable__;
               dw.setNativePointer(dw_base.GetCurTable());
               xdwtable__ dwcon =  new xdwtable__;
               dwcon.setNativePointer(dw.FindDwTable("Contacters",0));
               dwcon.SetItemString(1,"ContactID",GetGuid());
               dwcon.SetItemString(1,"PCStatus","1");*/
               //dw_base.SetItemString(1,"EBankAccountID",GetGuid());
               //dw_base.SetItemString(1,"CBankAccountID",GetGuid());
               /*xdwtable__ dweon =  new xdwtable__;
               dweon.setNativePointer(dw_base.FindDwTable("item1",0));
               xdwtable__ dwcon =  new xdwtable__;
               dwcon.setNativePointer(dw_base.FindDwTable("item2",0));
               dweon.SetItemString(1,"EPBAStatus","Y");
               dwcon.SetItemString(1,"CPBAStatus","Y");
               dweon.SetItemString(1,"ECurrencyCode","USD");
               dwcon.SetItemString(1,"CCurrencyCode","RMB");*/
               dw_base.SetItemString(1,"ForwarderType","1");
               dw_base.SetItemDisplayString(1,"ForwarderType","预付货");
               //dw_base.SetItemString(1,"PrimaryContactID",dwcon.GetItemString(1,"ContactID"));
            if(m_dels==L"")
            {
               m_dels=del;
            }
            else
            {
               setCellReadOnly();
            }
            return 0;
         }
               xstring temp=m_dels;
               m_dels=del + L"|" + temp;
            //+= L"|"+del;
            }
         int OnAddrow()
         {
            dw_base = new xdwtable__;
            dw_base.setNativePointer(this.GetControl("dw_base"));
            xdwtable__ dw =  new xdwtable__;
            dw.setNativePointer(dw_base.GetCurTable());
            string dw_n=dw.GetDwName();
            if(dw_n=="item")
            {
               dw.InsertRow(0);
               int rows = dw.GetRowCount();
               dw.SetRow(rows);
            }
            return 1;
         }
         int OnInsertRow()
         {
            dw_base = new xdwtable__;
            dw_base.setNativePointer(this.GetControl("dw_base"));
            xdwtable__ dw =  new xdwtable__;
            dw.setNativePointer(dw_base.GetCurTable());
            string dw_n=dw.GetDwName();
            if(dw_n=="item")
            {
               int row=dw.GetRow();
               if(row<1) return 0;
               dw.InsertRow(row);
               dw.SetRow(row);
            }
            return 1;
         }
         }*/
         dw.DeleteRow(row);
         dw.SetRow(row - 1);
      }
      //trace(m_dels);
      return 1;
   }
   xstring getGoodsNo()
   {
      xml x;
         int OnDeleteRow()
         {
            dw_base = new xdwtable__;
            dw_base.setNativePointer(this.GetControl("dw_base"));
            xdwtable__ dw =  new xdwtable__;
            dw.setNativePointer(dw_base.GetCurTable());
            string dw_n=dw.GetDwName();
            if(dw_n=="item")
            {
               int row=dw.GetRow();
               if(row<1) return 0;
               /*string del = dw.GetItemString(row,8);
               if(del!="")
               {
                  if(m_dels=="")
                  {
                     m_dels=del;
                  }
                  else
                  {
                     string temp=m_dels;
                     m_dels=del + "|" + temp;
                  //+= "|"+del;
                  }
      xaserverarg arg;
               }*/
               dw.DeleteRow(row);
               dw.SetRow(row - 1);
            }
               //trace(m_dels);
            return 1;
         }
         string getGoodsNo()
      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 = new xdwtable;
      dw_base.setNativePointer(GetControl(L"dw_base"));
      xstring ForwarderNo = dw_base.GetItemString(1, L"ForwarderNo");
      if (ForwarderNo == L"")
      {
         dw_base.SetItemString(1, L"ForwarderNo", getGoodsNo());
      }
      xdwtable dwcon = new xdwtable;
      dwcon.setNativePointer(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"")
         {
            xml__ x=new xml__;
            x.setNativePointer(xml__::CreateInstance());
            xaserverarg__ arg=new xaserverarg__;
            arg.setNativePointer(arg.CreateInstance());
            if (getUrl("/sale/data/LogisticsCode/pref/PartyNo",arg.GetString(),x) != 1)
            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"")
            {
               trace(x.GetXml());
               return "";
            }
            msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
            if(e)
            {
               string code = e.text;
            trace(code);
               return "F"+code;
            }
            return "F1000";
         }
         int OnPreSave()
         {
            dw_base.AcceptText();
            dw_base = new xdwtable__;
            dw_base.setNativePointer(this.GetControl("dw_base"));
            string ForwarderNo = dw_base.GetItemString(1,"ForwarderNo",0);
            if (ForwarderNo=="" || ForwarderNo== nil)
               {
               dw_base.SetItemString(1,"ForwarderNo",getGoodsNo());
            }
            xdwtable__ dwcon =  new xdwtable__;
            dwcon.setNativePointer(dw_base.FindDwTable("item",0));
            int i;
            for(i=1;i<=dwcon.GetRowCount();i++)
            {
               string aTemp;
               string aName = dwcon.GetItemString(i,"ContacterName",0);
               trace(aName);
               if (aName=="" || aName== nil)
               {
                  aTemp=dwcon.GetItemString(i,"Mobile",0)+dwcon.GetItemString(i,"TEL",0)+dwcon.GetItemString(i,"Fax",0)+dwcon.GetItemString(i,"Email",0)+dwcon.GetItemString(i,"PCRemark",0)+dwcon.GetItemString(i,"fz",0);
                  trace(aTemp);
                  if(aTemp !="" && aTemp != nil)
                  {
                     alert("联系人名称必填!");
                     return -1;
                  }
               }
               else{
                     string ContactID = dwcon.GetItemString(i,"ContactID",0);
                     if (ContactID=="" || ContactID== nil)
                     {
                        dwcon.SetItemString(i,"ContactID",GetGuid());
                        dwcon.SetItemString(i,"PCStatus","Y");
                        dw_base.SetItemString(1,"PrimaryContactID",dwcon.GetItemString(1,"ContactID"));
                     }
               }
            }
            xdwtable__ dwcon2 =  new xdwtable__;
            dwcon2.setNativePointer(dw_base.FindDwTable("item2",0));
            int k;
            for (k=1;k <= dwcon2.GetRowCount();k++)
            {
               string sPBABankName2 = dwcon2.GetItemString(k,"CBank");
               string sPBABankAccountNo2 = dwcon2.GetItemString(k,"CBankNo");
               if (sPBABankName2 == nil) sPBABankName2 = "";
               if (sPBABankAccountNo2 == nil) sPBABankAccountNo2 = "";
               string sPBAAll2 = sPBABankName2 + sPBABankAccountNo2;
               if (sPBAAll2 != "")
               {
                  if (sPBABankName2 == "")
                  {
                     alert("人民币银行名称不能为空");
                     return -1;
                  }
                  if (sPBABankAccountNo2 == "")
                  {
                     alert("人民币银行账户不能为空");
                     return -1;
                  }
                  dwcon2.SetItemString(k,"CPBAStatus","Y");
                  dwcon2.SetItemString(k,"CCurrencyCode","RMB");
                  dwcon2.SetItemString(k,"CBankAccountID",GetGuid());
                  if(dwcon2.GetItemString(k,"CBankAccountID")!="" && this.m_EntityID =="")
                  {
                     dw_base.SetItemString(1,"CBkAccountID",dwcon2.GetItemString(k,"CBankAccountID"));
                  }
               }
            }
            xdwtable__  dwcon1 =  new xdwtable__;
            dwcon1.setNativePointer(dw_base.FindDwTable("item1",0));
            int j;
            for (j=1;j <= dwcon1.GetRowCount();j++)
            {
               string sPBABankName1 = dwcon1.GetItemString(j,"EBank");
               string sPBABankAccountNo1 = dwcon1.GetItemString(j,"EBankNo");
               if (sPBABankName1 == nil) sPBABankName1 = "";
               if (sPBABankAccountNo1 == nil) sPBABankAccountNo1 = "";
               string sPBAAll1 = sPBABankName1 + sPBABankAccountNo1;
               if (sPBAAll1 != "")
               {
                  if (sPBABankName1 == "")
                  {
                     alert("美金银行名称不能为空");
                     return -1;
                  }
                  if (sPBABankAccountNo1 == "")
                  {
                     alert("美金银行账户不能为空");
                     return -1;
                  }
                  dwcon1.SetItemString(j,"EPBAStatus","Y");
                  dwcon1.SetItemString(j,"ECurrencyCode","USD");
                  dwcon1.SetItemString(j,"EBankAccountID",GetGuid());
                  if(dwcon1.GetItemString(j,"EBankAccountID")!="" && this.m_EntityID =="")
                  {
                     dw_base.SetItemString(1,"EBkAccountID",dwcon1.GetItemString(j,"EBankAccountID"));
                  }
               }
            }
            return 1;
         }
         int OnPostSave()
         {
            dw_base = new xdwtable__;
            dw_base.setNativePointer(this.GetControl("dw_base"));
            xaserverarg__ args = new xaserverarg__;
            args.setNativePointer(args.CreateInstance());
            xml__ x = new xml__;
            x.setNativePointer(xml__::CreateInstance());
            dw_base.DwUpdateAllTo(x.GetXmlDoc());
            //trace(x.GetXml());
            //主联系人
            string spGuid;
            msxml::IXMLDOMElement e;
            var list = x.GetXmlDoc().selectNodes("//item");
            int nlen = list.length;
            int i;
            for(i=0;   i<nlen;   i++)
            {
               e = list.item(i);
               if (i == 0) spGuid = e.selectSingleNode("@guid").text;
               string sP = e.selectSingleNode("PPrimaryFlag").text;
               if (sP == "Y")
               {
                  spGuid = e.selectSingleNode("@guid").text;
                  break;
               }
            }
            if (spGuid == "" || spGuid == nil)
            {
               trace("error");
               return 0;
            }
            args.AddArg("contact",spGuid);
            //trace("<---->");
            //trace(spGuid);
            xml__ x1 = new xml__;
            x1.setNativePointer(x1.CreateInstance());
            if (getUrl("/sale/data/SupplierSubmit/pref/primarycontact",args.GetString(),x) != 1)
            {
               string error = x1.GetXmlDoc().text;
               trace(error);
               return 0;
            }
            return 1;
         }
         int OnSave()
         {
            dw_base = new xdwtable__;
            dw_base.setNativePointer(this.GetControl("dw_base"));
            string SName = dw_base.GetItemString(1,"Name");
            if(SName==""){
               alert("请输入货代名称!");
               alert(L"联系人名称必填!");
               return -1;
            }
            int rec =OnPreSave();
            if (rec== -1)   return -1;
            xml__ x=new xml__;
            x.setNativePointer(xml__::CreateInstance());
            dw_base.DwUpdateAllTo(x.GetXmlDoc());
            trace(x.GetXml());
            xaserverarg__ arg=new xaserverarg__;
            arg.setNativePointer(arg.CreateInstance());
            arg.AddArg("content",x.GetXml());
            arg.AddArg("dbmap","Forwarder.dbmap");
            //arg.AddArg("m_dels",m_dels);
            if (getUrl("/sale/data/LogisticsCode/entity/save",arg.GetString(),x) != 1)
         }
         else {
            xstring ContactID = dwcon.GetItemString(i, L"ContactID");
            if (ContactID == L"")
            {
               trace("error:"+x.GetXml());
               alert("保存失败!");
               return 0;
            }
            else
            {
               trace(x.GetXml());
               if(x.GetXmlDoc().selectSingleNode("error"))
               {
                  alert("保存出错2!");
                  return 0;
               }
               alert("保存成功!");
               dw_base.ResetUpdateStatus();
               OnPostSave();
               dwcon.SetItemString(i, L"ContactID", GetGuid());
               dwcon.SetItemString(i, L"PCStatus", L"Y");
               dw_base.SetItemString(1, L"PrimaryContactID", dwcon.GetItemString(1, L"ContactID"));
            }
            dw_base.Redraw();
            //m_dels="";
            return 0;
         }
         int OnCmdDispatch(string comdid)
         }
      }
      xdwtable dwcon2 = new xdwtable;
      dwcon2.setNativePointer(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(comdid.find("action:bill.row.add",0)>=0) {
               OnAddrow();
            if (sPBABankName2 == L"")
            {
               alert(L"人民币银行名称不能为空");
               return -1;
            }
            else if(comdid.find("bill.row.insert",0)>=0) {
               OnInsertRow();
            if (sPBABankAccountNo2 == L"")
            {
               alert(L"人民币银行账户不能为空");
               return -1;
            }
            else if(comdid.find("bill.row.delete",0)>=0) {
               OnDeleteRow();
            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"));
            }
            else if(comdid.find("bill.save",0)>=0) {
               trace(1);
               OnSave();
            }
         }
      }
      xdwtable  dwcon1 = new xdwtable;
      dwcon1.setNativePointer(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 = new xdwtable;
      dw_base.setNativePointer(GetControl(L"dw_base"));
      xaserverarg args;
      xml x;
      dw_base.DwUpdateAllTo(x);
      //trace(x.xml());
      //主联系人
      xstring spGuid;
      KXMLDOMElement e;
      var 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 = new xdwtable;
      dw_base.setNativePointer(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 = new xdwtable;
      dw_base.setNativePointer(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;
         }
         int OnXCommand(ref TXCommandEvent evt,int p)
      }
      //只能选一个主联系人
      else if (colname == L"PPrimaryFlag" && coldata == L"Y")
      {
         xdwtable dw_pc;
         dw_pc = new xdwtable;
         dw_pc.setNativePointer(dw_base.FindDwTable(L"item"));
         if (dw_pc)
         {
            return OnCmdDispatch(evt.pStrID);
         }
         int OnCellChanged(ref TNotifyEvent evt,int p)
         {
            dw_base = new xdwtable__;
            dw_base.setNativePointer(this.GetControl("dw_base"));
            ref DWNMHDR  hdr = evt.pnmh;
            string colname=hdr.colname;
            string coldata = hdr.data;
            trace(colname);
            if(colname=="ForwarderNo")
            int i;
            for (i = 1; i <= dw_pc.GetRowCount(); i++)
            {
               string cspec = dw_base.GetItemString(1,1);
               trace(cspec);
               string SpecRule="^\\d*$";
               xaserverarg__ args = new xaserverarg__;
               args.setNativePointer(args.CreateInstance());
               args.AddArg("CSpec",cspec);
               args.AddArg("SpecRule",SpecRule);
               xml__  x= new xml__;
               x.setNativePointer(xml__::CreateInstance());
               getUrl("/sale/data/LogisticsCode/pref/forwarderno/check",args.GetString(),x);
               if(x.GetXmlDoc().selectSingleNode("root/spec"))
               {
                  alert("请输入数字!");
                  return 0;
               }
               if (i != hdr.row)
                  dw_pc.SetItemString(i, L"PPrimaryFlag", L"N");
            }
               //只能选一个主联系人
            else if (colname == "PPrimaryFlag" && coldata == "Y")
            {
               xdwtable__ dw_pc;
               dw_pc = new xdwtable__;
               dw_pc.setNativePointer(dw_base.FindDwTable("item"));
               if (dw_pc)
               {
                  int i;
                  for (i=1;i <= dw_pc.GetRowCount();i++)
                  {
                     if (i != hdr.row)
                        dw_pc.SetItemString(i,"PPrimaryFlag","N");
                  }
               }
            }
            return 1;
         }
         int OnAttachEvent()
         {
            AttachEvent("WM_XCOMMAND",OnXCommand);
            //AttachEvent("WM_SETFOCUS",OnSetFocus);
            AttachEvent("dw_base","DWV_ITEMCHANGED",OnCellChanged);
            return 0;
         }
         int onload()
         {
            dw_base = new xdwtable__;
            dw_base.setNativePointer(this.GetControl("dw_base"));
            OnAttachEvent();
            //if(!m_configDoc) return -1;
            maint::onload();
            OnClear();
         }
      }
      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()
   {
      dw_base = new xdwtable;
      dw_base.setNativePointer(GetControl(L"dw_base"));
      ]
   ]
]
      OnAttachEvent();
      //if(!m_configDoc) return -1;
      maint::onload();
      OnClear();
   }
};