チェックボックスの有無により、依頼日から締切までの日付の制御について

はじめまして。お世話になります。
プログラムについては、人の書いたものをいじって変更する程度の知識となります。
そのため、お力を貸して頂けますと幸いです。

>やりたいこと
パターン1
・ステータス1(チェックボックス)が空白の場合は、依頼日から「+14日後」の日付が締切の日付が記載される
・締切の日付をクリックすると、締切の日付は変更できる

パターン2
・ステータス1(チェックボックス)が「完了」の場合は、依頼日を変更しても締切の日付は記載されている状態になる

※最終的には、画像のセットを複数セット作成し、使用したいと思っております。

>現状
過去のコミュニティを参考に下記の内容はできたのですが、チェックボックスでのステータス管理が入ると、うまくできない状態です。
・依頼日から「+14日後」の日付が締切の日付が記載される
・締切の日付をクリックすると、締切の日付は変更できる

(function(){
"use strict";

var increaseDates = function(originDate, dates){
var targetDay = new Date((originDate.getTime() + dates*24*60*60*1000));
return targetDay.getFullYear()+'-'+('0'+(targetDay.getMonth()+1)).slice(-2)+'-'+('0'+targetDay.getDate()).slice(-2);
}
kintone.events.on([
'app.record.create.show',
'app.record.edit.show',
'app.record.create.change.依頼日',
'app.record.create.change.ステータス1',
'app.record.create.change.締切',
'app.record.edit.change.依頼日',
'app.record.edit.change.ステータス1',
'app.record.edit.change.締切',
], function(event){

if(event.record.past.value !== '') return;

  event.record.締切.value = increaseDates(new Date(event.record.依頼日.value), 14);

return event;
});

})();

 

何卒よろしくお願いいたします。

katu さん

パターン2
・ステータス1(チェックボックス)が「完了」の場合は、依頼日を変更しても締切の日付は記載されている状態になる

この「依頼日を変更しても締切の日付は記載されている状態になる」の部分がよく理解できなかったのですが、
チェックボックスにチェックが入っている(=完了にチェックが入っている)場合は、
「締切」フィールドの編集を不可にしたいという意味であっていますか?

上記の認識であっている場合、フィールド値変更イベントを複数書いているのでより詳細な条件分岐が必要かと思います。

kzzzさん、コメント頂き、ありがとございます。

>チェックボックスにチェックが入っている(=完了にチェックが入っている)場合は、
「締切」フィールドの編集を不可にしたいという意味であっていますか?
kzzzさんのおっしゃる認識で問題ございません。

なるほど。。。。より詳細な条件分岐が必要なのですね。。。

katu さん

条件分岐するといいと思います。
アプリの使い方にもよるかと思いますが、まずは以下の条件分岐でソースコードを書いてみて
動くかどうか試してみるのはいかがでしょうか。

①「ステータス 1」というチェックボックスフィールドの値が変わった時のイベントで
① - 1 チェックがあるとき
「締切」フィールドに「依頼日」フィールドに +14 日した日付を入力する
① - 2 チェックがないとき
「締切」フィールドの編集を不可にする

kazzさん、ありがとうございます!

kazzさんに条件分岐を改めて書いて頂いて、見直してソースコードを書いてみました。
下記のようにコードができあがりましたが、問題点がいくつが出てきてしまいました。。。

>問題点
①新規レコードを入力した時、添付画像のようなエラーが表示される
②「締切」フィールドの編集不可の動きが、チェックボックスにチェック⇢依頼日を変更でしか編集不可にならない
③「締切」フィールドの編集不可から編集可の動きが、チェックボックスにチェック外す⇢依頼日を変更でしか編集可になる

コードのどこがおかしいか、ご助言頂けますと幸いです。

(function() {
"use strict";

//依頼日変更コード
var increaseDates = function(originDate, dates){
var targetDay = new Date((originDate.getTime() + dates*24*60*60*1000));
return targetDay.getFullYear()+'-'+('0'+(targetDay.getMonth()+1)).slice(-2)+'-'+('0'+targetDay.getDate()).slice(-2);


}

//レコードの追加、編集、詳細画面で適用する
var events = ['app.record.detail.show',
'app.record.create.show',
'app.record.create.change.ステータス1',

'app.record.create.change.依頼日',
'app.record.create.change.締切',

'app.record.edit.show',

'app.record.edit.change.ステータス1',

'app.record.edit.change.依頼日',
'app.record.edit.change.締切'
];

kintone.events.on(events, function(event) {

var record = event.record;
//ステータス1項目が選択された場合は「締切」フィールドの変更はできない。

//ステータス1 締切日設定
var status_1 = record['status_1']['value'];

if (status_1.length === 0) {
event.record.LimitDay_1.value = increaseDates(new Date(event.record.依頼日.value), 14);
event.record.LimitDay_1.disabled = false;

     }else{
event.record.LimitDay_1.disabled = true;

}

return event;

});

})();

katu さん

画面のスクショありがとうございます。カスタマイズしたいアプリのイメージがつきやすくなりました。

ソースコードを確認してみたのですが、スクショにある 3 つのフィールドの設定はどうなっていますでしょうか?

①「依頼日」フィールドは日付フィールドで、フィールドコードは「依頼日」
②「ステータス」フィールドはチェックボックスフィールドで、フィールドコードは「status_1」「ステータス1」どちらでしょうか
③「締切」フィールドは日付フィールドで、フィールドコードは「締切」「LimitDay_1」どちらでしょうか

今回、利用するイベントは以下のものだと思います。
    - レコード追加画面のフィールド値変更時イベント
    - レコード編集画面のフィールド値変更時イベント
設定しているフィールドコードを正しく記載できてますか?もし合っている場合はそのままで大丈夫です。
具体的には以下の部分です。

var events = [
'app.record.detail.show',
'app.record.create.show',
'app.record.create.change.ステータス1',

'app.record.create.change.依頼日',
'app.record.create.change.締切',

'app.record.edit.show',

'app.record.edit.change.ステータス1',

'app.record.edit.change.依頼日',
'app.record.edit.change.締切'
];

kazzさん、ありがとうございます

3つのフィールドについて、設定は下記のとおりになります。

①「依頼日」フィールドは日付フィールドで、フィールドコードは「依頼日」
⇢そのとおりになります。

②「ステータス」フィールドはチェックボックスフィールドで、フィールドコードは「status_1」「ステータス1」どちらでしょうか
⇢フィールドはチェックボックスフィールド、フィールドコードは「status_1」になります

③「締切」フィールドは日付フィールドで、フィールドコードは「締切」「LimitDay_1」どちらでしょうか
⇢日付フィールドで、フィールドコードは「LimitDay_1」になります。

②と③のフィールドコードが間違っていたため、下記の通りに修正いたしました。
結果的に、問題点②と③は、解決いたしました。
ありがとうございます!
残りの1については、変化なしになります。

>問題点
①新規レコードを入力した時、添付画像のようなエラーが表示される

問題点1に付きまして、再度アドバイスを頂けましたら、幸いです。

▼現状のコード一覧となります。

(function() {
"use strict";

//依頼日変更コード
var increaseDates = function(originDate, dates){
var targetDay = new Date((originDate.getTime() + dates*24*60*60*1000));
return targetDay.getFullYear()+'-'+('0'+(targetDay.getMonth()+1)).slice(-2)+'-'+('0'+targetDay.getDate()).slice(-2);


}

//レコードの追加、編集、詳細画面で適用する
var events = [
  'app.record.detail.show',
  'app.record.create.show',
  'app.record.create.change.status_1',

  'app.record.create.change.依頼日',
  'app.record.create.change.LimitDay_1',

  'app.record.edit.show',

  'app.record.edit.change.status_1',

  'app.record.edit.change.依頼日',
  'app.record.edit.change.LimitDay_1'
];

kintone.events.on(events, function(event) {

var record = event.record;
//ステータス1項目が選択された場合は「締切」フィールドの変更はできない。

//ステータス1 締切日設定
var status_1 = record['status_1']['value'];

if (status_1.length === 0) {
event.record.LimitDay_1.value = increaseDates(new Date(event.record.依頼日.value), 14);
event.record.LimitDay_1.disabled = false;

     }else{
event.record.LimitDay_1.disabled = true;

}

return event;

});

})();

katu さん

フィールドコードを教えてくださりありがとうございます。

私のほうで、3つのフィールドと添付してくださったソースコードを適用したアプリを作成してみましたが、
同じようなエラーを再現することができませんでした。
コンソールにも特にエラーが出ていない状況です。

ただ、日付フィールドの設定で「レコード登録時の日付を初期値にする」にチェックをせず、
初期値を設定しない場合、同じエラーが出ました。

原因としては、イベントが発火した際に、日付フィールド2つに値が入っていないため、
14日後の日付を計算できない、みたいな状況が発生しているのではないかと考えます。

対策としては、日付フィールドの設定で初期値を設定しておくことがいちばん手っ取り早そうです。

kzzzさん、ご確認ありがとうございます。

先程、日付フィールドに初期値を設定しましたところ、エラーが解除されました!
ありがとうございます!

これにて、すべての問題がクリアとなりました!
長い間、本当にありがとうございます!!