ordersviewmodel.cpp 2.2 KB

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