diff options
Diffstat (limited to 'lib/bidding/receive/biddings-receive-table.tsx')
| -rw-r--r-- | lib/bidding/receive/biddings-receive-table.tsx | 64 |
1 files changed, 9 insertions, 55 deletions
diff --git a/lib/bidding/receive/biddings-receive-table.tsx b/lib/bidding/receive/biddings-receive-table.tsx index 0995c6a2..97d627ea 100644 --- a/lib/bidding/receive/biddings-receive-table.tsx +++ b/lib/bidding/receive/biddings-receive-table.tsx @@ -45,6 +45,7 @@ type BiddingReceiveItem = { participantParticipated: number
participantDeclined: number
participantPending: number
+ participantFinalSubmitted: number
// 개찰 정보
openedAt: Date | null
@@ -72,7 +73,6 @@ export function BiddingsReceiveTable({ promises }: BiddingsReceiveTableProps) { const [rowAction, setRowAction] = React.useState<DataTableRowAction<BiddingReceiveItem> | null>(null)
const [isOpeningBidding, setIsOpeningBidding] = React.useState(false)
- const [isEarlyOpeningBidding, setIsEarlyOpeningBidding] = React.useState(false)
const router = useRouter()
const { data: session } = useSession()
@@ -180,59 +180,22 @@ export function BiddingsReceiveTable({ promises }: BiddingsReceiveTableProps) { const selectedRows = table.getFilteredSelectedRowModel().rows
const selectedBiddingForAction = selectedRows.length > 0 ? selectedRows[0].original : null
- // 조기개찰 가능 여부 확인
- const canEarlyOpen = React.useMemo(() => {
- if (!selectedBiddingForAction) return false
-
- const now = new Date()
- const submissionEndDate = selectedBiddingForAction.submissionEndDate
-
- // 참여협력사가 1명 이상이어야 함
- if (selectedBiddingForAction.participantParticipated < 1) return false
-
- // 입찰서 제출기간 내여야 함
- if (!submissionEndDate || now > submissionEndDate) return false
-
- // 미제출 협력사가 0이어야 함
- if (selectedBiddingForAction.participantPending > 0) return false
-
- // 참여협력사 + 포기협력사 = 참여예정협력사 여야 함
- const participatedOrDeclined = selectedBiddingForAction.participantParticipated + selectedBiddingForAction.participantDeclined
- return participatedOrDeclined === selectedBiddingForAction.participantExpected
- }, [selectedBiddingForAction])
-
// 개찰 가능 여부 확인
const canOpen = React.useMemo(() => {
if (!selectedBiddingForAction) return false
- // 참여협력사가 1명 이상이어야 함
- if (selectedBiddingForAction.participantParticipated < 1) return false
-
const now = new Date()
const submissionEndDate = selectedBiddingForAction.submissionEndDate
- // 입찰서 제출기간이 종료되어야 함
- return submissionEndDate && now > submissionEndDate
- }, [selectedBiddingForAction])
+ // 1. 입찰 마감일이 지났으면 무조건 가능
+ if (submissionEndDate && now > submissionEndDate) return true
- const handleEarlyOpenBidding = React.useCallback(async () => {
- if (!selectedBiddingForAction) return
+ // 2. 입찰 기간 내 조기개찰 조건 확인
+ // - 미제출 협력사가 0이어야 함 (참여예정 = 최종제출 + 포기)
+ const participatedOrDeclined = selectedBiddingForAction.participantFinalSubmitted + selectedBiddingForAction.participantDeclined
+ const isEarlyOpenPossible = participatedOrDeclined === selectedBiddingForAction.participantExpected
- setIsEarlyOpeningBidding(true)
- try {
- const result = await earlyOpenBiddingAction(selectedBiddingForAction.id)
- if (result.success) {
- toast.success("조기개찰이 완료되었습니다.")
- // 데이터 리프레시
- window.location.reload()
- } else {
- toast.error(result.message || "조기개찰에 실패했습니다.")
- }
- } catch (error) {
- toast.error("조기개찰 중 오류가 발생했습니다.")
- } finally {
- setIsEarlyOpeningBidding(false)
- }
+ return isEarlyOpenPossible
}, [selectedBiddingForAction])
const handleOpenBidding = React.useCallback(async () => {
@@ -270,20 +233,11 @@ export function BiddingsReceiveTable({ promises }: BiddingsReceiveTableProps) { onCompactChange={handleCompactChange}
>
<div className="flex items-center gap-2">
- {/* <Button
- variant="outline"
- size="sm"
- onClick={handleEarlyOpenBidding}
- disabled={!selectedBiddingForAction || !canEarlyOpen || isEarlyOpeningBidding}
- >
- {isEarlyOpeningBidding && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
- 조기개찰
- </Button> */}
<Button
variant="outline"
size="sm"
onClick={handleOpenBidding}
- disabled={!selectedBiddingForAction || isOpeningBidding}
+ disabled={!selectedBiddingForAction || !canOpen || isOpeningBidding}
>
{isOpeningBidding && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
개찰
|
