#include "basketmodel.h" #include #include BasketModel::BasketModel(Marketplace* market, QObject* parent) : QAbstractTableModel(parent), marketplace_(market) { } int BasketModel::rowCount([[maybe_unused]] const QModelIndex& parent) const { return static_cast(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; switch (index.column()) { case 0: [[fallthrough]]; case 1: myFont.setFamily("monospace"); return myFont; case 2: return myFont; case 3: myFont.setFamily("monospace"); return myFont; } } 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) { emit beginInsertRows(QModelIndex(), marketplace_->getBasket().size(), marketplace_->getBasket().size()); auto article = std::make_unique
(price); article->createUuid(); 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->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; }