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