Choice model settings was added

This commit is contained in:
2023-04-10 19:24:25 +02:00
parent 25e8a3ea79
commit 4a52926be9
31 changed files with 938 additions and 227 deletions

View File

@@ -1,41 +0,0 @@
#include "abstractmodel.h"
#include "services/beerservice.h"
AbstractModel::AbstractModel(QObject *parent)
: QObject{parent}
{
}
void AbstractModel::created(const QVariant &data)
{
modified(data);
}
void AbstractModel::modified(const QVariant &data)
{
QVariantMap d = data.toMap();
m_data[d.value("id").toString()] = d;
emit dataChanged();
}
void AbstractModel::deleted(const QVariant &data)
{
QString id = data.toString();
m_data.remove(id);
emit dataChanged();
}
void AbstractModel::received(const QVariant &data)
{
m_data = data.toMap();
emit dataChanged();
}
BeerService *AbstractModel::service() const
{
return BeerService::instance();
}

View File

@@ -1,34 +0,0 @@
#ifndef ABSTRACTMODEL_H
#define ABSTRACTMODEL_H
#include <QObject>
#include <QVariantMap>
class BeerService;
class AbstractModel : public QObject
{
Q_OBJECT
Q_PROPERTY(QString entity READ entity CONSTANT)
public:
explicit AbstractModel(QObject *parent = nullptr);
virtual QString entity() const = 0;
public slots:
void created(const QVariant &data);
void modified(const QVariant &data);
void deleted(const QVariant &data);
void received(const QVariant &data);
signals:
void dataChanged();
protected:
BeerService *service() const;
QVariantMap m_data;
};
#endif // ABSTRACTMODEL_H

90
models/basemodel.cpp Normal file
View File

@@ -0,0 +1,90 @@
#include "basemodel.h"
#include "services/beerservice.h"
BaseModel::BaseModel(const QString &entity, QObject *parent) : QObject{parent},
m_entity(entity)
{
Q_ASSERT(!m_entity.isEmpty());
service()->connectListener(this);
service()->sendCommand(m_entity, BeerService::ActionGet);
}
BaseModel::~BaseModel()
{
service()->removeListener(this);
}
QString BaseModel::entity() const
{
return m_entity;
}
QVariantList BaseModel::items() const
{
return m_data.values();
}
QVariantMap BaseModel::item(const QString &itemId) const
{
return m_data.value(itemId).toMap();
}
QVariant BaseModel::itemProperty(const QString &itemId, const QString &propertyName, const QVariant &def) const
{
return item(itemId).value(propertyName, def);
}
void BaseModel::addItem(const QVariantMap &item) const
{
service()->sendCommand(entity(), BeerService::ActionAdd, item);
}
void BaseModel::deleteItem(const QString &itemId) const
{
service()->sendCommand(entity(), BeerService::ActionDelete, QVariantMap { { "id", itemId } });
}
void BaseModel::modifyItem(const QString &itemId, const QVariantMap &properties) const
{
QVariantMap item = this->item(itemId);
for (auto it = properties.constBegin(); it != properties.constEnd(); ++it) {
item[it.key()] = it.value();
}
service()->sendCommand(entity(), BeerService::ActionModify, item);
}
void BaseModel::created(const QVariant &data)
{
modified(data);
}
void BaseModel::modified(const QVariant &data)
{
QVariantMap d = data.toMap();
m_data[d.value("id").toString()] = d;
emit dataChanged();
}
void BaseModel::deleted(const QVariant &data)
{
QString id = data.toString();
m_data.remove(id);
emit dataChanged();
}
void BaseModel::received(const QVariant &data)
{
m_data = data.toMap();
emit dataChanged();
}
BeerService *BaseModel::service() const
{
return BeerService::instance();
}

44
models/basemodel.h Normal file
View File

@@ -0,0 +1,44 @@
#ifndef BASEMODEL_H
#define BASEMODEL_H
#include <QObject>
#include <QVariantMap>
class BeerService;
class BaseModel : public QObject
{
Q_OBJECT
Q_PROPERTY(QString entity READ entity CONSTANT)
public:
explicit BaseModel(const QString &entity, QObject *parent = nullptr);
virtual ~BaseModel();
QString entity() const;
QVariantList items() const;
QVariantMap item(const QString &itemId) const;
QVariant itemProperty(const QString &itemId, const QString &propertyName, const QVariant &def = QVariant{}) const;
void addItem(const QVariantMap &item) const;
void deleteItem(const QString &itemId) const;
void modifyItem(const QString &itemId, const QVariantMap &properties) const;
public slots:
void created(const QVariant &data);
void modified(const QVariant &data);
void deleted(const QVariant &data);
void received(const QVariant &data);
signals:
void dataChanged();
private:
BeerService *service() const;
QVariantMap m_data;
QString m_entity;
};
#endif // BASEMODEL_H

15
models/ordersmodel.cpp Normal file
View File

@@ -0,0 +1,15 @@
#include "ordersmodel.h"
OrdersModel::OrdersModel(QObject *parent) : BaseModel { "orders", parent }
{
}
QVariantList OrdersModel::orders() const
{
return items();
}
void OrdersModel::submitOrder(const QVariantMap &order) const
{
addItem(order);
}

17
models/ordersmodel.h Normal file
View File

@@ -0,0 +1,17 @@
#ifndef ORDERSMODEL_H
#define ORDERSMODEL_H
#include "basemodel.h"
class OrdersModel : public BaseModel
{
Q_OBJECT
public:
explicit OrdersModel(QObject *parent = nullptr);
QVariantList orders() const;
void submitOrder(const QVariantMap &order) const;
};
#endif // ORDERSMODEL_H

View File

@@ -1,39 +0,0 @@
#include "summarymodel.h"
QVariantList SummaryModel::items() const
{
return m_items.values();
}
float SummaryModel::sum() const
{
float res = 0.0;
for (auto it = m_items.constBegin(); it != m_items.constEnd(); ++it) {
QVariantMap item = it.value().toMap();
int count = item.value("count", 0).toInt();
float price = item.value("cost", 0.0).toFloat();
res += count * price;
}
return res;
}
void SummaryModel::setItemCount(QVariantMap item, int count)
{
QString id = item.value("id", QString()).toString();
if (count) {
item["count"] = count;
m_items[id] = item;
} else {
m_items.remove(id);
}
emit itemsChanged();
}
void SummaryModel::clear()
{
m_items.clear();
emit itemsChanged();
}

View File

@@ -1,28 +0,0 @@
#ifndef SUMMARYMODEL_H
#define SUMMARYMODEL_H
#include <QObject>
#include <QVariantMap>
class SummaryModel : public QObject
{
Q_OBJECT
Q_PROPERTY(QVariantList items READ items NOTIFY itemsChanged)
Q_PROPERTY(float sum READ sum NOTIFY itemsChanged)
public:
QVariantList items() const;
float sum() const;
Q_INVOKABLE void setItemCount(QVariantMap item, int count);
Q_INVOKABLE void clear();
signals:
void itemsChanged();
private:
QVariantMap m_items;
};
#endif // SUMMARYMODEL_H

View File

@@ -1,24 +1,13 @@
#include "usersmodel.h"
#include "services/beerservice.h"
namespace Keys {
constexpr auto Users = "users";
constexpr auto Name = "name";
}
UsersModel::UsersModel(QObject *parent)
: AbstractModel{parent}
UsersModel::UsersModel(QObject *parent) : BaseModel{ "users", parent }
{
service()->connectListener(this);
service()->sendCommand(Keys::Users, "get");
}
QString UsersModel::entity() const
{
return Keys::Users;
}
void UsersModel::connected(const QVariant &data)
@@ -33,10 +22,5 @@ void UsersModel::disconnected(const QVariant &data)
QVariantList UsersModel::users() const
{
return m_data.values();
}
QString UsersModel::userName(const QString &userId) const
{
return m_data.value(userId).toMap().value(Keys::Name).toString();
return items();
}

View File

@@ -4,19 +4,16 @@
#include <QObject>
#include <QVariantMap>
#include "models/abstractmodel.h"
#include "models/basemodel.h"
class UsersModel : public AbstractModel
class UsersModel : public BaseModel
{
Q_OBJECT
public:
explicit UsersModel(QObject *parent = nullptr);
QString entity() const override;
QVariantList users() const;
QString userName(const QString &userId) const;
public slots:
void connected(const QVariant &data);