<?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\Form\Type\Admin;
use Eccube\Common\EccubeConfig;
use Eccube\Entity\Shipping;
use Eccube\Entity\Master\OrderStatus; // rev1.0.0 add
use Eccube\Entity\Master\CustomerStatus; // 2026.06.30 add
use Eccube\Form\Type\Master\OrderStatusType;
use Eccube\Form\Type\Master\PaymentType;
use Eccube\Form\Type\MasterType; // rev1.0.0 add
use Eccube\Form\Type\PriceType;
//use Eccube\Form\Type\Admin\ProductType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SearchType; // rev1.0.0 add
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Customize\Entity\Master\School;
use Customize\Form\Type\Master\DepartmentType;
use Customize\Repository\CategoryRepository;
use Eccube\Repository\Master\OrderStatusRepository;
use Eccube\Repository\PaymentRepository;
use Eccube\Form\Type\Admin\SearchOrderType as BaseType;
use Eccube\Repository\Master\CustomerStatusRepository; // 2026.06.30 add
class SearchOrderType extends BaseType
{
/**
* @var CategoryRepository
*/
protected $categoryRepository;
/**
* @var OrderStatusRepository
*/
protected $orderStatusRepository;
/**
* @var PaymentRepository
*/
protected $paymentRepository;
/**
* @var CustomerStatusRepository
*/
protected $customerStatusRepository; // 2026.06.30 add
public function __construct(
EccubeConfig $eccubeConfig,
CategoryRepository $categoryRepository,
OrderStatusRepository $orderStatusRepository,
PaymentRepository $paymentRepository,
CustomerStatusRepository $customerStatusRepository)
{
parent::__construct($eccubeConfig);
$this->categoryRepository = $categoryRepository; // rev1.0.0 add
$this->orderStatusRepository = $orderStatusRepository; // rev1.0.0 add
$this->paymentRepository = $paymentRepository; // rev1.0.0 add
$this->customerStatusRepository = $customerStatusRepository; // 2026.06.30 add
}
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options) // rev1.0.0 override
{
$Categories = $this->categoryRepository->getHierarchyList(null, true);
$statuses = [
/** 新規受付. */
OrderStatus::NEW,
/** 注文取消し. */
OrderStatus::CANCEL,
/** 対応中. */
//OrderStatus::IN_PROGRESS,
/** 発送済み. */
OrderStatus::DELIVERED,
/** 入金済み. */
OrderStatus::PAID,
/** 決済処理中. */
//OrderStatus::PENDING,
/** 購入処理中. */
//OrderStatus::PROCESSING,
/** 返品 */
//OrderStatus::RETURNED,
];
$OrderStatuses = $this->orderStatusRepository
->findBy(['id' => $statuses ], ['sort_no' => 'ASC']);
$Payments = $this->paymentRepository
->findBy(['visible' => true ], ['sort_no' => 'ASC', 'id' => 'ASC']);
// 2026.06.30 add start
$custStatuses = [
/** 仮会員 */
CustomerStatus::PROVISIONAL,
/** 本会員 */
CustomerStatus::REGULAR,
/** 退会 */
CustomerStatus::WITHDRAWING,
];
$CustomerStatuses = $this->customerStatusRepository
->findBy(['id' => $custStatuses ], ['sort_no' => 'ASC']);
// 2026.06.30 add end
$builder
->add('has_hattyuu_date', HiddenType::class, [
'label' => 'admin.order.has_hattyuu_date',
'required' => false,
])
->add('no_hattyuu_date', HiddenType::class, [
'label' => 'admin.order.no_hattyuu_date',
'required' => false,
])
/*
->add('no_uketori_date', HiddenType::class, [
'label' => 'admin.order.no_uketori_date',
'required' => false,
])
*/
->add('nouhin_condition', HiddenType::class, [
'label' => 'admin.order.nouhin_condition',
'required' => false,
])
->add('nouhin_date_condition', HiddenType::class, [
'label' => 'admin.order.nouhin_date_condition',
'required' => false,
])
->add('uketori_date_condition', HiddenType::class, [
'label' => 'admin.order.uketori_date_condition',
'required' => false,
])
// 受注ID・注文者名・注文者(フリガナ)
->add('multi', TextType::class, [
'label' => 'admin.order.multi_search_label',
'required' => false,
'constraints' => [
new Assert\Length(['max' => $this->eccubeConfig['eccube_stext_len']]),
],
])
->add('status', EntityType::class, [
'class' => 'Eccube\Entity\Master\OrderStatus',
'label' => 'admin.order.order_status',
'choice_label' => 'Name',
'choices' => $OrderStatuses,
'expanded' => true,
'multiple' => true,
])
->add('category_id', EntityType::class, [
'class' => 'Eccube\Entity\Category',
'label' => 'admin.order.purchase_product_category',
'choice_label' => 'NameWithLevel',
'choices' => $Categories,
'placeholder' => 'admin.common.select',
'required' => false,
])
->add('school', MasterType::class, [
'class' => 'Customize\Entity\Master\School',
'label' => 'admin.common.school',
'required' => false,
'expanded' => false,
'multiple' => false,
'placeholder' => 'admin.common.select',
'attr' => [
'data-id' => '',
],
])
->add('school_id', MasterType::class, [
'class' => 'Customize\Entity\Master\School',
'label' => 'admin.common.school',
'required' => false,
])
->add('department', MasterType::class, [
'class' => 'Customize\Entity\Master\Department',
'label' => 'admin.common.department',
'required' => false,
'expanded' => false,
'multiple' => false,
'placeholder' => 'admin.common.select',
])
->add('course', MasterType::class, [
'class' => 'Customize\Entity\Master\Course',
'label' => 'admin.common.course',
'required' => false,
'expanded' => false,
'multiple' => false,
'placeholder' => 'admin.common.select',
])
->add('sub_course', MasterType::class, [
'class' => 'Customize\Entity\Master\Course',
'label' => 'admin.common.sub_course',
'required' => false,
'expanded' => false,
'multiple' => false,
'placeholder' => 'admin.common.select',
])
->add('grade', MasterType::class, [
'class' => 'Customize\Entity\Master\Grade',
'label' => 'admin.common.grade',
'required' => false,
'expanded' => false,
'multiple' => false,
'placeholder' => 'admin.common.select',
])
->add('classroom', MasterType::class, [
'class' => 'Customize\Entity\Master\Classroom',
'label' => 'admin.common.classroom',
'required' => false,
'expanded' => false,
'multiple' => false,
'placeholder' => 'admin.common.select',
])
->add('code', TextType::class, [
'label' => 'admin.common.customer_code',
'required' => false,
])
->add('name', TextType::class, [
'label' => 'admin.common.customer_name',
'required' => false,
])
->add($builder
->create('kana', TextType::class, [
'label' => 'admin.common.customer_kana',
'required' => false,
'constraints' => [
new Assert\Regex([
'pattern' => '/^[ァ-ヶヲ-゚ー]+$/u',
'message' => 'form_error.kana_only',
]),
],
])
->addEventSubscriber(new \Eccube\Form\EventListener\ConvertKanaListener('CV')
))
/*
->add('payment', PaymentType::class, [
'label' => 'admin.common.payment_method',
'required' => false,
'expanded' => true,
'multiple' => true,
])
*/
->add('payment', EntityType::class, [
'class' => 'Eccube\Entity\Payment',
'label' => 'admin.common.payment_method',
'choice_label' => 'Method',
'choices' => $Payments,
'required' => false,
'expanded' => true,
'multiple' => true,
])
->add('order_date_start', DateType::class, [
'label' => 'admin.order.order_date__start',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_order_date_start',
'data-toggle' => 'datetimepicker',
],
])
->add('order_datetime_start', DateTimeType::class, [
'label' => 'admin.order.order_date__start',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_order_datetime_start',
'data-toggle' => 'datetimepicker',
],
])
->add('order_date_end', DateType::class, [
'label' => 'admin.order.order_date__end',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_order_date_end',
'data-toggle' => 'datetimepicker',
],
])
->add('order_datetime_end', DateTimeType::class, [
'label' => 'admin.order.order_date__end',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_order_datetime_end',
'data-toggle' => 'datetimepicker',
],
])
->add('payment_date_start', DateType::class, [
'label' => 'admin.order.payment_date__start',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_payment_date_start',
'data-toggle' => 'datetimepicker',
],
])
->add('payment_datetime_start', DateTimeType::class, [
'label' => 'admin.order.payment_date__start',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_payment_datetime_start',
'data-toggle' => 'datetimepicker',
],
])
->add('payment_date_end', DateType::class, [
'label' => 'admin.order.payment_date__end',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_payment_date_end',
'data-toggle' => 'datetimepicker',
],
])
->add('payment_datetime_end', DateTimeType::class, [
'label' => 'admin.order.payment_date__end',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_payment_datetime_end',
'data-toggle' => 'datetimepicker',
],
])
->add('hattyuu_date_start', DateType::class, [
'label' => 'admin.order.hattyuu_date__start',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_hattyuu_date_start',
'data-toggle' => 'datetimepicker',
],
])
->add('hattyuu_datetime_start', DateTimeType::class, [
'label' => 'admin.order.hattyuu_date__start',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_hattyuu_datetime_start',
'data-toggle' => 'datetimepicker',
],
])
->add('hattyuu_date_end', DateType::class, [
'label' => 'admin.order.hattyuu_date__end',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_hattyuu_date_end',
'data-toggle' => 'datetimepicker',
],
])
->add('hattyuu_datetime_end', DateTimeType::class, [
'label' => 'admin.order.hattyuu_date__end',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_hattyuu_datetime_end',
'data-toggle' => 'datetimepicker',
],
])
->add('nouhin_date_start', DateType::class, [
'label' => 'admin.order.nouhin_date__start',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_nouhin_date_start',
'data-toggle' => 'datetimepicker',
],
])
->add('nouhin_datetime_start', DateTimeType::class, [
'label' => 'admin.order.nouhin_date__start',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_nouhin_datetime_start',
'data-toggle' => 'datetimepicker',
],
])
->add('nouhin_date_end', DateType::class, [
'label' => 'admin.order.nouhin_date__end',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'placeholder' => ['year' => '----', 'month' => '--', 'day' => '--'],
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_nouhin_date_end',
'data-toggle' => 'datetimepicker',
],
])
->add('nouhin_datetime_end', DateTimeType::class, [
'label' => 'admin.order.nouhin_date__end',
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'constraints' => [
new Assert\Range([
'min'=> '0003-01-01',
'minMessage' => 'form_error.out_of_range',
]),
],
'attr' => [
'class' => 'datetimepicker-input',
'data-target' => '#'.$this->getBlockPrefix().'_nouhin_datetime_end',
'data-toggle' => 'datetimepicker',
],
])
->add('buy_product_name', SearchType::class, [
'label' => 'admin.order.purchase_product',
'required' => false,
'attr' => [
'list' => 'admin_search_order_buy_products',
'autocomplete' => 'none'
],
])
/* rev1.0.1 add | buy_product_id */
->add('buy_product_id', HiddenType::class, [
'label' => 'admin.order.purchase_product_id',
'required' => false,
])
/* rev1.0.2 add | buy_product_class_id */
->add('buy_product_class_id', HiddenType::class, [
'label' => 'admin.order.purchase_product_class_id',
'required' => false,
])
->add('payment_start', PriceType::class, [
'label' => 'admin.order.purchase_price__start',
'required' => false,
])
->add('payment_end', PriceType::class, [
'label' => 'admin.order.purchase_price__end',
'required' => false,
])
/*
->add('status', OrderStatusType::class, [
'label' => 'admin.order.order_status',
'expanded' => true,
'multiple' => true,
])
*/
// 会員種別 2026.06.30 add
->add('customer_status', EntityType::class, [
'class' => 'Eccube\Entity\Master\OrderStatus',
'label' => 'admin.customer.customer_status',
'choice_label' => 'Name',
'choices' => $CustomerStatuses,
'expanded' => true,
'multiple' => true,
])
// ソート用
->add('sortkey', HiddenType::class, [
'label' => 'admin.list.sort.key',
'required' => false,
])
->add('sorttype', HiddenType::class, [
'label' => 'admin.list.sort.type',
'required' => false,
]);
}
}