ken_nogi/Pleasanter/営業積算システム/docs/新・営業積算システム仕様書_分割/048_新・営業積算システム仕様書_別記資料スクリプト(18/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.2 KiB
Raw Blame History

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

/*
@config :
@filename : 03_質疑応答スクリプト.js
@title : 03_質疑応答スクリプト
@name :
@siteIds :
@siteTitles : 問合せ内容管理
@disabled: false
*/

//----------------------------------------------------------------------
//質疑応答機能configs\参考ソース\■3_310405_Re③依頼項目\sites\scripts\03_質疑応答スクリプト.js を
//本サイト335411の既存予約項目Description075/076/071、Num071/072、Class071/075/077、Date073/074、
//Attachments071/072に合わせて移植・拡張したもの。
//
//項目対応(参照元 → 本サイト)
//  Description131(質疑入力欄)   → Description075「質疑内容」
//  Description132(回答入力欄)   → Description076「回答内容」
//  Description135(ログ保存用)   → Description071「質疑回答データ保存用」
//  Num131/132(質疑回数/回答回数) → Num071/Num072
//  Class131(質疑回答ステータス0-3) → Class071選択肢の値・色分けとも参照元と一致
//  Attachments131/132           → Attachments071/072
//
//本サイトにのみ存在し参照元スクリプトにはなかった項目は、下記の想定で組み込んでいます(要確認)。
//  Class075「質疑回答送信者」   :質疑または回答を送信した本人の氏名を、送信のたびに上書き記録
//  Class077「質疑送付先」       :質疑送信時に選択した宛先ユーザーを、ログの表示にのみ利用(通知メール送信は未実装)
//  Date073「質疑回答期日」      :質疑送信時に、$p.getHolidayTable()と同じ祝日データ(HolidaysList)を使って
//                                 土日祝を除く5営業日後を自動計算して設定
//  Date074「営業積算確認日」        :営業積算課が回答内容を確認した際(営業積算確認プロセス実行時)に本日日付を設定
//
//回答送信ボタンの表示自体はProcess「回答送信」側のView条件(ClassC:["Own"])でサーバー側に強制されている
//ClassC=依頼者本人のみ実行可。processScript側にも念のため同じ判定を残している
//processScript本体は04_プロセス処理スクリプト.jsへ統合済み。プロセスボタン共通ディスパッチャは
//  1ファイルに1つしか定義できないため、19プロセス全件を扱う04側へ集約し、本ファイルには
//  saveQuestionMessage等の実処理関数のみを残す構成にしている//----------------------------------------------------------------------

//営業積算課からの質疑を保存
$p.ex.saveQuestionMessage = function () {

    let message = $('#Results_Description075').val();
    let userName = $p.userName();
    let now = new Date();
    let nowStr = now.getFullYear() + '/' + (now.getMonth() + 1).toString().padStart(2, '0') + '/' + now.getDate().toString().padStart(2, '0') + ' ' +
        now.getHours().toString().padStart(2, '0') + ':' + now.getMinutes().toString().padStart(2, '0') + ':' + now.getSeconds().toString().padStart(2, '0');

    let messageID = 'a' + now.getFullYear() + '' + (now.getMonth() + 1).toString().padStart(2, '0') + '' + now.getDate().toString().padStart(2, '0') + '' +
        now.getHours().toString().padStart(2, '0') + '' + now.getMinutes().toString().padStart(2, '0') + '' + now.getSeconds().toString().padStart(2, '0') + '-' + $p.userId();
    let num = parseFloat($('#Results_Num071').val() || 0) + 1;

    //質疑送付先Class077複数ユーザー選択、要確認表示形式によってはセレクタの調整が必要
    let sendToText = $('#Results_Class077').val() || '';

    let data = {
        'messageID': messageID,
        'type': 'Question',
        'num': toCircledNumber(num),
        'typeStr': '営業積算課からの質疑',
        'userName': userName,
        'sendTo': sendToText,
        'messageTime': nowStr,
        'messageBody': message,
        'enabled': true,
    };

    //質疑回答 保管用項目に保存する
    let saveData = $('#Results_Description071').val();
    let shitsugiData;

    if (saveData == '') {
        shitsugiData = [];
        shitsugiData.push(data);
    } else {
        shitsugiData = JSON.parse(saveData);
        shitsugiData.push(data);
    }
    $p.set($('#Results_Description071'), JSON.stringify(shitsugiData));

    //送信者を記録
    $p.set($('#Results_Class075'), userName);

    //質疑回数をカウントアップ
    $p.set($('#Results_Num071'), num);

    //質疑回答ステータスを「質疑あり」に更新
    $p.set($('#Results_Class071'), '1');

    //質疑回答期日土日祝を除く5営業日後を設定
    $p.set($('#Results_Date073'), $p.ex.calcBusinessDeadline(5));

    //質疑ありチェックをオンにする
    $p.set($('#Results_Check071'), 'checked');

    //送信したら入力欄は削除する
    $p.set($('#Results_Description075'), '');
}

//依頼者からの回答を保存
$p.ex.saveAnswerMessage = function () {

    let message = $('#Results_Description076').val();
    let userName = $p.userName();
// ...(次ファイルへ続く)