public function isOrderProduct($em, \Eccube\Entity\Order $Order)
{
// 商品公開ステータスチェック
$orderDetails = $Order->getOrderDetails();
foreach ($orderDetails as $orderDetail) {
if ($orderDetail->getProduct()->getStatus()->getId() != \Eccube\Entity\Master\Disp::DISPLAY_SHOW) {
// 商品が非公開ならエラー
return false;
}
// 購入制限数チェック
if (!is_null($orderDetail->getProductClass()->getSaleLimit())) {
if ($orderDetail->getQuantity() > $orderDetail->getProductClass()->getSaleLimit()) {
return false;
}
}
}
// 在庫チェック
foreach ($orderDetails as $orderDetail) {
// 在庫が無制限かチェックし、制限ありなら在庫数をチェック
if ($orderDetail->getProductClass()->getStockUnlimited() == Constant::DISABLED) {
// 在庫チェックあり
// 在庫に対してロック(select ... for update)を実行
$productStock = $em->getRepository('Eccube\\Entity\\ProductStock')->find($orderDetail->getProductClass()->getProductStock()->getId(), LockMode::PESSIMISTIC_WRITE);
// 購入数量と在庫数をチェックして在庫がなければエラー
if ($orderDetail->getQuantity() > $productStock->getStock()) {
return false;
}
}
}
return true;
}