Initial commit
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
#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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user