OpenXE/classes/Modules/FiskalyApi/Transaction/VatAmount/BaseVatAmount.php
2021-05-21 08:49:41 +02:00

89 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace Xentral\Modules\FiskalyApi\Transaction\VatAmount;
use Xentral\Modules\FiskalyApi\Exception\VatRateNotFoundException;
abstract class BaseVatAmount
{
/** @var string */
private $vatType;
/** @var float */
private $amount;
/**
* BaseVatAmount constructor.
*
* @param string $vatType
* @param float $amount
*/
protected function __construct(string $vatType, float $amount)
{
$this->vatType = $vatType;
$this->amount = $amount;
}
/**
* @return string
*/
public function getVatType(): string
{
return $this->vatType;
}
/**
* @return float
*/
public function getAmount(): float
{
return $this->amount;
}
/**
* @param float $amount
*/
public function setAmount(float $amount): void
{
$this->amount = $amount;
}
/**
* @param float $amountToAdd
*
* @return void
*/
public function add(float $amountToAdd): void
{
$this->amount += $amountToAdd;
}
/**
* @param float $percentage
* @param float $amount
*
* @throws VatRateNotFoundException
*
* @return BaseVatAmount
*/
public static function fromPercentage(float $percentage, float $amount): BaseVatAmount
{
$mapping = [
19.0 => NormalVatAmount::class,
7.0 => Reduced1VatAmount::class,
10.7 => SpecialRate1VatAmount::class,
5.5 => SpecialRate2VatAmount::class,
0 => NullVatAmount::class
];
$class = $mapping[$percentage];
if(empty($class)){
throw VatRateNotFoundException::fromPercentage($percentage);
}
return new $class($amount);
}
}