260 lines
9.0 KiB
C++
260 lines
9.0 KiB
C++
#include "GetWorkListDialog.h"
|
|
|
|
#include <QVBoxLayout>
|
|
#include <QPushButton>
|
|
#include <QTableView>
|
|
#include <QStandardItemModel>
|
|
#include <QLabel>
|
|
#include <QSqlTableModel>
|
|
#include <QUuid>
|
|
#include <QDateTime>
|
|
#include <QSqlRecord>
|
|
#include <QRadioButton>
|
|
#include <QButtonGroup>
|
|
|
|
#include "components/ULineEdit.h"
|
|
#include "action/GetWorkListAction.h"
|
|
#include "action/ActionCreator.h"
|
|
#include "log/UserOperationLog.h"
|
|
|
|
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))
|
|
, mPatientIDText(new QLabel(mContentWidget))
|
|
, mEditEndLine(new QLabel(mContentWidget))
|
|
, mPatientSelectTable(new QTableView(mContentWidget))
|
|
, mMode(PatientSearchMode)
|
|
, mPatientSelectModel(new QStandardItemModel(mContentWidget))
|
|
, mSqlModel(aSqlModel)
|
|
, mTableView(aTableView)
|
|
, mSearchedPatients()
|
|
, mRadioButtonArea(new QWidget(mContentWidget))
|
|
{
|
|
initializeContentWidgets();
|
|
GetWorkListAction* action = qobject_cast<GetWorkListAction*>(getAction());
|
|
if (action != nullptr)
|
|
{
|
|
action->setSqlModel(aSqlModel);
|
|
}
|
|
}
|
|
|
|
GetWorkListDialog::~GetWorkListDialog()
|
|
{
|
|
}
|
|
|
|
void GetWorkListDialog::initializeContentWidgets()
|
|
{
|
|
QVBoxLayout* contentLayout = new QVBoxLayout(mContentWidget);
|
|
mRadioButtonArea->setObjectName("RadioButtonArea");
|
|
contentLayout->addWidget(mRadioButtonArea);
|
|
QHBoxLayout* radioButtonLayout = new QHBoxLayout(mRadioButtonArea);
|
|
radioButtonLayout->setSpacing(50);
|
|
QRadioButton* radioButton1 = new QRadioButton(tr("Accession Number"), this);
|
|
radioButton1->setChecked(true);
|
|
QRadioButton* radioButton2 = new QRadioButton(tr("Patient ID"), this);
|
|
radioButtonLayout->addWidget(radioButton1);
|
|
radioButtonLayout->addWidget(radioButton2);
|
|
QButtonGroup* buttonGroup = new QButtonGroup(this);
|
|
buttonGroup->addButton(radioButton1, 0);
|
|
buttonGroup->addButton(radioButton2, 1);
|
|
connect(buttonGroup, QOverload<int>::of(&QButtonGroup::buttonClicked), [this](int aButtonIndex)
|
|
{
|
|
mAccessionNumber->clear();
|
|
mPatientId->clear();
|
|
if(aButtonIndex == 0)
|
|
{
|
|
mPatientIDText->setVisible(false);
|
|
mPatientId->setVisible(false);
|
|
mAccessionNumText->setVisible(true);
|
|
mAccessionNumber->setVisible(true);
|
|
}
|
|
else
|
|
{
|
|
mAccessionNumText->setVisible(false);
|
|
mAccessionNumber->setVisible(false);
|
|
mPatientIDText->setVisible(true);
|
|
mPatientId->setVisible(true);
|
|
}
|
|
});
|
|
//Accession Nummber
|
|
mAccessionNumText->setText(tr("Accession Nummber"));
|
|
contentLayout->addWidget(mAccessionNumText);
|
|
contentLayout->addWidget(mAccessionNumber);
|
|
|
|
//PatientId
|
|
mPatientIDText->setText(tr("Patient ID"));
|
|
contentLayout->addWidget(mPatientIDText);
|
|
contentLayout->addWidget(mPatientId);
|
|
mEditEndLine->setObjectName("endline");
|
|
contentLayout->addWidget(mEditEndLine);
|
|
mPatientIDText->setVisible(false);
|
|
mPatientId->setVisible(false);
|
|
|
|
//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);
|
|
mErrorLabel->setObjectName("warn");
|
|
mErrorLabel->hide();
|
|
}
|
|
|
|
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())
|
|
{
|
|
mErrorLabel->setText(tr("Accession Number and Patient Id is Empty."));
|
|
mErrorLabel->show();
|
|
return false;
|
|
}
|
|
GetWorkListAction* action = qobject_cast<GetWorkListAction*>(getAction());
|
|
if (action == nullptr)
|
|
{
|
|
mErrorLabel->setText(tr("Unknow Error. code:001001001"));
|
|
return false;
|
|
}
|
|
action->setWorkListQueryData(WorkListQueryData(accessionNum, patientId));
|
|
return AsyncActionDialog::updateReferenceData();
|
|
}
|
|
|
|
void GetWorkListDialog::handleFinishedAction(const ActionResult& aResult)
|
|
{
|
|
if (aResult.Code == Failed)
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
|
|
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;
|
|
mRadioButtonArea->hide();
|
|
mAccessionNumber->hide();
|
|
mPatientId->hide();
|
|
mErrorLabel->hide();
|
|
mAccessionNumText->hide();
|
|
mPatientIDText->hide();
|
|
mEditEndLine->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);
|
|
LOG_USER_OPERATION(QString("Add Patient, ID:%1").arg(aPatient->ID));
|
|
}
|