public async Task <IActionResult> Edit(Guid id, [Bind("Id,UID,QID,Answer")] SurveyAnswerModel surveyAnswerModel)
        {
            if (id != surveyAnswerModel.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(surveyAnswerModel);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!SurveyAnswerModelExists(surveyAnswerModel.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(surveyAnswerModel));
        }
Example #2
0
        public ActionResult Index(string surveyId, SurveyAnswerModel surveyAnswerModel)
        {
            try
            {
                bool IsMobileDevice = this.Request.Browser.IsMobileDevice;

                if (IsMobileDevice == false)
                {
                    IsMobileDevice = Epi.Web.MVC.Utility.SurveyHelper.IsMobileDevice(this.Request.UserAgent.ToString());
                }

                FormsAuthentication.SetAuthCookie("BeginSurvey", false);
                Guid responseId = Guid.NewGuid();
                Epi.Web.Enter.Common.DTO.SurveyAnswerDTO SurveyAnswer = _isurveyFacade.CreateSurveyAnswer(surveyId, responseId.ToString(), 0);
                SurveyInfoModel      surveyInfoModel = GetSurveyInfo(SurveyAnswer.SurveyId);
                XDocument            xdoc            = XDocument.Parse(surveyInfoModel.XML);
                MvcDynamicForms.Form form            = _isurveyFacade.GetSurveyFormData(SurveyAnswer.SurveyId, 1, SurveyAnswer, IsMobileDevice);

                var _FieldsTypeIDs = from _FieldTypeID in
                                     xdoc.Descendants("Field")
                                     select _FieldTypeID;

                foreach (var _FieldTypeID in _FieldsTypeIDs)
                {
                    bool   isRequired;
                    string attributeValue = _FieldTypeID.Attribute("IsRequired").Value;

                    if (bool.TryParse(attributeValue, out isRequired))
                    {
                        if (isRequired)
                        {
                            if (!form.RequiredFieldsList.Contains(_FieldTypeID.Attribute("Name").Value))
                            {
                                if (form.RequiredFieldsList != "")
                                {
                                    form.RequiredFieldsList = form.RequiredFieldsList + "," + _FieldTypeID.Attribute("Name").Value.ToLower();
                                }
                                else
                                {
                                    form.RequiredFieldsList = _FieldTypeID.Attribute("Name").Value.ToLower();
                                }
                            }
                        }
                    }
                }

                _isurveyFacade.UpdateSurveyResponse(surveyInfoModel, SurveyAnswer.ResponseId, form, SurveyAnswer, false, false, 1, 0);

                return(RedirectToRoute(new { Controller = "Survey", Action = "Index", responseId = responseId, PageNumber = 1 }));
            }
            catch (Exception ex)
            {
                Epi.Web.Utility.ExceptionMessage.SendLogMessage(ex, this.HttpContext);
                return(View(Epi.Web.MVC.Constants.Constant.EXCEPTION_PAGE));
            }
        }
        public void TestSurveyAnswerDTO()
        {
            SurveyAnswerModel objSurveyAnswerModel          = new SurveyAnswerModel();
            SurveyAnswerDTO   objSurveyAnswerDTO            = new SurveyAnswerDTO();
            int numberOfPublicPropertiesofSurveyAnswerDTO   = objSurveyAnswerDTO.GetType().GetProperties().Count();
            int numberOfPublicPropertiesofSurveyAnswerModel = objSurveyAnswerModel.GetType().GetProperties().Count();

            Assert.AreEqual(numberOfPublicPropertiesofSurveyAnswerModel, SurveyAnswerModelPropertyCount, "SurveyAnswerModel properties has been changed");
            Assert.AreEqual(numberOfPublicPropertiesofSurveyAnswerDTO, SurveyAnswerDTOPropertyCount, "SurveyAnswerDTO properties has been changed");
        }
        public ActionResult Index(string surveyId, SurveyAnswerModel surveyAnswerModel)
        {
            try
            {
                bool isMobileDevice = this.Request.Browser.IsMobileDevice;

                if (isMobileDevice == false)
                {
                    isMobileDevice = Epi.Cloud.MVC.Utility.SurveyHelper.IsMobileDevice(this.Request.UserAgent.ToString());
                }

                FormsAuthentication.SetAuthCookie("BeginSurvey", false);

                Guid responseId = Guid.NewGuid();

                var             responseContext = InitializeResponseContext(formId: surveyId, responseId: responseId.ToString());
                SurveyAnswerDTO surveyAnswer    = _isurveyFacade.CreateSurveyAnswer(responseContext);
                SurveyInfoModel surveyInfoModel = GetSurveyInfo(surveyId);

                MvcDynamicForms.Form form = _isurveyFacade.GetSurveyFormData(surveyId, 1, surveyAnswer, isMobileDevice);

                List <string> requiredFields = null;

                foreach (var field in surveyInfoModel.GetFieldDigests(surveyId))
                {
                    bool isRequired = field.IsRequired;

                    if (isRequired)
                    {
                        // if this is the first new required field then split the existing required CSV into a true list.
                        requiredFields = requiredFields ?? new List <string>(form.RequiredFieldsList.Split(','));

                        if (!requiredFields.Contains(field.FieldName))
                        {
                            requiredFields.Add(field.FieldName.ToLower());
                        }
                    }
                }

                // if we processed at least 1 reqired field then join the required field list into a CSV list
                if (requiredFields != null)
                {
                    form.RequiredFieldsList = string.Join(",", requiredFields);
                }

                _isurveyFacade.UpdateSurveyResponse(surveyInfoModel, surveyAnswer.ResponseId, form, surveyAnswer, false, false, 1, responseContext.UserOrgId, responseContext.UserId, null);

                return(RedirectToRoute(new { Controller = "Survey", Action = "Index", responseId = responseId, PageNumber = 1 }));
            }
            catch (Exception ex)
            {
                Epi.Web.Utility.ExceptionMessage.SendLogMessage(ex, this.HttpContext);
                return(View(ViewActions.Exception));
            }
        }
Example #5
0
 /// <summary>
 /// Maps SurveyInfo Model to SurveyInfo DTO.
 /// </summary>
 /// <param name="customer"></param>
 /// <returns></returns>
 public static SurveyAnswerDTO ToSurveyAnswerDTO(this SurveyAnswerModel surveyAnswerModel)
 {
     return(new SurveyAnswerDTO
     {
         ResponseId = surveyAnswerModel.ResponseId,
         SurveyId = surveyAnswerModel.SurveyId,
         DateUpdated = surveyAnswerModel.DateUpdated,
         DateCompleted = surveyAnswerModel.DateCompleted,
         Status = surveyAnswerModel.Status,
         ParentResponseId = surveyAnswerModel.ParentResponseId,
     });
 }
        public async Task <IActionResult> Create([Bind("Id,UID,QID,Answer")] SurveyAnswerModel surveyAnswerModel)
        {
            if (ModelState.IsValid)
            {
                surveyAnswerModel.Id = Guid.NewGuid();
                _context.Add(surveyAnswerModel);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(surveyAnswerModel));
        }
Example #7
0
        /// <summary>
        /// Handle HTTPPOST request coming in from the client after successful Authentication
        /// </summary>
        /// <param name="request"></param>
        /// <returns>HTTPRespose code with succee/failure</returns>
        public HttpResponseMessage PostSurveyAnswer(HttpRequestMessage request)
        {
            Dictionary <string, string> keyvalupair = new Dictionary <string, string>();
            var value    = request.Content.ReadAsStringAsync().Result;
            var settings = new JsonSerializerSettings
            {
                NullValueHandling     = NullValueHandling.Ignore,
                MissingMemberHandling = MissingMemberHandling.Ignore
            };

            try
            {
                keyvalupair = JsonConvert.DeserializeObject <Dictionary <string, string> >(value, settings);
            }
            catch (Exception ex)
            {
                var responseexception = Request.CreateResponse(HttpStatusCode.UnsupportedMediaType, ex.Message.ToString());//415 Unsupported media type The endpoint does not support the format of the request body.
                return(responseexception);
            }
            string            responseId;
            SurveyAnswerModel surveyanswerModel = new SurveyAnswerModel();

            surveyanswerModel.SurveyId     = _isurveyAnswerRepository.SurveyId;
            surveyanswerModel.OrgKey       = _isurveyAnswerRepository.OrgKey;
            surveyanswerModel.PublisherKey = _isurveyAnswerRepository.PublisherKey;
            surveyanswerModel.SurveyQuestionAnswerListField = keyvalupair;

            var item = keyvalupair.Where(x => x.Key.ToLower() == "responseid" || x.Key.ToLower() == "id").FirstOrDefault(); //  if (keyvalupair.TryGetValue("ResponseId", out ResponseId))

            if (item.Value != null)
            {
                responseId = item.Value;
                surveyanswerModel.SurveyQuestionAnswerListField = keyvalupair;
                var Result = _isurveyAnswerRepository.SetSurveyAnswer(surveyanswerModel);
                if (Result.SurveyResponseID != null)
                {
                    var    response = Request.CreateResponse <PreFilledAnswerResponse>(System.Net.HttpStatusCode.Created, Result);//201 Created Success with response body.
                    string uri      = Url.Link("DefaultApi", new { id = Result.SurveyResponseID });
                    response.Headers.Location = new Uri(uri);
                    return(response);
                }
                else
                {
                    var response = Request.CreateResponse(HttpStatusCode.Forbidden, "Response not generated");//The requested operation is not permitted for the user. This error can also be caused by ACL failures, or business rule or data policy constraints.
                    return(response);
                }
            }
            else
            {
                var response = Request.CreateResponse(HttpStatusCode.UnsupportedMediaType, "Response not generated");//415 Unsupported media type The endpoint does not support the format of the request body.
                return(response);
            }
        }
Example #8
0
        /// <summary>
        /// Inserts SurveyResponse
        /// </summary>
        /// <param name="SurveyAnswerModel"></param>
        /// <returns>response </returns>
        public PreFilledAnswerResponse SetSurveyAnswer(SurveyAnswerModel request)
        {
            PreFilledAnswerResponse response;
            SurveyControlsResponse  SurveyControlsResponse = new SurveyControlsResponse();
            SurveyControlsRequest   surveyControlsRequest  = new SurveyControlsRequest();

            surveyControlsRequest.SurveyId = request.SurveyId.ToString();
            try
            {
                Interfaces.DataInterfaces.ISurveyResponseDao SurveyResponseDao = new EntitySurveyResponseDao();
                BLL.SurveyResponse          Implementation         = new BLL.SurveyResponse(SurveyResponseDao);
                PreFilledAnswerRequest      prefilledanswerRequest = new PreFilledAnswerRequest();
                Dictionary <string, string> Values = new Dictionary <string, string>();
                prefilledanswerRequest.AnswerInfo.UserPublishKey  = request.PublisherKey;
                prefilledanswerRequest.AnswerInfo.OrganizationKey = request.OrgKey;
                prefilledanswerRequest.AnswerInfo.SurveyId        = request.SurveyId;
                prefilledanswerRequest.AnswerInfo.UserPublishKey  = request.PublisherKey;
                List <SurveyInfoBO> SurveyBOList = GetSurveyInfo(prefilledanswerRequest);
                GetRootFormId(prefilledanswerRequest);
                prefilledanswerRequest.AnswerInfo.SurveyId = request.SurveyId;
                SurveyControlsResponse = GetSurveyControlsList(surveyControlsRequest);
                Dictionary <string, string> FilteredAnswerList = new Dictionary <string, string>();
                var radiolist = SurveyControlsResponse.SurveyControlList.Where(x => x.ControlType == "GroupBoxRadioList");
                FilteredAnswerList = ProcessModforRadioControls(radiolist, request.SurveyQuestionAnswerListField);
                var checkboxLsit = SurveyControlsResponse.SurveyControlList.Where(x => x.ControlType == "CheckBox");
                FilteredAnswerList = ProcessValforCheckBoxControls(checkboxLsit, FilteredAnswerList);
                var yesNoList = SurveyControlsResponse.SurveyControlList.Where(x => x.ControlType == "YesNo");
                FilteredAnswerList = ProcessValforYesNoControls(yesNoList, FilteredAnswerList);
                var legalvalList = SurveyControlsResponse.SurveyControlList.Where(x => x.ControlType == "LegalValues");
                FilteredAnswerList = ProcessValforLegalControls(legalvalList, FilteredAnswerList);
                foreach (KeyValuePair <string, string> entry in FilteredAnswerList)
                {
                    Values.Add(entry.Key, entry.Value);
                }
                prefilledanswerRequest.AnswerInfo.SurveyQuestionAnswerList = Values;
                response = Implementation.SetSurveyAnswer(prefilledanswerRequest);
                return(response);
            }
            catch (Exception ex)
            {
                PassCodeDTO DTOList = new PassCodeDTO();
                response = new PreFilledAnswerResponse(DTOList);
                if (response.ErrorMessageList != null)
                {
                    response.ErrorMessageList.Add("Failed", "Failed to insert Response");
                }
                response.Status = ((BLL.SurveyResponse.Message) 1).ToString();
                return(response);
            }
        }
Example #9
0
        /// <summary>
        /// Handle HTTPDELETE request coming in from the client after successful Authentication
        /// </summary>
        /// <param name="request"></param>
        /// <returns>HTTPRespose code with succee/failure</returns>
        public HttpResponseMessage Delete(HttpRequestMessage request)
        {
            Dictionary <string, string> keyvalupair = new Dictionary <string, string>();
            var value    = request.Content.ReadAsStringAsync().Result;
            var settings = new JsonSerializerSettings
            {
                NullValueHandling     = NullValueHandling.Ignore,
                MissingMemberHandling = MissingMemberHandling.Ignore
            };

            try
            {
                keyvalupair = JsonConvert.DeserializeObject <Dictionary <string, string> >(value, settings);
            }
            catch (Exception ex)
            {
                var response = Request.CreateResponse(HttpStatusCode.UnsupportedMediaType, ex.Message.ToString());//415 Unsupported media type The endpoint does not support the format of the request body.
                return(response);
            }
            string            responseId;
            SurveyAnswerModel surveyanswerModel = new SurveyAnswerModel();

            surveyanswerModel.SurveyId     = _isurveyAnswerRepository.SurveyId;
            surveyanswerModel.OrgKey       = _isurveyAnswerRepository.OrgKey;
            surveyanswerModel.PublisherKey = _isurveyAnswerRepository.PublisherKey;
            var item = keyvalupair.Where(x => x.Key.ToLower() == "responseid" || x.Key.ToLower() == "id").FirstOrDefault(); //  if (keyvalupair.TryGetValue("ResponseId", out ResponseId))

            if (item.Value != null)
            {
                responseId = item.Value;
                try
                {
                    _isurveyAnswerRepository.Remove(responseId);
                }
                catch (Exception ex)
                {
                    var exresponse = Request.CreateResponse(HttpStatusCode.Forbidden, "Response does not exist");//The request has not succeeded. The information returned with the response is dependent on the method used in the request.
                    return(exresponse);
                }
                var response = Request.CreateResponse(HttpStatusCode.OK, "Response Deleted.");//The request has succeeded. The information returned with the response is dependent on the method used in the request.
                return(response);
            }
            else
            {
                var response = Request.CreateResponse(HttpStatusCode.UnsupportedMediaType, "Response not generated");//415 Unsupported media type The endpoint does not support the format of the request body.
                return(response);
            }
        }
Example #10
0
        public virtual ActionResult SaveAnswer(string surveyId, string answer, string email, string searchResult, string storeId)
        {
            if (_sessionContext.CurrentUser == null && string.IsNullOrEmpty(email))
            {
                return(JsonSuccess(false, JsonRequestBehavior.AllowGet));
            }
            var userId = Guid.Empty;

            if (_sessionContext.CurrentUser != null)
            {
                userId = _sessionContext.CurrentUser.UserId;
                email  = _sessionContext.CurrentUser.Username;
            }
            var answerModel = new SurveyAnswerModel {
                SurveyId = new Guid(surveyId), UserId = userId, UserName = email, Answers = answer, SearchResult = searchResult, CreatedBy = email
            };
            var result = _surveyApi.SaveAnswers(answerModel);

            return(JsonSuccess(true, JsonRequestBehavior.AllowGet));
        }
        public static SurveyAnswerModel ToSurveyAnswerModel(this SurveyAnswerDTO surveyAnswerDTO, string responseId)
        {
            SurveyAnswerModel surveyAnswerModel = ((IResponseContext)surveyAnswerDTO).ToSurveyAnswerModel();

            if (responseId == null || responseId == surveyAnswerDTO.ResponseDetail.ResponseId)
            {
                surveyAnswerModel.SurveyId      = surveyAnswerDTO.SurveyId;
                surveyAnswerModel.DateUpdated   = surveyAnswerDTO.DateUpdated;
                surveyAnswerModel.DateCompleted = surveyAnswerDTO.DateCompleted;
                surveyAnswerModel.Status        = surveyAnswerDTO.Status;
            }
            else
            {
                var childResponseDetail = surveyAnswerDTO.ResponseDetail.FindFormResponseDetail(responseId);
                surveyAnswerModel.SurveyId      = childResponseDetail.FormId;
                surveyAnswerModel.DateUpdated   = childResponseDetail.LastSaveTime;
                surveyAnswerModel.DateCompleted = childResponseDetail.LastSaveTime;
                surveyAnswerModel.Status        = childResponseDetail.RecStatus;
            }

            return(surveyAnswerModel);
        }
Example #12
0
        /// <summary>
        /// Updates SurveyResponse
        /// </summary>
        /// <param name="SurveyAnswerModel",name="ResponseId"></param>
        /// <returns>response </returns>
        public PreFilledAnswerResponse Update(SurveyAnswerModel request, string ResponseId)
        {
            PreFilledAnswerResponse response;
            SurveyControlsResponse  SurveyControlsResponse = new SurveyControlsResponse();
            SurveyControlsRequest   surveyControlsRequest  = new SurveyControlsRequest();

            surveyControlsRequest.SurveyId = request.SurveyId.ToString();

            try
            {
                Interfaces.DataInterfaces.ISurveyResponseDao SurveyResponseDao = new EntitySurveyResponseDao();
                BLL.SurveyResponse          Implementation         = new BLL.SurveyResponse(SurveyResponseDao);
                PreFilledAnswerRequest      prefilledanswerRequest = new PreFilledAnswerRequest();
                Dictionary <string, string> Values = new Dictionary <string, string>();
                prefilledanswerRequest.AnswerInfo.UserPublishKey  = request.PublisherKey;
                prefilledanswerRequest.AnswerInfo.OrganizationKey = request.OrgKey;
                prefilledanswerRequest.AnswerInfo.SurveyId        = request.SurveyId;
                prefilledanswerRequest.AnswerInfo.UserPublishKey  = request.PublisherKey;
                List <SurveyInfoBO> SurveyBOList = GetSurveyInfo(prefilledanswerRequest);
                GetRootFormId(prefilledanswerRequest);
                prefilledanswerRequest.AnswerInfo.SurveyId = request.SurveyId;
                SurveyControlsResponse = GetSurveyControlsList(surveyControlsRequest);
                Dictionary <string, string> FilteredAnswerList = new Dictionary <string, string>();
                var radiolist = SurveyControlsResponse.SurveyControlList.Where(x => x.ControlType == "GroupBoxRadioList");
                FilteredAnswerList = ProcessModforRadioControls(radiolist, request.SurveyQuestionAnswerListField);
                var checkboxLsit = SurveyControlsResponse.SurveyControlList.Where(x => x.ControlType == "CheckBox");
                FilteredAnswerList = ProcessValforCheckBoxControls(checkboxLsit, FilteredAnswerList);
                var yesNoList = SurveyControlsResponse.SurveyControlList.Where(x => x.ControlType == "YesNo");
                FilteredAnswerList = ProcessValforYesNoControls(yesNoList, FilteredAnswerList);
                var legalvalList = SurveyControlsResponse.SurveyControlList.Where(x => x.ControlType == "LegalValues");
                FilteredAnswerList = ProcessValforLegalControls(legalvalList, FilteredAnswerList);

                var updatedtime = FilteredAnswerList.Where(x => x.Key.ToLower() == "_updatestamp").FirstOrDefault();
                var Responsekey = FilteredAnswerList.Where(x => x.Key.ToLower() == "responseid" || x.Key.ToLower() == "id").FirstOrDefault().Key;
                var fkey        = FilteredAnswerList.Where(x => x.Key.ToLower() == "fkey").FirstOrDefault();
                foreach (KeyValuePair <string, string> entry in FilteredAnswerList)
                {
                    Values.Add(entry.Key, entry.Value);
                }

                try
                {
                    var survey = Implementation.GetSurveyResponseById(new List <string> {
                        ResponseId
                    }, request.PublisherKey);
                }
                catch (Exception ex)
                {
                    prefilledanswerRequest.AnswerInfo.SurveyQuestionAnswerList = Values;
                    response        = Implementation.SetSurveyAnswer(prefilledanswerRequest);
                    response.Status = "Created";
                    return(response);
                }


                Values.Remove(Responsekey);
                if (updatedtime.Key != null)
                {
                    Values.Remove(updatedtime.Key);
                }
                if (fkey.Key != null)
                {
                    Values.Remove(fkey.Key);
                }

                prefilledanswerRequest.AnswerInfo.SurveyQuestionAnswerList = Values;

                Dictionary <string, string> ErrorMessageList = new Dictionary <string, string>();
                string Xml = Implementation.CreateResponseXml(prefilledanswerRequest, SurveyBOList);      //
                ErrorMessageList = Implementation.ValidateResponse(SurveyBOList, prefilledanswerRequest); //
                if (fkey.Key != null)
                {
                    try
                    {
                        var survey = Implementation.GetSurveyResponseById(new List <string> {
                            fkey.Value
                        }, request.PublisherKey);
                    }
                    catch (Exception ex)
                    {
                        SurveyResponseBO surveyresponsebO = new SurveyResponseBO();
                        surveyresponsebO.SurveyId       = SurveyBOList[0].ParentId;
                        surveyresponsebO.ResponseId     = fkey.Value.ToString();
                        surveyresponsebO.XML            = "  ";
                        surveyresponsebO.Status         = 3;
                        surveyresponsebO.RecordSourceId = (int)ValidationRecordSourceId.MA;
                        surveyresponsebO.DateUpdated    = DateTime.Now;
                        surveyresponsebO.DateCreated    = surveyresponsebO.DateUpdated;
                        surveyresponsebO.DateCompleted  = surveyresponsebO.DateUpdated;
                        surveyresponsebO = Implementation.InsertSurveyResponse(surveyresponsebO);
                    }
                }

                if (ErrorMessageList.Count() > 0)
                {
                    response = new PreFilledAnswerResponse();
                    response.ErrorMessageList = ErrorMessageList;
                    response.ErrorMessageList.Add("SurveyId", request.SurveyId.ToString());
                    response.ErrorMessageList.Add("ResponseId", ResponseId);
                    response.Status = ((Message)1).ToString();
                    Implementation.InsertErrorLog(response.ErrorMessageList);
                }
                SurveyResponseBO            surveyresponseBO = new SurveyResponseBO(); SurveyResponseBO SurveyResponse = new SurveyResponseBO();
                UserAuthenticationRequestBO UserAuthenticationRequestBO = new UserAuthenticationRequestBO();
                surveyresponseBO.SurveyId   = request.SurveyId.ToString();
                surveyresponseBO.ResponseId = ResponseId.ToString();
                surveyresponseBO.XML        = Xml;
                System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
                if (updatedtime.Key != null)
                {
                    surveyresponseBO.DateUpdated   = dateTime.AddMilliseconds(Convert.ToDouble(updatedtime.Value.ToString())).ToLocalTime();
                    surveyresponseBO.DateCompleted = dateTime.AddMilliseconds(Convert.ToDouble(updatedtime.Value.ToString())).ToLocalTime();
                }
                else
                {
                    surveyresponseBO.DateUpdated   = DateTime.Now;
                    surveyresponseBO.DateCompleted = DateTime.Now;
                }
                if (fkey.Key != null)
                {
                    surveyresponseBO.RelateParentId = fkey.Value;
                }
                surveyresponseBO.Status     = 3;
                SurveyResponse              = Implementation.UpdateSurveyResponse(surveyresponseBO);
                UserAuthenticationRequestBO = Web.Common.ObjectMapping.Mapper.ToBusinessObject(ResponseId);
                Implementation.SavePassCode(UserAuthenticationRequestBO);

                //return Response
                string ResponseUrl = ConfigurationManager.AppSettings["ResponseURL"];
                response = new PreFilledAnswerResponse(Web.Common.ObjectMapping.Mapper.ToDataTransferObjects(UserAuthenticationRequestBO));
                response.SurveyResponseUrl = ResponseUrl + UserAuthenticationRequestBO.ResponseId;
                response.Status            = ((Message)2).ToString();
                return(response);
            }
            catch (Exception ex)
            {
                PassCodeDTO DTOList = new PassCodeDTO();
                response = new PreFilledAnswerResponse(DTOList);
                if (response.ErrorMessageList != null)
                {
                    response.ErrorMessageList.Add("Failed", "Failed to insert Response");
                }
                response.Status = ((BLL.SurveyResponse.Message) 1).ToString();
                return(response);
            }
        }
        public ActionResult Index(string surveyId, SurveyAnswerModel surveyAnswerModel)
        {
            try
            {
                bool isMobileDevice = this.Request.Browser.IsMobileDevice;

                if (isMobileDevice == false)
                {
                    isMobileDevice = Epi.Web.MVC.Utility.SurveyHelper.IsMobileDevice(this.Request.UserAgent.ToString());
                }
                if (!string.IsNullOrEmpty(this.Request.Form["is_print_action"]) && this.Request.Form["is_print_action"].ToString().Equals("true", StringComparison.OrdinalIgnoreCase))
                {
                    string       ResponseId   = this.Request.Form["ResponseId"];
                    ActionResult actionResult = RedirectToAction("Index", "Print", new { responseId = ResponseId, FromFinal = true });
                    return(actionResult);
                }
                //FormsAuthentication.SignOut();
                FormsAuthentication.SetAuthCookie("BeginSurvey", false);
                Guid responseId = Guid.NewGuid();
                Epi.Web.Common.DTO.SurveyAnswerDTO SurveyAnswer = _isurveyFacade.CreateSurveyAnswer(surveyId, responseId.ToString());

                // Pass Code Logic  start
                Epi.Web.Common.Message.UserAuthenticationResponse AuthenticationResponse = _isurveyFacade.GetAuthenticationResponse(responseId.ToString());

                string strPassCode = Epi.Web.MVC.Utility.SurveyHelper.GetPassCode();
                if (string.IsNullOrEmpty(AuthenticationResponse.PassCode))
                {
                    _isurveyFacade.UpdatePassCode(responseId.ToString(), TempData["PassCode"].ToString());
                }


                SurveyInfoModel      surveyInfoModel = GetSurveyInfo(SurveyAnswer.SurveyId);
                XDocument            xdoc            = XDocument.Parse(surveyInfoModel.XML);
                MvcDynamicForms.Form form            = _isurveyFacade.GetSurveyFormData(SurveyAnswer.SurveyId, 1, SurveyAnswer, isMobileDevice);

                var _FieldsTypeIDs = from _FieldTypeID in
                                     xdoc.Descendants("Field")
                                     select _FieldTypeID;

                foreach (var _FieldTypeID in _FieldsTypeIDs)
                {
                    bool   isRequired;
                    string attributeValue = _FieldTypeID.Attribute("IsRequired").Value;

                    if (bool.TryParse(attributeValue, out isRequired))
                    {
                        if (isRequired)
                        {
                            if (!form.RequiredFieldsList.Contains(_FieldTypeID.Attribute("Name").Value))
                            {
                                if (form.RequiredFieldsList != "")
                                {
                                    form.RequiredFieldsList = form.RequiredFieldsList + "," + _FieldTypeID.Attribute("Name").Value.ToLower();
                                }
                                else
                                {
                                    form.RequiredFieldsList = _FieldTypeID.Attribute("Name").Value.ToLower();
                                }
                            }
                        }
                    }
                }
                SurveyAnswer.XML = CreateResponseDocument(xdoc, SurveyAnswer.XML);
                _isurveyFacade.UpdateSurveyResponse(surveyInfoModel, SurveyAnswer.ResponseId, form, SurveyAnswer, false, false, 1);

                return(RedirectToRoute(new { Controller = "Survey", Action = "Index", responseId = responseId, PageNumber = 1 }));
            }
            catch (Exception ex)
            {
                Epi.Web.Utility.ExceptionMessage.SendLogMessage(ex, this.HttpContext);
                return(View(Epi.Web.MVC.Constants.Constant.EXCEPTION_PAGE));
            }
        }
 public bool Update(SurveyAnswerModel model)
 {
     return(_repository.Update(model));
 }
 public SurveyAnswerModel Create(SurveyAnswerModel model)
 {
     return(_repository.Create(model));
 }
 public async Task <Result <UserSurveyModel> > Answer(SurveyAnswerModel model)
 => await _userSurveyBiz.Answer(model);
Example #17
0
 public ResponseModel <BoolResponse> SaveAnswers(SurveyAnswerModel surveyAnswer)
 {
     return(CallApi <BoolResponse>(string.Format(ApiUrls.SurveySaveAnswer), JsonConvert.SerializeObject(surveyAnswer), Method.POST, apiBaseUrl: ConfigKeys.MktApiBaseUrl, isAuthenticationEnabled: true));
 }
        public Task <Result <UserSurveyModel> > Answer(SurveyAnswerModel model)
        => Result <UserSurveyModel> .TryAsync(async() =>
        {
            var results = await _repository.ListAsync <Answer>(a => model.AnswerIds.Contains(a.Id),
                                                               a => a.Question.Survey.Question.Select(q => q.Answer.Select(aa => aa.Action)),
                                                               a => a.Question.MustAnswered, a => a.Question.Survey.Question.Select(q => q.MustAnswered),
                                                               a => a.Question.Survey.Question.Select(q => q.MustAnswered)
                                                               , a => a.Action);


            if (!results.Success || results.Data == null || !results.Data.Any() ||
                results.Data.Count != model.AnswerIds.Count)
            {
                return(Result <UserSurveyModel> .Failed(Error.WithData(1000, new[] { "answer not found" })));
            }
            if (results.Data.GroupBy(a => a.Question).ToList().Count() != 1)
            {
                return(Result <UserSurveyModel> .Failed(Error.WithData(1000,
                                                                       new[] { "answers are not from one question" })));
            }


            var answers = results.Data;

            var resultUserSurvey = await _repository.FirstOrDefaultAsync <UserSurvey>(us =>
                                                                                      us.SurveyId == answers.FirstOrDefault().Question.Survey.Id&&
                                                                                      us.UserId == generalDataService.User.Id,
                                                                                      us => us.UserAnswer.Select(ua => ua.Answer.Question.Survey.Question.Select(q => q.Answer)),
                                                                                      us => us.Survey.Question.Select(q => q.MustAnswered),
                                                                                      us => us.Survey.Question.Select(question => question.Answer), us => us.UserDependentSurvey);

//                var resultUserSurvey = await _repository.FirstOrDefaultAsync<UserSurvey>(us =>
//                        us.SurveyId == answers.FirstOrDefault().Question.Survey.Id && us.UserId == generalDataService.User.Id,
//                    us => us.UserAnswer);

            UserSurvey userSurvey = null;
            if (resultUserSurvey.Data == null)     // first answer
            {
                userSurvey = new UserSurvey
                {
                    Id         = Guid.NewGuid(),
                    UserId     = generalDataService.User.Id,
                    Survey     = answers.FirstOrDefault().Question.Survey,
                    IsFinsihed = answers.FirstOrDefault().Question.Survey.Question.Count == 1,
                    UserAnswer = answers.Select(answer => new UserAnswer
                    {
                        Id = Guid.NewGuid(), Answer = answer, Text = model.UserAnswer
                    }).ToList()
                };
                _repository.Add(userSurvey);
            }
            else     // not the first answer
            {
                userSurvey = resultUserSurvey.Data;

                var questionsAnswered = userSurvey.UserAnswer.Select(ua => ua.Answer.Question).ToList();
                if (questionsAnswered.Select(qa => qa.Id).Contains(answers.FirstOrDefault().Question.Id)
                    ) // change answer
                {
                    var previousAnswers = userSurvey.UserAnswer.Where(ua =>
                                                                      answers.Any(aa => aa.Question.Id == ua.Answer.Question.Id)).ToList();
                    previousAnswers.AddRange(userSurvey.UserAnswer.Where(ua =>
                                                                         ua.Answer.Question.Number > answers.FirstOrDefault().Question.Number));
                    var actions = previousAnswers.Where(ua =>
                                                        ua.Answer.Question.Number > answers.FirstOrDefault().Question.Number).ToList()
                                  .SelectMany(ua => ua.Answer.Action);
                    if (actions.Any(a => a.Type == (int)ActionType.AddDependent))
                    {
                        if (previousAnswers.Any(ua => ua.Answer.Question.Text.ToLower().Contains("spouse")))
                        {
                            _repository.RemoveRange(userSurvey.UserDependentSurvey);
                            if (userSurvey.UserAssessmentSurvey != null && userSurvey.UserAssessmentSurvey.Any() &&
                                userSurvey.UserAssessmentSurvey
                                .Select(ua => ua.UserAssessmentBlob).Any())
                            {
                                _repository.RemoveRange(userSurvey.UserAssessmentSurvey
                                                        .Select(ua => ua.UserAssessmentBlob).ToList());
                            }
                            if (userSurvey.UserAssessmentSurvey != null && userSurvey.UserAssessmentSurvey.Any())
                            {
                                _repository.RemoveRange(userSurvey.UserAssessmentSurvey);
                            }
                        }
                        else
                        {
                            var allDependents =
                                await _membershipServiceApi.MembershipLinkedUserApiService.ListByUser(
                                    new MembershipService.ApiClient.Models.BaseModel
                            {
                                Id = generalDataService.User.Id
                            });
                            var dependentIds = allDependents.Data.Where(ad => ad.RelationType.ToLower() != "spouse")
                                               .ToList()
                                               .Select(ad => ad.FirstUser.Id).ToList();
                            _repository.RemoveRange(
                                userSurvey.UserDependentSurvey.Where(ud => dependentIds.Contains(ud.UserId))
                                .ToList());
                        }
                    }

                    if (actions.Any(a => a.Type == (int)ActionType.AddRelative))
                    {
                        _repository.RemoveRange(userSurvey.UserRelativeSurvey);
                    }


                    previousAnswers.ForEach(previousAnswer => userSurvey.UserAnswer.Remove(previousAnswer));
                    _repository.RemoveRange(previousAnswers);
                }

                answers.ToList().ForEach(
                    answer => userSurvey.UserAnswer.Add(new UserAnswer
                {
                    Id = Guid.NewGuid(), Answer = answer, Text = model.UserAnswer
                }));
            }

            QuestionCoreModel nextQuestionCoreModel = CalculateNextQuestion(answers.FirstOrDefault(), userSurvey);

            var userResult = await _membershipServiceApi.AuthAuthApiService.Setting(
                new MembershipService.ApiClient.Models.BaseModel
            {
                Id = generalDataService.User.Id
            });

            var profile = await _membershipServiceApi.AuthAuthApiService.Profile(
                new MembershipService.ApiClient.Models.BaseModel
            {
                Id = generalDataService.User.Id
            });

            var isFinished = SurveyIsFinished(userSurvey).Data;

            var makeAppointment = false;
            var userCartUpdated = false;
            Guid?invoiceId      = null;
            if (isFinished)     // Perform actions after survey is finished
            {
                var result      = (await PerformActions(userSurvey)).Data;
                invoiceId       = result.Item1;
                makeAppointment = result.Item2;

                await _messageBiz.Add(new CreateMessageModel
                {
                    Title = "Survey Finished",
                    Body  =
                        "you have successfully finished your survey , we will check and contact you about the results as soon as possible ",
                    Priority = MessagePriority.High
                });

                _coreSmtpClient.SendSurveySubmittedNotif(profile.Data.Email, profile.Data.Mobile,
                                                         profile.Data.Username,
                                                         DateTime.Now.ToString("F"));


//                    _coreSmtpClient.Send(userResult.Data.Email,
//                        $"Dear {userResult.Data.Firstname} {userResult.Data.Lastname} ,\n you have finished our survey , we will check and contact you about the results as soon as possible. \n Best Regards",
//                        "Finished Survey ");

//                    _smsHttpClient.Send(userResult.Data.Mobile,
//                        $"Dear {userResult.Data.Firstname} {userResult.Data.Lastname} , You have finished doing a survey, we will check and contact you about the results as soon as possible. \n Best Regards ");
            }

            userSurvey.IsFinsihed = isFinished;
            await _repository.CommitAsync();

            return(Result <UserSurveyModel> .Successful(new UserSurveyModel
            {
                NextQuestion = nextQuestionCoreModel,
                SurveyId = answers.FirstOrDefault().Question.Survey.Id,
                MakeAnAppointment = makeAppointment,
                UserCartUpdated = userCartUpdated,
                SurveyName = answers.FirstOrDefault().Question.Survey.Name,
                IsFinished = isFinished,
                IsStarted = true,
                QuestionCount = userSurvey.Survey.Question.Count,
                InvoiceId = invoiceId,
                User = userResult.Data
            }));
        });