61 lines
2.7 KiB
PHP
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;
|
|
}
|
|
}
|
|
}
|