productsviewmodel.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "productsviewmodel.h"
  2. #include "services/settingsservice.h"
  3. #include "models/ordersmodel.h"
  4. ProductsViewModel::ProductsViewModel(QObject *parent)
  5. : QObject{parent}
  6. {
  7. connect(&m_productsModel, &BaseModel::dataChanged, this, &ProductsViewModel::productsChanged);
  8. }
  9. QVariantList ProductsViewModel::products() const
  10. {
  11. return m_productsModel.items();
  12. }
  13. QVariantList ProductsViewModel::order() const
  14. {
  15. QVariantList res;
  16. for (auto it = m_order.constBegin(); it != m_order.constEnd(); ++it) {
  17. QVariantMap product = m_productsModel.item(it.key());
  18. product["count"] = it.value().toMap().value("quantity").toDouble();
  19. res << product;
  20. }
  21. return res;
  22. }
  23. float ProductsViewModel::orderSum() const
  24. {
  25. float res = 0.0;
  26. for (auto it = m_order.constBegin(); it != m_order.constEnd(); ++it) {
  27. QVariantMap product = m_productsModel.item(it.key());
  28. float price = product.value("price", 0.0).toFloat();
  29. float quantity = it.value().toMap().value("quantity").toDouble();
  30. res += quantity * price;
  31. }
  32. return res;
  33. }
  34. void ProductsViewModel::setOrderValue(const QString &productId, float value)
  35. {
  36. if (value) {
  37. float price = m_productsModel.itemProperty(productId, "price", 0.0).toFloat();
  38. m_order[productId] = QVariantMap {
  39. { "productId", productId },
  40. { "quantity", value},
  41. { "price", price }
  42. };
  43. } else {
  44. m_order.remove(productId);
  45. }
  46. emit orderChanged();
  47. }
  48. void ProductsViewModel::submitOrder()
  49. {
  50. OrdersModel model;
  51. model.submitOrder(QVariantMap {
  52. { "userId", settings()->selectedUserId() },
  53. { "storeId", settings()->selectedStoreId() },
  54. { "products", m_order.values() },
  55. { "amount", orderSum() }
  56. });
  57. m_order.clear();
  58. emit orderChanged();
  59. }
  60. SettingsService *ProductsViewModel::settings() const
  61. {
  62. return SettingsService::instance();
  63. }