public void PreSelect(Model.Survey survey, int userId, IUserService userService, ISurveyService surveyService)
        {
            var request = new SurveyRequest()
            {
                SurveyName      = Settings.SurveyNames.Enrollment,
                UserID          = userId,
                IncludeResponse = true
            };

            var isComplete = false;

            // Get Enrollment status
            var enrollmentSurvey = surveyService.GetSurvey(request);

            if (enrollmentSurvey != null)
            {
                isComplete = enrollmentSurvey.CalculateStatus().IsComplete();
            }

            // Find succession question
            var question = survey.Questions.FirstOrDefault(q => q.QuestionName == "EnrollmentComplete");

            if (question == null)
            {
                return;
            }

            // Pre-select answers based on enrollment status
            question.FindPossibleAnswer("Yes").IsSelected = isComplete;
            question.FindPossibleAnswer("No").IsSelected  = !isComplete;

            // Disable question
            question.IsDisabled = true;
        }
Example #2
0
        public async Task <SurveyRequest> PostNestedInverted(SurveyRequest survey)
        {
            return(await _runner.RunAction(async context =>
            {
                context.Logger.Debug("Simulating saving survey information...");
                context.State.SetParam("Survey", survey);

                await _runner.RunAction(async context =>
                {
                    context.Logger.Debug("This is a nested wrapper...");
                    for (var x = 0; x < 5; x++)
                    {
                        await _runner.RunAction(async context =>
                        {
                            context.Logger.Debug($"this is service {x} inside of the nested wrapper...");
                            context.State.SetParam($"Survey{x}", survey);

                            return survey;
                        }, $"NestedService{x}");
                    }
                }, $"WrapperService");

                return survey;
            }, "SurveyService", "nested"));
        }
Example #3
0
        public dynamic Get([FromUri] SurveyRequest request)
        {
            var surveys = _surveyService.GetSurveys();

            return(new
            {
                Surveys = surveys
            });
        }
        public async Task <APIResponseBase> SaveUserSurvey(SurveyRequest request)
        {
            APIResponseBase response = ValidateUserToken();

            if (response != null && response.ErrorCode == (int)LAMPConstants.API_SUCCESS_CODE)
            {
                response = await Task.Run(() => _SurveyService.SaveUserSurvey(request));
            }
            return(response);
        }
Example #5
0
        public async Task <SurveyRequest> Post(SurveyRequest survey)
        {
            return(await _runner.RunAction(async context =>
            {
                context.Logger.Debug("Simulating saving survey information...");
                context.State.SetParam("Survey", survey);

                return survey;
            }, "SurveyService"));
        }
Example #6
0
        public SurveySummary GetSurveySummary(string surveyName, int userId)
        {
            var request = new SurveyRequest()
            {
                SurveyName      = surveyName,
                IncludeResponse = true,
                UserID          = userId,
                CacheForUser    = true
            };

            var survey = GetSurvey(request);

            if (survey == null)
            {
                throw new Exception("Invalid Survey Name: " + surveyName);
            }

            var summary = new SurveySummary()
            {
                SurveyID     = survey.SurveyID,
                SurveyName   = survey.SurveyName,
                Score        = survey.Status.Score,
                State        = survey.Status.State,
                DisplayScore = survey.Status.DisplayScore
            };

            foreach (var page in survey.Pages.Where(p => !p.IsSummary))
            {
                var pageStatus           = survey.Status.Pages.First(p => p.Name == page.PageName);
                var pageScoreDescription = page.ScoreRanges.FirstOrDefault(d => pageStatus.Score >= d.MinScore && pageStatus.Score <= d.MaxScore);

                var pageSummary = new SurveyPageSummary()
                {
                    SurveyPageID = page.SurveyPageID,
                    PageName     = page.PageName,
                    Score        = pageStatus.Score,
                    DisplayScore = pageStatus.DisplayScore,
                    State        = pageStatus.State,
                    Tooltip      = page.Tooltip,
                    ScoreSummary = pageScoreDescription != null ? pageScoreDescription.Description : string.Empty
                };

                if (!page.SuggestedContents.IsNullOrEmpty())
                {
                    pageSummary.SuggestedContent = page.SuggestedContents.DistinctBy(a => a.Url).Select(s => new SurveySummaryContent()
                    {
                        Title = s.Title, Url = s.Url
                    }).ToList();
                }

                summary.Pages.Add(pageSummary);
            }

            return(summary);
        }
Example #7
0
 public SurveyRequestController()
 {
     _context              = new ErpEntities(Constants.ConnectionString);
     _SurveyRequest        = new SurveyRequest(_context);
     _documentNoSetting    = new DocumentNoSetting(_context);
     _lookup               = new Lookups(_context);
     _shipmentType         = new BaseModel <iffsShipmentType>(_context);
     _userOperationMapping = new BaseModel <iffsUserOperationTypeMapping>(_context);
     _ReceivingClient      = new ReceivingClient(_context);
     _notification         = new BaseModel <iffsNotification>(_context);
 }
Example #8
0
        public Model.Survey GetSurvey(SurveyRequest request)
        {
            if (!request.CacheForUser || request.UserID <= 0 || string.IsNullOrEmpty(request.SurveyName) || !request.IncludeResponse)
            {
                return(GetSurveyInternal(request));
            }

            var cacheKey = string.Format("Survey.{0}.{1}", request.SurveyName, request.UserID);

            return(_cacheStorage.Retrieve(cacheKey, () => GetSurveyInternal(request)));
        }
Example #9
0
        public async Task <SurveyRequest> Put(SurveyRequest survey)
        {
            using var context = _runner.Create("SurveyService");

            context.Logger.Debug("Pretending we're updating the survey information...");
            context.State.SetParam("Survey", survey);

            var logger = LogManager.LogFactory.GetCurrentClassLogger();

            logger.Debug("This is yet another test");

            return(survey);
        }
Example #10
0
        public async Task <SurveyRequest> Post2(SurveyRequest survey)
        {
            return(await _runner.RunAction(async context =>
            {
                context.Logger.Debug("Simulating saving survey information...");
                context.State.SetParam("Survey", survey);

                var logger = LogManager.LogFactory.GetCurrentClassLogger();
                logger.Debug("This is a test w/ deprecated method");

                return survey;
            }, "SurveyService"));
        }
Example #11
0
        public async Task <SurveyRequest> Post(SurveyRequest survey)
        {
            return(await _runner.CreateAndAppendToActionExceptions(async context =>
            {
                context.Logger.Debug("Simulating saving survey information...");
                context.State.SetParam("Survey", survey);

                var logger = LogManager.LogFactory.GetCurrentClassLogger();
                logger.Debug("This is a test");

                return survey;
            }, "SurveyService"));
        }
Example #12
0
        public Survey GetSurvey(SurveyRequest request)
        {
            var proxy = _surveyService.CreateProxy();

            return(proxy.GetSurvey(request));
        }
Example #13
0
        private Model.Survey GetSurveyInternal(SurveyRequest request)
        {
            if (request == null || (request.SurveyID <= 0 && string.IsNullOrEmpty(request.SurveyName)))
            {
                return(null);
            }

            var survey = null as Model.Survey;

            if (request.SurveyID > 0)
            {
                survey = _surveyRepository.GetSurveyByID(request.SurveyID);
            }
            else if (!string.IsNullOrEmpty(request.SurveyName))
            {
                survey = _surveyRepository.GetSurveyByName(request.SurveyName);
            }

            if (survey == null)
            {
                throw new Exception(string.Format("Invalid survey id: {0}, name: {1}: ", request.SurveyID, request.SurveyName));
            }

            if (request.UserID <= 0)
            {
                return(survey);
            }

            var injector = ValueInjectorFactory.CreateValueInjector(survey.SurveyName);

            // Inject Possible Answers to questions based on the user's profile
            if (injector != null)
            {
                injector.Inject(survey, request.UserID, _userService, this);
            }

            if (survey.IsReviewVisible)
            {
                survey.Pages = new List <SurveyPage>(survey.Pages);

                survey.Pages.Add(new SurveyPage()
                {
                    PageName     = survey.ReviewTabText,
                    SurveyID     = survey.SurveyID,
                    IsVisible    = true,
                    IsSummary    = true,
                    SortOrder    = survey.Pages.Last().SortOrder + 1,
                    SurveyPageID = 0
                });
            }

            if (request.IncludeResponse)
            {
                var surveyResponse = GetSurveyResponse(new SurveyResponseRequest()
                {
                    SurveyName     = request.SurveyName,
                    UserID         = request.UserID,
                    IncludeAnswers = true
                });

                if (surveyResponse == null)
                {
                    surveyResponse = new SurveyResponse()
                    {
                        SurveyID             = survey.SurveyID,
                        SelectedSurveyPageID = survey.Pages.OrderBy(p => p.SortOrder).First().SurveyPageID,
                        CreateUserID         = request.UserID,
                        CreateDate           = DateTime.Now,
                        CreateDateUtc        = DateTime.UtcNow,
                        ModifyUserID         = request.UserID,
                        ModifyDate           = DateTime.Now,
                        ModifyDateUtc        = DateTime.UtcNow
                    };
                }

                ApplySurveyResponse(survey, surveyResponse);
            }

            if (request.ApplyResponse && request.ResponseToApply != null)
            {
                ApplySurveyResponse(survey, request.ResponseToApply);
            }

            // Ensure Status is calculated
            survey.CalculateStatus();

            // Pre-Select answers based on the user's profile (if not already answered)
            if (injector != null)
            {
                injector.PreSelect(survey, request.UserID, _userService, this);
            }

            // Populate suggested content
            PopulateSuggestedContent(survey);

            return(survey);
        }
Example #14
0
        public async Task <IActionResult> CreateSurvey([FromBody] SurveyRequest request)
        {
            Response <SurveyResponse> response = new Response <SurveyResponse>();

            try
            {
                var isFaulted = IsAuthenticationFaulted(UserIdentity);
                if (isFaulted)
                {
                    response = new Response <SurveyResponse>
                    {
                        ResponseBody = new SuccessResponse <SurveyResponse>
                        {
                            Data            = null,
                            ResponseCode    = "E009",
                            ResponseMessage = "You do not have the permission to carry out this operation, kindly login and try again."
                        }
                    };

                    return(Unauthorized(response.ResponseBody));
                }

                if (!ModelState.IsValid)
                {
                    var requestResponse = ApiResponseFormatter.RequestResponse(ModelState);
                    return(BadRequest(requestResponse));
                }

                Survey survey = new Survey
                {
                    DateCreated = DateTime.UtcNow,
                    Description = request.Description,
                    Status      = SurveyStatus.Open.ToString(),
                    Title       = request.Title
                };

                using (var _context = new MiniSurveyContext())
                {
                    _context.Surveys.Add(survey);
                    await _context.SaveChangesAsync();
                }

                SurveyResponse surveyResponse = new SurveyResponse
                {
                    Id          = survey.Id,
                    Title       = survey.Title,
                    DateCreated = survey.DateCreated,
                    Description = survey.Description,
                    Status      = survey.Status
                };

                response = new Response <SurveyResponse>
                {
                    ResponseBody = new SuccessResponse <SurveyResponse>
                    {
                        Data            = surveyResponse,
                        ResponseCode    = "00",
                        ResponseMessage = "You have successfully created a survey. Kindly proceed to add questions to the survey."
                    }
                };


                return(Ok(response.ResponseBody));
            }
            catch (Exception)
            {
                response = new Response <SurveyResponse>
                {
                    ResponseBody = new SuccessResponse <SurveyResponse>
                    {
                        Data            = null,
                        ResponseCode    = "E001",
                        ResponseMessage = "Sorry, we are unable to process your request at the moment, kindly try again later."
                    }
                };
                return(StatusCode(500, response.ResponseBody));
            }
        }
        /// <inheritdoc />
        public async Task <SurveyResponse> PostSurveyAsync(SurveyRequest request)
        {
            WebOperationContext context  = WebOperationContext.Current;
            SurveyResponse      response = new Models.SurveyResponse();

            // Validate that we have a bearer token.
            string authorization = context.IncomingRequest.Headers["authorization"];

            if (string.IsNullOrEmpty(authorization))
            {
                response.IsError = true;
                response.Message = "Bearer token not found.";
                context.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
                return(response);
            }

            string[] parts = authorization.Split(' ');
            if (parts.Length != 2 ||
                !string.Equals(parts[0], BearerTokenType, StringComparison.OrdinalIgnoreCase) ||
                string.IsNullOrEmpty(parts[1]))
            {
                response.IsError = true;
                response.Message = "Bearer token not found.";
                context.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
                return(response);
            }

            string bearerToken = parts[1];
            ActionableMessageTokenValidator validator = new ActionableMessageTokenValidator();

            // ValidateTokenAsync will verify the following
            // 1. The token is issued by Microsoft and its digital signature is valid.
            // 2. The token has not expired.
            // 3. The audience claim matches the service domain URL.
            //
            // Replace https://api.contoso.com with your service domain URL.
            // For example, if the service URL is https://api.xyz.com/finance/expense?id=1234,
            // then replace https://api.contoso.com with https://api.xyz.com.
            ActionableMessageTokenValidationResult result = await validator.ValidateTokenAsync(bearerToken, "https://api.contoso.com");

            if (!result.ValidationSucceeded)
            {
                if (result.Exception != null)
                {
                    Trace.TraceError(result.Exception.ToString());
                    response.Message = result.Exception.Message;
                }

                response.IsError = true;
                context.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
                return(response);
            }

            // We have a valid token. We will verify the sender and the action performer.
            // You should replace the code below with your own validation logic.
            // In this example, we verify that the email is sent by [email protected]
            // and the action performer has to be someone with @contoso.com email.
            //
            // You should also return the CARD-ACTION-STATUS header in the response.
            // The value of the header will be displayed to the user.
            if (!string.Equals(result.Sender, @"*****@*****.**", StringComparison.OrdinalIgnoreCase) ||
                !result.ActionPerformer.EndsWith("@contoso.com"))
            {
                response.IsError = true;
                response.Message = "Invalid sender or the action performer is not allowed.";
                context.OutgoingResponse.Headers.Add("CARD-ACTION-STATUS", "Invalid sender or the action performer is not allowed.");
                context.OutgoingResponse.StatusCode = HttpStatusCode.Forbidden;
                return(response);
            }

            // Further business logic code here to process the expense report.

            context.OutgoingResponse.Headers.Add("CARD-ACTION-STATUS", "The survey was accepted.");
            return(response);
        }