/// <summary> /// Constructs a new <see cref="PatientNode"/> using actual values from attributes in the given <see cref="DicomAttributeCollection"/>. /// </summary> /// <param name="dicomDataSet">The data set from which to initialize this node.</param> public PatientNode(DicomAttributeCollection dicomDataSet) { _studies = new StudyNodeCollection(this); _patientId = dicomDataSet[DicomTags.PatientId].GetString(0, ""); _name = dicomDataSet[DicomTags.PatientsName].GetString(0, ""); _birthdate = DicomConverter.GetDateTime(dicomDataSet[DicomTags.PatientsBirthDate].GetDateTime(0), dicomDataSet[DicomTags.PatientsBirthTime].GetDateTime(0)); _sex = DicomConverter.GetSex(dicomDataSet[DicomTags.PatientsSex].GetString(0, "")); }
/// <summary> /// Constructs a new <see cref="PatientNode"/> using default values. /// </summary> public PatientNode() { _studies = new StudyNodeCollection(this); _patientId = string.Format("PN{0}", this.Key); _name = "Unnamed Patient"; _birthdate = null; _sex = PatientSex.Undefined; }
/// <summary> /// Copy constructor /// </summary> /// <param name="source"></param> /// <param name="copyDescendants"></param> private PatientNode(PatientNode source, bool copyDescendants) { _studies = new StudyNodeCollection(this); _patientId = source._patientId; _name = source._name; _birthdate = source._birthdate; _sex = source._sex; if (copyDescendants) { foreach (StudyNode study in source._studies) { _studies.Add(study.Copy(true)); } } }
/// <summary> /// Gets a patient sex CS string based on a <see cref="PatientSex"/> enumeration, using an empty string for <see cref="PatientSex.Undefined"/> /// </summary> /// <param name="sex"></param> /// <returns></returns> public static string SetSex(PatientSex sex) { switch (sex) { case PatientSex.Male: return("M"); case PatientSex.Female: return("F"); case PatientSex.Other: return("O"); case PatientSex.Undefined: default: return(""); } }
public static string ToDcmSex(PatientSex theSex) { string res = "U"; switch (theSex) { case PatientSex.Male: res = "M"; break; case PatientSex.Female: res = "F"; break; case PatientSex.Other: res = "O"; break; default: break; } return(res); }
public Guid Execute(CreatePatientModel model) { var firstName = PatientFirstName.Create(model.FirstName); var middleName = PatientMiddleName.Create(model.MiddleName); var lastName = PatientLastName.Create(model.LastName); var dateOfBirth = PatientDateOfBirth.Create(model.DateOfBirth); var placeOfBirth = PatientPlaceOfBirth.Create(model.PlaceOfBirth); var sex = PatientSex.Create(model.Sex); var occupation = PatientOccupation.Create(model.Occupation); var patientType = PatientType.Create(model.PatientType); var patient = Patient.Create(firstName, middleName, lastName, dateOfBirth, placeOfBirth, occupation, sex, patientType); _databaseService.PatientsRepository.Add(patient); return(patient.Id); }
public void Execute(UpdatePatientModel model) { var dateOfBirth = PatientDateOfBirth.Create(model.DateOfBirth); var sex = PatientSex.Create(model.Sex); var patientType = PatientType.Create(model.PatientType); var firstName = PatientFirstName.Create(model.FirstName); var middleName = PatientMiddleName.Create(model.MiddleName); var lastName = PatientLastName.Create(model.LastName); var occupation = PatientOccupation.Create(model.Occupation); var placeOfBirth = PatientPlaceOfBirth.Create(model.PlaceOfBirth); var patient = _databaseService.PatientsRepository.GetById(model.Id); patient.FirstName = firstName; patient.MiddleName = middleName; patient.LastName = lastName; patient.DateOfBirth = dateOfBirth; patient.PatientType = patientType; patient.Occupation = occupation; patient.PlaceOfBirth = placeOfBirth; patient.Sex = sex; _databaseService.PatientsRepository.Update(patient); }
/// <summary> /// Gets a patient sex CS string based on a <see cref="PatientSex"/> enumeration, using an empty string for <see cref="PatientSex.Undefined"/> /// </summary> /// <param name="sex"></param> /// <returns></returns> public static string SetSex(PatientSex sex) { switch (sex) { case PatientSex.Male: return "M"; case PatientSex.Female: return "F"; case PatientSex.Other: return "O"; case PatientSex.Undefined: default: return ""; } }
public static string GetDisplayedName(this PatientSex sex) => EnumHelper <PatientSex> .GetDisplayedValue(sex);
private void saveNewPatientButton_Click(object sender, RoutedEventArgs e) { //here comes the code for saving a new patient // first check inputs string _newPatientId = patientIdTextBox.Text; string _newPatientFirstName = patientFirstNameTextBox.Text; string _newPatientLastName = patientLastNameTextBox.Text; string _newPatientComment = patientCommentTextBox.Text; DateTime _newPatientBirthDate = new DateTime(1900, 1, 1); try { _newPatientBirthDate = (DateTime)patientBirthDate.SelectedDate; } catch { } int _newPatientSexIndex = patientSexComboBox.SelectedIndex; PatientSex _newPatientSex = PatientSex.N; switch (_newPatientSexIndex) { case 0: _newPatientSex = PatientSex.F; break; case 1: _newPatientSex = PatientSex.M; break; case 2: _newPatientSex = PatientSex.N; break; case 3: _newPatientSex = PatientSex.O; break; } //patientSexComboBox.SelectedItem as PatientSex; DateTime _newPatientCreationTime = DateTime.Now; // create new study folder string path = fileParameters.RSOMdataFolder + "\\study" + _newPatientId; if (Directory.Exists(path)) { Console.WriteLine("That study exists already."); System.Windows.MessageBox.Show("That study exists already. Please change ID"); return; } else { try { Directory.CreateDirectory(@path); } catch { System.Windows.MessageBox.Show("Not able to create new patient folder. Please check permissions"); } } // Create patient Study nod-file and save data XDocument objXDoc = new XDocument( new XElement("DataModelPatient", new XElement("FriendlyName", ""), new XElement("CreationTime", _newPatientCreationTime.ToString("o")), new XElement("Comment", _newPatientComment), new XElement("FirstName", _newPatientFirstName), new XElement("LastName", _newPatientLastName), new XElement("Id", _newPatientId), new XElement("BirthDate", _newPatientBirthDate.ToString("o")), new XElement("Sex", _newPatientSex.ToString()), new XElement("LastExam", "") ) ); objXDoc.Declaration = new XDeclaration("1.0", "utf-8", "true"); // string filename = path + "\\study" + _newPatientId + studyParameters.PatientFileNameExtension; objXDoc.Save(@filename); // Add to patient List DataModelPatient _newCreatedPatient = (new DataModelPatient { FirstName = _newPatientFirstName, LastName = _newPatientLastName, Id = _newPatientId, BirthDate = _newPatientBirthDate, Sex = _newPatientSex, Comment = _newPatientComment, FriendlyName = "", CreationTime = _newPatientCreationTime, PatientFilePath = path }); patientList.Add(_newCreatedPatient); studyParameters.highestCurrentStudyId = Convert.ToInt32(_newPatientId); // //ViewModelPatient selected = patientsListView.SelectedItem as ViewModelPatient; //selectAndScrollToPatientListViewItem(selected); // fill the patient details with last selected patient //fillPatientDetails(_newCreatedPatient); patientsListView.SelectedItem = _newCreatedPatient; patientsListView.Items.Refresh(); EditingNewPatient = false; // Change back GUI behaviour patientsListView.IsEnabled = true; deletePatientButton.IsEnabled = true; clearFilterButton.IsEnabled = true; filterTextBox.IsEnabled = true; selectButton.Visibility = Visibility.Visible; saveNewPatientButton.Visibility = Visibility.Collapsed; }
public void InitiatePatientList() { patientList.Clear(); try { if (!Directory.Exists(fileParameters.RSOMdataFolder)) { System.Windows.MessageBox.Show("Couldn't load patient list. Directory doesn't exist: " + fileParameters.RSOMdataFolder); return; } // Get all directories in study folder string[] patientsPaths = Directory.GetDirectories(fileParameters.RSOMdataFolder); string patientMetaXMLPath; string patientStudyName; string studyNodePath; foreach (string path in patientsPaths) { // Combine paths to get the patientMetaData-file patientStudyName = System.IO.Path.GetFileName(path); patientMetaXMLPath = System.IO.Path.Combine(path, patientStudyName + studyParameters.PatientFileNameExtension); studyNodePath = System.IO.Path.Combine(path, patientStudyName + studyParameters.StudyFileExtension); //if (!File.Exists(studyNodePath)) // continue; if (File.Exists(patientMetaXMLPath)) { // Open Patient.Metadata-file XmlDocument xml = new XmlDocument(); try { xml.Load(@patientMetaXMLPath); } catch { Console.Write("ERROR Loading Data from Study Folder '" + patientMetaXMLPath + "'.\n"); return; } try { string _firstName = xml.SelectSingleNode("DataModelPatient/FirstName").InnerText; string _lastName = xml.SelectSingleNode("DataModelPatient/LastName").InnerText; string _birthDateString = xml.SelectSingleNode("DataModelPatient/BirthDate").InnerText; DateTime _birthDate = Convert.ToDateTime(_birthDateString); string _id = xml.SelectSingleNode("DataModelPatient/Id").InnerText; string _sexString = xml.SelectSingleNode("DataModelPatient/Sex").InnerText; string _lastExamString = xml.SelectSingleNode("DataModelPatient/LastExam").InnerText; DateTime _lastExam = DateTime.Now; if (_lastExamString != "") { _lastExam = Convert.ToDateTime(_lastExamString); } string _comment = xml.SelectSingleNode("DataModelPatient/Comment").InnerText; string _creationTimeString = xml.SelectSingleNode("DataModelPatient/CreationTime").InnerText; //DateTime _creationTime = DateTime.ParseExact(_creationTimeString, "yyyy-MM-ddTHH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture) DateTime _creationTime = Convert.ToDateTime(_creationTimeString); string _friendlyName = xml.SelectSingleNode("DataModelPatient/FriendlyName").InnerText; PatientSex _sex = PatientSex.N; switch (_sexString) { case "F": _sex = PatientSex.F; break; case "M": _sex = PatientSex.M; break; case "N": _sex = PatientSex.N; break; case "O": _sex = PatientSex.O; break; } //DateTime _birthDate = new DateTime(Convert.ToInt32(_birthDateString.Substring(0, 4)), Convert.ToInt32(_birthDateString.Substring(5, 2)), Convert.ToInt32(_birthDateString.Substring(8, 2))); patientList.Add(new DataModelPatient { FirstName = _firstName, LastName = _lastName, Id = _id, BirthDate = _birthDate, Sex = _sex, Comment = _comment, FriendlyName = _friendlyName, LastExam = _lastExam, CreationTime = _creationTime, PatientFilePath = path }); //check the patient ID , and save it if it is higher then the previous one. This will get you get the max current patient ID int _actualLoadedID = Convert.ToInt32(_id); if (_actualLoadedID > studyParameters.highestCurrentStudyId) { studyParameters.highestCurrentStudyId = _actualLoadedID; } } catch { Console.Write("ERROR reading Study Meta Data: '" + patientMetaXMLPath + "'.\n"); return; } //patientDM = DataModelSerialization.LoadFromPath<DataModelPatient>(patientMetaXMLPath, Log); //TODO Remove PatientSex.O enum // if (patientDM.Sex == PatientSex.O) // { // patientDM.Sex = PatientSex.M; //// DataModelSerialization.SaveToPath(patientDM, patientMetaXMLPath, Log); // } // patientDM.PatientFilePath = patientMetaXMLPath; //ViewModelPatient patientVM = new ViewModelPatient(); //patientVM.InitializePlugin(patientDM.FriendlyName, new DataModelCatalogItem(patientDM), this); //patientVM.CommandLoad.Execute(null); //patientVM.CheckDuplicateId += patientVM_CheckDuplicateId; //_patients.Add(patientVM); } //added for testing, will create a default patient file .ptm for every study found in RootDirectory //else //{ // random rg = new random(); // datamodelpatient mockpatientdm = new datamodelpatient() // { // birthdate = datetime.now, // comment = "automatically created patient meta file.", // creationtime = datetime.now, // firstname = "first " + patientstudyname, // lastname = "last " + patientstudyname, // friendlyname = "friendly " + patientstudyname, // sex = (patientsex)(rg.next(3)), // lastexam = datetime.minvalue, // id = patientstudyname, // patientfilepath = patientmetaxmlpath // }; // datamodelserialization.savetopath(mockpatientdm, patientmetaxmlpath, log); // viewmodelpatient patientvm = new viewmodelpatient(); // patientvm.initializeplugin(mockpatientdm.friendlyname, new datamodelcatalogitem(mockpatientdm), this); // patientvm.commandload.execute(null); // _patients.add(patientvm); //} } } catch (Exception ex) { //MSOTService.IMSOTLog.HandleError(EnumLogType.Warning, DisplayName, "Exception initiating patients manager: " + ex.Message); System.Windows.MessageBox.Show("Exception initiating patients manager: " + ex.Message); } }
private void CheckAndSaveChangesInPatientData() { // first get inputs string _newPatientId = patientIdTextBox.Text; string _newPatientFirstName = patientFirstNameTextBox.Text; string _newPatientLastName = patientLastNameTextBox.Text; string _newPatientComment = patientCommentTextBox.Text; DateTime _newPatientBirthDate = (DateTime)patientBirthDate.SelectedDate; int _newPatientSexIndex = patientSexComboBox.SelectedIndex; PatientSex _newPatientSex = PatientSex.N; switch (_newPatientSexIndex) { case 0: _newPatientSex = PatientSex.F; break; case 1: _newPatientSex = PatientSex.M; break; case 2: _newPatientSex = PatientSex.O; break; case 3: _newPatientSex = PatientSex.N; break; } // check conformity of inputs // checkinputs(); // compare inputs with actual data if (_newPatientId != (patientsListView.SelectedItem as DataModelPatient).Id || _newPatientFirstName != (patientsListView.SelectedItem as DataModelPatient).FirstName || _newPatientLastName != (patientsListView.SelectedItem as DataModelPatient).LastName || _newPatientComment != (patientsListView.SelectedItem as DataModelPatient).Comment || _newPatientBirthDate != (patientsListView.SelectedItem as DataModelPatient).BirthDate || _newPatientSex != (patientsListView.SelectedItem as DataModelPatient).Sex) { string messageBoxText = "Save changes to study?"; string caption = "Study data changed"; MessageBoxButton button = MessageBoxButton.YesNo; MessageBoxImage icon = MessageBoxImage.Warning; MessageBoxResult result = MessageBox.Show(messageBoxText, caption, button, icon); // Process message box results switch (result) { case MessageBoxResult.Yes: try { //save Changes to patientInfoFile XDocument objXDoc = new XDocument( new XElement("DataModelPatient", new XElement("FriendlyName", ""), new XElement("CreationTime", (patientsListView.SelectedItem as DataModelPatient).CreationTime.ToString("o")), new XElement("Comment", _newPatientComment), new XElement("FirstName", _newPatientFirstName), new XElement("LastName", _newPatientLastName), new XElement("Id", _newPatientId), new XElement("BirthDate", _newPatientBirthDate.ToString("o")), new XElement("Sex", _newPatientSex.ToString()), new XElement("LastExam", "") ) ); objXDoc.Declaration = new XDeclaration("1.0", "utf-8", "true"); // string path = fileParameters.RSOMdataFolder + "\\study" + _newPatientId; string filename = path + "\\study" + _newPatientId + studyParameters.PatientFileNameExtension; objXDoc.Save(@filename); //Refresh patient List (patientsListView.SelectedItem as DataModelPatient).FirstName = _newPatientFirstName; (patientsListView.SelectedItem as DataModelPatient).LastName = _newPatientLastName; (patientsListView.SelectedItem as DataModelPatient).BirthDate = _newPatientBirthDate; (patientsListView.SelectedItem as DataModelPatient).Sex = _newPatientSex; (patientsListView.SelectedItem as DataModelPatient).Comment = _newPatientComment; //refresh View int lastSelectedIndex = patientsListView.SelectedIndex; patientsListView.SelectedIndex = lastSelectedIndex; patientsListView.Items.Refresh(); } catch { } break; case MessageBoxResult.No: break; } } }