리스트: - 기본 표시 = PAID + INVOICED 만 (APPROVED 출고완료 제외) - 상태 필터 옵션도 PAID/INVOICED 만 발행 가드: - frontend: 선택 + PAID + 미발행만 issue 가능 - API: UPDATE 조건 status='PAID' (이전엔 APPROVED 도 허용했음)
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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]
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user