diff options
| author | joonhoekim <26rote@gmail.com> | 2025-11-20 11:53:08 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-11-20 11:53:08 +0900 |
| commit | 01b7b192acc316b4f8969893d1d9bb6369425776 (patch) | |
| tree | c885effdc80380ddabd4c52e9b24d98e8c9565e3 /lib/po/vendor-table/vendor-po-items-dialog.tsx | |
| parent | 77cbcaf27c9de8b361a6c5a13f0eefb37fd0d0e5 (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.tsx | 123 |
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> )} |
