User edit dialog completed

This commit is contained in:
Andrew nuark G 2020-12-23 01:03:13 +07:00
parent 3adbef8c08
commit e24554a0a0
11 changed files with 315 additions and 47 deletions

View file

@ -1,21 +1,36 @@
#include "adminpanel.h"
#include "ui_adminpanel.h"
#include <QStringListModel >
AdminPanel::AdminPanel(QWidget *parent) : QMainWindow(parent), ui(new Ui::AdminPanel) {
ui->setupUi(this);
// connect(ui->pb_logout, &QPushButton::clicked, this, &AdminPanel::on_logout_requested);
connect(ui->pb_logout, &QPushButton::clicked, this, &AdminPanel::on_logout_requested);
// connect(ui->pb_vessels_add, &QPushButton::clicked, this, &AdminPanel::on_vessel_add);
// connect(ui->pb_vessels_remove, &QPushButton::clicked, this, &AdminPanel::on_vessel_remove);
connect(ui->pb_vessels_add, &QPushButton::clicked, this, [this](){
this->on_vessel_add_edit(false);
});
connect(ui->pb_vessels_edit, &QPushButton::clicked, this, [this](){
this->on_vessel_add_edit(true);
});
connect(ui->pb_vessels_remove, &QPushButton::clicked, this, &AdminPanel::on_vessel_remove);
// connect(ui->pb_users_add, &QPushButton::clicked, this, &AdminPanel::on_user_add);
// connect(ui->pb_users_remove, &QPushButton::clicked, this, &AdminPanel::on_user_remove);
connect(ui->pb_users_add, &QPushButton::clicked, this, [this](){
this->on_user_add_edit(false);
});
connect(ui->pb_users_edit, &QPushButton::clicked, this, [this](){
this->on_user_add_edit(true);
});
connect(ui->pb_users_remove, &QPushButton::clicked, this, &AdminPanel::on_user_remove);
// connect(ui->pb_dp_add, &QPushButton::clicked, this, &AdminPanel::on_delivery_point_add);
// connect(ui->pb_dp_remove, &QPushButton::clicked, this, &AdminPanel::on_delivery_point_remove);
connect(ui->pb_dp_add, &QPushButton::clicked, this, [this](){
this->on_delivery_point_add_edit(false);
});
connect(ui->pb_dp_edit, &QPushButton::clicked, this, [this](){
this->on_delivery_point_add_edit(true);
});
connect(ui->pb_dp_remove, &QPushButton::clicked, this, &AdminPanel::on_delivery_point_remove);
uvm = new UsersViewModel(this);
@ -27,48 +42,175 @@ AdminPanel::AdminPanel(QWidget *parent) : QMainWindow(parent), ui(new Ui::AdminP
dpvm = new DeliveryPointsViewModel(this);
ui->tv_dp->setModel(dpvm);
connect(ui->tv_users->selectionModel(), &QItemSelectionModel::selectionChanged, [this](const QItemSelection &selected) {
ui->pb_users_remove->setEnabled(selected.length() > 0);
ui->pb_users_edit->setEnabled(selected.length() == 1);
});
uvm->update();
vvm->update();
dpvm->update();
connect(ui->tv_vessels->selectionModel(), &QItemSelectionModel::selectionChanged, [this](const QItemSelection &selected) {
ui->pb_vessels_remove->setEnabled(selected.length() > 0);
ui->pb_vessels_edit->setEnabled(selected.length() == 1);
});
connect(ui->tv_dp->selectionModel(), &QItemSelectionModel::selectionChanged, [this](const QItemSelection &selected) {
ui->pb_dp_remove->setEnabled(selected.length() > 0);
ui->pb_dp_edit->setEnabled(selected.length() == 1);
});
ui->tw_tabs->setCurrentIndex(0);
}
AdminPanel::~AdminPanel() {
delete ui;
delete uvm;
delete vvm;
delete dpvm;
}
AdminPanel& AdminPanel::set_user(const user_entity &user) {
this->user = user;
ui->lab_user->setText(tr("Hello user %1").arg(user.login()));
ui->lab_user->setText(tr("Hello, **%1**").arg(user.login()));
return *this;
}
void AdminPanel::on_logout_requested() {
this->close();
}
void AdminPanel::on_vessel_add() {
void AdminPanel::on_vessel_add_edit(bool edit) {
}
void AdminPanel::on_vessel_remove() {
auto selected = ui->tv_vessels->selectionModel()->selectedRows();
if (selected.length() == 0) {
return;
}
QMessageBox delConf(this);
delConf.setIcon(QMessageBox::Question);
delConf.setWindowTitle(tr("Deletion confirmation"));
delConf.setText(tr("Are you sure you want to delete these vessels?"));
delConf.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
delConf.setDefaultButton(QMessageBox::No);
if (delConf.exec() == QMessageBox::No) {
return;
}
foreach (auto mIdx, selected) {
int idx = mIdx.row();
qDebug() << idx << ' ' << mIdx.data() << '\n';
}
vvm->update();
}
void AdminPanel::on_user_add() {
void AdminPanel::on_user_add_edit(bool edit) {
auto selected = ui->tv_users->selectionModel()->selectedRows();
if (edit && selected.length() != 1) {
return;
}
user_entity usr;
if (edit) {
int idx = selected[0].row();
usr = apparatus::instance()->get_auth_subsystem()->users()[idx];
if (usr.id() == this->user.id()) {
QMessageBox::critical(this, "Error", "You cannot edit yourself");
return;
}
}
UserEditDialog ued(this);
ued.setWindowTitle(edit? "Edit user" : "New user");
ued.set_user(&usr, edit);
if (ued.exec() != UserEditDialog::Accepted) {
return;
}
auto data = ued.user();
if (edit) {
bool success;
auto user = apparatus::instance()->get_auth_subsystem()->get_user(usr.login(), success);
if (success) {
user->set_password(data->password);
user->set_role(data->role);
QMessageBox::information(this, "Info", "User edited successfully (note: you cannot change login)");
}
else {
QMessageBox::critical(this, "Error", "Error while editing user");
return;
}
}
else {
bool success = apparatus::instance()->get_auth_subsystem()->register_user(data->login, data->password, data->role);
if (success) {
QMessageBox::information(this, "Info", "User created successfully");
}
else {
QMessageBox::critical(this, "Error", "Error while creating user");
return;
}
}
uvm->update();
}
void AdminPanel::on_user_remove() {
auto selected = ui->tv_users->selectionModel()->selectedRows();
if (selected.length() == 0) {
return;
}
QMessageBox delConf(this);
delConf.setIcon(QMessageBox::Question);
delConf.setWindowTitle(tr("Deletion confirmation"));
delConf.setText(tr("Are you sure you want to delete these users?"));
delConf.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
delConf.setDefaultButton(QMessageBox::No);
if (delConf.exec() == QMessageBox::No) {
return;
}
auto _u = apparatus::instance()->get_auth_subsystem()->users();
foreach (auto mIdx, selected) {
int idx = mIdx.row();
auto ent = _u[idx];
if (ent.id() == user.id()) {
QMessageBox::critical(this, "Error", "You cannot delete yourself!");
break;
}
apparatus::instance()->get_auth_subsystem()->remove_user(ent.login());
}
uvm->update();
}
void AdminPanel::on_delivery_point_add() {
void AdminPanel::on_delivery_point_add_edit(bool edit) {
}
void AdminPanel::on_delivery_point_remove() {
auto selected = ui->tv_dp->selectionModel()->selectedRows();
if (selected.length() == 0) {
return;
}
QMessageBox delConf(this);
delConf.setIcon(QMessageBox::Question);
delConf.setWindowTitle(tr("Deletion confirmation"));
delConf.setText(tr("Are you sure you want to delete these delivery points?"));
delConf.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
delConf.setDefaultButton(QMessageBox::No);
if (delConf.exec() == QMessageBox::No) {
return;
}
foreach (auto mIdx, selected) {
int idx = mIdx.row();
qDebug() << idx << ' ' << mIdx.data() << '\n';
}
dpvm->update();
}