/* @config : next999.json @filename : ${psFileBasename} @title : 1.シフト情報保存 @name : 1.シフト情報保存 @siteIds : 310514 @siteTitles : イオン多摩平シフト希望 @disabled: false */ $p.events.on_editor_load = function () { if ($p.action() == 'new') { let now = new Date(); let nextMonth = new Date(now.getFullYear(), now.getMonth() + 1, 1); let yyyy = nextMonth.getFullYear(); let mm = String(nextMonth.getMonth() + 1).padStart(2, '0'); let ymStr = `${yyyy}年${mm}月`; $p.set($('#Results_ClassA'), ymStr); } //任意の処理 setupCalendar(); } //保存前野処理 $p.events.before_validate = function (args) { //曜日判定 let week = ['月', '火', '水', '木', '金', '土', '日']; if ($('#Results_ClassC').val().includes('すべて可')) { $p.set($('#Results_ClassC'), JSON.stringify('["すべて可"]')); } else if (isSubset($('#Results_ClassC').val(), week)) { $p.set($('#Results_ClassC'), JSON.stringify('["すべて可"]')); } else if ($('#Results_ClassC').val().length === 0) { $p.set($('#Results_ClassC'), JSON.stringify('["すべて可"]')); } /* //最低勤務時間 if ($('#Results_NumA').val() == '0') { $p.set($('#Results_ClassG'), "月あたり最低勤務時間:指定無し"); } else { $p.set($('#Results_ClassG'), "月あたり最低勤務時間:" + $('#Results_NumA').val() + "時間"); } //最大勤務時間 if ($('#Results_NumB').val() == '0') { $p.set($('#Results_ClassH'), "月あたり最大勤務時間:指定無し"); } else { $p.set($('#Results_ClassH'), "月あたり最大勤務時間:" + $('#Results_NumB').val() + "時間"); } */ //曜日 let classCStr = "希望曜日:" + $('#Results_ClassC').val().join(','); //時間帯 let classD1 = $('#Results_ClassD').val(); let classD2; let classDStr; if (classD1.includes('いつでも')) { $p.set($('#Results_ClassD'), JSON.stringify('["いつでも"]')); classDStr = "時間:いつでも"; } else if (classD1.length === 0) { $p.set($('#Results_ClassD'), JSON.stringify('["いつでも"]')); classDStr = "時間:いつでも"; } else { classD2 = convertToNumbers(classD1); classDStr = "時間:" + formatRanges(classD2); } //カレンダーチェック内容保存 let checked = getCheckedDates(); $p.set($('#Results_ClassW'), JSON.stringify(checked)); //個別指定 let classWArray = checked.map(date => Number(date.split('-')[2])); let classWStr = "個別希望日:" + classWArray.join(','); $p.set($('#Results_ClassE'), classWArray.join(', ')); if (classWArray.length === 0) { classWStr = "個別希望日:なし"; } let list = []; if (classCStr) list.push(classCStr); if (classDStr) list.push(classDStr); if (classWStr) list.push(classWStr); let classZStr = list.join('/'); //希望シフトの内容をすべて連結して保存 $p.set($('#Results_ClassZ'), classZStr); //年月を保存 $p.set($('#Results_ClassY'), $('#Results_ClassA').val()); //名前を保存 $p.set($('#Results_ClassX'), $('#Results_ClassB option:selected').text()); } //配列ABを比較 function isSubset(A, B) { return B.every(value => A.includes(value)); } //数字範囲を省略して返却 function formatRanges(arr) { arr.sort((a, b) => a - b); //配列を昇順にソート let result = []; let start = arr[0], end = arr[0]; for (let i = 1; i < arr.length; i++) { if (arr[i] === end + 1) { //連続する数値の場合、範囲を拡張 end = arr[i]; } else { //連続が途切れたら結果に追加し、新しい範囲を開始 result.push(start === end ? `${start}` : `${start}-${end}時`); start = end = arr[i]; } } //最後の範囲を追加 result.push(start === end ? `${start}` : `${start}-${end}時`); return result.join(","); } //配列の中身をすべて数値に置き換える function convertToNumbers(arr) { return arr.map(value => Number(value)); }