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>
4.8 KiB
4.8 KiB
別記資料 スクリプト(Scripts)全文 (5/28)
// ...(前ファイルからの続き)
fieldName.indexOf('Attachments') === 0 ? 'AttachmentsHash' :
'ClassHash';
return record[hashKey] ? record[hashKey][fieldName] : undefined;
}
//転記先1項目へ、上書きルールに従って値をセットする
//wasEmpty=true(未選択→選択): 転記先が空の場合のみセット
//wasEmpty=false(選択済み→別選択): 常にセット
//戻り値: 実際にセットした場合はtrue(呼び出し元で連鎖転記の要否判定に使う)
$p.applyLookupValue = function (toColumn, value, wasEmpty) {
if (value === undefined || value === null || value === '') return false;
let $target = $('#Results_' + toColumn);
if (!$target.length) return false;
if (wasEmpty && $target.val()) return false; //既存の手入力値を保持
$p.set($target, value);
return true;
}
//----------------------------------------------------------------------
//ClassY(マスターシート、SiteId:189112)選択時の転記
//重複チェックキー(Class003姓カナ/Class004名カナ/Class022エリア)も転記対象に含める。
//上書き可否はキー項目も含め全項目共通のwasEmptyルールに従う(applyLookupValue参照)。
$p.classYFieldMap = [
{ from: 'ClassA', to: 'ClassZ' },
{ from: 'Class001', to: 'Class001' },
{ from: 'Class002', to: 'Class002' },
{ from: 'Class003', to: 'Class003' },
{ from: 'Class004', to: 'Class004' },
{ from: 'Class009', to: 'Class005' },
{ from: 'Class010', to: 'Class006' },
{ from: 'Class011', to: 'Class007' },
{ from: 'Class012', to: 'Class008' },
{ from: 'Class017', to: 'Class009' },
{ from: 'Class018', to: 'Class010' },
{ from: 'Class019', to: 'Class011' },
{ from: 'Class020', to: 'Class012' },
{ from: 'Class029', to: 'Class021' },
{ from: 'ClassW', to: 'Class022' },
{ from: 'Class033', to: 'Class023' },
{ from: 'Class040', to: 'Class024' },
{ from: 'Class043', to: 'Class025' },
{ from: 'ClassF', to: 'Class031' },
{ from: 'ClassG', to: 'Class032' },
{ from: 'ClassH', to: 'Class033' },
{ from: 'ClassI', to: 'Class034' },
{ from: 'ClassL', to: 'Class035' },
{ from: 'ClassK', to: 'Class036' },
{ from: 'ClassJ', to: 'Class037' },
{ from: 'Date063', to: 'Date001' },
{ from: 'DateH', to: 'Date002' }
];
$p.on('change', 'ClassY', function () {
let newVal = $('#Results_ClassY').val();
let wasEmpty = !previousLookupValues.ClassY;
if (newVal) {
$p.apiGet({
'id': newVal,
'async': false,
'done': function (data) {
if (!data.Response || !data.Response.Data || !data.Response.Data[0]) {
console.log('マスターシートのレコード取得に失敗しました');
$p.ex.setMyMessage('new-status-red', 'データの取得に失敗しました。営業積算へお問い合わせください');
return;
}
//Class022/023/031(エリア・契約ブランド・契約営業所)がClassY経由で更新された場合、
//$p.setのtrigger('change')により各項目のchangeハンドラが連鎖発火し、
//ClassM/ClassN/Class038への転記も自動的に行われる想定
let record = data.Response.Data[0];
$p.classYFieldMap.forEach(function (m) {
let value = $p.getApiRecordValue(record, m.from);
$p.applyLookupValue(m.to, value, wasEmpty);
});
//案件状況(ClassS)を契約コード(ClassZ)の転記結果に応じて自動判定
$p.judgeClassS();
},
'fail': function (data) {
console.log('マスターシートのレコード取得に失敗しました', data);
$p.ex.setMyMessage('new-status-red', 'データの取得に失敗しました。営業積算へお問い合わせください');
}
});
} else {
//マスターシート選択解除 → 未契約
$p.judgeClassS();
}
previousLookupValues.ClassY = newVal;
});
//----------------------------------------------------------------------
//案件状況(ClassS)の自動判定
//マスターシート(ClassY)未選択の場合は未契約。選択済みの場合は、転記された契約コード(ClassZ)が
//"9999AAABB"(未契約扱いのダミーコード)なら未契約、それ以外なら契約済みと判定する。
//自動判定後もClassS自体は通常項目のまま(読取り専用化しない)なので、手入力での変更を妨げない。
// ...(次ファイルへ続く)