ken_nogi/pleasanter/develop/#リフォームラボ/■イオン多摩平シフト希望/sites/scripts/1.シフト情報保存.js
Kenichiro NOGI 7176dc33ec pleasanter
2025-07-10 10:15:35 +09:00

141 lines
4.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
@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));
}