<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
*
* http://www.ec-cube.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Customize\Controller\Reservation;
use Eccube\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\RouterInterface;
use Customize\Entity\Reservation;
use Customize\Form\Type\ReservationType;
use Customize\Repository\ReservationRepository;
use Eccube\Repository\CustomerRepository;
use Eccube\Repository\PageRepository;
use Eccube\Entity\Customer;
use Customize\Service\MailService;
class ReservationController extends AbstractController
{
/**
* @var ReservationRepository
*/
protected $reservationRepository;
/**
* @var CustomerRepository
*/
protected $customerRepository;
/**
* @var PageRepository
*/
protected $pageRepository;
/**
* @var MailService
*/
protected $mailService;
/**
* ReservationController constructor.
*
* @param ReservationRepository $reservationRepository
*/
public function __construct(
ReservationRepository $reservationRepository,
CustomerRepository $customerRepository,
PageRepository $pageRepository,
MailService $mailService
) {
$this->reservationRepository = $reservationRepository;
$this->customerRepository = $customerRepository;
$this->pageRepository = $pageRepository;
$this->mailService = $mailService;
}
/**
* @Route("/reservation/", name="reservation", methods={"GET", "POST"})
* @Route("/reservation/", name="reservation_confirm", methods={"GET", "POST"})
* @Template("Reservation/index.twig")
*/
public function index(Request $request, RouterInterface $router)
{
$Reservation = new Reservation();
$Customer = $this->getUser();
if ($Customer) {
$Reservation->setShop($Customer->shop);
}
else {
// 非会員の場合、ログイン画面を表示
// ログイン後の画面遷移先を設定
$this->setLoginTargetPath('reservation');
return $this->redirectToRoute('mypage_login');
}
$reservationDate = $this->reservationRepository->getReservationDate($Reservation->getShop());
$Reservation->setReservationDate($reservationDate);
$builder = $this->formFactory->createBuilder(ReservationType::class, $Reservation);
$form = $builder->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
switch ($request->get('mode')) {
case 'confirm':
log_info('予約登録確認開始');
log_info('予約登録確認完了');
return $this->render(
'Reservation/confirm.twig',
[
'form' => $form->createView(),
'Customer' => $Customer,
'Page' => $this->pageRepository->getPageByRoute('reservation_confirm'),
]
);
case 'complete':
log_info('予約登録開始');
// 予約登録
$Reservation->setCustomer($Customer);
$Reservation->setCountry($Customer->getCountry());
$Reservation->setPref($Customer->getPref());
$Reservation->setJob($Customer->getJob());
$Reservation->setSex($Customer->getSex());
$Reservation->setName01($Customer->getName01());
$Reservation->setName02($Customer->getName02());
$Reservation->setKana01($Customer->getKana01());
$Reservation->setKana02($Customer->getKana02());
$Reservation->setCompanyName($Customer->getCompanyName());
$Reservation->setEmail($Customer->getEmail());
$Reservation->setPhoneNumber($Customer->getPhoneNumber());
$Reservation->setPostalCode($Customer->getPostalCode());
$Reservation->setAddr01($Customer->getAddr01());
$Reservation->setAddr02($Customer->getAddr02());
$Reservation->setBirth($Customer->getBirth());
$this->entityManager->persist($Reservation);
$this->entityManager->flush();
// 会員情報の店舗を更新
$Customer->shop = $Reservation->getShop();
$this->entityManager->persist($Customer);
$this->entityManager->flush();
// メール送信
$this->mailService->sendReservationMail($Reservation);
log_info('予約登録完了');
return $this->redirectToRoute('reservation_complete');
}
}
return [
'form' => $form->createView(),
'Customer' => $Customer,
// 'Reservation' => $Reservation,
// 'id' => $id,
];
}
/**
* 予約完了画面.
*
* @Route("/reservation/complete", name="reservation_complete", methods={"GET"})
* @Template("Reservation/complete.twig")
*/
public function complete()
{
return [];
}
}