<?php
namespace Lm\Engine\Zaiko;
use Lm\Engine\Zaiko\Entity\SkuExtended;
use Lm\Service\Db\SqlService;
class Yoyaku
{
/**
* 入荷予定日までの予約受付開始日数
*/
const YOYAKU_AVAILABLE_SINCE_DAYS_AGO = 180;
/**
* @param int $goodsId
* @param bool $isMatrix
* @param int $janId
* @param int $gpId
* @param int $gclId
* @param string $datetime
* @see Yoyaku::check()
* @deprecated use Yoyaku::check() instead.
* @return array|bool
*/
public function check2($goodsId, $isMatrix = false, $janId = null, $gpId = null, $gclId = null, $datetime = null)
{
//
return self::check($goodsId, $isMatrix, $janId, $gpId, $gclId, $datetime);
}
/**
* @param int $goodsId
* @param bool|false $isMatrix
* @param int|null $janId
* @param int|null $gpId
* @param int|null $gclId
* @param string|null $datetime
* @return array|false|mixed
*/
public static function check($goodsId, $isMatrix = false, $janId = null, $gpId = null, $gclId = null, $datetime = null)
{
//
try {
//
$skuList = SkuExtended::getInstanceList($goodsId, $janId, $gclId, $gpId, $datetime);
} catch (\Exception $e) {
//
return false;
}
//
$result = [];
$buffer = [];
//
foreach ($skuList as $sku) {
//
if (!isset($result[$sku->getGclId()])) {
//
$result[$sku->getGclId()] = [];
}
//
$result[$sku->getGclId()][$sku->getGpId()] = $buffer[] = $sku->getIsYoyakuAvailable() || $sku->getIsBichikuYoyakuAvailable();
}
//
if (!$isMatrix) {
//
$result = ($buffer = array_filter($buffer, function ($_buffer) {
//
return !empty($_buffer);
})) ? max($buffer) : false;
}
//
return $result;
}
/**
* @param string $nyukaDate
* @param string|null $fromDate
* @param int|self::YOYAKU_AVAILABLE_SINCE_DAYS_AGO $yoyakuAvailableSinceDaysAgo
* @return bool
* @throws \Exception
*/
public static function calculateIsYoyakuAvailable($nyukaDate, $fromDate = null, $yoyakuAvailableSinceDaysAgo = self::YOYAKU_AVAILABLE_SINCE_DAYS_AGO)
{
//
$date1 = new \DateTime($fromDate);
$date2 = new \DateTime($nyukaDate);
$diff = $date1->diff($date2);
//
return $diff->days <= $yoyakuAvailableSinceDaysAgo;
}
}