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

5.0 KiB
Raw Permalink Blame History

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

// ...(前ファイルからの続き)
        $('#Results_Class063').val(),   //CC3
        $('#Results_Class064').val(),   //CC4
    ].forEach(function (v) {
        if (v && !usersCC.includes(v)) usersCC.push(v);
    });

    let mergeValueCC = JSON.stringify(usersCC);   //CC一覧のマージ対象項目をJSON文字列化
    let class152 = JSON.stringify($('#Results_Class152').val());   //CC一覧

    //前と内容が同じ場合は上書きしない
    if (mergeValueCC !== class152) {
        $p.set($('#Results_Class152'), mergeValueCC);   //CC一覧
    }

    //担当者一覧・CC一覧のマージ重複除去
    let usersAll = [];
    users1.concat(usersCC).forEach(function (v) {
        if (v && !usersAll.includes(v)) usersAll.push(v);
    });

    let mergeValueAll = JSON.stringify(usersAll);   //担当者一覧・CC一覧のマージ対象項目をJSON文字列化
    let class153 = JSON.stringify($('#Results_Class153').val());   //担当者・CC一覧

    //前と内容が同じ場合は上書きしない
    if (mergeValueAll !== class153) {
        $p.set($('#Results_Class153'), mergeValueAll);   //担当者・CC一覧
    }

    //登録者(依頼者)担当者・CC一覧をマージしてClass154依頼者・担当者・CC一覧へ保存
    $p.mergeClass154(usersAll);
}

//----------------------------------------------------------------------
//重複を除いてClass154依頼者・担当者・CC一覧、複数選択・非表示へ保存する
$p.mergeClass154 = function (usersAll) {
    let classBVal = $('#Results_ClassB').val();   //登録者(依頼者)

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

    let mergeValue = JSON.stringify(merged);
    let class154 = JSON.stringify($('#Results_Class154').val());   //依頼者・担当者・CC一覧

    //前と内容が同じ場合は上書きしない
    if (mergeValue !== class154) {
        $p.set($('#Results_Class154'), mergeValue);   //依頼者・担当者・CC一覧
    }
}

//----------------------------------------------------------------------
//マスターシート・エリア・契約ブランド・契約営業所連携
//
//AutoPostBackLinks設定によるサーバー側自動転記は処理負荷を避けるため全廃し、
//クライアントスクリプトで転記を行う。
//  ・ClassYマスターシート: 選択のたびに$p.apiGetでその場でレコード取得対象レコードが多いため
//  ・Class022/023/031エリア・契約ブランド・契約営業所: BeforeOpeningPageのServerScriptが
//    事前に全件取得しhiddenへ格納済みのデータをクライアント側で逆引きするだけapiGetは呼ばない
//
//上書きルール(共通、重複チェックキーも含め全転記先に適用):
//  ・未選択 → 選択:転記先に値があっても上書きしない(先に手入力していた値を尊重)
//  ・選択済み → 別選択:転記先に値があっても上書きする(マスタを変えたら再転記)
//
//ClassYマスターシート自体は、登録完了(Status=200)以降かつ既に選択済みの場合のみ
//選択変更不可にする(未選択のままなら登録完了後も選択可能にする、$p.toggleClassYLock参照

//ServerScriptが埋め込んだhiddenのマスタデータエリア/契約ブランド/契約営業所)
let areaMasterData = {};
let brandMasterData = {};
let officeMasterData = {};

$p.loadStaticMasters = function () {
    areaMasterData = $('#areaMaster').val() ? JSON.parse($('#areaMaster').val()) : {};
    brandMasterData = $('#brandMaster').val() ? JSON.parse($('#brandMaster').val()) : {};
    officeMasterData = $('#officeMaster').val() ? JSON.parse($('#officeMaster').val()) : {};
}

//変更前値の記憶(未選択→選択/選択済み→別選択の判定に使う)
let previousLookupValues = {
    ClassY: '',
    Class022: '',
    Class023: '',
    Class031: ''
};

$p.rememberLookupBaseValues = function () {
    previousLookupValues.ClassY = $('#Results_ClassY').val();
    previousLookupValues.Class022 = $('#Results_Class022').val();
    previousLookupValues.Class023 = $('#Results_Class023').val();
    previousLookupValues.Class031 = $('#Results_Class031').val();
}

//APIレスポンス$p.apiGet結果から、列名に応じたHash経由で値を取り出す
$p.getApiRecordValue = function (record, fieldName) {
    if (fieldName === 'ResultId' || fieldName === 'Title' || fieldName === 'ItemTitle') {
        return record[fieldName];
    }
    let hashKey =
        fieldName.indexOf('Date') === 0 ? 'DateHash' :
        fieldName.indexOf('Num') === 0 ? 'NumHash' :
        fieldName.indexOf('Description') === 0 ? 'DescriptionHash' :
        fieldName.indexOf('Check') === 0 ? 'CheckHash' :
// ...(次ファイルへ続く)