Rests view was added
This commit is contained in:
@@ -25,6 +25,7 @@ set(PROJECT_SOURCES
|
|||||||
viewmodels/productsviewmodel.h viewmodels/productsviewmodel.cpp
|
viewmodels/productsviewmodel.h viewmodels/productsviewmodel.cpp
|
||||||
viewmodels/ordersviewmodel.h viewmodels/ordersviewmodel.cpp
|
viewmodels/ordersviewmodel.h viewmodels/ordersviewmodel.cpp
|
||||||
viewmodels/settingsviewmodel.h viewmodels/settingsviewmodel.cpp
|
viewmodels/settingsviewmodel.h viewmodels/settingsviewmodel.cpp
|
||||||
|
viewmodels/restsviewmodel.h viewmodels/restsviewmodel.cpp
|
||||||
services/beerservice.h services/beerservice.cpp
|
services/beerservice.h services/beerservice.cpp
|
||||||
services/settingsservice.h services/settingsservice.cpp
|
services/settingsservice.h services/settingsservice.cpp
|
||||||
services/modelsregister.h services/modelsregister.cpp
|
services/modelsregister.h services/modelsregister.cpp
|
||||||
|
|||||||
@@ -17,16 +17,24 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>ProductsView</name>
|
<name>ProductsView</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/Views/ProductsView.qml" line="87"/>
|
<location filename="qml/Views/ProductsView.qml" line="88"/>
|
||||||
<source>Summary: %1</source>
|
<source>Summary: %1</source>
|
||||||
<translation>Итого: %1</translation>
|
<translation>Итого: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/Views/ProductsView.qml" line="94"/>
|
<location filename="qml/Views/ProductsView.qml" line="95"/>
|
||||||
<source>Order</source>
|
<source>Order</source>
|
||||||
<translation>Заказать</translation>
|
<translation>Заказать</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>RestsView</name>
|
||||||
|
<message>
|
||||||
|
<location filename="qml/Views/RestsView.qml" line="8"/>
|
||||||
|
<source>Rests</source>
|
||||||
|
<translation>Остатки</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>SettingsView</name>
|
<name>SettingsView</name>
|
||||||
<message>
|
<message>
|
||||||
@@ -61,38 +69,43 @@
|
|||||||
<translation></translation>
|
<translation></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/main.qml" line="91"/>
|
<location filename="qml/main.qml" line="92"/>
|
||||||
<source>BeerLog v0.1</source>
|
<source>BeerLog v0.1</source>
|
||||||
<translation></translation>
|
<translation></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/main.qml" line="93"/>
|
<location filename="qml/main.qml" line="94"/>
|
||||||
<source>Online</source>
|
<source>Online</source>
|
||||||
<translation>В сети</translation>
|
<translation>В сети</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/main.qml" line="93"/>
|
<location filename="qml/main.qml" line="94"/>
|
||||||
<source>Offline</source>
|
<source>Offline</source>
|
||||||
<translation>Не в сети</translation>
|
<translation>Не в сети</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/main.qml" line="99"/>
|
<location filename="qml/main.qml" line="100"/>
|
||||||
<source>Orders</source>
|
<source>Orders</source>
|
||||||
<translation>Заказы</translation>
|
<translation>Заказы</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/main.qml" line="103"/>
|
<location filename="qml/main.qml" line="104"/>
|
||||||
|
<source>Rests</source>
|
||||||
|
<translation>Остатки</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="qml/main.qml" line="108"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Настройки</translation>
|
<translation>Настройки</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/main.qml" line="107"/>
|
<location filename="qml/main.qml" line="112"/>
|
||||||
<location filename="qml/main.qml" line="143"/>
|
<location filename="qml/main.qml" line="148"/>
|
||||||
<source>Quit</source>
|
<source>Quit</source>
|
||||||
<translation>Выход</translation>
|
<translation>Выход</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="qml/main.qml" line="147"/>
|
<location filename="qml/main.qml" line="152"/>
|
||||||
<source>Realy quit the application?</source>
|
<source>Realy quit the application?</source>
|
||||||
<translation>Действительно выйти из приложения?</translation>
|
<translation>Действительно выйти из приложения?</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|||||||
2
main.cpp
2
main.cpp
@@ -11,6 +11,7 @@
|
|||||||
#include "viewmodels/productsviewmodel.h"
|
#include "viewmodels/productsviewmodel.h"
|
||||||
#include "viewmodels/ordersviewmodel.h"
|
#include "viewmodels/ordersviewmodel.h"
|
||||||
#include "viewmodels/storesviewmodel.h"
|
#include "viewmodels/storesviewmodel.h"
|
||||||
|
#include "viewmodels/restsviewmodel.h"
|
||||||
#include "viewmodels/settingsviewmodel.h"
|
#include "viewmodels/settingsviewmodel.h"
|
||||||
|
|
||||||
#include "services/beerservice.h"
|
#include "services/beerservice.h"
|
||||||
@@ -51,6 +52,7 @@ int main(int argc, char *argv[])
|
|||||||
qmlRegisterType<ProductsViewModel>("ru.ded.beerlog", 1, 0, "ProductsViewModel");
|
qmlRegisterType<ProductsViewModel>("ru.ded.beerlog", 1, 0, "ProductsViewModel");
|
||||||
qmlRegisterType<OrdersViewModel>("ru.ded.beerlog", 1, 0, "OrdersViewModel");
|
qmlRegisterType<OrdersViewModel>("ru.ded.beerlog", 1, 0, "OrdersViewModel");
|
||||||
qmlRegisterType<StoresViewModel>("ru.ded.beerlog", 1, 0, "StoresViewModel");
|
qmlRegisterType<StoresViewModel>("ru.ded.beerlog", 1, 0, "StoresViewModel");
|
||||||
|
qmlRegisterType<RestsViewModel>("ru.ded.beerlog", 1, 0, "RestsViewModel");
|
||||||
qmlRegisterType<SettingsViewModel>("ru.ded.beerlog", 1, 0, "SettingsViewModel");
|
qmlRegisterType<SettingsViewModel>("ru.ded.beerlog", 1, 0, "SettingsViewModel");
|
||||||
|
|
||||||
engine.load(url);
|
engine.load(url);
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ Page {
|
|||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
anchors.margins: 10
|
||||||
|
|
||||||
ListView {
|
ListView {
|
||||||
id: productsList
|
id: productsList
|
||||||
|
|||||||
43
qml/Views/RestsView.qml
Normal file
43
qml/Views/RestsView.qml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
import QtQuick 2.15
|
||||||
|
import QtQuick.Controls 2.15
|
||||||
|
|
||||||
|
import ru.ded.beerlog 1.0
|
||||||
|
|
||||||
|
Page {
|
||||||
|
|
||||||
|
title: qsTr("Rests")
|
||||||
|
|
||||||
|
RestsViewModel {
|
||||||
|
id: restsModel
|
||||||
|
}
|
||||||
|
|
||||||
|
ListView {
|
||||||
|
id: restsList
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: 10
|
||||||
|
|
||||||
|
model: restsModel.products
|
||||||
|
|
||||||
|
delegate: ItemDelegate {
|
||||||
|
width: restsList.width
|
||||||
|
|
||||||
|
text: modelData.title
|
||||||
|
|
||||||
|
TextField {
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
validator: DoubleValidator {
|
||||||
|
bottom: 0.0
|
||||||
|
top: 1000.0
|
||||||
|
}
|
||||||
|
|
||||||
|
height: parent.height
|
||||||
|
|
||||||
|
text: modelData.rest
|
||||||
|
|
||||||
|
onEditingFinished: restsModel.setProductRest(modelData.productId, text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -83,6 +83,7 @@ ApplicationWindow {
|
|||||||
|
|
||||||
readonly property var actions: {
|
readonly property var actions: {
|
||||||
"orders": () => { stackView.openPage("Views/OrdersView.qml") },
|
"orders": () => { stackView.openPage("Views/OrdersView.qml") },
|
||||||
|
"rests": () => { stackView.openPage("Views/RestsView.qml") },
|
||||||
"settings": () => { stackView.openPage("Views/SettingsView.qml") },
|
"settings": () => { stackView.openPage("Views/SettingsView.qml") },
|
||||||
"quit": () => { Qt.quit() }
|
"quit": () => { Qt.quit() }
|
||||||
}
|
}
|
||||||
@@ -99,6 +100,10 @@ ApplicationWindow {
|
|||||||
title: qsTr("Orders")
|
title: qsTr("Orders")
|
||||||
action: "orders"
|
action: "orders"
|
||||||
}
|
}
|
||||||
|
ListElement {
|
||||||
|
title: qsTr("Rests")
|
||||||
|
action: "rests"
|
||||||
|
}
|
||||||
ListElement {
|
ListElement {
|
||||||
title: qsTr("Settings")
|
title: qsTr("Settings")
|
||||||
action: "settings"
|
action: "settings"
|
||||||
|
|||||||
@@ -6,5 +6,6 @@
|
|||||||
<file>Views/OrdersView.qml</file>
|
<file>Views/OrdersView.qml</file>
|
||||||
<file>Views/SettingsView.qml</file>
|
<file>Views/SettingsView.qml</file>
|
||||||
<file>Views/ProductsView.qml</file>
|
<file>Views/ProductsView.qml</file>
|
||||||
|
<file>Views/RestsView.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
69
viewmodels/restsviewmodel.cpp
Normal file
69
viewmodels/restsviewmodel.cpp
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
#include "restsviewmodel.h"
|
||||||
|
|
||||||
|
#include "models/basemodel.h"
|
||||||
|
#include "services/settingsservice.h"
|
||||||
|
|
||||||
|
RestsViewModel::RestsViewModel(QObject *parent)
|
||||||
|
: QObject{parent}
|
||||||
|
{
|
||||||
|
connect(m_restsModel, &BaseModel::dataChanged, this, &RestsViewModel::reloadRests);
|
||||||
|
connect(m_productsModel, &BaseModel::dataChanged, this, &RestsViewModel::productsChanged);
|
||||||
|
connect(settings(), &SettingsService::selectedStoreIdChanged, this, &RestsViewModel::productsChanged);
|
||||||
|
|
||||||
|
reloadRests();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariantList RestsViewModel::products() const
|
||||||
|
{
|
||||||
|
QVariantList res;
|
||||||
|
|
||||||
|
const QString storeId = settings()->selectedStoreId();
|
||||||
|
const QVariantList products = m_productsModel->items();
|
||||||
|
for (const QVariant &product : products) {
|
||||||
|
QString productId = product.toMap().value("id").toString();
|
||||||
|
QVariantMap rest = m_rests.value(storeId).value(productId).toMap();
|
||||||
|
res << QVariantMap {
|
||||||
|
{ "productId", productId },
|
||||||
|
{ "title", m_productsModel->itemProperty(productId, "name").toString() },
|
||||||
|
{ "rest", rest.value("rest", 0.0).toFloat() }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RestsViewModel::setProductRest(const QString &productId, float rest)
|
||||||
|
{
|
||||||
|
QString storeId = settings()->selectedStoreId();
|
||||||
|
QVariantMap productRest = m_rests.value(storeId).value(productId).toMap();
|
||||||
|
productRest["rest"] = rest;
|
||||||
|
productRest["storeId"] = storeId;
|
||||||
|
productRest["productId"] = productId;
|
||||||
|
QString restId = productRest.value("id").toString();
|
||||||
|
if (restId.isEmpty()) {
|
||||||
|
m_restsModel->addItem(productRest);
|
||||||
|
} else {
|
||||||
|
m_restsModel->modifyItem(restId, productRest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsService *RestsViewModel::settings() const
|
||||||
|
{
|
||||||
|
return SettingsService::instance();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RestsViewModel::reloadRests()
|
||||||
|
{
|
||||||
|
m_rests.clear();
|
||||||
|
|
||||||
|
const QVariantList rests = m_restsModel->items();
|
||||||
|
for (const QVariant &varRest : rests) {
|
||||||
|
QVariantMap rest = varRest.toMap();
|
||||||
|
QString storeId = rest.value("storeId").toString();
|
||||||
|
QVariantMap storeRests = m_rests.value(storeId);
|
||||||
|
storeRests[rest.value("productId").toString()] = rest;
|
||||||
|
m_rests[storeId] = storeRests;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit productsChanged();
|
||||||
|
}
|
||||||
35
viewmodels/restsviewmodel.h
Normal file
35
viewmodels/restsviewmodel.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#ifndef RESTSVIEWMODEL_H
|
||||||
|
#define RESTSVIEWMODEL_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include "services/modelsregister.h"
|
||||||
|
|
||||||
|
class SettingsService;
|
||||||
|
class RestsViewModel : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PROPERTY(QVariantList products READ products NOTIFY productsChanged)
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit RestsViewModel(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
QVariantList products() const;
|
||||||
|
|
||||||
|
Q_INVOKABLE void setProductRest(const QString &productId, float rest);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void productsChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
SettingsService *settings() const;
|
||||||
|
void reloadRests();
|
||||||
|
|
||||||
|
BaseModel *m_productsModel = ModelsRegister::model("products");
|
||||||
|
BaseModel *m_restsModel = ModelsRegister::model("rests");
|
||||||
|
|
||||||
|
QMap<QString, QVariantMap> m_rests;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // RESTSVIEWMODEL_H
|
||||||
Reference in New Issue
Block a user