xj qian
2024-07-17 b1d01ea6fa62ce12c2e592b3315186f6b3c8359d
jrj/project/business/SystemSettings/level.Customer.v3.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,375 @@
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
class  __declspec(dllexport) levelCustomerv3 : public listwin
{
public:
   xdwgrid dw_goods;
   xtreeview tv_1;
   xcombobox ddlb_1;
   int   changeddlb;
   xstring m_sType; //type
   xstring m_sTypeTxt; //选中树的data
//   xstring m_searchtxt;
   int PIndex;
   xnode   m_agentNode;   //Agent Condition
   xstring   m_agentCond;   //Agent Node
public:
   levelCustomerv3(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
public:
   static levelCustomerv3* CreateInstance(void* implPtr, void* hWnd)
   {
      levelCustomerv3* pWin = new levelCustomerv3(implPtr, (HWND)hWnd);
      return pWin;
   }
   int OnPreRetrieve()
   {
      xml x ;
      xaserverarg arg ;
      ;
      arg.AddArg(L"pageindex", xstring(PIndex)); //第几页
      arg.AddArg(L"pagenumber", xstring(m_pageNumber)); //每页数量
      arg.AddArg(L"QueryTxt",m_QueryTxt );
      arg.AddArg(L"sType", m_sType);//没有参数
      arg.AddArg(L"sTypeTxt", m_sTypeTxt);//没有参数
      if(getUrl(L"/sale/data/"+GetEntityName(1)+L"/entity/list",arg.GetString(),x)!=1)
      {
         alert(L"出现错误请联系管理员!");
         return 0;
      }else
      {
         KXMLDOMElement e=x.documentElement();
         if(listwin::dw_pages.ptr_native_ && e.selectSingleNode(L"@TotalPage"))
         {
            xstring s=e.selectSingleNode(L"@TotalPage").text(); //总数量
            listwin::dw_pages.SetMaxPage(s.toInt());
         }
         listwin::dw_list.Retrieve(x);
         listwin::dw_list.Redraw();
         listwin::dw_list.SetReadOnly(true);
      }
      return 1;
   }
   int OnChangePages(TEvent* evt, int p)
   {
      PAGENMHDR& h = *(PAGENMHDR*)evt->notify.pnmh;
      int c = h.cur;
      HCURSOR hCursor = xutil::SetCursorWait();
      OnRetrieve();
      PIndex=c;
      xutil::RestoreCursor(hCursor);
      return 1;
   }
   int ViewUpdate(int pr,xstring updateItem,xaserverarg  arg)
   {
      if(updateItem == L"refresh")
      {
         xdwpages zz = GetControl(L"pages");
         int h = zz.SetCurPage(1);
         OnRetrieve();
      }
      return 1;
   }
   //树选择
   int OnTreeSelChanged(TEvent* evt, int p)
   {
      if (changeddlb != 1)
      {
         HTREEITEM h=tv_1.GetSelectedItem();
         KXMLDOMElement e = tv_1.GetItemData(h);
         xstring t = e.selectSingleNode(L"@type").text();
         m_sType=t+L"";
         xstring txt = e.selectSingleNode(L"@code").text();
         if (txt == L"")
            txt = e.selectSingleNode(L"@name").text();
         m_sTypeTxt= txt+L"";
         PIndex= 1;
         OnRetrieve();
      }
      return 1;
   }
   int  createSubTree(HTREEITEM h, KXMLDOMElement ele)
   {
      KXMLDOMNodeList nlist=ele.selectNodes(L"item");
      int i;
      int s=nlist.length();
      if (s>0)
         for (i=0; i<s; i++)
         {
            KXMLDOMElement* e = new KXMLDOMElement(nlist.item(i));
            xstring name = e->selectSingleNode(L"@name").text();
            HTREEITEM hw = tv_1.InsertChildItem(h, name, (LPARAM)e, 15);
            createSubTree(hw, *e);
         }
      return 1;
   }
   int OnCreateTree(xstring sType)
   {
      while (tv_1.GetRootItem()>0)
         tv_1.DeleteItem(tv_1.GetRootItem());
      xml x ;
      xaserverarg arg ;
      ;
      arg.AddArg(L"sType",sType);
      if(getUrl(L"/sale/data/"+GetEntityName(1)+L"/pref/list/tree",arg.GetString(),x)!=1)
      {
         trace(x.text());
         return -1;
      }else
      {
         KXMLDOMNodeList nlist=x.selectNodes(L"root/item");
         int len = nlist.length();
         if (len >0)
         {
            int i;
            for (i=0;i <len; i++)
            {
               KXMLDOMElement* e = new KXMLDOMElement(nlist.item(i));
               xstring name = e->selectSingleNode(L"@name").text();
               HTREEITEM hw = tv_1.InsertChildItem(0, name, (LPARAM)e, 15);
               createSubTree(hw, *e);
               tv_1.ExpandItem(hw);
            }
            tv_1.ExpandItem(0);
         }
      }
      return 1;
   }
   //xcombobox下拉
   int OnSelectDdlb(TEvent* evt, int p)
   {
      changeddlb = 1;
      int CB_GETCURSEL = 0x0147;
      int nIndex = SendMessageW(ddlb_1.GetHWND(), CB_GETCURSEL, 0, 0);
      KXMLDOMElement e = ddlb_1.GetElement();//GetitemData(wid,nIndex);//ddlb_1.GetElement();
      KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring((nIndex + 1)) + L"]");
      xstring text = e2.selectSingleNode(L"@element").text();
      OnCreateTree(text);
      changeddlb = 0;
      return 1;
   }
   int OnDeleteRow()
   {
      int row = listwin::dw_list.GetNextSelectRow(1);
      if (row < 1){
         row = listwin::dw_list.GetRow();
         if (row < 1) {
            return -1;
         }
      }
      KXMLDOMElement e = listwin::dw_list.GetRowElement(row);
      xstring sguid = e.selectSingleNode(L"@guid").text();
      xstring sName = e.selectSingleNode(L"Name").text()+(xstring)L"";
      int  MB_YESNO = 0x00000004;
      int  IDYES =  6;
      if(MessageBox(GetHWND(),L"确认要删除客户 "+sName+L" çš„信息吗?",L"提示",MB_YESNO)!=IDYES) return 1;
      xml x ;
      xaserverarg arg ;
      ;
      arg.AddArg(L"guid",sguid);
      if (xurl::post(L"/sale/data/"+GetEntityName(1)+L"/entity/delete",arg.GetString(),x) != 1)
      {
         xstring error = x.text();
         trace(error);
      }
      else
      {
         listwin::dw_list.DeleteRow(row);
      }
      return 1;
   }
   int OnSelectAllRow()
   {
      int rows =  listwin::dw_list.GetRowCount();
      if(rows < 1) return -1;
       listwin::dw_list.SelectRow(1, rows, true);
       listwin::dw_list.Redraw();
      return 1;
   }
   int OnRClick(TEvent* evt, int p)
   {
      return 1;
   }
   int OnLogOff()
   {
      return 1;
   }
   //设置层级弹出窗与保存
   int OnLevelCustomer()
   {
      xaserverarg arg ;
      ;
      OpenWindow(L"dev:xpage[maint.Level.Customer3.vx]", arg);
      xml ux ;
      ux.loadXML(L"<Partys/>");
      KXMLDOMElement ele = ux.documentElement();
      if(arg.GetArgString(L"ok")==L"true")
      {
         xml x ;
         x.loadXML(arg.GetArgString(L"arg"));
         KXMLDOMElement uele = x.documentElement();
         xstring ParentPartyID = uele.selectSingleNode(L"//ParentPartyID").text();
         xstring ParentPartyName = L"";
         xstring GroupPartyID = uele.selectSingleNode(L"//GroupPartyID").text();
         xstring GroupPartyName = L"";
         if( uele.selectSingleNode(L"//ParentPartyID/@_displaystring"))
            ParentPartyName = uele.selectSingleNode(L"//ParentPartyID/@_displaystring").text();
         if(uele.selectSingleNode(L"//GroupPartyID/@_displaystring"))
            GroupPartyName = uele.selectSingleNode(L"//GroupPartyID/@_displaystring").text();
         int row =  dw_list.GetNextSelectRow(1);
         while(row > 0)
         {
            dw_list.SetItemString(row,L"ParentPartyID",ParentPartyID);
            dw_list.SetItemDisplayString(row,L"ParentPartyID",ParentPartyName);
            dw_list.SetItemString(row,L"GroupPartyID",GroupPartyID);
            dw_list.SetItemDisplayString(row,L"GroupPartyID",GroupPartyName);
            ele.appendChild(dw_list.GetRowElement(row).cloneNode(-1));
            row =  dw_list.GetNextSelectRow(row + 1);
         }
         dw_list.Redraw();
         arg.AddArg(L"content",ele.xml());
         if (getUrl(L"/sale/data/CustomerV3/level/update",arg.GetString(),x)!=1)
         {
            trace(x.text());
             alert(L"设置错误!");
            return -1;
         }else
         {
             alert(L"设置成功!");
         }
      }
      return 1;
   }
   int PreOnCmdDispatch(xstring comdid)
   {
      if(comdid.find(L"action:LogOff",0)>=0) return OnLogOff();
      if(comdid.find(L"action:bill.delete",0)>=0) return OnDeleteRow();
      //if(comdid==L"action:search1") return GridSearch();
      if(comdid==L"action:bill.refresh")
      {
         return OnRetrieve();
      }
      if(comdid==L"action:level.customer")
      {
         return OnLevelCustomer();
      }
      return 1;
   }
   int OnRowChangedEx(TEvent* evt, int p)
   {
      DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
      int row = hdr.row;
      KXMLDOMElement ele = listwin::dw_list.GetRowElement(row);
      xstring entity = ele.selectSingleNode(L"CustomerID").text();
      xml x ;
      xaserverarg arg ;
      ;
      arg.AddArg(L"EntityID",entity);
      if (getUrl(L"/sale/data/CustomerV3/entity/customeritem",arg.GetString(),x)!=1)
      {
         trace(x.text());
         return -1;
      }else
      {
         dw_goods.Retrieve(x);
         dw_goods.Redraw();
         dw_goods.SetReadOnly(true);
      }
      return 1;
   }
   int PostOnAttachEvent()
   {
      //获得树的选择事件
      AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&levelCustomerv3::OnTreeSelChanged);
      AttachEvent(L"cbx_1",L"CBN_SELCHANGE", (FEvent)&levelCustomerv3::OnSelectDdlb);
      AttachEvent(L"pages",L"PAGE_CLICK", (FEvent)&levelCustomerv3::OnChangePages);
      AttachEvent(L"dw_list",L"DWV_RCLICKED", (FEvent)&levelCustomerv3::OnRClick);//鼠标右键
      //AttachEvent(L"dw_list",L"DWV_CLICKED",OnClick);//鼠标右键
      AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED", (FEvent)&levelCustomerv3::OnRowChangedEx);
      return 1;
   }
   int onload()
   {
      PIndex=1;
      listwin::m_QueryTxt =L""; //查询条件
      m_sType=L""; //type
      m_sTypeTxt=L""; //选中树的data
      listwin::onload();
      tv_1 =  GetControl(L"tv_1");
      ddlb_1 = GetControl(L"cbx_1");
      changeddlb = 0;
      OnCreateTree(L"Source");
      dw_goods = GetControl(L"dw_goods");
      dw_goods.openUrl(L"/sale/view/CustomerV3/template/customer/customeritem");
      return 1;
   }
   int onloaded()
   {
      listwin::onloaded();
      xstring EntityID;
      int row =  dw_list.GetRow();
      if(row<0 || row>dw_list.GetRowCount()) return (xstring)L"";
      KXMLDOMElement ele = dw_list.GetRowElement(row);
      xstring id = listwin::m_configDoc.selectSingleNode(L"//entity/EntityID[1]").text();
      if(ele.selectSingleNode(id))
         EntityID = ele.selectSingleNode(id).text();
      return 1;
   }
};