void CalculatePAYE() { if (EmployeeSaveModel == null) { return; } if (ServiceSaveModel == null) { return; } //-- #region NHIF, NSSF, PAYE & P.F. List <EmployeePayslip_EarningAndDeductionsViewModel> dsTaxableIncome = new List <EmployeePayslip_EarningAndDeductionsViewModel>() { new EmployeePayslip_EarningAndDeductionsViewModel() { EarningAndDeductionName = "Normal Overtime", ValueType = eEarningDeductionValueType.Fixed, Value = NormalOvertimeValue }, new EmployeePayslip_EarningAndDeductionsViewModel() { EarningAndDeductionName = "Double Overtime", ValueType = eEarningDeductionValueType.Fixed, Value = DoubleOvertimeValue }, new EmployeePayslip_EarningAndDeductionsViewModel() { EarningAndDeductionName = "Weekend Allowance", ValueType = eEarningDeductionValueType.Fixed, Value = WeekendWorkedValue }, new EmployeePayslip_EarningAndDeductionsViewModel() { EarningAndDeductionName = "Absent", ValueType = eEarningDeductionValueType.Fixed, Value = -AbsentValue }, new EmployeePayslip_EarningAndDeductionsViewModel() { EarningAndDeductionName = "Notice Pay", ValueType = eEarningDeductionValueType.Fixed, Value = NoticePayValue }, new EmployeePayslip_EarningAndDeductionsViewModel() { EarningAndDeductionName = "Leave Encashment", ValueType = eEarningDeductionValueType.Fixed, Value = LeaveEncashmentValue }, }; dsTaxableIncome.AddRange(dsEarningAndDeduction.Where(r => r.RecordType == eEarningDeductionType.Earning && r.Taxable)); PAYETaxableEarningBindingSource.DataSource = dsTaxableIncome; GrossTaxableIncome = BasicIncome + HRA + (dsTaxableIncome.Sum(r => (decimal?)r.Value) ?? 0); decimal taxableValue = 0; decimal TaxValue = 0; #region NHIF if (cmbNHIFApplicable.SelectedIndex == 1) { var dsNHIFTaxSlab = TaxSlabDALObj.GetLatestTaxSlab(Model.Settings.eTaxSlab_TaxType.NHIF, eIncomeType.Primary).OrderBy(r => r.TaxableSalaryFromValue); taxableValue = BasicIncome + HRA; var MatchingSlab = dsNHIFTaxSlab.Where(r => r.TaxableSalaryFromValue <= taxableValue).OrderByDescending(r => r.TaxableSalaryFromValue).FirstOrDefault(); if (MatchingSlab != null) { NHIFValue = MatchingSlab.TaxValueEmployee; } else { NHIFValue = 0; } //TaxValue = 0; //foreach (var r in dsNHIFTaxSlab) //{ // if (r.TaxableSalaryToValue <= taxableValue) // { // TaxValue += r.TaxValueEmployee; // } //} //NHIFValue = TaxValue; } else { NHIFValue = 0; } #endregion #region NSSF if (cmbNSSF.SelectedIndex == 1) { taxableValue = BasicIncome + HRA; var dsNSSFTaxSlab = TaxSlabDALObj.GetTaxSlab(Model.Settings.eTaxSlab_TaxType.NSSF, DateTo); var SelectedTaxSlab = dsNSSFTaxSlab.Where(r => r.TaxableSalaryFromValue <= taxableValue).OrderByDescending(r => r.TaxableSalaryFromValue).FirstOrDefault(); if (SelectedTaxSlab != null) { NSSFValue = Math.Round(Math.Min(taxableValue * SelectedTaxSlab.TaxPercEmployee, SelectedTaxSlab.MaxTaxValueEmployee), 2); } else { NSSFValue = 0; } } else { NSSFValue = 0; } #endregion #region P.F. if (EmployeeSaveModel != null && (Model.Employee.eProvidentFund)EmployeeSaveModel.ProvidentFund == eProvidentFund.Applicable) { PFValue = Math.Round(BasicIncome * Model.CommonProperties.LoginInfo.SoftwareSettings.PFContributionEmployee, 2); } else { PFValue = 0; } #endregion #region PAYE List <EmployeePayslip_NoncashBenefitViewModel> dsPAYENonCashBenefit = dsNonCashBenefit.Where(r => r.Selected).ToList(); PAYENoncashBenefitBindingSource.DataSource = dsPAYENonCashBenefit; decimal VehicleValue = 0; if (lookUpVehicle_NonCashBenefit.EditValue != null) { var VehicleSaveModel = NonCashBenefitDALObj.FindSaveModelByPrimeKey((int)lookUpVehicle_NonCashBenefit.EditValue); if (VehicleSaveModel != null) { PAYENoncashBenefitBindingSource.Add(new EmployeePayslip_NoncashBenefitViewModel() { NonCashBenefitID = VehicleSaveModel.NonCashBenefitID, NonCashBenefitName = VehicleSaveModel.NonCashBenefitName, CostValue = VehicleSaveModel.CostValue, KRAValue = VehicleSaveModel.KRAValue, KRAValuePercentage = VehicleSaveModel.VehicleCostKRAPerc, }); VehicleValue = VehicleSaveModel.KRAValue; } } List <EmployeePayslip_PAYEReliefeViewModel> dsPAYEpayeRelief = dsPAYERelief.Where(r => r.Selected && r.PAYEReliefAmt != 0).ToList(); dsPAYEpayeRelief.Add(new EmployeePayslip_PAYEReliefeViewModel() { PAYEReliefName = "NSSF", PAYEReliefAmt = NSSFValue }); dsPAYEpayeRelief.Add(new EmployeePayslip_PAYEReliefeViewModel() { PAYEReliefName = "Provident Fund", PAYEReliefAmt = PFValue }); PAYERelief_PersonalRelief = ((dsPAYEpayeRelief.Where(r => r.PAYEReliefType == Model.Settings.ePAYEReliefType.PersonalRelief).Sum(r => (decimal?)r.PAYEReliefAmt) ?? 0)); dsPAYEpayeRelief.RemoveAll(r => r.PAYEReliefType == Model.Settings.ePAYEReliefType.PersonalRelief); PAYEReliefeBindingSource.DataSource = dsPAYEpayeRelief; TaxableIncome = GrossTaxableIncome + (dsPAYENonCashBenefit.Sum(r => (decimal?)r.KRAValue) ?? 0); NetTaxableIncome = TaxableIncome - dsPAYEpayeRelief.Sum(r => r.PAYEReliefAmt); // PAYE Calculation var dsPAYEtaxSlab = TaxSlabDALObj.GetLatestTaxSlab(Model.Settings.eTaxSlab_TaxType.PAYE, EmployeeSaveModel.IncomeType ? eIncomeType.Primary : eIncomeType.Secondary).OrderBy(r => r.TaxableSalaryFromValue); taxableValue = NetTaxableIncome; var FirstSlab = dsPAYEtaxSlab.OrderBy(r => r.TaxableSalaryFromValue).FirstOrDefault(); if (FirstSlab == null || FirstSlab.TaxableSalaryToValue < taxableValue) { //-- foreach (var r in dsPAYEtaxSlab) { if (r.TaxableSalaryFromValue > taxableValue) { break; } decimal CalculateOnAmt = 0; if (r.TaxableSalaryToValue <= taxableValue) { CalculateOnAmt = r.TaxableSalaryToValue - r.TaxableSalaryFromValue; } else { CalculateOnAmt = taxableValue - r.TaxableSalaryFromValue; } TaxValue += Math.Round(CalculateOnAmt * r.TaxPercEmployee, 2); } GrossPAYEValue = TaxValue; PAYEValue = TaxValue - PAYERelief_PersonalRelief; } else { GrossPAYEValue = 0; PAYEValue = 0; } #endregion PAYE #endregion Taxes }
void ClearPayrollValues() { EmployeeSaveModel = null; ServiceSaveModel = null; EditingEmployeeDetail = null; NormalOvertimeHours = 0; DoubleOvertimeHours = 0; AbsentDays = 0; NoticePayDay = 0; LeaveEncashmentDays = 0; WeekendWorkedDays = 0; LatenessDays = 0; //LatenessAmt = 0; LoanInstallmentAmt = 0; lookUpVehicle_NonCashBenefit.EditValue = null; dsEarningAndDeduction.ForEach(r => r.Value = 0); gvEarnings.RefreshData(); gvDeductions.RefreshData(); dsNonCashBenefit.ForEach(r => { r.Selected = false; r.Recurrning = false; var defaultValues = dsNonCashBenefitDefaultValues.FirstOrDefault(dr => dr.NonCashBenefitID == r.NonCashBenefitID); if (defaultValues != null) { r.KRAValue = defaultValues.KRAValue; r.KRAValuePercentage = defaultValues.KRAValuePercentage; r.CostValue = defaultValues.CostValue; } }); gvNonCashBenefit.RefreshData(); dsPAYERelief.ForEach(r => { if (r.Mandatory == Model.Settings.ePAYEReliefeMandatory.Yes) { r.Selected = true; r.PAYEReliefAmt = r.MonthlyLimit; } else { r.Selected = false; } //r.PAYEReliefAmt = 0; }); gvPAYERelief.RefreshData(); cmbNSSF.SelectedIndex = 1; cmbNHIFApplicable.SelectedIndex = 1; BasicIncome = 0; HRA = 0; GrossTaxableIncome = 0; TaxableIncome = 0; NetTaxableIncome = 0; PAYETaxableEarningBindingSource.Clear(); gvTaxableEarnings.RefreshData(); PAYENoncashBenefitBindingSource.Clear(); gvPAYE_NonCashBenefit.RefreshData(); PAYEReliefeBindingSource.Clear(); gvPAYE_PAYERelief.RefreshData(); }