Files
kupshop/bundles/External/HannahBundle/Util/Seller/OCSellerUtil.php
2025-08-02 16:30:27 +02:00

61 lines
2.7 KiB
PHP

<?php
declare(strict_types=1);
namespace External\HannahBundle\Util\Seller;
use KupShop\KupShopBundle\Util\DateUtil;
use KupShop\SellerBundle\Utils\SellerUtil;
class OCSellerUtil extends SellerUtil
{
public function loadSellersDeliveryDate(array &$sellers, array $products = []): void
{
$dbcfg = \Settings::getDefault();
// nactu si nastaveni z administrace
$config = $dbcfg->outdoorconcept['deliveryTime'] ?? [];
foreach ($sellers as &$seller) {
$deliveryDate = new \DateTime();
$availability = self::AVAILABILITY_IN_STORE;
$afternoonIncrement = 0;
$deliveryDateIncrement = 0;
foreach ($seller['products'] ?? [] as $key => $item) {
$pieces = $products[$key] ?? 1;
// pokud nejaky produkt neni v dostatecnem mnozstvi na prodejne, ale je skladem jinde
if ($item['in_store'] < $pieces) {
$missingPieces = $pieces - $item['in_store'];
$availability = min($availability, self::AVAILABILITY_PARTIALLY_IN_STORE);
// pokud nemam skladem na prodejne, ale mam skladem na hlavnim skladu, tak se musi na prodejnu zavest z centraly
if ($item['in_store_main'] >= $missingPieces) {
$deliveryDateIncrement = max($config['seller']['inMainStore']['days'] ?? 2, $deliveryDateIncrement);
$afternoonIncrement = max($config['seller']['inMainStore']['afternoonIncrement'] ?? 0, $afternoonIncrement);
} else {
// neni skladem na prodejne, ani na centrale, ale je skladem na jine prodejne, takze budeme prevazet odtamtud
$deliveryDateIncrement = max($config['seller']['inOtherStore']['days'] ?? 4, $deliveryDateIncrement);
$afternoonIncrement = max($config['seller']['inOtherStore']['afternoonIncrement'] ?? 0, $afternoonIncrement);
}
}
}
// pokud je po 12 hodine a je nastaveny increment, ktery se ma pricist po 12 hodine
if ($afternoonIncrement && (new \DateTime())->format('H') >= 12) {
$deliveryDateIncrement += $afternoonIncrement;
}
// pokud je datum vyzvednuti dnes, ale prodejna za chvili zavira, tak bych mel dat datum az na dalsi den
if (!$deliveryDateIncrement && !$afternoonIncrement) {
if ($this->isSellerClosed($seller, 1)) {
$deliveryDate = new \DateTime('tomorrow');
}
}
$seller['deliveryDate'] = DateUtil::calcWorkingDays($deliveryDateIncrement, $deliveryDate);
$seller['availability'] = $availability;
}
}
}