Added support for VAT calculations.
This commit is contained in:
+126
-1
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+13
-1
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
+11
-1
@@ -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);
|
||||
|
||||
+49
-35
@@ -11,45 +11,59 @@
|
||||
"schemaVersion" : 1,
|
||||
"sql" : [
|
||||
"CREATE TABLE \"VoucherItem\" (
|
||||
\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
\"name\" TEXT NULL,
|
||||
\"count\" INTEGER NOT NULL,
|
||||
\"unitPrice\" INTEGER NOT NULL,
|
||||
\"price\" INTEGER NOT NULL,
|
||||
\"refId\" INTEGER NOT NULL,
|
||||
\"itemPlugin\" TEXT NULL,
|
||||
\"vatType\" INTEGER NOT NULL);
|
||||
\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
\"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\" (
|
||||
\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
\"name\" TEXT NULL,
|
||||
\"description\" TEXT NULL,
|
||||
\"contact\" INTEGER NULL,
|
||||
\"totalPrice\" INTEGER NOT NULL,
|
||||
\"status\" INTEGER NOT NULL,
|
||||
CONSTRAINT \"contact_fk\"
|
||||
FOREIGN KEY (\"contact\")
|
||||
REFERENCES \"AddressbookData\" (\"id\")
|
||||
DEFERRABLE INITIALLY DEFERRED);
|
||||
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\"
|
||||
FOREIGN KEY (\"contact\")
|
||||
REFERENCES \"AddressbookData\" (\"id\")
|
||||
DEFERRABLE INITIALLY DEFERRED);
|
||||
|
||||
CREATE TABLE \"Voucher_items\" (
|
||||
\"object_id\" INTEGER NOT NULL,
|
||||
\"index\" INTEGER NOT NULL,
|
||||
\"value\" INTEGER NULL,
|
||||
CONSTRAINT \"object_id_fk\"
|
||||
FOREIGN KEY (\"object_id\")
|
||||
REFERENCES \"Voucher\" (\"id\")
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT \"value_fk\"
|
||||
FOREIGN KEY (\"value\")
|
||||
REFERENCES \"VoucherItem\" (\"id\")
|
||||
DEFERRABLE INITIALLY DEFERRED);
|
||||
CREATE TABLE \"Voucher_items\" (
|
||||
\"object_id\" INTEGER NOT NULL,
|
||||
\"index\" INTEGER NOT NULL,
|
||||
\"value\" INTEGER NULL,
|
||||
CONSTRAINT \"object_id_fk\"
|
||||
FOREIGN KEY (\"object_id\")
|
||||
REFERENCES \"Voucher\" (\"id\")
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT \"value_fk\"
|
||||
FOREIGN KEY (\"value\")
|
||||
REFERENCES \"VoucherItem\" (\"id\")
|
||||
DEFERRABLE INITIALLY DEFERRED);
|
||||
|
||||
CREATE INDEX \"Voucher_items_object_id_i\"
|
||||
ON \"Voucher_items\" (\"object_id\");
|
||||
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" ]
|
||||
}
|
||||
|
||||
+15
-6
@@ -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
|
||||
|
||||
+3
-1
@@ -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>
|
||||
|
||||
+77
-2
@@ -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)
|
||||
{
|
||||
item->setPrice(item->unitPrice() * item->count());
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user