fix(invoices): 계산서 발행 대상 = 입금완료(PAID) 만
Deploy momo-erp / deploy (push) Successful in 2m42s

리스트:
- 기본 표시 = PAID + INVOICED 만 (APPROVED 출고완료 제외)
- 상태 필터 옵션도 PAID/INVOICED 만

발행 가드:
- frontend: 선택 + PAID + 미발행만 issue 가능
- API: UPDATE 조건 status='PAID' (이전엔 APPROVED 도 허용했음)
This commit is contained in:
chpark
2026-05-14 00:45:39 +09:00
parent 665a560486
commit 053a21c30e
2 changed files with 8 additions and 5 deletions
+6 -4
View File
@@ -21,8 +21,8 @@ interface Order {
interface Customer { USER_ID: string; USER_NAME: string }
const fmt = (n: number) => Number(n || 0).toLocaleString("ko-KR");
// 계산서 발행 대상 — 입금완료(PAID) 이후만. 출고완료(APPROVED)/출고요청 은 노출 안 함.
const STATUS_LABEL: Record<string, string> = {
APPROVED: "출고완료",
PAID: "입금완료",
INVOICED: "계산서발행",
};
@@ -54,7 +54,8 @@ export default function InvoicesPage() {
method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({}),
});
const rows = ((await res.json()).RESULTLIST ?? []) as Order[];
setAll(rows.filter((o) => ["APPROVED", "PAID", "INVOICED"].includes(o.STATUS)));
// 입금완료(PAID) + 계산서발행(INVOICED) 만 표시. 출고완료(APPROVED) 는 발행 대상 아님.
setAll(rows.filter((o) => ["PAID", "INVOICED"].includes(o.STATUS)));
}, []);
useEffect(() => { loadAll(); loadCustomers(); }, [loadAll, loadCustomers]);
@@ -96,8 +97,9 @@ export default function InvoicesPage() {
}, [list]);
const issue = async () => {
const targets = list.filter((o) => selected.has(o.OBJID) && !o.INVOICE_NO);
if (targets.length === 0) return Swal.fire({ icon: "warning", title: "발행 대상 없음", text: "이미 발행된 건은 제외됩니다." });
// 발행 가능 = 선택됨 + 입금완료(PAID) + 아직 미발행 (INVOICE_NO 없음)
const targets = list.filter((o) => selected.has(o.OBJID) && o.STATUS === "PAID" && !o.INVOICE_NO);
if (targets.length === 0) return Swal.fire({ icon: "warning", title: "발행 대상 없음", text: "입금완료된 미발행 건만 발행할 수 있습니다." });
const sum = targets.reduce((a, o) => a + Number(o.TOTAL_AMOUNT), 0);
const r = await Swal.fire({
icon: "question",
+2 -1
View File
@@ -22,10 +22,11 @@ export async function POST(req: NextRequest) {
for (const id of objids) {
lastNum++;
const invNo = prefix + String(lastNum).padStart(4, "0");
// 계산서 발행은 입금완료(PAID) 건만 허용
await execute(
`UPDATE momo_orders
SET status='INVOICED', invoice_no=$2, invoice_date=CURRENT_DATE, update_date=NOW()
WHERE objid=$1 AND status IN ('APPROVED','PAID')`,
WHERE objid=$1 AND status = 'PAID'`,
[id, invNo]
);
}