コード例 #1
0
        public void UpdateSurveyResponse(SurveyInfoModel surveyInfoModel,
                                         string responseId,
                                         MvcDynamicForms.Form form,
                                         SurveyAnswerDTO surveyAnswerDTO,
                                         bool isSubmited,
                                         bool isSaved,
                                         int pageNumber,
                                         int orgId,
                                         int userId,
                                         string userName)
        {
            // 1 Get the record for the current survey response
            // 2 update the current survey response and save the response

            //// 1 Get the record for the current survey response
            SurveyAnswerResponse surveyAnswerResponse = new SurveyAnswerResponse();

            surveyAnswerResponse.SurveyResponseList.Add(surveyAnswerDTO);
            ///2 Update the current survey response and save it
            _surveyAnswerRequest.Criteria.UserId   = userId;
            _surveyAnswerRequest.Criteria.UserName = userName;
            SurveyHelper.UpdateSurveyResponse(surveyInfoModel,
                                              form,
                                              _surveyAnswerRequest,
                                              _surveyResponseBuilder,
                                              _dataEntryService,
                                              surveyAnswerResponse,
                                              responseId,
                                              surveyAnswerDTO,
                                              isSubmited,
                                              isSaved,
                                              pageNumber,
                                              orgId,
                                              userId);
        }
コード例 #2
0
        public MvcDynamicForms.Form GetSurveyFormData(string surveyId, int pageNumber, SurveyAnswerDTO surveyAnswerDTO)
        {
            SurveyInfoModel surveyInfoModel = GetSurveyInfoModel(surveyId);
            SurveyInfoDTO   surveyInfoDTO   = Epi.Web.MVC.Models.Mapper.ToSurveyInfoDTO(surveyInfoModel);

            MvcDynamicForms.Form form = Epi.Web.MVC.Utility.FormProvider.GetForm(surveyInfoDTO, 1, null);
            return(form);
        }
コード例 #3
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));
            }
        }
コード例 #4
0
        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));
            }
        }
コード例 #5
0
 public void Add(MvcDynamicForms.Form pForm)
 {
     ResponseDetailList.Clear();
     foreach (var field in pForm.InputFields)
     {
         if (!field.IsPlaceHolder)
         {
             if (this.ResponseDetailList.ContainsKey(field.Title))
             {
                 if (field.FieldTypeId == 11)
                 {
                     if (field.Response == "Yes")
                     {
                         field.Response = "1";
                     }
                     else if (field.Response == "No")
                     {
                         field.Response = "0";
                     }
                     else
                     {
                         this.ResponseDetailList[field.Title] = field.Response;
                     }
                 }
                 else
                 {
                     this.ResponseDetailList[field.Title] = field.Response;
                 }
             }
             else
             {
                 if (field.FieldTypeId == 11)
                 {
                     if (field.Response == "Yes")
                     {
                         this.ResponseDetailList.Add(field.Title, "1");
                     }
                     else if (field.Response == "No")
                     {
                         this.ResponseDetailList.Add(field.Title, "0");
                     }
                     else
                     {
                         this.ResponseDetailList.Add(field.Title, field.Response);
                     }
                 }
                 else
                 {
                     this.ResponseDetailList.Add(field.Title, field.Response);
                 }
             }
         }
     }
 }
 public void Add(MvcDynamicForms.Form pForm)
 {
     _responseQA.Clear();
     foreach (var field in pForm.InputFields)
     {
         if (!field.IsPlaceHolder)
         {
             _responseQA[field.Title] = field.Response;
         }
     }
 }
コード例 #7
0
        public static List <KeyValuePair <string, string> > GetHiddenFieldsList(MvcDynamicForms.Form pForm)
        {
            List <KeyValuePair <string, String> > FieldsList = new List <KeyValuePair <string, string> >();

            foreach (var field in pForm.InputFields)
            {
                if (field.IsPlaceHolder)
                {
                    FieldsList.Add(new KeyValuePair <string, string>(field.Title, field.Response));
                }
            }

            return(FieldsList);
        }
コード例 #8
0
        public static MvcDynamicForms.Form UpdateControlsValues(MvcDynamicForms.Form form, string Name, string Value)
        {
            foreach (var field in form.InputFields)
            {
                string fieldName = field.Title;

                if (Name.ToLower() == fieldName.ToLower())
                {
                    field.Response = Value.ToString();
                }
            }

            return(form);
        }
コード例 #9
0
        /// <summary>
        /// get the survey form data
        /// </summary>
        /// <param name="surveyId"></param>
        /// <param name="responseId"></param>
        /// <param name="pageNumber"></param>
        /// <param name="surveyAnswerDTO"></param>
        /// <returns></returns>
        public MvcDynamicForms.Form GetSurveyFormData(string surveyId, int pageNumber, Epi.Web.Common.DTO.SurveyAnswerDTO surveyAnswerDTO, bool isMobileDevice = false, string callerThereby = "", bool IsAndroid = false, bool GetSourceTables = true)
        {
            SourceTablesResponse Response = new SourceTablesResponse();
            SourceTablesRequest  Request  = new SourceTablesRequest();

            if (GetSourceTables)
            {
                Request.SurveyId = surveyId;
                Response         = _iSurveyInfoRepository.GetSourceTables(Request);//Pain Point
            }
            Epi.Web.Common.DTO.SurveyInfoDTO surveyInfoDTO = SurveyHelper.GetSurveyInfoDTO(_surveyInfoRequest, _iSurveyInfoRepository, surveyId);
            MvcDynamicForms.Form             form          = null;
            form = Epi.Web.MVC.Utility.FormProvider.GetForm(surveyInfoDTO, pageNumber, surveyAnswerDTO, isMobileDevice, IsAndroid, Response.List);

            return(form);
        }
コード例 #10
0
        /// <summary>
        ///   This function will loop through the form controls and checks if any of the controls are found in the context detail list.
        ///   If any their values get updated from the context list.
        /// </summary>
        /// <param name="form"></param>
        /// <param name="ContextDetailList"></param>
        /// <returns>Returns a Form object</returns>
        public static MvcDynamicForms.Form UpdateControlsValuesFromContext(MvcDynamicForms.Form form, Dictionary <string, string> ContextDetailList)
        {
            Dictionary <string, string> formControlList = new Dictionary <string, string>();

            foreach (var field in form.InputFields)
            {
                string fieldName = field.Title;

                if (ContextDetailList.ContainsKey(fieldName))
                {
                    field.Response = ContextDetailList[fieldName].ToString();
                }
            }



            return(form);
        }
コード例 #11
0
        public ActionResult Respond(MvcDynamicForms.Form form)
        {
            var formInfo = (FormInfoSection)System.Configuration.ConfigurationManager.GetSection("formInfoGroup/formInfo");
            var formUid  = new Guid(Request["FormUid"]);

            if (form.Validate())
            {
                var responseUid = Guid.NewGuid();
                _mvcResponses.AddToFormResponses(new FormResponse {
                    Uid = responseUid, FormUid = formUid, Timestamp = DateTime.Now
                });
                foreach (var inputfield in form.InputFields)
                {
                    string response;
                    var    fieldType = inputfield.GetType().ToString();
                    switch (fieldType)
                    {
                    case "MvcDynamicForms.Fields.FileUpload":
                        response = inputfield.Response.Split('\\')[inputfield.Response.Split('\\').GetUpperBound(0)];
                        break;

                    default:
                        response = inputfield.Response;
                        if (response.Length > formInfo.MaxLength.Value)
                        {
                            response = response.Substring(0, formInfo.MaxLength.Value);
                        }
                        break;
                    }
                    var key = new Guid(inputfield.Key);
                    if (fieldType != "MvcDynamicForms.Fields.Literal" && !string.IsNullOrEmpty(response))
                    {
                        _mvcResponses.AddToFormResponseItems(new FormResponseItem {
                            Uid = Guid.NewGuid(), FormResponseUid = responseUid, FormItemUid = key, ResponseStr = response, Timestamp = DateTime.Now
                        });
                    }
                }
                _mvcResponses.SaveChanges();
                return(null);
            }
            ViewData["FormUid"]  = formUid.ToString();
            ViewData["FormName"] = _mvcForms.Forms.FirstOrDefault(f => f.Uid == formUid).FormName;
            return(View(form));
        }
コード例 #12
0
        public void Then_Open_The_Survey()
        {
            //SetUp

            Epi.Web.MVC.Facade.ISurveyFacade         iSurveyFacade;
            Epi.Web.Common.Message.SurveyInfoRequest surveyInfoRequest;

            //Arrange
            surveyInfoRequest = new Epi.Web.Common.Message.SurveyInfoRequest();
            surveyInfoRequest.Criteria.SurveyIdList = "1";
            iSurveyFacade = new TestSurveyFacade(surveyInfoRequest);
            var        controller = new Epi.Web.MVC.Controllers.SurveyController(iSurveyFacade);
            ViewResult c          = controller.Notify("1", "page") as ViewResult;

            //MvcDynamicForms.Form f = c.Model as MvcDynamicForms.Form;
            MvcDynamicForms.Form f = iSurveyFacade.GetSurveyFormData("1", 1, null);
            //Assert.AreEqual(typeof(MvcDynamicForms.Form), c.Model);//test to make sure it is returning field prefix
            //Does it render all the controls?
            //Assert
            Assert.AreEqual(7, f.Fields.Count);                                                  //test to make sure it is returning correct number of items
            // Does it render the text box?
            Assert.AreEqual("MvcDynamicForms.Fields.TextBox", f.Fields[0].GetType().ToString()); //end item in the forms collection is a textbox
        }
コード例 #13
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());
                }
                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));
            }
        }
コード例 #14
0
        public static List <KeyValuePair <string, string> > GetHiddenFieldsList(MvcDynamicForms.Form form)
        {
            List <KeyValuePair <string, String> > hiddenFields = form.InputFields.Where(field => field.IsPlaceHolder).Select(field => new KeyValuePair <string, string>(field.Title, field.Response)).ToList();

            return(hiddenFields);
        }
コード例 #15
0
 public ActionResult Respond(string shortPath)
 {
     var thisForm = _mvcForms.Forms.FirstOrDefault(form => form.ShortPath == shortPath);
     if (thisForm != null)
     {
         ViewData["FormName"] = thisForm.FormName;
         //Only retrieve non-hidden fields
         var formFields =
             _mvcForms.FormFields.Where(formitems => formitems.FormUid == thisForm.Uid & formitems.IsHidden == 0).OrderBy(
                 formitem => formitem.SortOrder);
         //CUSTOM, reference http://mvcdynamicforms.codeplex.com/
         //Using the MVC Dynamic Form project, build a form comprised of fields tied to the form items used by this custom form
         //TODO: Consider switching to conditionally build views using partial views with the KnockOutJS library for custom validation
         if (formFields.Count() > 0)
         {
             var dynamicFormFields = new List<Field>();
             foreach (var formField in formFields)
             {
                 var field = formField;
                 var thisFieldType =
                     _mvcForms.FormFieldTypes.Single(fieldtype => fieldtype.Uid == field.FormFieldTypeUid);
                 switch (thisFieldType.FieldType)
                 {
                     case ("Literal"):
                         dynamicFormFields.Add(new TextBox()
                                                   {
                                                       Key = field.Uid.ToString(),
                                                       Template =
                                                           String.Format("<p>{0}</p>",
                                                                         field.LiteralText.KillHtml()),
                                                       DisplayOrder = field.SortOrder
                                                   });
                         break;
                     case ("TextBox"):
                         dynamicFormFields.Add(new TextBox()
                                                   {
                                                       Key = field.Uid.ToString(),
                                                       ResponseTitle = field.FormFieldName,
                                                       Prompt =
                                                           (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                               ? field.FormFieldPrompt
                                                               : null,
                                                       DisplayOrder = field.SortOrder,
                                                       Required = Convert.ToBoolean(field.IsRequired),
                                                       RequiredMessage =
                                                           Convert.ToBoolean(field.IsRequired)
                                                               ? thisFieldType.ErrorMsgRequired.Replace(
                                                                   "%FormFieldName%", field.FormFieldName)
                                                               : string.Empty,
                                                       RegularExpression =
                                                           (!string.IsNullOrEmpty(thisFieldType.RegExDefault))
                                                               ? thisFieldType.RegExDefault
                                                               : string.Empty,
                                                       RegexMessage =
                                                           (!string.IsNullOrEmpty(thisFieldType.RegExDefault))
                                                               ? thisFieldType.ErrorMsgRegEx.Replace(
                                                                   "%FormFieldName%", field.FormFieldName)
                                                               : string.Empty
                                                   });
                         break;
                     case ("TextArea"):
                         var newTextArea = new TextArea()
                                               {
                                                   Key = field.Uid.ToString(),
                                                   ResponseTitle = field.FormFieldName,
                                                   Prompt =
                                                       (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                           ? field.FormFieldPrompt
                                                           : null,
                                                   DisplayOrder = field.SortOrder,
                                                   Required = Convert.ToBoolean(field.IsRequired),
                                                   RequiredMessage =
                                                       Convert.ToBoolean(field.IsRequired)
                                                           ? thisFieldType.ErrorMsgRequired.Replace(
                                                               "%FormFieldName%", field.FormFieldName)
                                                           : string.Empty,
                                                   RegularExpression =
                                                       (!string.IsNullOrEmpty(thisFieldType.RegExDefault))
                                                           ? thisFieldType.RegExDefault
                                                           : string.Empty,
                                                   RegexMessage =
                                                       (!string.IsNullOrEmpty(thisFieldType.RegExDefault))
                                                           ? thisFieldType.ErrorMsgRegEx.Replace(
                                                               "%FormFieldName%",
                                                               field.FormFieldName)
                                                           : string.Empty
                                               };
                         int number;
                         if (Int32.TryParse(field.Rows.ToString(), out number))
                             newTextArea.InputHtmlAttributes.Add("rows", field.Rows.ToString());
                         if (Int32.TryParse(field.Cols.ToString(), out number))
                             newTextArea.InputHtmlAttributes.Add("cols", field.Cols.ToString());
                         dynamicFormFields.Add(newTextArea);
                         break;
                     case ("SelectList"):
                         var newSelectList = new Select
                                                 {
                                                     Key = field.Uid.ToString(),
                                                     ResponseTitle = field.FormFieldName,
                                                     Prompt =
                                                         (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                             ? field.FormFieldPrompt
                                                             : null,
                                                     DisplayOrder = field.SortOrder,
                                                     Required = Convert.ToBoolean(field.IsRequired),
                                                     RequiredMessage =
                                                         Convert.ToBoolean(field.IsRequired)
                                                             ? thisFieldType.ErrorMsgRequired.Replace(
                                                                 "%FormFieldName%", field.FormFieldName)
                                                             : string.Empty
                                                 };
                         if (Convert.ToBoolean(field.IsMultipleSelect))
                         {
                             newSelectList.MultipleSelection = true;
                             newSelectList.Size = Convert.ToInt32(field.ListSize);
                             newSelectList.CommaDelimitedChoices = field.Options.Replace(Environment.NewLine, ",");
                         }
                         else
                         {
                             newSelectList.ShowEmptyOption = Convert.ToBoolean(field.IsEmptyOption);
                             newSelectList.EmptyOption = (Convert.ToBoolean(field.IsEmptyOption))
                                                             ? field.EmptyOption
                                                             : null;
                             newSelectList.CommaDelimitedChoices = field.Options.Replace(Environment.NewLine, ",");
                         }
                         dynamicFormFields.Add(newSelectList);
                         break;
                     case ("CheckBox"):
                         var newCheckBox = new CheckBox
                                               {
                                                   Key = field.Uid.ToString(),
                                                   ResponseTitle = field.FormFieldName,
                                                   Prompt =
                                                       (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                           ? field.FormFieldPrompt
                                                           : null,
                                                   DisplayOrder = field.SortOrder,
                                                   Required = Convert.ToBoolean(field.IsRequired),
                                                   RequiredMessage =
                                                       Convert.ToBoolean(field.IsRequired)
                                                           ? thisFieldType.ErrorMsgRequired.Replace(
                                                               "%FormFieldName%", field.FormFieldName)
                                                           : string.Empty
                                               };
                         dynamicFormFields.Add(newCheckBox);
                         break;
                     case ("CheckBoxList"):
                         var newCheckBoxList = new CheckBoxList
                                                   {
                                                       Key = field.Uid.ToString(),
                                                       ResponseTitle = field.FormFieldName,
                                                       Prompt =
                                                           (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                               ? field.FormFieldPrompt
                                                               : null,
                                                       DisplayOrder = field.SortOrder,
                                                       Required = Convert.ToBoolean(field.IsRequired),
                                                       RequiredMessage =
                                                           Convert.ToBoolean(field.IsRequired)
                                                               ? thisFieldType.ErrorMsgRequired.Replace(
                                                                   "%FormFieldName%", field.FormFieldName)
                                                               : string.Empty,
                                                       CommaDelimitedChoices = field.Options.Replace(Environment.NewLine, ","),
                                                       Orientation = (field.Orientation == "vertical") ? Orientation.Vertical : Orientation.Horizontal
                                                   };
                         dynamicFormFields.Add(newCheckBoxList);
                         break;
                     case ("RadioList"):
                         var newRadioList = new RadioList
                                                   {
                                                       Key = field.Uid.ToString(),
                                                       ResponseTitle = field.FormFieldName,
                                                       Prompt =
                                                           (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                               ? field.FormFieldPrompt
                                                               : null,
                                                       DisplayOrder = field.SortOrder,
                                                       Required = Convert.ToBoolean(field.IsRequired),
                                                       RequiredMessage =
                                                           Convert.ToBoolean(field.IsRequired)
                                                               ? thisFieldType.ErrorMsgRequired.Replace(
                                                                   "%FormFieldName%", field.FormFieldName)
                                                               : string.Empty,
                                                       CommaDelimitedChoices = field.Options.Replace(Environment.NewLine, ","),
                                                       Orientation = (field.Orientation == "vertical") ? Orientation.Vertical : Orientation.Horizontal
                                                   };
                         dynamicFormFields.Add(newRadioList);
                         break;
                     case ("FileUpload"):
                         var newFileUpload = new FileUpload
                                                 {
                                                     Key = field.Uid.ToString(),
                                                     ResponseTitle = field.FormFieldName,
                                                     Prompt =
                                                         (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                             ? field.FormFieldPrompt
                                                             : null,
                                                     InvalidExtensionError = field.ErrorExtensions,
                                                     Required = Convert.ToBoolean(field.IsRequired),
                                                     RequiredMessage =
                                                         Convert.ToBoolean(field.IsRequired)
                                                             ? thisFieldType.ErrorMsgRequired.Replace(
                                                                 "%FormFieldName%", field.FormFieldName)
                                                             : string.Empty,
                                                     DisplayOrder = field.SortOrder,
                                                 };
                         if (!string.IsNullOrEmpty(field.ValidExtensions))
                             newFileUpload.ValidExtensions = "." +
                                                             field.ValidExtensions.Replace(Environment.NewLine,
                                                                                           ",.");
                         var user = Membership.GetUser(User.Identity.Name);
                         UserKey = user.ProviderUserKey.ToString();
                         newFileUpload.Validated += FileValidated;
                         newFileUpload.Posted += FilePosted;
                         dynamicFormFields.Add(newFileUpload);
                         break;
                 }
             }
             var dynamicForm = new MvcDynamicForms.Form();
             dynamicForm.AddFields(dynamicFormFields.ToArray());
             dynamicForm.Serialize = true;
             ViewData["FormUid"] = thisForm.Uid;
             return View(dynamicForm);
         }
     }
     return RedirectToAction("Index", "Home");
 }
コード例 #16
0
        public ActionResult Index(string surveyid, string AddNewFormId, string EditForm)
        {
            int  UserId       = SurveyHelper.GetDecryptUserId(Session["UserId"].ToString());
            int  CuurentOrgId = int.Parse(Session["SelectedOrgId"].ToString());
            Guid ResponseID   = Guid.NewGuid();

            Session["FormValuesHasChanged"] = "";

            TempData[Epi.Web.MVC.Constants.Constant.RESPONSE_ID] = Session["RootResponseId"] = ResponseID.ToString();


            if (string.IsNullOrEmpty(EditForm) && Session["EditForm"] != null)
            {
                EditForm = Session["EditForm"].ToString();
            }

            if (!string.IsNullOrEmpty(EditForm) && string.IsNullOrEmpty(AddNewFormId))
            {
                Session["RootResponseId"] = EditForm.ToLower();

                Session["IsEditMode"] = true;
                Epi.Web.Enter.Common.DTO.SurveyAnswerDTO surveyAnswerDTO = GetSurveyAnswer(EditForm, Session["RootFormId"].ToString());


                Session["RequestedViewId"] = surveyAnswerDTO.ViewId;
                if (Session["RecoverLastRecordVersion"] != null)
                {
                    surveyAnswerDTO.RecoverLastRecordVersion = bool.Parse(Session["RecoverLastRecordVersion"].ToString());
                }
                string ChildRecordId = GetChildRecordId(surveyAnswerDTO);
                Session["RecoverLastRecordVersion"] = false;
                return(RedirectToAction(Epi.Web.MVC.Constants.Constant.INDEX, Epi.Web.MVC.Constants.Constant.SURVEY_CONTROLLER, new { responseid = ChildRecordId, PageNumber = 1, Edit = "Edit" }));
            }
            else
            {
                Session["IsEditMode"] = false;
            }
            bool IsMobileDevice = this.Request.Browser.IsMobileDevice;


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

            FormsAuthentication.SetAuthCookie("BeginSurvey", false);
            Session["RootFormId"] = AddNewFormId;
            //create the responseid
            Epi.Web.Enter.Common.DTO.SurveyAnswerDTO SurveyAnswer = _isurveyFacade.CreateSurveyAnswer(AddNewFormId, ResponseID.ToString(), UserId, false, "", false, CuurentOrgId);
            MvcDynamicForms.Form form = _isurveyFacade.GetSurveyFormData(SurveyAnswer.SurveyId, 1, SurveyAnswer, IsMobileDevice, null, null, false, false);
            TempData["Width"] = form.Width + 100;
            SurveyInfoModel surveyInfoModel = Mapper.ToFormInfoModel(form.SurveyInfo);

            // set the survey answer to be production or test
            SurveyAnswer.IsDraftMode = form.SurveyInfo.IsDraftMode;
            XDocument xdoc = XDocument.Parse(form.SurveyInfo.XML);

            ///////////////////////////// Execute - Record Before - start//////////////////////
            Dictionary <string, string> ContextDetailList = new Dictionary <string, string>();
            EnterRule         FunctionObject_B            = (EnterRule)form.FormCheckCodeObj.GetCommand("level=record&event=before&identifier=");
            SurveyResponseXML SurveyResponseXML           = new SurveyResponseXML(PageFields, RequiredList);

            if (FunctionObject_B != null && !FunctionObject_B.IsNull())
            {
                try
                {
                    SurveyAnswer.XML        = SurveyResponseXML.CreateResponseDocument(xdoc, SurveyAnswer.XML);
                    Session["RequiredList"] = SurveyResponseXML._RequiredList;
                    //SurveyAnswer.XML = Epi.Web.MVC.Utility.SurveyHelper.CreateResponseDocument(xdoc, SurveyAnswer.XML, RequiredList);
                    this.RequiredList       = SurveyResponseXML._RequiredList;
                    form.RequiredFieldsList = this.RequiredList;
                    FunctionObject_B.Context.HiddenFieldList      = form.HiddenFieldsList;
                    FunctionObject_B.Context.HighlightedFieldList = form.HighlightedFieldsList;
                    FunctionObject_B.Context.DisabledFieldList    = form.DisabledFieldsList;
                    FunctionObject_B.Context.RequiredFieldList    = form.RequiredFieldsList;

                    FunctionObject_B.Execute();

                    // field list
                    form.HiddenFieldsList      = FunctionObject_B.Context.HiddenFieldList;
                    form.HighlightedFieldsList = FunctionObject_B.Context.HighlightedFieldList;
                    form.DisabledFieldsList    = FunctionObject_B.Context.DisabledFieldList;
                    form.RequiredFieldsList    = FunctionObject_B.Context.RequiredFieldList;


                    ContextDetailList = Epi.Web.MVC.Utility.SurveyHelper.GetContextDetailList(FunctionObject_B);
                    form = Epi.Web.MVC.Utility.SurveyHelper.UpdateControlsValuesFromContext(form, ContextDetailList);

                    _isurveyFacade.UpdateSurveyResponse(surveyInfoModel, ResponseID.ToString(), form, SurveyAnswer, false, false, 0, SurveyHelper.GetDecryptUserId(Session["UserId"].ToString()));
                }
                catch (Exception ex)
                {
                    // do nothing so that processing
                    // can continue
                }
            }
            else
            {
                SurveyAnswer.XML        = SurveyResponseXML.CreateResponseDocument(xdoc, SurveyAnswer.XML);//, RequiredList);
                this.RequiredList       = SurveyResponseXML._RequiredList;
                Session["RequiredList"] = SurveyResponseXML._RequiredList;
                form.RequiredFieldsList = RequiredList;
                _isurveyFacade.UpdateSurveyResponse(surveyInfoModel, SurveyAnswer.ResponseId, form, SurveyAnswer, false, false, 0, SurveyHelper.GetDecryptUserId(Session["UserId"].ToString()));
            }


            return(RedirectToAction(Epi.Web.MVC.Constants.Constant.INDEX, Epi.Web.MVC.Constants.Constant.SURVEY_CONTROLLER, new { responseid = ResponseID, PageNumber = 1, surveyid = surveyInfoModel.SurveyId }));
        }
コード例 #17
0
        public static void UpdateSurveyResponse(SurveyInfoModel surveyInfoModel,
                                                MvcDynamicForms.Form form,
                                                SurveyAnswerRequest surveyAnswerRequest,
                                                SurveyResponseBuilder surveyResponseBuilder,
                                                IDataEntryService dataEntryService,
                                                SurveyAnswerResponse surveyAnswerResponse,
                                                string responseId,
                                                SurveyAnswerDTO surveyAnswerDTO,
                                                bool isSubmited,
                                                bool isSaved,
                                                int pageNumber,
                                                int orgId,
                                                int userId)
        {
            // 1 Get the record for the current survey response
            // 2 update the current survey response
            // 3 save the current survey response

            var savedResponseDetail = surveyAnswerDTO.ResponseDetail;

            if (!isSubmited)
            {
                // 2 a. update the current survey answer request
                surveyAnswerRequest.SurveyAnswerList = surveyAnswerResponse.SurveyResponseList;

                surveyResponseBuilder.Add(form);

                FormResponseDetail formResponseDetail = surveyResponseBuilder.UpdateResponseDetail(savedResponseDetail, form.CurrentPage, form.PageId);

                surveyAnswerRequest.SurveyAnswerList[0].ResponseDetail = formResponseDetail;
                // 2 b. save the current survey response
                surveyAnswerRequest.Action = RequestAction.Update;

                var currentPageNumber = form.CurrentPage;
                FormResponseDetail currentFormResponseDetail = surveyAnswerRequest.SurveyAnswerList[0].ResponseDetail;
                PageResponseDetail currentPageResponseDetail = currentFormResponseDetail.GetPageResponseDetailByPageNumber(currentPageNumber);

                var mergedResponseDetail = MergeResponseDetail(savedResponseDetail, currentPageResponseDetail);
                surveyAnswerRequest.SurveyAnswerList[0].ResponseDetail.PageIds = mergedResponseDetail.PageIds;
                // keep only the pages that have updates
                var updatedPageResponseDetailList = mergedResponseDetail.PageResponseDetailList.ToList();
                surveyAnswerRequest.SurveyAnswerList[0].ResponseDetail.PageResponseDetailList.Clear();
                surveyAnswerRequest.SurveyAnswerList[0].ResponseDetail.PageResponseDetailList.AddRange(updatedPageResponseDetailList);
            }

            var updatedFromResponseDetail = surveyAnswerRequest.SurveyAnswerList[0].ResponseDetail;

            if (updatedFromResponseDetail.UserId <= 0)
            {
                updatedFromResponseDetail.UserId = userId;
            }
            if (updatedFromResponseDetail.UserOrgId <= 0)
            {
                updatedFromResponseDetail.UserOrgId = orgId;
            }

            ////Update page number before saving response
            if (surveyAnswerRequest.SurveyAnswerList[0].CurrentPageNumber != 0)
            {
                updatedFromResponseDetail.LastPageVisited = pageNumber;
            }
            if (form.HiddenFieldsList != null)
            {
                updatedFromResponseDetail.HiddenFieldsList = form.HiddenFieldsList;
            }
            if (form.HighlightedFieldsList != null)
            {
                updatedFromResponseDetail.HighlightedFieldsList = form.HighlightedFieldsList;
            }
            if (form.DisabledFieldsList != null)
            {
                updatedFromResponseDetail.DisabledFieldsList = form.DisabledFieldsList;
            }
            if (form.RequiredFieldsList != null)
            {
                updatedFromResponseDetail.RequiredFieldsList = form.RequiredFieldsList;
            }

            //  AssignList
            List <KeyValuePair <string, string> > fieldsList = GetHiddenFieldsList(form).Where(kvp => kvp.Value != null).ToList();

            if (fieldsList.Count > 0)
            {
                var formId           = form.SurveyInfo.SurveyId;
                var metadataAccessor = form.SurveyInfo as MetadataAccessor;
                var formDigest       = metadataAccessor.GetFormDigest(formId);
                foreach (var fieldsListKvp in fieldsList)
                {
                    var fieldName          = fieldsListKvp.Key.ToLower();
                    var pageId             = formDigest.FieldNameToPageId(fieldName);
                    var pageResponseDetail = updatedFromResponseDetail.PageResponseDetailList.SingleOrDefault(p => p.PageId == pageId);
                    if (pageResponseDetail == null)
                    {
                        var pageDigest = metadataAccessor.GetPageDigestByPageId(formId, pageId);
                        pageResponseDetail = new PageResponseDetail {
                            PageId = pageId, PageNumber = pageDigest.PageNumber
                        };
                        updatedFromResponseDetail.AddPageResponseDetail(pageResponseDetail);
                    }
                    pageResponseDetail.ResponseQA[fieldName] = fieldsListKvp.Value;
                    pageResponseDetail.HasBeenUpdated        = true;
                }
            }

            if (isSaved)
            {
                surveyAnswerRequest.SurveyAnswerList[0].Status = RecordStatus.Saved;
                surveyAnswerRequest.SurveyAnswerList[0].ReasonForStatusChange = RecordStatusChangeReason.Update;
            }

            /////Update Survey Mode ////////////////////
            surveyAnswerRequest.SurveyAnswerList[0].IsDraftMode = surveyAnswerDTO.IsDraftMode;
            //surveyAnswerRequest.Criteria.UserId = UserId;
            ResponseContext responseContext = ((IResponseContext)updatedFromResponseDetail).CloneResponseContext();

            if (responseContext.UserId == 0)
            {
                responseContext.UserId = userId;
            }
            if (responseContext.UserOrgId == 0)
            {
                responseContext.UserOrgId = orgId;
            }
            surveyAnswerRequest.ResponseContext = responseContext;

            dataEntryService.SetSurveyAnswer(surveyAnswerRequest);
        }
コード例 #18
0
ファイル: HomeController.cs プロジェクト: fgma75/epiinfo
        public ActionResult Index(Epi.Web.MVC.Models.SurveyInfoModel surveyModel)
        {
            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);



                Session["RootResponseId"] = surveyModel.ResponseId;
                string ResponseID = surveyModel.ResponseId; //string.Empty;
                //object tempDataValue;

                //if (TempData.TryGetValue(Epi.Web.MVC.Constants.Constant.RESPONSE_ID, out tempDataValue))
                //{
                //    ResponseID = (string)tempDataValue;
                //}
                //else
                //{

                //}

                Epi.Web.Common.DTO.SurveyAnswerDTO SurveyAnswer = _isurveyFacade.CreateSurveyAnswer(surveyModel.SurveyId, ResponseID.ToString());

                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());
                    _isurveyFacade.UpdatePassCode(ResponseID.ToString(), surveyModel.PassCode);
                }


                Epi.Web.Common.Message.SurveyAnswerResponse SurveyAnswerResponse = _isurveyFacade.GetSurveyAnswerResponse(ResponseID);
                SurveyAnswer = SurveyAnswerResponse.SurveyResponseList[0];
                SurveyInfoModel surveyInfoModel = GetSurveyInfo(SurveyAnswer.SurveyId);

                // set the survey answer to be production or test
                SurveyAnswer.IsDraftMode = surveyInfoModel.IsDraftMode;
                XDocument xdoc = XDocument.Parse(surveyInfoModel.XML);

                // MvcDynamicForms.Form form = _isurveyFacade.GetSurveyFormData(SurveyAnswer.SurveyId, 1, SurveyAnswer, IsMobileDevice, "homeController");
                MvcDynamicForms.Form form = _isurveyFacade.GetSurveyFormData(SurveyAnswer.SurveyId, 1, SurveyAnswer, IsMobileDevice, null);

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

                TempData["Width"] = form.Width + 100;

                XDocument xdocResponse = XDocument.Parse(SurveyAnswer.XML);

                XElement ViewElement = xdoc.XPathSelectElement("Template/Project/View");
                string   checkcode   = ViewElement.Attribute("CheckCode").Value.ToString();

                form.FormCheckCodeObj = form.GetCheckCodeObj(xdoc, xdocResponse, checkcode);

                ///////////////////////////// Execute - Record Before - start//////////////////////
                Dictionary <string, string> ContextDetailList = new Dictionary <string, string>();
                EnterRule FunctionObject_B = (EnterRule)form.FormCheckCodeObj.GetCommand("level=record&event=before&identifier=");
                if (FunctionObject_B != null && !FunctionObject_B.IsNull())
                {
                    try
                    {
                        SurveyAnswer.XML = CreateResponseDocument(xdoc, SurveyAnswer.XML);

                        form.RequiredFieldsList = this.RequiredList;
                        FunctionObject_B.Context.HiddenFieldList      = form.HiddenFieldsList;
                        FunctionObject_B.Context.HighlightedFieldList = form.HighlightedFieldsList;
                        FunctionObject_B.Context.DisabledFieldList    = form.DisabledFieldsList;
                        FunctionObject_B.Context.RequiredFieldList    = form.RequiredFieldsList;

                        FunctionObject_B.Execute();

                        // field list
                        form.HiddenFieldsList      = FunctionObject_B.Context.HiddenFieldList;
                        form.HighlightedFieldsList = FunctionObject_B.Context.HighlightedFieldList;
                        form.DisabledFieldsList    = FunctionObject_B.Context.DisabledFieldList;
                        form.RequiredFieldsList    = FunctionObject_B.Context.RequiredFieldList;


                        ContextDetailList = Epi.Web.MVC.Utility.SurveyHelper.GetContextDetailList(FunctionObject_B);
                        form = Epi.Web.MVC.Utility.SurveyHelper.UpdateControlsValuesFromContext(form, ContextDetailList);
                        SurveyAnswer.RecordBeforeFlag = true;
                        _isurveyFacade.UpdateSurveyResponse(surveyInfoModel, ResponseID.ToString(), form, SurveyAnswer, false, false, 0);
                    }
                    catch (Exception ex)
                    {
                        // do nothing so that processing
                        // can continue
                    }
                }
                else
                {
                    SurveyAnswer.XML        = CreateResponseDocument(xdoc, SurveyAnswer.XML);
                    form.RequiredFieldsList = RequiredList;
                    _isurveyFacade.UpdateSurveyResponse(surveyInfoModel, SurveyAnswer.ResponseId, form, SurveyAnswer, false, false, 0);
                }

                SurveyAnswer = _isurveyFacade.GetSurveyAnswerResponse(SurveyAnswer.ResponseId).SurveyResponseList[0];

                ///////////////////////////// Execute - Record Before - End//////////////////////
                //string page;
                // return RedirectToAction(Epi.Web.Models.Constants.Constant.INDEX, Epi.Web.Models.Constants.Constant.SURVEY_CONTROLLER, new {id="page" });
                return(RedirectToAction(Epi.Web.MVC.Constants.Constant.INDEX, Epi.Web.MVC.Constants.Constant.SURVEY_CONTROLLER, new { responseid = ResponseID, PageNumber = 1 }));
            }
            catch (Exception ex)
            {
                Epi.Web.Utility.ExceptionMessage.SendLogMessage(ex, this.HttpContext);
                return(View(Epi.Web.MVC.Constants.Constant.EXCEPTION_PAGE));
            }
        }
コード例 #19
0
        public ActionResult Index(string surveyId, string addNewFormId, string editForm)
        {
            // Assign "editForm" parameter to a less confusing name.
            // editForm contains the responseId of the record being edited.
            string editResponseId = editForm;

            bool isNewRecord;

            int    orgId    = GetIntSessionValue(UserSession.Key.CurrentOrgId);
            int    userId   = GetIntSessionValue(UserSession.Key.UserId);
            string userName = GetStringSessionValue(UserSession.Key.UserName);

            SetSessionValue(UserSession.Key.FormValuesHasChanged, string.Empty);

            var editResponseIdFromSession = GetStringSessionValue(UserSession.Key.EditResponseId);

            if (string.IsNullOrEmpty(editResponseId) && editResponseIdFromSession != null)
            {
                editResponseId = editResponseIdFromSession;
            }

            if (!string.IsNullOrEmpty(editResponseId) && string.IsNullOrEmpty(addNewFormId))
            {
                // -------------------------------
                //      Edit Existing Record
                // -------------------------------
                isNewRecord = false;
                SetSessionValue(UserSession.Key.RootResponseId, editResponseId);

                SetSessionValue(UserSession.Key.IsEditMode, true);
                SurveyAnswerDTO surveyAnswerDTO = GetSurveyAnswer(editResponseId, GetStringSessionValue(UserSession.Key.RootFormId));

                SetSessionValue(UserSession.Key.RequestedViewId, surveyAnswerDTO.ViewId);

                surveyAnswerDTO.RecoverLastRecordVersion = GetBoolSessionValue(UserSession.Key.RecoverLastRecordVersion);

                RemoveSessionValue(UserSession.Key.RecoverLastRecordVersion);
                return(RedirectToAction(ViewActions.Index, ControllerNames.Survey, new { responseid = editResponseId, PageNumber = 1, surveyid = surveyAnswerDTO.SurveyId, Edit = "Edit" }));
            }

            // -------------------------------
            //      Add New Record
            // -------------------------------
            isNewRecord = true;
            SetSessionValue(UserSession.Key.IsEditMode, false);
            bool isMobileDevice = this.Request.Browser.IsMobileDevice;


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

            FormsAuthentication.SetAuthCookie("BeginSurvey", false);

            //create the responseid
            Guid responseId = Guid.NewGuid();

            TempData[TempDataKeys.ResponseId] = responseId.ToString();

            // create the first survey response
            // Epi.Cloud.Common.DTO.SurveyAnswerDTO SurveyAnswer = _isurveyFacade.CreateSurveyAnswer(surveyModel.SurveyId, ResponseID.ToString());
            SetSessionValue(UserSession.Key.RootFormId, addNewFormId);
            var rootResponseId = responseId;

            SetSessionValue(UserSession.Key.RootResponseId, rootResponseId);

            var responseContext = InitializeResponseContext(formId: addNewFormId, responseId: responseId.ToString(), isNewRecord: true) as ResponseContext;

            SurveyAnswerDTO surveyAnswer = _surveyFacade.CreateSurveyAnswer(responseContext);

            surveyId = /*FromURL*/ surveyId ?? surveyAnswer.SurveyId;

            // Initialize the Metadata Accessor
            MetadataAccessor.CurrentFormId = surveyId;

            MvcDynamicForms.Form form            = _surveyFacade.GetSurveyFormData(surveyAnswer.SurveyId, 1, surveyAnswer, isMobileDevice);
            SurveyInfoModel      surveyInfoModel = form.SurveyInfo.ToFormInfoModel();

            MetadataAccessor metadataAccessor = form.SurveyInfo as MetadataAccessor;

            // set the survey answer to be production or test
            surveyAnswer.IsDraftMode = form.SurveyInfo.IsDraftMode;

            TempData[TempDataKeys.Width] = form.Width + 100;

            string checkcode = MetadataAccessor.GetFormDigest(surveyId).CheckCode;

            form.FormCheckCodeObj = form.GetCheckCodeObj(metadataAccessor.GetFieldDigests(surveyId), surveyAnswer.ResponseDetail, checkcode);

            ///////////////////////////// Execute - Record Before - start//////////////////////
            Dictionary <string, string> contextDetailList = new Dictionary <string, string>();
            EnterRule             functionObject_B        = (EnterRule)form.FormCheckCodeObj.GetCommand("level=record&event=before&identifier=");
            SurveyResponseBuilder surveyResponseBuilder   = new SurveyResponseBuilder(_requiredList);

            if (functionObject_B != null && !functionObject_B.IsNull())
            {
                try
                {
                    PageDigest[] pageDigests    = form.MetadataAccessor.GetCurrentFormPageDigests();
                    var          responseDetail = surveyAnswer.ResponseDetail;

                    responseDetail = surveyResponseBuilder.CreateResponseDocument(responseContext, pageDigests);
                    SetSessionValue(UserSession.Key.RequiredList, surveyResponseBuilder.RequiredList);
                    _requiredList           = surveyResponseBuilder.RequiredList;
                    form.RequiredFieldsList = _requiredList;
                    functionObject_B.Context.HiddenFieldList      = form.HiddenFieldsList;
                    functionObject_B.Context.HighlightedFieldList = form.HighlightedFieldsList;
                    functionObject_B.Context.DisabledFieldList    = form.DisabledFieldsList;
                    functionObject_B.Context.RequiredFieldList    = form.RequiredFieldsList;

                    functionObject_B.Execute();

                    // field list
                    form.HiddenFieldsList      = functionObject_B.Context.HiddenFieldList;
                    form.HighlightedFieldsList = functionObject_B.Context.HighlightedFieldList;
                    form.DisabledFieldsList    = functionObject_B.Context.DisabledFieldList;
                    form.RequiredFieldsList    = functionObject_B.Context.RequiredFieldList;


                    contextDetailList = Epi.Cloud.MVC.Utility.SurveyHelper.GetContextDetailList(functionObject_B);
                    form = Epi.Cloud.MVC.Utility.SurveyHelper.UpdateControlsValuesFromContext(form, contextDetailList);

                    _surveyFacade.UpdateSurveyResponse(surveyInfoModel,
                                                       responseId.ToString(),
                                                       form,
                                                       surveyAnswer,
                                                       false,
                                                       false,
                                                       0,
                                                       orgId,
                                                       userId,
                                                       userName);
                }
                catch (Exception ex)
                {
                    // do nothing so that processing
                    // can continue
                }
            }
            else
            {
                PageDigest[] pageDigestArray = metadataAccessor.GetPageDigests(surveyInfoModel.SurveyId);

                surveyAnswer.ResponseDetail = surveyResponseBuilder.CreateResponseDocument(responseContext, pageDigestArray);

                _requiredList = surveyResponseBuilder.RequiredList;
                SetSessionValue(UserSession.Key.RequiredList, surveyResponseBuilder.RequiredList);
                form.RequiredFieldsList = _requiredList;
            }

            ///////////////////////////// Execute - Record Before - End//////////////////////
            return(RedirectToAction(ViewActions.Index, ControllerNames.Survey, new { responseid = responseId, PageNumber = 1, surveyid = surveyInfoModel.SurveyId }));
        }
コード例 #20
0
        public ActionResult Index(string surveyId, string addNewFormId, string editForm, string cancel)
        {
            // Assign "editForm" parameter to a less confusing name.
            // editForm contains the responseId of the record being edited.
            string editResponseId = editForm;

            int    userId         = GetIntSessionValue(UserSession.Key.UserId);
            string userName       = GetStringSessionValue(UserSession.Key.UserName);
            bool   isMobileDevice = this.Request.Browser.IsMobileDevice;

            FormsAuthentication.SetAuthCookie("BeginSurvey", false);
            bool isEditMode = false;

            if (isMobileDevice == true)
            {
                isMobileDevice = Epi.Cloud.MVC.Utility.SurveyHelper.IsMobileDevice(this.Request.UserAgent.ToString());
            }
            bool isAndroid = this.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0;

            if (!string.IsNullOrEmpty(/*FromURL*/ cancel))
            {
                int pageNumber;
                int.TryParse(/*FromURL*/ cancel, out pageNumber);
                Dictionary <string, int> surveyPagesList = GetSessionValue <Dictionary <string, int> >(UserSession.Key.RelateButtonPageId);
                if (surveyPagesList != null)
                {
                    pageNumber = surveyPagesList[this.Request.Form["Parent_Response_Id"].ToString()];
                }

                return(RedirectToRoute(new { Controller = "Survey", Action = "Index", responseid = this.Request.Form["Parent_Response_Id"].ToString(), PageNumber = pageNumber }));
            }
            if (string.IsNullOrEmpty(/*FromURL*/ editResponseId) && string.IsNullOrEmpty(/*FromURL*/ addNewFormId) && !IsSessionValueNull(UserSession.Key.EditResponseId))
            {
                editResponseId = GetStringSessionValue(UserSession.Key.EditResponseId);
            }

            if (!string.IsNullOrEmpty(editResponseId))
            {
                if (IsSessionValueNull(UserSession.Key.RootResponseId))
                {
                    SetSessionValue(UserSession.Key.RootResponseId, editResponseId);
                }

                isEditMode = true;
                SetSessionValue(UserSession.Key.IsEditMode, isEditMode);

                SurveyAnswerDTO surveyAnswer = GetSurveyAnswer(editResponseId, GetStringSessionValue(UserSession.Key.RootFormId));
                if (!IsSessionValueNull(UserSession.Key.RecoverLastRecordVersion))
                {
                    surveyAnswer.RecoverLastRecordVersion = GetBoolSessionValue(UserSession.Key.RecoverLastRecordVersion);
                }
                //   string childRecordId = GetChildRecordId(surveyAnswer);
                //return RedirectToAction(ViewActions.Index, ControllerNames.Survey, new { responseid = surveyAnswer.ParentResponseId, PageNumber = 1, Edit = "Edit" });
                return(RedirectToAction(ViewActions.Index, ControllerNames.Survey, new { responseid = editResponseId, PageNumber = 1, Edit = "Edit" }));
            }

            //create the responseid
            Guid responseId = Guid.NewGuid();

            if (IsSessionValueNull(UserSession.Key.RootResponseId))
            {
                SetSessionValue(UserSession.Key.RootResponseId, responseId);
            }

            var rootResponseId = GetStringSessionValue(UserSession.Key.RootResponseId);

            TempData[TempDataKeys.ResponseId] = responseId.ToString();

            int orgId = GetIntSessionValue(UserSession.Key.CurrentOrgId);

            var responseContext = InitializeResponseContext(formId: /*FromURL*/ addNewFormId, responseId: responseId.ToString(), parentResponseId: this.Request.Form["Parent_Response_Id"].ToString(), isNewRecord: !isEditMode);

            // create the first survey response
            SurveyAnswerDTO          surveyAnswerDTO  = _surveyFacade.CreateSurveyAnswer(responseContext);
            List <FormsHierarchyDTO> formsHierarchy   = GetFormsHierarchy();
            SurveyInfoModel          surveyInfoModel  = GetSurveyInfo(surveyAnswerDTO.SurveyId, formsHierarchy);
            MetadataAccessor         metadataAccessor = surveyInfoModel as MetadataAccessor;

            // set the survey answer to be production or test
            surveyAnswerDTO.IsDraftMode = surveyInfoModel.IsDraftMode;

            MvcDynamicForms.Form form = _surveyFacade.GetSurveyFormData(surveyAnswerDTO.SurveyId, 1, surveyAnswerDTO, isMobileDevice, null, formsHierarchy, isAndroid);

            TempData[TempDataKeys.Width] = form.Width + 100;

            var    formDigest = metadataAccessor.GetFormDigest(surveyAnswerDTO.SurveyId);
            string checkcode  = formDigest.CheckCode;

            FormResponseDetail responseDetail = surveyAnswerDTO.ResponseDetail;

            form.FormCheckCodeObj = form.GetCheckCodeObj(MetadataAccessor.GetFieldDigests(surveyAnswerDTO.SurveyId), responseDetail, checkcode);

            ///////////////////////////// Execute - Record Before - start//////////////////////
            Dictionary <string, string> ContextDetailList = new Dictionary <string, string>();
            EnterRule             functionObject_B        = (EnterRule)form.FormCheckCodeObj.GetCommand("level=record&event=before&identifier=");
            SurveyResponseBuilder surveyResponseBuilder   = new SurveyResponseBuilder(_requiredList);

            if (functionObject_B != null && !functionObject_B.IsNull())
            {
                try
                {
                    PageDigest[] pageDigests = form.MetadataAccessor.GetCurrentFormPageDigests();
                    responseDetail = surveyResponseBuilder.CreateResponseDocument(responseContext, pageDigests);

                    SetSessionValue(UserSession.Key.RequiredList, surveyResponseBuilder.RequiredList);
                    _requiredList           = surveyResponseBuilder.RequiredList;
                    form.RequiredFieldsList = _requiredList;
                    functionObject_B.Context.HiddenFieldList      = form.HiddenFieldsList;
                    functionObject_B.Context.HighlightedFieldList = form.HighlightedFieldsList;
                    functionObject_B.Context.DisabledFieldList    = form.DisabledFieldsList;
                    functionObject_B.Context.RequiredFieldList    = form.RequiredFieldsList;

                    functionObject_B.Execute();

                    // field list
                    form.HiddenFieldsList      = functionObject_B.Context.HiddenFieldList;
                    form.HighlightedFieldsList = functionObject_B.Context.HighlightedFieldList;
                    form.DisabledFieldsList    = functionObject_B.Context.DisabledFieldList;
                    form.RequiredFieldsList    = functionObject_B.Context.RequiredFieldList;


                    ContextDetailList = SurveyHelper.GetContextDetailList(functionObject_B);
                    form = SurveyHelper.UpdateControlsValuesFromContext(form, ContextDetailList);

                    _surveyFacade.UpdateSurveyResponse(surveyInfoModel, responseId.ToString(), form, surveyAnswerDTO, false, false, 0, orgId, userId, userName);
                }
                catch (Exception ex)
                {
                    // do nothing so that processing
                    // can continue
                }
            }
            else
            {
                PageDigest[] pageDigestArray = form.MetadataAccessor.GetCurrentFormPageDigests();// metadataAccessor.GetPageDigests(surveyInfoModel.SurveyId);

                surveyAnswerDTO.ResponseDetail = surveyResponseBuilder.CreateResponseDocument(responseContext, pageDigestArray);

                _requiredList = surveyResponseBuilder.RequiredList;
                SetSessionValue(UserSession.Key.RequiredList, _requiredList);
                form.RequiredFieldsList = _requiredList;
                _surveyFacade.UpdateSurveyResponse(surveyInfoModel, surveyAnswerDTO.ResponseId, form, surveyAnswerDTO, false, false, 0, orgId, userId, userName);
            }

            surveyAnswerDTO = (SurveyAnswerDTO)formsHierarchy.SelectMany(x => x.ResponseIds).FirstOrDefault(z => z.ResponseId == surveyAnswerDTO.ResponseId);

            ///////////////////////////// Execute - Record Before - End//////////////////////
            return(RedirectToAction(ViewActions.Index, ControllerNames.Survey, new { responseid = responseId, PageNumber = 1 }));
        }
コード例 #21
0
        public ActionResult Respond(string shortPath)
        {
            var thisForm = _mvcForms.Forms.FirstOrDefault(form => form.ShortPath == shortPath);

            if (thisForm != null)
            {
                ViewData["FormName"] = thisForm.FormName;
                //Only retrieve non-hidden fields
                var formFields =
                    _mvcForms.FormFields.Where(formitems => formitems.FormUid == thisForm.Uid & formitems.IsHidden == 0).OrderBy(
                        formitem => formitem.SortOrder);
                //CUSTOM, reference http://mvcdynamicforms.codeplex.com/
                //Using the MVC Dynamic Form project, build a form comprised of fields tied to the form items used by this custom form
                //TODO: Consider switching to conditionally build views using partial views with the KnockOutJS library for custom validation
                if (formFields.Count() > 0)
                {
                    var dynamicFormFields = new List <Field>();
                    foreach (var formField in formFields)
                    {
                        var field         = formField;
                        var thisFieldType =
                            _mvcForms.FormFieldTypes.Single(fieldtype => fieldtype.Uid == field.FormFieldTypeUid);
                        switch (thisFieldType.FieldType)
                        {
                        case ("Literal"):
                            dynamicFormFields.Add(new TextBox()
                            {
                                Key      = field.Uid.ToString(),
                                Template =
                                    String.Format("<p>{0}</p>",
                                                  field.LiteralText.KillHtml()),
                                DisplayOrder = field.SortOrder
                            });
                            break;

                        case ("TextBox"):
                            dynamicFormFields.Add(new TextBox()
                            {
                                Key           = field.Uid.ToString(),
                                ResponseTitle = field.FormFieldName,
                                Prompt        =
                                    (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                                      ? field.FormFieldPrompt
                                                                      : null,
                                DisplayOrder    = field.SortOrder,
                                Required        = Convert.ToBoolean(field.IsRequired),
                                RequiredMessage =
                                    Convert.ToBoolean(field.IsRequired)
                                                                      ? thisFieldType.ErrorMsgRequired.Replace(
                                        "%FormFieldName%", field.FormFieldName)
                                                                      : string.Empty,
                                RegularExpression =
                                    (!string.IsNullOrEmpty(thisFieldType.RegExDefault))
                                                                      ? thisFieldType.RegExDefault
                                                                      : string.Empty,
                                RegexMessage =
                                    (!string.IsNullOrEmpty(thisFieldType.RegExDefault))
                                                                      ? thisFieldType.ErrorMsgRegEx.Replace(
                                        "%FormFieldName%", field.FormFieldName)
                                                                      : string.Empty
                            });
                            break;

                        case ("TextArea"):
                            var newTextArea = new TextArea()
                            {
                                Key           = field.Uid.ToString(),
                                ResponseTitle = field.FormFieldName,
                                Prompt        =
                                    (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                                  ? field.FormFieldPrompt
                                                                  : null,
                                DisplayOrder    = field.SortOrder,
                                Required        = Convert.ToBoolean(field.IsRequired),
                                RequiredMessage =
                                    Convert.ToBoolean(field.IsRequired)
                                                                  ? thisFieldType.ErrorMsgRequired.Replace(
                                        "%FormFieldName%", field.FormFieldName)
                                                                  : string.Empty,
                                RegularExpression =
                                    (!string.IsNullOrEmpty(thisFieldType.RegExDefault))
                                                                  ? thisFieldType.RegExDefault
                                                                  : string.Empty,
                                RegexMessage =
                                    (!string.IsNullOrEmpty(thisFieldType.RegExDefault))
                                                                  ? thisFieldType.ErrorMsgRegEx.Replace(
                                        "%FormFieldName%",
                                        field.FormFieldName)
                                                                  : string.Empty
                            };
                            int number;
                            if (Int32.TryParse(field.Rows.ToString(), out number))
                            {
                                newTextArea.InputHtmlAttributes.Add("rows", field.Rows.ToString());
                            }
                            if (Int32.TryParse(field.Cols.ToString(), out number))
                            {
                                newTextArea.InputHtmlAttributes.Add("cols", field.Cols.ToString());
                            }
                            dynamicFormFields.Add(newTextArea);
                            break;

                        case ("SelectList"):
                            var newSelectList = new Select
                            {
                                Key           = field.Uid.ToString(),
                                ResponseTitle = field.FormFieldName,
                                Prompt        =
                                    (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                                    ? field.FormFieldPrompt
                                                                    : null,
                                DisplayOrder    = field.SortOrder,
                                Required        = Convert.ToBoolean(field.IsRequired),
                                RequiredMessage =
                                    Convert.ToBoolean(field.IsRequired)
                                                                    ? thisFieldType.ErrorMsgRequired.Replace(
                                        "%FormFieldName%", field.FormFieldName)
                                                                    : string.Empty
                            };
                            if (Convert.ToBoolean(field.IsMultipleSelect))
                            {
                                newSelectList.MultipleSelection = true;
                                newSelectList.Size = Convert.ToInt32(field.ListSize);
                                newSelectList.CommaDelimitedChoices = field.Options.Replace(Environment.NewLine, ",");
                            }
                            else
                            {
                                newSelectList.ShowEmptyOption = Convert.ToBoolean(field.IsEmptyOption);
                                newSelectList.EmptyOption     = (Convert.ToBoolean(field.IsEmptyOption))
                                                                    ? field.EmptyOption
                                                                    : null;
                                newSelectList.CommaDelimitedChoices = field.Options.Replace(Environment.NewLine, ",");
                            }
                            dynamicFormFields.Add(newSelectList);
                            break;

                        case ("CheckBox"):
                            var newCheckBox = new CheckBox
                            {
                                Key           = field.Uid.ToString(),
                                ResponseTitle = field.FormFieldName,
                                Prompt        =
                                    (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                                  ? field.FormFieldPrompt
                                                                  : null,
                                DisplayOrder    = field.SortOrder,
                                Required        = Convert.ToBoolean(field.IsRequired),
                                RequiredMessage =
                                    Convert.ToBoolean(field.IsRequired)
                                                                  ? thisFieldType.ErrorMsgRequired.Replace(
                                        "%FormFieldName%", field.FormFieldName)
                                                                  : string.Empty
                            };
                            dynamicFormFields.Add(newCheckBox);
                            break;

                        case ("CheckBoxList"):
                            var newCheckBoxList = new CheckBoxList
                            {
                                Key           = field.Uid.ToString(),
                                ResponseTitle = field.FormFieldName,
                                Prompt        =
                                    (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                                      ? field.FormFieldPrompt
                                                                      : null,
                                DisplayOrder    = field.SortOrder,
                                Required        = Convert.ToBoolean(field.IsRequired),
                                RequiredMessage =
                                    Convert.ToBoolean(field.IsRequired)
                                                                      ? thisFieldType.ErrorMsgRequired.Replace(
                                        "%FormFieldName%", field.FormFieldName)
                                                                      : string.Empty,
                                CommaDelimitedChoices = field.Options.Replace(Environment.NewLine, ","),
                                Orientation           = (field.Orientation == "vertical") ? Orientation.Vertical : Orientation.Horizontal
                            };
                            dynamicFormFields.Add(newCheckBoxList);
                            break;

                        case ("RadioList"):
                            var newRadioList = new RadioList
                            {
                                Key           = field.Uid.ToString(),
                                ResponseTitle = field.FormFieldName,
                                Prompt        =
                                    (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                                      ? field.FormFieldPrompt
                                                                      : null,
                                DisplayOrder    = field.SortOrder,
                                Required        = Convert.ToBoolean(field.IsRequired),
                                RequiredMessage =
                                    Convert.ToBoolean(field.IsRequired)
                                                                      ? thisFieldType.ErrorMsgRequired.Replace(
                                        "%FormFieldName%", field.FormFieldName)
                                                                      : string.Empty,
                                CommaDelimitedChoices = field.Options.Replace(Environment.NewLine, ","),
                                Orientation           = (field.Orientation == "vertical") ? Orientation.Vertical : Orientation.Horizontal
                            };
                            dynamicFormFields.Add(newRadioList);
                            break;

                        case ("FileUpload"):
                            var newFileUpload = new FileUpload
                            {
                                Key           = field.Uid.ToString(),
                                ResponseTitle = field.FormFieldName,
                                Prompt        =
                                    (!string.IsNullOrEmpty(field.FormFieldPrompt))
                                                                    ? field.FormFieldPrompt
                                                                    : null,
                                InvalidExtensionError = field.ErrorExtensions,
                                Required        = Convert.ToBoolean(field.IsRequired),
                                RequiredMessage =
                                    Convert.ToBoolean(field.IsRequired)
                                                                    ? thisFieldType.ErrorMsgRequired.Replace(
                                        "%FormFieldName%", field.FormFieldName)
                                                                    : string.Empty,
                                DisplayOrder = field.SortOrder,
                            };
                            if (!string.IsNullOrEmpty(field.ValidExtensions))
                            {
                                newFileUpload.ValidExtensions = "." +
                                                                field.ValidExtensions.Replace(Environment.NewLine,
                                                                                              ",.");
                            }
                            var user = Membership.GetUser(User.Identity.Name);
                            UserKey = user.ProviderUserKey.ToString();
                            newFileUpload.Validated += FileValidated;
                            newFileUpload.Posted    += FilePosted;
                            dynamicFormFields.Add(newFileUpload);
                            break;
                        }
                    }
                    var dynamicForm = new MvcDynamicForms.Form();
                    dynamicForm.AddFields(dynamicFormFields.ToArray());
                    dynamicForm.Serialize = true;
                    ViewData["FormUid"]   = thisForm.Uid;
                    return(View(dynamicForm));
                }
            }
            return(RedirectToAction("Index", "Home"));
        }
コード例 #22
0
        //public SurveyAnswerDTO CreateSurveyAnswer(string surveyId, string responseId, int UserId, bool IsChild = false, string RelateResponseId = "", bool IsEditMode = false , int CurrentOrgId = -1)
        //{

        //    return SurveyHelper.CreateSurveyResponse(surveyId, responseId, _surveyAnswerRequest, _surveyAnswerDTO, _surveyResponseXML, _iSurveyAnswerRepository, UserId, IsChild, RelateResponseId, IsEditMode, CurrentOrgId);
        //}
        public void UpdateSurveyResponse(SurveyInfoModel surveyInfoModel, string responseId, MvcDynamicForms.Form form, Epi.Web.Common.DTO.SurveyAnswerDTO surveyAnswerDTO, bool IsSubmited, bool IsSaved, int PageNumber, int UserId)
        {
            // 1 Get the record for the current survey response
            // 2 update the current survey response and save the response

            //// 1 Get the record for the current survey response
            SurveyAnswerResponse surveyAnswerResponse = new SurveyAnswerResponse();//GetSurveyAnswerResponse(responseId, surveyInfoModel.SurveyId.ToString());

            surveyAnswerResponse.SurveyResponseList.Add(surveyAnswerDTO);
            ///2 Update the current survey response and save it

            SurveyHelper.UpdateSurveyResponse(surveyInfoModel, form, _surveyAnswerRequest, _surveyResponseXML, _iSurveyAnswerRepository, surveyAnswerResponse, responseId, surveyAnswerDTO, IsSubmited, IsSaved, PageNumber, UserId);
        }
コード例 #23
0
        public MvcDynamicForms.Form GetSurveyFormData(
            string surveyId,
            int pageNumber,
            Epi.Web.Common.DTO.SurveyAnswerDTO surveyAnswerDTO,
            bool IsMobileDevice,
            List <SurveyAnswerDTO> _SurveyAnswerDTOList = null,
            List <Epi.Web.Common.DTO.FormsHierarchyDTO> FormsHierarchyDTOList = null, bool IsAndroid = false, bool GetSourceTables = true)
        {
            List <SurveyInfoDTO> List = new List <SurveyInfoDTO>();


            //Get the SurveyInfoDTO
            Epi.Web.Common.DTO.SurveyInfoDTO surveyInfoDTO;
            if (FormsHierarchyDTOList == null || FormsHierarchyDTOList.Count() == 0)
            {
                surveyInfoDTO = SurveyHelper.GetSurveyInfoDTO(_surveyInfoRequest, _iSurveyInfoRepository, surveyId);//Pain Point 5s
                if (_SurveyAnswerDTOList != null)
                {
                    foreach (var item in _SurveyAnswerDTOList)
                    {
                        Epi.Web.Common.Message.SurveyInfoRequest request = new SurveyInfoRequest();
                        request.Criteria.SurveyIdList.Add(item.SurveyId);
                        Epi.Web.Common.DTO.SurveyInfoDTO _SurveyInfoDTO = SurveyHelper.GetSurveyInfoDTO(request, _iSurveyInfoRepository, item.SurveyId);
                        List.Add(_SurveyInfoDTO);
                    }
                }
            }

            else
            {
                //  var SurveyInfoDTO = FormsHierarchyDTOList.First(x => x.FormId == surveyAnswerDTO.SurveyId);

                var SurveyInfoDTO = FormsHierarchyDTOList.First(x => x.FormId == surveyId);
                surveyInfoDTO = SurveyInfoDTO.SurveyInfo;



                _SurveyAnswerDTOList = new List <SurveyAnswerDTO>();
                _SurveyAnswerDTOList.Add(surveyAnswerDTO);
                var DTOList = FormsHierarchyDTOList.Where(x => x.ResponseIds.Count() > 0);
                foreach (var item in DTOList)
                {
                    //if (item.ResponseIds.Count() > 0)
                    //{
                    var DTO = item.ResponseIds.FirstOrDefault(z => z.ResponseId == surveyAnswerDTO.RelateParentId);
                    if (DTO != null && !_SurveyAnswerDTOList.Contains(DTO))
                    {
                        _SurveyAnswerDTOList.Add(DTO);
                    }

                    //}
                }

                foreach (var item in _SurveyAnswerDTOList)
                {
                    var _SurveyInfoDTO = FormsHierarchyDTOList.FirstOrDefault(x => x.FormId == item.SurveyId);
                    List.Add(_SurveyInfoDTO.SurveyInfo);
                }
            }
            MvcDynamicForms.Form form     = null;
            SourceTablesResponse Response = new SourceTablesResponse();
            SourceTablesRequest  Request  = new Common.Message.SourceTablesRequest();

            if (GetSourceTables)
            {
                //if (IsMobileDevice)
                //{
                if (FormsHierarchyDTOList != null && FormsHierarchyDTOList.Count() > 0)
                {
                    Request.SurveyId = FormsHierarchyDTOList[0].FormId.ToString();
                }
                else
                {
                    if (string.IsNullOrEmpty(surveyAnswerDTO.ParentRecordId))
                    {
                        Request.SurveyId = surveyId;
                    }
                    else
                    {
                        Request.SurveyId = surveyAnswerDTO.ParentRecordId;
                    }
                }
                Response = _iSurveyInfoRepository.GetSourceTables(Request);//Pain Point
                //}
                //else
                //{
                //    Request.SurveyId = FormsHierarchyDTOList[0].FormId.ToString();
                //    Response = _iSurveyInfoRepository.GetSourceTables(Request);//Pain Point

                //}
            }
            //if (IsMobileDevice)
            //{
            //    Epi.Web.MVC.Utility.MobileFormProvider.SurveyInfoList = List;
            //    Epi.Web.MVC.Utility.MobileFormProvider.SurveyAnswerList = _SurveyAnswerDTOList;
            //    form = Epi.Web.MVC.Utility.MobileFormProvider.GetForm(surveyInfoDTO, pageNumber, surveyAnswerDTO, IsAndroid, Response.List);
            //}
            //else
            //{
            Epi.Web.MVC.Utility.FormProvider.SurveyInfoList   = List;
            Epi.Web.MVC.Utility.FormProvider.SurveyAnswerList = _SurveyAnswerDTOList;
            form = Epi.Web.MVC.Utility.FormProvider.GetForm(surveyInfoDTO, pageNumber, surveyAnswerDTO, IsMobileDevice, IsAndroid, Response.List);
            //}
            return(form);
        }
コード例 #24
0
        public static void UpdateSurveyResponse(SurveyInfoModel surveyInfoModel, MvcDynamicForms.Form form, SurveyAnswerRequest surveyAnswerRequest,
                                                SurveyResponseXML surveyResponseXML,
                                                ISurveyAnswerRepository iSurveyAnswerRepository,
                                                SurveyAnswerResponse surveyAnswerResponse, string responseId, Epi.Web.Common.DTO.SurveyAnswerDTO surveyAnswerDTO, bool IsSubmited, bool IsSaved, int PageNumber, int UserId = -1)
        {
            // 1 Get the record for the current survey response
            // 2 update the current survey response
            // 3 save the current survey response
            if (!IsSubmited)
            {
                // 2 a. update the current survey answer request
                surveyAnswerRequest.SurveyAnswerList = surveyAnswerResponse.SurveyResponseList;

                surveyResponseXML.Add(form);
                XDocument SavedXml = XDocument.Parse(surveyAnswerDTO.XML);
                bool      AddRoot  = false;
                if (SavedXml.Root.FirstAttribute.Value.ToString() == "0")
                {
                    AddRoot = true;
                }
                surveyAnswerRequest.SurveyAnswerList[0].XML = surveyResponseXML.CreateResponseXml(surveyInfoModel.SurveyId, AddRoot, form.CurrentPage, form.PageId).InnerXml;
                // 2 b. save the current survey response
                surveyAnswerRequest.Action = Epi.Web.MVC.Constants.Constant.UPDATE;  //"Update";
                //Append to Response Xml

                XDocument CurrentPageResponseXml = XDocument.Parse(surveyAnswerRequest.SurveyAnswerList[0].XML);
                if (SavedXml.Root.FirstAttribute.Value.ToString() != "0")
                {
                    surveyAnswerRequest.SurveyAnswerList[0].XML = MergeXml(SavedXml, CurrentPageResponseXml, form.CurrentPage).ToString();
                }
            }
            ////Update page number before saving response XML

            XDocument Xdoc = XDocument.Parse(surveyAnswerRequest.SurveyAnswerList[0].XML);

            if (PageNumber != 0)
            {
                Xdoc.Root.Attribute("LastPageVisited").Value = PageNumber.ToString();
            }
            ////Update Hidden Fields List before saving response XML
            if (form.HiddenFieldsList != null)
            {
                Xdoc.Root.Attribute("HiddenFieldsList").Value = "";
                Xdoc.Root.Attribute("HiddenFieldsList").Value = form.HiddenFieldsList.ToString();
            }
            if (form.HighlightedFieldsList != null)
            {
                Xdoc.Root.Attribute("HighlightedFieldsList").Value = "";
                Xdoc.Root.Attribute("HighlightedFieldsList").Value = form.HighlightedFieldsList.ToString();
            }
            if (form.DisabledFieldsList != null)
            {
                Xdoc.Root.Attribute("DisabledFieldsList").Value = "";
                Xdoc.Root.Attribute("DisabledFieldsList").Value = form.DisabledFieldsList.ToString();
            }
            if (form.RequiredFieldsList != null)
            {
                Xdoc.Root.Attribute("RequiredFieldsList").Value = "";
                Xdoc.Root.Attribute("RequiredFieldsList").Value = form.RequiredFieldsList.ToString();
            }
            if (surveyAnswerDTO.RecordBeforeFlag)
            {
                Xdoc.Root.Attribute("RecordBeforeFlag").Value = "True";
            }
            //  AssignList
            List <KeyValuePair <string, String> > FieldsList = new List <KeyValuePair <string, string> >();

            FieldsList = GetHiddenFieldsList(form);
            if (FieldsList != null)
            {
                IEnumerable <XElement> XElementList = Xdoc.XPathSelectElements("SurveyResponse/Page/ResponseDetail");
                for (var i = 0; i < FieldsList.Count; i++)
                {
                    foreach (XElement Element in XElementList)
                    {
                        if (Element.Attribute("QuestionName").Value.ToString().Equals(FieldsList[i].Key, StringComparison.OrdinalIgnoreCase))
                        {
                            if (FieldsList[i].Value != null)
                            {
                                Element.Value = FieldsList[i].Value;
                            }
                            break;
                        }
                    }
                }
            }



            ////Update survey response Status
            if (IsSubmited)
            {
                surveyAnswerRequest.SurveyAnswerList[0].Status        = 3;
                surveyAnswerRequest.SurveyAnswerList[0].DateCompleted = DateTime.Now;
                surveyAnswerRequest.SurveyAnswerList[0].Json          = surveyAnswerResponse.SurveyResponseList[0].Json;
                // Xdoc.Root.Attribute("LastPageVisited").Remove();
                // Xdoc.Root.Attribute("HiddenFieldsList").Remove();
                // Xdoc.Root.Attribute("HighlightedFieldsList").Remove();
                //Xdoc.Root.Attribute("DisabledFieldsList").Remove();
                //Xdoc.Root.Attribute("RequiredFieldsList").Remove();
                //   Xdoc.Root.Attribute("RecordBeforeFlag").Remove();
                //RemovePageNumAtt(Xdoc);
            }
            if (IsSaved)
            {
                surveyAnswerRequest.SurveyAnswerList[0].Status = 2;
            }
            surveyAnswerRequest.SurveyAnswerList[0].XML = Xdoc.ToString();
            /////Update Survey Mode ////////////////////
            surveyAnswerRequest.SurveyAnswerList[0].IsDraftMode = surveyAnswerDTO.IsDraftMode;
            iSurveyAnswerRepository.SaveSurveyAnswer(surveyAnswerRequest);
        }
コード例 #25
0
        /// <summary>
        /// get the survey form data
        /// </summary>
        /// <param name="surveyId"></param>
        /// <param name="pageNumber"></param>
        /// <param name="surveyAnswerDTO"></param>
        /// <param name="isMobileDevice"></param>
        /// <param name="surveyAnswerDTOList"></param>
        /// <param name="formsHierarchyDTOList"></param>
        /// <param name="isAndroid"></param>
        /// <returns></returns>
        public MvcDynamicForms.Form GetSurveyFormData(
            string surveyId,
            int pageNumber,
            SurveyAnswerDTO surveyAnswerDTO,
            bool isMobileDevice,
            List <SurveyAnswerDTO> surveyAnswerDTOList     = null,
            List <FormsHierarchyDTO> formsHierarchyDTOList = null,
            bool isAndroid = false)
        {
            List <SurveyInfoDTO> surveyInfoDTOList = new List <SurveyInfoDTO>();

            //Get the SurveyInfoDTO
            SurveyInfoDTO surveyInfoDTO;

            if (formsHierarchyDTOList == null)
            {
                surveyInfoDTO = SurveyHelper.GetSurveyInfoDTO(_surveyInfoRequest, _surveyInfoService, surveyId);

                if (surveyAnswerDTOList != null)
                {
                    foreach (var item in surveyAnswerDTOList)
                    {
                        Epi.Cloud.Common.Message.SurveyInfoRequest request = new SurveyInfoRequest();
                        request.Criteria.SurveyIdList.Add(item.SurveyId);
                        SurveyInfoDTO surveyInfoDTO2 = SurveyHelper.GetSurveyInfoDTO(request, _surveyInfoService, item.SurveyId);
                        surveyInfoDTOList.Add(surveyInfoDTO2);
                    }
                }
            }
            else
            {
                var SurveyInfoDTO = formsHierarchyDTOList.First(x => x.FormId == (surveyAnswerDTO != null ? surveyAnswerDTO.SurveyId : surveyId));
                surveyInfoDTO = SurveyInfoDTO.SurveyInfo;

                surveyAnswerDTOList = new List <SurveyAnswerDTO>();
                surveyAnswerDTOList.Add(surveyAnswerDTO);

                foreach (var item in formsHierarchyDTOList)
                {
                    if (item.ResponseIds.Count() > 0)
                    {
                        var DTO = item.ResponseIds.FirstOrDefault(z => z.ResponseId == surveyAnswerDTO.ParentResponseId);
                        if (DTO != null && !surveyAnswerDTOList.Contains(DTO))
                        {
                            surveyAnswerDTOList.Add(DTO);
                        }
                    }
                }

                foreach (var item in surveyAnswerDTOList)
                {
                    if (item != null)
                    {
                        var formsHierarchyDTO = formsHierarchyDTOList.FirstOrDefault(x => x.FormId == item.SurveyId);
                        surveyInfoDTOList.Add(formsHierarchyDTO.SurveyInfo);
                    }
                }
            }

            var formProvider = isMobileDevice ? new MobileFormProvider(surveyId) : new FormProvider(surveyId);

            MvcDynamicForms.Form form = formProvider.GetForm(surveyInfoDTO, pageNumber, surveyAnswerDTO, surveyAnswerDTOList, surveyInfoDTOList, isAndroid);

            return(form);
        }
コード例 #26
0
 public void UpdateSurveyResponse(SurveyInfoModel surveyInfoModel, string responseId, MvcDynamicForms.Form form)
 {
     throw new NotImplementedException();
 }