« 小ネタ:adb start-serverできないときの対処 | トップページ | Dateをmockするメモ »

2021年8月26日 (木)

IT資産管理システムで白衣を管理する

0. 数が多いと大変なのだ

僕はいわゆる社内SEというやつなので、社内のIT資産のライフサイクル管理なんかもやる。

で、PCだけならまだしも従業員貸与品のiPadやスマホ、複合機なんかもあると、そりゃもうたいへんで、xls管理なんかじゃ回らないのは明白。

というわけでIT資産管理システムであるGLPIを導入してみた。

1. GLPI is 何

フランスのTeclib'というベンダーが中心になってGPL 2.0のOSSとして開発しているIT資産管理システム。PHPで書かれている。

コンピューターの資産台帳としてだけでなく、ITコンシェルジュむけのメンテナンスチケット管理機能やラッキング図の管理もできる優れものだ。
セットアップもごく普通のLAMP構成と変わらないので、難易度はそれほど高くないと思う。

ただ、GLPI自体のインベントリ機能はあまりあてにならないので、連動可能なインベントリ製品の一つであるFusionInventoryも導入してみた。

2. そして本題

GLPIの扱いがちょっとわかるようになってきたところで、弊社のボスからこんなお話を賜る。

薬局の従業員に貸し出している白衣をシステム的に管理できないか?

確かに、GLPIにはGeneric Objectというカスタム汎用オブジェクトを作るプラグインがあるので、これでどうにかならないか試してみることに。

ただこのプラグイン、インストール自体はプラグイン管理画面からサクッと終わらせることはできるんだが、入れただけでは何ら使い物にならないので注意が必要。

2-1. 要求仕様

白衣をGLPIで扱えるIT(なのか?)資産として定義するにあたり、何が必要なのかをちょっと考えてみる。
必要そうな入力項目はざっとこんなところか。

  • 名前
  • 資産番号
  • 貸出先ユーザー
  • 半袖、長袖の別
  • 男性用、女性用の別
  • サイズ
  • 貸し出し中か、在庫か
  • 導入日
  • 滅却日
  • 調達先の名前
  • その他のメモや注釈

あと、ユーザー一人に対して複数の白衣を貸与する(洗い替えも必要なので)ので、名前が一意である必要はない。というか一意名しか受け付けないとなると、名前空間がめんどくさいことになる。

2-2. 白衣を定義する

プラグインを入れたら、オブジェクトモデルを作る。
早い話ここで白衣を定義するわけだが、

Def_object_model1

この図でいうInternal identifierには小文字アルファベットしか受け付けない。で、ラベルはInternal Identifierの先頭をキャピタライズして表示される。
ここでは白衣を表すwhiterobeにしてみた。

モデルを定義すると、$GLIP_VAR_DIR/files/_plugins/genericobject/locales/whiterobe/whiterobe.ja_JP.phpというファイルができている。これが多言語リソースになるので、

  <php
  $LANG['genericobject']['PluginGenericobjectWhiterobe'][0]="白衣";

と日本語を書いていく。多次元(しかも3次元)配列なのはPHPという言語の癖と割り切るしかないが、最後の添え字の0はラベルに割り当てられているので、これでラベルが日本語になる。

次にBehaviourとプラグインを割り当てる。

Behaviourは、雑に説明するとモジュールなようなもので、子アイテムを持てるようにするものやゴミ箱、履歴などがある。
今回は以下のようにしてみた。

Def_object_model2

プラグインは、CSVによるバルクインポートができるようにinjection file pluginを、資産管理番号をシステム側で生成させるようにgeninventorynumber pluginを、それぞれ有効にしてみた。

次に入力フィールドを作る。

作成日や情報資産番号などはプリセットのフィールド定義があるので、画面下のAdd new fieldから追加すればいいのだが、サイズや購入先といったフィールドはないので自分で作る必要がある。

Def_object_model3

$GLIP_VAR_DIR/files/_plugins/genericobject/fields/以下に、whiterobe.constant.phpというファイルを作って入力フィールドを定義する。

  <php
  global $GO_FIELDS, $LANG;
  // サイズのドロップダウン
  $GO_FIELDS['plugin_genericobject_sizes_id']['name'] = $LANG['genericobject']['PluginGenericobjectWhiterobe'][1];
  $GO_FIELDS['plugin_genericobject_sizes_id']['field'] = 'size';
  $GO_FIELDS['plugin_genericobject_sizes_id']['input_type'] = 'dropdown';
  // 購入先のテキストボックス
  $GO_FIELDS['plugin_genericobject_vendornames_id']['name'] = $LANG['genericobject']['PluginGenericobjectWhiterobe'][2];
  $GO_FIELDS['plugin_genericobject_vendornames_id']['field'] = 'vendorname';
  $GO_FIELDS['plugin_genericobject_vendornames_id']['input_type'] = 'text';
  // 在庫状態のドロップダウン
  $GO_FIELDS['plugin_genericobject_stockstates_id']['name'] = $LANG['genericobject']['PluginGenericobjectWhiterobe'][3];
  $GO_FIELDS['plugin_genericobject_stockstates_id']['field'] = 'stockstate';
  $GO_FIELDS['plugin_genericobject_stockstates_id']['input_type'] = 'dropdown';

$GO_FIELDSの第1次元のキーには

Trailing s_id is mandatory in [plugin_genericobject_field*s_id*] because the GLPI framework requires foreign key fields to end with s_id. In database, glpi_plugin_genericobject_fields is table name and id, its foreign key. See GLPI developer documentation.

と、GLPIが外部キーを生成する際のルール上の制約があるので注意。(出典)

キーが正常に認識されたら、Add new fieldの中に定義したフィールドがあるはずなので、これを追加して表示順を調整すればいい。

最後は画面左のプロファイルタブを選択してプロファイルに権限を割り当てたあと、メインタブで有効に設定することで、情報資産の中に白衣が追加される。

あとはモデルやサイズを適宜追加してやれば使えるようになる。

3. 白衣を一意に特定するには

これには前述の情報資産番号を使う。数字12桁で生成すればEAN-13形式のバーコードのネタとして使えるので、TEPRA PROテープカートリッジ アイロンラベルに専用ソフトのSCP10を使って印刷すれば、白衣にバーコードを付加できるようになるので、バーコードリーダーで検索できるようになる。

« 小ネタ:adb start-serverできないときの対処 | トップページ | Dateをmockするメモ »

コメント

コメントを書く

(ウェブ上には掲載しません)

« 小ネタ:adb start-serverできないときの対処 | トップページ | Dateをmockするメモ »

2023年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

最近のトラックバック

無料ブログはココログ