新規投稿
フォローする

kintoneカスタマイズで、holiday_jp-jsを使って営業日/休業日を判定する

holiday_jp-jsを使って営業日/休業日を判定するサンプルを作成しました。

サンプル

入力した日付が休業日かどうかを判定し,その結果を別の文字列(1行)フィールドに表示します.

フォーム設定

コード

下記JSを順に読み込みます.

  • holiday_jp.min.js (こちらからダウンロード)
  • sample.js (下記参照)

・sample.js

(function () {
  "use strict";
  var customHolidays = [{ // 会社独自の休日設定
    date: '1/2',
    name: '年末年始休暇'
  }, {
    date: '1/3',
    name: '年末年始休暇'
  }, {
    date: '12/29',
    name: '年末年始休暇'
  }, {
    date: '12/30',
    name: '年末年始休暇'
  }, {
    date: '12/31',
    name: '年末年始休暇'
  }];

  function getCustomHoliday(date) {
    var formattedDate = (date.getMonth() + 1) + '/' + date.getDate();
    return customHolidays.find(function(customHoliday){
      return customHoliday.date === formattedDate
    });
  }

  function isWeekday(date) {
    return (
      !holiday_jp.isHoliday(date) &&
      !getCustomHoliday(date) &&
      date.getDay() !== 0  && date.getDay() !== 6
    );
  }

  function getDayName(date) {
    var holidays = holiday_jp.between(date, date);
    if(holidays.length) return holidays[0].name;
    var customHoliday = getCustomHoliday(date);
    if(customHoliday) return customHoliday.name;
    var day = date.getDay();
    if(day === 0) return '日曜日';
    if(day === 6) return '土曜日';
    return '';
  }

  function updateDayInfoField(event) {
    var date = new Date(event.record['date'].value);
    var dayInfoString = '';
    if (isWeekday(date)) {
      dayInfoString = '営業日';
    } else {
      var dayName = getDayName(date);
      dayInfoString = '休業日' + '(' + dayName + ')';
    }
    event.record['dayInfo'].value = dayInfoString;
  }

  function updateDateField(event) {
    var date = new Date(event.record['date'].value);
    if(!isWeekday(date) && confirm('指定日が休業日です.直前の営業日にしますか?')) {
      while(!isWeekday(date)) {
        date.setDate(date.getDate() - 1);
      }
      event.record['date'].value = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
    }
  }

  // レコード作成/編集:祝日名などをdayInfoフィールドに代入
  kintone.events.on(['app.record.edit.change.date', 'app.record.create.change.date'], function (event) {
    // updateDateField(event); // 指定日が休業日なら直前の営業日にする
    updateDayInfoField(event);
    return event;
  });

  // レコード作成/編集:dayInfoフィールドを編集不可にする
  kintone.events.on(['app.record.edit.show', 'app.record.create.show'], function (event) {
    event.record['dayInfo'].disabled = true;
    updateDayInfoField(event);
    return event;
  });
})();

「指定日が休業日なら直前の営業日にする」処理を追記しました. 70行目のコメントアウト部を有効にすると実装できます.

参考記事

1

0件のコメント

サインインしてコメントを残してください。