diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-08 10:29:19 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-08 10:29:19 +0000 |
| commit | f93493f68c9f368e10f1c3379f1c1384068e3b14 (patch) | |
| tree | a9dada58741750fa7ca6e04b210443ad99a6bccc /lib/bidding/detail/table/bidding-detail-vendor-create-dialog.tsx | |
| parent | e832a508e1b3c531fb3e1b9761e18e1b55e3d76a (diff) | |
(대표님, 최겸) rfqLast, bidding, prequote
Diffstat (limited to 'lib/bidding/detail/table/bidding-detail-vendor-create-dialog.tsx')
| -rw-r--r-- | lib/bidding/detail/table/bidding-detail-vendor-create-dialog.tsx | 221 |
1 files changed, 9 insertions, 212 deletions
diff --git a/lib/bidding/detail/table/bidding-detail-vendor-create-dialog.tsx b/lib/bidding/detail/table/bidding-detail-vendor-create-dialog.tsx index bd0f3684..75b1f67b 100644 --- a/lib/bidding/detail/table/bidding-detail-vendor-create-dialog.tsx +++ b/lib/bidding/detail/table/bidding-detail-vendor-create-dialog.tsx @@ -35,8 +35,7 @@ import { } from '@/components/ui/popover' import { Check, ChevronsUpDown, Search } from 'lucide-react' import { cn } from '@/lib/utils' -import { createQuotationVendor } from '@/lib/bidding/detail/service' -import { createQuotationVendorSchema } from '@/lib/bidding/validation' +import { createBiddingDetailVendor } from '@/lib/bidding/detail/service' import { searchVendors } from '@/lib/vendors/service' import { useToast } from '@/hooks/use-toast' import { useTransition } from 'react' @@ -70,22 +69,9 @@ export function BiddingDetailVendorCreateDialog({ const [vendorSearchOpen, setVendorSearchOpen] = React.useState(false) const [vendorSearchValue, setVendorSearchValue] = React.useState('') - // 폼 상태 + // 폼 상태 (간소화 - 필수 항목만) const [formData, setFormData] = React.useState({ - quotationAmount: 0, - currency: 'KRW', - awardRatio: 0, - status: 'pending' as const, - // 입찰 조건 (companyConditionResponses 기반) - paymentTermsResponse: '', - taxConditionsResponse: '', - proposedContractDeliveryDate: '', - priceAdjustmentResponse: false, - incotermsResponse: '', - proposedShippingPort: '', - proposedDestinationPort: '', - sparePartResponse: '', - additionalProposals: '', + awardRatio: 100, // 기본 100% }) // Vendor 검색 @@ -125,28 +111,13 @@ export function BiddingDetailVendorCreateDialog({ return } - const result = createQuotationVendorSchema.safeParse({ - biddingId, - vendorId: selectedVendor.id, - vendorName: selectedVendor.vendorName, - vendorCode: selectedVendor.vendorCode, - contactPerson: '', - contactEmail: '', - contactPhone: '', - ...formData, - }) - - if (!result.success) { - toast({ - title: '유효성 오류', - description: result.error.issues[0]?.message || '입력값을 확인해주세요.', - variant: 'destructive', - }) - return - } startTransition(async () => { - const response = await createQuotationVendor(result.data, 'current-user') + const response = await createBiddingDetailVendor( + biddingId, + selectedVendor.id, + 'current-user' + ) if (response.success) { toast({ @@ -170,20 +141,7 @@ export function BiddingDetailVendorCreateDialog({ setSelectedVendor(null) setVendorSearchValue('') setFormData({ - quotationAmount: 0, - currency: 'KRW', - awardRatio: 0, - status: 'pending', - // 입찰 조건 초기화 - paymentTermsResponse: '', - taxConditionsResponse: '', - proposedContractDeliveryDate: '', - priceAdjustmentResponse: false, - incotermsResponse: '', - proposedShippingPort: '', - proposedDestinationPort: '', - sparePartResponse: '', - additionalProposals: '', + awardRatio: 100, // 기본 100% }) } @@ -250,167 +208,6 @@ export function BiddingDetailVendorCreateDialog({ </PopoverContent> </Popover> </div> - - {/* 견적 정보 입력 */} - <div className="grid grid-cols-2 gap-4"> - <div className="space-y-2"> - <Label htmlFor="quotationAmount">견적금액</Label> - <Input - id="quotationAmount" - type="number" - value={formData.quotationAmount} - onChange={(e) => setFormData({ ...formData, quotationAmount: Number(e.target.value) })} - placeholder="견적금액을 입력하세요" - /> - </div> - <div className="space-y-2"> - <Label htmlFor="currency">통화</Label> - <Select value={formData.currency} onValueChange={(value) => setFormData({ ...formData, currency: value })}> - <SelectTrigger> - <SelectValue /> - </SelectTrigger> - <SelectContent> - <SelectItem value="KRW">KRW</SelectItem> - <SelectItem value="USD">USD</SelectItem> - <SelectItem value="EUR">EUR</SelectItem> - </SelectContent> - </Select> - </div> - </div> - - <div className="grid grid-cols-2 gap-4"> - <div className="space-y-2"> - <Label htmlFor="awardRatio">발주비율 (%)</Label> - <Input - id="awardRatio" - type="number" - min="0" - max="100" - value={formData.awardRatio} - onChange={(e) => setFormData({ ...formData, awardRatio: Number(e.target.value) })} - placeholder="발주비율을 입력하세요" - /> - </div> - <div className="space-y-2"> - <Label htmlFor="status">상태</Label> - <Select value={formData.status} onValueChange={(value: any) => setFormData({ ...formData, status: value })}> - <SelectTrigger> - <SelectValue /> - </SelectTrigger> - <SelectContent> - <SelectItem value="pending">대기</SelectItem> - <SelectItem value="submitted">제출</SelectItem> - <SelectItem value="selected">선정</SelectItem> - <SelectItem value="rejected">거절</SelectItem> - </SelectContent> - </Select> - </div> - </div> - - - - {/* 입찰 조건 섹션 */} - <div className="col-span-2 pt-4 border-t"> - <h3 className="text-lg font-medium mb-4">입찰 조건 설정</h3> - - <div className="grid grid-cols-2 gap-4"> - <div className="space-y-2"> - <Label htmlFor="paymentTermsResponse">지급조건</Label> - <Input - id="paymentTermsResponse" - value={formData.paymentTermsResponse} - onChange={(e) => setFormData({ ...formData, paymentTermsResponse: e.target.value })} - placeholder="지급조건을 입력하세요" - /> - </div> - - <div className="space-y-2"> - <Label htmlFor="taxConditionsResponse">세금조건</Label> - <Input - id="taxConditionsResponse" - value={formData.taxConditionsResponse} - onChange={(e) => setFormData({ ...formData, taxConditionsResponse: e.target.value })} - placeholder="세금조건을 입력하세요" - /> - </div> - </div> - - <div className="grid grid-cols-2 gap-4 mt-4"> - <div className="space-y-2"> - <Label htmlFor="incotermsResponse">운송조건 (Incoterms)</Label> - <Input - id="incotermsResponse" - value={formData.incotermsResponse} - onChange={(e) => setFormData({ ...formData, incotermsResponse: e.target.value })} - placeholder="운송조건을 입력하세요" - /> - </div> - - <div className="space-y-2"> - <Label htmlFor="proposedContractDeliveryDate">제안 계약납기일</Label> - <Input - id="proposedContractDeliveryDate" - type="date" - value={formData.proposedContractDeliveryDate} - onChange={(e) => setFormData({ ...formData, proposedContractDeliveryDate: e.target.value })} - /> - </div> - </div> - - <div className="grid grid-cols-2 gap-4 mt-4"> - <div className="space-y-2"> - <Label htmlFor="proposedShippingPort">제안 선적지</Label> - <Input - id="proposedShippingPort" - value={formData.proposedShippingPort} - onChange={(e) => setFormData({ ...formData, proposedShippingPort: e.target.value })} - placeholder="선적지를 입력하세요" - /> - </div> - - <div className="space-y-2"> - <Label htmlFor="proposedDestinationPort">제안 도착지</Label> - <Input - id="proposedDestinationPort" - value={formData.proposedDestinationPort} - onChange={(e) => setFormData({ ...formData, proposedDestinationPort: e.target.value })} - placeholder="도착지를 입력하세요" - /> - </div> - </div> - - <div className="space-y-2 mt-4"> - <Label htmlFor="sparePartResponse">스페어파트 응답</Label> - <Input - id="sparePartResponse" - value={formData.sparePartResponse} - onChange={(e) => setFormData({ ...formData, sparePartResponse: e.target.value })} - placeholder="스페어파트 관련 응답을 입력하세요" - /> - </div> - - <div className="space-y-2 mt-4"> - <Label htmlFor="additionalProposals">추가 제안사항</Label> - <Textarea - id="additionalProposals" - value={formData.additionalProposals} - onChange={(e) => setFormData({ ...formData, additionalProposals: e.target.value })} - placeholder="추가 제안사항을 입력하세요" - rows={3} - /> - </div> - - <div className="flex items-center space-x-2 mt-4"> - <Checkbox - id="priceAdjustmentResponse" - checked={formData.priceAdjustmentResponse} - onCheckedChange={(checked) => - setFormData({ ...formData, priceAdjustmentResponse: !!checked }) - } - /> - <Label htmlFor="priceAdjustmentResponse">연동제 적용</Label> - </div> - </div> </div> <DialogFooter> <Button variant="outline" onClick={() => onOpenChange(false)}> |
