/// <summary> /// Add a new Lesion (DxImageFindings) record /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void AddLesionClick(object sender, EventArgs e) { // Get field values for add adding new lesion Control petFields = NewDxImageFindingPanel.FindControl("DX_PET_Fields"); Control ctMRIFields = NewDxImageFindingPanel.FindControl("DX_CTMRI_Fields"); Control shareFields = NewDxImageFindingPanel.FindControl("DX_SHARED_Fields"); Control mainFields = ImageType == "PET" ? petFields : ctMRIFields; ICaisisInputControl diagnosticField = FindInputControl(mainFields, ImageFinding.DiagnosticId); string diagnosticId = diagnosticField.Value; if (!string.IsNullOrEmpty(diagnosticId)) { int diagId = int.Parse(diagnosticId); ImageFinding newFinding = new ImageFinding(); newFinding[ImageFinding.DiagnosticId] = diagId; CICHelper.SetBOValues(mainFields.Controls, newFinding, diagId); // special fields string imgFindTarget = FindInputControl(mainFields, ImageFinding.ImgFindTarget).Value; int imgFindGroupNum = GetNextGroupNum(); newFinding[ImageFinding.ImgFindGroupNum] = imgFindGroupNum; newFinding[ImageFinding.ImgFindTarget] = imgFindTarget; newFinding.Save(); } // Save Matrix MainSaveBtnClick(sender, e); }
/// <summary> /// Updates all "dirty" DxImageFinding Rptr items. /// </summary> private void UpdateDxImageFindings() { // Iterate through each "dirty" image finding record foreach (RepeaterItem item in dirtyDxImageFindings) { // Locate PriKey Field for ImageFinding CaisisHidden imageFindingId = item.FindControl("ImageFindingId") as CaisisHidden; // dirtyItems index is same as Diganostic column index, to find diagnosticid CaisisHidden diagnosticId = DiagnosticsHeaderRptr.Items[item.ItemIndex].FindControl("DiagnosticIdField") as CaisisHidden; // Main Data Entry Field Control petFields = item.FindControl("PET_Fields"); Control ctMRIFields = item.FindControl("CTMRI_Fields"); Control shareFields = item.FindControl("SHARED_Fields"); Control mainFields = ImageType == "PET" ? petFields : ctMRIFields; CaisisTextBox mainDataEntryField = FindInputControl(mainFields, MainDataEntryField) as CaisisTextBox; ImageFinding biz = new ImageFinding(); // determine if updating if (!string.IsNullOrEmpty(imageFindingId.Value)) { int priKey = int.Parse(imageFindingId.Value); // deleting and go to next item if (string.IsNullOrEmpty(mainDataEntryField.Value)) { biz.Delete(priKey); continue; } // updating else { biz.Get(priKey); } } // Get Parent Key int parKey = int.Parse(diagnosticId.Value); // Set BusinessObject fields based on controls in data entry cell CICHelper.SetBOValues(shareFields.Controls, biz, parKey); CICHelper.SetBOValues(mainFields.Controls, biz, parKey); // save Image Finding biz.Save(); } dirtyDxImageFindings.Clear(); }
/// <summary> /// Initalizes variables and attaches event handlers for populating/updating DxImageFindingFields /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void InitEvents(object sender, EventArgs e) { List <CaisisCheckBox> checkBoxList = new List <CaisisCheckBox>(IMG_FIND_SUBSITES.Length); // setup event handlers foreach (string bodyPart in IMG_FIND_SUBSITES) { // Main Checkbox for each body part CaisisCheckBox subSiteCheckBox = this.FindControl(bodyPart + "_Check") as CaisisCheckBox; checkBoxList.Add(subSiteCheckBox); CaisisHidden basicSubSiteId = this.FindControl(bodyPart + "_BasicId") as CaisisHidden; string basicFindSubSite = bodyPart; // Populate basic basic image finding by subsite this.PopulateDxImagingField += new DxImageFindingEvent(delegate(int diagnosticId) { // Check if a basic record is found for subsite and set prikey and check box DataRow basicFind = FindDxBoneRecordBasic(diagnosticId, basicFindSubSite); if (basicFind != null) { basicSubSiteId.Value = basicFind[ImageFinding.DxImageFindingId].ToString(); subSiteCheckBox.Checked = true; } }); // Update event for basic image finding by subsite, no ImgFindNew,ImgFindSide or ImgFindAP DxImageFindingEvent basicSubSiteUpdateEvent = new DxImageFindingEvent(delegate(int diagnosticId) { ImageFinding biz = new ImageFinding(); if (subSiteCheckBox.Checked) { if (!string.IsNullOrEmpty(basicSubSiteId.Value)) { biz.Get(int.Parse(basicSubSiteId.Value)); } else { biz[ImageFinding.DiagnosticId] = diagnosticId; } biz[ImageFinding.ImgFindSite] = ImageTypes[0]; biz[ImageFinding.ImgFindSubsite] = basicFindSubSite; biz.Save(); // update prikey field basicSubSiteId.Value = biz[ImageFinding.DxImageFindingId].ToString(); } else { if (!string.IsNullOrEmpty(basicSubSiteId.Value)) { biz.Delete(int.Parse(basicSubSiteId.Value)); // update prikey field basicSubSiteId.Value = string.Empty; } } }); // When subsite checkbox changed, mark as dirty subSiteCheckBox.ValueChanged += GetValueChangeEventHandler(subSiteCheckBox, basicSubSiteUpdateEvent); // DETAIL ORIENTED FIELDS // iterate through specific subsite fields and set update and populate events foreach (string view in IMG_FIND_AP) { foreach (string side in IMG_FIND_SIDES) { CaisisTextBox bodyPartViewSide = this.FindControl(view + "_" + bodyPart + "_" + side) as CaisisTextBox; CaisisHidden bodyPartViewSideId = this.FindControl(view + "_" + bodyPart + "_" + side + "_Id") as CaisisHidden; // Static Values string imgFindAP = view; string imgFindSide = side; string imgFindSubsite = bodyPart; // EVENT HANDLER which populates fields DxImageFindingEvent populateEvent = new DxImageFindingEvent(delegate(int diagnosticId) { // Populate when not posting back DataRow foundBodyPartViewSide = FindDxBoneRecord(diagnosticId, imgFindAP, imgFindSide, imgFindSubsite); if (bodyPartViewSideId != null && foundBodyPartViewSide != null) { // set pri key bodyPartViewSideId.Value = foundBodyPartViewSide[ImageFinding.DxImageFindingId].ToString(); // set textbox value bodyPartViewSide.Value = foundBodyPartViewSide[ImageFinding.ImgFindNew].ToString(); // check box to indicate record found and has value subSiteCheckBox.Checked = true; // COLLECT MORE ACTIVATED CollectMore.Checked = true; } }); // EVENT HANDLER which updates the DxImageFindings table DxImageFindingEvent updateEvent = new DxImageFindingEvent(delegate(int diagnosticId) { // Create new Biz ImageFinding biz = new ImageFinding(); // load record if exists if (!string.IsNullOrEmpty(bodyPartViewSideId.Value)) { int priKey = int.Parse(bodyPartViewSideId.Value); if (!string.IsNullOrEmpty(bodyPartViewSide.Value)) { biz.Get(priKey); } // otherwise, do not save empty ImgFindNew, remove record else { biz.Delete(priKey); return; } } else { // set par key field biz[ImageFinding.DiagnosticId] = diagnosticId; } // set ImgFindNew from text field biz[ImageFinding.ImgFindNew] = bodyPartViewSide.Value; // Get static values from dictionary biz[ImageFinding.ImgFindSite] = ImageTypes[0]; biz[ImageFinding.ImgFindAP] = imgFindAP; biz[ImageFinding.ImgFindSide] = imgFindSide; biz[ImageFinding.ImgFindSubsite] = imgFindSubsite; // save/update record biz.Save(); // update prikeyfield bodyPartViewSideId.Value = biz[ImageFinding.DxImageFindingId].ToString(); // Since we're creating a specific subsite find location, we need to remove generic subsite find record if (!string.IsNullOrEmpty(basicSubSiteId.Value)) { ImageFinding basicFinding = new ImageFinding(); biz.Delete(int.Parse(basicSubSiteId.Value)); // update basic finding field basicSubSiteId.Value = string.Empty; } }); // Attach event for tracking dirty fields bodyPartViewSide.ValueChanged += GetValueChangeEventHandler(bodyPartViewSide, updateEvent);; // Attach events for populating fields this.PopulateDxImagingField += new DxImageFindingEvent(populateEvent); } } } // EVENTS for Total Lesions compared to BASELINE SCAN //// Create populating event which will set hidden field and radio button value if an image finding found //DxImageFindingEvent totalNewLesionsUpdate = new DxImageFindingEvent(delegate(int diagnosticId) // { // DataRow found = FindDxBoneRecord(diagnosticId); // if (found != null) // { // DxTotalNumNewTumors.Value = found[ImageFinding.ImgFindNew].ToString(); // TotalNewLesionsId.Value = found[ImageFinding.DxImageFindingId].ToString(); // } // }); //this.PopulateDxImagingField += new DxImageFindingEvent(totalNewLesionsUpdate); //// Create an update event which is used for updating the total number of lesions //DxImageFindingEvent basicBareUpdate = new DxImageFindingEvent(delegate(int diagnosticId) //{ // ImageFinding biz = new ImageFinding(); // if (!string.IsNullOrEmpty(TotalNewLesionsId.Value)) // { // biz.Get(int.Parse(TotalNewLesionsId.Value)); // } // else // { // biz[ImageFinding.DiagnosticId] = diagnosticId; // } // //biz[ImageFinding.ImgFindNew] = DxTotalNumNewTumors.Value; // biz[ImageFinding.ImgFindNotes] = "New total findings compared to BASELINE SCAN."; // biz[ImageFinding.ImgFindSite] = ImageTypes[0]; // // var q = // //from c in checkBoxList // //let v = c.Value // //where c.Checked // //select v; // //string checkedValues = string.Join(",", checkBoxList.Where(c => c.Checked).Select(c => c.Value).ToArray()); // biz.Save(); //}); //// When chnaging total lesion, trigger dirty field //DxTotalNumNewTumors.ValueChanged += GetValueChangeEventHandler(DxTotalNumNewTumors, basicBareUpdate); }
/// <summary> /// Inserts/Updates the Diagnostic record in the specific container, i.e., RepeaterItem, Control, etc... /// </summary> /// <param name="fieldsContainer"></param> /// <param name="patientId"></param> /// <returns></returns> private Diagnostic UpdateDiagnosticsByContainer(Control fieldsContainer, int patientId) { Control petFields = fieldsContainer.FindControl("PET_Fields"); Control ctMRIFields = fieldsContainer.FindControl("CTMRI_Fields"); Control shareFields = fieldsContainer.FindControl("SHARED_Fields"); Control mainFields = ImageType == "PET" ? petFields : ctMRIFields; CaisisHidden diagIdField = fieldsContainer.FindControl("DiagnosticIdField") as CaisisHidden; Diagnostic biz = new Diagnostic(); int? diagnosticId = null; if (!string.IsNullOrEmpty(diagIdField.Value)) { diagnosticId = int.Parse(diagIdField.Value); biz.Get(diagnosticId.Value); } // set main fields CICHelper.SetBOValues(shareFields.Controls, biz, patientId); CICHelper.SetBOValues(mainFields.Controls, biz, patientId); biz.Save(); // update key diagnosticId = (int)biz[Diagnostic.DiagnosticId]; diagIdField.Value = diagnosticId.ToString(); // special case: updated/insert PET image findings if (mainFields == petFields && diagnosticId.HasValue) { // containers are named by index Control boneFields = petFields.FindControl("PET_Fields_Finding0"); Control softTissueFields = petFields.FindControl("PET_Fields_Finding1"); Control lymphNodeFields = petFields.FindControl("PET_Fields_Finding2"); // generic insert/update logic foreach (Control petFindingContainer in new Control[] { boneFields, softTissueFields, lymphNodeFields }) { ImageFinding findingBiz = new ImageFinding(); ICaisisInputControl findingKeyField = FindInputControl(petFindingContainer, ImageFinding.DxImageFindingId); // only continue if fields have values bool fieldsHaveData = (from input in CICHelper.GetCaisisInputControls(petFindingContainer) where input != findingKeyField && !string.IsNullOrEmpty(input.Value) select input).Count() > 0; // update if (!string.IsNullOrEmpty(findingKeyField.Value)) { int dxImageFindingId = int.Parse(findingKeyField.Value); findingBiz.Get(dxImageFindingId); } // insert else if (fieldsHaveData) { // !important, mark special DxImageFinding status for later retrieval (bone/soft tissue) if (petFindingContainer == boneFields) { findingBiz[ImageFinding.ImgFindStatus] = PET_SCAN_LOCATION_BONE; } else if (petFindingContainer == softTissueFields) { findingBiz[ImageFinding.ImgFindStatus] = PET_SCAN_LOCATION_SOFT_TISSUE; } else if (petFindingContainer == lymphNodeFields) { findingBiz[ImageFinding.ImgFindStatus] = PET_SCAN_LOCATION_NYMPH_NODE; } } // if field have no data on new records, ignore, do not insert else { continue; } // set fields and update CICHelper.SetBOValues(petFindingContainer.Controls, findingBiz, diagnosticId.Value); findingBiz.Save(); findingKeyField.Value = findingBiz[ImageFinding.DxImageFindingId].ToString(); } // udpate/insert special findings datagrids ExtendedGridView hottestGrid = petFields.FindControl("DxGrid1") as ExtendedGridView; ExtendedGridView newGrid = petFields.FindControl("DxGrid2") as ExtendedGridView; if (hottestGrid != null && newGrid != null) { string type = Request.Form["NewLesionsGroup_Type"]; // update grids foreach (ExtendedGridView grid in new ExtendedGridView[] { hottestGrid, newGrid }) { // special fix, set ImgFindGroupNum foreach (GridViewRow row in grid.Rows) { int groupNum = row.RowIndex + 1; var imgFindGroupField = FindInputControl(row, ImageFinding.ImgFindGroupNum); imgFindGroupField.Value = groupNum.ToString(); } if ((grid == hottestGrid && type == "Hottest") || (grid == newGrid && type == "New")) { grid.Save(diagnosticId.Value); } } } } return(biz); }