ordersviewmodel.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "ordersviewmodel.h"
  2. #include <QDateTime>
  3. #include "models/basemodel.h"
  4. OrdersViewModel::OrdersViewModel(QObject *parent)
  5. : QAbstractListModel{parent}
  6. {
  7. connect(m_ordersModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload);
  8. connect(m_usersModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload);
  9. connect(m_productsModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload);
  10. connect(m_storesModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload);
  11. reload();
  12. }
  13. int OrdersViewModel::rowCount(const QModelIndex &) const
  14. {
  15. return m_model.count();
  16. }
  17. QVariant OrdersViewModel::data(const QModelIndex &index, int role) const
  18. {
  19. if (!index.isValid()) {
  20. return {};
  21. }
  22. return m_model.at(index.row()).toMap()[roleNames().value(role)];
  23. }
  24. QHash<int, QByteArray> OrdersViewModel::roleNames() const
  25. {
  26. return QHash<int, QByteArray> {
  27. { Roles::UserName, "userName" },
  28. { Roles::StoreName, "storeName" },
  29. { Roles::Date, "date" },
  30. { Roles::Time, "time"},
  31. { Roles::Amount, "amount" },
  32. { Roles::Products, "products" }
  33. };
  34. }
  35. void OrdersViewModel::reload()
  36. {
  37. beginResetModel();
  38. m_model.clear();
  39. for (const QVariant &vOrder : m_ordersModel->items()) {
  40. QVariantMap order = vOrder.toMap();
  41. QDateTime orderTime = QDateTime::fromSecsSinceEpoch(order.value("ts", 0).toDouble());
  42. order["date"] = orderTime.date();
  43. order["time"] = orderTime.time();
  44. order["userName"] = m_usersModel->itemProperty(order["userId"].toString(), "name").toString();
  45. order["storeName"] = m_storesModel->itemProperty(order["storeId"].toString(), "name").toString();
  46. QVariantList prodModel;
  47. for (const QVariant &prod : order["products"].toList()) {
  48. QVariantMap product = prod.toMap();
  49. product["product"] = m_productsModel->itemProperty(product.value("productId").toString(), "name");
  50. prodModel << product;
  51. }
  52. order["products"] = prodModel;
  53. m_model << order;
  54. }
  55. std::sort(m_model.begin(), m_model.end(), [](const QVariant &l, const QVariant &r) -> bool {
  56. return l.toMap().value("ts").toDouble() < r.toMap().value("ts").toDouble();
  57. });
  58. endResetModel();
  59. }