public void GetIntellectualProperties(RestAPIGetIntellectualResponse response, int IntellectualId)
        {
            List <RESTAPIIntellectualInterchange> intellectualInterchangeList = null;

            DatabaseWrapper.databaseOperation(response,
                                              (context, query) =>
            {
                intellectualInterchangeList = new List <RESTAPIIntellectualInterchange>();
                IdeaIntellectualProperty ideaIntellectualProperty = query.GetIdeaIntellectualById(context, IntellectualId);

                if (ideaIntellectualProperty != null)
                {
                    RESTAPIIntellectualInterchange intellectualInterchange = new RESTAPIIntellectualInterchange(ideaIntellectualProperty);
                    intellectualInterchangeList.Add(intellectualInterchange);
                }
                response.Status = Success;
            }
                                              , readOnly: true
                                              );

            if (intellectualInterchangeList != null && intellectualInterchangeList.Count > 0)
            {
                response.IdeaIntellectList.AddRange(intellectualInterchangeList);
            }
        }
        public RESTAPIIdeaDetailsInterchange GetIdeasDetails(IIdeaDatabaseDataContext dc, int IdeaId)
        {
            string Awsip, ITGIP, folderName, path, fileName, hostName, portNumber, AWSIdeaIPFolder, AWSIdeaAttachmentFolder;
            int    ideaId;

            ITGIP = WebConfigurationManager.AppSettings["ITGIP"];
            string domain = HttpContext.Current.Request.Url.Scheme;

            hostName                = Environment.MachineName;
            Awsip                   = WebConfigurationManager.AppSettings["AWSHost"];
            portNumber              = WebConfigurationManager.AppSettings["AWSHostPort"];
            AWSIdeaIPFolder         = WebConfigurationManager.AppSettings["AWSIdeaIPFolder"];
            AWSIdeaAttachmentFolder = WebConfigurationManager.AppSettings["AWSIdeaAttachmentFolder"];
            bool IsS3Enabled = Convert.ToBoolean(WebConfigurationManager.AppSettings["IsS3Enabled"]);



            RESTAPIIdeaReviewerInterchange restAPIIdeaReviewerInterchange = null;
            RESTAPIIntellectualInterchange rESTAPIIntellectualInterchange = null;
            //RESTAPIIdeaContributorInterchange rESTAPIIdeaContributorInterchange = null;

            var ideaDetails = (from idea in dc.Ideas
                               where idea.IdeaId == IdeaId
                               select idea
                               ).FirstOrDefault();

            if (ideaDetails == null)
            {
                return(null);
            }

            RESTAPIIdeaDetailsInterchange ideaDetailsInterchange = new RESTAPIIdeaDetailsInterchange(ideaDetails);

            //Idea
            var Idea = dc.Ideas.Where(x => x.IdeaId == IdeaId).FirstOrDefault();

            //  IdeaTagId
            var tags = dc.Ideatags.Where(x => x.IdeaId == IdeaId).ToList();

            foreach (var tag in tags)
            {
                //ideaDetailsInterchange.TagList.Add(new RESTAPIIdeatagInterchange { Tags = tag.Tags, CreatedDate = tag.CreatedDate.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"), AddedByUserId = tag.AddedByUserId });
                ideaDetailsInterchange.TagList.Add(tag.Tags);
            }

            //////  IdeaAssignments

            //var assign = dc.IdeaAssignments.Where(x => x.IdeaId == IdeaId).ToList();
            //foreach (var ass in assign)
            //{
            //    ideaDetailsInterchange.AssignmentList.Add(new IdeaAssignment { IsActive = ass.IsActive, CreatedDate = ass.CreatedDate, ReviewByUserId = ass.ReviewByUserId });
            //}

            ////IdeaComments
            //var comments = dc.IdeaComments.Where(x => x.IdeaId == IdeaId).ToList();
            //foreach (var comm in comments)
            //{
            //    ideaDetailsInterchange.IdeaCommentList.Add(new IdeaComment { CommentDescription = comm.CommentDescription, CreatedDate = comm.CreatedDate, CommentByUserid = comm.CommentByUserid });
            //}

            var ideastatus     = dc.IdeaStatusLogs.Where(x => x.IdeaId == IdeaId && x.IsActive == true).OrderByDescending(x => x.CreatedDate).FirstOrDefault(); /* && x.IdeaState == (int)IdeaStatusTypes.ReviewPending)*/
            var ideaAssignment = dc.IdeaAssignments.Where(x => x.IdeaId == IdeaId).FirstOrDefault();


            if (ideastatus.IdeaState == 1)
            {
                var reviewerUser = dc.Users.Where(x => x.UserId == ideaAssignment.ReviewByUserId).FirstOrDefault();
                restAPIIdeaReviewerInterchange = new RESTAPIIdeaReviewerInterchange()
                {
                    Username     = reviewerUser.FirstName + " " + reviewerUser.LastName,
                    EmailAddress = reviewerUser.EmailAddress,
                    CreatedDate  = ideaAssignment.CreatedDate?.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
                };
                if (reviewerUser != null)
                {
                    ideaDetailsInterchange.ReviewersList.Add(restAPIIdeaReviewerInterchange);
                }
                ideaDetailsInterchange.SponsorsList = new List <RESTAPIIdeaReviewerInterchange>();
            }
            else if (ideastatus.IdeaState == 2)
            {
                // reviewer user data
                var ideastatuslog = dc.IdeaStatusLogs.Where(x => x.IdeaId == IdeaId && x.IdeaState == (int)IdeaStatusTypes.SponsorPending).FirstOrDefault();

                var reviewerUser = dc.Users.Where(x => x.UserId == ideastatuslog.ModifiedByUserId).FirstOrDefault();

                restAPIIdeaReviewerInterchange = new RESTAPIIdeaReviewerInterchange()
                {
                    Username     = reviewerUser.FirstName + " " + reviewerUser.LastName,
                    EmailAddress = reviewerUser.EmailAddress,
                    CreatedDate  = ideastatuslog.CreatedDate.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
                };
                if (reviewerUser != null)
                {
                    ideaDetailsInterchange.ReviewersList.Add(restAPIIdeaReviewerInterchange);
                }

                // sponsor user data

                var sponsorUser = dc.Users.Where(x => x.UserId == ideaAssignment.ReviewByUserId).FirstOrDefault();
                restAPIIdeaReviewerInterchange = new RESTAPIIdeaReviewerInterchange()
                {
                    Username     = sponsorUser.FirstName + " " + sponsorUser.LastName,
                    EmailAddress = sponsorUser.EmailAddress,
                    CreatedDate  = ideaAssignment.CreatedDate?.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
                };
                if (sponsorUser != null)
                {
                    ideaDetailsInterchange.SponsorsList.Add(restAPIIdeaReviewerInterchange);
                }
            }
            else if (ideastatus.IdeaState == 3)
            {
                // reviewer user data
                var ideastatuslog = dc.IdeaStatusLogs.Where(x => x.IdeaId == IdeaId && x.IdeaState == (int)IdeaStatusTypes.SponsorPending).FirstOrDefault();

                var reviewerUser = dc.Users.Where(x => x.UserId == ideastatuslog.ModifiedByUserId).FirstOrDefault();

                restAPIIdeaReviewerInterchange = new RESTAPIIdeaReviewerInterchange()
                {
                    Username     = reviewerUser.FirstName + " " + reviewerUser.LastName,
                    EmailAddress = reviewerUser.EmailAddress,
                    CreatedDate  = ideastatuslog.CreatedDate.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
                };
                if (reviewerUser != null)
                {
                    ideaDetailsInterchange.ReviewersList.Add(restAPIIdeaReviewerInterchange);
                }

                // sponsor user data
                var approvedIdea = dc.IdeaStatusLogs.Where(x => x.IdeaId == IdeaId && x.IdeaState == (int)IdeaStatusTypes.Sponsored).FirstOrDefault();
                var sponsorUser  = dc.Users.Where(x => x.UserId == approvedIdea.ModifiedByUserId).FirstOrDefault();
                restAPIIdeaReviewerInterchange = new RESTAPIIdeaReviewerInterchange()
                {
                    Username     = sponsorUser.FirstName + " " + sponsorUser.LastName,
                    EmailAddress = sponsorUser.EmailAddress,
                    CreatedDate  = approvedIdea.CreatedDate.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
                };
                if (sponsorUser != null)
                {
                    ideaDetailsInterchange.SponsorsList.Add(restAPIIdeaReviewerInterchange);
                }
            }

            //IdeaAttachment
            //var attach = dc.IdeaAttachments.Where(x => x.IdeaId == IdeaId).ToList();
            //foreach (var at in attach)
            //{
            //    ideaId = at.IdeaId;
            //    folderName = at.FolderName;
            //    fileName = at.AttachedFileName;

            //    if (IsS3Enabled)
            //    {
            //        path = new Uri(string.Format(@"{0}/{1}/{2}/{3}/{4}", Awsip, AWSIdeaAttachmentFolder, ideaId, folderName, fileName)).ToString();
            //    }
            //    else
            //    {
            //        ITGIP = WebConfigurationManager.AppSettings["ITGIP"];
            //        path = string.Format(@"{0}://{1}:{2}/{3}/{4}/{5}/{6}", domain, ITGIP, portNumber, AWSIdeaAttachmentFolder, ideaId, folderName, fileName);
            //    }

            //    ideaDetailsInterchange.AttachmentsList.Add(new RESTAPIIdeaAttachmentInterchange { IdeaAttachmentID = at.IdeaAttachmentId, AttachedFileName = at.AttachedFileName, FileExtention = at.FileExtention.Trim(), FileSizeInByte = at.FileSizeInByte, FolderName = at.FolderName, CreatedDate = at.CreatedDate?.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"), FilePath = path });
            //}

            //IdeaIntellectualProperty
            var intellectual = dc.IdeaIntellectualProperties.Where(x => x.IdeaId == IdeaId).ToList();

            path = string.Empty;
            foreach (var intellect in intellectual)
            {
                rESTAPIIntellectualInterchange = new RESTAPIIntellectualInterchange();
                foreach (var attachment in intellect.IdeaAttachments)
                {
                    ideaId     = attachment.IdeaId;
                    folderName = attachment.FolderName;
                    fileName   = attachment.AttachedFileName;

                    if (attachment.IntellectualPropertyId != null)
                    {
                        ideaId     = attachment.IdeaId;
                        folderName = attachment.FolderName;
                        fileName   = attachment.AttachedFileName;

                        if (IsS3Enabled)
                        {
                            path = new Uri(string.Format(@"{0}/{1}/{2}/{3}/{4}", Awsip, AWSIdeaAttachmentFolder, ideaId, folderName, fileName)).ToString();
                        }
                        else
                        {
                            path = string.Format(@"{0}://{1}:{2}/{3}/{4}/{5}/{6}", domain, ITGIP, portNumber, AWSIdeaAttachmentFolder, ideaId, AWSIdeaIPFolder, fileName);
                        }

                        rESTAPIIntellectualInterchange.AttachmentsList.Add(
                            new RESTAPIIdeaAttachmentInterchange
                        {
                            IdeaAttachmentID = attachment.IdeaAttachmentId,
                            AttachedFileName = attachment.AttachedFileName,
                            FileExtention    = attachment.FileExtention.Trim(),
                            FileSizeInByte   = attachment.FileSizeInByte,
                            FolderName       = attachment.FolderName,
                            CreatedDate      = attachment.CreatedDate?.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"),
                            FilePath         = path
                        });
                    }
                }

                rESTAPIIntellectualInterchange.IntellectualId     = intellect.IntellectualId;
                rESTAPIIntellectualInterchange.RecordId           = intellect.RecordId;
                rESTAPIIntellectualInterchange.Status             = intellect.Status;
                rESTAPIIntellectualInterchange.FiledDate          = intellect.FiledDate?.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
                rESTAPIIntellectualInterchange.ApplicationNumber  = intellect.ApplicationNumber;
                rESTAPIIntellectualInterchange.PatentId           = intellect.PatentId;
                rESTAPIIntellectualInterchange.CreatedDate        = intellect.CreatedDate?.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
                rESTAPIIntellectualInterchange.ModifiedDate       = intellect.ModifiedDate?.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
                rESTAPIIntellectualInterchange.InventionReference = intellect.InventionReference;

                ideaDetailsInterchange.IntellectualList.Add(rESTAPIIntellectualInterchange);
            }

            // IdeaContributors
            var ideaContributors = dc.IdeaContributors.Where(x => x.IdeaId == IdeaId).ToList();

            foreach (var contributor in ideaContributors)
            {
                User user = dc.Users.Where(x => x.UserId == contributor.UserId).FirstOrDefault();
                if (user != null)
                {
                    ideaDetailsInterchange.ContributorList.Add(new RESTAPIIdeaContributorInterchange {
                        EmailAddress = user.EmailAddress, Username = string.Concat(user.FirstName, ' ', user.LastName)
                    });
                }
            }
            return(ideaDetailsInterchange);
        }