Add registration dialog and bare-minimum auth
This commit is contained in:
parent
42bf5da2a3
commit
1e30ca20e7
13 changed files with 658 additions and 41 deletions
|
|
@ -99,7 +99,7 @@ bool Database::removeProfession(PID pid) {
|
||||||
|
|
||||||
void Database::save() {
|
void Database::save() {
|
||||||
QFile f(Database::mFilename);
|
QFile f(Database::mFilename);
|
||||||
f.open(QIODevice::ReadOnly);
|
f.open(QIODevice::WriteOnly);
|
||||||
QDataStream stream(&f);
|
QDataStream stream(&f);
|
||||||
stream << mProfessions << mUsers;
|
stream << mProfessions << mUsers;
|
||||||
f.close();
|
f.close();
|
||||||
|
|
@ -112,7 +112,7 @@ void Database::load() {
|
||||||
mUsers.clear();
|
mUsers.clear();
|
||||||
mProfessions.clear();
|
mProfessions.clear();
|
||||||
QFile f(Database::mFilename);
|
QFile f(Database::mFilename);
|
||||||
f.open(QIODevice::WriteOnly);
|
f.open(QIODevice::ReadOnly);
|
||||||
QDataStream stream(&f);
|
QDataStream stream(&f);
|
||||||
stream >> mProfessions >> mUsers;
|
stream >> mProfessions >> mUsers;
|
||||||
f.close();
|
f.close();
|
||||||
|
|
|
||||||
|
|
@ -14,17 +14,22 @@ SOURCES += \
|
||||||
objects/profession.cpp \
|
objects/profession.cpp \
|
||||||
objects/user.cpp \
|
objects/user.cpp \
|
||||||
objects/userprofession.cpp \
|
objects/userprofession.cpp \
|
||||||
db/database.cpp
|
db/database.cpp \
|
||||||
|
registrationdialog.cpp \
|
||||||
|
viewmodels/userprofessionviewmodel.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
loginwindow.h \
|
loginwindow.h \
|
||||||
objects/profession.h \
|
objects/profession.h \
|
||||||
objects/user.h \
|
objects/user.h \
|
||||||
objects/userprofession.h \
|
objects/userprofession.h \
|
||||||
db/database.h
|
db/database.h \
|
||||||
|
registrationdialog.h \
|
||||||
|
viewmodels/userprofessionviewmodel.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
loginwindow.ui
|
loginwindow.ui \
|
||||||
|
registrationdialog.ui
|
||||||
|
|
||||||
# Default rules for deployment.
|
# Default rules for deployment.
|
||||||
qnx: target.path = /tmp/$${TARGET}/bin
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,57 @@
|
||||||
#include "loginwindow.h"
|
#include "loginwindow.h"
|
||||||
#include "ui_loginwindow.h"
|
#include "ui_loginwindow.h"
|
||||||
|
|
||||||
LoginWindow::LoginWindow(QWidget *parent)
|
LoginWindow::LoginWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::LoginWindow) {
|
||||||
: QMainWindow(parent)
|
|
||||||
, ui(new Ui::LoginWindow)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
checkForFirstRun();
|
||||||
}
|
}
|
||||||
|
|
||||||
LoginWindow::~LoginWindow()
|
LoginWindow::~LoginWindow() {
|
||||||
{
|
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LoginWindow::checkForFirstRun() {
|
||||||
|
auto admins = Database::instance()->getUsersByType(UserType::ADMINISTRATOR);
|
||||||
|
if (admins.isEmpty()) {
|
||||||
|
QMessageBox::information(this, "Info", "No administrators found. "
|
||||||
|
"Starting registration process.");
|
||||||
|
User *user = new User();
|
||||||
|
RegistrationDialog rd(this);
|
||||||
|
rd.setEditMode(false);
|
||||||
|
rd.setUser(user);
|
||||||
|
rd.lockUserType(UserType::ADMINISTRATOR);
|
||||||
|
rd.setWindowTitle("New administrator");
|
||||||
|
if (rd.exec() != RegistrationDialog::Accepted) {
|
||||||
|
QMessageBox::critical(this, "Error", "System cannot work without administrator "
|
||||||
|
"profile.\nPlease, restart application.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Database::instance()->addUser(*user);
|
||||||
|
QMessageBox::information(this, "Info", "Now you can login as administrator.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoginWindow::doLogin() {
|
||||||
|
QString login = ui->login->text().trimmed();
|
||||||
|
QString password = ui->password->text().trimmed();
|
||||||
|
auto user = Database::instance()->getUser(login);
|
||||||
|
if (user == nullptr || !user->checkPassword(password)) {
|
||||||
|
QMessageBox::critical(this, "Error", "Wrong pair login/password");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMessageBox::information(this, "Info", "Success");
|
||||||
|
// TODO: Open valid window
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoginWindow::validateForm() {
|
||||||
|
if (ui->login->text().trimmed().isEmpty() || ui->password->text().trimmed().isEmpty()) {
|
||||||
|
QMessageBox::critical(this, "Error", "Fields should not be empty");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
doLogin();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,20 +2,31 @@
|
||||||
#define LOGINWINDOW_H
|
#define LOGINWINDOW_H
|
||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
#include "objects/user.h"
|
||||||
|
#include "db/database.h"
|
||||||
|
|
||||||
|
#include "registrationdialog.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui { class LoginWindow; }
|
namespace Ui { class LoginWindow; }
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
class LoginWindow : public QMainWindow
|
class LoginWindow : public QMainWindow {
|
||||||
{
|
private:
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
Ui::LoginWindow *ui;
|
||||||
|
|
||||||
|
void checkForFirstRun();
|
||||||
|
void doLogin();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LoginWindow(QWidget *parent = nullptr);
|
LoginWindow(QWidget *parent = nullptr);
|
||||||
~LoginWindow();
|
~LoginWindow();
|
||||||
|
|
||||||
private:
|
public slots:
|
||||||
Ui::LoginWindow *ui;
|
void validateForm();
|
||||||
};
|
};
|
||||||
#endif // LOGINWINDOW_H
|
#endif // LOGINWINDOW_H
|
||||||
|
|
|
||||||
|
|
@ -6,17 +6,107 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>800</width>
|
<width>520</width>
|
||||||
<height>600</height>
|
<height>169</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>520</width>
|
||||||
|
<height>169</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>520</width>
|
||||||
|
<height>169</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>LoginWindow</string>
|
<string>LoginWindow</string>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="centralwidget"/>
|
<widget class="QWidget" name="centralwidget">
|
||||||
<widget class="QMenuBar" name="menubar"/>
|
<layout class="QFormLayout" name="formLayout">
|
||||||
<widget class="QStatusBar" name="statusbar"/>
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Login:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="login"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Password:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLineEdit" name="password">
|
||||||
|
<property name="echoMode">
|
||||||
|
<enum>QLineEdit::Password</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" colspan="2">
|
||||||
|
<widget class="QPushButton" name="btnLogIn">
|
||||||
|
<property name="text">
|
||||||
|
<string>Log in</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>btnLogIn</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>LoginWindow</receiver>
|
||||||
|
<slot>validateForm()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>292</x>
|
||||||
|
<y>132</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>475</x>
|
||||||
|
<y>171</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<slots>
|
||||||
|
<slot>validateForm()</slot>
|
||||||
|
</slots>
|
||||||
</ui>
|
</ui>
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,18 @@
|
||||||
|
#include <QApplication>
|
||||||
#include "loginwindow.h"
|
#include "loginwindow.h"
|
||||||
|
|
||||||
#include <QApplication>
|
#include "db/database.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
|
|
||||||
|
Database::instance()->load();
|
||||||
|
|
||||||
LoginWindow w;
|
LoginWindow w;
|
||||||
w.show();
|
w.show();
|
||||||
|
|
||||||
|
QObject::connect(&a, &QApplication::aboutToQuit, []() {
|
||||||
|
Database::instance()->save();
|
||||||
|
});
|
||||||
return a.exec();
|
return a.exec();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,17 +37,17 @@ PID User::getCurrentProfession() const {
|
||||||
return mCurrentProfession;
|
return mCurrentProfession;
|
||||||
}
|
}
|
||||||
|
|
||||||
User User::createUser(QString login, QString password, UserType userType,
|
User* User::createUser(QString login, QString password, UserType userType,
|
||||||
QString firstName, QString secondName, QString patronymic) {
|
QString firstName, QString secondName, QString patronymic) {
|
||||||
User u;
|
User *u = new User();
|
||||||
|
|
||||||
u.mUID = QUuid::createUuid();
|
u->mUID = QUuid::createUuid();
|
||||||
u.mLogin = login;
|
u->mLogin = login;
|
||||||
u.mPassword = password;
|
u->mPassword = password;
|
||||||
u.mUserType = userType;
|
u->mUserType = userType;
|
||||||
u.mFirstName = firstName;
|
u->mFirstName = firstName;
|
||||||
u.mSecondName = secondName;
|
u->mSecondName = secondName;
|
||||||
u.mPatronymic = patronymic;
|
u->mPatronymic = patronymic;
|
||||||
|
|
||||||
return u;
|
return u;
|
||||||
}
|
}
|
||||||
|
|
@ -62,15 +62,20 @@ bool User::hasProfession(PID pid) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool User::addProfession(const Profession &p, ProfRank rank) {
|
bool User::addProfession(PID pid, ProfRank rank) {
|
||||||
if (hasProfession(p.pID())) {
|
if (hasProfession(pid)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mProfessions.size() >= 4) {
|
if (mProfessions.size() >= 4) {
|
||||||
mProfessions.remove(0);
|
if (mCurrentProfession == mProfessions[0].getProfession()) {
|
||||||
|
mProfessions.remove(1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mProfessions.remove(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
UserProfession up(p.pID(), rank);
|
UserProfession up(pid, rank);
|
||||||
|
|
||||||
mProfessions.push_back(up);
|
mProfessions.push_back(up);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,9 @@ typedef QUuid UID;
|
||||||
typedef QVector<UserProfession> ProfessionsList;
|
typedef QVector<UserProfession> ProfessionsList;
|
||||||
|
|
||||||
enum class UserType {
|
enum class UserType {
|
||||||
ADMINISTRATOR,
|
ADMINISTRATOR = 0,
|
||||||
DISPATCHER,
|
DISPATCHER = 1,
|
||||||
WORKER
|
WORKER = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
class User {
|
class User {
|
||||||
|
|
@ -30,6 +30,8 @@ private:
|
||||||
ProfessionsList mProfessions;
|
ProfessionsList mProfessions;
|
||||||
PID mCurrentProfession = 0;
|
PID mCurrentProfession = 0;
|
||||||
|
|
||||||
|
friend class RegistrationDialog;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
User() = default;
|
User() = default;
|
||||||
|
|
||||||
|
|
@ -43,11 +45,11 @@ public:
|
||||||
ProfessionsList getProfessions() const;
|
ProfessionsList getProfessions() const;
|
||||||
PID getCurrentProfession() const;
|
PID getCurrentProfession() const;
|
||||||
|
|
||||||
static User createUser(QString login, QString password, UserType userType,
|
static User* createUser(QString login, QString password, UserType userType,
|
||||||
QString firstName, QString secondName, QString patronymic);
|
QString firstName, QString secondName, QString patronymic);
|
||||||
|
|
||||||
bool hasProfession(PID pid);
|
bool hasProfession(PID pid);
|
||||||
bool addProfession(const Profession &p, ProfRank rank);
|
bool addProfession(PID pid, ProfRank rank);
|
||||||
bool setCurrentProfession(PID pid);
|
bool setCurrentProfession(PID pid);
|
||||||
void removeProfession(PID pid);
|
void removeProfession(PID pid);
|
||||||
|
|
||||||
|
|
|
||||||
98
iFacility/registrationdialog.cpp
Normal file
98
iFacility/registrationdialog.cpp
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
#include "registrationdialog.h"
|
||||||
|
#include "ui_registrationdialog.h"
|
||||||
|
|
||||||
|
RegistrationDialog::RegistrationDialog(QWidget *parent) :
|
||||||
|
QDialog(parent), ui(new Ui::RegistrationDialog) {
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
upvm = new UserProfessionViewModel(this);
|
||||||
|
ui->userProfessions->setModel(upvm);
|
||||||
|
}
|
||||||
|
|
||||||
|
RegistrationDialog::~RegistrationDialog() {
|
||||||
|
delete ui;
|
||||||
|
|
||||||
|
delete upvm;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegistrationDialog::lockUserType(UserType type) {
|
||||||
|
ui->userGroup->setCurrentIndex((int)type);
|
||||||
|
ui->userGroup->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegistrationDialog::setUser(User *usr) {
|
||||||
|
user = usr;
|
||||||
|
|
||||||
|
if (mEditMode) {
|
||||||
|
ui->firstName->setText(user->firstName());
|
||||||
|
ui->secondName->setText(user->secondName());
|
||||||
|
ui->patronymic->setText(user->patronymic());
|
||||||
|
ui->login->setText(user->getLogin());
|
||||||
|
ui->login->setEnabled(false);
|
||||||
|
ui->password->setText(user->mPassword);
|
||||||
|
ui->password->setEnabled(usr->getUserType() == UserType::ADMINISTRATOR);
|
||||||
|
ui->userGroup->setCurrentIndex((int)user->getUserType());
|
||||||
|
ui->userGroup->setEnabled(false);
|
||||||
|
upvm->setProfessionsList(user->getProfessions());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegistrationDialog::setEditMode(bool editMode) {
|
||||||
|
mEditMode = editMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegistrationDialog::accept() {
|
||||||
|
QString fname = ui->firstName->text().trimmed();
|
||||||
|
QString sname = ui->secondName->text().trimmed();
|
||||||
|
QString patr = ui->patronymic->text().trimmed();
|
||||||
|
QString login = ui->login->text().trimmed();
|
||||||
|
QString pass = ui->password->text().trimmed();
|
||||||
|
UserType type = (UserType)ui->userGroup->currentIndex();
|
||||||
|
if (fname.isEmpty() || sname.isEmpty() || patr.isEmpty()
|
||||||
|
|| login.isEmpty() || pass.isEmpty()) {
|
||||||
|
QMessageBox::critical(this, "Error", "Check field data correctness");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (mEditMode) {
|
||||||
|
QMessageBox::information(this, "Info", "Please note: login nor pasword cannot be "
|
||||||
|
"changed. Your changes will be omited.");
|
||||||
|
user->mPassword = pass;
|
||||||
|
user->mFirstName = fname;
|
||||||
|
user->mSecondName = sname;
|
||||||
|
user->mPatronymic = patr;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
auto u = User::createUser(login, pass, type, fname, sname, patr);
|
||||||
|
std::swap(*user, *u);
|
||||||
|
delete u;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDialog::accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegistrationDialog::addNewProfession() {
|
||||||
|
QStringList professions;
|
||||||
|
foreach (auto prof, Database::instance()->professions()) {
|
||||||
|
professions << prof.title() + "|" + prof.pID().toString();
|
||||||
|
}
|
||||||
|
if (professions.isEmpty()) {
|
||||||
|
QMessageBox::critical(this, "Error", "No professions found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
bool ok;
|
||||||
|
QString p = QInputDialog::getItem(this, "Choose profession", "Profession title",
|
||||||
|
professions, 0, false, &ok);
|
||||||
|
if (ok) {
|
||||||
|
PID pid = p.split("|").last();
|
||||||
|
int r = QInputDialog::getInt(this, "Profession rank", "", 1, 1, 2e5, 1, &ok);
|
||||||
|
if (ok) {
|
||||||
|
user->addProfession(pid, r);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QMessageBox::critical(this, "Error", "Aborted by user or selected non-existant profession");
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegistrationDialog::removeOldProfession() {
|
||||||
|
|
||||||
|
}
|
||||||
37
iFacility/registrationdialog.h
Normal file
37
iFacility/registrationdialog.h
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
#ifndef REGISTRATIONDIALOG_H
|
||||||
|
#define REGISTRATIONDIALOG_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QInputDialog>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
#include "objects/user.h"
|
||||||
|
#include "viewmodels/userprofessionviewmodel.h"
|
||||||
|
|
||||||
|
namespace Ui { class RegistrationDialog; }
|
||||||
|
|
||||||
|
class RegistrationDialog : public QDialog {
|
||||||
|
private:
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Ui::RegistrationDialog *ui;
|
||||||
|
UserProfessionViewModel *upvm;
|
||||||
|
User *user = nullptr;
|
||||||
|
bool mEditMode = false;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit RegistrationDialog(QWidget *parent = nullptr);
|
||||||
|
~RegistrationDialog();
|
||||||
|
|
||||||
|
void lockUserType(UserType type);
|
||||||
|
void setUser(User *usr);
|
||||||
|
void setEditMode(bool editMode);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void accept() Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
void addNewProfession();
|
||||||
|
void removeOldProfession();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // REGISTRATIONDIALOG_H
|
||||||
240
iFacility/registrationdialog.ui
Normal file
240
iFacility/registrationdialog.ui
Normal file
|
|
@ -0,0 +1,240 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>RegistrationDialog</class>
|
||||||
|
<widget class="QDialog" name="RegistrationDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>648</width>
|
||||||
|
<height>436</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>648</width>
|
||||||
|
<height>436</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>648</width>
|
||||||
|
<height>436</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Full name</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLineEdit" name="firstName">
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>First name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="secondName">
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Second name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QLineEdit" name="patronymic">
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Patronymic</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_3">
|
||||||
|
<property name="title">
|
||||||
|
<string>Login data</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="login">
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Login</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="password">
|
||||||
|
<property name="echoMode">
|
||||||
|
<enum>QLineEdit::Password</enum>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Password</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_4">
|
||||||
|
<property name="title">
|
||||||
|
<string>User type</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QComboBox" name="userGroup">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Administrator</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dispatcher</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Worker</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
|
<property name="title">
|
||||||
|
<string>Professions</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="0" column="0" rowspan="2">
|
||||||
|
<widget class="QTableView" name="userProfessions"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QPushButton" name="btnAddProfession">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Add</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QPushButton" name="btnRemoveProfession">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Remove</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>630</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>RegistrationDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>257</x>
|
||||||
|
<y>426</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>RegistrationDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>325</x>
|
||||||
|
<y>426</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>btnAddProfession</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>RegistrationDialog</receiver>
|
||||||
|
<slot>addNewProfession()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>587</x>
|
||||||
|
<y>245</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>520</x>
|
||||||
|
<y>184</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>btnRemoveProfession</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>RegistrationDialog</receiver>
|
||||||
|
<slot>removeOldProfession()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>600</x>
|
||||||
|
<y>363</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>279</x>
|
||||||
|
<y>184</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<slots>
|
||||||
|
<slot>addNewProfession()</slot>
|
||||||
|
<slot>removeOldProfession()</slot>
|
||||||
|
</slots>
|
||||||
|
</ui>
|
||||||
56
iFacility/viewmodels/userprofessionviewmodel.cpp
Normal file
56
iFacility/viewmodels/userprofessionviewmodel.cpp
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
#include "userprofessionviewmodel.h"
|
||||||
|
|
||||||
|
UserProfessionViewModel::UserProfessionViewModel(QObject *parent) : QAbstractTableModel(parent) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int UserProfessionViewModel::rowCount(const QModelIndex &/*parent*/) const {
|
||||||
|
return mProfList.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
int UserProfessionViewModel::columnCount(const QModelIndex &/*parent*/) const {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant UserProfessionViewModel::headerData(int section,
|
||||||
|
Qt::Orientation orientation, int role) const {
|
||||||
|
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
|
||||||
|
switch (section) {
|
||||||
|
case 0:
|
||||||
|
return QString("Profession");
|
||||||
|
case 1:
|
||||||
|
return QString("Date of acquirement");
|
||||||
|
case 2:
|
||||||
|
return QString("Rank");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant UserProfessionViewModel::data(const QModelIndex &index, int role) const {
|
||||||
|
if (role == Qt::DisplayRole) {
|
||||||
|
auto item = mProfList[index.row()];
|
||||||
|
auto prof = Database::instance()->getProfession(item.getProfession());
|
||||||
|
|
||||||
|
int col = index.column();
|
||||||
|
switch (col) {
|
||||||
|
case 0:
|
||||||
|
return prof == nullptr? "ERROR:UNKNOWN" : prof->title();
|
||||||
|
case 1:
|
||||||
|
return item.getAcquiredDate();
|
||||||
|
case 2:
|
||||||
|
return item.getRank();
|
||||||
|
}
|
||||||
|
|
||||||
|
return "UNKNOWN FIELD";
|
||||||
|
}
|
||||||
|
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UserProfessionViewModel::setProfessionsList(const ProfessionsList &profList) {
|
||||||
|
beginResetModel();
|
||||||
|
mProfList.clear();
|
||||||
|
mProfList += profList;
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
25
iFacility/viewmodels/userprofessionviewmodel.h
Normal file
25
iFacility/viewmodels/userprofessionviewmodel.h
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef USERPROFESSIONVIEWMODEL_H
|
||||||
|
#define USERPROFESSIONVIEWMODEL_H
|
||||||
|
|
||||||
|
#include <QAbstractTableModel>
|
||||||
|
|
||||||
|
#include "../objects/user.h"
|
||||||
|
#include "../db/database.h"
|
||||||
|
|
||||||
|
class UserProfessionViewModel : public QAbstractTableModel {
|
||||||
|
private:
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
ProfessionsList mProfList;
|
||||||
|
|
||||||
|
public:
|
||||||
|
UserProfessionViewModel(QObject *parent);
|
||||||
|
int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||||
|
int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
||||||
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
|
||||||
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
||||||
|
|
||||||
|
void setProfessionsList(const ProfessionsList &profList);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // USERPROFESSIONVIEWMODEL_H
|
||||||
Loading…
Add table
Add a link
Reference in a new issue