HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
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));
    }
}