#include "GetWorkListDialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #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"),"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) , mSearchMode(ByAccessionNumber) , mPatientSelectModel(new QStandardItemModel(mContentWidget)) , mSqlModel(aSqlModel) , mTableView(aTableView) , mSearchedPatients() , mRadioButtonArea(new QWidget(mContentWidget)) , mIsAutoSearch(false) { initializeContentWidgets(); GetWorkListAction* action = qobject_cast(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::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); mSearchMode = ByAccessionNumber; } else { mAccessionNumText->setVisible(false); mAccessionNumber->setVisible(false); mPatientIDText->setVisible(true); mPatientId->setVisible(true); mSearchMode = ByPatientId; } }); //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(); } void GetWorkListDialog::search(const QString& aInput) { switch(mSearchMode) { case ByAccessionNumber: mAccessionNumber->insert(aInput); break; case ByPatientId: mPatientId->insert(aInput); break; } mIsAutoSearch = true; } 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; 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)); } void GetWorkListDialog::showEvent(QShowEvent *aEvent) { if(mIsAutoSearch) { mBtnOk->click(); } AsyncActionDialog::showEvent(aEvent); }