From 535de26b9cf3242c04543d6891d78352b9593a60 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 11 Nov 2025 09:22:58 +0000 Subject: (최겸) 구매 수정사항 개발 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../detail/general-contract-basic-info.tsx | 28 ++++++++++++++-------- .../main/create-general-contract-dialog.tsx | 5 ++++ .../main/general-contract-update-sheet.tsx | 20 ++++------------ 3 files changed, 27 insertions(+), 26 deletions(-) (limited to 'lib/general-contracts') 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) {
- {contract?.type === 'AD' || contract?.type === 'AW' ? ( + {(contract?.type === 'AD' || contract?.type === 'AW') || formData.contractScope === '단가' || formData.contractScope === '물량(실적)' ? (
- + 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 !== '물량(실적)' && (

계약통화는 필수값입니다.

)}
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' && ( +

+ 납품예정 품목 및 수량을 명기하세요. 납품 품목 또는 작업 내용은 구체적으로 작성하되, 수량(물량)이 정확하지 않을 경우, 상호협의하에 변경 가능하며, 수량(물량) 등은 개별계약(PO)시 명기하세요 +

+ )}
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 @@ -355,10 +346,7 @@ export function GeneralContractUpdateSheet({ name="validityEndDate" render={({ field }) => ( - - 유효기간종료일 - {form.watch('type') === 'LO' && *} - + 유효기간종료일 @@ -373,7 +361,7 @@ export function GeneralContractUpdateSheet({ name="contractScope" render={({ field }) => ( - 계약확정범위 * + 계약확정범위