web-dev-qa-db-ja.com

製品注文時に原材料の在庫を管理する

私はそれを解決する方法のアイデアを持っているシナリオがありますが、私はそれを必要以上に複雑にしないようにしたいと思います。私はUbercartに不慣れで、Drupal一般に(ただし、ソフトウェア開発/データベースでの経験があります)。

シナリオ

一般化:ユーザーが製品を構築して製品を注文するために選択できる原材料の在庫レベルを管理する必要があります。特定のシナリオを以下に示します。

サイトでは、ユーザーはバッグをカスタマイズできます。具体的には、バッグの各モデルは4つの部分に分かれています。ユーザーはパーツごとに特定のファブリックを選択できますが、どのファブリックを選択するかはモデルによって異なります。

例。ユーザーは、bag1のパーツにはファブリックA、B、C、Dを選択し、bag2にはファブリックC、D、E、Fを選択できます。

生地レベルで在庫を管理する必要がありますが、カートには最終的にカスタマイズされたバッグレベルのみが表示されます。

したがって、十分な注文がファブリックCを使用してbag2で行われ、不足する場合、オプションのファブリックCはbag1で使用できなくなります。

質問

Ubercartで上記を直接実行することはできないように思えるので、私の考えは補助データベースを使用することです。しかし、おそらくそれは構成および/またはいくつかの追加モジュールで行うことができます-私の最初の質問は、コードのカスタマイズ/追加のデータベースを行う必要なしにこれをどうにかして構成できるかどうかです。

ユーザーがバッグモデルを選択できる特定のモジュールを作成し、パーツのファブリックを選択して、現在カスタマイズされているバッグを表示することを計画しています。

2番目の質問は、追加のデータベースが必要であると仮定した場合、以下の解決策は良い解決策ですか、それともおそらく必要な作業が少ない方法があるでしょうか。

可能な解決策(新規)

編集:これは、Drupalの外部の補助データベースに依存する必要がない方法です。

  • 製品クラスを使用して、Fabric-Productsを表します。各Fabric-Productは、単なる生地の一部です。
  • 製品キットを使用して、カスタマイズされたバッグを表す
  • 製品クラスを使用して、特定のモデルを表すBag-Modelを表します。カスタマイズされていないことに注意してください。生地は選択されていません。
  • 1つのBag-Modelへの1つのノード参照を持つ製品クラスBag-Model-Partを使用して、バッグごとに存在するパーツを指定します。また、ファブリック製品へのリスト(ノード参照)もあります。これらは、パーツ用に選択できる可能なファブリックです。
  • 製品クラスを使用してBag-Part-Fabricを表します。これは、Bag-Partおよび1つのファブリックへのノード参照を持っています(特定の構成であるため、1つの特定のパーツに対して1つの特定のファブリックが選択されています)。また、そのファブリックでパーツがどのように見えるかを示すイメージもあります。
  • customized-Bag製品キットには、バッグのカスタマイズ方法を正確に指定する一連のBag-Part-Fabricが含まれています。また、使用される一連のファブリックも含まれているため、注文時にファブリックの在庫レベルが低下します。 。最終的なバッグがどのように見えるかを示す画像が1つあります。

このアイデアでは、製品キットの数は豊富になるので、これらをコードで生成する必要があります。サイトのマネージャーは、Drupalファブリック、バッグモデル、バッグモデルパーツを使用して簡単に管理できます。サイト管理者は、もう少し面倒ですが、バッグを追加することもできます。 Part-Fabric。製品キットを生成するコードは、Drupalでこのデータを見つけ、Bag-Part-Fabricから画像をフェッチして、各製品キットの最終的な画像を生成します。

製品キットを生成するコードは、サイトマネージャーが時々実行するためにトリガーできるモジュールであると思います(新しいバッグパーツファブリックのバッチが作成された後)。

バッグをカスタマイズするためにサイトにアクセスするユーザーのフローは、次のとおりです。#バッグモデルパーツのいずれかを選択します#そのモデルのバッグモデルパーツごとに、可能性の中から1つのファブリックを選択します。 Bag-Part-Fabricのセットがあります。ユーザーがカートに追加したとき/場合、これらを使用して特定のカスタマイズされたバッグ製品キットを見つけ、カスタマイズされたバッグ製品キットをカートに入れます。

これは問題ありませんか?より簡単な、またはより良いものはありますか?

可能な解決策(古い)

Ubertcartと補助データベースを使用してシナリオを解決する方法に関するアイデア。

製品クラスの作成:生地とバッグモデル

次の製品キットを作成します:バッグバッグは最終構成です(例:3つのモデル、10のファブリック、4つのパーツの場合、630バッグ)

Drupal以外の補助データベースを作成します。

  • バッグモデルのSKUをパーツごとに許可されたファブリックSKUにリンクします
  • バッグのSKUをそのバッグ構成の特定のファブリックSKUにリンクします

セットアップ

サイトの所有者による

  • 各バッグモデルとバッグのパーツの(一部の)一意のIDを入力します
  • 各ファブリックの(いくつかの)一意のIDを入力します
  • バッグモデルごとのパーツごとに許可されるファブリックの一意のIDを入力します
  • コード:
    • バッグモデルごとおよびファブリックごとにSKUを生成します
    • ubercart APIを使用してすべてのバッグモデル製品を作成する
    • ubercart APIを使用してすべてのファブリック製品を作成する
    • ubercart APIを使用して、すべてのバッグ製品キット(ファブリックのすべての可能な組み合わせ)を作成します
    • バッグモデルごとに、補助のdbに書き込み、ファブリックSKUをバッグモデルのパーツにリンクする

ランニング

ユーザーはバッグモデルの中から選択します

  • コード
    • ubercartから、すべてのバッグモデルを取得
    • すべてのバッグモデルを表示
    • (おそらく、そのすべての部品のすべての生地が出ている場合、バッグモデルを表示しない)
  • ユーザー
    • ユーザーがバッグモデルを選択

ユーザーがカスタマイズするパーツを選択します

  • コード
    • 画像を取得し、パーツを表示するには、bag-moduleでパーツ名を使用します
  • ユーザー
    • ユーザーがパーツを選択

ユーザーがパーツの生地を選択します

  • コード
    • 補助データベースから、選択したバッグモデルSKUを使用して、part-nrにファブリックSKUを許可する
    • ubercartから、各生地のSKUについて、在庫があるかどうかを確認します
    • パーツに許可され、まだ在庫があるファブリックSKUを表示する
  • ユーザー
    • ユーザーがパーツの生地を選択

カートに追加(ユーザーが各パーツをカスタマイズしたら)

  • ユーザー
    • カートに追加を押します
  • コード
    • 補助データベースから、パーツごとに選択されたファブリックSKUとバッグモデルを使用してバッグ製品キットを入手する
    • ubercart APIを使用して、バッグ製品キットをカートに追加します

チェックアウト

  • ユーザー
    • チェックアウトを押してトランザクションを終了します
  • コード
    • Ubercartが製品キットの生地の在庫を更新します
4
J-a

既存のモジュールと、おそらく小さなカスタムコードを使用すると、現在提案されているソリューションよりも優れたワークフローで何かを実行できるはずです。

おそらくすでにuc_stockを見たことがあるでしょう。従来の物理的な製品の在庫をうまく追跡します。属性と bercart Stock Manager With Attributes を使用すると、さまざまな属性を持つ製品の在庫を追跡できます。たとえば、小、中、大のサイズのTシャツを販売するには、Tシャツ製品に属性S、M、Lを指定します。 属性にSKUを変更させる ; uc_multi_stockは、小、中、大のTシャツの在庫を個別に追跡できます。

原材料の数量を追跡する必要があるため、アイテムを購入するたびに、同じ属性を持つ他の製品の在庫を減らす必要があります。 S/M/L Tシャツの例から、複数のTシャツデザインを販売しているが、それらはオンデマンドで印刷されているとします。小、中、大のTシャツを印刷する数に制限があります。小さなTシャツを購入するたびに、他のすべての小さなTシャツ(など)の在庫を減らします。

同様に、すべての小さなTシャツの在庫を同時に設定できるように設定する必要があります。

条件付きアクション を使用するか、hook_orderを実装する小さなカスタムモジュールを構築することで、これを実装できます。カスタムモジュールをお勧めします。これは、移植性が高く、バージョン管理が容易だからです。コードで行う場合、uc_stock_adjust($ sku、$ qty)は$ skuの在庫を$ qtyで調整し、uc_stock_set($ sku、$ qty)は$ skuの数量を$ qtyに設定します。

幸せなコーディング!

1
David L