summaryrefslogtreecommitdiff
path: root/lib/bidding/vendor
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bidding/vendor')
-rw-r--r--lib/bidding/vendor/partners-bidding-attachments-dialog.tsx9
-rw-r--r--lib/bidding/vendor/partners-bidding-detail.tsx81
-rw-r--r--lib/bidding/vendor/partners-bidding-list-columns.tsx2
3 files changed, 52 insertions, 40 deletions
diff --git a/lib/bidding/vendor/partners-bidding-attachments-dialog.tsx b/lib/bidding/vendor/partners-bidding-attachments-dialog.tsx
index f5206c71..14d42a46 100644
--- a/lib/bidding/vendor/partners-bidding-attachments-dialog.tsx
+++ b/lib/bidding/vendor/partners-bidding-attachments-dialog.tsx
@@ -57,12 +57,13 @@ const documentTypes = [
{ value: 'specification', label: '사양서' },
{ value: 'specification_meeting', label: '사양설명회' },
{ value: 'contract_draft', label: '계약서 초안' },
+ { value: 'company_proposal', label: '협력업체용 첨부파일' },
{ value: 'financial_doc', label: '재무 관련 문서' },
{ value: 'technical_doc', label: '기술 관련 문서' },
{ value: 'certificate', label: '인증서류' },
{ value: 'pr_document', label: 'PR 문서' },
{ value: 'spec_document', label: 'SPEC 문서' },
- { value: 'evaluation_doc', label: '평가 관련 문서' },
+ { value: 'evaluation_doc', label: 'SHI용 첨부파일' },
{ value: 'bid_attachment', label: '입찰 첨부파일' },
{ value: 'other', label: '기타' }
]
@@ -183,7 +184,7 @@ export function PartnersBiddingAttachmentsDialog({
<TableHead>파일명</TableHead>
<TableHead>크기</TableHead>
<TableHead>업로드일</TableHead>
- <TableHead>작성자</TableHead>
+ {/* <TableHead>작성자</TableHead> */}
<TableHead className="w-24">작업</TableHead>
</TableRow>
</TableHeader>
@@ -212,12 +213,12 @@ export function PartnersBiddingAttachmentsDialog({
{new Date(doc.uploadedAt).toLocaleDateString('ko-KR')}
</div>
</TableCell>
- <TableCell className="text-sm text-gray-500">
+ {/* <TableCell className="text-sm text-gray-500">
<div className="flex items-center gap-1">
<User className="w-3 h-3" />
{doc.uploadedBy}
</div>
- </TableCell>
+ </TableCell> */}
<TableCell>
<Button
variant="outline"
diff --git a/lib/bidding/vendor/partners-bidding-detail.tsx b/lib/bidding/vendor/partners-bidding-detail.tsx
index 66c90eaf..0215bcb6 100644
--- a/lib/bidding/vendor/partners-bidding-detail.tsx
+++ b/lib/bidding/vendor/partners-bidding-detail.tsx
@@ -94,6 +94,7 @@ interface BiddingDetail {
responseSubmittedAt: Date | null
priceAdjustmentResponse: boolean | null // 연동제 적용 여부
isPreQuoteParticipated: boolean | null // 사전견적 참여 여부
+ isPriceAdjustmentApplicableQuestion: boolean // 연동제 적용요건 문의 여부
}
interface PrItem {
@@ -485,7 +486,21 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD
// 임시 저장 핸들러
const handleSaveDraft = async () => {
if (!biddingDetail || !userId) return
-
+
+ // 제출 마감일 체크
+ if (biddingDetail.submissionEndDate) {
+ const now = new Date()
+ const deadline = new Date(biddingDetail.submissionEndDate)
+ if (deadline < now) {
+ toast({
+ title: "접근 제한",
+ description: "제출 마감일이 지났습니다. 더 이상 입찰에 참여할 수 없습니다.",
+ variant: "destructive",
+ })
+ return
+ }
+ }
+
// 입찰 마감 상태 체크
const biddingStatus = biddingDetail.status
const isClosed = biddingStatus === 'bidding_closed' || biddingStatus === 'vendor_selected' || biddingStatus === 'bidding_disposal'
@@ -606,6 +621,21 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD
const handleSubmitResponse = () => {
if (!biddingDetail) return
+
+ // 제출 마감일 체크
+ if (biddingDetail.submissionEndDate) {
+ const now = new Date()
+ const deadline = new Date(biddingDetail.submissionEndDate)
+ if (deadline < now) {
+ toast({
+ title: "접근 제한",
+ description: "제출 마감일이 지났습니다. 더 이상 입찰에 참여할 수 없습니다.",
+ variant: "destructive",
+ })
+ return
+ }
+ }
+
// 입찰 마감 상태 체크
const biddingStatus = biddingDetail.status
const isClosed = biddingStatus === 'bidding_closed' || biddingStatus === 'vendor_selected' || biddingStatus === 'bidding_disposal'
@@ -661,6 +691,9 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD
proposedContractDeliveryDate: responseData.proposedContractDeliveryDate,
additionalProposals: responseData.additionalProposals,
isFinalSubmission, // 최종제출 여부 추가
+ // 연동제 데이터 추가 (연동제 적용요건 문의가 있는 경우만)
+ priceAdjustmentResponse: biddingDetail.isPriceAdjustmentApplicableQuestion ? responseData.priceAdjustmentResponse : undefined,
+ priceAdjustmentForm: biddingDetail.isPriceAdjustmentApplicableQuestion && responseData.priceAdjustmentResponse !== null ? priceAdjustmentForm : undefined,
prItemQuotations: prItemQuotations.length > 0 ? prItemQuotations.map(q => ({
prItemId: q.prItemId,
bidUnitPrice: q.bidUnitPrice,
@@ -781,7 +814,7 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD
<div className="mt-1">{biddingTypeLabels[biddingDetail.biddingType]}</div>
</div>
<div>
- <Label className="text-sm font-medium text-muted-foreground">낙찰수</Label>
+ <Label className="text-sm font-medium text-muted-foreground">낙찰업체 수</Label>
<div className="mt-1">{biddingDetail.awardCount === 'single' ? '단수' : biddingDetail.awardCount === 'multiple' ? '복수' : '미설정'}</div>
</div>
<div>
@@ -816,7 +849,7 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD
{/* 제출 마감일 D-day */}
- {/* {biddingDetail.submissionEndDate && (
+ {biddingDetail.submissionEndDate && (
<div className="pt-4 border-t">
<Label className="text-sm font-medium text-muted-foreground mb-2 block">제출 마감 정보</Label>
{(() => {
@@ -826,13 +859,13 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD
const timeLeft = deadline.getTime() - now.getTime()
const daysLeft = Math.floor(timeLeft / (1000 * 60 * 60 * 24))
const hoursLeft = Math.floor((timeLeft % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
-
+
return (
<div className={`p-3 rounded-lg border-2 ${
- isExpired
- ? 'border-red-200 bg-red-50'
- : daysLeft <= 1
- ? 'border-orange-200 bg-orange-50'
+ isExpired
+ ? 'border-red-200 bg-red-50'
+ : daysLeft <= 1
+ ? 'border-orange-200 bg-orange-50'
: 'border-green-200 bg-green-50'
}`}>
<div className="flex items-center justify-between">
@@ -866,7 +899,7 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD
)
})()}
</div>
- )} */}
+ )}
{/* 일정 정보 */}
<div className="pt-4 border-t">
@@ -991,12 +1024,12 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD
</div>
</div>
- <div>
+ {/* <div>
<Label className="text-muted-foreground">연동제 적용</Label>
<div className="mt-1 p-3 bg-muted rounded-md">
<p className="font-medium">{biddingConditions.isPriceAdjustmentApplicable ? "적용 가능" : "적용 불가"}</p>
</div>
- </div>
+ </div> */}
<div >
@@ -1110,8 +1143,8 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD
/>
)}
- {/* 연동제 적용 여부 - SHI가 연동제를 요구하고, 사전견적에서 답변하지 않은 경우만 표시 */}
- {biddingConditions?.isPriceAdjustmentApplicable && biddingDetail.priceAdjustmentResponse === null && (
+ {/* 연동제 적용 여부 - 협력업체 별 연동제 적용요건 문의 여부에 따라 표시 */}
+ {biddingDetail.isPriceAdjustmentApplicableQuestion && (
<>
<div className="space-y-3 p-4 border rounded-lg bg-muted/30">
<Label className="font-semibold text-base">연동제 적용 여부 *</Label>
@@ -1346,28 +1379,6 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD
</>
)}
- {/* 사전견적에서 이미 답변한 경우 - 읽기 전용으로 표시 */}
- {biddingDetail.priceAdjustmentResponse !== null && (
- <Card>
- <CardHeader>
- <CardTitle className="text-lg">연동제 적용 정보 (사전견적 제출 완료)</CardTitle>
- </CardHeader>
- <CardContent>
- <div className="p-4 bg-muted/30 rounded-lg">
- <div className="flex items-center gap-2 mb-2">
- <CheckCircle className="w-5 h-5 text-green-600" />
- <span className="font-semibold">
- {biddingDetail.priceAdjustmentResponse ? '연동제 적용' : '연동제 미적용'}
- </span>
- </div>
- <p className="text-sm text-muted-foreground">
- 사전견적에서 이미 연동제 관련 정보를 제출하였습니다. 본입찰에서는 별도의 연동제 정보 입력이 필요하지 않습니다.
- </p>
- </div>
- </CardContent>
- </Card>
- )}
-
{/* 최종제출 체크박스 */}
{!biddingDetail.isFinalSubmission && (
<div className="flex items-center space-x-2 p-4 border rounded-lg bg-muted/30">
diff --git a/lib/bidding/vendor/partners-bidding-list-columns.tsx b/lib/bidding/vendor/partners-bidding-list-columns.tsx
index ba8efae6..ba47ce50 100644
--- a/lib/bidding/vendor/partners-bidding-list-columns.tsx
+++ b/lib/bidding/vendor/partners-bidding-list-columns.tsx
@@ -119,7 +119,7 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL
// 첨부파일
columnHelper.display({
id: 'attachments',
- header: 'SHI 첨부파일',
+ header: '첨부파일',
cell: ({ row }) => {
const handleViewDocumentsClick = (e: React.MouseEvent) => {
e.stopPropagation()