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); }
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); }