xj qian
2024-07-16 7a91c3a1ed37b0332d4ff0ebeae60bd6da3665c0
jrj/project/business/BasicCode/ShipcompanyMaint.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,320 @@
#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 publiccode::GetGuid();
   }
   int OnClear() {
      if (m_EntityID == L"") {
         m_userid = publiccode::GetUser().id;
         m_username = publiccode::GetUser().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", publiccode::GetCurrentDate());
      }
      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"")
         {
            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);
      }
      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"")
         {
            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"")
            {
               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"1");
               dw_base.SetItemString(1, L"PrimaryContactID", dwcon.GetItemString(1, L"ContactID"));
            }
         }
      }
      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"))
         {
            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;
         }
      }
      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;
   }
   int onload()
   {
      OnAttachEvent();
      //if(!m_configDoc) return -1;
      maint::onload();
      OnClear();
   }
};