前回のGoogle Apps Script(GAS)でスプレッドシートを外部から操作するではネットショップもどき在庫管理のデモを作成しました。在庫がなくなったら商品の補充をおこなわなければなりません。そこで在庫がF列の「しきい値」以下になったらH列の「担当者」にG列の「補充数」分の発注を要請するメールを送信するようにします。

簡単メール送信

GASなら簡単にメールを送信することができます。

在庫のチェックと不足の解消

前回作成したToBuy関数のなかで在庫が基準を下回っていれば担当者に在庫不足を解消するようにメールを送信します。

前回はToBuy関数に全部の処理を詰め込みましたが、今回は長くなるので関数に分けました。Get~関数でセルの値を取得し、Set~関数で値をセットします。

ToBuy関数

在庫の確認

商品のIDからセルの位置を取得するために必要な行を取得する関数です。

商品のIDから在庫の数を取得する関数です。

在庫を1減らす関数です。

在庫が変動したときの日付を変更する関数です。

在庫が変動したときの時刻を変更する関数です。

担当者にメールを送信

在庫数を確認して必要であれば担当者にメールを送信する関数です。GetNumberToOrder関数は在庫がしきい値を上回っている場合は0を返します。そうでないときは補充しなければならない数を返します。

GetNumberToOrder関数が0よりも大きい数を返したときは担当者にメールを送信しますが、担当者が対応してもすぐに在庫不足が解消されるわけではありません。商品が売れるたびに何度もメールが送信されないように、メールを送信したらJ列に「済」と表示させ、これ以降はメールの送信はしません。

GetNumberToOrder関数が0を返した場合は在庫は充分存在するということなので、その場合はJ列には「不要」と表示させます。

GetNumberToOrder関数は、在庫が不足したときに必要な数を返します。

GetCheckFromItemId関数はJ列に書かれている文字列を取得し、SetCheckFromItemId関数はJ列に文字列を設定します。

GetItemNameFromItemId関数は商品のIDから商品名を取得します。

GetManagerNameFromItemId関数は商品のIDからメールを送信する相手の名前を取得します。

GetManagerNameFromItemId関数は商品のIDからメールを送信する相手のメールアドレスを取得します。

在庫の回復

さて担当者が対応をした場合、しばらくすると在庫不足が解消されます。この部分は2時間おきにJ列を確認して、在庫不足になっていたら補充数だけ在庫を増やすことにします。

RecoverInventoryAll関数はすべての在庫不足を解消します。

RecoverInventory関数は指定された商品IDの在庫不足を解消します。そしてJ列の文字列を対応済みから対応不要に変更します。

トリガーを設定するには左のメニュー [トリガー]を選択します。時計のようなアイコンの部分です。

あとは[実行する関数を選択]を[]、実行するデプロイを選択は[Head]、[イベントのソースを選択]は[時間主導型]、[時間ベースのトリガーのタイプを選択]は[時間ベースのタイマー]、[時間の間隔を選択(時間)]は[2時間おき]を選択します。