summaryrefslogtreecommitdiff
path: root/lib/general-contracts
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-11-11 09:22:58 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-11-11 09:22:58 +0000
commit535de26b9cf3242c04543d6891d78352b9593a60 (patch)
treecfb2a76a3442ad0ec1d2b2b75293658d93a45808 /lib/general-contracts
parent88b737a71372353e47c466553273d88f5bf36834 (diff)
(최겸) 구매 수정사항 개발
Diffstat (limited to 'lib/general-contracts')
-rw-r--r--lib/general-contracts/detail/general-contract-basic-info.tsx28
-rw-r--r--lib/general-contracts/main/create-general-contract-dialog.tsx5
-rw-r--r--lib/general-contracts/main/general-contract-update-sheet.tsx20
3 files changed, 27 insertions, 26 deletions
diff --git a/lib/general-contracts/detail/general-contract-basic-info.tsx b/lib/general-contracts/detail/general-contract-basic-info.tsx
index 4071b2e0..fb08da87 100644
--- a/lib/general-contracts/detail/general-contract-basic-info.tsx
+++ b/lib/general-contracts/detail/general-contract-basic-info.tsx
@@ -53,18 +53,19 @@ export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
작업후: { enabled: false, period: 0, maxPeriod: 0 },
기타: { enabled: false, period: 0, maxPeriod: 0 },
},
- contractAmount: null as number | null,
+ contractAmount: null,
currency: 'KRW',
linkedPoNumber: '',
linkedBidNumber: '',
notes: '',
// 개별 JSON 필드들 (스키마에 맞게)
- paymentBeforeDelivery: {} as any,
+ paymentBeforeDelivery: {},
paymentDelivery: '', // varchar 타입
- paymentAfterDelivery: {} as any,
+ paymentDeliveryAdditionalText: '',
+ paymentAfterDelivery: {},
paymentTerm: '',
taxType: '',
- liquidatedDamages: false as boolean,
+ liquidatedDamages: false,
liquidatedDamagesPercent: '',
deliveryType: '',
deliveryTerm: '',
@@ -89,7 +90,7 @@ export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
projectNotAwarded: false,
other: false,
},
- externalYardEntry: 'N' as 'Y' | 'N', // 사외업체 야드투입 (Y/N)
+ externalYardEntry: 'N', // 사외업체 야드투입 (Y/N)
contractAmountReason: '', // 합의계약 미확정 사유
})
@@ -309,7 +310,10 @@ export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
validationErrors.push('계약체결유효기간')
}
if (!formData.paymentDelivery) validationErrors.push('납품 지급조건')
- if (!formData.currency) validationErrors.push('계약통화')
+ // 계약확정범위가 '단가' 또는 '물량(실적)'이 아닌 경우에만 계약통화 필수값 체크
+ if (formData.contractScope !== '단가' && formData.contractScope !== '물량(실적)' && !formData.currency) {
+ validationErrors.push('계약통화')
+ }
if (!formData.paymentTerm) validationErrors.push('지불조건')
if (!formData.taxType) validationErrors.push('세금조건')
@@ -1375,7 +1379,7 @@ export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="space-y-2">
<Label htmlFor="contractAmount">계약금액 (자동계산)</Label>
- {contract?.type === 'AD' || contract?.type === 'AW' ? (
+ {(contract?.type === 'AD' || contract?.type === 'AW') || formData.contractScope === '단가' || formData.contractScope === '물량(실적)' ? (
<div className="space-y-2">
<Input
type="text"
@@ -1405,15 +1409,19 @@ export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
)}
</div>
<div className="space-y-2">
- <Label htmlFor="currency">계약통화 <span className="text-red-600">*</span></Label>
+ <Label htmlFor="currency">
+ 계약통화
+ {formData.contractScope !== '단가' && formData.contractScope !== '물량(실적)' && <span className="text-red-600">*</span>}
+ </Label>
<Input
type="text"
value={formData.currency}
onChange={(e) => setFormData(prev => ({ ...prev, currency: e.target.value }))}
placeholder="계약통화를 입력하세요"
- className={errors.currency ? 'border-red-500' : ''}
+ className={`${errors.currency ? 'border-red-500' : ''} ${formData.contractScope === '단가' || formData.contractScope === '물량(실적)' ? 'bg-gray-50' : ''}`}
+ disabled={formData.contractScope === '단가' || formData.contractScope === '물량(실적)'}
/>
- {errors.currency && (
+ {errors.currency && formData.contractScope !== '단가' && formData.contractScope !== '물량(실적)' && (
<p className="text-sm text-red-600">계약통화는 필수값입니다.</p>
)}
</div>
diff --git a/lib/general-contracts/main/create-general-contract-dialog.tsx b/lib/general-contracts/main/create-general-contract-dialog.tsx
index 168b8cbc..04f70834 100644
--- a/lib/general-contracts/main/create-general-contract-dialog.tsx
+++ b/lib/general-contracts/main/create-general-contract-dialog.tsx
@@ -205,6 +205,11 @@ export function CreateGeneralContractDialog() {
onChange={(e) => setForm(prev => ({ ...prev, name: e.target.value }))}
placeholder="계약명을 입력하세요"
/>
+ {form.type === 'SC' && (
+ <p className="text-sm text-blue-600 mt-1">
+ 납품예정 품목 및 수량을 명기하세요. 납품 품목 또는 작업 내용은 구체적으로 작성하되, 수량(물량)이 정확하지 않을 경우, 상호협의하에 변경 가능하며, 수량(물량) 등은 개별계약(PO)시 명기하세요
+ </p>
+ )}
</div>
</div>
diff --git a/lib/general-contracts/main/general-contract-update-sheet.tsx b/lib/general-contracts/main/general-contract-update-sheet.tsx
index 18095516..074558ec 100644
--- a/lib/general-contracts/main/general-contract-update-sheet.tsx
+++ b/lib/general-contracts/main/general-contract-update-sheet.tsx
@@ -46,8 +46,8 @@ const updateContractSchema = z.object({
name: z.string().min(1, "계약명을 입력해주세요"),
startDate: z.string().optional(), // AD, LO, OF 계약인 경우 선택사항
endDate: z.string().optional(), // AD, LO, OF 계약인 경우 선택사항
- validityEndDate: z.string().optional(), // LO 계약인 경우에만 필수값으로 처리
- contractScope: z.string().min(1, "계약확정범위를 선택해주세요"),
+ validityEndDate: z.string().optional(),
+ contractScope: z.string().optional(),
notes: z.string().optional(),
linkedRfqOrItb: z.string().optional(),
linkedPoNumber: z.string().optional(),
@@ -70,15 +70,6 @@ const updateContractSchema = z.object({
})
}
}
-
- // LO 계약인 경우 계약체결유효기간 필수값 체크
- if (data.type === 'LO' && !data.validityEndDate) {
- ctx.addIssue({
- code: z.ZodIssueCode.custom,
- message: "LO 계약의 경우 계약체결유효기간은 필수 항목입니다",
- path: ["validityEndDate"],
- })
- }
})
type UpdateContractFormData = z.infer<typeof updateContractSchema>
@@ -355,10 +346,7 @@ export function GeneralContractUpdateSheet({
name="validityEndDate"
render={({ field }) => (
<FormItem>
- <FormLabel>
- 유효기간종료일
- {form.watch('type') === 'LO' && <span className="text-red-600 ml-1">*</span>}
- </FormLabel>
+ <FormLabel>유효기간종료일</FormLabel>
<FormControl>
<Input type="date" {...field} />
</FormControl>
@@ -373,7 +361,7 @@ export function GeneralContractUpdateSheet({
name="contractScope"
render={({ field }) => (
<FormItem>
- <FormLabel>계약확정범위 *</FormLabel>
+ <FormLabel>계약확정범위</FormLabel>
<Select onValueChange={field.onChange} value={field.value}>
<FormControl>
<SelectTrigger>