Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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();
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }