þÿuse "xcontrol.vframe.vbusiness.vd" use "xbase.vframe.vbusiness.vd" use "base.view.vd" unit trade [ class SalaryslipEdit : public frame { xdwtable dw_base; xnode m_agentNode; //Agent Condition int hObject; bool updated; int SetAgent() { string xfNodeAgentArea = "agentarea"; xnode anode = GetAgentNode(xfNodeAgentArea); if (m_agentNode) { SetAgentNodeContent(anode, m_agentNode); } else { msxml::IXMLDOMElement xframeElement = GetElement(); msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/" + xfNodeAgentArea + "[1]/*"); if (agent) { string s = agent.xml; m_agentNode = SetAgentNodeContent(anode, s); } } return 1; } //q&p¹oÀm;YtQýep int OnSetFocus(ref TEvent evt, int param) { //‘Ín]åQwga SetAgent(); return 1; } int OnSave() { string SalaryslipNo = dw_base.GetItemString(1, "SalaryslipNo"); xml x = new xml; if (SalaryslipNo == "") { x = ViewObject::RetrieveData("/sale/data/expense3/view/MakeSalaryslipNo"); SalaryslipNo = x.GetXmlDoc().text; dw_base.SetItemString(1, "SalaryslipNo", SalaryslipNo); } x.setNativePointer(xml::CreateInstance()); dw_base.AcceptText(); dw_base.DwUpdateAllTo(x.GetXmlDoc()); xaserverarg arg = new xaserverarg; arg.setNativePointer(xaserverarg::CreateInstance()); arg.AddArg("content", x.GetXml()); if (url::get("/sale/data/expense3/update/salaryslip", arg.GetString(), x) != 1) { string error = x.GetXmlDoc().text; alert("err:" + error); return 1; } string str = x.GetXmlDoc().documentElement.getAttribute("text"); if (str == "true") { dw_base.ResetUpdateStatus(); dw_base.Redraw(); updated = true; alert("OÝ[XbRŸ!"); } else { alert("OÝ[XY1%!"); } return 1; } //T}NäSÑ^Qýep int OnCmdDispatch(string comdid) { if (comdid == "xmClose") { if (updated) win32::SendMessage(hObject, 0x401, "xmRefresh", 0); CloseWindow(); return 1; } else if (comdid == "xmSave") { OnSave(); } return 0; } int ComputeTotal() { double SalaryAmount = dw_base.GetItemDouble(1, "SalaryAmount"); double lastSalay = dw_base.GetItemDouble(1, "lastSalay"); double ttSalary = dw_base.GetItemDouble(1, "ttSalary"); double lastTotalSalary = dw_base.GetItemDouble(1, "lastTotalSalary"); double OffsettingAmount = dw_base.GetItemDouble(1, "OffsettingAmount"); double lastOffsettingAmount = dw_base.GetItemDouble(1, "lastOffsettingAmount"); double totalOffsetting = OffsettingAmount + lastOffsettingAmount; dw_base.SetItemDouble(1, "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_base.SetItemDouble(1, "totalTax", totalTax); } return 1; } int ComputeTax() { ComputeTotal(); double totalTax = dw_base.GetItemDouble(1, "totalTax"); double lastTotalTax = dw_base.GetItemDouble(1, "lastTotalTax"); double SalaryAmount = dw_base.GetItemDouble(1, "SalaryAmount"); double PersonalIncomeTax = totalTax - lastTotalTax; if (PersonalIncomeTax < 0.00) { PersonalIncomeTax = 0.00; } dw_base.SetItemDouble(1, "PersonalIncomeTax", PersonalIncomeTax); PersonalIncomeTax = dw_base.GetItemDouble(1, "PersonalIncomeTax"); double DeductFeeAount = dw_base.GetItemDouble(1, "DeductFeeAount"); double ActualAmount = SalaryAmount - PersonalIncomeTax - DeductFeeAount; dw_base.SetItemDouble(1, "ActualAmount", ActualAmount); dw_base.Redraw(); return 1; } int ComputeIncomeTax() { double DeductFeeAount = dw_base.GetItemDouble(1, "DeductFeeAount"); double SalaryAmount = dw_base.GetItemDouble(1, "SalaryAmount"); double SpecialDeductFee = dw_base.GetItemDouble(1, "SpecialDeductFee"); double OffsettingAmount = DeductFeeAount + SpecialDeductFee + 5000; double IncomeTax = SalaryAmount - OffsettingAmount; dw_base.SetItemDouble(1, "OffsettingAmount", OffsettingAmount); dw_base.SetItemDouble(1, "IncomeTax", IncomeTax); return 1; } int ComputeDeductFeeAount() { double EndowmentInsurance = dw_base.GetItemDouble(1, "EndowmentInsurance"); double MedicalInsurance = dw_base.GetItemDouble(1, "MedicalInsurance"); double UnemploymentInsurance = dw_base.GetItemDouble(1, "UnemploymentInsurance"); double HousingProvidentFund = dw_base.GetItemDouble(1, "HousingProvidentFund"); double LeaveDeductFee = dw_base.GetItemDouble(1, "LeaveDeductFee"); double OtherDeductFee = dw_base.GetItemDouble(1, "OtherDeductFee"); //double SpecialDeductFee = dw_base.GetItemDouble(1,"SpecialDeductFee"); double DeductFeeAount = EndowmentInsurance + MedicalInsurance + UnemploymentInsurance + HousingProvidentFund + LeaveDeductFee + OtherDeductFee; dw_base.SetItemDouble(1, "DeductFeeAount", DeductFeeAount); } int OnItemChanged(ref TNotifyEvent evt, int p) { ref DWNMHDR hdr = trust(evt.pnmh as ref DWNMHDR); string colname = hdr.colname; string value = hdr.data; int row = hdr.row; xml x = new xml; if (colname == "PersonID") { if (value == "") return 0; xml xp = ViewObject::RetrieveData("/sale/data/expense3/GetPersonID", "PersonID", value); msxml::IXMLDOMNodeList itemp = xp.GetXmlDoc().selectNodes("data/Item"); msxml::IXMLDOMNode tp = itemp.item(0); if (tp.selectSingleNode("SpecialDeductFeeAmout")) { /*double SpecialDeductFeeAmoutEx = 0.00; string SpecialDeductFeeAmout = ; SpecialDeductFeeAmoutEx =SpecialDeductFeeAmout.toDouble();*/ dw_base.SetItemString(1, "SpecialDeductFee", tp.selectSingleNode("SpecialDeductFeeAmout").text); } if (tp.selectSingleNode("DeptName")) { dw_base.SetItemString(1, "DeptName", tp.selectSingleNode("DeptName").text); dw_base.SetItemDisplayString(1, "DeptName", tp.selectSingleNode("DeptName").text); } if (tp.selectSingleNode("GroupName")) { dw_base.SetItemString(1, "GroupName", tp.selectSingleNode("GroupName").text); dw_base.SetItemDisplayString(1, "GroupName", tp.selectSingleNode("GroupName").text); } } if (colname == "PersonID" || colname == "SalaryslipDate") { string PersonID = dw_base.GetItemString(1, "PersonID"); string SalarysDate = dw_base.GetItemString(1, "SalaryslipDate"); string sdate = publiccode::GetCurrentDate(); if (PersonID == "") { return 0; } if (SalarysDate == "") { SalarysDate = sdate; } x = ViewObject::RetrieveData("/sale/data/expense3/view/GetLastData", "PersonID", PersonID, "SalarysDate", SalarysDate); msxml::IXMLDOMNodeList items = x.GetXmlDoc().selectNodes("data/amount"); msxml::IXMLDOMNode t = items.item(0); double lastSpecialDeductFee = 0.00; double lastOffsettingAmount = 0.00; double lastTotalTax = 0.00; if (t.selectSingleNode("lastSpecialDeductFee")) { string SpecialDeductFeeTxt = t.selectSingleNode("lastSpecialDeductFee").text; lastSpecialDeductFee = SpecialDeductFeeTxt.toDouble(); dw_base.SetItemDouble(1, "SpecialDeductFee", lastSpecialDeductFee); ComputeDeductFeeAount(); } if (t.selectSingleNode("lastOffsettingAmount")) { string lastOffsettingAmountTxT = t.selectSingleNode("lastOffsettingAmount").text; lastOffsettingAmount = lastOffsettingAmountTxT.toDouble(); dw_base.SetItemDouble(1, "lastOffsettingAmount", lastOffsettingAmount); } if (t.selectSingleNode("lastTotalTax")) { string lastTotalTaxTxt = t.selectSingleNode("lastTotalTax").text; lastTotalTax = lastTotalTaxTxt.toDouble(); dw_base.SetItemDouble(1, "lastTotalTax", lastTotalTax); } initial(); ComputeTax(); }if (colname == "BasicSalary" || colname == "MealAllowance" || colname == "MoneyAward") { double BasicSalary = dw_base.GetItemDouble(1, "BasicSalary"); double MealAllowance = dw_base.GetItemDouble(1, "MealAllowance"); double MoneyAward = dw_base.GetItemDouble(1, "MoneyAward"); double SalaryAmount = BasicSalary + MealAllowance + MoneyAward; dw_base.SetItemDouble(1, "SalaryAmount", SalaryAmount); double lastSalay = dw_base.GetItemDouble(1, "lastSalay"); dw_base.SetItemDouble(1, "ttSalary", lastSalay + SalaryAmount); ComputeIncomeTax(); ComputeTax(); } if (colname == "EndowmentInsurance" || colname == "MedicalInsurance" || colname == "UnemploymentInsurance" || colname == "HousingProvidentFund" || colname == "LeaveDeductFee" || colname == "OtherDeductFee" || colname == "SpecialDeductFee") { ComputeDeductFeeAount(); ComputeIncomeTax(); ComputeTax(); } if (colname == "SalaryAmount" || colname == "DeductFeeAount" || colname == "OffsettingAmount") { ComputeIncomeTax(); ComputeTax(); } if (colname == "ttSalary") { ComputeTax(); } if (colname == "PersonalIncomeTax") { double SalaryAmount1 = dw_base.GetItemDouble(1, "SalaryAmount"); double PersonalIncomeTax = value.toDouble(); double DeductFeeAount = dw_base.GetItemDouble(1, "DeductFeeAount"); double ActualAmount = SalaryAmount1 - PersonalIncomeTax - DeductFeeAount; dw_base.SetItemDouble(1, "ActualAmount", ActualAmount); } dw_base.Redraw(); return 1; } //T}NäYtN‹Nö int OnXCommand(ref TXCommandEvent evt, int param) { return OnCmdDispatch(evt.pStrID); } int OnDWClick(ref TNotifyEvent evt, int p) { ref DWNMHDR hdr = trust(evt.pnmh as ref DWNMHDR); string value = hdr.data; string colname = hdr.colname; if (value == "}/‹¡e6Qe") { int hCursor = xutil::SetCursorWait(); xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); string PersonID = dw_base.GetItemString(1, "PersonID"); if (PersonID == "") { alert("‹÷ béTX]å"); return 0; } arg.AddArg("PersonID", PersonID); string SalaryslipDate = dw_base.GetItemString(1, "SalaryslipDate"); arg.AddArg("SalaryslipDate", SalaryslipDate); int pa = cast(arg as int); OpenWindow("dev:xpage[SelectSalaryslip.vx]", pa); xutil::RestoreCursor(hCursor); string amount = arg.GetArgString("amount"); if (amount != "") { dw_base.SetItemDouble(1, "lastSalay", amount.toDouble()); dw_base.SetItemDouble(1, "ttSalary", amount.toDouble() + dw_base.GetItemDouble(1, "SalaryAmount")); dw_base.Redraw(); ComputeTax(); } return 1; } } int OnAttachEvent() { //~Ñ[š]åQwgap¹QûN‹Nö AttachEvent("WM_XCOMMAND", OnXCommand); //ƒ·SÖq&p¹N‹Nöÿ u(NŽ‘Ín]åQwga AttachEvent("WM_SETFOCUS", OnSetFocus); AttachEvent("dw_base", "DWV_ITEMCHANGED", OnItemChanged); AttachEvent("dw_base", "DWV_CLICKED", OnDWClick); } int OnRetrieve(string SalaryslipID) { xml x = new xml; x.setNativePointer(xml::CreateInstance()); xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); arg.AddArg("SalaryslipID", SalaryslipID); if (getUrl("/sale/data/expense3/view/getSalaryslipByID", arg.GetString(), x) != 1) { trace(x.GetXmlDoc().text); return -1; } else { dw_base.Retrieve(x); dw_base.Redraw(); } return 1; } int initial() { dw_base.SetItemDouble(1, "ActualAmount", 1427.40); dw_base.SetItemDouble(1, "BasicSalary", 2490.00); dw_base.SetItemDouble(1, "MealAllowance", 250.00); dw_base.SetItemDouble(1, "EndowmentInsurance", 356.96); dw_base.SetItemDouble(1, "MedicalInsurance", 89.24); dw_base.SetItemDouble(1, "UnemploymentInsurance", 22.31); dw_base.SetItemDouble(1, "HousingProvidentFund", 114.00); dw_base.SetItemDouble(1, "DeductFeeAount", 582.51); //dw_base.SetItemDouble(1,"SpecialDeductFee",2000.00); dw_base.SetItemDouble(1, "lastSalay", 0.0); dw_base.SetItemDouble(1, "SalaryAmount", 1900.00); ComputeIncomeTax(); return 1; } int onload() { dw_base = GetControl("dw_base"); dw_base.openUrl("/sale/view/expense3/Salaryslip/Base"); dw_base.SetColHeaderHeight(0); dw_base.SetRowSelectorWidth(0); dw_base.SetHScrollState(false); dw_base.SetVScrollState(false); string suserid = publiccode::GetUser().id; string susername = publiccode::GetUser().name; string sdate = publiccode::GetCurrentDate(); string SalaryslipID = ""; hObject = 0; if (GetParam()) { xaserverarg arg = new xaserverarg; arg.setNativePointer(GetParam()); SalaryslipID = arg.GetArgString("SalaryslipID"); hObject = arg.GetArgString("HWND").toInt(); } if (SalaryslipID != "") { OnRetrieve(SalaryslipID); dw_base.Redraw(); } else { dw_base.SetItemString(1, "SalaryslipDate", sdate); dw_base.SetItemString(1, "CreateDate", sdate); dw_base.SetItemString(1, "CreatorID", suserid); initial(); } OnAttachEvent(); updated = false; return 1; } int onloaded() { SetAgent(); return 1; } }; ]