Beispiel #1
0
        public FormsHierarchyResponse GetFormsHierarchy(FormsHierarchyRequest formsHierarchyRequest)
        {
            try
            {
                var rootFormId           = formsHierarchyRequest.SurveyInfo.FormId;
                var metadatAccessor      = new MetadataAccessor();
                var viewId               = metadatAccessor.GetFormDigest(rootFormId).ViewId;
                var formIdHierarchy      = metadatAccessor.GetFormIdHierarchyByRootFormId(rootFormId);
                var formDigests          = metadatAccessor.FormDigests.Where(fd => formIdHierarchy.Contains(fd.FormId)).ToArray();
                var formInfoDTO          = formsHierarchyRequest.SurveyInfo;
                var surveyInfoBO         = formInfoDTO.ToSurveyInfoBO(viewId);
                var formsHierarchyBOList = formDigests.ToFormsHierarchyBOList(surveyInfoBO);

                FormsHierarchyResponse formsHierarchyResponse = new FormsHierarchyResponse();

                List <SurveyResponseBO> allResponsesIDsList = new List <SurveyResponseBO>();

                //1- Get All form  ID's
                List <FormsHierarchyBO> relatedFormIDsList = _surveyInfoService.GetFormsHierarchyIdsByRootFormId(rootFormId);

                //2- Get all Responses ID's
                Epi.Cloud.DataEntryServices.SurveyResponseProvider surveyResponseProvider = new SurveyResponseProvider(_surveyResponseDao);
                if (!string.IsNullOrEmpty(formsHierarchyRequest.SurveyResponseInfo.ResponseId))
                {
                    IResponseContext responseContext = formsHierarchyRequest.SurveyResponseInfo.ResponseContext.ResolveMetadataDependencies();
                    allResponsesIDsList = surveyResponseProvider.GetResponsesHierarchyIdsByRootId(responseContext);
                }
                else
                {
                    allResponsesIDsList = null;
                }

                //3 Combining the lists.
                List <FormsHierarchyBO> combinedList = CombineLists(relatedFormIDsList, allResponsesIDsList);
                formsHierarchyResponse.FormsHierarchy = combinedList.ToFormsHierarchyDTOList();

                return(formsHierarchyResponse);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Beispiel #2
0
        public SurveyAnswerResponse SetSurveyAnswer(SurveyAnswerRequest surveyAnswerRequest)
        {
            SurveyAnswerResponse response = new SurveyAnswerResponse(surveyAnswerRequest.RequestId);

            var responseContext = surveyAnswerRequest.ResponseContext;

            // Transform SurveyResponse data transfer object to SurveyResponse business object
            SurveyResponseBO surveyResponseBO = surveyAnswerRequest.SurveyAnswerList[0].ToSurveyResponseBO();

            surveyResponseBO.IsNewRecord = surveyAnswerRequest.IsNewRecord;

            if (surveyAnswerRequest.Criteria.UserOrganizationId > 0)
            {
                surveyResponseBO.UserOrgId    = surveyAnswerRequest.Criteria.UserOrganizationId;
                surveyResponseBO.CurrentOrgId = surveyAnswerRequest.Criteria.UserOrganizationId;
            }

            if (surveyAnswerRequest.Criteria.UserId > 0)
            {
                surveyResponseBO.UserId = surveyAnswerRequest.Criteria.UserId;
            }
            if (!string.IsNullOrWhiteSpace(surveyAnswerRequest.Criteria.UserName))
            {
                surveyResponseBO.UserName = surveyAnswerRequest.Criteria.UserName;
            }


            // Validate SurveyResponse business rules

            if (!surveyAnswerRequest.Action.Equals(RequestAction.Delete, StringComparison.OrdinalIgnoreCase))
            {
                //if (!SurveyResponse.Validate())
                //{

                //    foreach (string error in SurveyResponse.ValidationErrors)
                //        response.Message += error + Environment.NewLine;

                //    return response;
                //}
            }

            if (surveyAnswerRequest.Action.Equals(RequestAction.Create, StringComparison.OrdinalIgnoreCase))
            {
                _surveyResponseProvider.InsertSurveyResponse(surveyResponseBO);
                response.SurveyResponseList.Add(surveyResponseBO.ToSurveyAnswerDTO());
            }
            else if (surveyAnswerRequest.Action.Equals(RequestAction.CreateMulti, StringComparison.OrdinalIgnoreCase))
            {
                if (surveyAnswerRequest.SurveyAnswerList[0].ParentResponseId != null)
                {
                    var parentResponseId = surveyAnswerRequest.SurveyAnswerList[0].ParentResponseId;
                    var viewId           = surveyAnswerRequest.SurveyAnswerList[0].ViewId;
                    var metadataAccessor = new MetadataAccessor();
                    var formId           = metadataAccessor.GetFormIdByViewId(viewId);
                    var formName         = metadataAccessor.GetFormName(formId);
                    responseContext = surveyAnswerRequest.SurveyAnswerList[0].CloneResponseContext();
                    List <SurveyResponseBO> surveyResponseBOList = _surveyResponseProvider.GetResponsesHierarchyIdsByRootId(responseContext); //formId, parentResponseId);

                    //if (!surveyAnswerRequest.SurveyAnswerList[0].RecoverLastRecordVersion)
                    //// if we are not keeping the version of xml found currently in the SurveyResponse table (meaning getting the original copy form the ResponseXml table)
                    //{
                    //    //check if any orphan records exists
                    //    foreach (var item in _surveyResponseBOList)
                    //    {
                    //        if (item.ResponseId != null)
                    //        {
                    //            SurveyResponseBO SurveyResponseBO = _surveyResponseProvider.GetResponse(item.ResponseId);
                    //            // before we delete the temp version we need to move it the SurveResponse table

                    //            if (!string.IsNullOrEmpty(SurveyResponseBO.ResponseId))
                    //            {
                    //                SurveyResponseBO.UserId = surveyAnswerRequest.Criteria.UserId;
                    //                ResponseBO responseBO = new ResponseBO();
                    //                responseBO.ResponseId = SurveyResponseBO.ResponseId;
                    //                // During the delete process below:
                    //                //  1) Delete the record from ResponseXml table.
                    //                //  2) Update Record status in the SurveyResponse table which fires database triggers.
                    //                _surveyResponseProvider.DeleteResponse(responseBO);
                    //                _surveyResponseProvider.UpdateRecordStatus(responseBO.ResponseId.ToString(), 2);

                    //                //This will handle the status update and the swapping of the Xml
                    //                // but for this scenario I will keep the status unchanged
                    //                // Implementation.DeleteSurveyResponseInEditMode(SurveyResponseBO);
                    //            }
                    //        }
                    //    }

                    //    _surveyResponseBOList = _surveyResponseProvider.GetResponsesHierarchyIdsByRootId(surveyAnswerRequest.SurveyAnswerList[0].ParentResponseId);
                    //    // Inserting a temp xml to the ResponseXml table
                    //    response.SurveyResponseList = _surveyResponseProvider.InsertSurveyResponse(_surveyResponseBOList, surveyAnswerRequest.Criteria.UserId).ToSurveyAnswerDTOList();
                    //}
                    //else
                    {
                        // load the version curently found the SurveyResponse table

                        response.SurveyResponseList = surveyResponseBOList.ToSurveyAnswerDTOList();
                    }
                }
            }
            else if (surveyAnswerRequest.Action.Equals(RequestAction.Update, StringComparison.OrdinalIgnoreCase))
            {
                _surveyResponseProvider.UpdateSurveyResponse(surveyResponseBO);
                response.SurveyResponseList.Add(surveyResponseBO.ToSurveyAnswerDTO());
            }

            else if (surveyAnswerRequest.Action.Equals(RequestAction.CreateChild, StringComparison.OrdinalIgnoreCase))
            {
                SurveyInfoBO surveyInfoBO = _surveyInfoService.GetParentInfoByChildFormId(surveyResponseBO.FormId);

                _surveyResponseProvider.InsertChildSurveyResponse(surveyResponseBO, surveyInfoBO, surveyAnswerRequest.SurveyAnswerList[0].ParentResponseId);
                response.SurveyResponseList.Add(surveyResponseBO.ToSurveyAnswerDTO());

                List <SurveyResponseBO> List = new List <SurveyResponseBO>();
                List.Add(surveyResponseBO);
                _surveyResponseProvider.InsertSurveyResponse(List, surveyAnswerRequest.Criteria.UserId, true);
            }
            else if (surveyAnswerRequest.Action.Equals(RequestAction.UpdateMulti, StringComparison.OrdinalIgnoreCase))
            {
                throw new NotImplementedException(RequestAction.UpdateMulti);
            }
            else if (surveyAnswerRequest.Action.Equals(RequestAction.Delete, StringComparison.OrdinalIgnoreCase))
            {
                try
                {
                    foreach (var item in surveyAnswerRequest.SurveyAnswerList)
                    {
                        try
                        {
                            _surveyResponseProvider.UpdateRecordStatus(item, RecordStatus.Deleted, RecordStatusChangeReason.DeleteResponse);
                        }
                        catch
                        {
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("DeleteResponse: " + ex.ToString());
                }
            }
            else if (surveyAnswerRequest.Action.Equals(RequestAction.DontSave, StringComparison.OrdinalIgnoreCase))
            {
                try
                {
                    foreach (var item in surveyAnswerRequest.SurveyAnswerList)
                    {
                        try
                        {
                            _surveyResponseProvider.UpdateRecordStatus(item, RecordStatus.RecoverLastRecordVersion, RecordStatusChangeReason.DontSave);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("DontSave: " + ex.ToString());
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("DeleteResponse: " + ex.ToString());
                }
            }
            else if (surveyAnswerRequest.Action.Equals(RequestAction.DeleteResponse, StringComparison.OrdinalIgnoreCase))
            {
                try
                {
                    foreach (var item in surveyAnswerRequest.SurveyAnswerList)
                    {
                        try
                        {
                            _surveyResponseProvider.UpdateRecordStatus(item, RecordStatus.Saved, RecordStatusChangeReason.DeleteResponse);
                        }
                        catch
                        {
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("DeleteResponse: " + ex.ToString());
                }
            }

            return(response);
        }