예제 #1
0
        public override void SaveRecord(SavingParemeter Paras)
        {
            DAL.tblNonCashBenefit SaveModel = null;

            if (Paras.SavingInterface == SavingParemeter.eSavingInterface.AddNew || EditRecordDataSource == null)
            {
                SaveModel = new DAL.tblNonCashBenefit();
            }
            else
            {
                SaveModel = DALObject.FindSaveModelByPrimeKey(((NonCashBenefitEditListModel)EditRecordDataSource).NonCashBenefitID);

                if (SaveModel == null)
                {
                    Paras.SavingResult = new SavingResult();
                    Paras.SavingResult.ExecutionResult = eExecutionResult.ValidationError;
                    Paras.SavingResult.ValidationError = "Can not edit. Selected record not found, it may be deleted by another user.";
                    return;
                }
            }

            SaveModel.NonCashBenefitName = txtNonCashBenefitName.Text;
            SaveModel.NonCashBenefitType = (byte)cmbBenifitType.SelectedIndex;

            SaveModel.KRAValueType = (byte)cmbKRAValueType.SelectedIndex;
            SaveModel.KRAValue     = (decimal)txtKRAValue.EditValue;

            SaveModel.CostValueType = (byte)cmbCostValueType.SelectedIndex;
            SaveModel.CostValue     = (decimal)txtCostValue.EditValue;

            SaveModel.VehicleType           = txtVehicleType.Text;
            SaveModel.VehicleRegistrationNo = txtRegistrationNo.Text;
            SaveModel.VehicleMake           = txtMake.Text;
            SaveModel.VehicleModel          = txtModelNo.Text;
            SaveModel.VehicleEnginePower    = txtEnginePowerCC.Text;
            SaveModel.EngineCCKRAValue      = (decimal)txtEngineCCKRAValue.EditValue;
            SaveModel.VehicleCostKRAPerc    = (decimal)txtVehicleCostKRAPerc.EditValue;

            Paras.SavingResult = DALObject.SaveNewRecord(SaveModel);
            base.SaveRecord(Paras);
        }
예제 #2
0
        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
        }