diff --git a/Libs/DICOM/Core/Resources/dicom-schema.sql b/Libs/DICOM/Core/Resources/dicom-schema.sql index ae33608cc3..b8b76d3c01 100644 --- a/Libs/DICOM/Core/Resources/dicom-schema.sql +++ b/Libs/DICOM/Core/Resources/dicom-schema.sql @@ -22,7 +22,7 @@ DROP INDEX IF EXISTS 'SeriesStudyIndex' ; DROP INDEX IF EXISTS 'StudiesPatientIndex' ; CREATE TABLE 'SchemaInfo' ( 'Version' VARCHAR(1024) NOT NULL ); -INSERT INTO 'SchemaInfo' VALUES('0.6.2'); +INSERT INTO 'SchemaInfo' VALUES('0.6.3'); CREATE TABLE 'Images' ( 'SOPInstanceUID' VARCHAR(64) NOT NULL, @@ -43,6 +43,7 @@ CREATE TABLE 'Patients' ( 'InsertTimestamp' VARCHAR(20) NOT NULL , 'DisplayedPatientsName' VARCHAR(255) NULL , 'DisplayedNumberOfStudies' INT NULL , + 'DisplayedLastStudyDate' DATE NULL , 'DisplayedFieldsUpdatedTimestamp' DATETIME NULL ); CREATE TABLE 'Studies' ( 'StudyInstanceUID' VARCHAR(64) NOT NULL , @@ -108,9 +109,10 @@ INSERT INTO 'ColumnDisplayProperties' VALUES('Patients', 'PatientsBirthTime', INSERT INTO 'ColumnDisplayProperties' VALUES('Patients', 'PatientsSex', 'Sex', 1, 4, '{"resizeMode":"resizeToContents"}'); INSERT INTO 'ColumnDisplayProperties' VALUES('Patients', 'PatientsAge', 'Age', 0, 0, ''); INSERT INTO 'ColumnDisplayProperties' VALUES('Patients', 'PatientsComments', 'Comments', 0, 0, ''); -INSERT INTO 'ColumnDisplayProperties' VALUES('Patients', 'InsertTimestamp', 'Date added', 1, 6, '{"sort": "descending"}'); +INSERT INTO 'ColumnDisplayProperties' VALUES('Patients', 'InsertTimestamp', 'Date added', 1, 7, '{"sort": "descending"}'); INSERT INTO 'ColumnDisplayProperties' VALUES('Patients', 'DisplayedPatientsName', 'Patient name', 1, 1, '{"resizeMode":"stretch"}'); INSERT INTO 'ColumnDisplayProperties' VALUES('Patients', 'DisplayedNumberOfStudies', 'Studies', 1, 5, '{"resizeMode":"resizeToContents"}'); +INSERT INTO 'ColumnDisplayProperties' VALUES('Patients', 'DisplayedLastStudyDate', 'Last study date', 1, 6, ''); INSERT INTO 'ColumnDisplayProperties' VALUES('Patients', 'DisplayedFieldsUpdatedTimestamp', '', 0, 0, ''); INSERT INTO 'ColumnDisplayProperties' VALUES('Studies', 'StudyInstanceUID', '', 0, 0, ''); diff --git a/Libs/DICOM/Core/ctkDICOMDatabase.cpp b/Libs/DICOM/Core/ctkDICOMDatabase.cpp index aaab1a73ec..e8f699da77 100644 --- a/Libs/DICOM/Core/ctkDICOMDatabase.cpp +++ b/Libs/DICOM/Core/ctkDICOMDatabase.cpp @@ -153,6 +153,9 @@ class ctkDICOMDatabasePrivate /// Calculate number of studies for each patient in the displayed fields container /// \param displayedFieldsVectorPatient (Internal_ID -> (DisplayField -> Value) ) void setNumberOfStudiesToPatientDisplayedFields(QMap >& displayedFieldsMapPatient); + /// Determine last study date for each patient in the displayed fields container + /// \param displayedFieldsVectorPatient (Internal_ID -> (DisplayField -> Value) ) + void setLastStudyDateToPatientDisplayedFields(QMap >& displayedFieldsMapPatient); int rowCount(const QString& tableName); @@ -1527,6 +1530,30 @@ void ctkDICOMDatabasePrivate::setNumberOfStudiesToPatientDisplayedFields(QMap >& displayedFieldsMapPatient) +{ + foreach(QString compositeID, displayedFieldsMapPatient.keys()) + { + QMap displayedFieldsForCurrentPatient = displayedFieldsMapPatient[compositeID]; + int patientUID = displayedFieldsForCurrentPatient["UID"].toInt(); + QSqlQuery numberOfStudiesQuery(this->Database); + numberOfStudiesQuery.prepare("SELECT MAX(StudyDate) FROM Studies WHERE PatientsUID = ? ;"); + numberOfStudiesQuery.addBindValue(patientUID); + if (!numberOfStudiesQuery.exec()) + { + logger.error("SQLITE ERROR: " + numberOfStudiesQuery.lastError().driverText()); + continue; + } + + numberOfStudiesQuery.first(); + QDate lastStudyDate = numberOfStudiesQuery.value(0).toDate(); + + displayedFieldsForCurrentPatient["DisplayedLastStudyDate"] = lastStudyDate.toString(); + displayedFieldsMapPatient[compositeID] = displayedFieldsForCurrentPatient; + } +} + //------------------------------------------------------------------------------ CTK_GET_CPP(ctkDICOMDatabase, bool, isDisplayedFieldsTableAvailable, DisplayedFieldsTableAvailable); @@ -1712,7 +1739,7 @@ QString ctkDICOMDatabase::schemaVersion() // so that the ctkDICOMDatabasePrivate::filenames method // still works. // - return QString("0.6.2"); + return QString("0.6.3"); }; //------------------------------------------------------------------------------ @@ -3220,6 +3247,8 @@ void ctkDICOMDatabase::updateDisplayedFields() d->setNumberOfSeriesToStudyDisplayedFields(displayedFieldsMapStudy); // Calculate number of studies in each updated patient d->setNumberOfStudiesToPatientDisplayedFields(displayedFieldsMapPatient); + // Determine lat study date in each updated patient + d->setLastStudyDateToPatientDisplayedFields(displayedFieldsMapPatient); emit displayedFieldsUpdateProgress(++progressValue);