<?php
namespace App\DataObject;
class Product extends \Pimcore\Model\DataObject\Product
{
use HasArrayExport;
public function exportForCalculator($consumption, $addons): array
{
$allFields = $this->export();
$allFields['price'] = $this->calculatePrices($consumption);
return $allFields;
}
/**
* @param int $consumption
*
* @return array{basePrice: float, unitPrice: float}|null
*/
public function getPriceForConsumption(int $consumption): ?array
{
$prices = array_filter($this->getPrices(), fn ($price) => isset($price['consumption']));
if (!empty($prices)) {
usort($prices, function ($a, $b) {
return $a['consumption']->getData() <=> $b['consumption']->getData();
});
$x = 0;
while ($consumption > $prices[$x]['consumption']->getData()) {
if (!isset($prices[$x + 1])) break;
$x++;
}
if (!isset($prices[$x])) {
return null;
}
return [
'basePrice' => $prices[$x]['basePrice']->getData(),
'unitPrice' => $prices[$x]['unitPrice']->getData(),
'consumption' => $prices[$x]['consumption']->getData(),
];
}
return null;
}
public function calculatePrices(int $consumption): bool|array
{
$price = $this->getPriceForConsumption($consumption);
$basePriceGross = $price['basePrice'];
$unitPriceGross = $price['unitPrice'];
$basePrice = round($basePriceGross * 100 / 105, 2);
$unitPrice = round($unitPriceGross * 100 / 105, 2);
$monthlyGross = round($basePriceGross + (($unitPriceGross * $consumption) / 12), 2);
$yearlyGross = round($basePriceGross + ($unitPriceGross * $consumption), 2);
$monthly = round($monthlyGross * 100 / 105, 2);
$yearly = round($yearlyGross * 100 / 105, 2);
if (!empty($price)) {
return [
"unitPrice" => (float) $unitPriceGross,
"consumption" => $consumption,
"active" => true,
"workingPrice" => $unitPrice,
"workingPriceGross" => (float) $unitPriceGross,
"basePrice" => $basePrice,
"basePriceGross" => (float) $basePriceGross,
"monthly" => $monthly,
"monthlyGross" => $monthlyGross,
"yearly" => $yearly,
"yearlyGross" => $yearlyGross,
"tax" => 1.05,
"taxOperation" => "*",
"isMarginalPrice" => false,
];
}
return false;
}
}