private void LoadAccesssionInfo(int accId) { sa.Get(accId); CICHelper.SetFieldValues(this.inputControlsRow.Controls, sa); string accDate = sa["AccessionDate"].ToString(); if (!string.IsNullOrEmpty(accDate)) { int index = accDate.IndexOf(@" "); AccCollectionDate.Value = accDate.Substring(0, index); } SetEnteredUpdatedLockedInfo(); }
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); } }
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(); } }
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); }
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(); }