335 lines
9.9 KiB
C++
335 lines
9.9 KiB
C++
#include "scompanylistwidget.h"
|
|
#include "sutilfunction.h"
|
|
#include "sutilclass.h"
|
|
#include <QPushButton>
|
|
#include <QString>
|
|
#include <QVector>
|
|
#include <QCalendarWidget>
|
|
#include <QDateEdit>
|
|
#include <QTableWidget>
|
|
#include <QVBoxLayout>
|
|
#include <QSqlDatabase>
|
|
#include <QSettings>
|
|
#include <QMessageBox>
|
|
#include <QSqlQuery>
|
|
#include <QSqlError>
|
|
#include <QDebug>
|
|
|
|
|
|
namespace
|
|
{
|
|
QString strDatabaseName("companylist");
|
|
}
|
|
|
|
enum class SCompanyListWidget::E_TABLE_HEADER
|
|
{
|
|
COMPANY = 0,
|
|
START_DATE,
|
|
END_DATE,
|
|
EVENT_NUM,
|
|
STATUS,
|
|
MAX
|
|
};
|
|
|
|
SCompanyListWidget::~SCompanyListWidget()
|
|
{
|
|
/*
|
|
if (m_pwParent == nullptr)
|
|
{
|
|
delete m_pbtnSearch;
|
|
delete m_pbtnRefresh;
|
|
delete m_pdeEnd;
|
|
delete m_pdeStart;
|
|
delete m_ptableWidget;
|
|
}
|
|
*/
|
|
}
|
|
|
|
SCompanyListWidget::SCompanyListWidget(QWidget* parent):
|
|
QWidget(parent),
|
|
m_pbtnSearch(new QPushButton(this)), m_pbtnRefresh(new QPushButton(this)),
|
|
m_ptableWidget(new QTableWidget(this)), m_pdeStart(new QDateEdit(this)),
|
|
m_pdeEnd(new QDateEdit(this)), m_playout(new QVBoxLayout(this)), m_pwParent(this),
|
|
m_pslTableHeader(new QStringList)
|
|
|
|
{
|
|
*m_pslTableHeader << "Company" << "Start date" << "End date" << "Event Num" << "Status";
|
|
initButton();
|
|
initCalender();
|
|
initLayout();
|
|
initTableWidget();
|
|
initDatabase();
|
|
}
|
|
|
|
void SCompanyListWidget::initButton()
|
|
{
|
|
m_pbtnSearch->setText("Search");
|
|
m_pbtnRefresh->setText("Refresh");
|
|
connect(m_pbtnSearch, &QPushButton::released, this, &SCompanyListWidget::search);
|
|
connect(m_pbtnRefresh, &QPushButton::released, this, &SCompanyListWidget::refresh);
|
|
}
|
|
|
|
void SCompanyListWidget::initDatabase()
|
|
{
|
|
databaseSetting(strDatabaseName);
|
|
}
|
|
|
|
void SCompanyListWidget::initCalender()
|
|
{
|
|
// Qt manages calenderwidget variable
|
|
QCalendarWidget* calenderwidget = new QCalendarWidget();
|
|
m_pdeStart->setCalendarWidget(calenderwidget);
|
|
m_pdeEnd->setCalendarWidget(calenderwidget);
|
|
m_pdeStart->setCalendarPopup(true);
|
|
m_pdeEnd->setCalendarPopup(true);
|
|
}
|
|
|
|
void SCompanyListWidget::initLayout()
|
|
{
|
|
QHBoxLayout *pblbutton = new QHBoxLayout;
|
|
pblbutton->addWidget(m_pdeStart);
|
|
pblbutton->addWidget(m_pdeEnd);
|
|
pblbutton->addWidget(m_pbtnSearch);
|
|
pblbutton->addWidget(m_pbtnRefresh);
|
|
|
|
m_playout->addWidget(m_ptableWidget);
|
|
m_playout->addLayout(pblbutton);
|
|
|
|
}
|
|
|
|
void SCompanyListWidget::initTableWidget()
|
|
{
|
|
m_ptableWidget->setColumnCount(m_pslTableHeader->size());
|
|
m_ptableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
|
|
m_ptableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|
m_ptableWidget->setSortingEnabled(true);
|
|
//m_ptableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
|
connect(m_ptableWidget, &QTableWidget::itemSelectionChanged,
|
|
this, &SCompanyListWidget::slotClickedItem);
|
|
}
|
|
|
|
|
|
void SCompanyListWidget::slotClickedItem()
|
|
{
|
|
/*
|
|
qDebug() << "signalClickedItem";
|
|
auto kkk = getSelectedList();
|
|
foreach (auto& k, kkk)
|
|
{
|
|
qDebug() << k[0].text() << ", " << k[1].text() << ", " << k[2].text() << ", " << k[3].text();
|
|
}
|
|
*/
|
|
|
|
emit signalClickedItem();
|
|
}
|
|
|
|
void SCompanyListWidget::resetTableHeader()
|
|
{
|
|
m_ptableWidget->clear();
|
|
m_ptableWidget->setHorizontalHeaderLabels(*m_pslTableHeader);
|
|
}
|
|
|
|
|
|
void SCompanyListWidget::enableTableWidget(bool _enable)
|
|
{
|
|
m_ptableWidget->setEnabled(_enable);
|
|
}
|
|
|
|
|
|
QVBoxLayout* SCompanyListWidget::getLayout() const
|
|
{
|
|
return m_playout;
|
|
}
|
|
|
|
|
|
void SCompanyListWidget::refresh()
|
|
{
|
|
QSqlDatabase db = QSqlDatabase::database(strDatabaseName);
|
|
if (db.open() == false)
|
|
{
|
|
messageBoxError("Error", "Database conncection error");
|
|
db.close();
|
|
return;
|
|
}
|
|
//select num, name, startdate, enddate from company join company_event_map where company.num = company_event_map.company_num
|
|
|
|
QString strQuery("select company.num, name, eventgroup.startdate, eventgroup.enddate, "
|
|
"count(company_event_map.company_num) as cnt "
|
|
"from company "
|
|
"inner join company_event_map "
|
|
"on company.num = company_event_map.company_num "
|
|
"inner join eventgroup "
|
|
"on eventgroup.company_num = company.num "
|
|
"group by company.num;"
|
|
);
|
|
QSqlQuery query(db);
|
|
if (!query.exec(strQuery))
|
|
{
|
|
messageBoxError("Mysql Query error", strQuery + "\n\n" + query.lastError().text());
|
|
db.close();
|
|
return;
|
|
}
|
|
|
|
resetTableHeader();
|
|
m_ptableWidget->setRowCount(query.size());
|
|
|
|
int nRow = 0;
|
|
while (query.next())
|
|
{
|
|
|
|
QTableWidgetItem *itemCompany =
|
|
new QTableWidgetItem(query.value(static_cast<int>(E_TABLE_HEADER::COMPANY) + 1).toString());
|
|
itemCompany->setData(Qt::UserRole, query.value(0));
|
|
m_ptableWidget->setRowHidden(nRow, false);
|
|
|
|
m_ptableWidget->setItem(nRow, static_cast<int>(E_TABLE_HEADER::COMPANY), itemCompany);
|
|
m_ptableWidget->setItem(nRow, static_cast<int>(E_TABLE_HEADER::START_DATE),
|
|
new QTableWidgetItem(query.value(static_cast<int>(E_TABLE_HEADER::START_DATE) + 1).toString()));
|
|
m_ptableWidget->setItem(nRow, static_cast<int>(E_TABLE_HEADER::END_DATE),
|
|
new QTableWidgetItem(query.value(static_cast<int>(E_TABLE_HEADER::END_DATE) + 1).toString()));
|
|
m_ptableWidget->setItem(nRow, static_cast<int>(E_TABLE_HEADER::EVENT_NUM),
|
|
new STableWidgetItem(QString::number(
|
|
query.value(static_cast<int>(E_TABLE_HEADER::EVENT_NUM) + 1).toInt())));
|
|
m_ptableWidget->setItem(nRow, static_cast<int>(E_TABLE_HEADER::STATUS),
|
|
new QTableWidgetItem(""));
|
|
++nRow;
|
|
}
|
|
|
|
db.close();
|
|
resetSearchDate();
|
|
}
|
|
|
|
void SCompanyListWidget::resetSearchDate()
|
|
{
|
|
QDate startDate(2100, 12, 13);
|
|
QDate endDate(2000, 1, 1);
|
|
|
|
QDate _startDate;
|
|
QDate _endDate;
|
|
|
|
for (int i = 0; i < m_ptableWidget->rowCount(); ++i)
|
|
{
|
|
_startDate = QDateTime::fromString(
|
|
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::START_DATE))->text(), "yyyy-MM-dd").date();
|
|
_endDate = QDateTime::fromString(
|
|
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::END_DATE))->text(), "yyyy-MM-dd").date();
|
|
startDate = (startDate < _startDate) ? startDate : _startDate;
|
|
endDate = (endDate > _endDate) ? endDate : _endDate;
|
|
}
|
|
|
|
m_pdeStart->setDate(startDate);
|
|
m_pdeEnd->setDate(endDate);
|
|
}
|
|
|
|
|
|
void SCompanyListWidget::search()
|
|
{
|
|
QDate startDate = m_pdeStart->date();
|
|
QDate endDate = m_pdeEnd->date();
|
|
|
|
QDate _startDate;
|
|
QDate _endDate;
|
|
|
|
for (int i = 0; i < m_ptableWidget->rowCount(); ++i)
|
|
{
|
|
_startDate = QDateTime::fromString(
|
|
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::START_DATE))->text(), "yyyy-MM-dd").date();
|
|
_endDate = QDateTime::fromString(
|
|
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::END_DATE))->text(), "yyyy-MM-dd").date();
|
|
if (startDate <= _startDate && _endDate <= endDate)
|
|
m_ptableWidget->setRowHidden(i, false);
|
|
else
|
|
m_ptableWidget->setRowHidden(i, true);
|
|
}
|
|
}
|
|
|
|
void SCompanyListWidget::setRunning(int _id)
|
|
{
|
|
for (int i = 0; i < m_ptableWidget->rowCount(); ++i)
|
|
{
|
|
auto item = m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::COMPANY));
|
|
if (item->data(Qt::UserRole).toInt() == _id)
|
|
{
|
|
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::STATUS))->setText("Running");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void SCompanyListWidget::unsetRunning(int _id)
|
|
{
|
|
for (int i = 0; i < m_ptableWidget->rowCount(); ++i)
|
|
{
|
|
auto item = m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::COMPANY));
|
|
if (item->data(Qt::UserRole).toInt() == _id)
|
|
{
|
|
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::STATUS))->setText("");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void SCompanyListWidget::setRunning(const QVector<int>& _ids)
|
|
{
|
|
foreach (auto& _id, _ids)
|
|
{
|
|
setRunning(_id);
|
|
}
|
|
}
|
|
|
|
void SCompanyListWidget::unsetRunning(const QVector<int>& _ids)
|
|
{
|
|
foreach (auto& _id, _ids)
|
|
{
|
|
unsetRunning(_id);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
void SCompanyListWidget::setRunning(QVector<int>&& _ids)
|
|
{
|
|
foreach (auto& _id, _ids)
|
|
{
|
|
setRunning(_id);
|
|
}
|
|
}
|
|
|
|
void SCompanyListWidget::unsetRunning(QVector<int>&& _ids)
|
|
{
|
|
foreach (auto& _id, _ids)
|
|
{
|
|
unsetRunning(_id);
|
|
}
|
|
}
|
|
*/
|
|
|
|
QVector<QVector<QTableWidgetItem>> SCompanyListWidget::getSelectedList() const
|
|
{
|
|
QVector<QVector<QTableWidgetItem>> items;
|
|
auto modelIndexes = m_ptableWidget->selectionModel()->selectedRows();
|
|
|
|
foreach (auto& modelIndex, modelIndexes)
|
|
{
|
|
if (!m_ptableWidget->isRowHidden(modelIndex.row()))
|
|
{
|
|
QVector<QTableWidgetItem> item;
|
|
item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast<int>(E_TABLE_HEADER::COMPANY))));
|
|
item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast<int>(E_TABLE_HEADER::START_DATE))));
|
|
item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast<int>(E_TABLE_HEADER::END_DATE))));
|
|
item.append(STableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast<int>(E_TABLE_HEADER::EVENT_NUM))));
|
|
items.append(item);
|
|
}
|
|
}
|
|
return items;
|
|
}
|
|
|
|
|
|
/*
|
|
void SCompanyListWidget::selectedItem(int i)
|
|
{
|
|
|
|
}
|
|
*/
|