restsviewmodel.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "restsviewmodel.h"
  2. #include "models/basemodel.h"
  3. #include "services/settingsservice.h"
  4. RestsViewModel::RestsViewModel(QObject *parent)
  5. : QObject{parent}
  6. {
  7. connect(m_restsModel, &BaseModel::dataChanged, this, &RestsViewModel::reloadRests);
  8. connect(m_productsModel, &BaseModel::dataChanged, this, &RestsViewModel::productsChanged);
  9. connect(settings(), &SettingsService::selectedStoreIdChanged, this, &RestsViewModel::productsChanged);
  10. reloadRests();
  11. }
  12. QVariantList RestsViewModel::products() const
  13. {
  14. QVariantList res;
  15. const QString storeId = settings()->selectedStoreId();
  16. const QVariantList products = m_productsModel->items();
  17. for (const QVariant &product : products) {
  18. QString productId = product.toMap().value("id").toString();
  19. QVariantMap rest = m_rests.value(storeId).value(productId).toMap();
  20. res << QVariantMap {
  21. { "productId", productId },
  22. { "title", m_productsModel->itemProperty(productId, "name").toString() },
  23. { "rest", rest.value("rest", 0.0).toFloat() }
  24. };
  25. }
  26. return res;
  27. }
  28. void RestsViewModel::setProductRest(const QString &productId, float rest)
  29. {
  30. QString storeId = settings()->selectedStoreId();
  31. QVariantMap productRest = m_rests.value(storeId).value(productId).toMap();
  32. productRest["rest"] = rest;
  33. productRest["storeId"] = storeId;
  34. productRest["productId"] = productId;
  35. QString restId = productRest.value("id").toString();
  36. if (restId.isEmpty()) {
  37. m_restsModel->addItem(productRest);
  38. } else {
  39. m_restsModel->modifyItem(restId, productRest);
  40. }
  41. }
  42. SettingsService *RestsViewModel::settings() const
  43. {
  44. return SettingsService::instance();
  45. }
  46. void RestsViewModel::reloadRests()
  47. {
  48. m_rests.clear();
  49. const QVariantList rests = m_restsModel->items();
  50. for (const QVariant &varRest : rests) {
  51. QVariantMap rest = varRest.toMap();
  52. QString storeId = rest.value("storeId").toString();
  53. QVariantMap storeRests = m_rests.value(storeId);
  54. storeRests[rest.value("productId").toString()] = rest;
  55. m_rests[storeId] = storeRests;
  56. }
  57. emit productsChanged();
  58. }