<?php
namespace Customize\Controller;
use Customize\Entity\DeliveryDiscountSetting;
use Customize\Enum\FaqType;
use Customize\Enum\SeasonCode;
use Customize\Repository\CampaignRepository;
use Customize\Repository\ConfirmDeliveryRepository;
use Customize\Repository\CouponRepository;
use Customize\Repository\CustomPluginCouponRepository;
use Customize\Repository\DeliveryDiscountSettingRepository;
use Customize\Repository\FaqRepository;
use Customize\Repository\PriceRepository;
use Customize\Repository\ProductRepository;
use Customize\Repository\SeasonRepository;
use Customize\Repository\WorkingTimeRepository;
use Customize\Service\DeiveryDateService;
use DateTime;
use Eccube\Entity\Delivery;
use Eccube\Repository\CategoryRepository;
use Eccube\Repository\DeliveryRepository;
use Eccube\Repository\NewsRepository;
use Eccube\Repository\TagRepository;
use Plugin\CouponPro42\Repository\CouponRepository as RepositoryCouponRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
class TopController extends BaseController
{
/**
* @var NewsRepository
*/
protected $newsRepository;
protected $seasonRepository;
protected $couponRepository;
protected $campaignRepository;
protected $productRepository;
protected $tagRepository;
protected $cateRepository;
protected $customPluginCouponRepository;
protected $couponOrderProRepository;
protected $WorkingTimeRepository;
protected $confirmDeliveryRepository;
protected $deliveryRepository;
protected $priceRepository;
protected $faqRepository;
protected $deliveryDateService;
protected $deliveryDiscountSettingRepository;
public function __construct(
NewsRepository $newsRepository,
SeasonRepository $seasonRepository,
CouponRepository $couponRepository,
CampaignRepository $campaignRepository,
ProductRepository $productRepository,
TagRepository $tagRepository,
CustomPluginCouponRepository $customPluginCouponRepository,
CategoryRepository $categoryRepository,
RepositoryCouponRepository $couponOrderProRepository,
WorkingTimeRepository $workingTimeRepository,
ConfirmDeliveryRepository $confirmDeliveryRepository,
DeliveryRepository $deliveryRepository,
PriceRepository $priceRepository,
FaqRepository $faqRepository,
DeiveryDateService $deliveryDateService,
DeliveryDiscountSettingRepository $deliveryDiscountSettingRepository
) {
$this->newsRepository = $newsRepository;
$this->seasonRepository = $seasonRepository;
$this->couponRepository = $couponRepository;
$this->campaignRepository = $campaignRepository;
$this->productRepository = $productRepository;
$this->tagRepository = $tagRepository;
$this->cateRepository = $categoryRepository;
$this->customPluginCouponRepository = $customPluginCouponRepository;
$this->couponOrderProRepository = $couponOrderProRepository;
$this->WorkingTimeRepository = $workingTimeRepository;
$this->confirmDeliveryRepository = $confirmDeliveryRepository;
$this->deliveryRepository = $deliveryRepository;
$this->priceRepository = $priceRepository;
$this->faqRepository = $faqRepository;
$this->deliveryDateService = $deliveryDateService;
$this->deliveryDiscountSettingRepository = $deliveryDiscountSettingRepository;
}
/**
* @Method("GET")
* @Route("/terms")
* @Template("@user_data/terms.twig")
*/
public function terms()
{
return;
}
/**
* @Method("GET")
* @Route("/", name="homepage", methods={"GET"})
* @Template("@user_data/index.twig")
*/
public function index(Request $request)
{
$season = $this->seasonRepository->findActiveSeason();
if ($this->isGranted('ROLE_USER')) {
$Customer = $this->getUser();
$couponPro = $this->couponOrderProRepository->fetchCouponsForMypage($Customer);
}else {
$couponPro = $this->couponOrderProRepository->fetchCouponsForMypage(null);
}
$campaigns = $this->campaignRepository->findActiveCampaigns();
$newsList = $this->newsRepository->findPublishedNews();
$newsNoti = $this->newsRepository->findPublishedNewsNoti();
$products = $this->productRepository->getQueryBuilderBySearchDataUser([
'name' => $request->get('name'),
'tags' => $request->get('tags'),
'category_id' => $request->get('category')
]);
$tags = $this->tagRepository->findAll();
$categories = $this->cateRepository->findAll();
return [
'season' => $season,
'couponPro' => $couponPro,
'campaigns' => $campaigns,
'newsList' => $newsList,
'newsNoti' => $newsNoti,
'products' => $products,
'tags' => $tags,
'categories' => $categories,
'form' => [
'name' => $request->get('name'),
'tags' => $request->get('tags'),
'category_id' => $request->get('category')
]
];
}
/**
* 指定した新着情報を削除する。
*
* @Route("/workingtime/check-status", name="workingtime_check_status", methods={"GET", "POST"})
*
* @return json
*/
public function checkStatus(Request $request)
{
$date = new \DateTime($request->get('date'));
$workingtime = $this->WorkingTimeRepository->findOneBy(['day' => $date]);
$result = false;
if ($workingtime) {
$result = $workingtime->getStatus() ? 'rest' : 'work';
} else {
$result = 'normal';
}
return $this->json([
'result' => $result
]);
}
/**
* @Method("GET")
* @Route("/specified")
* @Template("@user_data/specified.twig")
*/
public function specified()
{
return;
}
/**
* @Method("GET")
* @Route("/privacy")
* @Template("@user_data/privacy.twig")
*/
public function privacy()
{
return;
}
/**
* @Method("GET")
* @Route("/trading_card-design")
* @Template("@user_data/trading_card-design.twig")
*/
public function trading_card_design()
{
$category = $this->cateRepository->findOneBy(['name' => 'トレカ']);
return [
'category' => $category
];
}
/**
* @Method("GET")
* @Route("/sticker-design")
* @Template("@user_data/sticker-design.twig")
*/
public function sticker_design()
{
$category = $this->cateRepository->findOneBy(['name' => 'ステッカー']);
return [
'category' => $category
];
}
/**
* @Method("GET")
* @Route("/payment")
* @Template("@user_data/payment.twig")
*/
public function payment()
{
return;
}
/**
* @Method("GET")
* @Route("/delivery")
* @Template("@user_data/delivery.twig")
*/
public function delivery()
{
$deliveries = $this->deliveryRepository->getActiveDeliveries();
$deliveryDisount = $this->deliveryDiscountSettingRepository->getFirstSetting();
$type_discount = $deliveryDisount ? $deliveryDisount->getType() : null;
$discount = $deliveryDisount ? $deliveryDisount->getDiscount() : null;
$min_order = $deliveryDisount ? $deliveryDisount->getMinOrder() : null;
$internationalFee = [];
foreach($deliveries as $delivery){
$international_fee = $delivery->getInternational();
if($international_fee && !in_array($international_fee, $internationalFee)){
$internationalFee[] = $international_fee;
}
}
$minInternationalFee = count($internationalFee) > 0 ? min($internationalFee) : null;
if($type_discount){
$type_discount = $type_discount === DeliveryDiscountSetting::TYPE_PERCENT ? '%' : "円";
}
return ['deliveries' => $deliveries, 'minInternationalFee' => $minInternationalFee, 'deliveryDiscount' => ['type' => $type_discount, 'discount' => $discount, 'MinOrder' => $min_order]];
}
/**
* @Method("GET")
* @Route("/faq")
* @Template("@user_data/faq.twig")
*/
public function faq()
{
$faqs = $this->faqRepository->getAllBySortNo();
$types = FaqType::getList();
return [
'faqs' => $faqs,
'types'=> $types
];
}
/**
* @Method("GET")
* @Route("/keyholder-design")
* @Template("@user_data/keyholder-design.twig")
*/
public function keyholder_design()
{
$category = $this->cateRepository->findOneBy(['name' => 'アクリルキーホルダー']);
return [
'category' => $category
];
}
/**
* @Method("GET")
* @Route("/stand-design")
* @Template("@user_data/stand-design.twig")
*/
public function stand_design()
{
$category = $this->cateRepository->findOneBy(['name' => 'アクリルスタンド']);
return [
'category' => $category
];
}
/**
* @Method("GET")
* @Route("/badge-design")
* @Template("@user_data/badge-design.twig")
*/
public function badge_design()
{
$category = $this->cateRepository->findOneBy(['name' => 'バッジ']);
return [
'category' => $category
];
}
/**
* @Method("GET")
* @Route("/other-design")
* @Template("@user_data/other-design.twig")
*/
public function other_design()
{
$category = $this->cateRepository->findOneBy(['name' => 'その他']);
return [
'category' => $category
];
}
/**
* @Method("GET")
* @Route("/delivery_confirmation")
* @Template("@user_data/delivery_confirmation.twig")
*/
public function delivery_confirmation()
{
$season = $this->seasonRepository->findActiveSeason()->getCode() ?? SeasonCode::Normal;
$categories = $this->cateRepository->findAll();
$products = $this->productRepository->getProductRoot();
$data = $this->confirmDeliveryRepository->getDataDelivery($season);
$startDate = new \DateTime('first day of this month');
$endDate = new \DateTime('last day of next month');
$calendars = $this->WorkingTimeRepository->createQueryBuilder('wt')
->where('wt.day BETWEEN :start AND :end')
->setParameter('start', $startDate->format('Y-m-d'))
->setParameter('end', $endDate->format('Y-m-d'))
->getQuery()
->getResult();
$workingtimes = [];
foreach($calendars as $calendar) {
$workingtimes[] = [
'status' => $calendar->getStatus(),
'date' => date_format($calendar->getDay(), "Y-m-d")
];
}
return [
'categories' => $categories,
'products' => $products,
'data' => $data,
'workingtimes' => $workingtimes,
];
}
/**
* @Method("GET")
* @Route("/get_delivery/{id}")
* @return JsonResponse
*/
public function getDelivery($id)
{
$season = $this->seasonRepository->findActiveSeason()->getCode() ?? SeasonCode::Normal;
$data = $this->priceRepository->queryDeliveryConfirm($id, $season);
return $this->json([
'data' => $data
]);
}
/**
* @Method("GET")
* @Route("/sample")
* @Template("@user_data/sample.twig")
*/
public function sample()
{
$products_sample = $this->productRepository->getProductSample();
return [
'products_sample' => $products_sample
];
}
/**
* @Method("GET")
* @Route("/sticker-mat")
* @Template("@user_data/sticker-mat.twig")
*/
public function stickerMat()
{
$date = $this->deliveryDateService->deliveryDate($day = 4, new DateTime('2025-01-09'));
dd($date);
return;
}
/**
* @Method("GET")
* @Route("/keyholder-size_s")
* @Template("@user_data/keyholder-size_s.twig")
*/
public function keyHolderSizeS()
{
return;
}
/**
* @Method("GET")
* @Route("/stand-size_s")
* @Template("@user_data/stand-size_s.twig")
*/
public function standSizeS()
{
return;
}
/**
* @Method("GET")
* @Route("/badge-can_hook")
* @Template("@user_data/badge-can_hook.twig")
*/
public function badgeCanHook()
{
return;
}
/**
* @Method("GET")
* @Route("/trading_card-regular")
* @Template("@user_data/trading_card-regular.twig")
*/
public function tradingCardRegular()
{
return;
}
/**
* @Method("GET")
* @Route("/other-artprint")
* @Template("@user_data/other-artprint.twig")
*/
public function otherArtprint()
{
return;
}
/**
* @Method("GET")
* @Route("/other")
* @Template("@user_data/other.twig")
*/
public function other()
{
return;
}
/**
* @Method("GET")
* @Route("/keyholder")
* @Template("@user_data/keyholder.twig")
*/
public function keyholder()
{
return;
}
/**
* @Method("GET")
* @Route("/stand")
* @Template("@user_data/stand.twig")
*/
public function stand()
{
return;
}
/**
* @Method("GET")
* @Route("/badge")
* @Template("@user_data/badge.twig")
*/
public function badge()
{
return;
}
/**
* @Method("GET")
* @Route("/trading_card")
* @Template("@user_data/trading_card.twig")
*/
public function trading_card()
{
return;
}
/**
* @Method("GET")
* @Route("/sticker-mat_detail")
* @Template("@user_data/sticker-mat_detail.twig")
*/
public function stickeMatDetail()
{
return;
}
/**
* @Method("GET")
* @Route("/keyholder-size_s_order")
* @Template("@user_data/keyholder-size_s_order.twig")
*/
public function keyholderSizeSOrder()
{
return;
}
/**
* @Method("GET")
* @Route("/stand-size_s_order")
* @Template("@user_data/stand-size_s_order.twig")
*/
public function standSizeSOrder()
{
return;
}
/**
* @Method("GET")
* @Route("/badge-acrylic_safty_order")
* @Template("@user_data/badge-acrylic_safty_order.twig")
*/
public function badgeAcrylicSaftyOrder()
{
return;
}
/**
* @Method("GET")
* @Route("/sticker")
* @Template("@user_data/sticker.twig")
*/
public function sticker()
{
return;
}
/**
* @Method("GET")
* @Route("/design")
* @Template("@user_data/design.twig")
*/
public function design()
{
return;
}
}