Enable the worklist to retrieve more results based on different combinations of Patient ID and accession number.
This commit is contained in:
@@ -2,17 +2,33 @@
|
||||
|
||||
#include <QVBoxLayout>
|
||||
#include <QPushButton>
|
||||
#include <QTableView>
|
||||
#include <QStandardItemModel>
|
||||
#include <QLabel>
|
||||
#include <QSqlTableModel>
|
||||
#include <QUuid>
|
||||
#include <QDateTime>
|
||||
#include <QSqlRecord>
|
||||
|
||||
#include "components/ULineEdit.h"
|
||||
#include "action/GetWorkListAction.h"
|
||||
#include "action/ActionCreator.h"
|
||||
|
||||
GetWorkListDialog::GetWorkListDialog(QSqlTableModel* aSqlModel, QWidget* aParent, Qt::WindowFlags aFlags)
|
||||
GetWorkListDialog::GetWorkListDialog(QSqlTableModel* aSqlModel, QTableView* aTableView, QWidget* aParent, Qt::WindowFlags aFlags)
|
||||
: AsyncActionDialog(ActionCreator::getAsyncAction<GetWorkListAction>("GetWorkListAction"),"Work List", aParent, aFlags)
|
||||
, mAccessionNumber(new ULineEdit(mContentWidget))
|
||||
, mPatientId(new ULineEdit(mContentWidget))
|
||||
, mErrorLabel(new QLabel(mContentWidget))
|
||||
, mAccessionNumText(new QLabel(mContentWidget))
|
||||
, mAccessionNumEndLine(new QLabel(mContentWidget))
|
||||
, mPatientIDText(new QLabel(mContentWidget))
|
||||
, mPatientIDLine(new QLabel(mContentWidget))
|
||||
, mPatientSelectTable(new QTableView(mContentWidget))
|
||||
, mMode(PatientSearchMode)
|
||||
, mPatientSelectModel(new QStandardItemModel(mContentWidget))
|
||||
, mSqlModel(aSqlModel)
|
||||
, mTableView(aTableView)
|
||||
, mSearchedPatients()
|
||||
{
|
||||
initializeContentWidgets();
|
||||
GetWorkListAction* action = qobject_cast<GetWorkListAction*>(getAction());
|
||||
@@ -30,22 +46,41 @@ void GetWorkListDialog::initializeContentWidgets()
|
||||
{
|
||||
QVBoxLayout* contentLayout = new QVBoxLayout(mContentWidget);
|
||||
//Accession Nummber
|
||||
QLabel* accessionNumText = new QLabel(mContentWidget);
|
||||
accessionNumText->setText(tr("Accession Nummber"));
|
||||
contentLayout->addWidget(accessionNumText);
|
||||
mAccessionNumText->setText(tr("Accession Nummber"));
|
||||
contentLayout->addWidget(mAccessionNumText);
|
||||
contentLayout->addWidget(mAccessionNumber);
|
||||
QLabel* endLine1 = new QLabel(mContentWidget);
|
||||
endLine1->setObjectName("endline");
|
||||
contentLayout->addWidget(endLine1);
|
||||
mAccessionNumEndLine->setObjectName("endline");
|
||||
contentLayout->addWidget(mAccessionNumEndLine);
|
||||
|
||||
//PatientId
|
||||
QLabel* patientIdText = new QLabel(mContentWidget);
|
||||
patientIdText->setText(tr("Patient ID"));
|
||||
contentLayout->addWidget(patientIdText);
|
||||
mPatientIDText->setText(tr("Patient ID"));
|
||||
contentLayout->addWidget(mPatientIDText);
|
||||
contentLayout->addWidget(mPatientId);
|
||||
QLabel* endLine2 = new QLabel(mContentWidget);
|
||||
endLine2->setObjectName("endline");
|
||||
contentLayout->addWidget(endLine2);
|
||||
mPatientIDLine->setObjectName("endline");
|
||||
contentLayout->addWidget(mPatientIDLine);
|
||||
|
||||
//TableView
|
||||
contentLayout->addWidget(mPatientSelectTable);
|
||||
mPatientSelectModel->setColumnCount(4);
|
||||
mPatientSelectModel->setHorizontalHeaderItem(0, new QStandardItem("Patient ID"));
|
||||
mPatientSelectModel->setHorizontalHeaderItem(1, new QStandardItem("Accession Number"));
|
||||
mPatientSelectModel->setHorizontalHeaderItem(2, new QStandardItem("Patient Name"));
|
||||
mPatientSelectModel->setHorizontalHeaderItem(3, new QStandardItem("Scheduled Date"));
|
||||
mPatientSelectTable->setModel(mPatientSelectModel);
|
||||
mPatientSelectTable->setColumnWidth(0, 200);
|
||||
mPatientSelectTable->setColumnWidth(1, 200);
|
||||
mPatientSelectTable->setColumnWidth(2, 200);
|
||||
mPatientSelectTable->setColumnWidth(3, 200);
|
||||
|
||||
mPatientSelectTable->setAlternatingRowColors(true);
|
||||
mPatientSelectTable->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
mPatientSelectTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
mPatientSelectTable->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
// mTableView->verticalHeader()->setDefaultSectionSize(38);
|
||||
// mTableView->horizontalHeader()->setStretchLastSection(true);
|
||||
mPatientSelectTable->viewport()->ungrabGesture(Qt::PanGesture);
|
||||
mPatientSelectTable->setSortingEnabled(false); // enable sortingEnabled
|
||||
mPatientSelectTable->hide();
|
||||
|
||||
//ErrorLabel
|
||||
contentLayout->addWidget(mErrorLabel);
|
||||
@@ -55,6 +90,11 @@ void GetWorkListDialog::initializeContentWidgets()
|
||||
|
||||
bool GetWorkListDialog::updateReferenceData()
|
||||
{
|
||||
if(mMode == PatientSelectMode)
|
||||
{
|
||||
insertPatient(mSearchedPatients.at(mPatientSelectTable->currentIndex().row()));
|
||||
return true;
|
||||
}
|
||||
QString accessionNum = mAccessionNumber->text();
|
||||
QString patientId = mPatientId->text();
|
||||
if (accessionNum.isEmpty() && patientId.isEmpty())
|
||||
@@ -77,10 +117,108 @@ void GetWorkListDialog::handleFinishedAction(const ActionResult& aResult)
|
||||
{
|
||||
if (aResult.Code == Failed)
|
||||
{
|
||||
mErrorLabel->setText(aResult.Message);
|
||||
mErrorLabel->setText(aResult.Data.toString());
|
||||
mContentWidget->show();
|
||||
mBtnWidget->show();
|
||||
mErrorLabel->show();
|
||||
return;
|
||||
}
|
||||
|
||||
mSearchedPatients = aResult.Data.value<QList<PatientInformationPointer>>();
|
||||
|
||||
if(mSearchedPatients.size() > 1)
|
||||
{
|
||||
updatePatientSelectTable();
|
||||
}
|
||||
else if(mSearchedPatients.size() == 1)
|
||||
{
|
||||
insertPatient(mSearchedPatients.at(0));
|
||||
AsyncActionDialog::handleFinishedAction(aResult);
|
||||
}
|
||||
AsyncActionDialog::handleFinishedAction(aResult);
|
||||
}
|
||||
|
||||
void GetWorkListDialog::updatePatientSelectTable()
|
||||
{
|
||||
int rowCount = mSearchedPatients.size();
|
||||
|
||||
mPatientSelectModel->setRowCount(rowCount);
|
||||
for(int i=0; i<rowCount; ++i)
|
||||
{
|
||||
PatientInformationPointer patient = mSearchedPatients.at(i);
|
||||
QModelIndex index = mPatientSelectModel->index(i, 0, QModelIndex());
|
||||
mPatientSelectModel->setData(index, patient->ID);
|
||||
|
||||
index = mPatientSelectModel->index(i, 1, QModelIndex());
|
||||
mPatientSelectModel->setData(index, patient->AccessionNumber);
|
||||
|
||||
index = mPatientSelectModel->index(i, 2, QModelIndex());
|
||||
mPatientSelectModel->setData(index, patient->Name);
|
||||
|
||||
index = mPatientSelectModel->index(i, 3, QModelIndex());
|
||||
mPatientSelectModel->setData(index, patient->ScheduledStartDate);
|
||||
}
|
||||
showPatientSelectTable();
|
||||
}
|
||||
|
||||
void GetWorkListDialog::showPatientSelectTable()
|
||||
{
|
||||
setFixedWidth(900);
|
||||
QRect re = geometry();
|
||||
setGeometry(re.x() - 200, re.y(), 900, re.height());
|
||||
mMode = PatientSelectMode;
|
||||
mAccessionNumber->hide();
|
||||
mPatientId->hide();
|
||||
mErrorLabel->hide();
|
||||
mAccessionNumText->hide();
|
||||
mAccessionNumEndLine->hide();
|
||||
mPatientIDText->hide();
|
||||
mPatientIDLine->hide();
|
||||
|
||||
mPatientSelectTable->show();
|
||||
mContentWidget->show();
|
||||
mBtnWidget->show();
|
||||
mLoadingWidget->hide();
|
||||
}
|
||||
|
||||
void GetWorkListDialog::insertPatient(PatientInformationPointer aPatient)
|
||||
{
|
||||
if (mSqlModel == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (aPatient.isNull())
|
||||
{
|
||||
return;
|
||||
}
|
||||
mSqlModel->setFilter(QString("PatientID='%1' And AccessionNumber='%2'").arg(aPatient->ID).arg(aPatient->AccessionNumber));
|
||||
if (mSqlModel->rowCount() > 0)
|
||||
{
|
||||
mSqlModel->setFilter("");
|
||||
int patientIdIndex = mSqlModel->record().indexOf("PatientID");
|
||||
int accessionNumberIndex = mSqlModel->record().indexOf("AccessionNumber");
|
||||
for (int i = 0; i < mSqlModel->rowCount(); ++i)
|
||||
{
|
||||
if (mSqlModel->data(mSqlModel->index(i, patientIdIndex)) == aPatient->ID &&
|
||||
mSqlModel->data(mSqlModel->index(i, accessionNumberIndex)) == aPatient->AccessionNumber)
|
||||
{
|
||||
mTableView->selectRow(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
mSqlModel->setFilter("");
|
||||
aPatient->PatientUID = QUuid::createUuid().toString();
|
||||
aPatient->AddDate = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
|
||||
mSqlModel->insertRow(0);
|
||||
#define ADD_PATIENT_PROPERTY(val)\
|
||||
mSqlModel->setData(mSqlModel->index(0, PatientInformationEnum:: val),aPatient->val);
|
||||
EDIT_PATIENT()
|
||||
#undef ADD_PATIENT_PROPERTY
|
||||
if (!mSqlModel->submitAll())
|
||||
{
|
||||
mErrorLabel->setText( tr("DB Error,Patient Write Failed"));
|
||||
mErrorLabel->show();
|
||||
}
|
||||
mTableView->selectRow(0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user