<?php
namespace Lm\Engine\SampleLimit;
use Lm\Entity\Cart\CartHeader;
use Lm\Entity\OrderHeader;
use Lm\Entity\CatalogLimit;
class Catalog
{
/**
* 判定結果: OK
*/
const RESULT_OK = 1;
/**
* 判定結果: NG - ほげ
*/
const RESULT_NG = 0;
/**
* @param CartHeader $cart
* @return int
*/
public static function checkCart(CartHeader $cart)
{
if (!$cart->getCustomer()) {
return ['result' => self::RESULT_OK, 'message' => 'OK'];
}
$catalogLimit = CatalogLimit::getInstanceByDevice($cart->getDevice() == OrderHeader::DEVICE_PC ? 'PC' : 'SP');
if (self::getOrderCountAfterPurchase($cart) >= $catalogLimit->getClNoPurchaseLimit()) {
$errorMsg = sprintf(CatalogLimit::ERROR_NO_PURCHASE_LIMIT, $catalogLimit->getClNoPurchaseLimit());
return ['result' => self::RESULT_NG, 'message' => $errorMsg];
}
if ($catalogLimit->getClNoPurchaseLimit() == 0) {
return ['result' => self::RESULT_NG, 'message' => CatalogLimit::ERROR_ZERO_NUMBER_LIMIT];
}
if (self::getOrderCountOfToday($cart) >= $catalogLimit->getClNumberLimit()) {
$errorMsg = sprintf(CatalogLimit::ERROR_NUMBER_LIMIT, $catalogLimit->getClNumberLimit());
return ['result' => self::RESULT_NG, 'message' => $errorMsg];
}
return ['result' => self::RESULT_OK, 'message' => 'OK'];
}
/**
* @param CartHeader $cart
* @return int
*/
protected static function getOrderCountOfToday(CartHeader $cart)
{
$customerId = $cart->getCustomer()->getCustomerId();
return CatalogLimit::getOrderCountOfToday($customerId);
}
/**
* @param CartHeader $cart
* @return int
*/
protected static function getOrderCountAfterPurchase(CartHeader $cart)
{
$customerId = $cart->getCustomer()->getCustomerId();
return CatalogLimit::getOrderCountAfterPurchase($customerId);
}
}