public Forestry.Models.DTO.WorkRequest GetWorkRequestFromApi(Forestry.Models.DTO.WorkPacket workPacket)
        {
            //get the work request resourse
            dynamic workRequest = _workRequestRequestor.Get(new Uri(BaseManagedWorkApiUri + ResolveCurlyBrackets(Properties.Settings.Default.ManagedWorkOrderApiResourse_WorkRequest, workPacket.WorkRequestId.ToString())));

            //transform dynamic into work request DTO and resolve HATEOAS uri's
            Forestry.Models.DTO.WorkRequest wr = TransformDynamicWorkRequest(workRequest);

            Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "][SUCCESS]-retrieved Managed Work Order data");

            return(wr);
        }
        public void CreateRemedyTicket(Forestry.Models.DTO.WorkRequest workRequest, Forestry.Models.DTO.WorkPacket workPacket, List <ValidationResult> errors)
        {
            try
            {
                Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "][BEGIN--]-sending invalid data to Remedy");

                string allErrors = string.Empty;
                foreach (var str in errors)
                {
                    allErrors += str + $"\r\n";
                }
                string notes = "[WR: " + workPacket.WorkRequestId + " " + "WP: " + workPacket.WorkPacketId + "]" + "\r\n" + allErrors;

                HttpResponseMessage hrm = _incidentRequestor.Post(
                    new Uri(Properties.Settings.Default.RemedyUriHost + Properties.Settings.Default.RemedyUri),
                    new Incident
                {
                    AssignedSupportGroup = "CO - Work Management Process",
                    ClientService        = "IT - Work Management",
                    Company = "WEC Business Services",     //or We Energies
                    Impact  = "4-Minor/Localized",
                    Urgency = "4-Low",
                    Notes   = notes,
                    Summary = "STORMS to Forestry validation failed."
                }
                    );

                var    incident       = hrm.Headers.Single(m => m.Key == "X-Id");
                string incidentNumber = incident.Value.ToList()[0];

                Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "][SUCCESS]-" + incidentNumber + "" + " created in Remedy");
            }
            catch (HttpResponseException exception)
            {
                Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "][FAILED-]-failed to send invalid data to Remedy");
                Console.WriteLine("*************Http Response Error***************");
                Console.WriteLine("Http Status Code:" + exception.Response.StatusCode.ToString());

                foreach (var header in exception.Response.Headers)
                {
                    Console.WriteLine(header.Key + ", " + header.Value.ToList()[0]);
                }

                Console.WriteLine("*************Http Response Error***************");
            }
        }
        public void ProcessWorkPacket(Forestry.Models.DTO.WorkPacket workPacket)
        {
            Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "][BEGIN--]-processing...");

            Models.DTO.WorkRequest workRequest = null;

            try
            {
                //call managed work API to get all the data
                Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "][BEGIN--]-retrieving Managed Work Order data");
                workRequest = GetWorkRequestFromApi(workPacket);

                if (workRequest != null)
                {
                    //validate work request
                    Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "][BEGIN--]-validating WorkRequest data");
                    List <ValidationResult> validationResults = ValidateWorkRequest(workRequest);

                    //process validation
                    if (validationResults == null || !validationResults.Any())
                    {
                        Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "][SUCCESS]-valid WorkRequest data");
                        ValidationSuccess(workPacket, workRequest);
                    }
                    else
                    {
                        Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "][SUCCESS]-invalid WorkRequest data");
                        ValidationInvalid(workPacket, workRequest, validationResults);
                    }
                }
                else
                {
                    Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "]" + " NOT FOUND");
                }
            }
            catch (Exception ex)
            {
                //add to tracking
                AddStormsTracking(workRequest, workPacket, "FOBATCH", "FODATCHK", "Failed to create order in Forestry system");

                //create IT Remedy Ticket
                CreateRemedyTicket(workRequest, workPacket, ex);

                Environment.ExitCode = 1;
            }
        }