250 lines
8 KiB
C++
250 lines
8 KiB
C++
#include "administrationpanel.h"
|
|
#include "ui_administrationpanel.h"
|
|
|
|
AdministrationPanel::AdministrationPanel(QWidget *parent) :
|
|
QMainWindow(parent), ui(new Ui::AdministrationPanel) {
|
|
ui->setupUi(this);
|
|
|
|
connect(this, &AdministrationPanel::invalidateTables,
|
|
this, &AdministrationPanel::onTablesInvalidation);
|
|
|
|
avm = new AdministrationViewModel(this);
|
|
ui->administrationView->setModel(avm);
|
|
wvm = new WorkersViewModel(this);
|
|
ui->workersView->setModel(wvm);
|
|
pvm = new ProfessionsViewModel(this);
|
|
ui->professionsView->setModel(pvm);
|
|
|
|
emit invalidateTables();
|
|
}
|
|
|
|
AdministrationPanel::~AdministrationPanel() {
|
|
delete ui;
|
|
|
|
delete avm;
|
|
delete wvm;
|
|
delete pvm;
|
|
}
|
|
|
|
void AdministrationPanel::setUser(User *user) {
|
|
mUser = user;
|
|
ui->user->setText(tr("Hello, **%1**").arg(user->getFullNameShortForm()));
|
|
ui->administrationGroup->setVisible(user->getUserType() == UserType::ADMINISTRATOR);
|
|
}
|
|
|
|
void AdministrationPanel::resizeEvent(QResizeEvent *event) {
|
|
int cellWidth = 60;
|
|
|
|
ui->administrationView->setColumnWidth(0, cellWidth*4);
|
|
ui->administrationView->setColumnWidth(1, cellWidth*1);
|
|
ui->administrationView->setColumnWidth(2, cellWidth*4);
|
|
ui->administrationView->setColumnWidth(3, cellWidth*2);
|
|
|
|
ui->workersView->setColumnWidth(0, cellWidth*4);
|
|
ui->workersView->setColumnWidth(1, cellWidth*1);
|
|
ui->workersView->setColumnWidth(2, cellWidth*4);
|
|
ui->workersView->setColumnWidth(3, cellWidth*4);
|
|
ui->workersView->setColumnWidth(4, cellWidth*4);
|
|
ui->workersView->setColumnWidth(5, cellWidth*4);
|
|
ui->workersView->setColumnWidth(6, cellWidth*4);
|
|
|
|
QMainWindow::resizeEvent(event);
|
|
}
|
|
|
|
void AdministrationPanel::doLogout() {
|
|
close();
|
|
}
|
|
|
|
void AdministrationPanel::addAdministration() {
|
|
QStringList items = {
|
|
"Administrator",
|
|
"Dispatcher"
|
|
};
|
|
bool ok;
|
|
QString sel = QInputDialog::getItem(this, "Administration type", "", items, 0, false, &ok);
|
|
if (ok) {
|
|
UserType t = sel == "Administrator"? UserType::ADMINISTRATOR : UserType::DISPATCHER;
|
|
User *user = new User();
|
|
RegistrationDialog rd(this);
|
|
rd.setEditMode(false);
|
|
rd.setUser(user);
|
|
rd.lockUserType(t);
|
|
rd.setWindowTitle("New administration");
|
|
if (rd.exec() == RegistrationDialog::Accepted) {
|
|
Database::instance()->addUser(*user);
|
|
emit invalidateTables();
|
|
return;
|
|
}
|
|
}
|
|
QMessageBox::critical(this, "Error", "Aborted by user");
|
|
}
|
|
|
|
void AdministrationPanel::addWorker() {
|
|
User *user = new User();
|
|
RegistrationDialog rd(this);
|
|
rd.setEditMode(false);
|
|
rd.setUser(user);
|
|
rd.lockUserType(UserType::WORKER);
|
|
rd.setWindowTitle("New worker");
|
|
if (rd.exec() == RegistrationDialog::Accepted) {
|
|
Database::instance()->addUser(*user);
|
|
emit invalidateTables();
|
|
return;
|
|
}
|
|
}
|
|
|
|
void AdministrationPanel::addProfession() {
|
|
QString title = QInputDialog::getText(this, "Input", "Profession title").trimmed();
|
|
if (!title.isEmpty()) {
|
|
Profession p = Profession::createProfession(title);
|
|
bool ok = Database::instance()->addProfession(p);
|
|
if (ok) {
|
|
emit invalidateTables();
|
|
}
|
|
else {
|
|
QMessageBox::critical(this, "Error", "You are trying to add the same job twice");
|
|
}
|
|
return;
|
|
}
|
|
QMessageBox::critical(this, "Error", "Aborted by user");
|
|
}
|
|
|
|
void AdministrationPanel::editAdministration() {
|
|
auto rows = ui->administrationView->selectionModel()->selectedRows();
|
|
if (rows.isEmpty() || rows.size() > 1) {
|
|
return;
|
|
}
|
|
UID aUID = avm->index(rows[0].row(), 0).data().toString();
|
|
if (aUID == mUser->uID()) {
|
|
QMessageBox::critical(this, "Error", "You cannot edit yourself.");
|
|
return;
|
|
}
|
|
editUser(aUID);
|
|
}
|
|
|
|
void AdministrationPanel::editWorker() {
|
|
auto rows = ui->workersView->selectionModel()->selectedRows();
|
|
if (rows.isEmpty() || rows.size() > 1) {
|
|
return;
|
|
}
|
|
UID wUID = wvm->index(rows[0].row(), 0).data().toString();
|
|
editUser(wUID);
|
|
}
|
|
|
|
void AdministrationPanel::editUser(UID uid) {
|
|
User *user = Database::instance()->getUser(uid);
|
|
if (user == nullptr) {
|
|
QMessageBox::critical(this, "Error", "USer not found");
|
|
return;
|
|
}
|
|
RegistrationDialog rd(this);
|
|
rd.setEditMode(true);
|
|
rd.setUser(user);
|
|
rd.lockUserType(user->getUserType());
|
|
rd.setWindowTitle("Edit user");
|
|
if (rd.exec() == RegistrationDialog::Accepted) {
|
|
Database::instance()->addUser(*user);
|
|
emit invalidateTables();
|
|
}
|
|
}
|
|
|
|
void AdministrationPanel::editProfession() {
|
|
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();
|
|
QString title = QInputDialog::getText(this, "Input", "New title").trimmed();
|
|
if (!title.isEmpty()) {
|
|
Database::instance()->getProfession(pid)->setTitle(title);
|
|
emit invalidateTables();
|
|
return;
|
|
}
|
|
}
|
|
QMessageBox::critical(this, "Error", "Aborted by user");
|
|
}
|
|
|
|
void AdministrationPanel::removeAdministration() {
|
|
auto rows = ui->administrationView->selectionModel()->selectedRows();
|
|
if (rows.isEmpty()) {
|
|
return;
|
|
}
|
|
QMessageBox remconf(this);
|
|
remconf.setIcon(QMessageBox::Question);
|
|
remconf.setWindowTitle("Remove confirmation");
|
|
remconf.setText("Are you sure you want to remove this worker?");
|
|
remconf.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
|
remconf.setDefaultButton(QMessageBox::No);
|
|
if (remconf.exec() == QMessageBox::No) {
|
|
return;
|
|
}
|
|
for (int i = rows.size() - 1; i >= 0; i--) {
|
|
UID aUID = avm->index(rows[i].row(), 0).data().toString();
|
|
if (aUID == mUser->uID()) {
|
|
QMessageBox::critical(this, "Error", "You cannot remove yourself.");
|
|
}
|
|
else {
|
|
Database::instance()->removeUser(aUID);
|
|
}
|
|
}
|
|
emit invalidateTables();
|
|
}
|
|
|
|
void AdministrationPanel::removeWorker() {
|
|
auto rows = ui->workersView->selectionModel()->selectedRows();
|
|
if (rows.isEmpty()) {
|
|
return;
|
|
}
|
|
QMessageBox remconf(this);
|
|
remconf.setIcon(QMessageBox::Question);
|
|
remconf.setWindowTitle("Remove confirmation");
|
|
remconf.setText("Are you sure you want to remove this worker?");
|
|
remconf.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
|
remconf.setDefaultButton(QMessageBox::No);
|
|
if (remconf.exec() == QMessageBox::No) {
|
|
return;
|
|
}
|
|
for (int i = rows.size() - 1; i >= 0; i--) {
|
|
UID wUID = wvm->index(rows[i].row(), 0).data().toString();
|
|
Database::instance()->removeUser(wUID);
|
|
}
|
|
emit invalidateTables();
|
|
}
|
|
|
|
void AdministrationPanel::removeProfession() {
|
|
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();
|
|
ok = Database::instance()->removeProfession(pid);
|
|
if (ok) {
|
|
emit invalidateTables();
|
|
return;
|
|
}
|
|
}
|
|
QMessageBox::critical(this, "Error", "Aborted by user or "
|
|
"workers depend on selected profession");
|
|
}
|
|
|
|
void AdministrationPanel::onTablesInvalidation() {
|
|
avm->invalidateData();
|
|
wvm->invalidateData();
|
|
pvm->invalidateData();
|
|
}
|