Added support for VAT calculations.

print
Josef Rokos 9 years ago
parent 7b9bc06c52
commit 4ebfae307a

@ -14,9 +14,12 @@ CommodityForm::CommodityForm(QWidget *parent) :
registerBinding(ui->shortName);
registerBinding(ui->code);
registerBinding(ui->price);
QList<ComboData> vt ;
vt << ComboData(Enums::HIGH,tr("High")) << ComboData(Enums::FIRST_LOWER,tr("First Lower")) << ComboData(Enums::SECOND_LOWER,tr("Second Lower"));
registerBinding(ui->vat,vt);
QList<ComboData> vt;
vt << ComboData(Enums::NONE,tr("None"))
<< ComboData(Enums::HIGH,tr("High"))
<< ComboData(Enums::FIRST_LOWER,tr("First Lower"))
<< ComboData(Enums::SECOND_LOWER,tr("Second Lower"));
registerBinding(ui->vat, vt);
registerBinding(ui->count);
}

@ -50,7 +50,7 @@ void Context::loadPlugins()
m_plugins.append(new Users);
m_plugins.append(new Roles);
QDir pluginsDir(qApp->applicationDirPath() + "/../plugins");
QDir pluginsDir(qApp->applicationDirPath() + "/../../plugins");
foreach (QString fileName, pluginsDir.entryList(QStringList() << "*.so" << "*.dll")) {
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
@ -144,7 +144,7 @@ void Context::checkDb(const QString &path)
db.open();
QSqlQuery q(db);
QString verSql = "SELECT pluginId, schemaVersion FROM system";
QString createSysSql = "CREATE TABLE \"system\" (\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \"pluginId\" TEXT NULL, \"schemaVersion\" TEXT NULL)";
QString createSysSql = "CREATE TABLE \"system\" (\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \"pluginId\" TEXT NULL, \"schemaVersion\" TEXT NULL, \"settings\" TEXT NULL)";
if (q.exec(verSql))
{

@ -1,12 +1,13 @@
#ifndef SYSTEM_H
#define SYSTEM_H
#include "core_global.h"
#include <QString>
#include <odb/core.hxx>
#pragma db object
class System
class CORESHARED_EXPORT System
{
public:
System();

@ -4,8 +4,9 @@
#include <QObject>
#include <QString>
#include <QDecDouble.hh>
#include "../core_global.h"
class GlobalSettings : public QObject
class CORESHARED_EXPORT GlobalSettings : public QObject
{
Q_OBJECT

@ -18,6 +18,9 @@ GlobalSettingsForm::GlobalSettingsForm(QWidget *parent) :
registerBinding(ui->ic);
registerBinding(ui->vatPayer);
registerBinding(ui->dic);
registerBinding(ui->vatHigh);
registerBinding(ui->vatFirstLower);
registerBinding(ui->vatSecondLower);
}
GlobalSettingsForm::~GlobalSettingsForm()
@ -39,4 +42,10 @@ void GlobalSettingsForm::loadEntity()
SettingsService srv("CORE");
QSharedPointer<GlobalSettings> settings = srv.loadSettings<GlobalSettings>();
setEntity(settings);
ui->grpVat->setEnabled(settings->vatPayer());
}
void GlobalSettingsForm::on_vatPayer_toggled(bool checked)
{
ui->grpVat->setEnabled(checked);
}

@ -27,6 +27,8 @@ public slots:
// IForm interface
public:
void loadEntity() override;
private slots:
void on_vatPayer_toggled(bool checked);
};
#endif // GLOBALSETTINGSFORM_H

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>422</width>
<height>323</height>
<width>586</width>
<height>419</height>
</rect>
</property>
<property name="windowTitle">
@ -20,6 +20,9 @@
<string>Company info</string>
</property>
<layout class="QFormLayout" name="formLayout_2">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
@ -47,6 +50,63 @@
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QGroupBox" name="grpVat">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="title">
<string>VAT rates</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>High</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="vatHigh">
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>First lower</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="vatFirstLower">
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Second lower</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="vatSecondLower">
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>

@ -7,6 +7,8 @@
#include <QJsonDocument>
#include <QMetaProperty>
#include <QDecDouble.hh>
#include "data/system.h"
#include "service.h"
#include "core_global.h"
@ -43,6 +45,12 @@ public:
const char *propName = objSettings->metaObject()->property(i).name();
QJsonValue v = val.toObject()[propName];
QVariant varVal = v.toVariant();
if (objSettings->property(propName).canConvert<QDecDouble>())
{
QDecDouble dec(TO_DEC(varVal.toInt()));
varVal = QVariant::fromValue(dec);
}
objSettings->setProperty(propName, varVal);
}
@ -59,7 +67,14 @@ public:
for (int i = 0; i < objSettingsQo->metaObject()->propertyCount(); i++)
{
const char *propName = objSettings->metaObject()->property(i).name();
jsonObj[propName] = QJsonValue::fromVariant(objSettingsQo->property(propName));
QVariant val = objSettingsQo->property(propName);
if (val.canConvert<QDecDouble>())
{
int vat = FROM_DEC(val.value<QDecDouble>());
val = QVariant::fromValue(vat);
}
jsonObj[propName] = QJsonValue::fromVariant(val);
}
QJsonObject jsonSettings;

@ -18,8 +18,11 @@ AccServiceForm::AccServiceForm(QWidget *parent) :
cd << ComboData(AccService::CAR,tr("Car")) << ComboData(AccService::TENT,tr("Tent")) << ComboData(AccService::OTHER,tr("OTHER"));
registerBinding(ui->serviceType,cd);
QList<ComboData> vt ;
vt << ComboData(Enums::HIGH,tr("High")) << ComboData(Enums::FIRST_LOWER,tr("First Lower")) << ComboData(Enums::SECOND_LOWER,tr("Second Lower"));
registerBinding(ui->vatType,vt);
vt << ComboData(Enums::NONE,tr("None"))
<< ComboData(Enums::HIGH,tr("High"))
<< ComboData(Enums::FIRST_LOWER,tr("First Lower"))
<< ComboData(Enums::SECOND_LOWER,tr("Second Lower"));
registerBinding(ui->vatType, vt);
}

@ -3,7 +3,18 @@
Voucher::Voucher(QObject *parent) : QObject(parent)
{
m_vatRateHigh = 0;
m_vatRateFirstLower = 0;
m_vatRateSecondLower = 0;
m_priceNoVat = 0;
m_priceVatHigh = 0;
m_priceVatFirstLower = 0;
m_priceVatSecondLower = 0;
m_priceWitouthVat = 0;
m_totalPriceVatHigh = 0;
m_totalPriceVatFirstLower = 0;
m_totalPriceVatSecondLower = 0;
m_totalPrice = 0;
}
QString Voucher::name() const
@ -83,6 +94,120 @@ void Voucher::clearItems()
{
m_items.clear();
}
QDecDouble Voucher::vatRateHigh() const
{
return TO_DEC(m_vatRateHigh);
}
void Voucher::setVatRateHigh(QDecDouble vatRateHigh)
{
m_vatRateHigh = FROM_DEC(vatRateHigh);
}
QDecDouble Voucher::vatRateFirstLower() const
{
return TO_DEC(m_vatRateFirstLower);
}
void Voucher::setVatRateFirstLower(QDecDouble vatRateFirstLower)
{
m_vatRateFirstLower = FROM_DEC(vatRateFirstLower);
}
QDecDouble Voucher::vatRateSecondLower() const
{
return TO_DEC(m_vatRateSecondLower);
}
void Voucher::setVatRateSecondLower(QDecDouble vatRateSecondLower)
{
m_vatRateSecondLower = FROM_DEC(vatRateSecondLower);
}
QDecDouble Voucher::priceVatHigh() const
{
return TO_DEC(m_priceVatHigh);
}
void Voucher::setPriceVatHigh(QDecDouble priceVatHigh)
{
m_priceVatHigh = FROM_DEC(priceVatHigh);
}
QDecDouble Voucher::priceVatFirstLower() const
{
return TO_DEC(m_priceVatFirstLower);
}
void Voucher::setPriceVatFirstLower(QDecDouble priceVatFirstLower)
{
m_priceVatFirstLower = FROM_DEC(priceVatFirstLower);
}
QDecDouble Voucher::priceVatSecondLower() const
{
return TO_DEC(m_priceVatSecondLower);
}
void Voucher::setPriceVatSecondLower(QDecDouble priceVatSecondLower)
{
m_priceVatSecondLower = FROM_DEC(priceVatSecondLower);
}
QDecDouble Voucher::priceNoVat() const
{
return TO_DEC(m_priceNoVat);
}
void Voucher::setPriceNoVat(QDecDouble priceNoVat)
{
m_priceNoVat = FROM_DEC(priceNoVat);
}
QDecDouble Voucher::priceWitouthVat() const
{
return TO_DEC(m_priceWitouthVat);
}
void Voucher::setPriceWitouthVat(QDecDouble priceWitouthVat)
{
m_priceWitouthVat = FROM_DEC(priceWitouthVat);
}
QDecDouble Voucher::totalPriceVatHigh() const
{
return TO_DEC(m_totalPriceVatHigh);
}
void Voucher::setTotalPriceVatHigh(QDecDouble totalPriceVatHigh)
{
m_totalPriceVatHigh = FROM_DEC(totalPriceVatHigh);
}
QDecDouble Voucher::totalPriceVatFirstLower() const
{
return TO_DEC(m_totalPriceVatFirstLower);
}
void Voucher::setTotalPriceVatFirstLower(QDecDouble totalPriceVatFirstLower)
{
m_totalPriceVatFirstLower = FROM_DEC(totalPriceVatFirstLower);
}
QDecDouble Voucher::totalPriceVatSecondLower() const
{
return TO_DEC(m_totalPriceVatSecondLower);
}
void Voucher::setTotalPriceVatSecondLower(QDecDouble totalPriceVatSecondLower)
{
m_totalPriceVatSecondLower = FROM_DEC(totalPriceVatSecondLower);
}
QDecDouble Voucher::vatAmountHigh()
{
return m_totalPriceVatHigh - m_priceVatHigh;
}
QDecDouble Voucher::vatAmountFirstLower()
{
return m_totalPriceVatFirstLower - m_priceVatFirstLower;
}
QDecDouble Voucher::VatAmountSecondLower()
{
return m_totalPriceVatSecondLower - m_priceVatSecondLower;
}
int Voucher::id() const
{

@ -19,6 +19,12 @@ class Voucher : public QObject
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(QString description READ description WRITE setDescription)
Q_PROPERTY(QSharedPointer<QObject> contact READ contact WRITE setContact)
Q_PROPERTY(QDecDouble vatRateHigh READ vatRateHigh WRITE setVatRateHigh)
Q_PROPERTY(QDecDouble vatRateFirstLower READ vatRateFirstLower WRITE setVatRateFirstLower)
Q_PROPERTY(QDecDouble vatRateSecondLower READ vatRateSecondLower WRITE setVatRateSecondLower)
Q_PROPERTY(QDecDouble priceVatHigh READ priceVatHigh WRITE setPriceVatHigh)
Q_PROPERTY(QDecDouble priceVatFirstLower READ priceVatFirstLower WRITE setPriceVatFirstLower)
Q_PROPERTY(QDecDouble priceVatSecondLower READ priceVatSecondLower WRITE setPriceVatSecondLower)
Q_PROPERTY(QDecDouble totalPrice READ totalPrice WRITE setTotalPrice)
Q_ENUMS(VoucherStatus)
Q_PROPERTY(VoucherStatus status READ status WRITE setStatus)
@ -59,6 +65,43 @@ public:
void removeItem(QSharedPointer<VoucherItem> item);
void clearItems();
QDecDouble vatRateHigh() const;
void setVatRateHigh(QDecDouble vatRateHigh);
QDecDouble vatRateFirstLower() const;
void setVatRateFirstLower(QDecDouble vatRateFirstLower);
QDecDouble vatRateSecondLower() const;
void setVatRateSecondLower(QDecDouble vatRateSecondLower);
QDecDouble priceVatHigh() const;
void setPriceVatHigh(QDecDouble priceVatHigh);
QDecDouble priceVatFirstLower() const;
void setPriceVatFirstLower(QDecDouble priceVatFirstLower);
QDecDouble priceVatSecondLower() const;
void setPriceVatSecondLower(QDecDouble priceVatSecondLower);
QDecDouble priceNoVat() const;
void setPriceNoVat(QDecDouble priceNoVat);
QDecDouble priceWitouthVat() const;
void setPriceWitouthVat(QDecDouble priceWitouthVat);
QDecDouble totalPriceVatHigh() const;
void setTotalPriceVatHigh(QDecDouble totalPriceVatHigh);
QDecDouble totalPriceVatFirstLower() const;
void setTotalPriceVatFirstLower(QDecDouble totalPriceVatFirstLower);
QDecDouble totalPriceVatSecondLower() const;
void setTotalPriceVatSecondLower(QDecDouble totalPriceVatSecondLower);
QDecDouble vatAmountHigh();
QDecDouble vatAmountFirstLower();
QDecDouble VatAmountSecondLower();
private:
friend class odb::access;
#pragma db id auto
@ -66,6 +109,17 @@ private:
QString m_name;
QString m_description;
QSharedPointer<AddressbookData> m_contact;
int m_vatRateHigh;
int m_vatRateFirstLower;
int m_vatRateSecondLower;
int m_priceNoVat;
int m_priceVatHigh;
int m_priceVatFirstLower;
int m_priceVatSecondLower;
int m_priceWitouthVat;
int m_totalPriceVatHigh;
int m_totalPriceVatFirstLower;
int m_totalPriceVatSecondLower;
int m_totalPrice;
QOdbList<QSharedPointer<VoucherItem> > m_items;
VoucherStatus m_status;

@ -8,6 +8,8 @@ VoucherItem::VoucherItem(QObject *parent) : QObject(parent)
m_count = 0;
m_refId = 0;
m_vatType = Enums::NONE;
m_vatRate = 0;
m_priceWitouthVat = 0;
}
int VoucherItem::id() const
@ -90,3 +92,28 @@ void VoucherItem::setVatType(const Enums::VatType &vatType)
{
m_vatType = vatType;
}
QDecDouble VoucherItem::vatRate() const
{
return TO_DEC(m_vatRate);
}
void VoucherItem::setVatRate(QDecDouble vatRate)
{
m_vatRate = FROM_DEC(vatRate);
}
QDecDouble VoucherItem::priceWitouthVat() const
{
return TO_DEC(m_priceWitouthVat);
}
void VoucherItem::setPriceWitouthVat(QDecDouble priceWitouthVat)
{
m_priceWitouthVat = FROM_DEC(priceWitouthVat);
}
QDecDouble VoucherItem::vatAmount() const
{
return m_price - m_priceWitouthVat;
}

@ -16,8 +16,10 @@ class VoucherItem : public QObject
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(int count READ count WRITE setCount NOTIFY countChanged)
Q_PROPERTY(QDecDouble unitPrice READ unitPrice WRITE setUnitPrice)
Q_PROPERTY(QDecDouble price READ price WRITE setPrice)
Q_PROPERTY(Enums::VatType vatType READ vatType WRITE setVatType)
Q_PROPERTY(QDecDouble vatRate READ vatRate WRITE setVatRate)
Q_PROPERTY(QDecDouble vatAmount READ vatAmount)
Q_PROPERTY(QDecDouble price READ price WRITE setPrice)
public:
explicit VoucherItem(QObject *parent = 0);
@ -46,6 +48,14 @@ public:
Enums::VatType vatType() const;
void setVatType(const Enums::VatType &vatType);
QDecDouble vatRate() const;
void setVatRate(QDecDouble vatRate);
QDecDouble priceWitouthVat() const;
void setPriceWitouthVat(QDecDouble priceWitouthVat);
QDecDouble vatAmount() const;
signals:
void countChanged();
@ -56,6 +66,8 @@ private:
QString m_name;
int m_count;
int m_unitPrice;
int m_vatRate;
int m_priceWitouthVat;
int m_price;
int m_refId;
QString m_itemPlugin;

@ -12,6 +12,14 @@ DirectSaleForm::DirectSaleForm(QWidget *parent) :
m_binder.registerBinding(ui->name);
m_binder.registerBinding(ui->unitPrice);
m_binder.registerBinding(ui->count);
QList<ComboData> vt;
vt << ComboData(Enums::NONE,tr("None"))
<< ComboData(Enums::HIGH,tr("High"))
<< ComboData(Enums::FIRST_LOWER,tr("First Lower"))
<< ComboData(Enums::SECOND_LOWER,tr("Second Lower"));
m_binder.registerBinding(ui->vatType, vt);
m_binder.bindToUi();
}

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>400</width>
<height>136</height>
<height>150</height>
</rect>
</property>
<property name="windowTitle">
@ -52,7 +52,17 @@
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>VAT rate</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="vatType"/>
</item>
<item row="4" column="1">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>

@ -11,6 +11,7 @@ class DirectSaleItem : public QObject, public IShopItem
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(QDecDouble unitPrice READ unitPrice WRITE setUnitPrice)
Q_PROPERTY(int count READ count WRITE setCount)
Q_PROPERTY(Enums::VatType vatType READ vatType WRITE setVatType)
public:
explicit DirectSaleItem(QObject *parent = 0);

@ -15,16 +15,29 @@
\"name\" TEXT NULL,
\"count\" INTEGER NOT NULL,
\"unitPrice\" INTEGER NOT NULL,
\"vatRate\" INTEGER NOT NULL,
\"priceWitouthVat\" INTEGER NOT NULL,
\"price\" INTEGER NOT NULL,
\"refId\" INTEGER NOT NULL,
\"itemPlugin\" TEXT NULL,
\"vatType\" INTEGER NOT NULL);
CREATE TABLE \"Voucher\" (
CREATE TABLE \"Voucher\" (
\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
\"name\" TEXT NULL,
\"description\" TEXT NULL,
\"contact\" INTEGER NULL,
\"vatRateHigh\" INTEGER NOT NULL,
\"vatRateFirstLower\" INTEGER NOT NULL,
\"vatRateSecondLower\" INTEGER NOT NULL,
\"priceNoVat\" INTEGER NOT NULL,
\"priceVatHigh\" INTEGER NOT NULL,
\"priceVatFirstLower\" INTEGER NOT NULL,
\"priceVatSecondLower\" INTEGER NOT NULL,
\"priceWitouthVat\" INTEGER NOT NULL,
\"totalPriceVatHigh\" INTEGER NOT NULL,
\"totalPriceVatFirstLower\" INTEGER NOT NULL,
\"totalPriceVatSecondLower\" INTEGER NOT NULL,
\"totalPrice\" INTEGER NOT NULL,
\"status\" INTEGER NOT NULL,
CONSTRAINT \"contact_fk\"
@ -32,7 +45,7 @@
REFERENCES \"AddressbookData\" (\"id\")
DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE \"Voucher_items\" (
CREATE TABLE \"Voucher_items\" (
\"object_id\" INTEGER NOT NULL,
\"index\" INTEGER NOT NULL,
\"value\" INTEGER NULL,
@ -45,11 +58,12 @@
REFERENCES \"VoucherItem\" (\"id\")
DEFERRABLE INITIALLY DEFERRED);
CREATE INDEX \"Voucher_items_object_id_i\"
CREATE INDEX \"Voucher_items_object_id_i\"
ON \"Voucher_items\" (\"object_id\");
CREATE INDEX \"Voucher_items_index_i\"
ON \"Voucher_items\" (\"index\");"
CREATE INDEX \"Voucher_items_index_i\"
ON \"Voucher_items\" (\"index\");
"
],
"dependencies" : [ "ADDRESSBOOK" ]
}

@ -11,12 +11,6 @@ ShopForm::ShopForm(QWidget *parent) :
ui(new Ui::ShopForm)
{
ui->setupUi(this);
ShopService srv;
m_voucher = srv.createVoucher();
m_itemsModel = new AutoTableModel<VoucherItem>(this);
m_itemsModel->setEditableCols(QList<int>() << 1);
ui->actualReceipt->setModel(m_itemsModel);
ui->actualReceipt->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
}
ShopForm::~ShopForm()
@ -26,6 +20,11 @@ ShopForm::~ShopForm()
void ShopForm::on_directSale_clicked()
{
if (m_voucher.isNull())
{
createVoucher();
}
DirectSaleForm *form = new DirectSaleForm(this);
connect(form, &QDialog::accepted, [this, form](){
@ -78,3 +77,13 @@ void ShopForm::onCountChanged()
//if (m_voucher->status())
}
void ShopForm::createVoucher()
{
ShopService srv;
m_voucher = srv.createVoucher();
m_itemsModel = new AutoTableModel<VoucherItem>(this);
m_itemsModel->setEditableCols(QList<int>() << 1);
ui->actualReceipt->setModel(m_itemsModel);
ui->actualReceipt->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
}

@ -33,6 +33,8 @@ private:
Ui::ShopForm *ui;
QSharedPointer<Voucher> m_voucher;
AutoTableModel<VoucherItem> *m_itemsModel;
void createVoucher();
};
#endif // SHOPFORM_H

@ -231,12 +231,13 @@
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Total</string>
<string>Total:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@ -247,6 +248,7 @@
<widget class="QLabel" name="total">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>

@ -2,7 +2,6 @@
ShopService::ShopService()
{
}
QSharedPointer<Voucher> ShopService::createVoucher()
@ -29,15 +28,91 @@ void ShopService::calculate(QSharedPointer<Voucher> voucher)
{
QDecDouble total;
loadSettings();
voucher->setVatRateHigh(m_gs->vatHigh());
voucher->setVatRateFirstLower(m_gs->vatFirstLower());
voucher->setVatRateSecondLower(m_gs->vatSecondLower());
foreach (QSharedPointer<VoucherItem> item, voucher->items()) {
calculateItem(item);
QDecDouble priceWitouthWat = item->priceWitouthVat();
switch (item->vatType()) {
case Enums::NONE:
voucher->setPriceNoVat(voucher->priceNoVat() + priceWitouthWat);
break;
case Enums::HIGH:
voucher->setPriceVatHigh(voucher->priceVatHigh() + priceWitouthWat);
break;
case Enums::FIRST_LOWER:
voucher->setPriceVatFirstLower(voucher->priceVatFirstLower() + priceWitouthWat);
break;
case Enums::SECOND_LOWER:
voucher->setPriceVatSecondLower(voucher->priceVatSecondLower() + priceWitouthWat);
break;
default:
break;
}
total += item->price();
}
voucher->setTotalPriceVatHigh(includeVat(voucher->priceVatHigh(), Enums::HIGH));
voucher->setTotalPriceVatFirstLower(includeVat(voucher->priceVatFirstLower(), Enums::FIRST_LOWER));
voucher->setTotalPriceVatSecondLower(includeVat(voucher->priceVatSecondLower(), Enums::SECOND_LOWER));
voucher->setTotalPrice(total);
}
void ShopService::calculateItem(QSharedPointer<VoucherItem> item)
{
loadSettings();
if (m_gs->vatPayer())
{
item->setVatRate(vatRate(item->vatType()));
item->setPriceWitouthVat(item->unitPrice() * item->count());
item->setPrice(includeVat(item->priceWitouthVat(), item->vatType()));
}
else
{
item->setPrice(item->unitPrice() * item->count());
}
}
QDecDouble ShopService::includeVat(QDecDouble price, Enums::VatType vatType)
{
return price * ((vatRate(vatType) / 100) + QDecDouble(1));
}
void ShopService::loadSettings()
{
if (m_gs.isNull())
{
SettingsService settings("CORE");
m_gs = settings.loadSettings<GlobalSettings>();
}
}
QDecDouble ShopService::vatRate(Enums::VatType vatType)
{
QDecDouble vatRate;
loadSettings();
switch (vatType) {
case Enums::NONE:
vatRate = 0;
break;
case Enums::HIGH:
vatRate = m_gs->vatHigh();
break;
case Enums::FIRST_LOWER:
vatRate = m_gs->vatFirstLower();
break;
case Enums::SECOND_LOWER:
vatRate = m_gs->vatSecondLower();
break;
default:
break;
}
return vatRate;
}

@ -4,6 +4,7 @@
#include <QSharedPointer>
#include <core.h>
#include <settings/globalsettings.h>
#include "data/shop-data.h"
#include "ishopitem.h"
@ -16,6 +17,13 @@ public:
void addShopItem(QSharedPointer<Voucher> voucher, QSharedPointer<IShopItem> item, int count);
void calculate(QSharedPointer<Voucher> voucher);
void calculateItem(QSharedPointer<VoucherItem> item);
private:
QDecDouble includeVat(QDecDouble price, Enums::VatType vatType);
void loadSettings();
QSharedPointer<GlobalSettings> m_gs;
QDecDouble vatRate(Enums::VatType vatType);
};
#endif // SHOPSERVICE_H

Loading…
Cancel
Save