受注詳細のメール通知からメール送信した際に処理を追加する
要望
出荷メールを編集して送信したい
現状
- 受注詳細から出荷メールを送っても受注一覧でメールのアイコンが出ない。
- 出荷データに出荷メール送信日が登録されていないため
デフォルトのメール通知はあくまでもお知らせなどを送る用途のため、出荷処理が走らないのは当然ではある。
現状はOrderMailTypeを編集して出してます。
実装
コアコードには書かない前提で考えている。
まずはMailControllerを見てみよう。
MailController.php
$event = new EventArgs(
[
'form' => $form,
'Order' => $Order,
'MailTemplate' => $MailTemplate,
'MailHistory' => $MailHistory,
],$request);
$this->eventDispatcher->dispatch(EccubeEvents::ADMIN_ORDER_MAIL_INDEX_COMPLETE, $event);
EccubeEvents::ADMIN_ORDER_MAIL_INDEX_COMPLETEが用意されているためにここに処理を追加すればいいことがわかる。
eccube4公式
Customizeディレクトリ配下にEventListenerのファイルを追加。
$eventの変数にはMailControllerで格納されているものがある。(ちょっと自信ない)
ここに自分のしたい処理を記述して、getSubscribedEventsにreturnしてあげればおk。
<?php
declare(strict_types=1);
namespace Customize\EventListener\Admin;
use Doctrine\ORM\EntityManagerInterface;
use Eccube\Controller\AbstractController;
use Eccube\Entity\Order;
use Eccube\Entity\Shipping;
use Eccube\Repository\ShippingRepository;
use Eccube\Service\PurchaseFlow\PurchaseContext;
use Eccube\Service\PurchaseFlow\PurchaseFlow;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
/** 受注詳細のメール送信完了後に処理を追加する
*/
class OrderMailIndexCompleteListener extends AbstractController implements EventSubscriberInterface
{
/**
* @var EntityManagerInterface
*/
protected $entityManager;
/**
* OrderEditIndexCompleteListener constructor.
*
* @param EntityManagerInterface $entityManager
*/
/**
* @var PurchaseFlow
*/
protected $purchaseFlow;
/**
* @var ShippingRepository
*/
protected $shippingRepository;
public function __construct(
EntityManagerInterface $entityManager,
PurchaseFlow $purchaseFlow,
ShippingRepository $shippingRepository
) {
$this->entityManager = $entityManager;
$this->purchaseFlow = $purchaseFlow;
$this->shippingRepository = $shippingRepository;
}
public static function getSubscribedEvents(): array
{
return [
EccubeEvents::ADMIN_ORDER_MAIL_INDEX_COMPLETE => 'onAdminOrderMailIndexComplete',
];
}
/**
* メール通知 受注管理から出荷メールを送った際の処理
*
* @param EventArgs $event
*
* @throws \Exception
*/
public function onAdminOrderMailIndexComplete(EventArgs $event)
{
/** @var Order $Order */
$Order = $event->getArgument('Order');
$orderMailType = $event->getArgument('MailTemplate');
//出荷メールの場合のみ実行
if ($orderMailType->getId() === 8) {
$Shippings = $Order->getShippings();
foreach ($Shippings as $Shipping) {
$this->entityManager->persist($Shipping);
$Shipping->setMailSendDate(new \DateTime());
$this->shippingRepository->save($Shipping);
}
$this->entityManager->flush();
$this->addInfo('「対応状況のステータスを配送手続き完了にしてください。」', 'admin');
}
}
}
こんな感じでフックポイントを使うことでコアコードを触らなくても大丈夫。
Author And Source
この問題について(受注詳細のメール通知からメール送信した際に処理を追加する), 我々は、より多くの情報をここで見つけました https://qiita.com/KitamuraTakashi/items/a4d38b45799f6f327a25著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .