コード例 #1
0
 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;
     }
 }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
        /// <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());
        }
コード例 #4
0
 private string GetSpecimenReferenceNumber(string specimentSeqNum)
 {
     return(ProtocolMgmtSpecimenController.GetSpecimenReferenceNumber(PatientStudyId, QuerySpecimenType, QueryVisitType, specimentSeqNum));
 }
コード例 #5
0
        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();
        }