public void StormsMilestoneRequirement(Models.DTO.WorkRequest workRequest, Models.DTO.WorkPacket workPacket)
        {
            try
            {
                //check to see if the requirement exists on the work request
                Forestry.Models.DTO.MilestoneRequirement mreq = _workRequestMilestoneRequirementRequestor.Get(
                    new Uri(BaseManagedWorkApiUri + ResolveCurlyBrackets(Properties.Settings.Default.ManagedWorkOrderApiResourse_MilestoneRequirement, workPacket.WorkRequestId.ToString(), "624"))
                    );

                if (mreq == null)
                {
                    CreateMilestoneRequirement(workRequest, workPacket);
                }
                else
                {
                    mreq.Status = "R";
                    UpdateMilestoneRequirement(workRequest, workPacket, mreq);
                }
            }
            catch (HttpResponseException ex)
            {
                Console.WriteLine("[WR:" + workPacket.WorkRequestId + " " + "WP:" + workPacket.WorkPacketId + "][FAILED-]-failed to log to STORMS milestone requirement");
                Console.WriteLine("Http Status Code:" + ex.Response.StatusCode.ToString());
                Console.WriteLine("*************Http Response Error***************");

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

                Console.WriteLine("*************Http Response Error***************");

                CreateRemedyTicket(workRequest, workPacket, ex);
            }
        }
        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);
        }
        private Forestry.Models.DTO.WorkRequest TransformDynamicWorkRequest(dynamic workRequest)
        {
            var json = Newtonsoft.Json.JsonConvert.SerializeObject(workRequest);

            Forestry.Models.DTO.WorkRequest wr = Newtonsoft.Json.JsonConvert.DeserializeObject <Forestry.Models.DTO.WorkRequest>(
                json,
                new JsonSerializerSettings()
            {
                DefaultValueHandling = DefaultValueHandling.Ignore,
                TypeNameHandling     = TypeNameHandling.None,
                NullValueHandling    = NullValueHandling.Include,
                ContractResolver     = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(),
                Converters           = { new Newtonsoft.Json.Converters.ExpandoObjectConverter() }
            }
                );

            wr.Customers    = _workRequestCustomersRequestor.Get(new Uri(UriHack(workRequest.customersUri.ToString())));
            wr.Premises     = _workRequestPremisesRequestor.Get(new Uri(UriHack(workRequest.premisesUri.ToString())));
            wr.ExtraDetails = _workRequestExtraDetailsRequestor.Get(new Uri(UriHack(workRequest.extraDetailsUri.ToString())));
            wr.Remarks      = _workRequestRemarksRequestor.Get(new Uri(UriHack(workRequest.remarksUri.ToString())));

            return(wr);
        }