protected void SetEditLink(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { int accessionId = (int)DataBinder.Eval(e.Row.DataItem, BOL.SpecimenAccession.SpecimenAccessionId); string refNum = DataBinder.Eval(e.Row.DataItem, Specimen.SpecimenReferenceNumber).ToString(); // determine visit filter string rowVisitType = QueryVisitType; // All view, determine correct visit, A, B, C... if (string.IsNullOrEmpty(QueryVisitType) && !string.IsNullOrEmpty(QuerySpecimenType) && !string.IsNullOrEmpty(refNum)) { string[] visits = { "A", "B", "C" }; foreach (string visit in visits) { // check if the visit type matches specimen ref num string visitSubString = ProtocolMgmtSpecimenController.GetSpecimenReferenceNumber(PatientStudyId, QuerySpecimenType, visit, ""); if (refNum.Contains(visitSubString)) { rowVisitType = visit; break; } } } string onclick = "editAccession('" + accessionId + "', '" + rowVisitType + "');"; e.Row.Attributes["onclick"] = onclick; } }
/// <summary> /// Gets a calulated specimen reference number based on the specified params /// </summary> /// <param name="studyId"></param> /// <param name="specimenType"></param> /// <param name="visitType"></param> /// <param name="specimenSeqNum"></param> /// <returns></returns> public static string GetSpecimenReferenceNumber(string studyId, string specimenType, string visitType, string specimenSeqNum) { // cleanup, Blood => B specimenType = !string.IsNullOrEmpty(specimenType) ? specimenType.Substring(0, 1).ToUpper() : ""; // special case if (specimenType == "B") { ProtocolMgmtSpecimenController controller = new ProtocolMgmtSpecimenController(); var defaultBloodSpecimens = controller.GetDefaultBloodSpecimens(""); string refNum = ""; string suffix = ""; int parse; if (int.TryParse(specimenSeqNum, out parse)) { int index = int.Parse(specimenSeqNum) - 1; if (index >= 0 && index < defaultBloodSpecimens.Length) { var specimenDefault = defaultBloodSpecimens[index]; suffix = specimenDefault.Suffix; refNum = string.Format(SPECIMEN_BLOOD_REFERENCE_FORMAT_STRING, studyId, suffix); } } return(refNum); } else { // return formatted specimen ref # string refNum = string.Format(SPECIMEN_TISSUE_REFERENCE_FORMAT_STRING, studyId, specimenType, visitType, specimenSeqNum); return(refNum); } }
/// <summary> /// Get a list of pre-generated Blood Specimen #s based on Trial /// </summary> /// <param name="protocolNum"></param> /// <param name="ptProtocolId"></param> /// <param name="studyId"></param> /// <param name="visit"></param> /// <returns></returns> public static ProtocolSpecimenAutoNumber[] GetBloodAutoSpecimenIds(string protocolNum, int ptProtocolId, string studyId, string visit) { ProtocolMgmtSpecimenController sc = new ProtocolMgmtSpecimenController(); var bloodSpecimenIds = sc.GetDefaultBloodSpecimens(protocolNum); SpecimenManagerDa da = new SpecimenManagerDa(); var specimens = da.GetSpecimenReport(ptProtocolId, null, "Blood"); var allSpecimentRefNum = specimens.AsEnumerable().Select(r => r[Specimen.SpecimenReferenceNumber].ToString()).Distinct(); int maxSeqNum = allSpecimentRefNum.Count(); List <ProtocolSpecimenAutoNumber> values = new List <ProtocolSpecimenAutoNumber>(); int maxSearch = allSpecimentRefNum.Count() + bloodSpecimenIds.Length; for (int i = 0; i < bloodSpecimenIds.Length; i++) { var bloodSpecimen = bloodSpecimenIds[i]; // sequence for (int seq = 1; seq <= maxSearch; seq++) { string specimenReferenceFormat = ""; bool containsNumber = System.Text.RegularExpressions.Regex.IsMatch(bloodSpecimen.Suffix, "^[0-9A-Z]+(-[0-9A-Z]+)+$"); // includes static #, exclude sequence # if (containsNumber) { if (!string.IsNullOrEmpty(visit)) { specimenReferenceFormat = "{0}-{1}-{2}"; } else { specimenReferenceFormat = "{0}-{2}"; } } else { specimenReferenceFormat = "{0}-{1}-{2}-{3}"; } string autoRefNum = string.Format(specimenReferenceFormat, studyId, visit, bloodSpecimen.Suffix, seq); if (!allSpecimentRefNum.Contains(autoRefNum)) { ProtocolSpecimenAutoNumber auto = new ProtocolSpecimenAutoNumber(autoRefNum, bloodSpecimen.SubType, bloodSpecimen.VialType); values.Add(auto); break; } } } return(values.ToArray()); }
private string GetSpecimenReferenceNumber(string specimentSeqNum) { return(ProtocolMgmtSpecimenController.GetSpecimenReferenceNumber(PatientStudyId, QuerySpecimenType, QueryVisitType, specimentSeqNum)); }
private void PopulateForm(int?specimenAccessionId) { bool isNewAccession = !specimenAccessionId.HasValue; int patientId = int.Parse(BaseDecryptedPatientId); int ptProtocolId = int.Parse(PatientProtocolId); // set study id PatientProtocol ptProtocol = new PatientProtocol(); if (!string.IsNullOrEmpty(PatientProtocolId)) { ptProtocol.Get(int.Parse(PatientProtocolId)); PtProtocolStudyId.Value = ptProtocol[PatientProtocol.PtProtocolStudyId].ToString(); } // populate SpecimenAccessions SpecimenAccession sa = new SpecimenAccession(); if (specimenAccessionId.HasValue) { sa.Get(specimenAccessionId.Value); base.PopulateForm(sa); // special case: needle PopulateNeedleUIField(sa); // special case: diagnostics for tissue if (QuerySpecimenType == QUERY_TISSUE) // && !string.IsNullOrEmpty(AccessionProcName.Text) && AccessionProcName.Text.StartsWith("Image-Guided", StringComparison.OrdinalIgnoreCase)) { PopulateDiagnostic(specimenAccessionId.Value); } } // populate Specimens grid DataView specimens; // STEP 1: get all accessions of this type, will filter later on specimens = da.GetSpecimenReport(ptProtocolId, null, QuerySpecimenType).DefaultView; var allSpecimentRefNum = specimens.Table.AsEnumerable().Select(r => r[Specimen.SpecimenReferenceNumber].ToString()).Distinct(); // STEP 2: generate an auto-calculated spec ref num for the patient (exclude currently assigned) autoGeneratedSpecimenRefNum.Clear(); // only auto-generate spec # if filtering by type + visit if (!string.IsNullOrEmpty(QuerySpecimenType) && !string.IsNullOrEmpty(QueryVisitType)) { int totalSpecimens = SpecimensGrid.BlankRows + specimens.Count; int start = 1; // find the max currently assigned reference num for (int seqNum = 1; seqNum <= totalSpecimens; seqNum++) { // check if currently assigned, else add to available bucket if (allSpecimentRefNum.Contains(GetSpecimenReferenceNumber(seqNum + ""))) { start += 1; } } // fill auto ref num autoGeneratedSpecimenRefNum.AddRange(Enumerable.Range(start, totalSpecimens).Select(seqNum => GetSpecimenReferenceNumber(seqNum + ""))); } // when no parent record specified, build estimated reference num, but do not popualte with exisiting data if (!specimenAccessionId.HasValue) { specimens.Table.Clear(); } // build restrictions List <string> restrictions = new List <string>(); // restrict to this accession if (specimenAccessionId.HasValue) { restrictions.Add(Specimen.SpecimenAccessionId + " = " + specimenAccessionId.Value); } // restrict to this type if (!string.IsNullOrEmpty(QuerySpecimenType)) { restrictions.Add(Specimen.SpecimenType + " = '" + QuerySpecimenType + "'"); // restrict to visit (requires specimen type) if (!string.IsNullOrEmpty(QueryVisitType)) { string refNumMatch = GetSpecimenReferenceNumber(""); restrictions.Add(Specimen.SpecimenReferenceNumber + " LIKE '" + PageUtil.EscapeSingleQuotesForSql(refNumMatch) + "%'"); } } if (restrictions.Count() > 0) { specimens.RowFilter = string.Join(" AND ", restrictions.ToArray()); specimens = new DataView(specimens.ToTable()); } else { specimens.RowFilter = ""; } // data binding // adjust subType heading DataControlField subTypeColumn = SpecimensGrid.Columns[1]; DataControlField vialTypeColumn = SpecimensGrid.Columns[2]; DataControlField processingMethodColumn = SpecimensGrid.Columns[3]; DataControlField specimenStatusColumn = SpecimensGrid.Columns[6]; if (QuerySpecimenType == QUERY_TISSUE) { // custom visits ?? bool customVisits = BuildSpecimenVisitTypes(QUERY_TISSUE, sa); subTypeColumn.HeaderText = "Sample Type"; // hide columns from UI foreach (DataControlField column in new DataControlField[] { subTypeColumn, subTypeColumn, vialTypeColumn }) { column.HeaderStyle.CssClass = "hidden"; column.ItemStyle.CssClass = "hidden"; } // set selection in parent Tissue_SpecimenSubType.Value = specimens.Count > 0 ? specimens[0][Specimen.SpecimenSubType].ToString() : ""; // blank rows SpecimensGrid.BlankRows = Math.Max(0, 6 - specimens.Count); SpecimensGrid.VisibleBlankRows = 1; if (SpecimensGrid.BlankRows == 0) { AddBtn.Visible = false; } if (specimens.Count != 0) { SpecimensGrid.VisibleBlankRows = 0; } } else if (QuerySpecimenType == QUERY_BLOOD) { // custom visits ?? bool customVisits = BuildSpecimenVisitTypes(QUERY_BLOOD, sa); // static visits if (!customVisits) { // default accession visit AccessionVisit.Value = "A"; AccessionVisit.Enabled = false; } AddBtn.Visible = true; subTypeColumn.HeaderText = "Tube Use"; // hide columns from UI foreach (DataControlField column in new DataControlField[] { processingMethodColumn }) { column.HeaderStyle.CssClass = "hidden"; column.ItemStyle.CssClass = "hidden"; } // update default blood specimens bloodAutoSpecimens = ProtocolMgmtSpecimenController.GetBloodAutoSpecimenIds(base.ProtocolNumber, (int)ptProtocol[PatientProtocol.PatientProtocolId], PtProtocolStudyId.Value, AccessionVisit.Enabled ? AccessionVisit.Value : ""); SpecimensGrid.BlankRows = Math.Max(0, 15 - specimens.Count); SpecimensGrid.VisibleBlankRows = specimens.Count > 0 ? 0 : (bloodAutoSpecimens.Length > 0 ? bloodAutoSpecimens.Length : 3); AddBtn.Visible = SpecimensGrid.BlankRows > 0; } SpecimensGrid.DataSource = specimens; SpecimensGrid.DataBind(); }