kintone

任務だ、勤怠管理を作れ。PART.4

Y氏
Y氏
交通費は当然校舎ごとに合計が出るんだろうな?

おぉジーザス。
SUM機能じゃ全体の合計しか出せないんだ…。
選択肢は二つだ。

①校舎ごとにサブテーブルを作る
②同じサブテーブルで校舎をドロップダウンで選択し、カスタマイズで無理くり計算する。

②だ。なぜならカッコイイから。
というのは冗談で、校舎が増えれば増えるほどサブテーブルを増やさなきゃいけないなんて…
想像しただけでも面倒くさい。
そうと決まったら仕様の確認だ。

①レコード保存時に
②サブテーブルの値を全部取得して
③校舎Aが選択されている行の交通費を足していく。(以降B、Cとループ)
④それぞれの計算結果を交通費フィールドに出力する

う~んやっぱり書くだけは簡単だ。

①レコード保存時に

今回はレコードが保存されたときに着火させたい訳だが、
kintoneは新規作成の保存時と編集の保存時でイベントがわかれているので
これをどちらも入れたい。そんなときはこんな風にすると良い。

kintone.events.on([‘app.record.edit.submit’,’app.record.create.submit’]

②サブテーブルの値を全部取得する

フィールドはこんな感じ。

テーブルのフィールドコードは「交通費」
中身のフィールドコードはフィールド名と合わせてある。
値を取得するのは簡単だ。

var record = event.record; //イベント発生時のレコードをぶちこむ
var tableRecords = record.交通費.value; //サブテーブルの値を全部ぶちこむ

③校舎Aが選択されている行の交通費を足していく。(以降B、Cとループ)

ここは結構骨が折れた。
A,B,Cという3校舎があり、それぞれの計算結果を保持しなきゃならない…ので
当時の僕は二つの配列を作って対応した。

var schools = [‘A’,’B’,’C’];
var schoolTotal = [0,0,0];

これで、schools[0]の合計はschoolTotal[0]にはいる形になる。
これを使ってループを作る。

for (var i=0; i<tableRecords.length; i++) {
for(var y=0; y<schools.length; y++){
if(tableRecords[i].value[‘請求先’].value === schools[y]) {
schoolTotal[y] += Number(tableRecords[i].value[‘金額’].value);
}
}
}

こんな感じ。
テーブルの行が終了するまで繰り返すループの中で、
校舎の数だけ繰り返すループを発生し、
請求先の値がA(shools[0])ならAの合計(schoolTotal[0])に足し算というのを繰り返していく。

④それぞれの計算結果を交通費フィールドに出力する

ここまで来たら簡単。

record.A.value = schoolTotal[0];
record.B.value = schoolTotal;
record.B.value = schoolTotal;

として、ターンエンドだ。

完成形

(function() {
“use strict”;
kintone.events.on([‘app.record.edit.submit’,’app.record.create.submit’], function(event) {
if (!event.record) {
return;
}
var record = event.record;
var schools = [‘A’,’B’,’C’];
var schoolTotal = [0,0,0];
var tableRecords = record.交通費.value;

for (var i=0; i<tableRecords.length; i++) {
for(var y=0; y<schools.length; y++){
if(tableRecords[i].value[‘請求先’].value === schools[y]) {
schoolTotal[y] += Number(tableRecords[i].value[‘金額’].value);
}
}
}

record.A.value = schoolTotal[0];
record.B.value = schoolTotal;
record.C.value = schoolTotal;
return event;
}
);
})();