【EC-CUBE4.2】管理画面で受注の入金日と出荷日を編集できるようにカスタマイズする方法

EC-CUBE4.2で管理画面で受注の入金日と出荷日を編集できるようにカスタマイズする方法です。

こんな感じに入金日と出荷日を編集できるようになります。

OrderTypeを拡張するOrderTypeExtensionを作成

OrderTypeを拡張するOrderTypeExtensionを作成します。

<?php

namespace Customize\Form\Extension\Admin;

use Eccube\Entity\Order;
use Eccube\Entity\Shipping;
use Eccube\Form\Type\Admin\OrderType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Validator\Constraints\Range;

class OrderTypeExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('payment_date', DateTimeType::class, [
                'label' => 'admin.common.create_date__start',
                'required' => false,
                'input' => 'datetime',
                'widget' => 'single_text',
                'with_seconds' => true,
                'constraints' => [
                    new Range([
                        'min' => '0003-01-01',
                        'minMessage' => 'form_error.out_of_range',
                    ]),
                ],
            ]);

        $builder
            ->add('shipping_date', DateTimeType::class, [
                'label' => 'admin.common.create_date__start',
                'required' => false,
                'input' => 'datetime',
                'widget' => 'single_text',
                'with_seconds' => true,
                'constraints' => [
                    new Range([
                        'min' => '0003-01-01',
                        'minMessage' => 'form_error.out_of_range',
                    ]),
                ],
                'mapped' => false,
            ]);

        $builder
            ->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
                /** @var Order $Order */
                $Order = $event->getData();
                /** @var Shipping $Shipping */
                $Shipping = $Order->getShippings()->first();

                $form = $event->getForm();
                $form->get('shipping_date')->setData($Shipping->getShippingDate());
            });

        $builder
            ->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
                /** @var Order $Order */
                $Order = $event->getData();
                $form = $event->getForm();

                $shippingDate = $form->get('shipping_date')->getData();

                /** @var Shipping $Shipping */
                $Shipping = $Order->getShippings()->first();
                $Shipping->setShippingDate($shippingDate);
            });
    }

    public static function getExtendedTypes(): iterable
    {
        yield OrderType::class;
    }
}

受注登録テンプレートをカスタマイズ

受注登録テンプレートをカスタマイズします。

テンプレートを以下のようにコピーしてください。

cp src/Eccube/Resource/template/admin/Order/edit.twig app/template/admin/Order/edit.twig

edit.twigの入金日と出荷日を以下のように編集してください。

                                        <div class="row mb-3">
                                            <div class="col-3"><i class="fa fa-money fa-fw me-1" aria-hidden="true"></i>{{ 'admin.order.payment_date'|trans }}</div>
                                            <div class="col">
                                                {{ form_widget(form.payment_date) }}
                                                {{ form_errors(form.payment_date) }}
                                            </div>
                                        </div>
                                        {% if not Order.isMultiple %}
                                            <div class="row mb-3">
                                                <div class="col-3"><i class="fa fa-truck fa-fw me-1" aria-hidden="true"></i>{{ 'admin.order.shipping_date'|trans }}</div>
                                                <div class="col">
                                                    {{ form_widget(form.shipping_date) }}
                                                    {{ form_errors(form.shipping_date) }}
                                                </div>
                                            </div>
                                        {% endif %}

以上で完成です。

1件のコメント

  1. 入金日が発送済み後に編集出来ないので、大変助かります。
    ありがとうございます。
    複数配送先の時に出荷日を編集したい際も、同じようなカスタマイズになりますでしょうか。

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください