Added support for VAT calculations.
This commit is contained in:
+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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user