Commerce Stock
Drupal Commerceの包括的な在庫管理フレームワークを提供し、購入可能なEntityの在庫追跡、在庫トランザクション、在庫確認を可能にします。
commerce_stock
インストール
composer require 'drupal/commerce_stock:^3.0'
composer require 'drupal/commerce_stock:8.x-1.3'
composer require 'drupal/commerce_stock:8.x-1.2'
概要
Commerce StockはDrupal Commerceストア向けの完全な在庫管理ソリューションです。単純な絶対値ではなく、個別のトランザクション(入庫、販売、返品、移動)を通じて在庫レベルを追跡するトランザクションベースの在庫管理システムを提供します。
このモジュールはプラガブルなアーキテクチャを採用しており、異なる在庫ストレージバックエンドを使用できます。組み込みのローカルデータベースストレージ実装が含まれています。Commerce Orderのワークフローと統合し、注文が行われた時、完了した時、キャンセルされた時、または変更された時に自動的に在庫トランザクションを作成します。
このシステムは複数の在庫ロケーションをサポートしており、複数の倉庫やフルフィルメントセンターを持つビジネスに適しています。在庫制限機能により、顧客が利用可能な数量以上の商品を注文することを防止でき、カートとチェックアウト段階でカスタマイズ可能なエラーメッセージと検証を設定できます。
Features
- すべての在庫移動の完全な監査証跡を持つトランザクションベースの在庫管理
- 注文が行われた時または完了した時の自動在庫控除(設定可能なイベントトリガー付き)
- ストアごとの複数の在庫ロケーションと倉庫のサポート
- 過剰販売を防止する在庫制限(カートへの追加、カートページ、チェックアウトでの検証)
- 複数のウィジェットオプション(絶対値、トランザクションベース、フォームへのリンク)を持つ商品バリエーション用のStock Levelフィールドタイプ
- カスタム在庫ストレージバックエンドを可能にするプラガブルな在庫サービスアーキテクチャ
- 注文の作成、キャンセル、更新、およびアイテムレベルのイベントを含む設定可能な在庫イベント
- プログラムによる在庫管理のための在庫トランザクションAPI(入庫、販売、返品、移動)
- リアルタイムまたはCronベースの在庫レベル集計オプション
- ストアごとの主要ロケーションと利用可能なフルフィルメントロケーションを持つマルチストアサポート
Use Cases
在庫追跡付きの基本的なECストア
物理的な商品を販売するシンプルなストアでは、すべてのCommerce Stockサブモジュールを有効にします。商品バリエーションタイプにStock Levelフィールドを追加し、デフォルトサービスをLocal Stockに設定し、倉庫を表す単一の在庫ロケーションを作成します。注文が行われると在庫は自動的に減少し、新しい在庫を受け取った時にトランザクションフォームを通じて手動で増加できます。
複数倉庫フルフィルメント
複数の倉庫を持つビジネスでは、各倉庫にStock Location Entityを作成します。Store Entityタイプに「Available stock locations」と「Stock allocation location」のエンティティリファレンスフィールドを追加し、各ストアがどの倉庫が注文を履行できるか、どれがトランザクションの主要ロケーションかを定義できるようにします。在庫確認はすべての利用可能なロケーション全体で集計されます。
過剰販売の防止
Commerce Stock Enforcementサブモジュールを有効にして、顧客が利用可能な数量以上のアイテムを購入することを防止します。このモジュールはカートへの追加、カートの更新、チェックアウト時に在庫を検証します。制限設定でエラーメッセージをブランドの声に合わせてカスタマイズします。
ドロップシッピングまたは受注生産商品
在庫追跡が不要な商品(ドロップシッピング商品、デジタル商品、受注生産商品)については、それらのバリエーションタイプの在庫サービスを「Always in stock」のままにします。これにより、同じストア内で追跡対象と非追跡対象の商品を混在させることができます。
プログラムによる在庫管理
StockServiceManagerサービスを使用してプログラムでトランザクションを作成します。入荷在庫には$stockServiceManager->receiveStock()を、手動販売にはsellStock()を、返品にはreturnStock()を、倉庫間転送にはmoveStock()を呼び出します。各メソッドは監査証跡を維持する適切なトランザクションレコードを作成します。
Tips
- 本番サイトでは「Absolute stock level」ではなく「Simple stock transaction」ウィジェットを使用して、適切なトランザクション履歴を維持し、競合状態を回避します
- 高トラフィックストアではCron集計モードを有効にして、在庫レベル計算をバッチ処理することでパフォーマンスを向上させます
- データの整合性を維持するため、データベーステーブルを直接変更するのではなく、常にAPIまたはフォームを通じて在庫トランザクションを作成します
- 即時の在庫精度が重要な低トラフィックストアでは「Real-time」集計モードの使用を検討します
- 在庫チェックを行うべきでない特定のアイテムをマークするために、商品バリエーションにcommerce_stock_always_in_stockブーリアンフィールドを追加します
Technical Details
Admin Pages 7
/admin/commerce/config/stock
すべての在庫関連の設定と管理ページへのアクセスを提供するメインの在庫設定ランディングページです。
/admin/commerce/config/stock/settings
デフォルトの在庫サービスとEntityタイプごとの在庫サービス割り当てを設定します。どの在庫イベントプラグインが注文ライフサイクルイベントを処理するかを選択します。
/admin/commerce/config/stock/local_stock_config
ローカル在庫サービスがトランザクションとCronベースの在庫レベル更新を処理する方法を設定します。
/admin/commerce/config/stock/enforcement/settings
顧客が在庫以上のアイテムを購入しようとした時に表示されるエラーメッセージを設定します。
/admin/commerce/commerce_stock_location
在庫が保管される倉庫、店舗、またはフルフィルメントセンターを表す在庫ロケーションを管理します。
/admin/commerce/config/stock/transactions1
商品バリエーションの在庫トランザクションを作成します。最初のステップでトランザクションを行う商品バリエーションを選択できます。
/admin/commerce/config/stock/transactions2
トランザクションタイプ、ロケーション、数量、メモを含む完全なトランザクション詳細を持つトランザクション作成の第2ステップ。
権限 4
Hooks 2
hook_commerce_stock_service_alter
モジュールが購入可能なEntityに対して選択された在庫サービスを変更することを可能にします。
hook_form_alter
Stock Enforcementはhook_form_alterを使用してカートへの追加、カート、チェックアウトフォームにバリデーションを追加します。
Troubleshooting 5
Stock configurationで商品バリエーションタイプのデフォルトサービスが「Local stock」に設定されていることを確認します。「Order complete transaction」設定が注文ワークフローと一致していることを確認します。カスタムワークフローを使用する注文の場合、遷移名が期待される値と一致していることを確認します。
少なくとも1つのアクティブなStock Location Entityを作成します。マルチストアを使用している場合、ストアに有効なロケーションが設定されたstock allocation locationフィールドがあることを確認します。
Stock Levelフィールドを追加した後、Stock transactionsフォームまたはプログラムで初期在庫トランザクションを作成する必要があります。フィールドにはデフォルトの在庫値がありません。
Commerce Stock Enforcementモジュールを有効にします。デフォルトでは、ベースモジュールは在庫を追跡しますが、過剰販売を防止しません。
システムがストアコンテキストを判断できない場合に発生します。商品が少なくとも1つのストアに割り当てられていて、現在のストアが解決できることを確認します。
Security Notes 3
- 「Administer Commerce Stock」権限は在庫サービスとイベント処理を変更するアクセスを付与します - 信頼できる管理者に制限してください
- 在庫トランザクションフォームへのアクセスは「Use Commerce Stock transaction form」権限で制御されます - 手動在庫調整を許可するため慎重に割り当ててください
- 在庫ロケーションタイプ管理はデータモデルに影響するため制限された権限です