public override void Execute() { Console.WriteLine("Executing Example: " + this.Title); Console.WriteLine("See: " + Settings.Default.DeveloperPortalBaseUrl + this.DocsUrl); Console.WriteLine("==================================="); var employerKey = Convert.ToBase64String(Guid.NewGuid().ToByteArray()) .Replace("=", string.Empty) .Replace("+", string.Empty) .Replace(@"/", string.Empty); // Step 1: Create an Employer Console.WriteLine("Step 1: Create an Employer"); var employer = new Employer { EffectiveDate = new DateTime(2020, 4, 6), Name = "Batch Employer", RuleExclusions = RuleExclusionFlags.None, Territory = CalculatorTerritory.UnitedKingdom, Region = CalculatorRegion.England, }; // Step 2: Create a Pay Schedule Console.WriteLine("Step 2: Create a Pay Schedule to POST"); var payScheduleA = new PaySchedule { Name = "Test 1", PayFrequency = PayFrequency.Monthly }; // Step 3: Create a Pay Schedule Console.WriteLine("Step 2: Create a Pay Schedule to PUT"); var payScheduleB = new PaySchedule { Name = "Test 2", PayFrequency = PayFrequency.Monthly }; // Step 4: Create an Employee Console.WriteLine("Step 4: Create an Employee"); var employee = new Employee { EffectiveDate = new DateTime(2020, 4, 6), Code = "EMP001", FirstName = "John", LastName = "Smith", DateOfBirth = new DateTime(1980, 1, 1), NicLiability = NicLiability.IsFullyLiable, Region = CalculatorRegion.England, Territory = CalculatorTerritory.UnitedKingdom, PaySchedule = new Link { Href = $"/Employer/{employerKey}/PaySchedule/TEST001" }, AEAssessmentOverride = AEAssessmentOverride.None }; // Step 5: Create a batch Job Console.WriteLine("Step 5: Create a Batch Job"); var batchJob = new BatchJobInstruction { ValidateOnly = false }; batchJob.Instructions.Add(new BatchPutItem { Body = employer, Href = $"/Employer/{employerKey}" }); batchJob.Instructions.Add(new BatchPostItem { Body = payScheduleA, Href = $"/Employer/{employerKey}/PaySchedules" }); batchJob.Instructions.Add(new BatchPutItem { Body = payScheduleB, Href = $"/Employer/{employerKey}/PaySchedule/TEST001" }); batchJob.Instructions.Add(new BatchPutItem { Body = employee, Href = $"/Employer/{employerKey}/Employees" }); batchJob.Instructions.Add(new BatchPatchItem { Href = $"/Employer/{employerKey}/Employee/EE001", Body = "<Employee><EffectiveDate>2020-04-06</EffectiveDate><Deactivated>true</Deactivated></Employee>" }); var doc = XmlSerialiserHelper.SerialiseToXmlDoc(batchJob); Console.WriteLine(doc.OuterXml); var jobInfoLink = this.ApiHelper.Post("/Jobs/Batch", batchJob); Console.WriteLine($" CREATED: {jobInfoLink.Title} - {jobInfoLink.Href}"); // Step 6: Query Batch Job Status Console.WriteLine("Step 6: Query Batch Job Status"); while (true) { Thread.Sleep(1000); var payRunJobInfo = this.ApiHelper.Get <JobInfo>(jobInfoLink.Href); Console.WriteLine($" Job Status: {payRunJobInfo.JobStatus} - {payRunJobInfo.Progress:P2}"); if (payRunJobInfo.JobStatus == JobStatus.Success) { break; } if (payRunJobInfo.JobStatus == JobStatus.Failed) { throw new Exception("Batch job failed:" + string.Join(Environment.NewLine, payRunJobInfo.Errors)); } } // End of examples Console.WriteLine(string.Empty); Console.WriteLine("-- THE END --"); }
public override void Execute() { Console.WriteLine("Executing Example: " + this.Title); Console.WriteLine("See: " + Settings.Default.DeveloperPortalBaseUrl + this.DocsUrl); Console.WriteLine("==================================="); // Step 1: Create an Employer Console.WriteLine("Step 1: Create an Employer"); var employer = new Employer { EffectiveDate = new DateTime(2020, 4, 1), Name = "AE Test Ltd", Region = CalculatorRegion.England, Territory = CalculatorTerritory.UnitedKingdom, RuleExclusions = RuleExclusionFlags.None, AutoEnrolment = new EmployerAutoEnrolment { StagingDate = new DateTime(2014, 4, 1), PrimaryFirstName = "Terry", PrimaryLastName = "Tester", PrimaryEmail = "*****@*****.**", PrimaryTelephone = "0123456789", PrimaryJobTitle = "HR Manager" } }; var employerLink = this.ApiHelper.Post("/Employers", employer); Console.WriteLine($" CREATED: {employerLink.Title} - {employerLink.Href}"); // Step 2: Create Auto Enrolment Pension Scheme Console.WriteLine("Step 2: Create Auto Enrolment Pension Scheme"); var autoEnrolmentPension = new Pension { EffectiveDate = new DateTime(2020, 4, 1), SchemeName = "AE Scheme", ProviderName = "NEST", ProviderEmployerRef = "EMP123456789", EmployeeContributionPercent = 0.05m, EmployerContributionPercent = 0.03m, TaxationMethod = PensionTaxationMethod.ReliefAtSource, AECompatible = true, UseAEThresholds = true, PensionablePayCodes = new Collection <string> { "BASIC" }, QualifyingPayCodes = new Collection <string> { "BASIC" } }; var aePensionLinkHref = employerLink.Href + "/Pension/AEPENSION"; var aePensionLink = this.ApiHelper.Put(aePensionLinkHref, autoEnrolmentPension); Console.WriteLine($" CREATED: {aePensionLink.SchemeName} - {aePensionLinkHref}"); // Step 3: Update Employer Auto Enrolment Pension Scheme Console.WriteLine("Step 3: Update Employer Auto Enrolment Pension Scheme"); employer.AutoEnrolment.Pension = new Link { Href = aePensionLinkHref }; this.ApiHelper.Patch <Employer>(employerLink.Href, XmlSerialiserHelper.Serialise(employer)); Console.WriteLine($" UPDATE: Updated employer with AE pension - {aePensionLinkHref}"); // Step 4: Create a Pay Schedule Console.WriteLine("Step 2: Create a Pay Schedule"); var paySchedule = new PaySchedule { Name = "My Monthly", PayFrequency = PayFrequency.Monthly }; var payScheduleLink = this.ApiHelper.Post(employerLink.Href + "/PaySchedules", paySchedule); Console.WriteLine($" CREATED: {payScheduleLink.Title} - {payScheduleLink.Href}"); // Step 5: Create an Employee Console.WriteLine("Step 3: Create an Employee"); var employee = new Employee { EffectiveDate = new DateTime(2020, 4, 1), Code = "EMPAE1", FirstName = "Jane", LastName = "Johnson", DateOfBirth = new DateTime(1990, 12, 10), Gender = Gender.Female, NicLiability = NicLiability.IsFullyLiable, Region = CalculatorRegion.England, Territory = CalculatorTerritory.UnitedKingdom, WorkingWeek = WorkingWeek.AllWeekDays, HoursPerWeek = 37.5m, RuleExclusions = RuleExclusionFlags.None, PaySchedule = payScheduleLink, StartDate = new DateTime(2013, 4, 1), AEAssessmentOverride = AEAssessmentOverride.None }; var employeeLink = this.ApiHelper.Post(employerLink.Href + "/Employees", employee); Console.WriteLine($" CREATED: {employeeLink.Title} - {employeeLink.Href}"); // Step 6: Create a Pay Instruction (Salary) Console.WriteLine("Step 6: Pay the Employee"); var rateInstruction = new RatePayInstruction { StartDate = new DateTime(2020, 4, 1), EndDate = new DateTime(2020, 4, 1), Rate = 13.56m, RateUoM = UomBasicPay.Hour, Units = 160 }; var rateInstructionLink = this.ApiHelper.Post(employeeLink.Href + "/PayInstructions", rateInstruction); Console.WriteLine($" CREATED: {rateInstructionLink.Title} - {rateInstructionLink.Href}"); // Step 7: Create a Pay Run Job Console.WriteLine("Step 7: Create a Pay Run Job"); var payRunJob = new PayRunJobInstruction { PaymentDate = new DateTime(2020, 4, 30), StartDate = new DateTime(2020, 4, 1), EndDate = new DateTime(2020, 4, 30), PaySchedule = payScheduleLink }; var jobInfoLink = this.ApiHelper.Post("/Jobs/Payruns", payRunJob); Console.WriteLine($" CREATED: {jobInfoLink.Title} - {jobInfoLink.Href}"); // Step 8: Query Pay Run Job Status Console.WriteLine("Step 8: Query Pay Run Job Status"); while (true) { Thread.Sleep(1000); var payRunJobInfo = this.ApiHelper.Get <JobInfo>(jobInfoLink.Href); Console.WriteLine($" Job Status: {payRunJobInfo.JobStatus} - {payRunJobInfo.Progress:P2}"); if (payRunJobInfo.JobStatus == JobStatus.Success) { break; } if (payRunJobInfo.JobStatus == JobStatus.Failed) { throw new Exception("Payrun job failed:" + string.Join(Environment.NewLine, payRunJobInfo.Errors)); } } // Step 9: Examine the AE Assessment Result Console.WriteLine("Step 9: Examine the AE Assessment Result"); var aeAsseeement = this.ApiHelper.GetRawXml($"{employeeLink}/AEAssessment/AE001"); Console.WriteLine(aeAsseeement.InnerXml); // Step 10: Review Calculation Commentary Console.WriteLine("Step 10: Review Calculation Commentary"); var commentaryLinks = this.ApiHelper.GetLinks(employeeLink.Href + "/Commentaries"); var commentary = this.ApiHelper.Get <Commentary>(commentaryLinks.Links.First().Href); Console.WriteLine(commentary.Detail); // End of examples Console.WriteLine(string.Empty); Console.WriteLine("-- THE END --"); }