【実現したいこと】
請求書(日付)フィールドに日付が入ったら(登録初回だけでなく、修正含む)
入金(日付)フィールドに2か月後の月末を自動表示
【試したコード】
(function() {
"use strict";
moment.locale('ja');
kintone.events.on(['app.record.create.show','app.record.edit.show'], function(event) {
var record = event.record;
var invoice = record.請求書.value;
var payment = moment(invoice,"YYYY-MM-DD").add(2,'month').endOf('month');
record.入金.value = payment;
return event;
});
})();
【エラー表示】
修正点をご教授いただければ幸いです。
よろしくお願いいたします。
エラーになるのは、payment が ‘YYYY-MM-DD’ 形式になっていないからです。
修正点としては、下記が考えられます。
・‘YYYY-MM-DD’ 形式に変換
・請求書が未入力の場合の入金の設定値を ’’ に
・請求書項目が変更された場合のイベント追加
・日付処理をmoment から luxon に変更
※Moment.js はメンテナンスモードになりましたので、これからカスタマイズする場合は、luxon が推奨されています。
参考 Luxon を使って kintone の日付や日時フィールドのフォーマットをカスタマイズする
rex0220 様
ご教授いただきありがとうございます。
下記のように変更し、希望する動作をするようになりました。
kintone.events.on(['app.record.create.show','app.record.edit.show',
'app.record.create.change.請求書','app.record.edit.change.請求書'], function(event) {
var record = event.record;
var invoice = record.請求書.value;
// Luxonを使って2か月後を計算、日付をフォーマット
var date = luxon.DateTime.fromISO(invoice);
var payment = date.plus({ month: 2 }).endOf('month').toFormat('yyyy-MM-dd');
// 入金日付をセットする
record.入金.value = payment;
コードに、気になる点がございましたらご指摘いただけますと幸いです。
よろしくお願いいたします。
請求書が未入力の時は、エラーになる気がします。
あと入金をマニュアル入力しないのであれば、入力不可にしてもいいかも。
rex0220 様
続けてのご教授ありがとうございます。
下記追記いたしました。
// 請求書が未入力の時
if ( invoice === undefined) {
record.入金.value = "";
} else {
判定処理はこちらでよろしいでしょうか。
現状エラー表示はされません。
よろしくお願いいたします。
未入力については、下記が参考になると思います。
小技)undefined と 空文字のスマートな if 文判定
こんな書き方もあります。
let payment = invoice ? luxon.DateTime.fromISO(invoice).plus({months:2}).endOf(‘month’).toFormat(‘yyyy-MM-dd’) : ‘’;
IE11 のサポートが6月で終了するので、これからは IE11 を考慮せずにすみます。
基本的な書き方は下記が参考になると思います。
JavaScriptの便利な書き方
rex0220 様
参考記事をご教示いただきありがとうございます。
また、条件演算子を使い簡潔に記すことができました。
この度は、ありがとうございました。