From e8d30e66301157df8bc19a1f6503a9319c3cd35e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D1=91=D0=BF=D0=B0?= Date: Tue, 2 Apr 2024 18:43:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20intervalDialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Компоновки виджетов нет --- basket.cpp | 3 +-- blondinkawindow.cpp | 4 ++- intervaldialog.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++- intervaldialog.h | 10 +++++++ intervaldialog.ui | 60 ++++++++++++++++++++++++++++++----------- 5 files changed, 123 insertions(+), 20 deletions(-) diff --git a/basket.cpp b/basket.cpp index ba25956..b6692f7 100644 --- a/basket.cpp +++ b/basket.cpp @@ -6,9 +6,8 @@ basket::basket(QWidget *parent) : ui(new Ui::basket) { ui->setupUi(this); - this->setWindowTitle("Окно клиента"); this->setWindowTitle("Корзина"); - this -> show(); + this->show(); if (!m_db.open()) qDebug()<<"Error: DB not connectred"; else qDebug()<<"DB connected succesfully"; m_query = new QSqlQuery(m_db); diff --git a/blondinkawindow.cpp b/blondinkawindow.cpp index 4c3e5f8..95cf924 100644 --- a/blondinkawindow.cpp +++ b/blondinkawindow.cpp @@ -33,6 +33,7 @@ void BlondinkaWindow::on_hallIncomeButton_clicked() interval = new intervalDialog(); interval->setInfoLabelText("Вывести прибыль зала за интервал времени"); interval->m_db = m_db; + interval->mode = "hallIncome"; } void BlondinkaWindow::on_filmIncomeButton_clicked() @@ -40,12 +41,14 @@ void BlondinkaWindow::on_filmIncomeButton_clicked() interval = new intervalDialog(); interval->setInfoLabelText("Вывести прибыль фильма за интервал времени"); interval->m_db = m_db; + interval->mode = "filmIncome"; } void BlondinkaWindow::on_ticketsButton_clicked() { interval = new intervalDialog(); interval->setInfoLabelText("Вывести билеты, купленные за интервал времени"); interval->m_db = m_db; + interval->mode = "tickets"; } void BlondinkaWindow::on_filmRatingButton_clicked() @@ -64,5 +67,4 @@ void BlondinkaWindow::on_editFilmButton_clicked() { editFilm = new editFilmDialog(); editFilm->m_db = m_db; - } diff --git a/intervaldialog.cpp b/intervaldialog.cpp index 2df58a9..41f4ed1 100644 --- a/intervaldialog.cpp +++ b/intervaldialog.cpp @@ -7,7 +7,7 @@ intervalDialog::intervalDialog(QWidget *parent) : { ui->setupUi(this); this->show(); - + m_query = new QSqlQuery(m_db); } intervalDialog::~intervalDialog() @@ -18,3 +18,67 @@ intervalDialog::~intervalDialog() void intervalDialog::setInfoLabelText(QString string){ ui->infoLabel->setText(string); } + +void intervalDialog::tableView() +{ + QSqlQueryModel* result_model = new QSqlQueryModel(this); + m_query->exec("SELECT film_id AS Number, title, duration, year FROM films;"); + result_model->setQuery(*m_query); + ui->tableView->setModel(result_model); +} + +void intervalDialog::on_pushButton_clicked() +{ + qDebug()<dateFrom->date() >= ui->dateTo->date()){ + ui->errorLabel->setText("Неверно заданы интервалы!"); + } + else { + if (mode == "") qDebug()<<"Не задан ключ!!!!"; + if (mode == "tickets") + ticketsMode(ui->dateFrom->date(), ui->dateTo->date()); + + if (mode == "hallIncome") + hallIncomeMode(ui->dateFrom->date(), ui->dateTo->date()); + + if (mode == "filmIncome") + filmIncomeMode(ui->dateFrom->date(), ui->dateTo->date()); + } +} + +void intervalDialog::ticketsMode(QDate from, QDate to){ + m_query->prepare("SELECT Films.title, Tickets.purchase_date, Tickets.customer, Halls.hall_id, Sessions.price FROM Tickets JOIN Sessions ON Tickets.session_id = Sessions.session_id JOIN Films ON Sessions.film_id = Films.film_id JOIN Halls ON Sessions.hall_id = Halls.hall_id WHERE Tickets.purchase_date BETWEEN :from AND :to ORDER BY purchase_date;"); + m_query->bindValue(":from", from.toString("yyyy-MM-dd")); + m_query->bindValue(":to", to.toString("yyyy-MM-dd")); + + if (!m_query->exec() && !m_query->next()) + qDebug() << "Error executing query: " << m_query->lastError().text(); + + QSqlQueryModel* result_model = new QSqlQueryModel(this); + result_model->setQuery(*m_query); + ui->tableView->setModel(result_model); +} +void intervalDialog::hallIncomeMode(QDate from, QDate to){ + m_query->prepare("SELECT Halls.hall_id, SUM(Sessions.price) AS profit FROM Halls JOIN Sessions ON Halls.hall_id = Sessions.hall_id JOIN Tickets ON Sessions.session_id = Tickets.session_id WHERE Tickets.purchase_date BETWEEN :from AND :to GROUP BY Halls.hall_id;"); + m_query->bindValue(":from", from.toString("yyyy-MM-dd")); + m_query->bindValue(":to", to.toString("yyyy-MM-dd")); + + if (!m_query->exec() && !m_query->next()) + qDebug() << "Error executing query: " << m_query->lastError().text(); + + QSqlQueryModel* result_model = new QSqlQueryModel(this); + result_model->setQuery(*m_query); + ui->tableView->setModel(result_model); +} +void intervalDialog::filmIncomeMode(QDate from, QDate to){ + m_query->prepare("SELECT Films.title, SUM(Sessions.price) AS profit FROM Films LEFT JOIN Sessions ON Films.film_id = Sessions.film_id LEFT JOIN Tickets ON Sessions.session_id = Tickets.session_id WHERE Tickets.purchase_date BETWEEN :from AND :to GROUP BY Films.title;"); + m_query->bindValue(":from", from.toString("yyyy-MM-dd")); + m_query->bindValue(":to", to.toString("yyyy-MM-dd")); + qDebug()<exec() && !m_query->next()) + qDebug() << "Error executing query: " << m_query->lastError().text(); + + QSqlQueryModel* result_model = new QSqlQueryModel(this); + result_model->setQuery(*m_query); + ui->tableView->setModel(result_model); +} diff --git a/intervaldialog.h b/intervaldialog.h index e29a46a..d1003b6 100644 --- a/intervaldialog.h +++ b/intervaldialog.h @@ -19,10 +19,20 @@ public: void setInfoLabelText(QString string); QSqlDatabase m_db; + QString mode; +private slots: + void on_pushButton_clicked(); + private: Ui::intervalDialog *ui; + QSqlTableModel *m_table_model ; + QSqlQuery *m_query ; + void tableView(); + void ticketsMode(QDate from, QDate to); + void hallIncomeMode(QDate from, QDate to); + void filmIncomeMode(QDate from, QDate to); }; #endif // INTERVALDIALOG_H diff --git a/intervaldialog.ui b/intervaldialog.ui index 82bb0cc..aec3ddc 100644 --- a/intervaldialog.ui +++ b/intervaldialog.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 529 + 307 @@ -17,7 +17,7 @@ 10 - 260 + 270 91 32 @@ -32,7 +32,7 @@ - 10 + 40 30 391 20 @@ -49,13 +49,13 @@ 110 - 270 - 141 - 16 + 280 + 301 + 20 - errorLabel + ... Qt::AlignCenter @@ -64,8 +64,8 @@ - 270 - 260 + 410 + 270 114 32 @@ -77,10 +77,10 @@ - 90 + 120 60 - 234 - 26 + 292 + 28 @@ -92,7 +92,21 @@ - + + + + 0 + 0 + 0 + 2024 + 4 + 1 + + + + true + + @@ -102,7 +116,21 @@ - + + + + 0 + 0 + 0 + 2024 + 4 + 2 + + + + true + + @@ -111,7 +139,7 @@ 10 100 - 381 + 501 141 -- GitLab