public void SaveDefaultAnswerType(FormCollection formData) { string answer_type_id = formData["list_of_answers"]; int question_id = 59; //string default_sel_ans_types = formData["default_selected_ans_types"]; //first lets check if user submitted None as a default answer type if (String.IsNullOrEmpty(answer_type_id)) { OBS_QUEST_ANS_TYPES oBS_QUEST_ANS_TYPES = new OBS_QUEST_ANS_TYPES(); try { oBS_QUEST_ANS_TYPES = db.OBS_QUEST_ANS_TYPES.Single(item => item.obs_question_id == question_id && item.obs_qat_default_ans_type_yn == "Y"); oBS_QUEST_ANS_TYPES.obs_qat_default_ans_type_yn = "N"; db.SaveChanges(); } catch { } }//end if (String.IsNullOrEmpty(answer_type_id)) else //if we're here, that means user submtted answer type that <>None { int selected_ans_type_id = Convert.ToInt32(formData["list_of_answers"]); //now we need to check if this question/answer type combination already exist in obs_quest_ans_type table if (isNew_Quest_Ans_Type(selected_ans_type_id, question_id)) { //if we're here, that means we need to insert a new record in OBS_QUEST_ANS_TYPE table //first we need to check if this selected answer type requires a record in OBS_QUEST_SLCT_ANS if (isQuest_Slct_Ans_Required(selected_ans_type_id)) { //so we are here, that means we need to save both OBS_QUEST_ANS_TYPE and OBS_QUEST_SLCT_ANS using (var transaction = db.Database.BeginTransaction()) {//need to create a transaction variable to rollback the changes for both tables if something goes wrong try { setExistingDefaultToN(question_id); string default_sel_ans_types = formData["default_selected_ans_types"]; string[] splitterm = { "," }; string[] selected_new_sel_ans_types = default_sel_ans_types.Split(splitterm, StringSplitOptions.RemoveEmptyEntries); OBS_QUEST_ANS_TYPES oBS_QUEST_ANS_TYPES = new OBS_QUEST_ANS_TYPES(); oBS_QUEST_ANS_TYPES.obs_question_id = question_id; oBS_QUEST_ANS_TYPES.obs_ans_type_id = (short)selected_ans_type_id; oBS_QUEST_ANS_TYPES.obs_qat_default_ans_type_yn = "Y"; oBS_QUEST_ANS_TYPES.obs_qat_end_eff_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_ANS_TYPES.Add(oBS_QUEST_ANS_TYPES); db.SaveChanges(); short temp_selected_ans_type_id = (short)selected_ans_type_id; int qat_id = db.OBS_QUEST_ANS_TYPES.SingleOrDefault(item => item.obs_ans_type_id == temp_selected_ans_type_id && item.obs_question_id == question_id && item.obs_qat_end_eff_dt > DateTime.Today).obs_qat_id; short order = 1; foreach (string str in selected_new_sel_ans_types) { OBS_QUEST_SLCT_ANS oBS_QUEST_SLCT_ANS = new OBS_QUEST_SLCT_ANS(); oBS_QUEST_SLCT_ANS.obs_qat_id = qat_id; oBS_QUEST_SLCT_ANS.obs_qsa_text = str; oBS_QUEST_SLCT_ANS.obs_qsa_order = order; oBS_QUEST_SLCT_ANS.obs_qsa_order = order; oBS_QUEST_SLCT_ANS.obs_qsa_dflt_yn = "N"; oBS_QUEST_SLCT_ANS.obs_qsa_eff_st_dt = DateTime.Today; oBS_QUEST_SLCT_ANS.obs_qsa_eff_end_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_SLCT_ANS.Add(oBS_QUEST_SLCT_ANS); order++; } db.SaveChanges(); } catch(Exception e) { string error = e.Message; transaction.Rollback(); ViewBag.ResultMessage = "Error occured, records rolledback."; } }//end of using (var transaction = db.Database.BeginTransaction()) }//end of if (isQuest_Slct_Ans_Required(selected_ans_type_id)) else { setExistingDefaultToN(question_id); OBS_QUEST_ANS_TYPES oBS_QUEST_ANS_TYPES_U = new OBS_QUEST_ANS_TYPES(); oBS_QUEST_ANS_TYPES_U.obs_question_id = question_id; oBS_QUEST_ANS_TYPES_U.obs_ans_type_id = (short)selected_ans_type_id; oBS_QUEST_ANS_TYPES_U.obs_qat_default_ans_type_yn = "Y"; oBS_QUEST_ANS_TYPES_U.obs_qat_end_eff_dt = Convert.ToDateTime("12/31/2060"); save(oBS_QUEST_ANS_TYPES_U); } }//if (isNew_Quest_Ans_Type(selected_ans_type_id, question_id)) else // this branch should take care of the scenario where this question/answer type exists in the obs_quest_ans_type table { OBS_QUEST_ANS_TYPES oBS_QUEST_ANS_TYPES = new OBS_QUEST_ANS_TYPES(); try { //set default flag the existing default answer type id to N // we need try/catch block in case there's no existing default answer type oBS_QUEST_ANS_TYPES = db.OBS_QUEST_ANS_TYPES.Single(item => item.obs_question_id == question_id && item.obs_qat_default_ans_type_yn == "Y"); oBS_QUEST_ANS_TYPES.obs_qat_default_ans_type_yn = "N"; db.SaveChanges(); } catch { } //now let's set the selected answer type to be default one oBS_QUEST_ANS_TYPES = db.OBS_QUEST_ANS_TYPES.Single(item => item.obs_ans_type_id == selected_ans_type_id && item.obs_question_id == question_id); oBS_QUEST_ANS_TYPES.obs_qat_default_ans_type_yn = "Y"; db.SaveChanges(); } } }
public string saveNewSelAnswer(string ans_type_list) { string posted_ans_type_list = ans_type_list;//represents newly added selectable ans types string status = String.Empty;//this will be returned to the Ajax if (!String.IsNullOrEmpty(posted_ans_type_list)) { using (var transaction = db.Database.BeginTransaction()) { try { string[] passed_sel_ans_info = posted_ans_type_list.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);//all passed selectable answers data foreach (string s in passed_sel_ans_info) { string[] single_sel_ans_info = s.Split(new[] { "~" }, StringSplitOptions.RemoveEmptyEntries);//individual answer type data if (!isDuplicate(single_sel_ans_info))//if not duplicate { OBS_QUEST_ANS_TYPES new_assigned_ans_type = new OBS_QUEST_ANS_TYPES(); new_assigned_ans_type.obs_question_id = Convert.ToInt32(single_sel_ans_info[0]); new_assigned_ans_type.obs_ans_type_id = Convert.ToInt16(single_sel_ans_info[1]); new_assigned_ans_type.obs_qat_default_ans_type_yn = single_sel_ans_info[2] == "true" ? "Y" : "N"; if (single_sel_ans_info[2] == "true") { try { List<OBS_QUEST_ANS_TYPES> temp = db.OBS_QUEST_ANS_TYPES.Where(x => x.obs_question_id == new_assigned_ans_type.obs_question_id).ToList(); foreach(OBS_QUEST_ANS_TYPES temp_OBS_QUEST_ANS_TYPE in temp) { temp_OBS_QUEST_ANS_TYPE.obs_qat_default_ans_type_yn = "N"; } } catch { } } else { new_assigned_ans_type.obs_qat_default_ans_type_yn = "N"; } db.OBS_QUEST_ANS_TYPES.Add(new_assigned_ans_type); db.SaveChanges();//at this point we've saved the OBS_QUEST_ANS_TYPES record. if (single_sel_ans_info.Count() > 3)//now we need to check if there's selectable answers for this question { short order = 1; for (int i = 3; i < single_sel_ans_info.Count(); i++) { OBS_QUEST_SLCT_ANS new_sel_ans = new OBS_QUEST_SLCT_ANS(); new_sel_ans.obs_qat_id = new_assigned_ans_type.obs_qat_id; new_sel_ans.obs_qsa_text = single_sel_ans_info[i].ToUpper(); new_sel_ans.obs_qsa_order = order; new_sel_ans.obs_qsa_wt = order; new_sel_ans.obs_qsa_dflt_yn = "N"; new_sel_ans.obs_qsa_eff_st_dt = DateTime.Now; new_sel_ans.obs_qsa_eff_end_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_SLCT_ANS.Add(new_sel_ans); db.SaveChanges(); } } status = "QAT_id" + new_assigned_ans_type.obs_qat_id; }//if (!isDuplicate(single_sel_ans_info)) else {//user passed duplicate record return "Duplicate Answer Type"; } }// end of foreach (string s in passed_sel_ans_info) transaction.Commit(); return status; }//end of try catch (Exception e) { transaction.Rollback(); return e.Message; } }//end of using (var transaction = db.Database.BeginTransaction()) } return "Nothing was passed!!!"; }
public void SaveDefaultAnswerType(OBSQuestion obsQuestion) { int selected_ans_type_id = obsQuestion.selectedAT.ATid; int question_id = obsQuestion.questionId; //string default_sel_ans_types = formData["default_selected_ans_types"]; //first lets check if user submitted None as a default answer type if (selected_ans_type_id < 1) { OBS_QUEST_ANS_TYPES oBS_QUEST_ANS_TYPES = new OBS_QUEST_ANS_TYPES(); try { oBS_QUEST_ANS_TYPES = db.OBS_QUEST_ANS_TYPES.Single(item => item.obs_question_id == question_id && item.obs_qat_default_ans_type_yn == "Y"); oBS_QUEST_ANS_TYPES.obs_qat_default_ans_type_yn = "N"; db.SaveChanges(); } catch { } }//end if (String.IsNullOrEmpty(answer_type_id)) else //if we're here, that means user submtted answer type that <>None { //now we need to check if this question/answer type combination already exist in obs_quest_ans_type table if (!obsQuestion.hasInstances) // oBS_QUEST_ANS_TYPES Table does not have Any records { //if we're here, that means we need to insert a new record in OBS_QUEST_ANS_TYPE table //first we need to check if this selected answer type requires a record in OBS_QUEST_SLCT_ANS if (isQuest_Slct_Ans_Required(selected_ans_type_id)) { // oBS_QUEST_ANS_TYPES Table does not have Any records and The Seacted Ans Type requires a record in OBS_QUEST_SLCT_ANS //so we are here, that means we need to save both OBS_QUEST_ANS_TYPE and OBS_QUEST_SLCT_ANS //-- First Insert record into 'OBS_QUEST_ANS_TYPES' Table OBS_QUEST_ANS_TYPES oBS_QUEST_ANS_TYPES = new OBS_QUEST_ANS_TYPES(); oBS_QUEST_ANS_TYPES.obs_question_id = question_id; oBS_QUEST_ANS_TYPES.obs_ans_type_id = (short)selected_ans_type_id; oBS_QUEST_ANS_TYPES.obs_qat_default_ans_type_yn = "Y"; //oBS_QUEST_ANS_TYPES.obs_qat_end_eff_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_ANS_TYPES.Add(oBS_QUEST_ANS_TYPES); db.SaveChanges(); //-- Second Insert record into 'OBS_QUEST_SLCT_ANS' Table //short temp_selected_ans_type_id = (short)selected_ans_type_id; int createdQAT_id = db.OBS_QUEST_ANS_TYPES.SingleOrDefault(item => item.obs_ans_type_id == obsQuestion.selectedAT.ATid && item.obs_question_id == question_id).obs_qat_id; short order = 1; foreach (string str in obsQuestion.selectedAT.selAnsList) { OBS_QUEST_SLCT_ANS oBS_QUEST_SLCT_ANS = new OBS_QUEST_SLCT_ANS(); oBS_QUEST_SLCT_ANS.obs_qat_id = createdQAT_id; oBS_QUEST_SLCT_ANS.obs_qsa_text = str; oBS_QUEST_SLCT_ANS.obs_qsa_order = order; oBS_QUEST_SLCT_ANS.obs_qsa_wt = order; oBS_QUEST_SLCT_ANS.obs_qsa_dflt_yn = "N"; oBS_QUEST_SLCT_ANS.obs_qsa_eff_st_dt = DateTime.Now; oBS_QUEST_SLCT_ANS.obs_qsa_eff_end_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_SLCT_ANS.Add(oBS_QUEST_SLCT_ANS); order++; } db.SaveChanges(); }//end of if (isQuest_Slct_Ans_Required(selected_ans_type_id)) else { //-- Insert record into 'OBS_QUEST_ANS_TYPES' Table OBS_QUEST_ANS_TYPES oBS_QUEST_ANS_TYPES = new OBS_QUEST_ANS_TYPES(); oBS_QUEST_ANS_TYPES.obs_question_id = question_id; oBS_QUEST_ANS_TYPES.obs_ans_type_id = (short)selected_ans_type_id; oBS_QUEST_ANS_TYPES.obs_qat_default_ans_type_yn = "Y"; // oBS_QUEST_ANS_TYPES.obs_qat_end_eff_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_ANS_TYPES.Add(oBS_QUEST_ANS_TYPES); db.SaveChanges(); } }// End of if (!obsQuestion.hasInstances) //if (isNew_Quest_Ans_Type(selected_ans_type_id, question_id)) else if (obsQuestion.indexOfDefaultQA >= 0 &&(obsQuestion.selectedAT.ATid ==obsQuestion.OBSQA_List[obsQuestion.indexOfDefaultQA].answerTypeId)&& obsQuestion.selectedAT.requiresSelectableAnswers) { //logic to update existing "OBS_QUEST_SLCT_ANS" when submitted answer type is default goes here //first lets find the obs_qat_id from OBS_QUEST_ANS_TYPES table for this question id and selected answer type id int default_qat_id = db.OBS_QUEST_ANS_TYPES.SingleOrDefault(item => item.obs_ans_type_id == obsQuestion.selectedAT.ATid && item.obs_question_id == question_id).obs_qat_id; List<string> current_default_sel_ans_list = db.OBS_QUEST_SLCT_ANS.Where(item => item.obs_qat_id == default_qat_id && item.obs_qsa_eff_st_dt <= DateTime.Today && item.obs_qsa_eff_end_dt > DateTime.Today).Select(x =>x.obs_qsa_text).ToList(); //at this point we have 2 lists of strings(current default selected answers and ones user passed from the form) and we need to compare them if(isEqualList(current_default_sel_ans_list, obsQuestion.selectedAT.selAnsList, obsQuestion.selectedAT.ATcathegory)) {//if we're here that means 2 lists are the same and we only need to change the order of selected answers list short order = 1; foreach (string str in obsQuestion.selectedAT.selAnsList) { OBS_QUEST_SLCT_ANS oBS_QUEST_SLCT_ANS = db.OBS_QUEST_SLCT_ANS.Single(item => item.obs_qat_id == default_qat_id && item.obs_qsa_text == str && item.obs_qsa_eff_st_dt <= DateTime.Today && item.obs_qsa_eff_end_dt > DateTime.Today); oBS_QUEST_SLCT_ANS.obs_qsa_order = order; oBS_QUEST_SLCT_ANS.obs_qsa_wt = order; db.SaveChanges(); order++; } } else//if we're here, that means user passed a different list of selected answers and we need to disable the current one and add new { List<OBS_QUEST_SLCT_ANS> oBS_QUEST_SLCT_ANS = db.OBS_QUEST_SLCT_ANS.Where(item => item.obs_qat_id == default_qat_id).ToList(); oBS_QUEST_SLCT_ANS.ForEach(x => x.obs_qsa_eff_end_dt = DateTime.Today);//update end effective date to todays date short order = 1; foreach (string str in obsQuestion.selectedAT.selAnsList)//now lets create a new record with updated selected answers { OBS_QUEST_SLCT_ANS UPDATED_oBS_QUEST_SLCT_ANS = new OBS_QUEST_SLCT_ANS(); UPDATED_oBS_QUEST_SLCT_ANS.obs_qat_id = default_qat_id; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_text = str; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_order = order; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_wt = order; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_dflt_yn = "N"; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_eff_st_dt = DateTime.Now; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_eff_end_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_SLCT_ANS.Add(UPDATED_oBS_QUEST_SLCT_ANS); order++; }// end foreach db.SaveChanges(); } }// end of "else if (obsQuestion.indexOfDefaultQA >= 0 &&(obsQuestion.selectedAT.ATid ==obsQuestion.OBSQA_List[obsQuestion.indexOfDefaultQA].answerTypeId)&& obsQuestion.selectedAT.requiresSelectableAnswers) " else// this branch should take care of the scenario where this question/answer type exists in the obs_quest_ans_type table { //Check if the id a default "Y" record. If so, set it to "N" if (obsQuestion.indexOfDefaultQA >= 0) { setExistingDefaultToN(obsQuestion.questionId); } //Check if the selected "AT id" and "Question Id" combination exist in the " OBS_QUEST_ANS_TYPES" table if (obsQuestion.OBSQA_List.Where(x => x.answerTypeId == selected_ans_type_id).Count() > 0) { OBS_QUEST_ANS_TYPES oBS_QUEST_ANS_TYPES = new OBS_QUEST_ANS_TYPES(); try { oBS_QUEST_ANS_TYPES = db.OBS_QUEST_ANS_TYPES.Single(item => item.obs_question_id == question_id && item.obs_ans_type_id == selected_ans_type_id); oBS_QUEST_ANS_TYPES.obs_qat_default_ans_type_yn = "Y"; db.SaveChanges(); //after we set new answer type to be default, we need to check if selected answer types require updates as well if (obsQuestion.selectedAT.requiresSelectableAnswers) { int default_qat_id = oBS_QUEST_ANS_TYPES.obs_qat_id; List<string> current_default_sel_ans_list = db.OBS_QUEST_SLCT_ANS.Where(item => item.obs_qat_id == default_qat_id && item.obs_qsa_eff_st_dt <= DateTime.Today && item.obs_qsa_eff_end_dt > DateTime.Today).Select(x => x.obs_qsa_text).ToList(); if (isEqualList(current_default_sel_ans_list, obsQuestion.selectedAT.selAnsList, obsQuestion.selectedAT.ATcathegory)) {//if we're here that means 2 lists are the same and we only need to change the order of selected answers list short order = 1; foreach (string str in obsQuestion.selectedAT.selAnsList) { OBS_QUEST_SLCT_ANS oBS_QUEST_SLCT_ANS = db.OBS_QUEST_SLCT_ANS.Single(item => item.obs_qat_id == default_qat_id && item.obs_qsa_text == str && item.obs_qsa_eff_st_dt <= DateTime.Today && item.obs_qsa_eff_end_dt > DateTime.Today); oBS_QUEST_SLCT_ANS.obs_qsa_order = order; db.SaveChanges(); order++; } } else//if we're here, that means user passed a different list of selected answers and we need to disable the current one and add new { List<OBS_QUEST_SLCT_ANS> oBS_QUEST_SLCT_ANS = db.OBS_QUEST_SLCT_ANS.Where(item => item.obs_qat_id == default_qat_id).ToList(); oBS_QUEST_SLCT_ANS.ForEach(x => x.obs_qsa_eff_end_dt = DateTime.Now);//update end effective date to todays date short order = 1; foreach (string str in obsQuestion.selectedAT.selAnsList)//now lets create a new record with updated selected answers { OBS_QUEST_SLCT_ANS UPDATED_oBS_QUEST_SLCT_ANS = new OBS_QUEST_SLCT_ANS(); UPDATED_oBS_QUEST_SLCT_ANS.obs_qat_id = default_qat_id; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_text = str; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_order = order; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_wt = order; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_dflt_yn = "N"; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_eff_st_dt = DateTime.Now; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_eff_end_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_SLCT_ANS.Add(UPDATED_oBS_QUEST_SLCT_ANS); order++; }// end foreach db.SaveChanges(); }//end of else }//if (obsQuestion.selectedAT.requiresSelectableAnswers) } catch { } } else { //It doesn't exist. We need to create a new record with "Y" default indicator //First check if the new AT type selection requires selectable answers //-- First Insert record into 'OBS_QUEST_ANS_TYPES' Table OBS_QUEST_ANS_TYPES oBS_QUEST_ANS_TYPES = new OBS_QUEST_ANS_TYPES(); oBS_QUEST_ANS_TYPES.obs_question_id = question_id; oBS_QUEST_ANS_TYPES.obs_ans_type_id = (short)selected_ans_type_id; oBS_QUEST_ANS_TYPES.obs_qat_default_ans_type_yn = "Y"; //oBS_QUEST_ANS_TYPES.obs_qat_end_eff_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_ANS_TYPES.Add(oBS_QUEST_ANS_TYPES); db.SaveChanges(); if (isQuest_Slct_Ans_Required(selected_ans_type_id)) { //If selectable answers are required: //-- Second Insert record into 'OBS_QUEST_SLCT_ANS' Table //short temp_selected_ans_type_id = (short)selected_ans_type_id; int createdQAT_id = db.OBS_QUEST_ANS_TYPES.SingleOrDefault(item => item.obs_ans_type_id == obsQuestion.selectedAT.ATid && item.obs_question_id == question_id).obs_qat_id; short order = 1; foreach (string str in obsQuestion.selectedAT.selAnsList) { OBS_QUEST_SLCT_ANS oBS_QUEST_SLCT_ANS = new OBS_QUEST_SLCT_ANS(); oBS_QUEST_SLCT_ANS.obs_qat_id = createdQAT_id; oBS_QUEST_SLCT_ANS.obs_qsa_text = str; oBS_QUEST_SLCT_ANS.obs_qsa_order = order; oBS_QUEST_SLCT_ANS.obs_qsa_wt = order; oBS_QUEST_SLCT_ANS.obs_qsa_dflt_yn = "N"; oBS_QUEST_SLCT_ANS.obs_qsa_eff_st_dt = DateTime.Now; oBS_QUEST_SLCT_ANS.obs_qsa_eff_end_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_SLCT_ANS.Add(oBS_QUEST_SLCT_ANS); order++; } db.SaveChanges(); }//end of if (isQuest_Slct_Ans_Required(selected_ans_type_id)) } } } }
public ActionResult QuestionAddUpdatePost(FormCollection postedData, QuestionMDViewModel QuestionMDView, [Bind(Prefix = "questn")] OBS_QUESTION questionHdr, string ans_type_list) { string posted_deleted_ids = postedData["obs_qat_Id_delList"]; if (questionHdr.obs_question_eff_end_dt < Convert.ToDateTime("01/01/2000")) { questionHdr.obs_question_eff_end_dt = Convert.ToDateTime("12/31/2060"); } string posted_ans_type_list = postedData["ans_type_list"];//represents newly added selectable ans types string posted_existing_ans_type_data = postedData["sel_ans_list"]; //represents existing assigned ans types that need to be modified //string ans_type_list = "6~true~yes~no~maybe,10~false~1~2~3~4~5"; //ans_type_list format: at_id~default~sel_ans, // 6~ true ~always~sometimes~never, //obs_qat_id_delList = qat_id,qat_id,... list of answer types to be deleted //-------- Save the Question Information ---- int defaultQATid = -1; try { defaultQATid = Convert.ToInt32(postedData["defaultQATid"]); } catch { } using (DSC_OBS_DB_ENTITY db = new DSC_OBS_DB_ENTITY()) { using (var transaction = db.Database.BeginTransaction()) { try { if(defaultQATid>0) { updateDefaultAnswerType(defaultQATid, "Y"); } else if (questionHdr.obs_question_id > 0) { List<OBS_QUEST_ANS_TYPES> temp_OBS_QUEST_ANS_TYPES = db.OBS_QUEST_ANS_TYPES.Where(x => x.obs_question_id == questionHdr.obs_question_id).ToList(); foreach(OBS_QUEST_ANS_TYPES x in temp_OBS_QUEST_ANS_TYPES ) { x.obs_qat_default_ans_type_yn = "N"; db.SaveChanges(); } } ///////////////////////////////This section saves changes to existing answer types///////////////////////////////// if (!string.IsNullOrEmpty(posted_existing_ans_type_data)) { string[] split_ans_types_by = { "," }; string[] posted_single_ans_type_data = posted_existing_ans_type_data.Split(split_ans_types_by, StringSplitOptions.RemoveEmptyEntries); foreach (string str in posted_single_ans_type_data) { List<string> selAnsList_from_form = new List<string>(); string[] splitterm = { "~" }; string[] ans_type_elements = str.Split(splitterm, StringSplitOptions.RemoveEmptyEntries); int intQATid = Convert.ToInt32(ans_type_elements[0]); short obs_ans_type_id = db.OBS_QUEST_ANS_TYPES.Single(x => x.obs_qat_id == intQATid).obs_ans_type_id; for (int i = 1; i < ans_type_elements.Length; i++) { selAnsList_from_form.Add(ans_type_elements[i].Trim().ToUpper()); } OBS_ANS_TYPE ans_type = db.OBS_ANS_TYPE.Single(item => item.obs_ans_type_id == obs_ans_type_id); List<string> current_sel_ans_list = db.OBS_QUEST_SLCT_ANS.Where(item => item.obs_qat_id == intQATid && item.obs_qsa_eff_st_dt <= DateTime.Now && item.obs_qsa_eff_end_dt > DateTime.Now).Select(x => x.obs_qsa_text).ToList(); if (isEqualList(current_sel_ans_list, selAnsList_from_form, ans_type.obs_ans_type_category)) {//if we're here that means 2 lists are the same and we only need to change the order of selected answers list short order = 1; for (int i = 1; i < ans_type_elements.Length; i++) { string sel_ans_element = ans_type_elements[i]; OBS_QUEST_SLCT_ANS oBS_QUEST_SLCT_ANS = db.OBS_QUEST_SLCT_ANS.Single(item => item.obs_qat_id == intQATid && item.obs_qsa_text == sel_ans_element && item.obs_qsa_eff_st_dt <= DateTime.Now && item.obs_qsa_eff_end_dt > DateTime.Now); oBS_QUEST_SLCT_ANS.obs_qsa_order = order; db.SaveChanges(); order++; } } else//if we're here, that means user passed a different list of selected answers and we need to delete the current one and add new { //List<OBS_QUEST_SLCT_ANS> oBS_QUEST_SLCT_ANS = db.OBS_QUEST_SLCT_ANS.Where(item => item.obs_qat_id == intQATid).ToList(); db.OBS_QUEST_SLCT_ANS.RemoveRange(db.OBS_QUEST_SLCT_ANS.Where(x => x.obs_qat_id == intQATid)); ;//update end effective date to todays date short order = 1; for (int i = 1; i < ans_type_elements.Length; i++)//now lets create a new record with updated selected answers { OBS_QUEST_SLCT_ANS UPDATED_oBS_QUEST_SLCT_ANS = new OBS_QUEST_SLCT_ANS(); UPDATED_oBS_QUEST_SLCT_ANS.obs_qat_id = intQATid; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_text = ans_type_elements[i].ToUpper(); UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_order = order; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_wt = 1; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_dflt_yn = "N"; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_eff_st_dt = DateTime.Now; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_eff_end_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_SLCT_ANS.Add(UPDATED_oBS_QUEST_SLCT_ANS); order++; }// end foreach db.SaveChanges(); } }//foreach (string str in posted_single_ans_type_data) }//end of if (!string.IsNullOrEmpty(posted_existing_ans_type_data)) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //this section saves new question information or new question answer type if (questionHdr.obs_question_id > 0) { OBS_QUESTION editedQuestion = db.OBS_QUESTION.Single(x => x.obs_question_id == questionHdr.obs_question_id); if (!editedQuestion.obs_question_full_text.Equals(questionHdr.obs_question_full_text)) { editedQuestion.obs_question_ver++; } editedQuestion.obs_question_full_text = questionHdr.obs_question_full_text; editedQuestion.obs_question_desc = questionHdr.obs_question_desc; editedQuestion.obs_question_eff_st_dt = questionHdr.obs_question_eff_st_dt; editedQuestion.obs_question_eff_end_dt = questionHdr.obs_question_eff_end_dt; editedQuestion.obs_question_upd_dtm = DateTime.Now; editedQuestion.obs_question_upd_uid = User.Identity.Name; db.SaveChanges(); } else { if (questionHdr.obs_question_eff_end_dt < Convert.ToDateTime("01/01/1900")) { questionHdr.obs_question_eff_end_dt = Convert.ToDateTime("12/31/2060"); } if (questionHdr.obs_question_eff_st_dt < Convert.ToDateTime("01/01/1900")) { questionHdr.obs_question_eff_st_dt = DateTime.Now; } questionHdr.obs_question_ver = 1; questionHdr.obs_question_added_uid = User.Identity.Name; questionHdr.obs_question_added_dtm = DateTime.Now; db.OBS_QUESTION.Add(questionHdr); db.SaveChanges(); } if (!String.IsNullOrEmpty(posted_ans_type_list)) { string[] splitter = { "," }; string[] passed_sel_ans_info = posted_ans_type_list.Split(splitter, StringSplitOptions.RemoveEmptyEntries);//all passed selectable answers data foreach (string s in passed_sel_ans_info) { string[] splitby = { "~" }; string[] single_sel_ans_info = s.Split(splitby, StringSplitOptions.RemoveEmptyEntries);//individual answer type data OBS_QUEST_ANS_TYPES new_assigned_ans_type = new OBS_QUEST_ANS_TYPES(); new_assigned_ans_type.obs_ans_type_id = Convert.ToInt16(single_sel_ans_info[0]); new_assigned_ans_type.obs_question_id = questionHdr.obs_question_id; new_assigned_ans_type.obs_qat_default_ans_type_yn = single_sel_ans_info[1] == "true" ? "Y" : "N"; db.OBS_QUEST_ANS_TYPES.Add(new_assigned_ans_type); db.SaveChanges();//at this point we've saved the OBS_QUEST_ANS_TYPES record. OBS_QUEST_ANS_TYPES passed_quest_ans_record = db.OBS_QUEST_ANS_TYPES.Single(x => x.obs_qat_id == new_assigned_ans_type.obs_qat_id); if (passed_quest_ans_record.obs_qat_default_ans_type_yn != new_assigned_ans_type.obs_qat_default_ans_type_yn && new_assigned_ans_type.obs_qat_default_ans_type_yn == "N") { //if existing record is default and we need to set it to N we need to do it here and we won't have to //change any other records passed_quest_ans_record.obs_qat_default_ans_type_yn = "N"; db.SaveChanges(); } else if (passed_quest_ans_record.obs_qat_default_ans_type_yn != new_assigned_ans_type.obs_qat_default_ans_type_yn && new_assigned_ans_type.obs_qat_default_ans_type_yn == "Y") {// if passed qat_id needs to be default one, we should first set existing default to N and then update passed to Y try { int current_default_quest_id = db.OBS_QUEST_ANS_TYPES.Single(x => x.obs_question_id == passed_quest_ans_record.obs_question_id && x.obs_qat_id != passed_quest_ans_record.obs_qat_id && x.obs_qat_default_ans_type_yn == "Y").obs_question_id; setExistingDefaultToN(current_default_quest_id); } catch { } passed_quest_ans_record.obs_qat_default_ans_type_yn = "Y"; db.SaveChanges(); } if (single_sel_ans_info.Count() > 2)//now we need to check if there's selectable answers for this question { short order = 1; for (int i = 2; i < single_sel_ans_info.Count(); i++) { OBS_QUEST_SLCT_ANS new_sel_ans = new OBS_QUEST_SLCT_ANS(); new_sel_ans.obs_qat_id = new_assigned_ans_type.obs_qat_id; new_sel_ans.obs_qsa_text = single_sel_ans_info[i]; new_sel_ans.obs_qsa_order = order; new_sel_ans.obs_qsa_wt = 1; new_sel_ans.obs_qsa_dflt_yn = "N"; new_sel_ans.obs_qsa_eff_st_dt = DateTime.Now; new_sel_ans.obs_qsa_eff_end_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_SLCT_ANS.Add(new_sel_ans); db.SaveChanges(); order++; } } } } ///////////////////////////////////WE DELETE SEL ANS HERE/////////////////////////////////////////// if (!string.IsNullOrEmpty(posted_deleted_ids)) { string[] qats_to_delete = posted_deleted_ids.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); foreach (string qat_to_delete in qats_to_delete) { deleteAssignedSelAns(Convert.ToInt32(qat_to_delete), db); } } ///////////////////////////////////END OF DELETING SEL ANS/////////////////////////////////////////// // ------- Save the Question Metadata Changes ---- string MDlistBefore = postedData["origTags"]; string MDlistAfter = postedData["qAssignedMD"]; List<string> originalMDList = new List<string>(); List<string> newMDList = new List<string>(); if (!String.IsNullOrEmpty(MDlistBefore)) { originalMDList = MDlistBefore.Split(',').ToList(); } if (!String.IsNullOrEmpty(MDlistAfter)) { newMDList = MDlistAfter.Split(',').ToList(); } string[] mdIDsToDelete = originalMDList.Except(newMDList).ToArray(); string[] mdIDsToAdd = newMDList.Except(originalMDList).ToArray(); //---- Soft Delete all Metadata tags that are no longer used by the question foreach (string deleteId in mdIDsToDelete) { int tempId = Convert.ToInt32(deleteId); //int joitemp = db.OBS_QUEST_ASSGND_MD.Where(x => x.obs_quest_md_id == Convert.ToInt32(deleteId) && x.obs_question_id == questionHdr.obs_question_id).Select(x => x.obs_qad_id); OBS_QUEST_ASSGND_MD oBS_QUEST_ASSGND_MD = db.OBS_QUEST_ASSGND_MD.FirstOrDefault(x => x.obs_quest_md_id == tempId && x.obs_question_id == questionHdr.obs_question_id); oBS_QUEST_ASSGND_MD.obs_qad_eff_end_dt = DateTime.Today; //db.OBS_QUESTION_METADATA.Remove(oBS_QUESTION_METADATA); //No hard deletes } //---- Enable or Add the New metadata (MD) that will be assigned to the question --- //-- Process each metadata entry to add for the selected question foreach (string mdIdtoAdd in mdIDsToAdd) { try { int tempId = Convert.ToInt32(mdIdtoAdd); //-- Look for an entry in OBS_QUEST_ASSGND_MD usign the Question Id and the metadata it. OBS_QUEST_ASSGND_MD oBS_QUEST_ASSGND_MD = db.OBS_QUEST_ASSGND_MD.FirstOrDefault(x => x.obs_quest_md_id == tempId && x.obs_question_id == questionHdr.obs_question_id); //-- If an entry is found in the junction table for that question, just enable it if (oBS_QUEST_ASSGND_MD != null && tempId > 0) { oBS_QUEST_ASSGND_MD.obs_qad_eff_end_dt = Convert.ToDateTime("12/31/2060"); } else { //-- If selected MD does not exist in the junction table for that question, add it. oBS_QUEST_ASSGND_MD = new OBS_QUEST_ASSGND_MD(); oBS_QUEST_ASSGND_MD.obs_quest_md_id = tempId; oBS_QUEST_ASSGND_MD.obs_question_id = questionHdr.obs_question_id; oBS_QUEST_ASSGND_MD.obs_qad_eff_st_dt = DateTime.Today; oBS_QUEST_ASSGND_MD.obs_qad_eff_end_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_ASSGND_MD.Add(oBS_QUEST_ASSGND_MD); } } catch { } } //---- Save All Changes ------ db.SaveChanges(); transaction.Commit(); } catch (Exception e) { string notused = e.Message; transaction.Rollback(); } } } //ViewBag.ConfMsg = "Data Saved Successfully."; return RedirectToAction("QuestionAddUpdate", new {id = questionHdr.obs_question_id}); //return RedirectToAction("Index", "Question"); //return View("Edit"); }
public string updateSel_Ans_Types(int qat_id, string sel_ans_list) { List<string> selAnsList_from_form = new List<string>(); short obs_ans_type_id = db.OBS_QUEST_ANS_TYPES.Single(x => x.obs_qat_id == qat_id).obs_ans_type_id; string[] splitterm = { "~" }; string[] selected_new_sel_ans_types = sel_ans_list.Split(splitterm, StringSplitOptions.RemoveEmptyEntries); foreach (string s in selected_new_sel_ans_types) { { selAnsList_from_form.Add(s.Trim().ToUpper()); } } OBS_ANS_TYPE ans_type = db.OBS_ANS_TYPE.Single(item => item.obs_ans_type_id == obs_ans_type_id); List<string> current_sel_ans_list = db.OBS_QUEST_SLCT_ANS.Where(item => item.obs_qat_id == qat_id && item.obs_qsa_eff_st_dt <= DateTime.Now && item.obs_qsa_eff_end_dt > DateTime.Now).Select(x => x.obs_qsa_text).ToList(); if(current_sel_ans_list.Count()!= selAnsList_from_form.Count() && (ans_type.obs_ans_type_category =="3 Val Range"|| ans_type.obs_ans_type_category=="5 Val Range")) { return "ERROR: Not Enough Selectable Answers for this category!!!!"; } if (isEqualList(current_sel_ans_list, selAnsList_from_form, ans_type.obs_ans_type_category)) {//if we're here that means 2 lists are the same and we only need to change the order of selected answers list try { short order = 1; foreach (string str in selAnsList_from_form) { OBS_QUEST_SLCT_ANS oBS_QUEST_SLCT_ANS = db.OBS_QUEST_SLCT_ANS.Single(item => item.obs_qat_id == qat_id && item.obs_qsa_text == str && item.obs_qsa_eff_st_dt <= DateTime.Now && item.obs_qsa_eff_end_dt > DateTime.Now); oBS_QUEST_SLCT_ANS.obs_qsa_order = order; db.SaveChanges(); order++; } return "OK"; } catch(Exception e) { return e.Message; } } else//if we're here, that means user passed a different list of selected answers and we need to disable the current one and add new { try { List<OBS_QUEST_SLCT_ANS> oBS_QUEST_SLCT_ANS = db.OBS_QUEST_SLCT_ANS.Where(item => item.obs_qat_id == qat_id).ToList(); oBS_QUEST_SLCT_ANS.ForEach(x => x.obs_qsa_eff_end_dt = DateTime.Now);//update end effective date to todays date short order = 1; foreach (string str in selAnsList_from_form)//now lets create a new record with updated selected answers { OBS_QUEST_SLCT_ANS UPDATED_oBS_QUEST_SLCT_ANS = new OBS_QUEST_SLCT_ANS(); UPDATED_oBS_QUEST_SLCT_ANS.obs_qat_id = qat_id; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_text = str; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_order = order; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_wt = order; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_dflt_yn = "N"; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_eff_st_dt = DateTime.Now; UPDATED_oBS_QUEST_SLCT_ANS.obs_qsa_eff_end_dt = Convert.ToDateTime("12/31/2060"); db.OBS_QUEST_SLCT_ANS.Add(UPDATED_oBS_QUEST_SLCT_ANS); order++; }// end foreach db.SaveChanges(); return "OK"; } catch (Exception e) { return e.Message; } } }