Exemple #1
0
        protected void SaveBtn_Click(object sender, ImageClickEventArgs e)
        {
            if (accessionId != 0)
            {
                //updating existing accession record
                SpecimenAccession accession = new SpecimenAccession();
                accession.Get(accessionId);
                CICHelper.SetBOValues(inputControlsRow.Controls, accession, patientId);
                accession.Save();

                specimensGrid.Save(accessionId);

                LoadAccesssionInfo(accessionId);
                BindSpecimensGrid(accessionId);

                Page.ClientScript.RegisterStartupScript(typeof(Page), "refreshParent", "refreshParent('" + EncryptPatientId(patientId.ToString()) + "','" + accessionId + "');", true);
            }
            else
            {
                //saving new accession
                SpecimenAccession newaccession = new SpecimenAccession();
                CICHelper.SetBOValues(inputControlsRow.Controls, newaccession, patientId);
                newaccession[SpecimenAccession.PatientId] = patientId;
                newaccession.Save();

                newAccessionId = int.Parse(newaccession[SpecimenAccession.SpecimenAccessionId].ToString());
                specimensGrid.Save(newAccessionId);

                LoadAccesssionInfo(newAccessionId);
                BindSpecimensGrid(newAccessionId);

                Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "refreshParent", "refreshParent('" + EncryptPatientId(patientId.ToString()) + "','" + newAccessionId + "');", true);
            }
        }
Exemple #2
0
        /// <summary>
        /// Saves the Diganostic + Imaging details, and adds related record
        /// </summary>
        /// <param name="specimenAccession"></param>
        private void SaveDiagnostic(SpecimenAccession specimenAccession)
        {
            int patientId           = (int)specimenAccession[SpecimenAccession.PatientId];
            int specimenAccessionId = (int)specimenAccession[SpecimenAccession.SpecimenAccessionId];
            // save Diagnostics
            int?diagnosticId = null;

            if (!string.IsNullOrEmpty(DiagnosticIdField.Value))
            {
                diagnosticId = int.Parse(DiagnosticIdField.Value);
            }
            Diagnostic diagnostic = new Diagnostic();

            // load diagnostic
            if (diagnosticId.HasValue)
            {
                diagnostic.Get(diagnosticId.Value);
            }
            // set required fields
            else
            {
                diagnostic[Diagnostic.PatientId]  = patientId;
                diagnostic[Diagnostic.DxDate]     = specimenAccession[SpecimenAccession.CollectDate];
                diagnostic[Diagnostic.DxDateText] = specimenAccession[SpecimenAccession.CollectDateText];
                diagnostic[Diagnostic.DxTarget]   = "Prostate";
            }
            // update type???
            diagnostic[Diagnostic.DxType] = AccessionProcName.Text;

            // set bizo value
            CICHelper.SetBOValues(Tissue_DiagnosticFields.Controls, diagnostic, patientId);
            // save diagnostic
            diagnostic.Save();
            // on update, link to SA
            if (diagnostic.PrimaryKeyHasValue)
            {
                diagnosticId            = (int)diagnostic[Diagnostic.DiagnosticId];
                DiagnosticIdField.Value = diagnosticId.Value.ToString();
                // create related Diagnostic
                RelatedRecord relatedDiagnostic = CreateRelatedDiagnostic(specimenAccessionId, diagnosticId.Value);
                // get ImageFindingProstate
                ImageFindingProstate finding = BusinessObject.GetByParent <ImageFindingProstate>(diagnosticId.Value).FirstOrDefault();
                // else, create
                if (finding == null)
                {
                    finding = new ImageFindingProstate();
                    finding[ImageFindingProstate.DiagnosticId] = diagnosticId.Value;
                }
                // set fields
                CICHelper.SetBOValues(Tissue_DiagnosticFields.Controls, finding, diagnosticId.Value);
                // update
                finding.Save();
            }
        }
        /// <summary>
        /// Dynamically set columns
        /// </summary>
        private void InitSpecimensGrid()
        {
            SpecimenAccession accession = new SpecimenAccession();
            Specimen specimen = new Specimen();
            var accessionFields = accession.FieldNames;
            var specimenFields = specimen.FieldNames;
            var specimenMetadata = CICHelper.GetCaisisInputControlsByTableName(specimen.TableName, "").ToDictionary(f => f.Field, f => f);
            //SpecimenInventory.Columns.Clear();
            foreach (var column in GetSpecimenColumns())
            {
                string fieldName = column.Key;
                string fieldLabel = column.Value;
                // get input
                CaisisTextBox defaultInput = new CaisisTextBox();
                ICaisisInputControl fieldInput = defaultInput;
                // special case: lookup controls map to distinct combo values
                if (specimenFields.Contains(fieldName) && specimenMetadata.ContainsKey(fieldName))
                {
                    fieldInput = specimenMetadata[fieldName];
                    // select, radio list, check list => combo box
                    if (fieldInput is ICaisisLookupControl && !(fieldInput is CaisisComboBox))
                        fieldInput = new CaisisComboBox();
                    fieldInput.Table = specimen.TableName;
                }

                // global
                fieldInput.Field = fieldName;
                fieldInput.FieldLabel = fieldLabel;
                fieldInput.ShowLabel = false;

                CaisisDataBoundField boundField = new CaisisDataBoundField(fieldInput);
                SpecimenInventory.Columns.Add(boundField);
            }
            // only enable specimen fields for edit
            SpecimenInventory.RowCreated += (o, e) =>
                {
                    var inputs = CICHelper.GetCaisisInputControls(e.Row);
                    foreach (var fieldInput in inputs)
                    {
                        if (fieldInput.Table == specimen.TableName)
                        {
                            fieldInput.Enabled = true;
                            // special lookup distinct
                            if (fieldInput is ICaisisLookupControl)
                                (fieldInput as ICaisisLookupControl).LookupDistinct = string.Format("{0};{1};{2}", specimen.TableName, fieldInput.Field, fieldInput.Field);
                        }
                        else
                        {
                            fieldInput.Enabled = false;
                        }
                    }
                };
        }
Exemple #4
0
        private void PopulateNeedleBizField(SpecimenAccession biz)
        {
            string gauge  = Tissue_Gauge.Value;
            string length = Tissue_Length.Value;
            string unit   = Tissue_Unit.Value;

            if (!string.IsNullOrEmpty(gauge + length + unit))
            {
                string needle = string.Format("{0}G {1} {2}", gauge, length, unit);
                biz[SpecimenAccession.AccessionProcInstrument] = needle;
            }
            biz.Save();
        }
Exemple #5
0
        private void PopulateNeedleUIField(SpecimenAccession biz)
        {
            string needle = biz[SpecimenAccession.AccessionProcInstrument].ToString();

            string[] pairs = needle.Split(' ');
            if (pairs.Length == 3)
            {
                string gauge  = pairs[0].Replace("G", "");;
                string length = pairs[1];
                string unit   = pairs[2];

                Tissue_Gauge.Value  = gauge;
                Tissue_Length.Value = length;
                Tissue_Unit.Value   = unit;
            }
        }
Exemple #6
0
        override protected void Page_Load(object sender, System.EventArgs e)
        {
            patientId = int.Parse(DecryptPatientId(Request.QueryString["patientId"].ToString()));

            Caisis.BOL.Patient ptObj = new Caisis.BOL.Patient();
            ptObj.Get(patientId);

            string    datasetSql    = CacheManager.GetDatasetSQL(Session[SessionKey.DatasetId]);
            DataTable identifiersdt = da.GetIdentifierByType(patientId, _identifierType, datasetSql);

            if (identifiersdt.Rows.Count >= 1)
            {
                identifier = identifiersdt.Rows[0]["Identifier"].ToString();
            }

            if (PermissionManager.HasPermission(PermissionManager.ViewPatientIdentifiers))
            {
                AccessionTitle.Text = "Specimen Accession for " + ptObj[Patient.PtFirstName].ToString() + " " + ptObj[Patient.PtLastName].ToString();
            }
            else
            {
                AccessionTitle.Text = "Specimen Accession for " + _identifierType + " : " + identifier;
            }

            if (!string.IsNullOrEmpty(Request.QueryString["specimenaccessionId"]))
            {
                accessionId = int.Parse(Request.QueryString["specimenaccessionId"].ToString());
            }
            // Get Accession
            sa = new SpecimenAccession();
            sa.Get(accessionId);
            if (!Page.IsPostBack)
            {
                LoadAccesssionInfo(accessionId);
                BindSpecimensGrid(accessionId);

                if (accessionId == 0)
                {
                    SetButtonStates(false, false, true, true, false);
                }
                else
                {
                    this.IsFormEnabled = false;
                    SetButtonStates(true, true, false, false, false);
                }
            }
        }
        protected override void Page_Load(object sender, System.EventArgs e)
        {
            patientId = Convert.ToInt32(DecryptPatientId(Request.QueryString["patientId"].ToString()));
            if (!string.IsNullOrEmpty(Request.QueryString["specimenaccessionId"]))
            {
                accessionId = int.Parse(Request.QueryString["specimenaccessionId"].ToString());
            }

            //get Accession
            sa = new SpecimenAccession();
            sa.Get(accessionId);

            if (!Page.IsPostBack)
            {
                LoadAccessionInfo();
            }
        }
Exemple #8
0
        /// <summary>
        /// Builds a list of custom visit types, returning if the list is custom (true) or default (false)
        /// </summary>
        /// <param name="type"></param>
        /// <param name="sa"></param>
        /// <returns></returns>
        private bool BuildSpecimenVisitTypes(string type, SpecimenAccession sa)
        {
            var visits = specimenController.GetSpecimenVisits(base.ProtocolNumber, type + " Specimens");

            if (visits.Count() > 0)
            {
                AccessionVisit.DataTextField  = "Key";
                AccessionVisit.DataValueField = "Value";
                AccessionVisit.DataSource     = visits;
                AccessionVisit.DataBind();
                // set value
                if (sa != null && sa.PrimaryKeyHasValue)
                {
                    AccessionVisit.Value = sa[SpecimenAccession.AccessionVisitType] + "";
                }
            }
            return(visits.Count() > 0);
        }
Exemple #9
0
        private int?SaveForm(int?specimenAccessionId)
        {
            bool isNewAccession = !specimenAccessionId.HasValue;
            int  patientId      = int.Parse(BaseDecryptedPatientId);
            // udpate SpecimenAccession
            SpecimenAccession sa = new SpecimenAccession();

            // load
            if (specimenAccessionId.HasValue)
            {
                sa.Get(specimenAccessionId.Value);
            }
            CICHelper.SetBOValues(this.Controls, sa, patientId);
            // special case: needle
            PopulateNeedleBizField(sa);
            sa.Save();
            // validate accession data
            if (!sa.PrimaryKeyHasValue)
            {
                return(null);
            }
            specimenAccessionId = (int)sa[SpecimenAccession.SpecimenAccessionId];

            // special case: diagnostics for tissue
            if (QuerySpecimenType == QUERY_TISSUE && !string.IsNullOrEmpty(AccessionProcName.Text) && AccessionProcName.Text.StartsWith("Image-Guided", StringComparison.OrdinalIgnoreCase))
            {
                SaveDiagnostic(sa);
            }
            else if (specimenAccessionId.HasValue && !string.IsNullOrEmpty(DiagnosticIdField.Value))
            {
                int diagnosticId = int.Parse(DiagnosticIdField.Value);
                DeleteRelatedDiagnostic(specimenAccessionId.Value, diagnosticId);
            }

            /*
             *  SPECIMENS: for new accessions and single field udpates, force save/update
             */
            string selectedTissueSubType = Tissue_SpecimenSubType.Value;
            Dictionary <string, List <int?> > validation = new Dictionary <string, List <int?> >();

            foreach (GridViewRow row in SpecimensGrid.Rows)
            {
                int rowIndex = row.RowIndex;
                ICaisisInputControl specimenIdField = row.FindControl(Specimen.SpecimenId) as ICaisisInputControl;
                ICaisisInputControl refNumField     = row.FindControl(Specimen.SpecimenReferenceNumber) as ICaisisInputControl;
                ICaisisInputControl subTypeField    = row.FindControl(Specimen.SpecimenSubType) as ICaisisInputControl;

                if (QuerySpecimenType == QUERY_TISSUE)
                {
                    subTypeField.Value = selectedTissueSubType;
                }
                if (isNewAccession || forceSpecimenUpdate)
                {
                    // only for rows with a reference #
                    if (!string.IsNullOrEmpty(refNumField.Value) && !SpecimensGrid.DirtyRows.Contains(rowIndex))
                    {
                        SpecimensGrid.DirtyRows.Add(rowIndex);
                    }
                }
                // validation
                int?   specimenId = null;
                string specimenReferenceNumber = refNumField.Value;
                if (!string.IsNullOrEmpty(specimenReferenceNumber))
                {
                    if (!string.IsNullOrEmpty(specimenIdField.Value))
                    {
                        specimenId = int.Parse(specimenIdField.Value);
                    }
                    validation.Adjoin(specimenReferenceNumber, new List <int?>());
                    validation[specimenReferenceNumber].Add(specimenId);
                }
            }
            List <string> currentDuplicates  = new List <string>();
            List <string> externalDuplicates = new List <string>();

            // TODO: refactor
            Caisis.Data.Database db = new Data.Database();
            string db_table         = new Specimen().TableName;

            if (validation.Count() > 0)
            {
                // validate against siblings
                currentDuplicates.AddRange(validation.Where(a => a.Value.Count() > 1).Select(a => a.Key));
                if (currentDuplicates.Count() == 0)
                {
                    // validate against db
                    foreach (var pair in validation)
                    {
                        bool   specimenValid           = true;
                        string specimenReferenceNumber = pair.Key;
                        foreach (int?specimenId in pair.Value)
                        {
                            Dictionary <string, object> db_query = new Dictionary <string, object>()
                            {
                                { Specimen.SpecimenReferenceNumber, specimenReferenceNumber }
                            };
                            var specimens = Caisis.BOL.BusinessObject.GetByFields <Specimen>(db_query);
                            var found     = new List <int>();
                            db.Select(db_table, Specimen.SpecimenId, new string[] { Specimen.SpecimenId }, new string[0], db_query, (r) =>
                            {
                                int rowSpecimenId = r.GetInt32(r.GetOrdinal(Specimen.SpecimenId));
                                found.Add(rowSpecimenId);
                                return(true);
                            });
                            // OK, if doesn't exist in db or if current specimen already assigned to #
                            specimenValid = found.Count() == 0 || (specimenId.HasValue && found.Contains(specimenId.Value));
                        }
                        if (!specimenValid)
                        {
                            externalDuplicates.Add(specimenReferenceNumber);
                        }
                    }
                }
            }
            if (currentDuplicates.Count() > 0)
            {
                string message = "Unable to update the form. The following Specimen IDs were entered more than once. [" + string.Join(",", currentDuplicates.ToArray()) + "]";
                throw new ClientException(message);
            }
            else if (externalDuplicates.Count() > 0)
            {
                string message = "Unable to update the form. The following Specimen IDs already exist is the system. [" + string.Join(",", externalDuplicates.ToArray()) + "]";
                throw new ClientException(message);
            }
            // OK
            else
            {
                // save specimens
                SpecimensGrid.Save(specimenAccessionId.Value);

                // populate form
                this.PopulateForm(specimenAccessionId.Value);
            }

            return(specimenAccessionId);
        }
Exemple #10
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();
        }