示例#1
0
        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 --");
        }
示例#2
0
        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 --");
        }