ken_nogi/Pleasanter/営業積算システム/docs/新・営業積算システム仕様書_分割/053_新・営業積算システム仕様書_別記資料スクリプト(23/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

4.7 KiB
Raw Blame History

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

// ...(前ファイルからの続き)
        return `▷ [${file.Name}](/pleasanter/binaries/${file.Guid}/show) [▶DL](/pleasanter/binaries/${file.Guid}/download)`;
    });

    $p.set($('#Results_Description062'), lines.join('  \n'));
}

//Description062の下に、見積回答ファイル(Attachments101)一括DLボタンを配置する
//DLファイル名は「親番子番_見積回答ファイル」。Attachments101が1件も無い場合は生成しない
$p.ex.estimateAttachmentsDLButton = function () {
    if ($('#estimateAttachmentsDL').length) {
        return; //二重生成防止
    }

    let attachData = [];
    try {
        attachData = JSON.parse($p.getControl('Attachments101').val());
    } catch (e) {
        attachData = [];
    }
    if (!attachData.length) {
        return; //添付ファイルが1件も無い場合は表示しない
    }

    let classA = $('#Results_ClassA').val(); //親番
    let classB = $('#Results_ClassB').val(); //子番
    let zipFilename = classA + classB + '_見積回答ファイル';

    let div = document.createElement('div');
    div.style.margin = '5px';
    div.style.float = 'right';
    let button = document.createElement('button');
    button.type = 'button';
    button.id = 'estimateAttachmentsDL';
    button.innerHTML = '一括DL';
    button.setAttribute('onclick', 'dlAllFiles("Attachments101","' + zipFilename + '")');
    div.append(button);
    $('#Results_Description062Field').after(div);
    $('#estimateAttachmentsDL').button({
        icon: 'ui-icon-disk'
    });
}

//「①物件基本情報へ戻る」ボタンをコマンド欄(#MainCommandsの一番左に移動する
//Processes側のId構成に依存しないよう、ボタンラベル文字列で対象を特定する
$p.ex.moveBackButtonToFirst = function () {
    let $backButton = $('button[id^="Process_"]').filter(function () {
        return $(this).text().replace(/^\s+/, '').trim() === '①物件基本情報へ戻る';
    });
    if ($backButton.length) {
        $('#MainCommands').prepend($backButton);
    }
}

//質疑回答メッセージの削除(チェックの入った履歴を無効化)
$p.ex.messageDelete = function () {
    let messageData = JSON.parse($('#Results_Description071').val());

    $('input[name="messageDeleteCheck"]:checked').each(function (index) {
        let messageID = $(this).val();
        messageData = messageData.map(item => {
            if (item.messageID === messageID) {
                return {
                    ...item,
                    enabled: false,
                    type: item.type + '.Disabled'
                };
            }
            return item;
        });
    });
    $p.set($('#Results_Description071'), JSON.stringify(messageData));

    $p.ex.setMyMessage('new-status-green', '選択した質疑回答メッセージを削除しました');
}

//ボタンラベル文字列に一致する、現在表示されているプロセスボタンをクリックする
//Processes側のId構成・件数に依存しないようにするための共通ヘルパー
$p.ex.clickProcessByName = function (name) {
    let target = $('button[id^="Process_"]').filter(function () {
        return $(this).text().replace(/^\s+/, '').trim() === name;
    }).first();

    if (target.length) {
        target.click();
    } else {
        $p.ex.setMyMessage('new-status-red', '現在の状態では「' + name + '」を実行できません');
    }
}

//ボタンラベル文字列に一致する、現在表示されているプロセスボタンが実在するかどうかを判定する
//Depts・View条件によるプロセスボタンの表示制御にそのまま追従させるため。deptコード等の直接判定はしない
$p.ex.processButtonExists = function (name) {
    return $('button[id^="Process_"]').filter(function () {
        return $(this).text().replace(/^\s+/, '').trim() === name;
    }).length > 0;
}

//processScriptプロセスボタン共通ディスパッチャは04_プロセス処理スクリプト.jsへ統合済み。
//本ファイルには実処理関数saveQuestionMessage等のみ残す。

//質疑回答期日を計算本日からholidays(#HolidaysList)を除いたN営業日後
$p.ex.calcBusinessDeadline = function (businessDays) {
    let holidays = $('#HolidaysList').length > 0 ? JSON.parse($('#HolidaysList').val()) : [];

    let limitDate = new Date();
    limitDate.setHours(0);
    limitDate.setMinutes(0);
    limitDate.setSeconds(0);

    let count = 0;
    while (count < businessDays) {
        limitDate.setDate(limitDate.getDate() + 1);
// ...(次ファイルへ続く)