コード例 #1
0
ファイル: frmEmployeePayslip.cs プロジェクト: ewin66/RAPH
        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
        }
コード例 #2
0
ファイル: frmEmployeePayslip.cs プロジェクト: ewin66/RAPH
        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();
        }