summaryrefslogtreecommitdiff
path: root/ord.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'ord.cxx')
-rw-r--r--ord.cxx77
1 files changed, 77 insertions, 0 deletions
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 <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();
+ }
+ }
+
+}