From e790f72bdbea00c353709dc5a9920527121eb57c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=A6=8C=20=EA=A6=AB=EA=A6=B6=20=EA=A6=8F=EA=A7=80?= =?UTF-8?q?=EA=A6=A6=EA=A6=BF=20=EA=A6=A7=20=EA=A6=AE=20=EA=A6=91=20?= =?UTF-8?q?=EA=A6=A9=20=EA=A6=AD=EA=A7=80?= Date: Thu, 16 Jul 2020 08:19:39 +0800 Subject: Rename basket to ord --- ord.cxx | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 ord.cxx (limited to 'ord.cxx') diff --git a/ord.cxx b/ord.cxx new file mode 100644 index 0000000..70ef812 --- /dev/null +++ b/ord.cxx @@ -0,0 +1,77 @@ +#include +#include +#include "qicclient/ord.hxx" + +namespace QICClient { + + int Ord::rowCount(QModelIndex const& parent) const + { + Q_UNUSED(parent) + return items.count(); + } + + QVariant Ord::data(QModelIndex const& index, int role) const + { + auto row = index.row(); + + if (row < 0 || row >= items.count()) return QVariant(); + + auto item = items[row]; + switch (role) { + case Product::SkuRole: + return item.product.sku; + case Product::DescriptionRole: + return item.product.description; + case Product::PriceRole: + return item.product.price; + case Item::QuantityRole: + return item.quantity; + default: + return QVariant(); + } + } + + QHash Ord::roleNames() const + { + return QHash{ + {Product::SkuRole, "sku"} + , {Product::DescriptionRole, "description"} + , {Product::PriceRole, "price"} + , {Item::QuantityRole, "quantity"} + }; + } + + void Ord::addItem(Item const& item) + { + auto product = item.product; + auto iterator = std::find_if(items.begin(), items.end() + , [&product](Item const& item) { + return product.sku == item.product.sku; + }); + if (iterator != items.end()) { + auto index = items.indexOf(*iterator); + beginRemoveRows(QModelIndex(), index, index); + items.removeAt(index); + endRemoveRows(); + } + + beginInsertRows(QModelIndex(), rowCount(), rowCount()); + items << item; + endInsertRows(); + emit rowCountChanged(); + } + + void Ord::setData(struct icclient_ord_order* order) + { + if (order) { + this->m_data = order; + for (size_t i = 0; i < order->nitems; i++) + addItem(Item{order->items[i]}); + m_subtotal = order->subtotal; + emit subtotalChanged(); + m_totalCost = order->total_cost; + emit totalCostChanged(); + } + } + +} -- cgit v1.2.3