お世話になっております。
初期年度のデータを登録後、「一括登録」ボタンを押すことで、来年度のレコードの自動作成を試みております。今のところ、このコミュニティで色々と勉強させて頂いたお陰様で、来年度(年度+1年、基準日+1年)のレコードは自動作成できております。
⇊ただ、例えば「ストック期間」についてですが、その出来上がったレコードを再度編集を押さないと自動計算ができなくて・・
このような場合「一括登録」後に「一括更新」にするという考えになるでしょうか?それとも「一括登録」の際に、ストック期間を求めるコードも加えるでしょうか?
コードは以下のようになっております。まだまだ初心者で、知識が浅くて詰まっております。どうかご指導いただけたら幸いです。
どうぞよろしくお願い致します。
①ストック期間計算コード
(function() {
"use strict";
kintone.events.on([
"app.record.edit.change.納品日","app.record.create.change.納品日","app.record.index.edit.change.納品日",
"app.record.edit.change.基準日","app.record.create.change.基準日","app.record.index.edit.change.基準日",
"app.record.create.show","app.record.edit.show","app.record.index.edit.show","app.record.detail.show",
"app.record.create.submit", "app.record.edit.submit","app.record.index.edit.submit",
], function(event) {
var record = event.record;
moment.locale("ja");
if (["app.record.create.show","app.record.edit.show","app.record.index.edit.show"].indexOf(event.type) >= 0) {
// フィールド制御
record["ストック期間"]["disabled"] = true;
//基準日=今日
//record["基準日"].value = moment().format("YYYY-MM-DD");
}
record["ストック期間"].value = ageCal(record["納品日"].value,record["基準日"].value);
return event;
});
// ストック期間計算
function ageCal(wkDate, wkReferenceDate) {
if (wkDate && wkReferenceDate) {
var mDate = moment(wkDate);
var mReferenceDate = moment(wkReferenceDate);
if (!mReferenceDate.isBefore(moment(mDate), "day")) {
var years = mReferenceDate.diff(moment(mDate), "years");
var months = mReferenceDate.diff(moment(mDate), "months") % 12;
return years + "年 " + months + "ヶ月";
}
}
return "";
}
})();
②一括登録コード
(function() {
'use strict';
var event = [
'app.record.index.show'
];
kintone.events.on(event, function(event) {
var records = event.records;
// ヘッダースペース要素の取得
var headerSpace = kintone.app.getHeaderMenuSpaceElement();
// ボタン要素の作成
var button = document.createElement('input');
button.value = '一括登録';
button.type = 'button';
// ボタンがクリックされた時の処理
var submit = function() {
// PUTするRecordsを用意する。
var put_records = [];
// レコード一覧のイベントで取得したレコードそれぞれに対して登録の処理を行う
records.forEach(function(data) {
var nendo = parseInt(data['年度'].value ,10) + 1;
var day = moment(data['基準日'].value)
.add(1, 'year')
.format('YYYY-MM-DD');
var record = {
'年度':{ 'value': nendo},
'基準日':{ 'value': day},
};
// レコードそれぞれに対して決定するフィールドを定義
record['商品'] = data['商品'];
record['単価'] = data['単価'];
record['納品日'] = data['納品日'];
console.log(data)
put_records.push(record);
});
var param = {
'app': kintone.app.getId(),
'records': put_records
};
kintone.api(kintone.api.url('/k/v1/records', true), 'POST', param, function(resp) {
// success
alert('来年度へ登録成功しました。');
console.log(resp);
}, function(error) {
// error
console.log(error);
});
};
// ボタンをヘッダースペースに追加
headerSpace.appendChild(button);
// ボタンのクリックイベントに処理を登録
button.onclick = submit;
});
// });
})();