kintone ユーザーヘルプで紹介されている"自動計算の演算子と関数"をフォームからJavascript に変更して、実行したいのですが、フォームでは入力されるはずの計算結果が、Javascript になると入力されません。
下記のソースコードは、始業時刻が10:30、終業時刻が16:00、就業時間の中に、昼休み、休憩時間があり、その休み時間を除いた1日の労働時間を計算したいのですが、計算結果が入力されません。それに加えて出勤時刻が始業時刻より早く、かつ退勤時刻が終業時刻よりも遅い場合でも、計算結果は休み時間を除いた10:30から16:00までの労働時間で計算ができるようにしてほしいのですが、どうでしょうか?
kintone.events.on([‘app.record.create.submit’,‘app.record.edit.submit’], function (event) {
var record = event[‘record’];
record[‘始業’].value = ‘10:30’;
record[‘終業’].value = ‘16:00’;
record[‘昼休み開始’].value = ‘12:00’;
record[‘昼休み終了’].value = ‘13:00’;
record[‘休憩開始’].value = ‘14:20’;
record[‘休憩終了’].value = ‘14:35’;
var shukkin = record[‘出勤’].value;
var taikin = record[‘退勤’].value;
var start = record[‘始業’].value;
var finish = record[‘終業’].value;
var hirusta = record[‘昼休み開始’].value;
var hiruend = record[‘昼休み終了’].value;
var kyusta = record[‘休憩開始’].value;
var kyuend = record[‘休憩終了’].value;
if ((shukkin <= start) && (taikin >= finish)) {
record[‘勤務時間’].value = (finish - start - (hiruend - hirusta) - (kyuend - kyusta)) / 3600 ;
} else {
record[‘勤務時間’].value = null;
}
return event;
}
);
投稿にはありませんでしたが、出勤時刻が始業時刻より遅い時は、出勤時刻と始業時刻の間は労働時間から引かれると推測し(退勤も同様)コードを書いてみました。
不要な場合は後ろの if … else if … else if … else を
var working_hours = minToStr(finish - start - (hiruend - hirusta) - (kyuend - kyusta));
に置き換えてください。
kintone.events.on(['app.record.create.submit','app.record.edit.submit'], function (event) {
// hh:mm を分に変換
function strToMin(str) {
var hm = str.split(":");
return parseInt(hm[0]) * 60 + parseInt(hm[1]);
}
// 分をhh:mmに変換
function minToStr(min) {
var h = Math.floor(min / 60);
var m = min % 60;
return h + ":" + m;
}
var record = event['record'];
record['始業']['value'] = '10:30';
record['終業']['value'] = '16:00';
record['昼休み開始']['value'] = '12:00';
record['昼休み終了']['value'] = '13:00';
record['休憩開始']['value'] = '14:20';
record['休憩終了']['value'] = '14:35';
var shukkin = strToMin(record['出勤']['value']);
var taikin = strToMin(record['退勤']['value']);
var start = strToMin(record['始業']['value']);
var finish = strToMin(record['終業']['value']);
var hirusta = strToMin(record['昼休み開始']['value']);
var hiruend = strToMin(record['昼休み終了']['value']);
var kyusta = strToMin(record['休憩開始']['value']);
var kyuend = strToMin(record['休憩終了']['value']);
if (shukkin > start && taikin < finish) { // 出勤が始業より遅い・退勤が終業より早い
var working_hours = minToStr(taikin - shukkin - (hiruend - hirusta) - (kyuend - kyusta));
} else if (shukkin > start && taikin >= finish) { // 出勤が始業より遅い・退勤が終業より遅い
var working_hours = minToStr(finish - shukkin - (hiruend - hirusta) - (kyuend - kyusta));
} else if (shukkin <= start && taikin < finish) { // 出勤が始業より早い・退勤が終業より早い
var working_hours = minToStr(taikin - start - (hiruend - hirusta) - (kyuend - kyusta));
} else {
var working_hours = minToStr(finish - start - (hiruend - hirusta) - (kyuend - kyusta));
}
record['勤務時間']['value'] = working_hours;
return event;
});
回答ありがとうございました。
Javascript でのコードの書き方について、
まだ分かっていないところもありましたので、
大変参考になり助かりました。