概要
会社の組織図に相当するデータを入力する機能です。
この画面で入力した情報は、グループ単位での絞り込みや、「部下のみ」を対象にした絞り込みなど、検索条件の元ネタとして使います。
仕様
データ構造
1つのグループに対して複数のユーザーが紐付きます。
ユーザーは同時に複数のグループに属することはできません。
グループデータは階層構造になっています。
親は1件、子は複数件持てます。
階層構造を実現するために「閉包テーブル」というデータ構造を使いました。
これにより、配下のグループを簡単に検索できます。
誰がリーダーかを明確に判断する情報は持ちません。(リーダーかどうかを判断する必要が無いので)
グループに属するユーザーのうち、承認レベルが1より大きい役割を持つ場合は、そのグループの上長という扱いになります。
一つのグループに複数の上長が存在しても問題ありません。
承認レベルが1より大きい役割を持つユーザーが
月報承認機能で「部下のみ」と指定して検索した場合、自身が所属するグループ内の全ユーザーと、子孫のグループに属する全ユーザーが「部下」として検索対象になります。
承認レベル1の役割しか持たないユーザーの場合は「部下のみ」と検索しても誰もヒットしません。
操作
組織図に相当する情報がツリー形式で表示されます。
画面上のボタン押下により追加・名称変更・削除ができます。
グループに所属しているユーザーがいる場合、削除はできません。
ツリーのアイテムはドラッグアンドドロップで移動でき、親の付け替えができます。
上記の挙動は「jsTree」というライブラリを使って実現しています。
http://jstree.com/
反省点
アイテムの並べ替え機能を搭載すれば便利だったと考えています。現状は、同じレベルのアイテムはグループIDの昇順(データの登録順)で並ぶだけです。
小さな会社の場合、組織変更の度に社員の名前が書かれた組織図が配られることがあります。組織図のプリントアウト機能や、システム内で組織図を閲覧できる機能が付いていても便利かもしれません。
大企業での運用を想定するなら、グループ単位で休暇を付与するとか、グループ全員の契約を一括で編集するといった機能を搭載する必要があるはずです。当システムではグループ単位で設定する機能を搭載しておらず、あらゆる設定を個々のユーザー単位で行う必要があります。