LiFan
2024-07-16 6a4764ee747fff45d89ef48f98873d6409e4f85e
jrj/project/business/BasicCode/ShipcompanyMaint.cpp
@@ -1,316 +1,319 @@
use "system.vl"
use "win.vl"
use "maint.vl"
use "file.vl"
use "dev:vm[xcell.vm]"
unit vbusiness.entity
[
   ShipcompanyMaint is extend maint;
   about ShipcompanyMaint
   [
      field:
      [
         msxml::IXMLDOMDocument m_configDoc;
         string m_userid;
         string m_username;
         string ContactID;
         xdwtable__ dw_base;
         xcell__ dw_cell;
      ]
      method:
      [
         int alert(string str)
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
class __declspec(dllexport) ShipcompanyMaint : public xframe
{
public:
   KXMLDOMDocument m_configDoc;
   xstring m_userid;
   xstring m_username;
   xstring ContactID;
   xdwtable dw_base;
   xcell dw_cell;
public:
   ShipcompanyMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
public:
   static ShipcompanyMaint* CreateInstance(void* implPtr, void* hWnd)
   {
      ShipcompanyMaint* pWin = new ShipcompanyMaint(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;
   }
   int OnSetFocus(TEvent* evt, LPARAM p)
   {
      SetAgent(L"maint");
      return 1;
   }
   xstring GetGuid() {
      return TApp::GetGuid();
   }
   int OnClear() {
      if (m_EntityID == L"") {
         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"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"Type", L"6");
         dw_base.SetItemString(1, L"AddressID", GetGuid());
         dw_base.SetItemString(1, L"PADIdentifyAddressFlag", L"Y");
         dw_base.SetItemString(1, L"PrimaryFlag", L"Y");
         dw_base.SetItemString(1, L"EnterName", m_userid);
         dw_base.SetItemDisplayString(1, L"EnterName", m_username);
         dw_base.SetItemString(1, L"CreateDate", TApp::GetCurDate());
      }
      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;
         }
         int OnSetFocus(ref TNotifyEvent evt,int p)
         {
            SetAgent("maint");
            return 1;
         }
         string GetGuid(){
            return TApp::GetGuid();
         }
         int OnClear(){
            if(this.m_EntityID ==""){
               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,"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,"Type","6");
               dw_base.SetItemString(1,"AddressID",GetGuid());
               dw_base.SetItemString(1,"PADIdentifyAddressFlag","Y");
               dw_base.SetItemString(1,"PrimaryFlag","Y");
               dw_base.SetItemString(1,"EnterName",m_userid);
               dw_base.SetItemDisplayString(1,"EnterName",m_username);
               dw_base.SetItemString(1,"CreateDate",TApp::GetCurDate());
            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.DeleteRow(row);
         dw.SetRow(row - 1);
      }
      return 1;
   }
   xstring getGoodsNo()
   {
      xml x;
      xaserverarg arg;
      if (getUrl(L"/sale/data/LogisticsCode/pref/shipcompany/PartyNo", arg.GetString(), x) != 1)
      {
         trace(x.xml());
         return L"";
      }
      KXMLDOMElement e = x.documentElement();
      if (e)
      {
         xstring code = e.text();
         trace(code);
         return L"P" + code;
      }
      return  L"P1000";
   }
   int OnPreSave()
   {
      dw_base.AcceptText();
      dw_base = new xdwtable;
      dw_base.setNativePointer(GetControl(L"dw_base"));
      xstring ShipNo = dw_base.GetItemString(1, L"ShipNo");
      if (ShipNo == L"")
      {
         dw_base.SetItemString(1, L"ShipNo", 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"")
         {
            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")
            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");
            trace(aTemp);
            if (aTemp != L"")
            {
               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(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;
                  }
               }*/
               dw.DeleteRow(row);
               dw.SetRow(row - 1);
            }
            return 1;
         }
         string getGoodsNo()
         {
            xml__ x=new xml__;
            x.setNativePointer(xml__::CreateInstance());
            xaserverarg__ arg=new xaserverarg__;
            arg.setNativePointer(arg.CreateInstance());
            if (getUrl("/sale/data/LogisticsCode/pref/shipcompany/PartyNo",arg.GetString(),x) != 1)
            {
               trace(x.GetXml());
               return "";
            }
            msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
            if(e)
            {
               string code = e.text;
            trace(code);
               return "P"+code;
            }
            return "P1000";
         }
         int OnPreSave()
         {
            dw_base.AcceptText();
            dw_base = new xdwtable__;
            dw_base.setNativePointer(this.GetControl("dw_base"));
            string ShipNo = dw_base.GetItemString(1,"ShipNo",0);
            if (ShipNo=="" || ShipNo== nil)
               {
               dw_base.SetItemString(1,"ShipNo",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);
                  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","1");
                        dw_base.SetItemString(1,"PrimaryContactID",dwcon.GetItemString(1,"ContactID"));
                     }
               }
            }
            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","Shipcompany.dbmap");
            //arg.AddArg("m_dels",m_dels);
            if (getUrl("/sale/data/LogisticsCode/entity/shipcompany/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();
               setCellReadOnly();
               dwcon.SetItemString(i, L"ContactID", GetGuid());
               dwcon.SetItemString(i, L"PCStatus", L"1");
               dw_base.SetItemString(1, L"PrimaryContactID", dwcon.GetItemString(1, L"ContactID"));
            }
            dw_base.Redraw();
            //m_dels="";
            return 0;
         }
         int OnCmdDispatch(string comdid)
         }
      }
      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"Shipcompany.dbmap");
      //arg.AddArg(L"m_dels",m_dels);
      if (getUrl(L"/sale/data/LogisticsCode/entity/shipcompany/save", arg.GetString(), x) != 1)
      {
         trace(L"error:" + (xstring)x.xml());
         alert(L"保存失败!");
         return 0;
      }
      else
      {
         trace(x.xml());
         if (x.selectSingleNode(L"error"))
         {
            trace(comdid);
            if(comdid.find("action:bill.row.add",0)>=0) {
               OnAddrow();
            }
            else if(comdid.find("bill.row.insert",0)>=0) {
               OnInsertRow();
            }
            else if(comdid.find("bill.row.delete",0)>=0) {
               OnDeleteRow();
            }
            else if(comdid.find("bill.save",0)>=0) {
               trace(1);
               dw_base.AcceptText();
               OnSave();
            }
            alert(L"保存出错2!");
            return 0;
         }
         alert(L"保存成功!");
         dw_base.ResetUpdateStatus();
         setCellReadOnly();
      }
      dw_base.Redraw();
      //m_dels=L"";
      return 0;
   }
   int OnCmdDispatch(xstring comdid)
   {
      trace(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);
         dw_base.AcceptText();
         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;
      //trace(colname);
      if (colname == L"ShipNo")
      {
         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)
         {
            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;
            //trace(colname);
            if(colname=="ShipNo")
            {
               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;
               }
            }
            return 1;
         }
         int OnAttachEvent()
         {
            AttachEvent("WM_XCOMMAND",OnXCommand);
            AttachEvent("WM_SETFOCUS",OnSetFocus);
            AttachEvent("dw_base","DWV_ITEMCHANGED",OnCellChanged);
            return 0;
         }
         int onload()
         {
            OnAttachEvent();
            //if(!m_configDoc) return -1;
      }
      return 1;
   }
   int OnAttachEvent()
   {
      AttachEvent(L"WM_XCOMMAND", (FEvent)&ShipcompanyMaint::OnXCommand);
      AttachEvent(L"WM_SETFOCUS", (FEvent)&ShipcompanyMaint::OnSetFocus);
      AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&ShipcompanyMaint::OnCellChanged);
      return 1;
   }
            maint::onload();
            OnClear();
         }
      ]
   ]
]
   int onload()
   {
      OnAttachEvent();
      //if(!m_configDoc) return -1;
      maint::onload();
      OnClear();
   }
};