summaryrefslogtreecommitdiff
path: root/lib/po/vendor-table/vendor-po-items-dialog.tsx
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-20 11:53:08 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-20 11:53:08 +0900
commit01b7b192acc316b4f8969893d1d9bb6369425776 (patch)
treec885effdc80380ddabd4c52e9b24d98e8c9565e3 /lib/po/vendor-table/vendor-po-items-dialog.tsx
parent77cbcaf27c9de8b361a6c5a13f0eefb37fd0d0e5 (diff)
(김준회) PO 및 RFQ 관련 구매 피드백 반영
- PO매핑 오류 수정, 스키마 컬럼추가, 숫자포매팅 등 - rfq 담당자 문제 수정 등
Diffstat (limited to 'lib/po/vendor-table/vendor-po-items-dialog.tsx')
-rw-r--r--lib/po/vendor-table/vendor-po-items-dialog.tsx123
1 files changed, 103 insertions, 20 deletions
diff --git a/lib/po/vendor-table/vendor-po-items-dialog.tsx b/lib/po/vendor-table/vendor-po-items-dialog.tsx
index 647950c4..d88d88d1 100644
--- a/lib/po/vendor-table/vendor-po-items-dialog.tsx
+++ b/lib/po/vendor-table/vendor-po-items-dialog.tsx
@@ -16,10 +16,10 @@ import {
TableHeader,
TableRow,
} from "@/components/ui/table"
-import { Badge } from "@/components/ui/badge"
import { Skeleton } from "@/components/ui/skeleton"
import { VendorPO, VendorPOItem } from "./types"
import { getVendorPOItemsByContractNo } from "./service"
+import { formatNumber } from "@/lib/utils"
interface VendorPOItemsDialogProps {
open: boolean
@@ -99,8 +99,9 @@ export function VendorPOItemsDialog({ open, onOpenChange, po }: VendorPOItemsDia
<TableHead className="min-w-[120px] whitespace-nowrap">PO/계약번호</TableHead>
<TableHead className="min-w-[100px] whitespace-nowrap">품번</TableHead>
<TableHead className="min-w-[100px] whitespace-nowrap">P/R번호</TableHead>
+ <TableHead className="min-w-[100px] whitespace-nowrap">PR 품번</TableHead>
<TableHead className="min-w-[120px] whitespace-nowrap">자재그룹(명)</TableHead>
- <TableHead className="min-w-[100px] whitespace-nowrap">단가기준</TableHead>
+ {/* <TableHead className="min-w-[100px] whitespace-nowrap">단가기준</TableHead> */}
<TableHead className="min-w-[100px] whitespace-nowrap">자재번호</TableHead>
<TableHead className="min-w-[200px] whitespace-nowrap">품목/자재내역</TableHead>
{/* <TableHead className="min-w-[200px] whitespace-nowrap">자재내역사양</TableHead>
@@ -114,15 +115,31 @@ export function VendorPOItemsDialog({ open, onOpenChange, po }: VendorPOItemsDia
<TableHead className="min-w-[80px] text-right whitespace-nowrap">중량</TableHead>
<TableHead className="min-w-[80px] whitespace-nowrap">중량단위</TableHead>
<TableHead className="min-w-[100px] text-right whitespace-nowrap">총중량</TableHead>
- <TableHead className="min-w-[100px] text-right whitespace-nowrap">단가기준</TableHead>
- <TableHead className="min-w-[80px] whitespace-nowrap">단가단위</TableHead>
- <TableHead className="min-w-[100px] whitespace-nowrap">가격단위값</TableHead>
- <TableHead className="min-w-[120px] text-right whitespace-nowrap">PO계약금액</TableHead>
- <TableHead className="min-w-[100px] text-right whitespace-nowrap">조정금액</TableHead>
+ <TableHead className="min-w-[100px] text-right whitespace-nowrap">단가(NETPR)</TableHead>
+ <TableHead className="min-w-[80px] whitespace-nowrap">단가단위(BPRME)</TableHead>
+ <TableHead className="min-w-[80px] text-right whitespace-nowrap">가격단위값(PEINH)</TableHead>
+ <TableHead className="min-w-[100px] text-right whitespace-nowrap">참조단가</TableHead>
+ <TableHead className="min-w-[100px] text-right whitespace-nowrap">발주단가</TableHead>
+ <TableHead className="min-w-[120px] text-right whitespace-nowrap">기본총액(BRTWR)</TableHead>
+ <TableHead className="min-w-[120px] text-right whitespace-nowrap">조정금액(ZPDT_EXDS_AMT)</TableHead>
+ <TableHead className="min-w-[120px] text-right whitespace-nowrap">최종정가(NETWR)</TableHead>
+ <TableHead className="min-w-[100px] whitespace-nowrap">예정시작일자</TableHead>
<TableHead className="min-w-[100px] whitespace-nowrap">납기일자</TableHead>
- <TableHead className="min-w-[80px] whitespace-nowrap">VAT구분</TableHead>
+ <TableHead className="min-w-[100px] whitespace-nowrap">예정종료일자</TableHead>
+ <TableHead className="min-w-[100px] whitespace-nowrap">PR납기일</TableHead>
+ <TableHead className="min-w-[100px] whitespace-nowrap">구매접수일</TableHead>
+ <TableHead className="min-w-[80px] whitespace-nowrap">세금코드</TableHead>
+ <TableHead className="min-w-[100px] whitespace-nowrap">플랜트</TableHead>
+ <TableHead className="min-w-[100px] whitespace-nowrap">저장위치</TableHead>
+ <TableHead className="min-w-[100px] whitespace-nowrap">RFQ번호</TableHead>
+ <TableHead className="min-w-[80px] whitespace-nowrap">RFQ품번</TableHead>
+ <TableHead className="min-w-[150px] whitespace-nowrap">LOT No.</TableHead>
+ <TableHead className="min-w-[80px] text-right whitespace-nowrap">볼륨</TableHead>
+ <TableHead className="min-w-[80px] whitespace-nowrap">볼륨단위</TableHead>
+ <TableHead className="min-w-[80px] whitespace-nowrap">시리즈구분</TableHead>
+ <TableHead className="min-w-[150px] whitespace-nowrap">비고</TableHead>
{/* <TableHead className="min-w-[120px] whitespace-nowrap">철의장 SPEC</TableHead> */}
- <TableHead className="min-w-[100px] whitespace-nowrap">P/R 담당자</TableHead>
+ {/* <TableHead className="min-w-[100px] whitespace-nowrap">P/R 담당자</TableHead> */}
</TableRow>
</TableHeader>
<TableBody>
@@ -131,8 +148,9 @@ export function VendorPOItemsDialog({ open, onOpenChange, po }: VendorPOItemsDia
<TableCell className="font-medium">{item.contractNo || '-'}</TableCell>
<TableCell>{item.itemNo || '-'}</TableCell>
<TableCell>{item.prNo || '-'}</TableCell>
+ <TableCell>{item.prItemNo || '-'}</TableCell>
<TableCell>{item.materialGroup || '-'}</TableCell>
- <TableCell>{item.priceStandard || '-'}</TableCell>
+ {/* <TableCell>{item.priceStandard || '-'}</TableCell> */}
<TableCell className="font-mono text-sm">{item.materialNo || '-'}</TableCell>
<TableCell className="max-w-[200px]">
<div className="truncate" title={item.itemDescription || ''}>
@@ -151,7 +169,7 @@ export function VendorPOItemsDialog({ open, onOpenChange, po }: VendorPOItemsDia
<TableCell>{item.material || '-'}</TableCell>
<TableCell>{item.specification || '-'}</TableCell> */}
<TableCell className="text-right font-mono">
- {item.quantity?.toLocaleString() || '-'}
+ {item.quantity !== undefined && item.quantity !== null ? item.quantity.toLocaleString() : '-'}
</TableCell>
<TableCell>{item.quantityUnit || '-'}</TableCell>
<TableCell className="text-right font-mono">
@@ -162,20 +180,76 @@ export function VendorPOItemsDialog({ open, onOpenChange, po }: VendorPOItemsDia
{item.totalWeight ? item.totalWeight.toLocaleString() : '-'}
</TableCell>
<TableCell className="text-right font-mono">
- {item.unitPrice?.toLocaleString() || '-'}
+ {(() => {
+ const currency = po?.currency || ''
+ const decimals = (currency === 'KRW' || currency === 'JPY') ? 0 : 2
+ return formatNumber(item.unitPrice, decimals)
+ })()}
</TableCell>
- <TableCell>{item.priceUnit || '-'}</TableCell>
- <TableCell>{item.priceUnitValue || '-'}</TableCell>
- <TableCell className="text-right font-mono font-semibold">
- {item.contractAmount?.toLocaleString() || '-'}
+ <TableCell>{item.BPRME || '-'}</TableCell>
+ <TableCell className="text-right">{item.PEINH ?? '-'}</TableCell>
+ <TableCell className="text-right font-mono">
+ {(() => {
+ const currency = po?.currency || ''
+ const decimals = (currency === 'KRW' || currency === 'JPY') ? 0 : 2
+ return item.ZREF_NETPR ? formatNumber(item.ZREF_NETPR, decimals) : '-'
+ })()}
+ </TableCell>
+ <TableCell className="text-right font-mono">
+ {(() => {
+ const currency = po?.currency || ''
+ const decimals = (currency === 'KRW' || currency === 'JPY') ? 0 : 2
+ return item.ZNETPR ? formatNumber(item.ZNETPR, decimals) : '-'
+ })()}
</TableCell>
<TableCell className="text-right font-mono">
- {item.adjustmentAmount ? item.adjustmentAmount.toLocaleString() : '-'}
+ {(() => {
+ const currency = po?.currency || ''
+ const decimals = (currency === 'KRW' || currency === 'JPY') ? 0 : 2
+ return item.BRTWR ? formatNumber(item.BRTWR, decimals) : '-'
+ })()}
+ </TableCell>
+ <TableCell className="text-right font-mono">
+ {(() => {
+ const currency = po?.currency || ''
+ const decimals = (currency === 'KRW' || currency === 'JPY') ? 0 : 2
+ return item.ZPDT_EXDS_AMT ? formatNumber(item.ZPDT_EXDS_AMT, decimals) : '-'
+ })()}
+ </TableCell>
+ <TableCell className="text-right font-mono font-semibold">
+ {(() => {
+ const currency = po?.currency || ''
+ const decimals = (currency === 'KRW' || currency === 'JPY') ? 0 : 2
+ return item.NETWR ? formatNumber(item.NETWR, decimals) : '-'
+ })()}
</TableCell>
- <TableCell>{item.deliveryDate || '-'}</TableCell>
+ <TableCell>{item.ZPLN_ST_DT || '-'}</TableCell>
+ <TableCell>{item.ZPO_DLV_DT || item.deliveryDate || '-'}</TableCell>
+ <TableCell>{item.ZPLN_ED_DT || '-'}</TableCell>
+ <TableCell>{item.LFDAT || '-'}</TableCell>
+ <TableCell>{item.ZRCV_DT || '-'}</TableCell>
<TableCell>{item.vatType || '-'}</TableCell>
+ <TableCell>{item.WERKS || '-'}</TableCell>
+ <TableCell>{item.LGORT || '-'}</TableCell>
+ <TableCell>{item.ANFNR || '-'}</TableCell>
+ <TableCell>{item.ANFPS || '-'}</TableCell>
+ <TableCell className="max-w-[150px]">
+ <div className="truncate" title={item.ZPO_LOT_NO || ''}>
+ {item.ZPO_LOT_NO || '-'}
+ </div>
+ </TableCell>
+ <TableCell className="text-right font-mono">
+ {item.VOLUM ? item.VOLUM.toLocaleString() : '-'}
+ </TableCell>
+ <TableCell>{item.VOLEH || '-'}</TableCell>
+ <TableCell>{item.ZCON_IND || '-'}</TableCell>
+ <TableCell className="max-w-[150px]">
+ <div className="truncate" title={item.remark || ''}>
+ {item.remark || '-'}
+ </div>
+ </TableCell>
{/* <TableCell>{item.steelSpec || '-'}</TableCell> */}
- <TableCell>{item.prManager || '-'}</TableCell>
+ {/* <TableCell>{item.prManager || '-'}</TableCell> */}
</TableRow>
))}
</TableBody>
@@ -190,7 +264,16 @@ export function VendorPOItemsDialog({ open, onOpenChange, po }: VendorPOItemsDia
총 {items.length}개 품목
</div>
<div className="text-sm font-medium">
- 총 계약금액: {items.reduce((sum, item) => sum + item.contractAmount, 0).toLocaleString()} 원
+ {(() => {
+ // NETWR(최종정가) 합계 계산
+ const totalNETWR = items.reduce((sum, item) => sum + (item.NETWR || item.contractAmount || 0), 0)
+ // 통화별 소수점 자리수 결정 (KRW, JPY: 0자리, 나머지: 2자리)
+ const currency = po?.currency || ''
+ const decimals = (currency === 'KRW' || currency === 'JPY') ? 0 : 2
+ const formattedAmount = formatNumber(totalNETWR, decimals)
+
+ return `총 계약금액(NETWR): ${currency} ${formattedAmount}`
+ })()}
</div>
</div>
)}