<?php
namespace Plugin\PiaPlazaMypage\Controller;
use Eccube\Controller\AbstractController;
use Eccube\Repository\OrderRepository;
use Plugin\PriceNegotiation\Repository\OfferHistoryRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\HttpFoundation\Request;
/**
* マイページ購入履歴コントローラー
*
* @Route("/mypage")
*/
class MypageBuyController extends AbstractController
{
/**
* @var OfferHistoryRepository
*/
private $offerHistoryRepository;
/**
* @var OrderRepository
*/
private $orderRepository;
/**
* コンストラクタ
*
* @param OfferHistoryRepository $offerHistoryRepository
* @param OrderRepository $orderRepository
*/
public function __construct(
OfferHistoryRepository $offerHistoryRepository,
OrderRepository $orderRepository
)
{
$this->offerHistoryRepository = $offerHistoryRepository;
$this->orderRepository = $orderRepository;
}
/**
* 交渉中・成立
*
* @Route("/buy", name="mypage_buy")
* @IsGranted("ROLE_USER")
*/
public function index(Request $request)
{
// ログイン会員取得
$Customer = $this->getUser();
$customerId = $Customer->getId();
// 成立した交渉履歴取得(過去4ヶ月分)
$offers = $this->offerHistoryRepository->getSuccessfulOffers($customerId);
// 各カテゴリの件数取得
$exCoinNum1 = count($offers); // 成立
$exCoinNum2 = $this->offerHistoryRepository->getFailedOffersCount($customerId); // 不成立
$exCoinNum3 = $this->orderRepository->getCustomerOrderCount($Customer); // 注文履歴
return $this->render('@PiaPlazaMypage/default/Mypage/buy.twig', [
'rows' => $offers,
'row' => [
'ex_coin_num1' => $exCoinNum1,
'ex_coin_num2' => $exCoinNum2,
'ex_coin_num3' => $exCoinNum3,
],
]);
}
/**
* 交渉中・不成立
*
* @Route("/negotiation_failed", name="mypage_negotiation_failed")
* @IsGranted("ROLE_USER")
*/
public function negotiationFailed(Request $request)
{
// ログイン会員取得
$Customer = $this->getUser();
$customerId = $Customer->getId();
// 不成立の交渉履歴取得(過去4ヶ月分)
$offers = $this->offerHistoryRepository->getFailedOffers($customerId);
// 各カテゴリの件数取得
$exCoinNum1 = $this->offerHistoryRepository->getSuccessfulOffersCount($customerId); // 成立
$exCoinNum2 = count($offers); // 不成立
$exCoinNum3 = $this->orderRepository->getCustomerOrderCount($Customer); // 注文履歴
return $this->render('@PiaPlazaMypage/default/Mypage/negotiation_failed.twig', [
'rows' => $offers,
'row' => [
'ex_coin_num1' => $exCoinNum1,
'ex_coin_num2' => $exCoinNum2,
'ex_coin_num3' => $exCoinNum3,
],
]);
}
/**
* 注文履歴
*
* @Route("/buy_past", name="mypage_buy_past")
* @IsGranted("ROLE_USER")
*/
public function buyPast(Request $request)
{
// ログイン会員取得
$Customer = $this->getUser();
$customerId = $Customer->getId();
// 注文履歴取得
$qb = $this->orderRepository->createQueryBuilder('o')
->leftJoin('o.OrderItems', 'oi')
->leftJoin('oi.Product', 'p')
->leftJoin('o.Shippings', 's')
->where('o.Customer = :customer')
->andWhere('o.OrderStatus != :cancelStatus')
->setParameter('customer', $Customer)
->setParameter('cancelStatus', 8) // 8=キャンセル
->orderBy('o.order_date', 'DESC');
$orders = $qb->getQuery()->getResult();
// OrderItemを展開して配列に変換
$rows = [];
foreach ($orders as $Order) {
$OrderItems = $Order->getOrderItems();
$Shippings = $Order->getShippings();
$Shipping = $Shippings->first();
foreach ($OrderItems as $OrderItem) {
// 商品明細のみ(送料・手数料などは除外)
if ($OrderItem->isProduct()) {
// 価格交渉していない商品は除外(price_negoがnullの場合は表示しない)
if ($OrderItem->getPriceNego() === null) {
continue;
}
$Product = $OrderItem->getProduct();
$row = [
'order_id' => $Order->getId(),
'order_date' => $Order->getOrderDate(),
'product_id' => $Product ? $Product->getId() : null,
'name' => $OrderItem->getProductName(),
'price' => $OrderItem->getPrice(),
'price_nego' => $OrderItem->getPriceNego(),
'payment_total' => $Order->getPaymentTotal(),
'payment_method' => $Order->getPayment() ? $Order->getPayment()->getMethod() : '',
'message' => $Order->getMessage(),
'shipping_name01' => $Shipping ? $Shipping->getName01() : '',
'shipping_name02' => $Shipping ? $Shipping->getName02() : '',
'status_nm' => $Order->getOrderStatus() ? $Order->getOrderStatus()->getName() : '',
'file_name' => $Product && $Product->getMainListImage() ? $Product->getMainListImage() : '',
];
$rows[] = $row;
}
}
}
// 各カテゴリの件数取得
$exCoinNum1 = $this->offerHistoryRepository->getSuccessfulOffersCount($customerId); // 成立
$exCoinNum2 = $this->offerHistoryRepository->getFailedOffersCount($customerId); // 不成立
$exCoinNum3 = count($rows); // 注文履歴
return $this->render('@PiaPlazaMypage/default/Mypage/buy_past.twig', [
'rows' => $rows,
'row' => [
'ex_coin_num1' => $exCoinNum1,
'ex_coin_num2' => $exCoinNum2,
'ex_coin_num3' => $exCoinNum3,
],
]);
}
}