public HttpResponseMessage SaveUpdates([FromBody] string ClaimUpdateDTO)
        {
            HttpResponseMessage message     = new HttpResponseMessage();
            Claim_Update        claimUpdate = new Claim_Update();

            try
            {
                dynamic claimupdateDto = JObject.Parse(ClaimUpdateDTO);

                claimUpdate = ((JObject)claimupdateDto.claimUpdate).ToObject <Claim_Update>();
                Claim_Updates_Billing updatesBilling = ((JObject)claimupdateDto.claimUpdatesBilling).ToObject <Claim_Updates_Billing>();
                claimUpdate.DateTimeSubmitted_ = DateTime.UtcNow;
                context.Claim_Updates.InsertOnSubmit(claimUpdate);
                context.SubmitChanges(); //submit because the claim update id is needed for foreign key

                //set billing update foreign key to claim updateID
                updatesBilling.UpdateID = claimUpdate.UpdateID;
                context.Claim_Updates_Billings.InsertOnSubmit(updatesBilling);
                context.SubmitChanges();
            }
            catch (Exception e)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e.Message));
            }
            message.StatusCode = HttpStatusCode.Created;
            message.Content    = new StringContent(claimUpdate.UpdateID.ToString());
            return(message);
        }
        public HttpResponseMessage ArchiveClaimUpdateAndBilling([FromBody] string UpdatesBilling, int updateID, string Token)
        {
            //insert into archive table
            Claim_Update          claimUpdate    = _ctx.Claim_Updates.Single(i => i.UpdateID == updateID);
            Claim_Updates_Billing updatesBilling = _ctx.Claim_Updates_Billings.Single(i => i.UpdateID == updateID);
            Session session = _ctx.Sessions.FirstOrDefault(i => i.SessionToken == Token);


            Claim_Updates_Billing_PR_Archive archive = new Claim_Updates_Billing_PR_Archive()
            {
                UserID           = claimUpdate.UserID,
                ClaimRefNu       = claimUpdate.ClaimRefNu,
                ActionType       = claimUpdate.ActionType,
                Archived_By      = Convert.ToInt32(session.UserID),
                BillID           = updatesBilling.BillID,
                Billable         = claimUpdate.Billable,
                Comments         = updatesBilling.Comments,
                Completed        = updatesBilling.Completed,
                CompletionDate   = updatesBilling.CompletionDate,
                Courier          = updatesBilling.Courier,
                Date_Archived    = DateTime.Now,
                DirectContact    = updatesBilling.DirectContact,
                Duration         = updatesBilling.Duration,
                EmployeeComments = claimUpdate.EmployeeComments,
                InternalComments = claimUpdate.InternalComments,
                IsArchived       = claimUpdate.IsArchived,
                IsInReview       = true,
                Method           = updatesBilling.Method,
                Postage          = updatesBilling.Postage,
                Reason           = updatesBilling.Reason,
                ReportedComments = claimUpdate.ReportedComments,
                UpdateBy         = Convert.ToInt32(session.UserID),
                UpdateId         = claimUpdate.UpdateID,
                UpdatesDate      = claimUpdate.UpdatesDate,
                SeniorConsulting = updatesBilling.SeniorConsulting
            };

            _ctx.Claim_Updates_Billing_PR_Archives.InsertOnSubmit(archive);
            _ctx.SubmitChanges();



            dynamic updates = JsonConvert.DeserializeObject(UpdatesBilling);

            claimUpdate.InternalComments = updates.InternalComments;
            claimUpdate.ReportedComments = updates.ReportedComments;
            claimUpdate.EmployeeComments = updates.EmployeeComments;
            claimUpdate.Billable         = updates.Billable;

            updatesBilling.CompletionDate   = Convert.ToDateTime(updates.CompletionDate);
            updatesBilling.DirectContact    = Convert.ToBoolean(updates.DirectContact);
            updatesBilling.Postage          = Convert.ToBoolean(updates.Postage);
            updatesBilling.Courier          = Convert.ToBoolean(updates.Courier);
            updatesBilling.Method           = updates.Method;
            updatesBilling.Reason           = updates.Reason;
            updatesBilling.Duration         = updates.Duration;
            updatesBilling.Comments         = updates.Comments;
            updatesBilling.SeniorConsulting = updates.SeniorConsulting;

            _ctx.SubmitChanges();


            return(new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.OK,
                Content = new StringContent("")
            });
        }
        public HttpResponseMessage ArchiveUpdate(string token, int updateID)
        {
            Claim_Update claimUpdate = context.Claim_Updates.Single(i => i.UpdateID == updateID);
            Session      session     = context.Sessions.FirstOrDefault(i => i.SessionToken == token);

            if (claimUpdate.DateTimeSubmitted_ < DateTime.UtcNow.AddHours(-2))
            {
                return(new HttpResponseMessage()
                {
                    StatusCode = HttpStatusCode.BadRequest,
                    Content = new StringContent("Claim update exceeded 2 hours old, cannot be archived.")
                });
            }

            if (claimUpdate.UserID != Convert.ToInt32(session.UserID))
            {
                return(new HttpResponseMessage()
                {
                    StatusCode = HttpStatusCode.BadRequest,
                    Content = new StringContent("You did not create this claim update. you cannot delete it")
                });
            }
            Claim_Updates_Billing            updatesBilling   = context.Claim_Updates_Billings.Single(i => i.UpdateID == updateID);
            Claim_Update_Cmr                 oldCMR           = context.Claim_Update_Cmrs.SingleOrDefault(i => i.UpdateID == updateID);
            List <Claim_Updates_Document>    updatesDocuments = context.Claim_Updates_Documents.Where(i => i.UpdateID == updateID).ToList();
            Claim_Peer_Review                peerReview       = context.Claim_Peer_Reviews.SingleOrDefault(i => i.Update_ID == updateID);
            Claim_Updates_Billing_PR_Archive archive          = new Claim_Updates_Billing_PR_Archive()
            {
                UserID           = claimUpdate.UserID,
                ClaimRefNu       = claimUpdate.ClaimRefNu,
                ActionType       = claimUpdate.ActionType,
                Archived_By      = Convert.ToInt32(session.UserID),
                BillID           = updatesBilling.BillID,
                Billable         = claimUpdate.Billable,
                Comments         = updatesBilling.Comments,
                Completed        = updatesBilling.Completed,
                CompletionDate   = updatesBilling.CompletionDate,
                Courier          = updatesBilling.Courier,
                Date_Archived    = DateTime.Now,
                DirectContact    = updatesBilling.DirectContact,
                Duration         = updatesBilling.Duration,
                EmployeeComments = claimUpdate.EmployeeComments,
                InternalComments = claimUpdate.InternalComments,
                IsArchived       = claimUpdate.IsArchived,
                IsInReview       = false,
                Method           = updatesBilling.Method,
                Postage          = updatesBilling.Postage,
                Reason           = updatesBilling.Reason,
                ReportedComments = claimUpdate.ReportedComments,
                UpdateBy         = Convert.ToInt32(session.UserID),
                UpdateId         = claimUpdate.UpdateID,
                UpdatesDate      = claimUpdate.UpdatesDate,
                SeniorConsulting = updatesBilling.SeniorConsulting
            };

            if (oldCMR != null)
            {
                Claim_Update_Cmr_Archive cmrarchive = new Claim_Update_Cmr_Archive()
                {
                    UserID                      = oldCMR.UserID,
                    UpdateID                    = oldCMR.UpdateID,
                    AbsenceAuthorization        = oldCMR.AbsenceAuthorization,
                    ArchiveDate                 = DateTime.Now,
                    ArchivedBy                  = Convert.ToInt32(session.UserID),
                    ClaimHistoryInformation     = oldCMR.ClaimHistoryInformation,
                    ClaimStatusID               = oldCMR.ClaimStatusID,
                    DateOfAbsence               = oldCMR.DateOfAbsence,
                    DateOfReferal               = oldCMR.DateOfReferal,
                    DateOfReport                = oldCMR.DateOfReport,
                    EmployeeID                  = oldCMR.EmployeeID,
                    EmployeeName                = oldCMR.EmployeeName,
                    EmployerContactID           = oldCMR.EmployerContactID,
                    Location                    = oldCMR.Location,
                    NextSteps                   = oldCMR.NextSteps,
                    OSIContactID                = oldCMR.OSIContactID,
                    ReturntoWorkRecommendations = oldCMR.ReturntoWorkRecommendations,
                    TreatmentPlan               = oldCMR.TreatmentPlan
                };
                context.Claim_Update_Cmr_Archives.InsertOnSubmit(cmrarchive);
            }
            foreach (Claim_Updates_Document doc in updatesDocuments)
            {
                Claim_Updates_Documents_Archive docarchive = new Claim_Updates_Documents_Archive()
                {
                    UserID         = doc.UserID,
                    UpdateID       = doc.UpdateID,
                    ArchivedBy     = Convert.ToInt32(session.UserID),
                    ClaimReference = doc.ClaimReference,
                    DateArchived   = DateTime.Now,
                    DocumentID     = doc.DocumentID,
                    FileExt        = doc.FileExt,
                    FileName       = doc.FileName,
                    Timestamp      = doc.Timestamp,
                    VersionNumber  = doc.VersionNumber
                };
                context.Claim_Updates_Documents_Archives.InsertOnSubmit(docarchive);
            }
            if (peerReview != null)
            {
                context.Claim_Peer_Reviews.DeleteOnSubmit(peerReview);
            }
            context.Claim_Updates_Billing_PR_Archives.InsertOnSubmit(archive);
            context.SubmitChanges();
            context.Claim_Updates.DeleteOnSubmit(claimUpdate);
            context.Claim_Updates_Billings.DeleteOnSubmit(updatesBilling);
            if (oldCMR != null)
            {
                context.Claim_Update_Cmrs.DeleteOnSubmit(oldCMR);
            }
            foreach (Claim_Updates_Document doc in updatesDocuments)
            {
                context.Claim_Updates_Documents.DeleteOnSubmit(doc);
            }
            context.SubmitChanges();

            return(new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.OK,
                Content = new StringContent("Claim update and child records successfuly archived")
            });
        }