#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 #include #include 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( 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(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 &valuesList) { for (const auto &value : valuesList) { if (!value.isValid()) { return; } } }