EC-CUBE / coupon-plugin

GNU Lesser General Public License v2.1
11 stars 41 forks source link

クーポン適用中に管理画面でクーポンを無効化すると、クーポンは取り消されるが値引きが残ってしまう #109

Closed puchi777 closed 5 years ago

puchi777 commented 5 years ago

以下の手順でクーポンは取り消されるが、値引きが残ります。 一度設定した値引きが勝手に消える仕様が良くないという事でしたら、問題ないのですが、クーポンが消えているので値引きも消えるべきかと考えています。

再現手順

  1. ご注文手続きでクーポンの適用した状態までを行う
  2. 管理画面で適用したクーポンを無効にする
  3. ご注文手続きを再読み込みする
    • クーポンが取得できませんでした と表示されクーポンは解除される
    • クーポンが設定されていないが、値引きが適用されている

値引きも削除する場合の想定されるコード

diff --git a/app/Plugin/Coupon4/Service/CouponService.php b/app/Plugin/Coupon4/Service/CouponService.php
index a8d1252..4e24a29 100644
--- a/app/Plugin/Coupon4/Service/CouponService.php
+++ b/app/Plugin/Coupon4/Service/CouponService.php
@@ -342,10 +342,11 @@ class CouponService
         /** @var CouponOrder $CouponOrder */
         $CouponOrder = $this->couponOrderRepository->getCouponOrder($Order->getPreOrderId());
         if ($CouponOrder) {
-            $OrderItems = $this->orderItemRepository->findBy(['processor_name' => CouponProcessor::class]);
-            foreach ($OrderItems as $OrderItem) {
-                $this->entityManager->remove($OrderItem);
-                $this->entityManager->flush($OrderItem);
+            foreach ($Order->getOrderItems() as $item) {
+                if ($item->getProcessorName() == CouponProcessor::class) {
+                    $Order->removeOrderItem($item);
+                    $this->entityManager->remove($item);
+                }
             }

             $this->entityManager->remove($CouponOrder);
nanasess commented 5 years ago

ありがとうございます。 #106 に修正含めております。 4.0 ブランチにマージされてますので、次のリリースで修正される予定です。ご確認よろしくお願い致します🙏🙏🙏

https://github.com/EC-CUBE/coupon-plugin/pull/106/files#diff-216fd804c4ed1d51175c94119b745d26R375

hiro-t59 commented 5 years ago

動作確認の結果、現象が修正されていることを確認しました。 ※手順3で「このクーポンコードは利用できません。」のメッセージと共に、値引き額もなくなっている

106 のPRはプラグインバージョン4.0.3にてリリース予定となりますので、ご確認をお願いいたします。

上記より、本ISSUEはクローズいたします。