summaryrefslogtreecommitdiff
path: root/interchange/ord.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'interchange/ord.hxx')
-rw-r--r--interchange/ord.hxx71
1 files changed, 71 insertions, 0 deletions
diff --git a/interchange/ord.hxx b/interchange/ord.hxx
new file mode 100644
index 0000000..afe77cc
--- /dev/null
+++ b/interchange/ord.hxx
@@ -0,0 +1,71 @@
+#ifndef INTERCHANGE_ORD_HXX
+#define INTERCHANGE_ORD_HXX
+
+#include <QAbstractListModel>
+#include <interchange/ord.h>
+#include "member.hxx"
+#include "product.hxx"
+
+namespace Interchange {
+
+ struct Item
+ {
+ enum ItemRoles {
+ QuantityRole = Product::PriceRole + 1
+ };
+ Item(interchange_ord_item* item) :
+ product{item->product},
+ quantity{item->quantity} {}
+ Product product;
+ unsigned int quantity;
+ bool operator==(Item const& item)
+ {
+ return product.sku == item.product.sku;
+ }
+ };
+
+ class Ord : public QAbstractListModel
+ {
+ Q_OBJECT
+ Q_PROPERTY(int rowCount READ rowCount NOTIFY rowCountChanged)
+ Q_PROPERTY(double subtotal READ subtotal NOTIFY subtotalChanged)
+ Q_PROPERTY(double shipping READ shipping NOTIFY shippingChanged)
+ Q_PROPERTY(double totalCost READ totalCost NOTIFY totalCostChanged)
+
+ public:
+ explicit Ord(QObject* parent = nullptr) :
+ QAbstractListModel{parent},
+ m_data{nullptr},
+ m_subtotal{.0},
+ m_shipping{.0},
+ m_totalCost{.0} {}
+ int rowCount(QModelIndex const& parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const
+ Q_DECL_OVERRIDE;
+ struct interchange_ord_order* data() { return m_data; }
+ void setData(struct interchange_ord_order* order);
+ double subtotal() const { return m_subtotal; }
+ double shipping() const { return m_shipping; }
+ double totalCost() const { return m_totalCost; }
+ public slots:
+// void remove(unsigned int const& indices);
+ void checkout(Member& member);
+ signals:
+ void rowCountChanged();
+ void subtotalChanged();
+ void shippingChanged();
+ void totalCostChanged();
+ protected:
+ QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;
+ private:
+ void addItem(Item const& item);
+ QList<Item> items;
+ struct interchange_ord_order* m_data;
+ double m_subtotal;
+ double m_shipping;
+ double m_totalCost;
+ };
+
+}
+
+#endif