110 lines
3.3 KiB
C++
110 lines
3.3 KiB
C++
#include "ticket_sale_widget.h"
|
|
|
|
#include "create_ticket_request.h"
|
|
#include "error_dialog.h"
|
|
#include "model_manager.h"
|
|
#include "repository_manager.h"
|
|
#include "repository_result.h"
|
|
#include "schema_metadata.h"
|
|
#include "tickets_model.h"
|
|
#include "tickets_repository.h"
|
|
#include <QLineEdit>
|
|
#include <QMessageBox>
|
|
#include <QSqlError>
|
|
|
|
TicketSaleWidget::TicketSaleWidget(QWidget *parent)
|
|
: QWidget(parent), selectedSessionId_(-1) {
|
|
setupUi(this);
|
|
|
|
initializeRepositories(); // First or second
|
|
initializeModels(); // First ir second
|
|
setupTableView(); // After initialization of models
|
|
setupConnections();
|
|
setupSessionFinder();
|
|
}
|
|
|
|
void TicketSaleWidget::setupTableView() {
|
|
tableTickets->setModel(ticketsModel_);
|
|
}
|
|
|
|
void TicketSaleWidget::initializeRepositories() {
|
|
RepositoryManager &repositoryManager = RepositoryManager::instance();
|
|
SchemaMetadata metadata = SchemaMetadata::defaultSchema();
|
|
|
|
ticketsRepository_ = repositoryManager.getRepositoryAs<TicketsRepository>(
|
|
metadata.repositoryTableName("tickets"));
|
|
|
|
if (!ticketsRepository_) {
|
|
qFatal() << "TicketSaleWidget::initializeRepositories: Failed to "
|
|
"initialize repositories";
|
|
}
|
|
}
|
|
|
|
void TicketSaleWidget::initializeModels() {
|
|
ModelManager &modelManager = ModelManager::instance();
|
|
SchemaMetadata metadata = SchemaMetadata::defaultSchema();
|
|
|
|
ticketsModel_ =
|
|
modelManager.getModelAs<TicketsModel>(metadata.modelTableName("tickets"));
|
|
|
|
if (!bool(ticketsModel_)) {
|
|
qFatal() << "TicketSaleWidget::initializeModels: Failed to initialize "
|
|
"models";
|
|
}
|
|
}
|
|
|
|
void TicketSaleWidget::setupConnections() {
|
|
connect(btnSellTicket, &QPushButton::clicked, this,
|
|
&TicketSaleWidget::onPushButtonSellTicketClicked);
|
|
|
|
connect(sessionFinder, &EntityFinderWidget::fieldRetrieved, this,
|
|
&TicketSaleWidget::onFieldRetrieved);
|
|
}
|
|
|
|
void TicketSaleWidget::setupSessionFinder() {
|
|
sessionFinder->setDefaultRelation("sessions");
|
|
sessionFinder->setLabelText(EntityFinderWidget::tr("Select session"));
|
|
sessionFinder->setLineEditPlaceholder(EntityFinderWidget::tr(
|
|
"Here will be information about selected session"));
|
|
}
|
|
|
|
void TicketSaleWidget::onPushButtonSellTicketClicked() {
|
|
if (selectedSessionId_ == -1) {
|
|
QMessageBox::warning(this, QMessageBox::tr("Error"),
|
|
QMessageBox::tr("No session selected"));
|
|
return;
|
|
}
|
|
|
|
int seatNumber = spinBoxSeatNumber->value();
|
|
QDateTime soldAt = dateTimeEditSell->isEnabled()
|
|
? dateTimeEditSell->dateTime()
|
|
: QDateTime::currentDateTime();
|
|
|
|
CreateTicketRequest request;
|
|
request.setSeatNumber(seatNumber);
|
|
request.setSessionId(selectedSessionId_);
|
|
request.setSoldAt(soldAt);
|
|
|
|
RepositoryResult result = ticketsRepository_->createTicket(request);
|
|
|
|
if (!result.success) {
|
|
qInfo() << "Failed to create ticket:" << result.errorMessage;
|
|
ErrorDialog::displayError(this, result.errorMessage);
|
|
return;
|
|
}
|
|
}
|
|
|
|
void TicketSaleWidget::onFieldRetrieved(const QSqlField &field) {
|
|
selectedSessionId_ = field.value().toInt();
|
|
}
|
|
|
|
// Check if all values in initializer list are valid
|
|
void TicketSaleWidget::validateSessionValues(
|
|
const std::initializer_list<QVariant> &valuesList) {
|
|
for (const auto &value : valuesList) {
|
|
if (!value.isValid()) {
|
|
return;
|
|
}
|
|
}
|
|
}
|