#include "GetWorkListDialog.h" #include #include #include #include #include #include #include #include #include #include "components/ULineEdit.h" #include "action/GetWorkListAction.h" #include "action/ActionCreator.h" GetWorkListDialog::GetWorkListDialog(QSqlTableModel* aSqlModel, QTableView* aTableView, QWidget* aParent, Qt::WindowFlags aFlags) : AsyncActionDialog(ActionCreator::getAsyncAction("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(getAction()); if (action != nullptr) { action->setSqlModel(aSqlModel); } } GetWorkListDialog::~GetWorkListDialog() { } void GetWorkListDialog::initializeContentWidgets() { QVBoxLayout* contentLayout = new QVBoxLayout(mContentWidget); //Accession Nummber mAccessionNumText->setText(tr("Accession Nummber")); contentLayout->addWidget(mAccessionNumText); contentLayout->addWidget(mAccessionNumber); mAccessionNumEndLine->setObjectName("endline"); contentLayout->addWidget(mAccessionNumEndLine); //PatientId mPatientIDText->setText(tr("Patient ID")); contentLayout->addWidget(mPatientIDText); contentLayout->addWidget(mPatientId); 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); 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(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>(); 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; iindex(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); }