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; } }
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); }