Files
Aislo/M02_MasterTemplete/M02_MasterTemplete_Labor_SkPick.ts
T
eomsangdonandClaude Opus 5.5 75bbeee0a6 feat(811-1): 같은 층 SK 사본 안 만듦 · 조합 다이어그램 참조 카드 · 옮기기 목록
- Labor_SkPick — 주인 null(자기 층) = 로그인 사용자 층 주인으로 견줌 · 같은 층 SK 고름 = 그대로 참조(화면 확인 중 사본 생기던 흠)
- Labor_Combo — 다이어그램에 SK 참조 줄 카드(이름 · 값 · 누름 = 그 줄 모달) · 옮긴 뒤 다이어그램이 비지 않게
- 옮기기 보기 목록 _목록_811-1_일위대가참조.xlsx — 층 문서 26 · 로직 줄 172 · 같음 172 · 새 SK 130 · 다름 0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 21:09:26 +09:00

49 lines
2.5 KiB
TypeScript

/* =============================================================================
* M02_MasterTemplete_Labor_SkPick.ts
* 일위대가 [+ 줄] 단가산출 = 그 층 SK 참조 한 행(PLAN 811-1 · 요구 707-1 · 681) — 일위대가 표(`Labor_Table`)가 부름.
* · M01 기초 고름 = 그 층에 SK 사본을 만듦(`POST …/sangeun/from-logic` · 같은 내용 SK 있으면 물음 = 그것을 씀 · 그래도 새로)
* · M02 단가산출 고름 = 같은 층 · 같은 주인 = 그대로 참조 · 다른 층(위 층 = 읽기 전용) = 이 층에 사본(`newLibrary` 본뜬) 뒤 참조
* · 답 = 넣을 참조 {층, 주인, 키} · 취소 = null(일위대가 문서는 화면 [저장] 때 바뀜)
* ========================================================================== */
import { fetchSessionUser } from "../A06_Login/A06_Login_Api_Fetch";
import { call, newLibrary, type Layer } from "./M02_MasterTemplete_Api_Fetch";
import type { LaborRef } from "./M02_MasterTemplete_Labor_Calc";
import { withSameAsk } from "./M02_MasterTemplete_Library_SameAsk";
export interface SkPickScope {
layer: Layer;
owner: string | null;
}
const q = (s: SkPickScope): string =>
s.owner && s.layer !== "system" ? `?owner=${encodeURIComponent(s.owner)}` : "";
/** M01 기초 → 이 층 SK 사본 참조 */
export const skFromLogic = async (s: SkPickScope, code: string): Promise<LaborRef | null> =>
(
await withSameAsk((extra) =>
call<{ 이름: string; 참조: LaborRef }>(`/layers/${s.layer}/sangeun/from-logic${q(s)}`, {
method: "POST",
body: JSON.stringify({ 로직: code, ...extra }),
}),
)
)?.참조 ?? null;
/** 이 층 주인 — 주인 null = 로그인 사용자 자기 층(회사 「C」 · 개인 「C/U」 · 서버 참조 꼴) */
async function ownerOf(s: SkPickScope): Promise<string | null> {
if (s.layer === "system" || s.owner) return s.layer === "system" ? null : s.owner;
const me = await fetchSessionUser();
if (!me) throw new Error("로그인이 끊김");
return s.layer === "company" ? String(me.company_id) : `${me.company_id}/${me.id}`;
}
/** 고른 SK — 이 층 것이면 그대로 · 다른 층이면 이 층 사본 */
export async function ownSk(s: SkPickScope, ref: LaborRef): Promise<LaborRef> {
const owner = await ownerOf(s);
if (ref.층 === s.layer && (ref.주인 ?? null) === owner) return ref;
const 본뜬 = { ...ref, 층: ref.층 as Layer };
const got = await newLibrary(s.layer, "sangeun", { 본뜬 }, s.owner);
return { 층: s.layer, 주인: owner, 키: got.이름 };
}