| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #include "productsviewmodel.h"
- #include "models/basemodel.h"
- #include "services/settingsservice.h"
- ProductsViewModel::ProductsViewModel(QObject *parent)
- : QObject{parent}
- {
- connect(m_productsModel, &BaseModel::dataChanged, this, &ProductsViewModel::productsChanged);
- connect(m_restsModel, &BaseModel::dataChanged, this, &ProductsViewModel::productsChanged);
- connect(settings(), &SettingsService::selectedStoreIdChanged, this, &ProductsViewModel::productsChanged);
- }
- QVariantList ProductsViewModel::products() const
- {
- QVariantList res;
- for (const QVariant &product : m_productsModel->items()) {
- QVariantMap item = product.toMap();
- item["rest"] = productRest(item.value("id").toString());
- res << item;
- }
- return res;
- }
- QVariantList ProductsViewModel::order() const
- {
- QVariantList res;
- for (auto it = m_order.constBegin(); it != m_order.constEnd(); ++it) {
- QVariantMap product = m_productsModel->item(it.key());
- product["count"] = it.value().toMap().value("quantity").toDouble();
- res << product;
- }
- return res;
- }
- float ProductsViewModel::orderSum() const
- {
- float res = 0.0;
- for (auto it = m_order.constBegin(); it != m_order.constEnd(); ++it) {
- QVariantMap product = m_productsModel->item(it.key());
- float price = product.value("price", 0.0).toFloat();
- float quantity = it.value().toMap().value("quantity").toDouble();
- res += quantity * price;
- }
- return res;
- }
- void ProductsViewModel::setOrderValue(const QString &productId, float value)
- {
- if (value) {
- float price = m_productsModel->itemProperty(productId, "price", 0.0).toFloat();
- m_order[productId] = QVariantMap {
- { "productId", productId },
- { "quantity", value},
- { "price", price }
- };
- } else {
- m_order.remove(productId);
- }
- emit orderChanged();
- }
- void ProductsViewModel::submitOrder()
- {
- m_ordersModel->submitItem({
- { "userId", settings()->selectedUserId() },
- { "storeId", settings()->selectedStoreId() },
- { "products", m_order.values() },
- { "amount", orderSum() }
- });
- updateRests();
- m_order.clear();
- emit orderChanged();
- }
- float ProductsViewModel::productRest(const QString &productId) const
- {
- QString storeId = settings()->selectedStoreId();
- return m_restsModel->productRest(storeId, productId);
- }
- SettingsService *ProductsViewModel::settings() const
- {
- return SettingsService::instance();
- }
- void ProductsViewModel::updateRests() const
- {
- QString storeId = settings()->selectedStoreId();
- for (auto it = m_order.constBegin(); it != m_order.constEnd(); ++it) {
- float quantity = it.value().toMap().value("quantity", 0.0).toFloat();
- float rest = productRest(it.key());
- m_restsModel->submitRest(storeId, it.key(), rest - quantity);
- }
- }
|