ÿþ#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) SalaryslipExMaint : public xframe { public: SalaryslipExMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} public: static SalaryslipExMaint* CreateInstance(void* implPtr, void* hWnd) { SalaryslipExMaint* pWin = new SalaryslipExMaint(implPtr, (HWND)hWnd); return pWin; } public: xdwtable dw_base; xdwgrid dw_list; xnode m_agentNode; //Agent Condition int hObject = 0; 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_base.AcceptText(); dw_list.AcceptText(); xml x; xaserverarg arg ; dw_list.DwUpdateAllToEx(x); dw_base.DwUpdateAllTo(x); arg.AddArg(L"content", x.xml() ); trace(x.xml()); if(xurl::get(L"/sale/data/expense3/update/SalaryslipExMaint", arg.GetString(),x)!=1) { xstring error = x.text(); alert(error); } else { xstring str = x.documentElement().getAttribute(L"text"); if(str == L"true") { dw_base.ResetUpdateStatus(); dw_list.ResetUpdateStatus(); alert(L"ÝOX[bŸR!"); }else { alert(L"ÝOX[1Y%!"); } } return 1; } //&q¹pÀo;mYtýQpe int OnSetFocus(TEvent* evt, LPARAM param) { //͑nå]wQag SetAgent(); return 1; } //}TäNÑS^ýQpe int OnCmdDispatch(xstring comdid) { if (comdid == L"XmSave" ) { OnSave(); return 1; } if(comdid==L"xmAddRow") { int row =dw_list.GetRowCount(); xstring sdate = publiccode::GetCurrentDate(); dw_list.InsertRow(0); dw_list.SetItemString(row+1,L"/}¡‹6eeQ",L"/}¡‹6eeQ"); dw_list.SetItemString(row+1,L"SalaryslipDate",sdate); dw_list.SetItemInt(row+1,L"SalaryslipNo",row+1); /*xstring SalaryslipNo = dw_list.GetItemString(row,L"SalaryslipNo"); xml x = new xml; if(SalaryslipNo == L"") { x = ViewObject::RetrieveData(L"/sale/data/expense3/view/MakeSalaryslipNo"); SalaryslipNo = x.GetXmlDoc().text; dw_list.SetItemString(row,L"SalaryslipNo",SalaryslipNo); }*/ //dw_list.SetItemString(row+1,L"SaleID",publiccode::GetGuid()); return 1; } if(comdid==L"xmDeleteRow") { dw_list.DeleteRow(dw_list.GetRow()); return 1; } if(comdid==L"xmSaveAs") { dw_list.SaveAs(L""); return 1; } if(comdid==L"ParameterAdjustment") { //ParameterAdjustment(); return 1; } return 0; } int OnItemClick(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; xstring value = hdr.data; //alert(value); //xdwtable dw = dw_base.FindDwTable(L"item2",0); //xdwtable dw1 = dw_base.FindDwTable(L"item3",0); xaserverarg arg; return 1; } int OnBaseItemChanged(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; xstring colname = hdr.colname; xstring value = hdr.data; xstring dwname = L"dw_list"; if (value != L"") { KXMLDOMNodeList nlist = GetElement().selectNodes(L"//*[@name='" + dwname + L"']/trans[@for='" + colname + L"']"); ViewObject::TransData(nlist, dw_list, hdr.row, colname, value); } return 1; } //}TäNYt‹NöN int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } int OnItemChanged(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; xstring colname=hdr.colname; xstring value = hdr.data; int row = hdr.row; xstring dwname = L"dw_list"; xml x = new xml; trace(colname); if(value != L"") { KXMLDOMNodeList nlist = GetElement().selectNodes(L"//*[@name='" + dwname + L"']/trans[@for='" + colname + L"']"); ViewObject::TransData(nlist, dw_list, hdr.row, colname, value); } if(colname == L"PersonID") { if(value == L"") return 0; xml xp = ViewObject::RetrieveData(L"/sale/data/expense3/GetPersonID",L"PersonID",value); KXMLDOMNodeList itemp = xp.selectNodes(L"data/Item"); KXMLDOMNode tp = itemp.item(0); if(tp.selectSingleNode(L"SpecialDeductFeeAmout")) { /*double SpecialDeductFeeAmoutEx = 0.00; xstring SpecialDeductFeeAmout = ; SpecialDeductFeeAmoutEx =SpecialDeductFeeAmout.toDouble();*/ dw_list.SetItemString(row,L"SpecialDeductFee",tp.selectSingleNode(L"SpecialDeductFeeAmout").text()); } if(tp.selectSingleNode(L"DeptName")) { dw_list.SetItemString(row,L"DeptName",tp.selectSingleNode(L"DeptName").text()); dw_list.SetItemDisplayString(row,L"DeptName",tp.selectSingleNode(L"DeptName").text()); } if(tp.selectSingleNode(L"GroupName")) { dw_list.SetItemString(row,L"GroupName",tp.selectSingleNode(L"GroupName").text()); dw_list.SetItemDisplayString(row,L"GroupName",tp.selectSingleNode(L"GroupName").text()); } } if(colname == L"PersonID" || colname == L"SalaryslipDate") { xstring PersonID = dw_list.GetItemString(row,L"PersonID"); xstring SalarysDate = dw_list.GetItemString(row,L"SalaryslipDate"); xstring sdate = publiccode::GetCurrentDate(); if(PersonID == L"") { return 0; } if(SalarysDate == L"") { SalarysDate = sdate; } x = ViewObject::RetrieveData(L"/sale/data/expense3/view/GetLastData",L"PersonID",PersonID,L"SalarysDate",SalarysDate); KXMLDOMNodeList items = x.selectNodes(L"data/amount"); KXMLDOMNode t = items.item(0); double lastSpecialDeductFee = 0.00; double lastOffsettingAmount=0.00; double lastTotalTax=0.00; if(t.selectSingleNode(L"lastSpecialDeductFee")) { xstring SpecialDeductFeeTxt = t.selectSingleNode(L"lastSpecialDeductFee").text(); lastSpecialDeductFee = SpecialDeductFeeTxt.toDouble(); dw_list.SetItemDouble(row,L"SpecialDeductFee",lastSpecialDeductFee); ComputeDeductFeeAount(row); } if(t.selectSingleNode(L"lastOffsettingAmount")) { xstring lastOffsettingAmountTxT = t.selectSingleNode(L"lastOffsettingAmount").text(); lastOffsettingAmount = lastOffsettingAmountTxT.toDouble(); dw_list.SetItemDouble(row,L"lastOffsettingAmount",lastOffsettingAmount); } if(t.selectSingleNode(L"lastTotalTax")) { xstring lastTotalTaxTxt = t.selectSingleNode(L"lastTotalTax").text(); lastTotalTax = lastTotalTaxTxt.toDouble(); dw_list.SetItemDouble(row,L"lastTotalTax",lastTotalTax); } initial(row); ComputeTax(row); }if(colname == L"BasicSalary" || colname == L"MealAllowance" || colname == L"MoneyAward") { double BasicSalary = dw_list.GetItemDouble(row,L"BasicSalary"); double MealAllowance = dw_list.GetItemDouble(row,L"MealAllowance"); double MoneyAward = dw_list.GetItemDouble(row,L"MoneyAward"); double SalaryAmount = BasicSalary+MealAllowance+MoneyAward; dw_list.SetItemDouble(row,L"SalaryAmount",SalaryAmount); double lastSalay = dw_list.GetItemDouble(row,L"lastSalay"); dw_list.SetItemDouble(row,L"ttSalary",lastSalay + SalaryAmount); ComputeIncomeTax(row); ComputeTax(row); } if(colname == L"EndowmentInsurance" || colname == L"MedicalInsurance" || colname == L"UnemploymentInsurance" || colname == L"HousingProvidentFund" || colname == L"LeaveDeductFee" || colname == L"OtherDeductFee" || colname == L"SpecialDeductFee") { ComputeDeductFeeAount(row); ComputeIncomeTax(row); ComputeTax(row); } if(colname == L"SalaryAmount" || colname == L"DeductFeeAount" || colname == L"OffsettingAmount") { ComputeIncomeTax(row); ComputeTax(row); } if(colname == L"ttSalary") { ComputeTax(row); } if(colname==L"PersonalIncomeTax") { double SalaryAmount1 = dw_list.GetItemDouble(row,L"SalaryAmount"); double PersonalIncomeTax = value.toDouble(); double DeductFeeAount = dw_list.GetItemDouble(row,L"DeductFeeAount"); double ActualAmount = SalaryAmount1 - PersonalIncomeTax - DeductFeeAount; dw_list.SetItemDouble(row,L"ActualAmount",ActualAmount); } dw_list.Redraw(); return 1; } int ComputeTotal(int row) { double SalaryAmount = dw_list.GetItemDouble(row,L"SalaryAmount"); double lastSalay = dw_list.GetItemDouble(row,L"lastSalay"); double ttSalary = dw_list.GetItemDouble(row,L"ttSalary"); double lastTotalSalary = dw_list.GetItemDouble(row,L"lastTotalSalary"); double OffsettingAmount = dw_list.GetItemDouble(row,L"OffsettingAmount"); double lastOffsettingAmount = dw_list.GetItemDouble(row,L"lastOffsettingAmount"); double totalOffsetting = OffsettingAmount + lastOffsettingAmount; dw_list.SetItemDouble(row,L"totalOffsetting",totalOffsetting); double tax = ttSalary - totalOffsetting; double totalTax = 0; if(tax > 0.0) { if(tax <= 36000.00) { totalTax = tax * 0.03; }else if(tax > 36000.00 && tax <= 144000.00) { totalTax = tax * 0.10 - 2520.00; } else if(tax > 144000.00 && tax <= 300000.00) { totalTax = tax * 0.20 - 19620.00; }else if(tax > 300000.00 && tax <= 420000.00) { totalTax = tax * 0.25 - 31920.00; }else if(tax > 420000.00 && tax <= 660000.00) { totalTax = tax * 0.30 - 52920.00; }else if(tax > 660000.00 && tax <= 960000.00) { totalTax = tax * 0.35 - 85920.00; }else if(tax > 960000.00) { totalTax = tax * 0.45 - 181920.00; } dw_list.SetItemDouble(row,L"totalTax",totalTax); } return 1; } int ComputeTax(int row) { ComputeTotal(row); double totalTax = dw_list.GetItemDouble(row,L"totalTax"); double lastTotalTax = dw_list.GetItemDouble(row,L"lastTotalTax"); double SalaryAmount = dw_list.GetItemDouble(row,L"SalaryAmount"); double PersonalIncomeTax = totalTax - lastTotalTax; if(PersonalIncomeTax < 0.00) { PersonalIncomeTax = 0.00; } dw_list.SetItemDouble(row,L"PersonalIncomeTax",PersonalIncomeTax); PersonalIncomeTax = dw_list.GetItemDouble(row,L"PersonalIncomeTax"); double DeductFeeAount = dw_list.GetItemDouble(row,L"DeductFeeAount"); double ActualAmount = SalaryAmount - PersonalIncomeTax - DeductFeeAount; dw_list.SetItemDouble(row,L"ActualAmount",ActualAmount); dw_list.Redraw(); return 1; } int ComputeIncomeTax(int row) { double DeductFeeAount = dw_list.GetItemDouble(row,L"DeductFeeAount"); double SalaryAmount = dw_list.GetItemDouble(row,L"SalaryAmount"); double SpecialDeductFee = dw_list.GetItemDouble(row,L"SpecialDeductFee"); double OffsettingAmount = DeductFeeAount + SpecialDeductFee + 5000; double IncomeTax = SalaryAmount - OffsettingAmount; dw_list.SetItemDouble(row,L"OffsettingAmount",OffsettingAmount); dw_list.SetItemDouble(row,L"IncomeTax",IncomeTax); return 1; } int ComputeDeductFeeAount(int row) { double EndowmentInsurance = dw_list.GetItemDouble(row,L"EndowmentInsurance"); double MedicalInsurance = dw_list.GetItemDouble(row,L"MedicalInsurance"); double UnemploymentInsurance = dw_list.GetItemDouble(row,L"UnemploymentInsurance"); double HousingProvidentFund = dw_list.GetItemDouble(row,L"HousingProvidentFund"); double LeaveDeductFee = dw_list.GetItemDouble(row,L"LeaveDeductFee"); double OtherDeductFee = dw_list.GetItemDouble(row,L"OtherDeductFee"); //double SpecialDeductFee = dw_list.GetItemDouble(row,L"SpecialDeductFee"); double DeductFeeAount = EndowmentInsurance+MedicalInsurance+UnemploymentInsurance+HousingProvidentFund +LeaveDeductFee+OtherDeductFee; dw_list.SetItemDouble(row,L"DeductFeeAount",DeductFeeAount); return 1; } int initial(int row) { dw_list.SetItemDouble(row,L"ActualAmount",1427.40); dw_list.SetItemDouble(row,L"BasicSalary",2490.00); dw_list.SetItemDouble(row,L"MealAllowance",0.00); dw_list.SetItemDouble(row,L"EndowmentInsurance",384.96);//{Q€ dw_list.SetItemDouble(row,L"MedicalInsurance",96.24);//;SÝO dw_list.SetItemDouble(row,L"UnemploymentInsurance",24.06);//1YN dw_list.SetItemDouble(row,L"HousingProvidentFund",125.00); dw_list.SetItemDouble(row,L"DeductFeeAount",582.51); //dw_base.SetItemDouble(1,L"SpecialDeductFee",2000.00); dw_list.SetItemDouble(row,L"lastSalay",0.0); dw_list.SetItemDouble(row,L"SalaryAmount",2490.00);//”^ÑST¡‹ ComputeIncomeTax(row); return 1; } int OnAttachEvent() { //Ñ~š[å]wQag¹pûQ‹NöN AttachEvent(L"WM_XCOMMAND", (FEvent)&SalaryslipExMaint::OnXCommand); //·ƒÖS&q¹p‹NöN ÿ(uŽN͑nå]wQag AttachEvent(L"WM_SETFOCUS", (FEvent)&SalaryslipExMaint::OnSetFocus); AttachEvent(L"dw_base",L"DWV_CLICKED", (FEvent)&SalaryslipExMaint::OnItemClick); AttachEvent(L"dw_base",L"DWV_ITEMCHANGED", (FEvent)&SalaryslipExMaint::OnBaseItemChanged); AttachEvent(L"dw_list",L"DWV_ITEMCHANGED", (FEvent)&SalaryslipExMaint::OnItemChanged); AttachEvent(L"dw_list",L"DWV_CLICKED", (FEvent)&SalaryslipExMaint::OnItemClickEx); return 1; } int OnItemClickEx(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; xstring value = hdr.data; xstring colname = hdr.colname; int row = hdr.row; if (colname == L"/}¡‹6eeQ") { HCURSOR hCursor = xutil::SetCursorWait(); xaserverarg arg; xstring PersonID = dw_list.GetItemString(row,L"PersonID"); if(PersonID == L"") { alert(L"÷‹ ébXTå]"); return 0; } arg.AddArg(L"PersonID",PersonID); xstring SalaryslipDate = dw_list.GetItemString(row,L"SalaryslipDate"); arg.AddArg(L"SalaryslipDate",SalaryslipDate); OpenWindow(L"dev:xpage[SelectSalaryslip.vx]", arg); xutil::RestoreCursor(hCursor); xstring amount = arg.GetArgString(L"amount"); if(amount != L"") { dw_list.SetItemDouble(row,L"lastSalay",amount.toDouble()); dw_list.SetItemDouble(row,L"ttSalary",amount.toDouble() + dw_list.GetItemDouble(row,L"SalaryAmount")); dw_list.Redraw(); ComputeTax(row); } return 1; } } int OnRetrieveEx(xstring SSBID) { xml x; xaserverarg arg; arg.AddArg(L"SSBID",SSBID); if (getUrl(L"/sale/data/Expense3/SalaryslipExBase",arg.GetString(),x)!=1) { trace(x.text()); return -1; }else { dw_base.Retrieve(x); dw_base.Redraw(); dw_list.Retrieve(x); dw_list.Redraw(); } return 1; } int OnEntityCopy(xstring EntityID) { xml x; xaserverarg arg ; arg.AddArg(L"SSBID",EntityID); if (getUrl(L"/sale/data/Expense3/SalaryslipBaseCopy",arg.GetString(),x)!=1) { alert(x.text()); return -1; }else { dw_base.Retrieve(x); dw_base.Redraw(); } if (getUrl(L"/sale/data/Expense3/SalaryslipMaintCopy",arg.GetString(),x)!=1) { alert(x.text()); return -1; }else { dw_list.Retrieve(x); dw_list.Redraw(); } OnNewID(); return 1; } int OnNewID() { xstring SSBID=publiccode::GetGuid(); dw_base.SetGuid(1,SSBID); dw_base.SetItemString(1,L"smonth",L""); for(int i=1;i<=dw_list.GetRowCount();i++) { xstring SaleItemID=publiccode::GetGuid(); dw_list.SetGuid(i,SaleItemID); dw_list.SetItemString(i,L"SSBID",SSBID); } return 1; } int OnNewInital() { xstring sdate = publiccode::GetCurrentDate(); xstring m_userid = publiccode::GetUser().id; xstring m_username = publiccode::GetUser().name; xstring guid = publiccode::GetGuid(); dw_base.SetItemString(1,L"op_emp",m_userid); dw_base.SetItemDisplayString(1,L"op_emp",m_username); dw_base.SetItemString(1,L"op_date",sdate); return 1; } int onload() { SetArg(); dw_base = GetControl(L"dw_base"); dw_base.openUrl(L"/sale/view/Expense3/SalaryslipExBase"); dw_base.SetColHeaderHeight(0); dw_base.SetRowSelectorWidth(0); dw_base.SetHScrollState(false); dw_base.SetVScrollState(false); dw_list = GetControl(L"dw_list"); /*xml x = new xml; x.setNativePointer(xml ::CreateInstance()); xaserver::ExecXQuery(GetServerUrl(),L"[list.view.sale.xq]",L"",x); if(x) { msxml::IXMLDOMDocument xmlDoc = x.GetXmlDoc(); dw_list.SetDataObject(xmlDoc); }*/ dw_list.openUrl(L"/sale/view/Expense3/SalaryslipExMaint"); dw_list.SetEditUpperMode(true); dw_list.SetColumnState(L"CreatorID",false); dw_list.SetColumnState(L"CreateDate",false); dw_list.SetColumnState(L"LastEditManID",false); dw_list.SetColumnState(L"LastEditDate",false); dw_list.SetColumnState(L"lastSalay",false); dw_list.SetColumnState(L"lastOffsettingAmount",false); dw_list.SetColumnState(L"SSBID",false); dw_list.SetColumnState(L"SalaryslipID",false); OnAttachEvent(); if(GetWinParam()) { xaserverarg arg = GetArg(); if(arg.GetArgString(L"action") == L"Copy") { OnEntityCopy(arg.GetArgString(L"SSBID")); return 1; } if(arg.GetArgString(L"SSBID") != L"" ) { OnRetrieveEx(arg.GetArgString(L"SSBID")); } } else { OnNewInital(); } return 1; } int onloaded() { SetAgent(); return 1; } };