Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

受注ステートマシンの実装 #3325

Merged

Conversation

@kiy0taka
Copy link
Contributor

commented Jul 12, 2018

概要(Overview・Refs Issue)

  • 管理画面でのステータス遷移を管理するステートマシンの実装
  • 以下の図で、受注ステータスが新規作成以降の状態を管理する

_ _4 2

2018/9/11 追記
入金済み→注文取消し の遷移が抜けておりましたのでステートマシン図に追加しました。

  • 使用例
$Order = ...;
$NextStatus = $orderStatusRepository->find(OrderStatus::PAID);
// ステータスを遷移させることができるかどうか
if ($orderStateMachine->can($Order, $NextStatus)) {
    // ステータスの遷移
    $orderStateMachine->apply($Order, $NextStatus);
}

実装に関する補足(Appendix)

拡張方法

ステータス遷移時に行う処理を追加するには、ステータス遷移時のイベントを実装します。ステータスの遷移はorder_state_machine.phpに定義しています。

  • 例) 返品時の処理を追加したいとき
    • workflow.order.transition.returnイベントを受け取るEventSubscriberInterfaceを実装します。
use Composer\EventDispatcher\EventSubscriberInterface;
use Eccube\Entity\Order;
use Symfony\Component\Workflow\Event\Event;

class SampleTransitionListener implements EventSubscriberInterface
{
    /**
     * 返品時の処理.
     *
     * @param Event $event
     */
    public function onReturn(Event $event)
    {
        /* @var Order $Order */
        $Order = $event->getSubject();
        .... /* 処理を実装する */
    }

    /**
     * {@inheritdoc}
     */
    public static function getSubscribedEvents()
    {
        return ['workflow.order.transition.return' => 'onReturn'];
    }
}

相談(Discussion)

  • UpdatePointEventSubscriberは不要になる?
@@ -0,0 +1,48 @@
parameters:
order_sattus:

This comment has been minimized.

Copy link
@chihiro-adachi

chihiro-adachi Jul 13, 2018

Contributor

sattus?

This comment has been minimized.

Copy link
@chihiro-adachi

chihiro-adachi Jul 13, 2018

Contributor

パラメータはeccube_プレフィクスつけてもらえるとありがたいです。

@@ -0,0 +1,48 @@
parameters:
order_sattus:
- &NEW '1'

This comment has been minimized.

Copy link
@chihiro-adachi

chihiro-adachi Jul 13, 2018

Contributor

定数使ったほうが良いかなと思いましたがどうでしょう。

- &New !php/const Eccube\Entity\Master\OrderStatus::NEW

https://symfony.com/blog/new-in-symfony-3-2-php-constants-in-yaml-files

@kiy0taka

This comment has been minimized.

Copy link
Contributor Author

commented Jul 13, 2018

@chihiro-adachi YAMLのエイリアスとSymfonyの定数利用が合わせて動作しなかったのでphpファイルにしました。

@kiy0taka kiy0taka force-pushed the kiy0taka:sf/order-state-machine branch from 3c11614 to d24af7d Jul 13, 2018

@chihiro-adachi chihiro-adachi merged commit e26576f into EC-CUBE:experimental/sf Jul 13, 2018

1 check passed

continuous-integration/travis-ci/pr The Travis CI build passed
Details

@okazy okazy added this to the 3.n.0 milestone Jul 13, 2018

@chihiro-adachi

This comment has been minimized.

Copy link
Contributor

commented Jul 17, 2018

#3345 入金済->キャンセルのステータス遷移を追加しました

@chihiro-adachi

This comment has been minimized.

Copy link
Contributor

commented Jul 17, 2018

返品の際にポイントを戻すようにしているが、商品交換で対応した場合などは、戻す必要はないかも。

@Yangsin

This comment has been minimized.

Copy link
Contributor

commented Aug 9, 2018

キャンセル・返品での在庫の挙動。

発送前に、ステータスをキャンセルとする。在庫は自動で戻る
発送後に、ステータスを返品とする。在庫は自動ではもどらない。手動で戻す必要がある。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants
You can’t perform that action at this time.