一か月分の出勤データの内、休みの日(データの無い日付)の日付の空データを自動的に登録したい。

従業員単位での日報登録アプリにて、タイトルの通りデータ登録がなかった日付を判別してその日の日付での空データを月末集計時に登録させられないかなと模索中です。

 

例)田中太郎     2021-09-20    内勤  8:00~17:00

       田中太郎     2021-09-21    内勤  8:00~17:00

       田中太郎     2021-09-24    内勤  8:00~17:00

とあった場合、

       田中太郎     2021-09-22

       田中太郎     2021-09-23

というデータを出来ればワンボタンで登録するような事は出来ませんでしょうか。

    

ジェシーおいたんさん

こんにちは

 

標準機能ではできないので、JavaScriptでREST APIの「GET」「POST」を組み合わせてみてはいかがでしょうか。

①当月の登録済みレコードをGET

②不足する日付をピックアップ

③不足する日付のレコードをPOST

koichiさん
お世話になってます。

大変恐縮ですが、サンプルコード等頂けると大変助かります。

ジェシーおいたんさん

 

レコード一覧画面にボタンを作成し、不足する日付を登録するコードです。

①GET APIにより、氏名が自分かつ今月の登録済みレコードを取得します。

②今月すべての日付とGETしたレコードの日付を比較し、不足する日付をピックアップします。

③POST APIにより、不足日のレコードを登録します。

※POST用レコード情報は、氏名と日付しか指定していませんが、必要に応じて変更ください。

 

各APIの仕様は、本デベロッパーサイトのREST APIの記事をご参照ください。

(function() {

'use strict';

// レコード詳細画面表示時
kintone.events.on('app.record.index.show', function(event) {

// ボタン
let postButton = document.createElement('button');
postButton.innerHTML = '不足日を登録';
kintone.app.getHeaderMenuSpaceElement().appendChild(postButton);

// ボタンクリック時の処理
postButton.addEventListener('click', function() {

if (!confirm('実行しますか?')) {
return event;
}

// 氏名が自分かつ今月のレコードをGET
let getParams = {
app: kintone.app.getId(),
query: '氏名 in ("' + kintone.getLoginUser().code + '") and 日付 = THIS_MONTH() order by 日付 asc'
};

kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', getParams).then(function(resp) {
let dt = new Date(); // 今日
let lastDate = new Date(dt.getFullYear(), dt.getMonth() + 1, 0).getDate();	// 今月末日

// 今月すべての日付(YYYY-MM-DD形式)
let allDates = [];
for (let i = 1; i < lastDate + 1; i++) {
allDates.push(dt.getFullYear() + '-' + (dt.getMonth() + 1) + '-' + ('00' + i).slice(-2));
}

// 登録済みの日付
let existDates = [];
for (let i = 0; i < resp.records.length; i++) {
existDates.push(resp.records[i].日付.value);
}

// 不足する日付
let lackRecords = [];
for (let i = 0; i < allDates.length; i++) {
// 登録済みに含まれない日付であれば配列に格納
if (existDates.indexOf(allDates[i]) == -1) {
// POST用レコード情報
lackRecords.push({
氏名: {
value: [{ code: kintone.getLoginUser().code }]
},
日付: {
value: allDates[i]
}
});
}
}

// 不足する日付のレコードをPOST
let postParams = {
app: kintone.app.getId(),
records: lackRecords
};

kintone.api(kintone.api.url('/k/v1/records.json', true), 'POST', postParams).then(function(resp) {
alert('不足する日付のレコードを登録しました。');
location.reload();
return event;

}).catch(function(error) {
console.log(error);
return event;
});

}).catch(function(error) {
console.log(error);
return event;
});

});

});

})();