private void SendEmail(int IdeaId)
        {
            SubmitIdeaUtil            submitIdeaUtil = new SubmitIdeaUtil();
            List <IdeaEmailToDetails> emailTo        = submitIdeaUtil.GetAllStakeholdersEmailAdd(IdeaId);

            RESTAPIIdeaBasicDetailsInterchange ideaDetails = new RESTAPIIdeaBasicDetailsInterchange();

            ideaDetails = ideautils.GetIdeaBasicDetails(IdeaId);
            EmailUtil emailObj = new EmailUtil();

            // If the highest status in Statuslog is 1 then the User from Idea Assignmemts should be Reviwer
            // If the highest status in Statuslog is 2 then the User from Idea Assignmemts should be Sponsor
            // If the highest status in Statuslog is 3 then no action is needed as of now

            foreach (var usr in emailTo)
            {
                if (usr.IdeaState == 1 || usr.IdeaState == 5)
                {
                    // Send Email to Submitter
                    EmailTemplate emailTemp = emailObj.GetEmailTemplate(EmailTemplateType.IdeaCreatedSubmitter.ToString());
                    emailObj.SendEmail(usr.EmailAddress, emailTemp.Body, emailTemp.Subject);
                }

                if (usr.IdeaState == 0)
                {
                    EmailTemplate emailTemp = emailObj.GetEmailTemplate(EmailTemplateType.IdeaAssignedReviewer.ToString());
                    emailObj.SendEmail(usr.EmailAddress, emailTemp.Body, emailTemp.Subject);
                }
            }
        }
        public RESTAPIIdeaBasicDetailsInterchange GetIdeaBasicDetails(IIdeaDatabaseDataContext dc, int IdeaId)
        {
            RESTAPIIdeaBasicDetailsInterchange ideaBasicDetailsInterchange = null;

            ideaBasicDetailsInterchange = (from idea in dc.Ideas
                                           where idea.IdeaId == IdeaId
                                           select new RESTAPIIdeaBasicDetailsInterchange()
            {
                IdeaId = idea.IdeaId, Title = idea.Title
            }
                                           ).FirstOrDefault();
            return(ideaBasicDetailsInterchange);
        }
        public RESTAPIIdeaBasicDetailsInterchange GetIdeaBasicDetails(int IdeaId)
        {
            ResponseBase  response = null;
            List <string> res      = new List <string>();
            RESTAPIIdeaBasicDetailsInterchange ideaBasicDetailsInterchange = new RESTAPIIdeaBasicDetailsInterchange();

            DatabaseWrapper.databaseOperation(response,
                                              (context, query) =>
            {
                ideaBasicDetailsInterchange = query.GetIdeaBasicDetails(context, IdeaId);
                context.SubmitChanges();
            }
                                              , readOnly: true
                                              );

            return(ideaBasicDetailsInterchange);
        }
        public RestAPIAddIdeaStateResponse UpdateIdeaStatus([FromUri] int IdeaID)
        {
            RestAPIAddIdeaStateResponse response = new RestAPIAddIdeaStateResponse();

            submitIdeaUtil.InsertIdeaStatus(response, IdeaID, UserID);
            logUtil.InsertIdeaLog(response, IdeaID, LogMessages.UpdateIdeaStatus, (int)IdeaLogTypes.Info, Enum.GetName(typeof(IdeaMethodTypes), IdeaMethodTypes.UpdateIdeaStatus), EnumDescriptor.GetEnumDescription(IdeaMethodTypes.UpdateIdeaStatus), UserID);

            if (response.ErrorList.Count == 0)
            {
                ISubmitIdeaUtil ideautils = DependencyInjector.Get <ISubmitIdeaUtil, SubmitIdeaUtil>();

                RESTAPIIdeaBasicDetailsInterchange ideaDetails = new RESTAPIIdeaBasicDetailsInterchange();

                ideaDetails = ideautils.GetIdeaBasicDetails(IdeaID);
                List <IdeaEmailToDetails> emailTo = submitIdeaUtil.GetAllStakeholdersEmailAdd(IdeaID);
                EmailUtil emailObj = new EmailUtil();

                // TODO: The below email logic is written here since there is no ISubmitIdeaUtil in InnovationPortalService, the database util is directly called, this needs to be changed in code refactoring.

                // Determine the current state of Idea: if the highest status is 2, it is currently reviewed if 3 it is sponsored
                if (emailTo[0].IdeaState == (int)IdeaStatusTypes.SponsorPending)
                {
                    // This is an Idea Status update request for changing state from Submitted to Reviewed
                    foreach (var usr in emailTo)
                    {
                        if (usr.IdeaState == (int)IdeaStatusTypes.ReviewPending)
                        {
                            // Send Email to Submitter
                            EmailTemplate emailTemp = emailObj.GetEmailTemplate(EmailTemplateType.IdeaReviewedSubmitter.ToString());
                            emailObj.SendEmail(usr.EmailAddress, emailTemp.Body, emailTemp.Subject);
                        }
                        if (usr.IdeaState == (int)IdeaStatusTypes.SponsorPending)
                        {
                            // Send Email to Reviwer
                            EmailTemplate emailTemp = emailObj.GetEmailTemplate(EmailTemplateType.IdeaReviewedReviewer.ToString());
                            emailObj.SendEmail(usr.EmailAddress, emailTemp.Body, emailTemp.Subject);
                        }

                        if (usr.IdeaState == (int)IdeaStatusTypes.Default)
                        {
                            //The user in Assignment table should be Sponsor
                            EmailTemplate emailTemp = emailObj.GetEmailTemplate(EmailTemplateType.IdeaAssignedSponsor.ToString());
                            emailObj.SendEmail(usr.EmailAddress, emailTemp.Body, emailTemp.Subject);
                        }
                    }
                }
                else if (emailTo[0].IdeaState == (int)IdeaStatusTypes.Sponsored)
                {
                    // This is an Idea Status update request for changing state from Reviewed to Sponsored
                    foreach (var usr in emailTo)
                    {
                        if (usr.IdeaState == (int)IdeaStatusTypes.ReviewPending)
                        {
                            // Send Email to Submitter
                            EmailTemplate emailTemp = emailObj.GetEmailTemplate(EmailTemplateType.IdeaSponsoredSubmitter.ToString());
                            emailObj.SendEmail(usr.EmailAddress, emailTemp.Body, emailTemp.Subject);
                        }
                        if (usr.IdeaState == (int)IdeaStatusTypes.SponsorPending)
                        {
                            // Send Email to Reviewer
                            EmailTemplate emailTemp = emailObj.GetEmailTemplate(EmailTemplateType.IdeaSponsoredReviewer.ToString());
                            emailObj.SendEmail(usr.EmailAddress, emailTemp.Body, emailTemp.Subject);
                        }
                        if (usr.IdeaState == (int)IdeaStatusTypes.Sponsored)
                        {
                            // Send Email to Sponsor
                            EmailTemplate emailTemp = emailObj.GetEmailTemplate(EmailTemplateType.IdeaSponsoredSponsor.ToString());
                            emailObj.SendEmail(usr.EmailAddress, emailTemp.Body, emailTemp.Subject);
                        }
                        //if (usr.IdeaState == 0)
                        //{
                        //       //This user should be a Sales Guy. No action needs to be taken currently. This case is kept for future requirement.
                        //}
                    }
                }
            }
            return(response);
        }