130 lines
No EOL
3.7 KiB
C++
130 lines
No EOL
3.7 KiB
C++
#include "basketmodel.h"
|
|
|
|
#include <QFont>
|
|
#include <QSettings>
|
|
#include <QFontDatabase>
|
|
|
|
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::FontRole) {
|
|
QFont myFont;
|
|
|
|
QFont myFixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont);
|
|
|
|
switch (index.column()) {
|
|
case 0:
|
|
[[fallthrough]];
|
|
case 1:
|
|
return myFixedFont;
|
|
case 2:
|
|
myFixedFont.setPointSize(myFixedFont.pointSize() + 3);
|
|
return myFixedFont;
|
|
case 3:
|
|
myFixedFont.setPointSize(myFixedFont.pointSize() + 3);
|
|
return myFixedFont;
|
|
}
|
|
}
|
|
|
|
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->getCompleteArticleNo().c_str();
|
|
case 2:
|
|
return article->getSeller()->getSellerNo();
|
|
case 3:
|
|
// return article->getPrice();
|
|
return article->getPriceAsString().c_str();
|
|
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 "";
|
|
}
|
|
|
|
void BasketModel::addArticle(Seller* seller, int price, const std::string& desc)
|
|
{
|
|
emit beginInsertRows(QModelIndex(), marketplace_->getBasket().size(),
|
|
marketplace_->getBasket().size());
|
|
auto article = std::make_unique<Article>(price);
|
|
article->createUuid();
|
|
article->setDescription(desc);
|
|
article->setArticleNo(marketplace_->getNextArticleNo());
|
|
article->setSourceNo(QSettings().value("global/cashPointNo").toInt());
|
|
article->setSeller(seller);
|
|
marketplace_->addArticleToBasket(std::move(article));
|
|
emit endInsertRows();
|
|
}
|
|
|
|
void BasketModel::finishSale()
|
|
{
|
|
emit beginRemoveRows(QModelIndex(), 0, marketplace_->getBasket().size() - 1);
|
|
auto sale = std::make_unique<Sale>();
|
|
sale->createUuid();
|
|
sale->setSourceNo(QSettings().value("global/cashPointNo").toInt());
|
|
marketplace_->finishCurrentSale(std::move(sale));
|
|
emit endRemoveRows();
|
|
emit basketDataChanged();
|
|
}
|
|
|
|
void BasketModel::cancelSale()
|
|
{
|
|
emit beginRemoveRows(QModelIndex(), 0, marketplace_->getBasket().size() - 1);
|
|
marketplace_->getBasket().clear();
|
|
emit endRemoveRows();
|
|
}
|
|
|
|
bool BasketModel::removeRows(int row, int count, const QModelIndex& parent)
|
|
{
|
|
auto article = marketplace_->getBasket().at(row).get();
|
|
|
|
emit beginRemoveRows(parent, row, row + count - 1);
|
|
marketplace_->getBasket().erase(
|
|
std::remove_if(marketplace_->getBasket().begin(), marketplace_->getBasket().end(),
|
|
[&article](const auto& a) { return a->getUuid() == article->getUuid(); }),
|
|
marketplace_->getBasket().end());
|
|
emit endRemoveRows();
|
|
return true;
|
|
} |