From 23f9e1ec0286ae4ef30d1262adce1075a07579f7 Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Wed, 10 Jan 2018 16:41:07 +0100 Subject: [PATCH] . --- cmainwindow.cpp | 7 ++- cpartdistributor.cpp | 18 ++++-- cpartdistributor.h | 1 + cpartlistitem.cpp | 127 +++++++++++++++++++++++++++++++++++++++++++ cpartlistitem.h | 68 +++++++++++++++++++++++ cpartlistwindow.cpp | 77 +++++++++++++++++++++++++- cpartlistwindow.h | 53 ++++++++++++------ cpartwindow.cpp | 19 +++++-- qtPartlist.pro | 6 +- 9 files changed, 346 insertions(+), 30 deletions(-) create mode 100644 cpartlistitem.cpp create mode 100644 cpartlistitem.h diff --git a/cmainwindow.cpp b/cmainwindow.cpp index 045586a..e3f334c 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -145,7 +145,8 @@ void cMainWindow::initDB() query.exec("CREATE TABLE partlistitem (" " id INTEGER PRIMARY KEY," " partlistID INTEGER REFERENCES partlist (id)," - " part_disttributorID INTEGER REFERENCES part_distributor (id)," + " partID INTEGER REFERENCES par (id)," + " distributorID INTEGER REFERENCES distributor (id)," " replaceID INTEGER REFERENCES partlistitem (id)," " reference STRING," " description TEXT," @@ -585,6 +586,8 @@ void cMainWindow::on_m_lpMenuPartlistNew_triggered() ui->m_lpMainTab->addTab(lpNew, szNew); ui->m_lpMainTab->setCurrentWidget(lpNew); + lpNew->setList(&m_distributorList, &m_partGroupList, &m_partList, &m_partDistributorList); + connect(lpNew, SIGNAL(partlistChanged(QWidget*)), this, SLOT(partlistChanged(QWidget*))); } @@ -633,6 +636,8 @@ void cMainWindow::on_m_lpMenuPartlistOpen_triggered() lpNew->setMainTab(ui->m_lpMainTab); ui->m_lpMainTab->addTab(lpNew, "INITIALIZING"); ui->m_lpMainTab->setCurrentWidget(lpNew); + + lpNew->setList(&m_distributorList, &m_partGroupList, &m_partList, &m_partDistributorList); lpNew->setPartlistID(id); connect(lpNew, SIGNAL(partlistChanged(QWidget*)), this, SLOT(partlistChanged(QWidget*))); diff --git a/cpartdistributor.cpp b/cpartdistributor.cpp index 360c109..e50de26 100644 --- a/cpartdistributor.cpp +++ b/cpartdistributor.cpp @@ -83,6 +83,19 @@ QString cPartDistributor::link() } cPartDistributor* cPartDistributorList::add(qint32 id) +{ + cPartDistributor* lpPartDistributor = find(id); + + if(lpPartDistributor) + return(lpPartDistributor); + + lpPartDistributor = new cPartDistributor; + lpPartDistributor->setID(id); + append(lpPartDistributor); + return(lpPartDistributor); +} + +cPartDistributor* cPartDistributorList::find(qint32 id) { for(int x = 0;x < count();x++) { @@ -90,8 +103,5 @@ cPartDistributor* cPartDistributorList::add(qint32 id) return(at(x)); } - cPartDistributor* lpPartDistributor = new cPartDistributor; - lpPartDistributor->setID(id); - append(lpPartDistributor); - return(lpPartDistributor); + return(0); } diff --git a/cpartdistributor.h b/cpartdistributor.h index 9e7483b..5de0c08 100644 --- a/cpartdistributor.h +++ b/cpartdistributor.h @@ -50,6 +50,7 @@ class cPartDistributorList : public QList { public: cPartDistributor* add(qint32 id); + cPartDistributor* find(qint32 id); }; #endif // CPARTDISTRIBUTOR_H diff --git a/cpartlistitem.cpp b/cpartlistitem.cpp new file mode 100644 index 0000000..48c02ed --- /dev/null +++ b/cpartlistitem.cpp @@ -0,0 +1,127 @@ +#include "cpartlistitem.h" + + +cPartlistItem::cPartlistItem() : + m_id(-1), + m_partlistID(-1), + m_partID(-1), + m_distributorID(-1), + m_replaceID(-1), + m_szReference(""), + m_szDescription(""), + m_state(STATE_init), + m_dPrice(0.0) +{ +} + +void cPartlistItem::setID(const qint32& id) +{ + m_id = id; +} + +qint32 cPartlistItem::id() +{ + return(m_id); +} + +void cPartlistItem::setPartlistID(const qint32& id) +{ + m_partlistID = id; +} + +qint32 cPartlistItem::partlistID() +{ + return(m_partlistID); +} + +void cPartlistItem::setPartID(const qint32& id) +{ + m_partID = id; +} + +qint32 cPartlistItem::partID() +{ + return(m_partID); +} + +void cPartlistItem::setDistributorID(const qint32& id) +{ + m_distributorID = id; +} + +qint32 cPartlistItem::distributorID() +{ + return(m_distributorID); +} + +void cPartlistItem::setReplaceID(const qint32& id) +{ + m_replaceID = id; +} + +qint32 cPartlistItem::replaceID() +{ + return(m_replaceID); +} + +void cPartlistItem::setReference(const QString& szReference) +{ + m_szReference = szReference; +} + +QString cPartlistItem::reference() +{ + return(m_szReference); +} + +void cPartlistItem::setDescription(const QString& szDescription) +{ + m_szDescription = szDescription; +} + +QString cPartlistItem::description() +{ + return(m_szDescription); +} + +void cPartlistItem::setState(const cPartlistItem::STATE& state) +{ + m_state = state; +} + +cPartlistItem::STATE cPartlistItem::state() +{ + return(m_state); +} + +void cPartlistItem::setPrice(const qreal& price) +{ + m_dPrice = price; +} + +qreal cPartlistItem::price() +{ + return(m_dPrice); +} + +cPartlistItem* cPartlistItemList::add(qint32 id) +{ + cPartlistItem* lpPartlistItem = find(id); + if(lpPartlistItem) + return(lpPartlistItem); + + lpPartlistItem = new cPartlistItem; + lpPartlistItem->setID(id); + append(lpPartlistItem); + return(lpPartlistItem); +} + +cPartlistItem* cPartlistItemList::find(qint32 id) +{ + for(int x = 0;x < count();x++) + { + if(at(x)->id() == id) + return(at(x)); + } + return(0); +} diff --git a/cpartlistitem.h b/cpartlistitem.h new file mode 100644 index 0000000..34a264e --- /dev/null +++ b/cpartlistitem.h @@ -0,0 +1,68 @@ +#ifndef CPARTLISTITEM_H +#define CPARTLISTITEM_H + + +#include +#include + + +class cPartlistItem +{ +public: + enum STATE + { + STATE_init = 0, + STATE_ordered = 1, + STATE_received = 2, + }; + + cPartlistItem(); + + void setID(const qint32& id); + qint32 id(); + + void setPartlistID(const qint32& id); + qint32 partlistID(); + + void setPartID(const qint32& id); + qint32 partID(); + + void setDistributorID(const qint32& id); + qint32 distributorID(); + + void setReplaceID(const qint32& id); + qint32 replaceID(); + + void setReference(const QString& szReference); + QString reference(); + + void setDescription(const QString& szDescription); + QString description(); + + void setState(const STATE& state); + STATE state(); + + void setPrice(const qreal& price); + qreal price(); +private: + qint32 m_id; + qint32 m_partlistID; + qint32 m_partID; + qint32 m_distributorID; + qint32 m_replaceID; + QString m_szReference; + QString m_szDescription; + STATE m_state; + qreal m_dPrice; +}; + +Q_DECLARE_METATYPE(cPartlistItem*) + +class cPartlistItemList : public QList +{ +public: + cPartlistItem* add(qint32 id); + cPartlistItem* find(qint32 id); +}; + +#endif // CPARTLISTITEM_H diff --git a/cpartlistwindow.cpp b/cpartlistwindow.cpp index dc4df66..3d3d181 100644 --- a/cpartlistwindow.cpp +++ b/cpartlistwindow.cpp @@ -15,9 +15,16 @@ cPartlistWindow::cPartlistWindow(QWidget *parent) : ui(new Ui::cPartlistWindow), m_lpMainTab(0), m_id(-1), - m_bSomethingChanged(false) + m_bSomethingChanged(false), + m_lpDistributorList(0), + m_lpPartGroupList(0), + m_lpPartList(0), + m_lpPartDistributorList(0) { ui->setupUi(this); + + m_lpPartListModel = new QStandardItemModel(0, 3); + ui->m_lpPartList->setModel(m_lpPartListModel); } cPartlistWindow::~cPartlistWindow() @@ -71,6 +78,38 @@ void cPartlistWindow::setPartlistID(const qint32& id) m_lpMainTab->setTabText(m_lpMainTab->currentIndex(), query.value("name").toString()); partlistChanged(this); } + + query.prepare("SELECT id, partID, distributorID, replaceID, reference, description, state, price FROM partlistitem WHERE partlistID=:partlistID;"); + query.bindValue(":partlistID", m_id); + + if(!query.exec()) + { + myDebug << query.lastError().text(); + return; + } + + while(query.next()) + { + cPartlistItem* lpPartlistItem = m_partlistItemList.add(query.value("id").toInt()); + lpPartlistItem->setPartlistID(m_id); + lpPartlistItem->setPartID(query.value("partID").toInt()); + lpPartlistItem->setDistributorID(query.value("distributorID").toInt()); + lpPartlistItem->setReplaceID(query.value("replaceID").toInt()); + lpPartlistItem->setReference(query.value("reference").toString()); + lpPartlistItem->setDescription(query.value("description").toString()); + lpPartlistItem->setState((cPartlistItem::STATE)query.value("state").toInt()); + lpPartlistItem->setPrice(query.value("price").toReal()); + } + + showPartList(); +} + +void cPartlistWindow::setList(cDistributorList* lpDistributorList, cPartGroupList* lpPartGroupList, cPartList* lpPartList, cPartDistributorList* lpPartDistributorList) +{ + m_lpDistributorList = lpDistributorList; + m_lpPartGroupList = lpPartGroupList; + m_lpPartList = lpPartList; + m_lpPartDistributorList = lpPartDistributorList; } void cPartlistWindow::on_m_lpName_textChanged(const QString &arg1) @@ -164,6 +203,40 @@ bool cPartlistWindow::saveAs() return(save(m_id)); } +void cPartlistWindow::showPartList() +{ + m_lpPartListModel->clear(); + + QStringList header; + header << tr("reference") << tr("part") << tr("distributor") << tr("state") << tr("price") << tr("description"); + m_lpPartListModel->setHorizontalHeaderLabels(header); + + for(int x = 0;x < m_partlistItemList.count();x++) + { + QList lpItems; + cPartlistItem* lpPartlistItem = m_partlistItemList.at(x); + + for(int z = 0;z < header.count();z++) + lpItems.append(new QStandardItem); + + lpItems.at(0)->setText(lpPartlistItem->reference()); + lpItems.at(1)->setText(m_lpPartList->find(lpPartlistItem->partID())->name()); + if(lpPartlistItem->distributorID()) + lpItems.at(2)->setText(m_lpDistributorList->find(lpPartlistItem->distributorID())->name()); + //lpItems.at(3)->setText(lpPartlistItem->state()); + lpItems.at(4)->setText(QString::number(lpPartlistItem->price(), 'f', 2)); + lpItems.at(5)->setText(lpPartlistItem->description()); + + for(int z = 0;z < header.count();z++) + lpItems.at(z)->setData(QVariant::fromValue(lpPartlistItem), Qt::UserRole); + + m_lpPartListModel->appendRow(lpItems); + } + + for(int z = 0;z < header.count();z++) + ui->m_lpPartList->resizeColumnToContents(z); +} + bool cPartlistWindow::save(qint32 id) { QSqlQuery query; @@ -194,6 +267,6 @@ bool cPartlistWindow::somethingChanged() return(m_bSomethingChanged); } -void cPartlistWindow::on_m_lpPartList_doubleClicked(const QModelIndex &index) +void cPartlistWindow::on_m_lpPartList_doubleClicked(const QModelIndex &/*index*/) { } diff --git a/cpartlistwindow.h b/cpartlistwindow.h index 01d18d4..b9befb4 100644 --- a/cpartlistwindow.h +++ b/cpartlistwindow.h @@ -1,8 +1,18 @@ #ifndef CPARTLISTWINDOW_H #define CPARTLISTWINDOW_H + +#include "cdistributor.h" +#include "cpartgroup.h" +#include "cpart.h" +#include "cpartdistributor.h" + +#include "cpartlistitem.h" + #include #include +#include + namespace Ui { class cPartlistWindow; @@ -16,32 +26,43 @@ public: explicit cPartlistWindow(QWidget *parent = 0); ~cPartlistWindow(); - void setMainTab(QTabWidget* lpMainTab); + void setMainTab(QTabWidget* lpMainTab); - void setPartlistName(const QString& szPartlistName); - QString partlistName(); + void setPartlistName(const QString& szPartlistName); + QString partlistName(); - void setPartlistID(const qint32& id); + void setPartlistID(const qint32& id); + void setList(cDistributorList* lpDistributorList, cPartGroupList* lpPartGroupList, cPartList* lpPartList, cPartDistributorList* lpPartDistributorList); - bool close(); - bool save(); - bool saveAs(); + bool close(); + bool save(); + bool saveAs(); - bool somethingChanged(); + bool somethingChanged(); private slots: - void on_m_lpName_textChanged(const QString &arg1); - void on_m_lpPartList_doubleClicked(const QModelIndex &index); + void on_m_lpName_textChanged(const QString &arg1); + void on_m_lpPartList_doubleClicked(const QModelIndex &index); signals: - void partlistChanged(QWidget* lpWidget) const; + void partlistChanged(QWidget* lpWidget) const; private: - Ui::cPartlistWindow *ui; - QTabWidget* m_lpMainTab; - qint32 m_id; - bool m_bSomethingChanged; + Ui::cPartlistWindow* ui; + QTabWidget* m_lpMainTab; + QStandardItemModel* m_lpPartListModel; + qint32 m_id; + bool m_bSomethingChanged; - bool save(qint32 id); + cDistributorList* m_lpDistributorList; + cPartGroupList* m_lpPartGroupList; + cPartList* m_lpPartList; + cPartDistributorList* m_lpPartDistributorList; + + cPartlistItemList m_partlistItemList; + + void showPartList(); + + bool save(qint32 id); }; #endif // CPARTLISTWINDOW_H diff --git a/cpartwindow.cpp b/cpartwindow.cpp index df3348f..bc847df 100644 --- a/cpartwindow.cpp +++ b/cpartwindow.cpp @@ -223,10 +223,10 @@ void cPartWindow::onDelete() continue; QSqlQuery query; - QString szQuery; - szQuery = QString("SELECT * FROM partlistitem WHERE partID = %1;").arg(lpPart->id()); - if(!query.exec(szQuery)) + query.prepare("SELECT * FROM partlistitem WHERE partID = :partID;"); + query.bindValue(":partID", lpPart->id()); + if(!query.exec()) { myDebug << query.lastError().text(); continue; @@ -241,8 +241,17 @@ void cPartWindow::onDelete() if(QMessageBox::question(this, "DELETE", QString("Are you sure to delete part '%1'?").arg(lpPart->name())) == QMessageBox::No) continue; - szQuery = QString("DELETE FROM part WHERE id=%1;").arg(lpPart->id()); - if(!query.exec(szQuery)) + query.prepare("DELETE FROM part_distributor WHERE partID = :partID;"); + query.bindValue(":partID", lpPart->id()); + if(!query.exec()) + { + myDebug << query.lastError().text(); + continue; + } + + query.prepare("DELETE FROM part WHERE id=:partID;"); + query.bindValue(":partID", lpPart->id()); + if(!query.exec()) { myDebug << query.lastError().text(); continue; diff --git a/qtPartlist.pro b/qtPartlist.pro index 7eaa6fd..31f0f4f 100644 --- a/qtPartlist.pro +++ b/qtPartlist.pro @@ -37,7 +37,8 @@ SOURCES += \ cparteditdialog.cpp \ cpartdistributor.cpp \ clabel.cpp \ - cpartdistributoreditdialog.cpp + cpartdistributoreditdialog.cpp \ + cpartlistitem.cpp HEADERS += \ cmainwindow.h \ @@ -52,7 +53,8 @@ HEADERS += \ cparteditdialog.h \ cpartdistributor.h \ clabel.h \ - cpartdistributoreditdialog.h + cpartdistributoreditdialog.h \ + cpartlistitem.h FORMS += \ cmainwindow.ui \