private async Task GetLevyFromPreviousSubmission(EmployerLevyData employerLevyData, DasDeclaration dasDeclaration) { var previousSubmission = await _dasLevyRepository.GetLastSubmissionForScheme(employerLevyData.EmpRef); dasDeclaration.LevyDueYtd = previousSubmission?.LevyDueYtd ?? 0; dasDeclaration.LevyAllowanceForFullYear = previousSubmission?.LevyAllowanceForFullYear ?? 0; }
private async Task <ICollection <EmployerLevyData> > ProcessScheme(string payeRef, GetEnglishFractionUpdateRequiredResponse englishFractionUpdateResponse) { var payeSchemeDeclarations = new List <EmployerLevyData>(); await UpdateEnglishFraction(payeRef, englishFractionUpdateResponse); _logger.Debug($"Getting levy declarations from HMRC for PAYE scheme {payeRef}"); var levyDeclarationQueryResult = HmrcProcessingEnabled || DeclarationProcessingOnly ? await _mediator.SendAsync(new GetHMRCLevyDeclarationQuery { EmpRef = payeRef }) : null; _logger.Debug($"Processing levy declarations retrieved from HMRC for PAYE scheme {payeRef}"); if (levyDeclarationQueryResult?.LevyDeclarations?.Declarations != null) { var declarations = CreateDasDeclarations(levyDeclarationQueryResult); var employerData = new EmployerLevyData { EmpRef = payeRef, Declarations = { Declarations = declarations } }; payeSchemeDeclarations.Add(employerData); } return(payeSchemeDeclarations); }
private async Task UpdateEndOfYearAdjustment(EmployerLevyData employerLevyData, DasDeclaration dasDeclaration) { var adjustmentDeclaration = await _dasLevyRepository.GetSubmissionByEmprefPayrollYearAndMonth(employerLevyData.EmpRef, dasDeclaration.PayrollYear, dasDeclaration.PayrollMonth.Value); dasDeclaration.EndOfYearAdjustment = true; dasDeclaration.EndOfYearAdjustmentAmount = adjustmentDeclaration?.LevyDueYtd - dasDeclaration.LevyDueYtd ?? 0; }
private async Task <DasDeclaration[]> FilterActiveDeclarations(EmployerLevyData employerLevyData, IEnumerable <DasDeclaration> declarations) { var existingSubmissionIds = await _dasLevyRepository.GetEmployerDeclarationSubmissionIds(employerLevyData.EmpRef); var existingSubmissionIdsLookup = new HashSet <string>(existingSubmissionIds.Select(x => x.ToString())); //NOTE: The submissionId in our database is the same as the declaration ID from HMRC (DasDeclaration) declarations = declarations.Where(x => !existingSubmissionIdsLookup.Contains(x.Id)).ToArray(); declarations = declarations.Where(x => !DoesSubmissionPreDateTheLevy(x)).ToArray(); return(declarations.Where(x => !IsSubmissionForFuturePeriod(x)).ToArray()); }
private async Task ProcessScheme(string payeRef, GetEnglishFractionUpdateRequiredResponse englishFractionUpdateResponse, ICollection <EmployerLevyData> employerDataList) { if (HmrcProcessingEnabled || FractionProcessingOnly) { await _mediator.SendAsync(new UpdateEnglishFractionsCommand { EmployerReference = payeRef, EnglishFractionUpdateResponse = englishFractionUpdateResponse }); await _dasAccountService.UpdatePayeScheme(payeRef); } var levyDeclarationQueryResult = HmrcProcessingEnabled || DeclarationProcessingOnly ? await _mediator.SendAsync(new GetHMRCLevyDeclarationQuery { EmpRef = payeRef }) : null; var employerData = new EmployerLevyData(); if (levyDeclarationQueryResult?.LevyDeclarations?.Declarations != null) { foreach (var declaration in levyDeclarationQueryResult.LevyDeclarations.Declarations) { var dasDeclaration = new DasDeclaration { SubmissionDate = DateTime.Parse(declaration.SubmissionTime), Id = declaration.Id, PayrollMonth = declaration.PayrollPeriod?.Month, PayrollYear = declaration.PayrollPeriod?.Year, LevyAllowanceForFullYear = declaration.LevyAllowanceForFullYear, LevyDueYtd = declaration.LevyDueYearToDate, NoPaymentForPeriod = declaration.NoPaymentForPeriod, DateCeased = declaration.DateCeased, InactiveFrom = declaration.InactiveFrom, InactiveTo = declaration.InactiveTo, SubmissionId = declaration.SubmissionId }; employerData.EmpRef = payeRef; employerData.Declarations.Declarations.Add(dasDeclaration); } employerDataList.Add(employerData); } }
private static void ProcessNoPaymentForPeriodDeclarations(IEnumerable <DasDeclaration> declarations, EmployerLevyData employerLevyData) { var noPaymentForPeriodDeclarations = declarations.Where(x => x.NoPaymentForPeriod); foreach (var dasDeclaration in noPaymentForPeriodDeclarations) { dasDeclaration.LevyDueYtd = null; } }
private async Task ProcessEndOfYearAdjustmentDeclarations(IEnumerable <DasDeclaration> declarations, EmployerLevyData employerLevyData) { var endOfYearAdjustmentDeclarations = declarations.Where(IsEndOfYearAdjustment).ToList(); foreach (var dasDeclaration in endOfYearAdjustmentDeclarations) { await UpdateEndOfYearAdjustment(employerLevyData, dasDeclaration); } }