警告
Moment.jsはメンテナンスモードになり、
日付処理できる代替ライブラリへの移行
が推奨されています。
代替ライブラリのひとつ
Luxon
については、
Luxonを使ってkintoneの日付や日時フィールドのフォーマットをカスタマイズする
があります。
はじめに
こんにちは。kintoneをより良くする武井です。
皆さん、kintoneで勤怠管理をしていませんか?kintoneの活用方法としては定番ですよね!
今回はそんな勤怠管理アプリで使えそうなカスタマイズを紹介したいと思います。
完成形イメージ
今回のカスタマイズでできること
レコード追加画面で、起算日から1ヵ月間の日付と始業/終業時刻を自動的にデフォルトセットできます。
カスタマイズで以下の入力内容をチェックします。
- 勤務時間が8時間未満になっていないか。
- 算定対象外の勤怠日付が含まれていないか。
- すべての営業日が含まれているか。
- 休日が含まれていないか。
アプリ準備
勤怠管理アプリ
以下のフィールドをもつ勤怠管理アプリを作成します。
フィールドコード | フィールドタイプ | 備考 |
---|---|---|
総勤務時間 | 計算 | 計算式:SUM(勤務時間) 表示形式: 時間 例:26時間3分 |
有休日数 | 数値 | 初期値:0 |
Table | テーブル | 以下の項目をテーブル化する |
日付 | 日付 | |
開始 | 時刻 | |
終了 | 時刻 | |
休憩 | 数値 | |
勤務時間 | 計算 | 計算式:終了 - 開始 - 休憩 * 60 表示形式: 時間 例:26時間3分 |
有休 | チェックボックス | 選択項目は有休 のみ |
また、「アプリの設定 > JavaScript / CSSでカスタマイズ」に以下のJavaScript/CSSファイルを設定します。
PC用のJavaScriptファイル
- https://js.cybozu.com/jquery/2.2.4/jquery.min.js (jQueryライブラリ)
- https://js.cybozu.com/sweetalert/v1.1.3/sweetalert.min.js (SweetAlertライブラリ)
- https://js.cybozu.com/momentjs/2.15.1/moment.min.js (Moment.jsライブラリ)
- kintai.js (詳細後述)
PC用のCSSファイル
休日マスターアプリ
以下のフィールドをもつ休日マスターアプリを作成します。
フィールドコード | フィールドタイプ | 備考 |
---|---|---|
日付 | 日付 |
|
作成後、土日祝や創業記念日などの休日レコードを作成します。
この際、Excel等でデータを作っておき、CSVで一括インポートすると便利です。
CSVインポートについては
ファイルからレコードのデータをアプリに読み込む
を参照ください。
サンプルコード
以下がkintai.jsのサンプルコードです。
サンプルコードはエディタにコピーして、ファイル名をkintai.js
、文字コードをUTF-8
で保存します。
ファイル名は任意ですが、ファイルの拡張子はjs
にしてください。
|
|
プログラム解説
レコード一括取得をした時に1万件を超える可能性がある場合は、運用・適用中のプログラムのご確認と修正対応の検討をお願いします。
詳細は
offsetの制限値を考慮したkintoneのレコード一括取得について
を確認ください。
以下、スポット解説していきます。
|
|
holidayMST変数は上記で作成した「休日マスター」のアプリIDを入力します。
kisanbi変数は起算日としたい日付を入力します。たとえば、毎月11日から翌月10日までを算定日とする場合は「11」を入力します。
start変数はデフォルトセットしたい始業時間を入力します。
end変数はデフォルトセットしたい終業時間を入力します。
|
|
該当する休日を「休日マスター」から取得する関数です。
たとえば、本日が2/17で起算日を「11」とする場合、2/11~3/10までに存在する休日を取得します。
取得したら連想配列に格納して返却しています。
この際、非同期関数に配慮し、kintone.Promiseを利用しています。
|
|
レコード追加画面や編集画面の上部に「入力内容チェック」のボタンを配置しています。
|
|
「入力内容チェック」ボタンが押下された時のイベントです。
非同期処理(休日取得)が完了後、次の処理へ移ります。
「resp2」に取得した各データが格納されています。
|
|
算定月の営業日を配列に格納しています。
先ほど取得した休日以外の日になります。
|
|
入力内容チェックの本丸処理です。
テーブルに入力されている行数分だけ繰り返し処理しています。
各チェック後に、エラーがあればerr変数にプッシュしています。
|
|
エラーがひとつでもある場合はerr配列の内容を表示し、エラーがひとつも存在しない場合はその旨を表示します。
|
|
有休日数のフィールドを入力不可にしています。
有休日数はJavaScript処理でチェック数を計算します。
|
|
レコード追加画面で算定月の行をデフォルトセットする処理です。
デフォルトで用意されている行は不要なので削除しています。
|
|
有休のチェックボックスを計算する処理です。
テーブル自体のchangeイベントも設定することで、行自体が削除されてもチェック数を変更できるようにしています。
機能拡張
さらに本プログラムを拡張することで、以下のようなことも可能になります。
- テーブル内に同じ日付の勤怠がないかをチェックする。
- 深夜早朝の勤務日数や勤務時間を計算する。
- 休日は非表示ではなく、表示で入力不可とし、休日名を表示する。
- 休日マスターを利用せず(レコード作成の手間を省いて)土日祝を自動的に取得する。
- holiday_jp-js の使い方は関連ナレッジの kintoneカスタマイズで、holiday_jp-jsを使って営業日/休業日を判定する を参照してください。
おわりに
いかがでしたでしょうか。
標準機能で出来ないことはカスタマイズすると実現できます。
少しの手間でも、これからずっとその手間がなくなると思えば大きいですよね。
皆様のすばらしいkintoneカスタマイズライフの一助となれたら幸いです。