Example #1
0
        protected virtual MasterDataBO CopyToNewCalc(MasterDataBO oldData, PayRunBO payPeriod)
        {
            string json   = JsonSerializer.Serialize(oldData);
            var    result = JsonSerializer.Deserialize <MasterDataBO>(json);

            result.PlanYear = payPeriod.PlanYear;
            result.PayRunID = payPeriod.PayRunID;

            result.MasterEmployeeDeductions.ToList()
            .ForEach(a =>
            {
                a.MasterEmployeeDeductionID = 0;
                a.PlanYear = payPeriod.PlanYear;
                a.PayRunID = payPeriod.PayRunID;
            });

            result.MasterEmployeeEarnings.ToList()
            .ForEach(a =>
            {
                a.MasterEmployeeEarningID = 0;
                a.PlanYear = payPeriod.PlanYear;
                a.PayRunID = payPeriod.PayRunID;
            });

            return(result);
        }
Example #2
0
        public override bool Run(int key, MainCalcCmd request)
        {
            short planYear    = p_ProcessTracker.PlanYear.GetValueOrDefault();
            short payPeriodID = p_ProcessTracker.PayRunID.GetValueOrDefault();

            bool isSuccess = false;

            try
            {
                p_PayPeriod = p_Processor.Run(new FindPayRunQr(planYear, payPeriodID));

                if (p_PayPeriod == null)
                {
                    throw new AerishException($"Invalid pay period ({planYear} - {payPeriodID}) for client: {p_AppSession.ClientID}");
                }

                p_OldMasterData = p_Processor.Run(new GetPreviousMasterDataQr(p_PayPeriod.PlanYear, p_PayPeriod.PayRunID, key));

                if (p_OldMasterData != null)
                {
                    p_NewMasterData = CopyToNewCalc(p_OldMasterData, p_PayPeriod);
                }
                else
                {
                    p_ProcessTracker.LogMessage("No existing records");

                    p_NewMasterData = new MasterDataBO
                    {
                        EmployeeID   = key,
                        ClientID     = p_AppSession.ClientID,
                        RecordStatus = RecordStatus.ModelledActive,
                    };
                }

                p_NewMasterData.ClearTracker();

                p_NewMasterData.PlanYear = p_PayPeriod.PlanYear;
                p_NewMasterData.PayRunID = p_PayPeriod.PayRunID;

                CalcLastCalcID();
                CalcBasicPay();
                CalcDaysFactor();
                CalcRates();

                ValidateParameters();

                CalcDeductions();
                CalcLoans();
                CalcEarnings();
                CalcTotalTaxableIncome();
                CalcTotalNonTaxableIncome();
                CalcNetTaxableIncome();
                CalcWitholdingTax();
                CalcTotalDeduction();
                CalcNetSalary();

                if (p_NewMasterData.HasChanges())
                {
                    if (p_OldMasterData != null)
                    {
                        MarkOldCalcAsFrozen(p_OldMasterData);
                    }

                    p_NewMasterData.RecordStatus = RecordStatus.Active;

                    var newMasterData = p_Mapper.Map <MasterDataBO, MasterEmployee>(p_NewMasterData);
                    p_DbContext.MasterEmployees.Add(newMasterData);

                    p_ProcessTracker.SaveContext = true;
                }
                else
                {
                    p_ProcessTracker.SaveContext = false;
                }

                isSuccess = true;
            }
            catch (Exception ex)
            {
                p_ProcessTracker.LogError(ex);

                isSuccess = false;
            }

            return(isSuccess);
        }