From a21121b4ad92f88af51fbf4ab9e1011f2789ff83 Mon Sep 17 00:00:00 2001
From: LiFan <2308045698@qq.com>
Date: 星期五, 19 七月 2024 18:34:49 +0800
Subject: [PATCH] update

---
 jrj/project/business/VATNotify/maint.vatinvoice..cpp  |  400 ++++++++++++++
 jrj/project/business/VATNotify/del.vatinvoice.cpp     |  180 ++++++
 jrj/project/business/VATNotify/list.vatinvoice.cpp    |  329 ++++++++++++
 jrj/project/business/VATNotify/maint.vatinvoiceEx.cpp |  139 +++++
 jrj/project/business/VATNotify/VATInvoiceNew.cpp      |  529 +++++++++++++++++++
 jrj/ext-jrj/ext-jrj.vcxproj                           |    5 
 jrj/ext-jrj/ext-jrj.vcxproj.filters                   |   21 
 7 files changed, 1,603 insertions(+), 0 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index 6827c10..4cb8fbc 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -942,18 +942,23 @@
     <ClCompile Include="..\project\business\SystemSettings\view.assignadjust.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="..\project\business\VATNotify\del.vatinvoice.cpp" />
+    <ClCompile Include="..\project\business\VATNotify\list.vatinvoice.cpp" />
     <ClCompile Include="..\project\business\VATNotify\list.vatnotify.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\VATNotify\maint.papercard.vatnotify.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="..\project\business\VATNotify\maint.vatinvoice..cpp" />
+    <ClCompile Include="..\project\business\VATNotify\maint.vatinvoiceEx.cpp" />
     <ClCompile Include="..\project\business\VATNotify\simple.maint.vatnotify.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\VATNotify\update.vatnotify.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="..\project\business\VATNotify\VATInvoiceNew.cpp" />
     <ClCompile Include="..\project\business\VATNotify\VATNotifyParse.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
diff --git a/jrj/ext-jrj/ext-jrj.vcxproj.filters b/jrj/ext-jrj/ext-jrj.vcxproj.filters
index cdd5789..be47a63 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj.filters
+++ b/jrj/ext-jrj/ext-jrj.vcxproj.filters
@@ -1139,5 +1139,26 @@
     <ClCompile Include="..\project\business\PO\PO.maint.item.line.cpp">
       <Filter>project\business\PO</Filter>
     </ClCompile>
+    <ClCompile Include="..\project\business\VATNotify\del.vatinvoice.cpp">
+      <Filter>project\business\VATNotify</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\VATNotify\list.vatinvoice.cpp">
+      <Filter>project\business\VATNotify</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\VATNotify\maint.vatinvoice..cpp">
+      <Filter>project\business\VATNotify</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\VATNotify\maint.vatinvoiceEx.cpp">
+      <Filter>project\business\VATNotify</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\VATNotify\VATInvoiceNew.cpp">
+      <Filter>project\business\VATNotify</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\AP\list.RefundGDNLine.Entity.xarch.cpp">
+      <Filter>project\business\AP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\AP\list.RefundSourcingLine.Entity.xarch.cpp">
+      <Filter>project\business\AP</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/jrj/project/business/VATNotify/VATInvoiceNew.cpp b/jrj/project/business/VATNotify/VATInvoiceNew.cpp
new file mode 100644
index 0000000..0bf8ddc
--- /dev/null
+++ b/jrj/project/business/VATNotify/VATInvoiceNew.cpp
@@ -0,0 +1,529 @@
+#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) VATInvoiceNew :  public xframe
+	{
+	public:
+		xdwgrid	dw_1;
+		xdwgrid	dw_2;
+		xlayersheet m_layer;
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		VATInvoiceNew(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static VATInvoiceNew* CreateInstance(void* implPtr, void* hWnd)
+		{
+			VATInvoiceNew* pWin = new VATInvoiceNew(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+		
+				
+		int OnDoubleClicked(TEvent* evt, int p)
+		{
+			HCURSOR hCursor = xutil::SetCursorWait();
+			int col = dw_1.GetColumn();
+			//if(dw_1.GetColumnName(col)==L"Amount")
+			dw_1.ItemChangeTo(dw_1.GetRow(),L"VATBillAmount",dw_1.GetItemString(dw_1.GetRow(),L"NAmount"));
+			dw_1.Redraw();
+			xutil::RestoreCursor(hCursor);
+			return 1;		
+		}
+				
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			//SetAgent();
+			return 1;
+		}
+		
+		int ResetDataForContinue()
+		{
+			int i = 1;
+			for (i=dw_1.GetRowCount(); i>=1; i --)
+			{
+				xstring Amount = dw_1.GetItemString(i,L"VATBillAmount");
+				if (Amount != L""  && Amount != L"0.00"  && Amount != L".00")
+				{
+					dw_1.DeleteRow(i);
+				}
+			}
+			for (i=dw_2.GetRowCount(); i>=1; i --)
+			{
+				dw_2.DeleteRow(i);
+			}
+			dw_1.ResetUpdateStatus();
+			dw_2.ResetUpdateStatus();
+
+			return 1;
+		}
+		
+		int OnTabSelectedSheet(TEvent* evt, int p)
+		{
+			int index = m_layer.GetSheetIndex();
+			if (index == 1)
+			{
+				dw_1.AcceptText();
+				while (dw_2.GetRowCount() >0) dw_2.DeleteRow(0);
+				
+				int i=0;
+				for (i=1;i <=dw_1.GetRowCount(); i++)
+				{
+					xstring Amount = dw_1.GetItemString(i,L"VATBillAmount");
+					//trace(L"\r\n"+Amount);
+					if (Amount != L""  && Amount != L"0.00"  && Amount != L".00")
+					{
+						
+						xstring ClassifyID = dw_1.GetItemString(i,L"NClassifyID");
+						xstring InvoiceNo = dw_1.GetItemString(i,L"NInvoiceNo");
+						if(InvoiceNo==L"") dw_1.GetItemString(i,L"InvoiceNo");
+						xstring SupplierID = dw_1.GetItemString(i,L"SupplierID");
+						xstring SupplierName = dw_1.GetItemDisplayString(i,L"SupplierID");
+						xstring GRNDate=dw_1.GetItemString(i,L"GRNDate");
+						xstring HasGRN=dw_1.GetItemString(i,L"HasGRN");
+						xstring HasGRNOne=dw_1.GetItemString(i,L"HasGRNOne");
+						xstring HasGRNTwo=dw_1.GetItemString(i,L"HasGRNTwo");
+						xstring SalespersonID=dw_1.GetItemString(i,L"SalespersonID");
+						xstring SalespersonIDName = dw_1.GetItemDisplayString(i,L"SalespersonID");
+						xstring Merchandiser=dw_1.GetItemString(i,L"Merchandiser");
+						xstring PurcharID=dw_1.GetItemString(i,L"PurcharID");
+						xstring CustomerName=dw_1.GetItemString(i,L"CustomerName");
+						int row;
+						bool inserted = false;
+						for(row = 1; row <= dw_2.GetRowCount(); row++)
+						{
+							if( InvoiceNo == dw_2.GetItemString(row,L"NInvoiceNo") && SupplierID== dw_2.GetItemString(row,L"SupplierID")) break;
+						}
+						if(row > dw_2.GetRowCount())
+						{	
+							dw_2.InsertRow(0); 
+							inserted = true;
+						}
+						
+						if(inserted)
+						{
+							xstring VATInvoiceID = publiccode::GetGuid();
+							dw_1.SetItemString(i,L"VATInvoiceID",VATInvoiceID);
+							dw_2.SetItemString(row,L"VATInvoiceID",VATInvoiceID);
+							dw_2.SetItemString(row,L"VATSupplierID",SupplierID);
+							dw_2.SetItemDisplayString(row,L"VATSupplierID",SupplierName);
+							dw_2.SetItemString(row,L"SupplierID",SupplierID);
+							dw_2.SetItemDisplayString(row,L"SupplierID",SupplierName);
+							dw_2.SetItemString(row,L"NInvoiceNo",InvoiceNo);
+							dw_2.SetItemString(row,L"DeduceAmount",dw_1.GetItemString(i,L"DeduceAmount"));
+							dw_2.SetItemString(row,L"OverAmount",dw_1.GetItemString(i,L"OverAmount"));
+							dw_2.SetItemString(row,L"VATBillAmount",dw_1.GetItemString(i,L"VATBillAmount"));
+							dw_2.SetItemString(row,L"NetAmount",dw_1.GetItemString(i,L"NetAmount"));
+							dw_2.SetItemString(row,L"VATAmount",dw_1.GetItemString(i,L"VATAmount"));
+							dw_2.SetItemString(row,L"RefundAmount",dw_1.GetItemString(i,L"RefundAmount"));
+							xstring sdate = xstring(publiccode::GetCurrentDate()).left(10);
+							dw_2.SetItemString(row,L"CreateDate",sdate);
+							dw_2.SetItemString(row,L"VATDate",sdate);
+							dw_2.SetItemString(row,L"VATInvoiceDate",sdate);
+							dw_2.SetItemString(row,L"GRNDate",GRNDate);
+							dw_2.SetItemString(row,L"HasGRN",HasGRN);
+							dw_2.SetItemString(row,L"HasGRNOne",HasGRNOne);
+							dw_2.SetItemString(row,L"HasGRNTwo",HasGRNTwo);
+							xstring suserid = publiccode::GetUser().id;
+							xstring susername = publiccode::GetUser().name;
+							dw_2.SetItemString(row,L"CreatorID",suserid);
+							dw_2.SetItemDisplayString(row,L"CreatorID",susername);
+							dw_1.SetItemString(i,L"VATInvoiceID",VATInvoiceID);
+							dw_2.SetItemString(row,L"Salesperson",SalespersonID);
+							dw_2.SetItemDisplayString(row,L"Salesperson",SalespersonIDName);
+							dw_2.SetItemString(row,L"Merchandiser",Merchandiser);
+							dw_2.SetItemString(row,L"PurcharID",PurcharID);
+							dw_2.SetItemString(row,L"CustomerName",CustomerName);
+						}else
+						{
+							dw_1.SetItemString(i,L"VATInvoiceID",dw_2.GetItemString(row,L"VATInvoiceID"));
+							double amt = 0.0;
+							amt = dw_2.GetItemDouble(row,L"DeduceAmount");
+							amt += dw_1.GetItemDouble(i,L"DeduceAmount");
+							dw_2.SetItemDouble(row,L"DeduceAmount",amt);
+						
+							amt = dw_2.GetItemDouble(row,L"OverAmount");
+							amt += dw_1.GetItemDouble(i,L"OverAmount");
+							dw_2.SetItemDouble(row,L"OverAmount",amt);
+
+							amt = dw_2.GetItemDouble(row,L"RefundAmount");
+							amt += dw_1.GetItemDouble(i,L"RefundAmount");
+							dw_2.SetItemDouble(row,L"RefundAmount",amt);
+
+							amt = dw_2.GetItemDouble(row,L"VATBillAmount");
+							amt += dw_1.GetItemDouble(i,L"VATBillAmount");
+							dw_2.SetItemDouble(row,L"VATBillAmount",amt);
+
+							amt = dw_2.GetItemDouble(row,L"NetAmount");
+							amt += dw_1.GetItemDouble(i,L"NetAmount");
+							dw_2.SetItemDouble(row,L"NetAmount",amt);
+
+							amt = dw_2.GetItemDouble(row,L"VATAmount");
+							amt += dw_1.GetItemDouble(i,L"VATAmount");
+							dw_2.SetItemDouble(row,L"VATAmount",amt);
+						}
+					}
+				}
+			}
+			return 1;
+		}
+		
+		int OnSave(bool continueAdd)
+		{
+			dw_1.AcceptText();
+			dw_2.AcceptText();
+			xstring error;
+			xstring str;
+			xml x ;
+			xaserverarg arg ;
+			
+			
+			
+			dw_1.DwUpdateAllToEx(x);
+			xml x0 = new xml;
+			
+			x0.loadXML(L"<data/>");
+			
+			KXMLDOMNodeList t = x.selectNodes(L"data/Item[@update.modify]");
+			KXMLDOMElement e1= x0.documentElement();
+			int len = t.length();
+			for(int i=0;i<len;i++)
+			{
+				e1.appendChild(t.item(i));
+			}
+			arg.AddArg(L"content",x0.xml());
+			
+
+			if(xurl::get(L"/sale/data/VATNotify/base/update", arg.GetString(),x0)!=1)
+			{
+				error = x0.text();
+				alert(L"err:"+error);
+				return 1;
+			}
+			str = x0.documentElement().getAttribute(L"text");
+			if(str != L"true")
+			{
+				alert(L"保存失败!");
+				return 1;
+			}
+			
+			dw_2.DwUpdateAllToEx(x);
+			arg.AddArg(L"content",x.xml());
+			
+			
+			if(xurl::get(L"/sale/data/VATNotify/vatinvoice/update", arg.GetString(),x)!=1)
+			{
+				error = x.text();
+				alert(L"err:"+error);
+				return 1;
+			}
+			str = x.documentElement().getAttribute(L"text");
+			if(str != L"true")
+			{
+				alert(L"保存失败!");
+				return 1;
+			}			
+			
+			dw_1.ResetUpdateStatus();	
+			dw_2.ResetUpdateStatus();	
+			
+			if(!continueAdd)
+			{
+				alert(L"保存成功!");
+				CloseWindow();
+			}
+			else 
+			{
+				ResetDataForContinue();
+				m_layer.SelectSheet(0);
+			}
+			return 1;
+		}
+		
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			int index;
+			if (comdid==L"xmPrev")
+			{
+				index = m_layer.GetSheetIndex();
+				index --;
+				m_layer.SelectSheet(index);
+			}
+			else if (comdid==L"xmNext") 
+			{
+				index = m_layer.GetSheetIndex();
+				index ++;
+				m_layer.SelectSheet(index);
+			}
+			else if(comdid==L"xmCancel")
+			{
+				CloseWindow();
+				return 1;
+			}
+			else if(comdid==L"xmOk")
+			{
+				return OnSave(false);
+			}
+			else if(comdid==L"xmOkEx")
+			{
+				return OnSave(true);
+			}
+			else if(comdid==L"xmQuery")
+			{
+				OnRetrieve();
+				return 1;
+			}
+			return 0;
+		}
+		
+		int RecalcVatAmt(int row)
+		{
+			double VatRate = dw_1.GetItemDouble(row,L"VATRate");
+			if((int)(VatRate*100) < 1) VatRate = 13.0;
+			double VATRefundRate = dw_1.GetItemDouble(row,L"VATRefundRate");
+			double billAmt = dw_1.GetItemDouble(row,L"VATBillAmount");
+			double VatAmt = billAmt /(100.0+VatRate)*VatRate;
+			double VATRefundAmt = billAmt /(100.0+VatRate)*VATRefundRate;
+			dw_1.SetItemDouble(row,L"VATAmount",VatAmt);
+			dw_1.SetItemDouble(row,L"RefundAmount",VATRefundAmt);
+			dw_1.SetItemDouble(row,L"NetAmount",billAmt - VatAmt);
+			return 1;
+		}
+			
+		int OnItemChanged(TEvent* evt, LPARAM p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			xstring colname=hdr.colname;
+			xstring value = hdr.data;
+			int row = hdr.row;
+			
+			if(value==L"") return 1;
+			if(colname==L"VATAmount"){
+				double VATAmount=dw_1.GetItemDouble(row,L"VATAmount");	
+				double billAmtt= dw_1.GetItemDouble(row,L"VATBillAmount");
+				
+				double v4= billAmtt - VATAmount;
+				int v5=(int)VATAmount;
+				if(v5>=0){
+					dw_1.SetItemDouble(row,L"NetAmount",v4);
+					dw_1.Redraw();
+				}
+			}
+			else if(colname==L"VATBillAmount")
+			{
+				RecalcVatAmt(row);
+			
+				if(value==L"" || value==L"0.00" || value==L".00")
+				{
+					dw_1.SetItemString(row,L"OverAmount",L"");
+					dw_1.SetItemString(row,L"DeduceAmount",L"");
+					dw_1.SetItemString(row,L"VATBillAmount",L"");
+				}else
+				{
+					double NAmount = dw_1.GetItemDouble(row,L"NAmount");
+					double billAmt = dw_1.GetItemDouble(row,L"VATBillAmount");
+					double Amt = NAmount - billAmt ;
+					int v1 =(int) Amt;
+					int v2 = (int)(billAmt - NAmount);
+					if(v2 < 0) v2 = - v2;
+					if(v1 <0 || v2<49 )
+					{
+						dw_1.SetItemDouble(row,L"OverAmount",billAmt - NAmount);
+						dw_1.SetItemString(row,L"DeduceAmount",L"");
+					}
+					else
+					{
+						dw_1.SetItemString(row,L"OverAmount",L"");
+						dw_1.SetItemDouble(row,L"DeduceAmount", NAmount - billAmt);
+					}
+				}
+				dw_1.Redraw();
+				/*
+				if ldec_notifyamt - dec(data) < 0 or abs(dec(data) - ldec_notifyamt)<=49  then
+							this.setItem(row,'kkamt',0)
+							this.setItem(row,'dkamt',dec(data) - ldec_notifyamt)
+					else	
+						this.setItem(row,'dkamt',0)
+						this.setItem(row,'kkamt',ldec_notifyamt - dec(data))
+					end if
+					
+					ll_decrate = this.getitemdecimal(row,'retax')
+					ll_incrate = this.getitemdecimal(row,'incrate')
+					if isnull(ll_decrate) then ll_decrate = 13
+					if isnull(ll_incrate) or ll_incrate=0 then ll_incrate = 17
+					this.setitem(row,'retaxamt',this.getItemDecimal(row,'billamt')/(100+ll_incrate)*ll_decrate)
+					this.setitem(row,'inctaxamt',this.getItemDecimal(row,'billamt')/(100+ll_incrate)*ll_incrate)
+				end if
+
+				if dwo.name='kkamt' or dwo.name='dkamt'  then
+					ls_prdname = this.object.supplier_cname[row]
+					if isnull(ls_prdname) then ls_prdname = ''
+					if ls_prdname <> '' then
+							ls_firstName = LeftW (trim(ls_prdname), 2)
+							ls_lastName = rightW (trim(ls_prdname), 1)
+							ls_comName = ls_firstName + ls_lastName
+					end if
+					
+					if ls_comName <> '产品部' then
+						this.setitem(row,'billamt',dec(this.Describe(L"evaluate('notifybuyamt - if(isnull(kkamt),0,kkamt) + if(isnull(dkamt),0,dkamt)',L"+xstring(row)+L")L")))
+					else
+						this.setitem(row,'billamt',dec(this.Describe(L"evaluate('prd_nbuyamt - if(isnull(kkamt),0,kkamt) + if(isnull(dkamt),0,dkamt)',L"+xstring(row)+L")L")))
+					end if
+					
+					ll_decrate = this.getitemdecimal(row,'retax')
+					ll_incrate = this.getitemdecimal(row,'incrate')
+					if isnull(ll_decrate) then ll_decrate = 13
+					if isnull(ll_incrate) or ll_incrate=0 then ll_incrate = 17
+					this.setitem(row,'retaxamt',this.getItemDecimal(row,'billamt')/(100+ll_incrate)*ll_decrate)
+					this.setitem(row,'inctaxamt',this.getItemDecimal(row,'billamt')/(100+ll_incrate)*ll_incrate)
+				*/				
+			}
+			else if(colname==L"DeduceAmount" || colname==L"OverAmount")
+			{
+				double dAmt = dw_1.GetItemDouble(row,L"DeduceAmount");
+				double oAmt = dw_1.GetItemDouble(row,L"OverAmount");
+				double nAmt = dw_1.GetItemDouble(row,L"NAmount");
+				dw_1.SetItemDouble(row,L"VATBillAmount",nAmt + oAmt - dAmt);
+				RecalcVatAmt(row);
+				dw_1.Redraw();
+			}
+			return 1;
+		}
+		
+		int OnItemChangedTwo(TEvent* evt, LPARAM p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			xstring colname=hdr.colname;
+			xstring value = hdr.data;
+			
+			
+			if (colname == L"RefundAmount") 
+			{
+				double RefundAmount2 = dw_2.GetItemDouble(hdr.row,L"RefundAmount");
+				dw_2.SetItemDouble(hdr.row,L"TaxfundAmount", xdouble((RefundAmount2)).round(2));
+			}
+			
+			double RefundAmount= dw_2.GetItemDouble(hdr.row,L"RefundAmount");
+			double TaxfundAmount1 = dw_2.GetItemDouble(hdr.row,L"TaxfundAmount");
+			//trace(L"RefundAmount+=+++L"+RefundAmount.toString()+L"====TaxfundAmount1+++L"+TaxfundAmount1.toString());
+			if(TaxfundAmount1 ==0.00)
+			{
+				dw_2.SetItemDouble(hdr.row,L"TaxfundAmount", xdouble((RefundAmount)).round(2));
+			}
+			if (colname == L"TaxfundAmount" || colname == L"AlreadyRefundAmount" || colname == L"RefundAmount") 
+			{
+				double TaxfundAmount = dw_2.GetItemDouble(hdr.row,L"TaxfundAmount");
+				double AlreadyRefundAmount = dw_2.GetItemDouble(hdr.row,L"AlreadyRefundAmount");
+				dw_2.SetItemDouble(hdr.row,L"NotRefundAmount", xdouble((TaxfundAmount - AlreadyRefundAmount)).round(2));
+			}
+			return 1;
+		}
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&VATInvoiceNew::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&VATInvoiceNew::OnSetFocus);
+			AttachEvent(L"dw_1",L"DWV_DOUBLECLICKED", (FEvent)&VATInvoiceNew::OnDoubleClicked);//行双击
+			AttachEvent(L"dw_1",L"DWV_ITEMCHANGED", (FEvent)&VATInvoiceNew::OnItemChanged);
+			AttachEvent(L"dw_2",L"DWV_ITEMCHANGED", (FEvent)&VATInvoiceNew::OnItemChangedTwo);
+			AttachEvent(L"tab_1", L"LYSN_SELECTEDSHEET", (FEvent)&VATInvoiceNew::OnTabSelectedSheet);
+			return 1;
+		}
+		
+		int  OnRetrieve()
+		{
+			xml x;
+		
+			xaserverarg arg ;
+			
+			arg.AddArg(L"QueryTxt",xcontrol(GetControl(L"sle_search")).GetText());
+			arg.AddArg(L"QueryArg",L"<arg/>");
+			if (getUrl(L"/sale/data/VATNotify/list/novatinvoice",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				//alert(x.GetXml());
+				dw_1.Retrieve(x);
+				dw_1.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			m_layer = GetControl(L"tab_1");
+			dw_1 = GetControl(L"dw_1");
+			dw_1.openUrl(L"/sale/view/VATNotify/template/VATInvoice/ImportList1");
+			
+			dw_1.SetColumnState(L"GRNDate",false);
+			dw_1.SetColumnState(L"NSupplierID",false);
+			
+			dw_2 = GetControl(L"dw_2");
+			dw_2.openUrl(L"/sale/view/VATNotify/template/VATInvoice/ImportList2");
+			
+			dw_2.SetColumnState(L"GRNDate",false);
+			dw_2.SetColumnState(L"NSupplierID",false);
+			
+			
+			xml x;
+		
+			
+			xaserverarg arg = GetArg();
+			if(arg)
+			{
+				xstring InvoiceNo = arg.GetArgString(L"InvoiceNo");
+				x = ViewObject::RetrieveData(L"/sale/data/VATNotify/list/novatinvoice",L"QueryTxt",InvoiceNo,L"QueryArg",L"<arg/>");
+				if(x)dw_1.Retrieve(x);
+			}
+			OnAttachEvent();	
+			//OnRetrieve();
+			
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			//SetAgent();	
+			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/VATNotify/del.vatinvoice.cpp b/jrj/project/business/VATNotify/del.vatinvoice.cpp
new file mode 100644
index 0000000..4fb524d
--- /dev/null
+++ b/jrj/project/business/VATNotify/del.vatinvoice.cpp
@@ -0,0 +1,180 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) DelVATInvoice :  public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xcombobox cbx_type;
+		xdwtable dw_arg;
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		DelVATInvoice(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static DelVATInvoice* CreateInstance(void* implPtr, void* hWnd)
+		{
+			DelVATInvoice* pWin = new DelVATInvoice(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+				
+		int OnDoubleClicked(TEvent* evt, LPARAM p)
+		{
+			return OnCmdDispatch(L"xmModifyRow");
+		}
+		
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			
+			 if(comdid==L"xmSaveAs")
+			{
+				dw_list.SaveAs(L"");
+				return 1;
+			}
+			 else if(comdid==L"xmModifyRow" )
+			{
+				int row2 = dw_list.GetRow();
+				xstring VatInvoiceID = dw_list.GetItemString(row2,L"VATInvoiceID");
+				
+				xaserverarg arg ;
+			
+				arg.AddArg(L"VatInvoiceID",VatInvoiceID);
+				OpenWindow(L"dev:xpage[maint.vatinvoiceEx.vx]",arg );
+				return 1;
+			}
+			else if(comdid==L"xmRetrieve")
+			{
+				OnRetrieve();
+				return 1;
+			}
+			else if(comdid==L"xmRecovery")
+			{	
+				int row = dw_list.GetRow();
+				xstring VATInvoiceID = dw_list.GetItemString(row,L"VATInvoiceID");
+				alert(VATInvoiceID);
+				int MB_OKCANCEL = 1;
+				int IDOK  = 1;
+				int ret = MessageBox(GetHWND(),L"确认恢复?",L"提示",MB_OKCANCEL);
+				if(ret == IDOK)
+				{
+					ViewObject::RetrieveData(L"/sale/data/VATNotify/DeleteRecovery",L"VATInvoiceID",VATInvoiceID);
+					OnRetrieve();
+				}
+				return 1;
+			}
+			
+			return 0;
+		}
+		
+		//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&DelVATInvoice::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&DelVATInvoice::OnSetFocus);
+			AttachEvent(L"dw_list",L"DWV_DOUBLECLICKED", (FEvent)&DelVATInvoice::OnDoubleClicked);//行双击
+			return 1;
+		}
+		
+	
+		
+			
+		xstring GetQueryArg()
+		{
+			dw_arg.AcceptText();
+			xml x ;
+			
+			dw_arg.DwUpdateAllTo(x);
+			return x.xml();
+		}	
+			
+		int  OnRetrieve()
+		{
+			HCURSOR  hCursor = xutil::SetCursorWait();
+			xml x ;
+			
+			xaserverarg arg ;
+			
+			arg.AddArg(L"QueryTxt",xcontrol( GetControl(L"sle_search")).GetText());
+			arg.AddArg(L"QueryArg",GetQueryArg());
+			//alert(arg.GetString());
+			if (getUrl(L"/sale/data/VATNotify/list/vatinvoiceEx",arg.GetString(),x)!=1)
+			{
+			
+				xutil::RestoreCursor(hCursor);
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}
+		
+		
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/VATNotify/template/VATInvoice/list");
+			dw_list.SetColumnState(L"VATInvoiceID",false);
+			dw_list.SetColumnState(L"GRNDate",false);
+			dw_arg = GetControl(L"dw_arg");
+			dw_arg.openUrl(L"/sale/view/AR/template/queryarg");
+			dw_arg.SetColHeaderHeight(0);
+			dw_arg.SetRowSelectorWidth(0);
+			dw_arg.SetHScrollState(false);
+			dw_arg.SetVScrollState(false);
+			
+			dw_arg.SetItemString(1,L"DateType",L"本月");
+			OnAttachEvent();	
+			OnRetrieve();
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/VATNotify/list.vatinvoice.cpp b/jrj/project/business/VATNotify/list.vatinvoice.cpp
new file mode 100644
index 0000000..2051d98
--- /dev/null
+++ b/jrj/project/business/VATNotify/list.vatinvoice.cpp
@@ -0,0 +1,329 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) ListVATInvoice :  public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xcombobox cbx_type;
+		xdwtable dw_arg;
+		xnode	m_agentNode;	//Agent Condition
+	
+		xstring DatePicker;
+	public:
+		ListVATInvoice(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static ListVATInvoice* CreateInstance(void* implPtr, void* hWnd)
+		{
+			ListVATInvoice* pWin = new ListVATInvoice(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+		
+		xstring GetEntityName(int pr)
+		{
+			return L"VATInvoice3";
+		}
+		
+		xstring GetEntityIDName(int /*param*/ pr)
+		{
+			return L"VTAInvoiceID";
+		}
+		
+		xstring GetEntityID(int /*param*/ pr)
+		{
+			return dw_list.GetItemString(dw_list.GetRow(),L"VATInvoiceID");
+		}
+		
+		int ViewUpdate(int pr,xstring updateItem,xaserverarg  arg)
+		{
+			if(	updateItem==L"del")
+			{
+				int DelRow = dw_list.GetRow();
+				dw_list.DeleteRow(DelRow);
+				return 1;
+			}
+			return 1;
+		}
+		
+		int  OnAnalysis()
+		{
+			HCURSOR hCursor = xutil::SetCursorWait();
+			xstring str = dw_list.DataAnalysis(L"");
+			xaserverarg arg;
+								
+			arg.AddArg(L"html", str);
+			
+			OpenWindow(L"dev:xpage[data.vanalysis.vx]",arg);
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}
+			 
+		int OnCombboChanged(TEvent* evt, int p)
+		{
+			xstring id = L"";
+			xstring name = L"";
+			int h = xcombobox::GetCurSel(evt->command.hCtrl);
+			if(h > -1) 
+			{
+				xstring txt = xcombobox::GetLBText(evt->command.hCtrl, h);
+				if(txt==L"增值税票")
+				{
+					dw_list.openUrl(L"/sale/view/VATNotify/template/VATInvoice/list");
+					dw_list.SetColumnState(L"VATInvoiceID",false);
+					dw_list.SetColumnState(L"GRNDate",false);
+					OnRetrieve(DatePicker);
+				}
+				else if(txt==L"未开增值税票")
+				{
+					dw_list.openUrl(L"/sale/view/VATNotify/template/VATNotify/ListNoVATInvoice");
+					OnRetrieveEx();
+				}
+				else if(txt==L"增值税票商品")
+				{
+					dw_list.openUrl(L"/sale/view/VATNotify/template/VATInvoice/list1");
+					dw_list.SetColumnState(L"VATInvoiceID",false);
+					OnRetrieveEx1();
+				}
+			}
+			return 1;
+		}
+				
+		int OnDoubleClicked(TEvent* evt, int p)
+		{
+			return OnCmdDispatch(L"xmModifyRow");
+		}
+		
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmAnalysis") return OnAnalysis();
+			if(comdid==L"xmAddRow")
+			{
+				OpenWindow(L"dev:xpage[VATInvoiceNew.vx]");
+				return 1;
+			}
+			else if(comdid==L"xmModifyRow" )
+			{
+				if(xcontrol(GetControl(L"cbx_type")).GetText() ==L"未开增值税票" ) return 1;
+				int row = dw_list.GetRow();
+				xaserverarg arg;
+				xstring VatInvoiceID = dw_list.GetItemString(row,L"VATInvoiceID");
+				OpenWindow(L"dev:xpage[maint.vatinvoice.vx]", arg);
+				return 1;
+			}
+			else if(comdid==L"xmSaveAs")
+			{
+				dw_list.SaveAs(L"");
+				return 1;
+			}
+			else if(comdid==L"xmRetrieve" || comdid==L"xmSearch" )
+			{
+				if(xcontrol(GetControl(L"cbx_type")).GetText() ==L"未开增值税票")
+				{
+					OnRetrieveEx();
+				}
+				else if(xcontrol(GetControl(L"cbx_type")).GetText() ==L"增值税票商品")
+				{
+					OnRetrieveEx1();
+				}
+				else
+					OnRetrieve(DatePicker);
+				return 1;
+			}
+			else if(comdid.find(L"action:",0)>=0)
+			{
+				ProcessFlowAction(comdid,1);
+			}
+			else	if(comdid==L"DeletedOne")
+			{
+				OpenWindow(L"dev:xpage[del.vatinvoice.vx]");
+				return 1;
+			}
+			
+
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&ListVATInvoice::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&ListVATInvoice::OnSetFocus);
+			AttachEvent(L"dw_list",L"DWV_DOUBLECLICKED", (FEvent)&ListVATInvoice::OnDoubleClicked);//行双击
+			AttachEvent(L"cbx_type",L"CBN_SELCHANGE", (FEvent)&ListVATInvoice::OnCombboChanged);//属性组切换list中列的数量变化
+			AttachEvent(L"cbx_state",L"CBN_SELCHANGE", (FEvent)&ListVATInvoice::OnDatePicker);
+			return 1;
+		}
+		
+		int OnDatePicker(TEvent* evt, int lParam)
+		{
+			
+			int h = xcombobox::GetCurSel(evt->command.hCtrl);
+			if(h > -1) 
+			{
+				xstring txt = xcombobox::GetLBText(evt->command.hCtrl, h);
+				if(txt==L"出运日期")
+				{
+				
+					DatePicker=L"ETD";
+					OnRetrieve(DatePicker);
+				}
+				else if(txt==L"开票日期")
+				{
+						
+					DatePicker=L"VATDate";
+					OnRetrieve(DatePicker);
+				}
+			}
+		    return 1;
+		}
+				
+		int  OnRetrieveEx1()
+		{
+			HCURSOR  hCursor = xutil::SetCursorWait();
+			xml x ;
+			
+			xaserverarg arg ;
+			
+			arg.AddArg(L"QueryTxt",xcontrol(GetControl(L"sle_search")).GetText());
+			arg.AddArg(L"QueryArg",GetQueryArg());
+			if (getUrl(L"/sale/data/VATNotify/list/novatinvoice1",arg.GetString(),x)!=1)
+			{
+				
+				xutil::RestoreCursor(hCursor);
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			dw_list.SetReadOnly(true);
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}
+		
+		int  OnRetrieveEx()
+		{
+			HCURSOR  hCursor = xutil::SetCursorWait();
+			xml x ;
+			
+			xaserverarg arg ;
+			
+			arg.AddArg(L"QueryTxt",xcontrol(GetControl(L"sle_search")).GetText());
+			arg.AddArg(L"QueryArg",GetQueryArg());
+			if (getUrl(L"/sale/data/VATNotify/list/novatinvoice",arg.GetString(),x)!=1)
+			{
+				
+				xutil::RestoreCursor(hCursor);
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			dw_list.SetReadOnly(true);
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}
+			
+		xstring GetQueryArg()
+		{
+			dw_arg.AcceptText();
+			xml x ;
+			
+			dw_arg.DwUpdateAllTo(x);
+			return x.xml();
+		}	
+			
+		int  OnRetrieve(xstring DatePicker)
+		{
+			HCURSOR  hCursor = xutil::SetCursorWait();
+			xml x ;
+			
+			xaserverarg arg ;
+			arg.setNativePointer(arg.CreateInstance());	
+			arg.AddArg(L"QueryTxt",xcontrol(GetControl(L"sle_search")).GetText());
+			arg.AddArg(L"QueryArg",GetQueryArg());
+			arg.AddArg(L"DatePicker",DatePicker);
+			//alert(arg.GetString());
+			if (getUrl(L"/sale/data/VATNotify/list/vatinvoice",arg.GetString(),x)!=1)
+			{
+			
+				xutil::RestoreCursor(hCursor);
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}
+		
+		
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/VATNotify/template/VATInvoice/list");
+			dw_list.SetColumnState(L"VATInvoiceID",false);
+			dw_list.SetColumnState(L"GRNDate",false);
+			dw_arg = GetControl(L"dw_arg");
+			dw_arg.openUrl(L"/sale/view/AR/template/queryarg");
+			dw_arg.SetColHeaderHeight(0);
+			dw_arg.SetRowSelectorWidth(0);
+			dw_arg.SetHScrollState(false);
+			dw_arg.SetVScrollState(false);
+			
+			dw_arg.SetItemString(1,L"DateType",L"本月");
+			OnAttachEvent();	
+			OnRetrieve(DatePicker);
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/VATNotify/maint.vatinvoice..cpp b/jrj/project/business/VATNotify/maint.vatinvoice..cpp
new file mode 100644
index 0000000..a72a604
--- /dev/null
+++ b/jrj/project/business/VATNotify/maint.vatinvoice..cpp
@@ -0,0 +1,400 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) MaintVATInvoice :  public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xdwtable dw_base;
+		xstring VATInvoiceID;
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		MaintVATInvoice(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static MaintVATInvoice* CreateInstance(void* implPtr, void* hWnd)
+		{
+			MaintVATInvoice* pWin = new MaintVATInvoice(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+			
+		int OnSave()
+		{
+			dw_list.AcceptText();
+			xstring error;
+			xstring str;
+			xml x ;
+			xaserverarg arg ;
+			
+			
+			
+			
+			dw_list.DwUpdateAllToEx(x);
+			xml x0 ;
+			
+			x0.loadXML(L"<data/>");
+			
+			KXMLDOMNodeList t = x.selectNodes(L"data/Item[@update.modify]");
+			KXMLDOMElement e1= x0.documentElement();
+			int len = t.length();
+			for(int i=0;i<len;i++)
+			{
+				e1.appendChild(t.item(i));
+			}
+			arg.AddArg(L"content",x0.xml());
+			
+			if(xurl::get(L"/sale/data/VATNotify/base/update", arg.GetString(),x0)!=1)
+			{
+				error = x0.text();
+				alert(L"err:"+error);
+				return 1;
+			}
+			str = x0.documentElement().getAttribute(L"text");
+			if(str != L"true")
+			{
+				alert(L"保存失败!");
+				return 1;
+			}
+			
+			dw_base.AcceptText();
+			xml x1 ;
+			
+			dw_base.DwUpdateAllTo(x1);
+
+			arg.AddArg(L"content",x1.xml());
+			if(xurl::get(L"/sale/data/VATNotify/vatinvoice/update", arg.GetString(),x1)!=1)
+			{
+				error = x1.text();
+				alert(L"err:"+error);
+				return 1;
+			}
+			str = x1.documentElement().getAttribute(L"text");
+			if(str != L"true")
+			{
+				alert(L"保存失败!");
+				return 1;
+			}			
+			
+			dw_list.ResetUpdateStatus();	
+			dw_base.ResetUpdateStatus();	
+			
+			alert(L"保存成功!");
+			CloseWindow();
+			return 1;
+		}				
+				
+		int RecalcVatAmt(int row)
+		{
+			double VatRate = dw_list.GetItemDouble(row,L"VATRate");
+			if((int)(VatRate*100) < 1) VatRate = 17.0;
+			double VATRefundRate = dw_list.GetItemDouble(row,L"VATRefundRate");
+			double billAmt = dw_list.GetItemDouble(row,L"VATBillAmount");
+			double VatAmt = billAmt /(100.0+VatRate)*VatRate;
+			double VATRefundAmt = billAmt /(100.0+VatRate)*VATRefundRate;
+			dw_list.SetItemDouble(row,L"VATAmount",VatAmt);
+			dw_list.SetItemDouble(row,L"RefundAmount",VATRefundAmt);
+			dw_list.SetItemDouble(row,L"NetAmount",billAmt - VatAmt);
+			
+			return 1;
+		}
+		
+		//合计
+		int SUMRecalcVatAmt()
+		{
+			double VATBillAmountEx=0;
+			double DeduceAmountEx=0;
+			double GoodsAmountEx=0;
+			double OverAmountEx=0;
+			double RefundAmountEx=0;
+			double VATAmountEx=0;
+			for(int i = 1;i <=dw_list.GetRowCount(); ++i)
+			{
+					double VATBillAmount=dw_list.GetItemDouble(i,L"VATBillAmount");
+					VATBillAmountEx+=VATBillAmount;
+					double DeduceAmount=dw_list.GetItemDouble(i,L"DeduceAmount");
+					DeduceAmountEx+=DeduceAmount;
+					double NetAmount=dw_list.GetItemDouble(i,L"NetAmount");
+					GoodsAmountEx+=NetAmount;
+					double OverAmount=dw_list.GetItemDouble(i,L"OverAmount");
+					OverAmountEx+=OverAmount;
+					double RefundAmount=dw_list.GetItemDouble(i,L"RefundAmount");
+					RefundAmountEx+=RefundAmount;
+					double VATAmount=dw_list.GetItemDouble(i,L"VATAmount");
+					VATAmountEx+=VATAmount;
+					
+			}
+			dw_base.SetItemDouble(1,L"VATBillAmount",VATBillAmountEx);
+			dw_base.SetItemDouble(1,L"DeduceAmount",DeduceAmountEx);
+			dw_base.SetItemDouble(1,L"GoodsAmount",GoodsAmountEx);
+			dw_base.SetItemDouble(1,L"OverAmount",OverAmountEx);
+			dw_base.SetItemDouble(1,L"RefundAmount",RefundAmountEx);
+			dw_base.SetItemDouble(1,L"VATAmount",VATAmountEx);
+			
+			dw_base.Redraw();
+			return 1;
+		}
+		
+		int OnItemChanged(TEvent* evt, LPARAM p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			xstring colname=hdr.colname;
+			xstring value = hdr.data;
+			int row = hdr.row;
+			if(value==L"") return 1;
+			if(colname==L"VATAmount")
+			{
+				double VATAmount=dw_list.GetItemDouble(row,L"VATAmount");	
+				double billAmtt= dw_list.GetItemDouble(row,L"VATBillAmount");
+				
+				double v4= billAmtt - VATAmount;
+				int v5=(int)VATAmount;
+				if(v5>=0){
+					dw_list.SetItemDouble(row,L"NetAmount",v4);
+					dw_list.Redraw();
+				
+					dw_base.SetItemDouble(1,L"GoodsAmount",v4);
+					dw_base.SetItemDouble(1,L"VATAmount",VATAmount);
+					dw_base.Redraw();
+
+				}
+				SUMRecalcVatAmt();
+			}
+			else if(colname==L"RefundAmount")
+			{
+				double RefundAmountt=dw_list.GetItemDouble(row,L"RefundAmount");
+				//dw_base.SetItemDouble(1,L"RefundAmount",RefundAmountt);
+				//dw_base.Redraw();
+				SUMRecalcVatAmt();
+			}
+			else if(colname==L"VATBillAmount")
+			{
+				RecalcVatAmt(row);
+			
+				if(value==L"" || value==L"0.00")
+				{
+					dw_list.SetItemString(row,L"OverAmount",L"");
+					dw_list.SetItemString(row,L"DeduceAmount",L"");
+				}else
+				{
+					double NAmount = dw_list.GetItemDouble(row,L"NAmount");
+					double billAmt = dw_list.GetItemDouble(row,L"VATBillAmount");//开票金额
+					double VATAmount1=dw_list.GetItemDouble(row,L"VATAmount");		//增值税额
+					double oAmt1 = dw_list.GetItemDouble(row,L"OverAmount");//多开金额
+					double RefundAmount = dw_list.GetItemDouble(row,L"RefundAmount");
+					double dAmt1 = dw_list.GetItemDouble(row,L"DeduceAmount");//扣款金额
+					double Amt = NAmount - billAmt ;
+					int v1 = (int)Amt;
+					int v2 = (billAmt - NAmount);
+					if(v2 < 0) v2 = - v2;
+					if(v1 <0 || v2<49 )
+					{
+						dw_list.SetItemDouble(row,L"OverAmount",billAmt - NAmount);
+						dw_list.SetItemDouble(row,L"DeduceAmount",0.0);
+						/*dw_base.SetItemDouble(1,L"GoodsAmount",billAmt - VATAmount1);
+						dw_base.SetItemDouble(1,L"VATAmount",VATAmount1);
+					    dw_base.SetItemDouble(1,L"VATBillAmount",billAmt);
+						dw_base.SetItemDouble(1,L"DeduceAmount",0.0);
+						dw_base.SetItemDouble(1,L"OverAmount",billAmt - NAmount);
+						dw_base.SetItemDouble(1,L"RefundAmount",RefundAmount);*/
+					}
+					else
+					{
+						dw_list.SetItemDouble(row,L"OverAmount",0.0);
+						dw_list.SetItemDouble(row,L"DeduceAmount", NAmount - billAmt);
+					    /*dw_base.SetItemDouble(1,L"GoodsAmount",billAmt - VATAmount1);
+						dw_base.SetItemDouble(1,L"VATAmount",VATAmount1);
+					    dw_base.SetItemDouble(1,L"VATBillAmount",billAmt);
+						dw_base.SetItemDouble(1,L"DeduceAmount",NAmount - billAmt);
+						dw_base.SetItemDouble(1,L"OverAmount",0.0);
+						dw_base.SetItemDouble(1,L"RefundAmount",RefundAmount);*/
+					}
+					
+				}
+				SUMRecalcVatAmt();
+				dw_list.Redraw();
+			}
+			else if(colname==L"DeduceAmount" || colname==L"OverAmount")
+			{
+				double dAmt = dw_list.GetItemDouble(row,L"DeduceAmount");
+				double oAmt = dw_list.GetItemDouble(row,L"OverAmount");
+				double nAmt = dw_list.GetItemDouble(row,L"NAmount");
+				double VatRate = dw_list.GetItemDouble(row,L"VATRate");
+				if((int)(VatRate*100) < 1) VatRate = 17.0;
+				double VatAmt = (nAmt + oAmt - dAmt)/(100.0+VatRate)*VatRate;	//增值税额	
+				dw_list.SetItemDouble(row,L"VATBillAmount",nAmt + oAmt - dAmt);
+				/*if(oAmt>0){
+				dw_base.SetItemDouble(1,L"GoodsAmount",nAmt + oAmt - dAmt - VatAmt);
+				dw_base.SetItemDouble(1,L"VATAmount",VatAmt);
+				dw_base.SetItemDouble(1,L"VATBillAmount",nAmt + oAmt - dAmt);
+				dw_base.SetItemDouble(1,L"OverAmount",oAmt);
+				}*/
+				RecalcVatAmt(row);
+				SUMRecalcVatAmt();
+				dw_list.Redraw();
+			}
+
+			return 1;
+		}
+				
+
+				
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmClose")
+			{
+				CloseWindow();
+				return 1;
+			}else if(comdid==L"xmSave")
+			{
+				return OnSave();
+			}
+			return 0;
+		}
+		
+
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnItemChangedTwo(TEvent* evt, LPARAM p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			xstring colname=hdr.colname;
+			xstring value = hdr.data;
+			
+			if (colname == L"RefundAmount") 
+			{
+				double RefundAmount2 = dw_base.GetItemDouble(hdr.row,L"RefundAmount");
+				dw_base.SetItemDouble(hdr.row,L"TaxfundAmount", xdouble((RefundAmount2)).round(2));
+			}
+			
+			double RefundAmount= dw_base.GetItemDouble(hdr.row,L"RefundAmount");
+			double TaxfundAmount1 = dw_base.GetItemDouble(hdr.row,L"TaxfundAmount");
+			if(TaxfundAmount1 ==0.00)
+			{
+				dw_base.SetItemDouble(hdr.row,L"TaxfundAmount", xdouble((RefundAmount)).round(2));
+			}
+			if (colname == L"TaxfundAmount" || colname == L"AlreadyRefundAmount" || colname == L"RefundAmount") 
+			{
+				double TaxfundAmount = dw_base.GetItemDouble(hdr.row,L"TaxfundAmount");
+				double AlreadyRefundAmount = dw_base.GetItemDouble(hdr.row,L"AlreadyRefundAmount");
+				dw_base.SetItemDouble(hdr.row,L"NotRefundAmount", xdouble((TaxfundAmount - AlreadyRefundAmount)).round(2));
+			}
+			return 1;
+		}
+			
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&MaintVATInvoice::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&MaintVATInvoice::OnSetFocus);
+			AttachEvent(L"dw_list",L"DWV_ITEMCHANGED", (FEvent)&MaintVATInvoice::OnItemChanged);
+			AttachEvent(L"dw_base",L"DWV_ITEMCHANGED", (FEvent)&MaintVATInvoice::OnItemChangedTwo);
+			return 1;
+		}
+		
+	
+		int  OnRetrieve()
+		{
+			xml x ;
+			
+			xaserverarg arg = GetArg();
+		
+			arg.AddArg(L"VATInvoiceID",VATInvoiceID);
+			if (getUrl(L"/sale/data/VATNotify/vatinvoice/base",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_base.Retrieve(x);
+				dw_base.Redraw();
+			}
+			
+			if (getUrl(L"/sale/data/VATNotify/vatinvoice/item",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			
+			return 1;
+		}
+		
+		
+		int onload()
+		{
+			SetArg();
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/VATNotify/template/VATInvoice/item");
+		
+			dw_base = GetControl(L"dw_base");
+			dw_base.openUrl(L"/sale/view/VATNotify/template/VATInvoice/base");
+			
+			
+			
+			VATInvoiceID = L"";
+
+
+			if (GetWinParam())
+			{
+				xaserverarg arg = GetArg();
+				VATInvoiceID = arg.GetArgString(L"VATInvoiceID");
+			}
+
+			
+			OnAttachEvent();	
+			
+			if(VATInvoiceID !=L"") OnRetrieve();
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/VATNotify/maint.vatinvoiceEx.cpp b/jrj/project/business/VATNotify/maint.vatinvoiceEx.cpp
new file mode 100644
index 0000000..a2b3fd3
--- /dev/null
+++ b/jrj/project/business/VATNotify/maint.vatinvoiceEx.cpp
@@ -0,0 +1,139 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) MaintVATInvoiceEx :  public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xdwtable dw_base;
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		MaintVATInvoiceEx(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static MaintVATInvoiceEx* CreateInstance(void* implPtr, void* hWnd)
+		{
+			MaintVATInvoiceEx* pWin = new MaintVATInvoiceEx(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}		
+
+				
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmClose")
+			{
+				CloseWindow();
+				return 1;
+			}
+			return 0;
+		}
+		
+
+		
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&MaintVATInvoiceEx::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&MaintVATInvoiceEx::OnSetFocus);
+			return 1;
+		}
+		
+	
+		int  OnRetrieve(xstring VATInvoiceID)
+		{
+			xml x ;
+			
+			xaserverarg arg ;
+			
+			arg.AddArg(L"VATInvoiceID",VATInvoiceID);
+			if (getUrl(L"/sale/data/VATNotify/vatinvoice/baseEx",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_base.Retrieve(x);
+				dw_base.Redraw();
+			}
+			
+			if (getUrl(L"/sale/data/VATNotify/vatinvoice/itemEx",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			
+			return 1;
+		}
+		
+		
+		int onload()
+		{
+			SetArg();
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/VATNotify/template/VATInvoice/item");
+		
+			dw_base = GetControl(L"dw_base");
+			dw_base.openUrl(L"/sale/view/VATNotify/template/VATInvoice/base");
+			
+			
+			xaserverarg arg = GetArg();
+			xstring VATInvoiceID = arg.GetArgString(L"VatInvoiceID");
+			OnRetrieve(VATInvoiceID);
+			OnAttachEvent();
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file

--
Gitblit v1.9.3