private void PrintGenericSection(PdfOutput output, def_Sections section, int indentLevel) { output.appendSectionBreak(); double indent = .5 + labelIndent * (indentLevel - 1); output.appendWrappedText(section.identifier, indent, 8 - indent, 12); output.drawY -= .2; formsRepo.GetSectionItems(section); foreach (def_SectionItems si in section.def_SectionItems) { if (si.subSectionId.HasValue) { PrintGenericSection(output, formsRepo.GetSubSectionById(si.subSectionId.Value), indentLevel + 1); } else { def_Items itm = formsRepo.GetItemById(si.itemId);//si.def_Items; indent = labelIndent * indentLevel; output.appendWrappedText(itm.label, indent, 8 - indent, output.boldFont); foreach (def_ItemVariables iv in itm.def_ItemVariables) { def_ResponseVariables rv = formsRepo.GetResponseVariablesByFormResultItemVarId(formResultId, iv.itemVariableId); string s = (rv == null) ? "N/A" : rv.rspValue; indent = valueIndent + labelIndent * (indentLevel - 1); output.appendWrappedText(iv.identifier + ": " + s, indent, 8 - indent); } output.drawY -= .1; } } }
/// <summary> /// Override of FormResultPdfReport.PrintGenericSection /// /// This will delegate to the special-case section printing methods above, or use the base PrintGenericSection implimentation /// </summary> /// <param name="output"></param> /// <param name="section"></param> /// <param name="indentLevel"></param> override protected void PrintGenericSection(PdfOutput output, def_Sections section, int indentLevel) { if (sectionsToSkip.Contains(section.identifier)) { Debug.WriteLine("AdapPdfReport.PrintGenericSection Skip it: " + section.identifier); return; } else if (specialCaseSections.ContainsKey(section.identifier)) { if (output.drawY < 1.5) { output.appendPageBreak(); } if (indentLevel < 2) { output.appendSectionBreak(); } double sectionLabelIndent = .5 + labelIndent * (indentLevel - 1); double itemLabelIndent = labelIndent * indentLevel; double responseIndent = valueIndent + labelIndent * (indentLevel - 1); //print section content using special case handler specialCaseSections[section.identifier].Invoke(section, indentLevel, sectionLabelIndent, itemLabelIndent, responseIndent); } else { //print section header and content generically, excluding application comments except in the "finalCert" section Dictionary <string, string> responsesByItemVariable = GetResponsesByItemVariableIdentifierThroughLookupTables(section); if (section.identifier != "ADAP_finalCert") { responsesByItemVariable.Remove("ADAP_Application_Comments_txt"); } Debug.WriteLine("AdapPdfReport.base.PrintGenericSection: " + section.identifier); base.PrintGenericSection(output, section, indentLevel, responsesByItemVariable); } }
protected void PrintGenericSection( PdfOutput output, def_Sections section, int indentLevel, Dictionary <string, string> responsesByItemVariable) { if (output.drawY < 1.5) { output.appendPageBreak(); } if (indentLevel < 2) { output.appendSectionBreak(); } //print section title + identifier double sectionLabelIndent = .5 + labelIndent * (indentLevel - 1); double itemLabelIndent = labelIndent * indentLevel; double responseIndent = valueIndent + labelIndent * (indentLevel - 1); output.appendWrappedText(buildSectionHeaderText(section), sectionLabelIndent, 8 - sectionLabelIndent, output.sectionHeaderFontSize); output.drawY -= .1; List <def_Items> ignoreList = new List <def_Items>(); int singleBoolCount = 0; formsRepo.GetSectionItems(section); //add items wtihout responses to the ignore list, count the number of single-boolean items Debug.WriteLine("FormResultPdfReport.PrintGenericSection section: " + section.identifier); foreach (def_SectionItems si in section.def_SectionItems.Where(si => !si.subSectionId.HasValue)) { def_Items itm = formsRepo.GetItemById(si.itemId); Debug.WriteLine(" itm: " + itm.identifier); ICollection <def_ItemVariables> ivs = formsRepo.GetItemVariablesByItemId(itm.itemId); if (ivs.Any(iv => !responsesByItemVariable.ContainsKey(iv.identifier) || String.IsNullOrWhiteSpace(responsesByItemVariable[iv.identifier]))) { ignoreList.Add(itm); } if ((ivs.Count == 1) && (ivs.First().baseTypeId == 1)) { singleBoolCount++; } } //if there at least 4 boolean items in this section, ignore all labeled items with single negative boolean responses if (singleBoolCount >= 4) { foreach (def_SectionItems si in section.def_SectionItems.Where(si => !si.subSectionId.HasValue)) { def_Items itm = formsRepo.GetItemById(si.itemId); ICollection <def_ItemVariables> ivs = formsRepo.GetItemVariablesByItemId(itm.itemId); if (ignoreList.Contains(itm) || itm.label.Trim().Length == 0) { continue; } if (ivs.Count == 1) { def_ItemVariables iv = ivs.First(); if ((iv.baseTypeId == 1) && (!responsesByItemVariable.ContainsKey(iv.identifier) || responsesByItemVariable[iv.identifier].Equals("No"))) { ignoreList.Add(itm); } } } } //iterate through section items, printing to pdf output foreach (def_SectionItems si in section.def_SectionItems) { if (si.subSectionId.HasValue) { PrintGenericSection(output, formsRepo.GetSubSectionById(si.subSectionId.Value), indentLevel + 1); } else { def_Items itm = formsRepo.GetItemById(si.itemId); if (ignoreList.Where(x => x.itemId == itm.itemId).Any()) { continue; } formsRepo.GetEnterpriseItems(new def_Items[] { itm }.ToList(), formResults.EnterpriseID.Value); appendItemLabelAndResponses(itm, itemLabelIndent, responseIndent, responsesByItemVariable); } } }
protected void PrintProfilePage(PdfOutput output, int ageInYears) { List <def_Parts> prts = formsRepo.GetFormParts(form); def_Parts part = prts[0]; PdfOutput secondCol = output.getSecondColumnBranch(); output.drawY -= .3; if (SessionHelper.LoginStatus.EnterpriseID == 44) { buildSubheaderWithResults(output, part, "Person Being Assessed", "itmNmeLst", "nmeFrst", "nmeMdl", "sis_cl_lang_item", "itmGender", "adrlne", "adrcty", "sis_cl_st1", "sis_cl_zip1", "sis_cl_phone_item", "sis_cl_dob_dt1", new LabelValuePair("Age", ageInYears.ToString()), "trkNum", new LabelValuePair("Medicaid Number", MaskMedicaidNumber(GetSingleResponse(formsRepo.GetItemByIdentifier("sis_cl_medicaidNum1")))), new LabelValuePair("SSN", MaskSSN(GetSingleResponse(formsRepo.GetItemByIdentifier("itmSsn"))))); } else { buildSubheaderWithResults(output, part, "Person Being Assessed", "itmNmeLst", "nmeFrst", "nmeMdl", "sis_cl_lang_item", "itmGender", "adrlne", "adrcty", "sis_cl_st1", "sis_cl_zip1", "sis_cl_phone_item", "sis_cl_dob_dt1", new LabelValuePair("Age", ageInYears.ToString()), "trkNum", "sis_cl_medicaidNum1", new LabelValuePair("SSN", MaskSSN(GetSingleResponse(formsRepo.GetItemByIdentifier("itmSsn"))))); } buildSubheaderWithResults(output, part, "Assessment Data", "intvwDate", "isp_begin_date_item", new LabelValuePair("SIS ID", formResults.formResultId.ToString())); secondCol.drawY -= .6; buildSubheaderWithResults(secondCol, part, "Interviewer Data", "sis_int_full_nm1", "sis_int_agency_nm1", "sis_int_addr_line11", "sis_int_city1", "sis_int_st1", "sis_int_zip", "sis_int_position_cd1", "sis_int_phone_num1", "sis_int_phone_num_ext1", "sis_int_email1"); output.drawY -= .3; output.appendSectionBreak(); output.appendSubHeader("Support Providers", "Essential supports for this individual are being provided by the following"); buildTableWithItems(output, part, 4, "sis_sup1_name_item", "sis_sup1_reln_item", "sis_sup1_phone_item", "sis_sup1_ext_item", "sis_sup2_name_item", "sis_sup2_reln_item", "sis_sup2_phone_item", "sis_sup2_ext_item", "sis_sup3_name_item", "sis_sup3_reln_item", "sis_sup3_phone_item", "sis_sup3_ext_item", "sis_sup4_name_item", "sis_sup4_reln_item", "sis_sup4_phone_item", "sis_sup4_ext_item", "sis_sup5_name_item", "sis_sup5_reln_item", "sis_sup5_phone_item", "sis_sup5_ext_item", "sis_sup6_name_item", "sis_sup6_reln_item", "sis_sup6_phone_item", "sis_sup6_ext_item"); output.drawY -= .3; output.appendSectionBreak(); output.appendSubHeader("Respondent Data", "Information for the SIS ratings was provided by the following respondents:"); //buildTableWithItems(output, part, 5, // new string[] { "First Name", "Last Name", "Agency", "Email", "Language", }, // "sis_res1_firstn_item", "sis_res1_lastn_item", "sis_res1_agen_item", "sis_res1_email_item", "sis_res1_lang_item", // "sis_res2_firstn_item", "sis_res2_lastn_item", "sis_res2_agen_item", "sis_res2_email_item", "sis_res2_lang_item", // "sis_res3_firstn_item", "sis_res3_lastn_item", "sis_res3_agen_item", "sis_res3_email_item", "sis_res3_lang_item", // "sis_res4_firstn_item", "sis_res4_lastn_item", "sis_res4_agen_item", "sis_res4_email_item", "sis_res4_lang_item", // "sis_res5_firstn_item", "sis_res5_lastn_item", "sis_res5_agen_item", "sis_res5_email_item", "sis_res5_lang_item", // "sis_res6_firstn_item", "sis_res6_lastn_item", "sis_res6_agen_item", "sis_res6_email_item", "sis_res6_lang_item", // "sis_res7_firstn_item", "sis_res7_lastn_item", "sis_res7_agen_item", "sis_res7_email_item", "sis_res7_lang_item", // "sis_res8_firstn_item", "sis_res8_lastn_item", "sis_res8_agen_item", "sis_res8_email_item", "sis_res8_lang_item", // "sis_res9_firstn_item", "sis_res9_lastn_item", "sis_res9_agen_item", "sis_res9_email_item", "sis_res9_lang_item", // "sis_res10_firstn_item", "sis_res10_lastn_item", "sis_res10_agen_item", "sis_res10_email_item", "sis_res10_lang_item"); buildTableWithItems(output, part, 6, new string[] { "First Name", "Last Name", "Relationship", "Agency", "Email", "Language", }, "sis_res1_firstn_item", "sis_res1_lastn_item", "sis_res1_reln_item", "sis_res1_agen_item", "sis_res1_email_item", "sis_res1_lang_item", "sis_res2_firstn_item", "sis_res2_lastn_item", "sis_res2_reln_item", "sis_res2_agen_item", "sis_res2_email_item", "sis_res2_lang_item", "sis_res3_firstn_item", "sis_res3_lastn_item", "sis_res3_reln_item", "sis_res3_agen_item", "sis_res3_email_item", "sis_res3_lang_item", "sis_res4_firstn_item", "sis_res4_lastn_item", "sis_res4_reln_item", "sis_res4_agen_item", "sis_res4_email_item", "sis_res4_lang_item", "sis_res5_firstn_item", "sis_res5_lastn_item", "sis_res5_reln_item", "sis_res5_agen_item", "sis_res5_email_item", "sis_res5_lang_item", "sis_res6_firstn_item", "sis_res6_lastn_item", "sis_res6_reln_item", "sis_res6_agen_item", "sis_res6_email_item", "sis_res6_lang_item", "sis_res7_firstn_item", "sis_res7_lastn_item", "sis_res7_reln_item", "sis_res7_agen_item", "sis_res7_email_item", "sis_res7_lang_item", "sis_res8_firstn_item", "sis_res8_lastn_item", "sis_res8_reln_item", "sis_res8_agen_item", "sis_res8_email_item", "sis_res8_lang_item", "sis_res9_firstn_item", "sis_res9_lastn_item", "sis_res9_reln_item", "sis_res9_agen_item", "sis_res9_email_item", "sis_res9_lang_item", "sis_res10_firstn_item", "sis_res10_lastn_item", "sis_res10_reln_item", "sis_res10_agen_item", "sis_res10_email_item", "sis_res10_lang_item"); output.drawY -= .3; output.appendSectionBreak(); buildSubheaderWithResults(output, part, "Person who entered this information", "sis_entry_firstn_item", "sis_entry_lastn_item"); if (options[OptionKey.includeComments]) { output.appendSectionBreak(); def_Items itm = formsRepo.GetItemByIdentifier("SIS-Prof1_PageNotes_item"); if (itm == null) { throw new Exception("could not find item with identifier " + "SIS-Prof1_PageNotes_item"); } string rv = GetSingleResponse(itm); output.appendSubHeaderOnNewPageIfNecessary("Other Pertinent Information", rv); //BuildItemResults(output, part, "SIS-Prof1_PageNotes_item"); output.drawY -= .3; } //output.appendWrappedText("Introduction to the SIS Report:", .36, 7.9, output.boldFont); }
//this is for the sections in the "Exceptional medical... needs" part private void PrintExceptMedNeedsTable(def_Parts part, PdfOutput output, def_Sections sct) { int nCols = 4; string[] headers = { sct.title, "", "Score", "Important \"To\" or \"For\"" }; double[] indents = { .5, .75, 5.6, 6.75 }; //headers output.drawY -= .1; for (int i = 0; i < nCols; i++) { output.DrawText(output.boldFont, output.fontSize, indents[i], output.drawY, headers[i]); } output.drawY += .13; output.appendSectionBreak(); output.drawY -= PdfOutput.itemSpacing; indents = new double[] { .5, .75, 5.73, 6.75 }; List <def_Items> itms = new List <def_Items>(); formsRepo.SortSectionItems(sct); foreach (def_SectionItems si in sct.def_SectionItems) { if (si.subSectionId == null) // NOTE: this case probably never occurs for this Part { itms.Add(formsRepo.GetItemById(si.itemId)); } else { def_Sections sctn = formsRepo.GetSubSectionById(si.subSectionId); formsRepo.SortSectionItems(sctn); foreach (def_SectionItems ssi in sctn.def_SectionItems) { if (ssi.subSectionId == null) { itms.Add(formsRepo.GetItemById(ssi.itemId)); } } } } int nRows = itms.Count() + 1; // Load the Values for (int row = 0; row < itms.Count; row++) { def_Items itm = itms[row]; formsRepo.GetItemResultByFormResItem(formResultId, itm.itemId); def_ItemResults itmResults = itm.def_ItemResults.SingleOrDefault(ir => (ir.formResultId == formResultId)); formsRepo.GetItemResultsResponseVariables(itmResults); foreach (def_ResponseVariables rv in itmResults.def_ResponseVariables) { rv.def_ItemVariables = formsRepo.GetItemVariableById(rv.itemVariableId); } output.drawY -= .1; for (int col = 0; col < nCols; col++) { string s = "ERROR"; switch (col) { case 0: s = (row + 1).ToString(); break; case 1: s = itm.label; break; case 2: def_ResponseVariables rv = itmResults.def_ResponseVariables.SingleOrDefault(r => r.def_ItemVariables.identifier.EndsWith("_ExMedSupport")); s = ((rv == null) ? "" : rv.rspValue); break; case 3: s = String.Empty; break; } output.DrawText(output.contentFont, output.fontSize, indents[col], output.drawY, s); } output.drawY -= PdfOutput.itemSpacing * 2.5; if (output.drawY < 1) { output.appendPageBreak(); } } output.drawY -= .1; output.DrawText(output.boldFont, output.fontSize, indents[1], output.drawY, "Page Notes:"); output.drawY -= PdfOutput.itemSpacing * 4; if (output.drawY < 1) { output.appendPageBreak(); } }
// This is for the sets of items that have 3 numerical response values private void BuildDetailedResponseTable(def_Parts part, PdfOutput output, def_Sections sct) { int nCols = 6; string[] headers = { sct.title, "", "Freq", "Time", "Type", "Important \"To\" or \"For\"" }; double[] indents = { .5, .75, 5.3, 5.6, 5.95, 6.75 }; //headers output.drawY -= .1; for (int i = 0; i < nCols; i++) { output.DrawText(output.boldFont, output.fontSize, indents[i], output.drawY, headers[i]); } output.drawY += .13; output.appendSectionBreak(); output.drawY -= PdfOutput.itemSpacing; indents = new double[] { .5, .75, 5.38, 5.73, 6.05, 6.75 }; List <def_Items> itms = formsRepo.GetSectionItems(sct); // Values for (int row = 0; row < itms.Count; row++) { def_Items itm = itms[row]; def_ItemResults itmResults = formsRepo.GetItemResultByFormResItem(formResultId, itm.itemId); formsRepo.GetItemResultsResponseVariables(itmResults); foreach (def_ResponseVariables rv in itmResults.def_ResponseVariables) { rv.def_ItemVariables = formsRepo.GetItemVariableById(rv.itemVariableId); } output.drawY -= .1; for (int col = 0; col < nCols; col++) { string s = "ERROR"; switch (col) { case 0: s = (row + 1).ToString(); break; case 1: s = itm.label; break; case 2: case 3: case 4: s = null; string suffix = SupportNeedsColumnSuffixes[col - 2]; try { //Debug.WriteLine("\titemvariableId= " + ivEnum.Current.itemVariableId); s = itmResults.def_ResponseVariables.SingleOrDefault(rv => rv.def_ItemVariables.identifier.EndsWith(suffix)).rspValue; } catch (System.NullReferenceException ex) { Debug.Print("for itemId " + itm.itemId + ", could not find responseVariable linked to itemVariableIdentifier with suffix \"" + suffix + "\""); Debug.Print(" NullReferenceException: " + ex.Message); } s = String.IsNullOrEmpty(s) ? "N/A" : s; break; case 5: s = String.Empty; break; } output.DrawText(output.contentFont, output.fontSize, indents[col], output.drawY, s); } output.drawY -= PdfOutput.itemSpacing * 2.5; if (output.drawY < 1) { output.appendPageBreak(); } } output.drawY -= .1; output.DrawText(output.boldFont, output.fontSize, indents[1], output.drawY, "Page Notes:"); output.drawY -= PdfOutput.itemSpacing * 4; if (output.drawY < 1) { output.appendPageBreak(); } }