diff options
author | ꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id> | 2020-07-16 08:19:39 +0800 |
---|---|---|
committer | ꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id> | 2020-07-16 08:19:39 +0800 |
commit | e790f72bdbea00c353709dc5a9920527121eb57c (patch) | |
tree | 622a65b4ee9b5e8bd7aa7a9fede9d47b69d82378 /ord.cxx | |
parent | 4ba15985b35566a99e822673fb355a4f4efa09fc (diff) |
Rename basket to ord
Diffstat (limited to 'ord.cxx')
-rw-r--r-- | ord.cxx | 77 |
1 files changed, 77 insertions, 0 deletions
@@ -0,0 +1,77 @@ +#include <algorithm> +#include <icclient/ord.h> +#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<int, QByteArray> Ord::roleNames() const + { + return QHash<int, QByteArray>{ + {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(); + } + } + +} |