Giter Site home page Giter Site logo

coupon-plugin's Introduction

クーポンプラグイン

CI for Coupon42

概要

クーポン機能を追加するプラグイン。
発行したクーポンコードを入力することで、購入時に割引ができるようになります。

クーポンの割引方法や対象商品は、クーポンごとに設定が可能です。

フロント

F1:購入時にクーポンを利用することができる

  • 購入確認ページからクーポンコードを入力して、クーポンを適用できる。
  • クーポンによる割引は「値引き」として表示、計算する。
  • 合計金額を超える定額値引きクーポンは使用できない。

F2:クーポンの利用制限

  • 会員は、一度利用したクーポンを再度利用することはできない。
  • ゲストは、一度利用したクーポンを同じメールアドレスで使用することはできない。

F3:購入後に利用したクーポンを確認することができる

  • マイページの購入履歴に、利用したクーポンコードを表示する。
  • 受注メールに、利用したクーポンコードを表示する。
  • クーポンによる割引は「値引き」として表示する。

管理画面

A1:クーポンを新規発行することができる

設定可能なパラメータ

パラメータ 選択 説明
クーポンコード 購入時にお客様が入力するクーポンコード
クーポン名 購入履歴、受注メールでの表示用
対象商品 商品,カテゴリ,全商品 商品,カテゴリはクーポンごとに指定可能
利用制限 なし,会員のみ
値引き種別 値引き額,値引率
値引き額(円)
値引率(%)
発行枚数
下限金額(円) 対象商品の合計(税込)がこの金額以上の場合にのみクーポンを利用可能
有効期間

A2:発行済みのクーポンを編集することができる

  • クーポンのパラメータ編集
  • 無効/有効の切り替え
  • 削除

A3:クーポンの利用枚数を確認することができる

  • クーポンごとに何回使用されたかを確認することができる。

A4:受注詳細ページで利用したクーポンコードを確認することができる

  • 利用されたクーポンコードを確認できる。
  • クーポンによる割引は「値引き」として計算される。

※[制限]受注内容を編集(商品の追加など)をしても、クーポンの値引き額は再計算しない。手動で値引きを編集する必要あり。

計算ロジック

定額

  • 商品の小計(税込)から、設定金額を値引きする。
  • 合計金額を超える定額値引きクーポンは使用できない

定率

  • 対象商品の合計(税込)に、割引率を掛けた金額を値引きする
  • 値引き額の計算には税率設定のルールを利用する

オプション

ポイント機能との併用について

加算ポイントの計算

  • ポイント利用時の加算ポイントについては、基本的には商品単価(税抜)からクーポン割引額を引いた額に適用する
    • 加算ポイント = (商品単価(税抜) - クーポン割引額) × ポイント付与率

クーポン値引率の適用

  • ポイント利用前の合計金額に対してクーポン値引を適用する
    • 合計金額 = 小計 + 手数料 + 送料
    • クーポン割引額 = 合計金額 × クーポン割引率
    • 支払い合計額 = 合計金額 - クーポン割引額 - 利用ポイント

coupon-plugin's People

Contributors

chihiro-adachi avatar geany-y avatar hiro-t59 avatar hoand-vn avatar junpeko5 avatar k-yamamura avatar kanako-kina avatar kazumiiiiiiiiiii avatar kazuyoshikakihara avatar kiy0taka avatar kurozumi avatar lammn avatar lqdung-lockon avatar nanasess avatar ndquocphong avatar nobuhiko avatar okazy avatar pineray avatar ptthao-yrglmvn avatar ryo-endo avatar sai-gillingham avatar sai-ken-tanaka avatar sanglephu avatar t-nagahashi avatar takeuji avatar tps-nghiale avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

coupon-plugin's Issues

カテゴリ登録後、商品に切り替えるとシステムエラー

現象

カテゴリ登録後、商品に切り替えるとシステムエラー

NotNullConstraintViolationException in AbstractMySQLDriver.php line 112:
An exception occurred while executing 'INSERT INTO plg_coupon_detail (coupon_type, del_flg, create_date, update_date, coupon_id, product_id, category_id) VALUES (?, ?, ?, ?, ?, ?, ?)' with params [null, null, "2016-05-24 14:24:33", "2016-05-24 14:24:33", null, 2, null]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'coupon_type' cannot be null

再現手順

  1. カテゴリと紐付けるクーポンを作成
  2. 1を編集
  3. 商品に切り替えて登録

期待値

クーポン適用の最低金額を設定できるようにする

クーポン適用の最低金額を設定できるようにします。

仕様

カートの中にあるクーポン対象商品が、1つでも最低金額を超えていれば利用可能。
※合計ではなく対象商品1つの単価が、最低金額を超えていること。

Sample

商品A:100円
商品B:1000円
商品C:1000円

クーポン:
 最低金額=500円
 対象商品=商品A,商品B

パターン①

カート:商品B,C
結果:適用OK

パターン②

カート:商品A
結果:適用NG(最低金額を超えていないため)

パターン③

カート:商品A,C
結果:適用NG(対象商品が最低金額を超えていないため)

パターン④

カート:商品A x 5個
結果:適用NG(対象商品の単価が最低金額を超えていないため)

ご注文手続き画面でクーポンを2回登録して注文するとメールのクーポン項目が2つになる

概要(Overview)

「ご注文手続き」画面で「クーポンを変更」から2回登録して注文するとメールの「クーポン情報 」の項目が2つ表示される

期待する内容(Expect) or 要望 (Requirement)

「ご注文手続き」画面で「クーポンを変更」から2回登録しても、メールの「クーポン情報 」の項目は1つしか表示されないこと

再現手順(Procedure)

  1. 管理画面「受注管理/クーポン」からクーポンを登録
  2. 登録したクーポンを使用できる条件で、フロント画面で商品購入を「ご注文手続き」まで進める
  3. 「クーポンを変更する」から「クーポンを利用する」「クーポンコード」を入力し「登録する」
  4. 「ご注文手続き」画面に戻ったら再度、「クーポンを変更する」から「クーポンを利用する」「クーポンコード」を入力し「登録する」
  5. 注文完了まで進み「マイページ/ご注文履歴」から「ご注文履歴詳細」を表示する
  6. 「メール配信履歴一覧」から配信内容を確認する

スクリーンショット 2019-06-17 18 08 15

※ 手順「4」を繰り返した分表示されるようです。

環境 (environment)

  • EC-CUBE: 4.0.2

割引率での値引き

割引き率での値引きは、現状の仕様では、支払い金額に対して割引き率をかけ、値引き金額を算出している
他のプラグイン等で先に値引きが行われた場合に、クーポンの値引き金額が少なく算出される。
本来の支払い金額に対して算出したほうが良いと思われる。

3.0.9でクーポンの利用ができない

現象

値引きが表示されない
支払い金額が減らない

再現手順

  1. 購入確認画面経遷移
  2. クーポンを利用する
  3. 購入確認画面で、値引きが表示されない・支払い金額も減っていない

注文を完了すると、

  • 値引きはセットされている
  • 支払い金額は減っていない

の状態になります。

期待値

値引きが表示されること
支払金額が、クーポン利用分減額されていること

YamlのEntity設定の中にMappingが間違えてます(CouponCouponDetail.dcm.yml)

ec-cube 3.0.12
プラグイン:Coupon 1.0.3

問題:
ファイル:
app/Plugin/Coupon/Resource/doctrine/Plugin.Coupon.Entity.CouponCouponDetail.dcm.yml

対応方法:
行目:29~

    manyToOne:
        Coupon:
            targetEntity: Plugin\Coupon\Entity\CouponCoupon
            inversedBy: CouponDetail
            joinColumn:
                name: coupon_id
                referencedColumnName: coupon_id
                nullable: false
        Product:
            targetEntity: Eccube\Entity\Product
            joinColumn:
                name: product_id
                referencedColumnName: product_id
                nullable: false
        Category:
            targetEntity: \Eccube\Entity\Category
            joinColumn:
                name: category_id
                referencedColumnName: category_id

    manyToOne:
        Coupon: targetEntity: Plugin\Coupon\Entity\CouponCoupon
            inversedBy: CouponDetails
            joinColumn:
                name: coupon_id
                referencedColumnName: coupon_id
            nullable: false
    manyToOne:
        Product:
            targetEntity: Eccube\Entity\Product
            joinColumn:
                name: product_id
                referencedColumnName: product_id
                nullable: false
        Category:
            targetEntity: \Eccube\Entity\Category
            joinColumn:
                name: category_id
                referencedColumnName: category_id

クーポンの「有効/無効」切り替え時のconfirmメッセージが正しくない

概要(Overview)

クーポンの「有効/無効」切り替え時のconfirmメッセージが削除を行う確認メッセージとなっている

期待する内容(Expect) or 要望 (Requirement)

クーポンの「有効/無効」切り替え時のconfirmメッセージが正しい文言のメッセージとなっていること

再現手順(Procedure)

  1. 管理画面「受注管理/クーポン」から「クーポンを新規登録」
  2. 管理画面「受注管理/クーポン」からクーポンの一覧画面を表示
  3. 「状態」のカラムから「有効/無効」を切り替える

※3

環境 (environment)

  • EC-CUBE: 4.0.2

クーポンの利用回数の制限

  1. 1クーポンあたりの発行枚数の制限を設定できるようにする
  2. 1クーポンは1購入者あたり1回のみ利用できる(一度つかったクーポンは利用できない)
    • 同一購入者の制御は、会員の場合は会員ID、非会員の場合はメールアドレスで制御する

クーポン登録/編集時のフォームに文言が正しく表示されない

概要(Overview)

クーポン登録/編集時の、selectの初期値や追加する際のボタン、削除時のボタンの文字が正しく表示されていない

期待する内容(Expect) or 要望 (Requirement)

フォームのselectの初期値と、追加する際のボタン、削除時のボタンの文字が表示が正しく表示されていること

再現手順(Procedure)

フォームのselectの初期値の手順

  1. 管理画面「受注管理/クーポン」から「クーポンを新規登録」
  2. 「対象商品」を「カテゴリ」に変更し、「カテゴリ情報」から「カテゴリの追加」

スクリーンショット 2019-06-17 17 23 10

追加する際のボタンの手順

  1. 管理画面「受注管理/クーポン」から「クーポンを新規登録」
  2. 「対象商品」を「商品」に変更し、「商品情報」から「商品の追加」
  3. 表示される検索画面で「検索」

スクリーンショット 2019-06-17 17 23 22

※ 「対象商品」が「カテゴリ」の場合も同様

削除時のボタンの手順

  1. 管理画面「受注管理/クーポン」から「対象商品」を「商品」で、「商品情報」に商品を追加しクーポンを登録
  2. 管理画面「受注管理/クーポン」からクーポン一覧を表示し、「編集」

スクリーンショット 2019-06-17 17 37 08

環境 (environment)

  • EC-CUBE: 4.0.2

クーポン編集時の金額入力時に小数点が現れてしまう。

概要(Overview)

クーポン編集時、「値引き額(円)」、「下限金額(円)」を入力するテキストボックスに小数点が表示されてしまう。

期待する内容(Expect) or 要望 (Requirement)

小数点は表示されず、正の整数で表示されること。

再現手順(Procedure)

  1. 管理画面/クーポン一覧より、「受注管理/クーポン」から「クーポンを新規登録」。
  2. 管理画面/クーポン一覧より、編集リンクを押下。

スクリーンショット 2019-06-17 17 50 26

環境 (environment)

  • EC-CUBE: 4.0.2

配送方法・支払い方法を変更すると常にクーポンがキャンセルされる

現象

配送方法・支払い方法を変更すると常にクーポンがキャンセルされる

再現手順

  1. 購入フローでクーポンを利用する
  2. 支払い方法・配送方法、住所変更のいずれかを行う
  3. 「マイナスが発生したのでキャンセルしました」が表示される

期待値

マイナスが発生した時のみ実行されること

クーポン登録画面でシステムエラー

クーポン登録画面へ遷移すると以下のエラーが発生する

Twig_Error_Loader in Chain.php line 63:
Template "Coupon/View/admin/register.twig" is not defined.

実際のファイル名がregist.twigのため、どちらかに合わせる

クーポンを適用し「合計金額<送料無料金額」となった場合、送料が加算される

仕様ということでもOKだと思いますが、公開しておくべき情報かと思いますので、
記載いたします。

■事前設定
・5000円以上送料無料を設定
・送料を350円に設定
・200円引きのクーポンを発行
■例
クーポン使用前:合計金額5001円(送料は無料状態)
クーポン使用後:合計金額5151円(送料350円適用状態)
→ 5001円からクーポン割引がきいて4801円となる。結果350円の送料がつくこととなり、クーポン適用前よりも支払額が増えてしまう。

クーポン編集時、商品を紐付け直すとシステムエラー

現象

クーポン編集時に以下のエラーが発生する

NotNullConstraintViolationException in AbstractPostgreSQLDriver.php line 57:
An exception occurred while executing 'UPDATE plg_coupon_detail SET coupon_detail_id = ?, create_date = ?, update_date = ? WHERE coupon_detail_id = ?' with params [null, "2016-05-19 15:43:16", "2016-05-19 15:43:16", 16]:

SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "coupon_detail_id" violates not-null constraint
DETAIL: Failing row contains (null, 25, 1, 1, null, 0, 2016-05-19 15:43:16, 2016-05-19 15:43:16).

再現手順

  1. クーポンを登録
  2. 上のクーポンを編集する
  3. 紐付いている商品を削除し、同じ商品を追加する
  4. 登録を行う

→システムエラーが発生

※ディナーフォークで発生のため、規格の有無が関連しているかもしれません
※Postgres環境で発生しますが、Mysqlでは現象が確認できていません。

期待値

クーポン登録時、カテゴリを設定するとシステムエラーが発生する

現象

クーポン登録時、カテゴリを設定するとシステムエラーが発生する

ContextErrorException in CouponCouponDetail.php line 216:
Catchable Fatal Error: Argument 1 passed to Plugin\Coupon\Entity\CouponCouponDetail::setProduct() must be an instance of Eccube\Entity\Product, null given, called in C:\xampp\htdocs\ec-cube\app\Plugin\Coupon\Service\CouponService.php on line 280 and defined

再現手順

クーポン設定でクーポンを登録する

  • クーポン有効対象:カテゴリ
  • 値引き種別:値引率
  • カテゴリの追加:キッチンツール>食器>フォーク

期待値

同一のクーポンコードを登録できる

現象

クーポン登録画面で、既に登録されているクーポンコードを登録できる

再現手順

  1. クーポンを登録する
  2. 1で発行されたクーポンコードで、新規登録を行うと、登録が完了する

期待値

既に発行されているクーポンコードとの重複チェックが必要

クーポンが発行枚数が残っているにも関わらず利用できない

現象

クーポンが発行枚数が残っているにも関わらず利用できない

再現手順

  1. 発行枚数4枚のクーポンを作成
  2. ユーザAがクーポンを利用して購入完了
  3. ユーザBがクーポンを利用して購入完了
  4. ユーザCがクーポンを利用する
    →このクーポンはご利用いただくことができません、のエラーが表示される

期待値

以下の判定に誤りがある
https://github.com/EC-CUBE/coupon-plugin/blob/master/Controller/CouponController.php#L477

クーポン発行枚数は購入完了時に減算されるため、単純にクーポン発行枚数をチェックするだけで良いと思われる

税率の設定によって、最低金額以上購入している場合でも、クーポンを利用できないケースがある

EC-CUBE本体のIssueの影響。
EC-CUBE/ec-cube#2005

クーポン対象商品の税込み金額を合計し、
それが最低金額以上の場合に利用できるように条件判断している。
上記Issueの影響で税込み金額の合計が意図した値にならず、
最低金額以上購入している場合でも、クーポンを利用できない場合がある。

EC-CUBE本体のIssueが修正されれば、クーポンプラグイン側の動作も正しくなる。

#21 の発生した後のクーポンコードで使用したら、システムエラーになってしまう

現象

#21 の発生した後のクーポンコードでもう一度使用したら、システムエラーになってしまいました。

再現手順

  1. ログインして注文確認画面まで行きます。
  2. クーポン入力画面に#21のクーポンコードを入力

 => システムエラーになってしまいました(NG)
ログを見ると、eccube.CRITICAL: Doctrine\ORM\NonUniqueResultException:例外を発生しまし た。

期待値

エラーにならない。

解決

CouponCouponOrderRepository.phpfindUseCouponMemberfindUseCouponNonMember関数は
$count = $query->getSingleResult();じゃなくてgetResult()でよいと思います。

アップデート後、システムエラーが発生

現象

アップデート後に受注管理画面にアクセスするとシステムエラー

再現手順

  1. ec-cube 3.0.9にversion1.0.1のクーポンプラグインをインストール
  2. version 1.0.2(開発中バージョン)のクーポンプラグインでアップデート
  3. 受注管理画面にアクセスする
InvalidFieldNameException in AbstractMySQLDriver.php line 71:
An exception occurred while executing 'SELECT p0_.coupon_id AS coupon_id0, p0_.coupon_cd AS coupon_cd1, p0_.coupon_type AS coupon_type2, p0_.coupon_name AS coupon_name3, p0_.discount_type AS discount_type4, p0_.coupon_use_time AS coupon_use_time5, p0_.discount_price AS discount_price6, p0_.discount_rate AS discount_rate7, p0_.enable_flag AS enable_flag8, p0_.available_from_date AS available_from_date9, p0_.available_to_date AS available_to_date10, p0_.del_flg AS del_flg11, p0_.create_date AS create_date12, p0_.update_date AS update_date13 FROM plg_coupon p0_ WHERE (p0_.del_flg = 0) ORDER BY p0_.coupon_id DESC':

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'p0_.coupon_use_time' in 'field list'

期待値

「商品追加」「商品削除」を繰り返えした場合(3つ商品登録し、真ん中の2番目を削除→再度追加)、追加した明細が削除される。

■対象画面:クーポン登録/編集
■現象
1, 違う商品を3つ(商品A、商品B、商品C)追加
2, 商品A、商品B、商品Cと並んでいる注文商品から商品Bを削除
3, 商品Bを商品追加モーダルから新たに追加
4, 商品A、商品Bが注文商品に表示されるが商品Cが消えてしまう ←←← 画面の挙動としてはここが問題

おそらく、受注の明細追加のロジックを流用しており、本体側の方も同様のバグがあるためだと想定されます。
以下参考情報
EC-CUBE/ec-cube#2023

値引き種別:値引き率で購入時、値引き率が値引き対象の商品全てに適用されない

概要(Overview)

値引き種別:値引き率で購入時、値引き額が1商品のみに適用される。

期待する内容(Expect) or 要望 (Requirement)

値引き対象の商品全てに適用されること

再現手順(Procedure)

  1. 管理画面「受注管理/クーポン」から「クーポンを新規登録」
    今回管理画面より登録したクーポンの設定内容
対象商品:商品
利用制限:なし
値引き種別:値引率
値引率(%):10
発行枚数:3
下限金額(円):0に変更
商品:チェリーアイス、彩のジェラートCUBE
  1. フロント画面で値引き対象商品を複数カートに入れ、ご注文手続き画面に進む。
  2. 「クーポンの変更」よりクーポンを適用する。

スクリーンショット 2019-06-17 18 10 06

環境 (environment)

  • EC-CUBE: 4.0.2

クーポンプラグイン v2.0.0計画

2.0.0では以下の対応を行う予定です。

リリース時期

2017/1/9週を予定

主要な対応内容

機能追加

  • クーポンが利用可能な下限金額を設定できる
  • 会員ログインでの購入時のみ使用できるクーポンを作成できる
  • 「全商品」をクーポンの対象にすることができる

その他、機能改修

互換性について

旧プラグインからのバージョンアップが可能です。

商品・カテゴリの必須チェックが入っていない

現象

商品・カテゴリを設定せずに、クーポンを登録できる

再現手順

クーポン登録画面で、商品・カテゴリが空の状態で、登録を行う

期待値

必須チェックが実行され、エラーとなること

クーポンの利用回数の表記

「利用回数」の表記だと、一人が利用できる上限のようにみえるため、「発行枚数」などが適切と思われる

ご注文情報の確認画面で、新規お届け先の追加時にシステムエラー

現象

InvalidArgumentException in GenericEvent.php line 74:
Argument "Order" not found.
in GenericEvent.php line 74

再現手順

ご注文情報の確認画面で、新規お届け先の追加を行い、登録を行う

期待値

front.shopping.shipping.edit.complete では、Orderが渡ってこないため、ShoppingServiceを利用して取得する必要がある

受注確認画面でクーポンの利用をキャンセルできない

受注確認画面でクーポンを適用後、クーポンの使用をキャンセルできない。
キャンセルするにはカートを一度抜ける必要あり。

期待結果

クーポンコード入力画面で、以下のように使用するしないを選択できるUIになっていること

◎クーポンを使用する [        ]
○クーポンを使用しない

購入完了時のイベントの変更

購入完了時の制御を、eccube.event.controller.shopping_confirm.beforeで行っているが、決済プラグインとの連携等を考慮し、購入完了画面で制御するように変更する

同じユーザは二つBrowserで同じクーポンで利用できる

現象

同じユーザは二つBrowserで同じクーポンで利用できる

再現手順

  1. Chromeでログインして注文確認画面まで行きます。
  2. IEで同じユーザをログインして注文確認画面も行きます。
  3. 同時に注文するボタンをクリックする

 => 注文完了画面に移動して、同じユーザは同じクーポンで利用できる(NG)

期待値

同じユーザは一回しか利用できない。

購入途中で離脱し、再度購入すると、クーポンが利用できない

現象

利用回数を1回のクーポンで、購入途中で離脱し、再度購入すると、クーポンが利用できない

再現手順

1.利用回数:1回のクーポンを作成
2.購入確認画面へ遷移し、クーポンを利用する
3.カートにもどり、再度購入確認画面へ遷移
4.クーポン利用画面に遷移し、クーポンを利用する

→利用回数の上限に引っかかり、エラーとなる

※利用回数3回のクーポンでは発生しないため、枚数の上限値に引っかかっているものと思われる

期待値

クーポンを利用できること

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.