ken_nogi/Pleasanter/営業積算システム/docs/新・営業積算システム仕様書_分割/045_新・営業積算システム仕様書_別記資料スクリプト(15/28).md
Kenichiro NOGI ce58cb4be4 初回コミット: dev配下(NodeSrv/Pleasanter等)をGitea管理下に統合
GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。
NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは
別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter
インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-04 15:37:06 +09:00

3.8 KiB
Raw Blame History

別記資料 スクリプトScripts全文 1528

// ...(前ファイルからの続き)
        if (item.resolveUser) fromVal = resolveUserName(fromVal);
        let toVal = $('#Results_' + item.to).val();

        //値に差異がある場合のみ転記する
        if (fromVal !== toVal) {
            $p.set($('#Results_' + item.to), fromVal);
        }
    });
}

//----------------------------------------------------------------------
//依頼者(ClassC単一選択)と担当者・CC一覧(Class153複数選択)をマージし、
//重複を除いてClassY依頼者・担当者・CC一覧、複数選択・非表示へ保存する
$p.mergeClassY = function () {
    let classCVal = $('#Results_ClassC').val();
    let class153Vals = $('#Results_Class153').val() || [];

    let merged = [];
    if (classCVal) merged.push(classCVal);
    class153Vals.forEach(function (v) {
        if (v && !merged.includes(v)) merged.push(v);
    });

    $p.set($('#Results_ClassY'), JSON.stringify(merged));
}

//----------------------------------------------------------------------
//返信予定日 Date085 変更イベントを検知して実行
$p.on('change', 'Date085', function () {
    if ($('#Results_Date085').val() != '') {
        console.log('返信予定日が変更されました。');
        $p.replaceDate085();
    }
});

//Description082には「直前に本文へ置換した返信予定日の値」をキーとして保持する
//(レコード保存・再読込後も同じ値が残るため、次回変更時に古い値だけを新しい値へ置換できる)
$p.replaceDate085 = function () {
    if ($('#Results_Date085').val() != '') {
        console.log('返信予定日が変更されました。');
        //返信予定日(今回の新しい値)を取得
        let date085 = $('#Results_Date085').val();

        //遅延理由メッセージを取得
        let content081 = $('#Results_Description081').val();
        //前回置換に使った返信予定日キーをDescription082から取得
        let content082 = $('#Results_Description082').val();

        let newContent;
        if (content082 == '') {
            //初回:プレースホルダー(%返信予定日%)を返信予定日に置換
            newContent = content081.replace(/%返信予定日%/g, date085);
        } else {
            //2回目以降前回の返信予定日キーを今回の返信予定日に置換
            newContent = content081.split(content082).join(date085);
        }

        //遅延理由を再設定する
        $p.set($('#Results_Description081'), newContent);

        //今回の返信予定日を次回のキーとしてDescription082に保存
        $p.set($('#Results_Description082'), date085);
    }
}

//----------------------------------------------------------------------
//日付文字列を「年/月/日(曜日)」形式に整形する(例:"2026/06/25" → "2026/6/25(木)"
function formatDateWithWeekday(dateStr) {
    if (!dateStr) return '';
    let datePart = dateStr.split(' ')[0];   //時刻が付いている場合は日付部分のみ取り出す
    let parts = datePart.split('/');
    if (parts.length < 3) return datePart;   //想定外の形式の場合はそのまま返す

    let year = parseInt(parts[0], 10);
    let month = parseInt(parts[1], 10);
    let day = parseInt(parts[2], 10);
    let dateObj = new Date(year, month - 1, day);

    let weekdays = ['日', '月', '火', '水', '木', '金', '土'];
    let weekday = weekdays[dateObj.getDay()];

    return year + '/' + month + '/' + day + '(' + weekday + ')';   //例2026/6/25(木)
}

scripts/2_02_添付ファイルDL.js.js