勤務時間の計算について

お世話になります。

困っている件が多いので、こちらでまたご迷惑おかけします。

勤務時間を入力するアプリを作成しています。

勤務時間自と勤務時間至の時間計算をし、「残業時間合計」、22時以降は「深夜残業時間合計」が算出されるようにしています。

ここに曜日が「土」「日」「祝日」を選択した場合、「残業時間合計」ではなく「休日出勤時間合計」に値が入るように条件処理を入れたいです。

(休日でも深夜時間は同様に「深夜残業時間合計」に入る)

 

現在は以下のスクリプトを組んだのですが、ここにどのような処理を入れれば実現できるでしょうか。

(function() {
“use strict”;
kintone.events.on([
‘app.record.create.change.勤務時間自’, ‘app.record.edit.change.勤務時間自’,
‘app.record.create.change.勤務時間至’, ‘app.record.edit.change.勤務時間至’,
], function (event){
var sum = [0, 0, 0];
var period = [0, 5, 9, 17.5, 22, 24];
var arrival = new Date(event.record.勤務時間自.value);
var leaving = new Date(event.record.勤務時間至.value);
var time = (leaving.getTime() - arrival.getTime()) / 1000 / 60 / 60;
var start = arrival.getHours() + arrival.getMinutes() / 60;
while(time > 0){
if(start >= period[4]){
sum[2] += Math.min(period[5]-start, time);
time -= Math.min(period[5]-start, time);
start = period[0];
}else if(start >= period[3]){
sum[1] += Math.min(period[4]-start, time);
time -= Math.min(period[4]-start, time);
start = period[4];
}else if(start >= period[2]){
sum[0] += Math.min(period[3]-start, time);
time -= Math.min(period[3]-start, time);
start = period[3];
}else if(start >= period[1]){
sum[1] += Math.min(period[2]-start, time);
time -= Math.min(period[2]-start, time);
start = period[2];
}else{
sum[2] += Math.min(period[1]-start, time);
time -= Math.min(period[1]-start, time);
start = period[1];
}
}

event.record.残業時間合計.value = sum[1];
event.record.深夜残業時間合計.value = sum[2];
return event;
});
})();

 

標準の自動計算で(一部?)可能だと思います。

https://www.r3it.com/blog/202009-oki-calculate-the-working-time

コメントありがとうございます。

勤務時間の計算までは実現できています(サンプルをつなぎ合わせただけですが)

最後、

event.record.残業時間合計.value = sum[1];
event.record.深夜残業時間合計.value = sum[2];

にIF文条件として、「曜日」が「土」「日」「祝日」の場合は

event.record.休日出勤時間合計.value = sum[1];

そうでない場合は

event.record.残業時間合計.value = sum[1];

 

という部分だけ実現したいです。

つまり IF文条件、「曜日」が「土」「日」「祝日」の場合は

この書き方が上手くいきません

Kintoneの自動計算フィールドだと、

IF(
OR(曜日="土", 曜日="日", 曜日="祝日"),
休日出勤時間合計,
残業時間合計
)

Javascriptだと

const WEEK_DAY = event.record.曜日.value;
if(['土','日','休日'].includes(WEEK_DAY)){
//「曜日」が「土」「日」「祝日」の場合やること。
}else{
//そうでないと、やること。
}

私も自動計算フィールドで困ったことがあります。sum配列には正しい値が入っているかどうか先だと思います。

以下のコードでチェックしましょう。

**console.log(sum);**

Lorenz Ras

度々ありがとうございます。上手く動作させることができました。

初歩的な質問をしてしまい申し訳ありません。

とても助かりました!