More on basket
This commit is contained in:
parent
d0f0d604ed
commit
ee8c059441
9 changed files with 183 additions and 7 deletions
|
@ -17,6 +17,7 @@ set(GUI_SOURCES
|
|||
sellermodel.cpp
|
||||
pricedialog.cpp
|
||||
pricedialog.ui
|
||||
basketmodel.cpp
|
||||
)
|
||||
|
||||
add_executable(kima2 ${GUI_SOURCES})
|
||||
|
|
94
src/gui/basketmodel.cpp
Normal file
94
src/gui/basketmodel.cpp
Normal file
|
@ -0,0 +1,94 @@
|
|||
#include "basketmodel.h"
|
||||
|
||||
BasketModel::BasketModel(Marketplace* market, QObject* parent)
|
||||
: QAbstractTableModel(parent), marketplace_(market)
|
||||
{
|
||||
}
|
||||
|
||||
int BasketModel::rowCount([[maybe_unused]] const QModelIndex& parent) const
|
||||
{
|
||||
return static_cast<int>(marketplace_->basketSize());
|
||||
}
|
||||
|
||||
int BasketModel::columnCount([[maybe_unused]] const QModelIndex& parent) const { return 4; }
|
||||
|
||||
QVariant BasketModel::data(const QModelIndex& index, int role) const
|
||||
{
|
||||
if (role != Qt::DisplayRole)
|
||||
return QVariant();
|
||||
|
||||
if (marketplace_->basketSize() == 0)
|
||||
return QVariant();
|
||||
|
||||
Article* article = marketplace_->getBasket().at(index.row()).get();
|
||||
|
||||
switch (index.column()) {
|
||||
case 0:
|
||||
return article->getUuidAsString().c_str();
|
||||
case 1:
|
||||
return article->getArticleNo();
|
||||
case 2:
|
||||
return article->getSeller()->getSellerNo();
|
||||
case 3:
|
||||
return article->getPrice();
|
||||
default:
|
||||
return "???";
|
||||
}
|
||||
return QVariant{};
|
||||
}
|
||||
|
||||
QVariant BasketModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||
{
|
||||
if (role != Qt::DisplayRole)
|
||||
return QVariant();
|
||||
|
||||
if (orientation == Qt::Horizontal) {
|
||||
switch (section) {
|
||||
case 0:
|
||||
return "ID";
|
||||
case 1:
|
||||
return "Art.Nr.";
|
||||
case 2:
|
||||
return "Verk.Nr.";
|
||||
case 3:
|
||||
return "Preis";
|
||||
default:
|
||||
return "???";
|
||||
}
|
||||
return QStringLiteral("%1").arg(section);
|
||||
} else
|
||||
return "";
|
||||
}
|
||||
|
||||
/* bool BasketModel::insertRows(int row, int count, const QModelIndex& parent)
|
||||
{
|
||||
//emit beginInsertRows(parent, row, row + count - 1);
|
||||
//auto article = std::make_unique<Article>();
|
||||
//article->createUuid();
|
||||
//article->setArticleNo(marketplace_->getNextArticleNo());
|
||||
//marketplace_->addArticleToBasket(std::move(article));
|
||||
//emit endInsertRows();
|
||||
|
||||
emit layoutChanged();
|
||||
|
||||
return true;
|
||||
} */
|
||||
|
||||
void BasketModel::addArticle(Seller* seller, int price)
|
||||
{
|
||||
emit beginInsertRows(QModelIndex(), marketplace_->getBasket().size(), marketplace_->getBasket().size());
|
||||
auto article = std::make_unique<Article>(price);
|
||||
article->createUuid();
|
||||
article->setArticleNo(marketplace_->getNextArticleNo() + marketplace_->getBasket().size());
|
||||
article->setSeller(seller);
|
||||
std::cout << "!!! Neuer Artikel: " << article->getPrice() << " Cent \n";
|
||||
marketplace_->addArticleToBasket(std::move(article));
|
||||
emit endInsertRows();
|
||||
}
|
||||
|
||||
void BasketModel::finishSale()
|
||||
{
|
||||
emit beginRemoveRows(QModelIndex(), 0, marketplace_->getBasket().size()-1);
|
||||
marketplace_->finishCurrentSale();
|
||||
emit endRemoveRows();
|
||||
}
|
29
src/gui/basketmodel.h
Normal file
29
src/gui/basketmodel.h
Normal file
|
@ -0,0 +1,29 @@
|
|||
#ifndef BASKET_MODEL_H
|
||||
#define BASKET_MODEL_H
|
||||
|
||||
#include <marketplace.h>
|
||||
|
||||
#include <QAbstractTableModel>
|
||||
|
||||
class BasketModel : public QAbstractTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit BasketModel(Marketplace* market, QObject* parent = nullptr);
|
||||
virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
|
||||
virtual int columnCount(const QModelIndex& parent = QModelIndex()) const override;
|
||||
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
|
||||
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||
//virtual Qt::ItemFlags flags(const QModelIndex& index) const override;
|
||||
//virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;
|
||||
//virtual bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex()) override;
|
||||
void addArticle(Seller* seller, int price);
|
||||
void finishSale();
|
||||
//virtual bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex()) override;
|
||||
|
||||
private:
|
||||
Marketplace* marketplace_;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,5 +1,6 @@
|
|||
#include "mainwindow.h"
|
||||
|
||||
#include "basketmodel.h"
|
||||
#include "pricedialog.h"
|
||||
#include "sellerdialog.h"
|
||||
|
||||
|
@ -20,6 +21,11 @@ MainWindow::MainWindow()
|
|||
marketplace_ = std::make_unique<Marketplace>();
|
||||
marketplace_->loadFromDb();
|
||||
statusBar()->showMessage("Gespeicherte Daten wurden geladen.", STATUSBAR_TIMEOUT);
|
||||
|
||||
BasketModel* model = new BasketModel(getMarketplace(), ui_.basketView);
|
||||
ui_.basketView->setModel(model);
|
||||
ui_.basketView->setColumnHidden(0, true); // hide the uuid
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::on_actionEditSeller_triggered()
|
||||
|
@ -46,14 +52,14 @@ void MainWindow::on_sellerNoEdit_checkSellerNo()
|
|||
|
||||
if (inputText.empty()) {
|
||||
if (marketplace_->basketSize() > 0) {
|
||||
marketplace_->finishCurrentSale();
|
||||
dynamic_cast<BasketModel*>(ui_.basketView->model())->finishSale();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
regex pattern{R"(\d{1,5})"};
|
||||
smatch result;
|
||||
|
||||
|
||||
if (!regex_match(inputText, result, pattern)) {
|
||||
return;
|
||||
}
|
||||
|
@ -66,10 +72,7 @@ void MainWindow::on_sellerNoEdit_checkSellerNo()
|
|||
auto dialogResult = priceDialog.exec();
|
||||
if (dialogResult == QDialog::Accepted) {
|
||||
int price = priceDialog.getPrice();
|
||||
auto article = std::make_unique<Article>(price);
|
||||
article->setSeller(seller);
|
||||
std::cout << "!!! Neuer Artikel: " << article->getPrice() << " Cent \n";
|
||||
marketplace_->addArticleToBasket(std::move(article));
|
||||
dynamic_cast<BasketModel*>(ui_.basketView->model())->addArticle(seller, price);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -170,7 +170,26 @@
|
|||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<item>
|
||||
<widget class="QTableView" name="tableView"/>
|
||||
<widget class="QTableView" name="basketView">
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="showGrid">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderDefaultSectionSize">
|
||||
<number>75</number>
|
||||
</attribute>
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderStretchLastSection">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue