日付の自動表示

【実現したいこと】

請求書(日付)フィールドに日付が入ったら(登録初回だけでなく、修正含む)

入金(日付)フィールドに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

参考記事をご教示いただきありがとうございます。

また、条件演算子を使い簡潔に記すことができました。

この度は、ありがとうございました。