File: D:/HostingSpaces/SBogers10/shop.komma.nl/app/Discounts/Actions/QuantityForPriceOf.php
<?php declare(strict_types=1);
namespace App\Discounts\Actions;
use App\Cart\ShoppingCartItem;
use App\Discounts\DiscountableInterface;
use App\Vat\Models\FinancialProperties;
use App\Vat\VatScenarioEnum;
use App\Vat\VatService;
class QuantityForPriceOf extends AbstractDiscountActionHandler
{
public function apply(DiscountableInterface $discountable, VatService $vatService, string $description, string $params): bool {
if(!is_a($discountable, ShoppingCartItem::class)) return false;
$params = $this->dissectParams($params);
$quantity = $params[0];
$forThePriceOf = $params[1];
if($discountable->getQuantity() < $quantity) return false;
$ratio = $quantity / $forThePriceOf;
$payForAmount = ceil($discountable->getQuantity() / $ratio);
$itemsFree = $discountable->getQuantity() - $payForAmount;
$discountPrice = ($itemsFree * $discountable->getProductable()->getPrice()) * -1;
$priceModification = new FinancialProperties();
$priceModification->setVatScenarioEnum(VatScenarioEnum::high_inc);
$priceModification->setPrice($discountPrice);
$financialProperties = $vatService->calculateVatForModelWithVatScenarioEnum($priceModification);
$discountable->addDiscountPriceMutation($description, $financialProperties);
return true;
}
function dissectParams(string $params) {
return array_map(function($param) {
return (int) trim($param);
}, explode(',', $params));
}
}