diff --git a/core/core.h b/core/core.h index 7b5f590..b94ea6c 100644 --- a/core/core.h +++ b/core/core.h @@ -12,5 +12,6 @@ #include "settingsservice.h" #include "settingsform.h" #include "enums.h" +#include "objectbinder.h" #endif // CORE_H diff --git a/shop/data/voucheritem.cpp b/shop/data/voucheritem.cpp index 353f255..3129b58 100644 --- a/shop/data/voucheritem.cpp +++ b/shop/data/voucheritem.cpp @@ -3,7 +3,10 @@ VoucherItem::VoucherItem(QObject *parent) : QObject(parent) { - + m_price = 0; + m_unitPrice = 0; + m_count = 0; + m_refId = 0; } int VoucherItem::id() const diff --git a/shop/data/voucheritem.h b/shop/data/voucheritem.h index 31b1b08..0457c57 100644 --- a/shop/data/voucheritem.h +++ b/shop/data/voucheritem.h @@ -17,8 +17,6 @@ class VoucherItem : public QObject Q_PROPERTY(int count READ count WRITE setCount) Q_PROPERTY(QDecDouble unitPrice READ unitPrice WRITE setUnitPrice) Q_PROPERTY(QDecDouble price READ price WRITE setPrice) - Q_PROPERTY(int refId READ refId WRITE setRefId) - Q_PROPERTY(QString itemPlugin READ itemPlugin WRITE setItemPlugin) Q_PROPERTY(Enums::VatType vatType READ vatType WRITE setVatType) public: diff --git a/shop/directsaleform.cpp b/shop/directsaleform.cpp index af3cfbf..8db5c48 100644 --- a/shop/directsaleform.cpp +++ b/shop/directsaleform.cpp @@ -6,9 +6,32 @@ DirectSaleForm::DirectSaleForm(QWidget *parent) : ui(new Ui::DirectSaleForm) { ui->setupUi(this); + m_shopItem = QSharedPointer(new DirectSaleItem); + + m_binder.setData(m_shopItem.data()); + m_binder.registerBinding(ui->name); + m_binder.registerBinding(ui->unitPrice); + m_binder.registerBinding(ui->count); + m_binder.bindToUi(); } DirectSaleForm::~DirectSaleForm() { delete ui; } + +QSharedPointer DirectSaleForm::shopItem() const +{ + return m_shopItem; +} + +void DirectSaleForm::on_buttonBox_rejected() +{ + this->reject(); +} + +void DirectSaleForm::on_buttonBox_accepted() +{ + m_binder.bindToData(); + this->accept(); +} diff --git a/shop/directsaleform.h b/shop/directsaleform.h index ce7b5c3..4c797ef 100644 --- a/shop/directsaleform.h +++ b/shop/directsaleform.h @@ -2,7 +2,12 @@ #define DIRECTSALEFORM_H #include -#include +#include +#include +#include + +#include "ishopitem.h" +#include "directsaleitem.h" namespace Ui { class DirectSaleForm; @@ -16,8 +21,17 @@ public: explicit DirectSaleForm(QWidget *parent = 0); ~DirectSaleForm(); + QSharedPointer shopItem() const; + +private slots: + void on_buttonBox_rejected(); + + void on_buttonBox_accepted(); + private: Ui::DirectSaleForm *ui; + ObjectBinder m_binder; + QSharedPointer m_shopItem; }; #endif // DIRECTSALEFORM_H diff --git a/shop/directsaleform.ui b/shop/directsaleform.ui index da465b0..952f906 100644 --- a/shop/directsaleform.ui +++ b/shop/directsaleform.ui @@ -22,7 +22,7 @@ - + @@ -32,7 +32,7 @@ - + diff --git a/shop/directsaleitem.cpp b/shop/directsaleitem.cpp new file mode 100644 index 0000000..f08bdde --- /dev/null +++ b/shop/directsaleitem.cpp @@ -0,0 +1,46 @@ +#include "directsaleitem.h" + +DirectSaleItem::DirectSaleItem(QObject *parent) : QObject(parent) +{ + m_count = 1; +} + +int DirectSaleItem::id() +{ + return 0; +} + +QString DirectSaleItem::name() +{ + return m_name; +} + +QDecDouble DirectSaleItem::unitPrice() +{ + return m_unitPrice; +} + +QString DirectSaleItem::pluginId() +{ + return ""; +} + +int DirectSaleItem::count() const +{ + return m_count; +} + +void DirectSaleItem::setCount(int count) +{ + m_count = count; +} + +void DirectSaleItem::setName(const QString &name) +{ + m_name = name; +} + +void DirectSaleItem::setUnitPrice(const QDecDouble &unitPrice) +{ + m_unitPrice = unitPrice; +} diff --git a/shop/directsaleitem.h b/shop/directsaleitem.h new file mode 100644 index 0000000..243ec5d --- /dev/null +++ b/shop/directsaleitem.h @@ -0,0 +1,42 @@ +#ifndef DIRECTSALEITEM_H +#define DIRECTSALEITEM_H + +#include +#include +#include "ishopitem.h" + +class DirectSaleItem : public QObject, public IShopItem +{ + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(QDecDouble unitPrice READ unitPrice WRITE setUnitPrice) + Q_PROPERTY(int count READ count WRITE setCount) + +public: + explicit DirectSaleItem(QObject *parent = 0); + +signals: + +public slots: + + // IShopItem interface +public: + int id() override; + QString name() override; + QDecDouble unitPrice() override; + QString pluginId() override; + + int count() const; + void setCount(int count); + + void setName(const QString &name); + + void setUnitPrice(const QDecDouble &unitPrice); + +private: + QString m_name; + QDecDouble m_unitPrice; + int m_count; +}; + +#endif // DIRECTSALEITEM_H diff --git a/shop/ishopitem.h b/shop/ishopitem.h index d13cfe8..5a9c799 100644 --- a/shop/ishopitem.h +++ b/shop/ishopitem.h @@ -9,8 +9,10 @@ class SHOPSHARED_EXPORT IShopItem { public: - QString name() = 0; - QDecDouble unitPrice() = 0; + virtual int id() = 0; + virtual QString name() = 0; + virtual QDecDouble unitPrice() = 0; + virtual QString pluginId() = 0; }; #endif // ISHOPITEM_H diff --git a/shop/shop.cpp b/shop/shop.cpp index 76cf3df..711df43 100644 --- a/shop/shop.cpp +++ b/shop/shop.cpp @@ -1,6 +1,7 @@ #include "shop.h" #include #include "shopform.h" +#include "shopservice.h" Shop::Shop() @@ -10,6 +11,7 @@ Shop::Shop() void Shop::initServiceUi() { m_ui = new ShopForm(); + m_service = new ShopService(); } QIcon Shop::pluginIcon() diff --git a/shop/shop.pro b/shop/shop.pro index 8a2da7a..75cbb3a 100644 --- a/shop/shop.pro +++ b/shop/shop.pro @@ -18,8 +18,10 @@ SOURCES += shop.cpp \ directsaleform.cpp \ temporaryreceiptsaveform.cpp \ receiptsaveform.cpp \ - receiptloadform.cpp - data/voucheritem.cpp + receiptloadform.cpp \ + data/voucheritem.cpp \ + shopservice.cpp \ + directsaleitem.cpp HEADERS += shop.h\ shop_global.h \ @@ -28,11 +30,13 @@ HEADERS += shop.h\ directsaleform.h \ temporaryreceiptsaveform.h \ receiptsaveform.h \ - receiptloadform.h + receiptloadform.h \ ishopitem.h \ data/voucheritem.h \ data/shop-data.h \ - isellableservice.h + isellableservice.h \ + shopservice.h \ + directsaleitem.h unix { target.path = /usr/lib diff --git a/shop/shopform.cpp b/shop/shopform.cpp index 1deeae4..56d466f 100644 --- a/shop/shopform.cpp +++ b/shop/shopform.cpp @@ -4,12 +4,17 @@ #include "temporaryreceiptsaveform.h" #include "receiptsaveform.h" #include "receiptloadform.h" +#include "shopservice.h" ShopForm::ShopForm(QWidget *parent) : QWidget(parent), ui(new Ui::ShopForm) { ui->setupUi(this); + ShopService srv; + m_voucher = srv.createVoucher(); + m_itemsModel = new AutoTableModel(this); + ui->actualReceipt->setModel(m_itemsModel); } ShopForm::~ShopForm() @@ -20,6 +25,13 @@ ShopForm::~ShopForm() void ShopForm::on_directSale_clicked() { DirectSaleForm *form = new DirectSaleForm(this); + + connect(form, &QDialog::accepted, [this, form](){ + ShopService srv; + srv.addShopItem(m_voucher, form->shopItem(), ((DirectSaleItem*)form->shopItem().data())->count()); + this->m_itemsModel->addRow(m_voucher->items()[m_voucher->items().count() - 1]); + }); + form->show(); } diff --git a/shop/shopform.h b/shop/shopform.h index 9e5ca23..e62453b 100644 --- a/shop/shopform.h +++ b/shop/shopform.h @@ -2,6 +2,9 @@ #define SHOPFORM_H #include +#include +#include "data/shop-data.h" +#include namespace Ui { class ShopForm; @@ -26,6 +29,8 @@ private slots: private: Ui::ShopForm *ui; + QSharedPointer m_voucher; + AutoTableModel *m_itemsModel; }; #endif // SHOPFORM_H diff --git a/shop/shopservice.cpp b/shop/shopservice.cpp index 11a1d1f..3441ef3 100644 --- a/shop/shopservice.cpp +++ b/shop/shopservice.cpp @@ -4,3 +4,34 @@ ShopService::ShopService() { } + +QSharedPointer ShopService::createVoucher() +{ + QSharedPointer voucher(new Voucher); + voucher->setStatus(Voucher::NEW); + return voucher; +} + +void ShopService::addShopItem(QSharedPointer voucher, QSharedPointer item, int count) +{ + QSharedPointer vItem(new VoucherItem); + vItem->setName(item->name()); + vItem->setUnitPrice(item->unitPrice()); + vItem->setCount(count); + vItem->setRefId(item->id()); + vItem->setItemPlugin(item->pluginId()); + + voucher->addItem(vItem); +} + +void ShopService::calculate(QSharedPointer voucher) +{ + QDecDouble total; + + foreach (QSharedPointer item, voucher->items()) { + QDecDouble itemPrice = item->unitPrice() * item->count(); + total += itemPrice; + } + + voucher->setTotalPrice(total); +} diff --git a/shop/shopservice.h b/shop/shopservice.h index 3d406e9..77212f7 100644 --- a/shop/shopservice.h +++ b/shop/shopservice.h @@ -1,11 +1,20 @@ #ifndef SHOPSERVICE_H #define SHOPSERVICE_H +#include -class ShopService +#include + +#include "data/shop-data.h" +#include "ishopitem.h" + +class ShopService : public Service { public: ShopService(); + QSharedPointer createVoucher(); + void addShopItem(QSharedPointer voucher, QSharedPointer item, int count); + void calculate(QSharedPointer voucher); }; -#endif // SHOPSERVICE_H \ No newline at end of file +#endif // SHOPSERVICE_H