summaryrefslogtreecommitdiff
path: root/lib/general-contracts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/general-contracts')
-rw-r--r--lib/general-contracts/detail/general-contract-basic-info.tsx66
-rw-r--r--lib/general-contracts/detail/general-contract-items-table.tsx22
2 files changed, 55 insertions, 33 deletions
diff --git a/lib/general-contracts/detail/general-contract-basic-info.tsx b/lib/general-contracts/detail/general-contract-basic-info.tsx
index fc147b59..b0378912 100644
--- a/lib/general-contracts/detail/general-contract-basic-info.tsx
+++ b/lib/general-contracts/detail/general-contract-basic-info.tsx
@@ -26,6 +26,26 @@ interface ContractBasicInfoProps {
contractId: number
}
+interface PaymentBeforeDelivery {
+ apBond?: boolean
+ apBondPercent?: string
+ drawingSubmission?: boolean
+ drawingSubmissionPercent?: string
+ materialPurchase?: boolean
+ materialPurchasePercent?: string
+ additionalCondition?: boolean
+ additionalConditionPercent?: string
+}
+
+interface PaymentAfterDelivery {
+ commissioning?: boolean
+ commissioningPercent?: string
+ finalDocument?: boolean
+ finalDocumentPercent?: string
+ other?: boolean
+ otherText?: string
+}
+
export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
const session = useSession()
const [isLoading, setIsLoading] = useState(false)
@@ -59,10 +79,10 @@ export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
linkedBidNumber: '',
notes: '',
// 개별 JSON 필드들 (스키마에 맞게)
- paymentBeforeDelivery: {},
+ paymentBeforeDelivery: {} as PaymentBeforeDelivery,
paymentDelivery: '', // varchar 타입
paymentDeliveryAdditionalText: '',
- paymentAfterDelivery: {},
+ paymentAfterDelivery: {} as PaymentAfterDelivery,
paymentTerm: '',
taxType: '',
liquidatedDamages: false,
@@ -314,7 +334,7 @@ export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
if (formData.contractScope !== '단가' && formData.contractScope !== '물량(실적)' && !formData.currency) {
validationErrors.push('계약통화')
}
- if (!formData.paymentTerm) validationErrors.push('지불조건')
+ // if (!formData.paymentTerm) validationErrors.push('지불조건')
if (!formData.taxType) validationErrors.push('세금조건')
if (validationErrors.length > 0) {
@@ -1132,10 +1152,11 @@ export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
</div>
</div>
- {/* 지불조건 */}
+ {/* 지불조건 -> 세금조건 (지불조건 삭제됨) */}
<div className="space-y-2">
- <Label className="text-sm font-medium">지불조건</Label>
+ <Label className="text-sm font-medium">세금조건</Label>
<div className="space-y-2">
+ {/* 지불조건 필드 삭제됨
<div className="space-y-1">
<Label htmlFor="paymentTerm" className="text-xs">지불조건 *</Label>
<Select
@@ -1160,6 +1181,7 @@ export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
</SelectContent>
</Select>
</div>
+ */}
<div className="space-y-1">
<Label htmlFor="taxType" className="text-xs">세금조건 *</Label>
<Select
@@ -1196,19 +1218,27 @@ export function ContractBasicInfo({ contractId }: ContractBasicInfoProps) {
}))}
className="rounded w-4 h-4"
/>
- <Label htmlFor="liquidatedDamages" className="text-xs">지체상금</Label>
- <Input
- type="number"
- min="0"
- placeholder="%"
- className="w-16 h-6 text-xs"
- value={formData.liquidatedDamagesPercent || ''}
- onChange={(e) => setFormData(prev => ({
- ...prev,
- liquidatedDamagesPercent: e.target.value
- }))}
- disabled={!formData.liquidatedDamages}
- />
+ <div className="flex flex-col">
+ <Label htmlFor="liquidatedDamages" className="text-xs">지체상금 (최대 징수 가능 비율)</Label>
+ <span className="text-[10px] text-muted-foreground">
+ * 일반적인 계약조건: 지체일수당 계약금액의 0.3%, 최대치 10%
+ </span>
+ </div>
+ <div className="flex items-center gap-1">
+ <Input
+ type="number"
+ min="0"
+ placeholder=""
+ className="w-16 h-6 text-xs text-right"
+ value={formData.liquidatedDamagesPercent || ''}
+ onChange={(e) => setFormData(prev => ({
+ ...prev,
+ liquidatedDamagesPercent: e.target.value
+ }))}
+ disabled={!formData.liquidatedDamages}
+ />
+ <span className="text-xs">%</span>
+ </div>
</div>
</div>
</div>
diff --git a/lib/general-contracts/detail/general-contract-items-table.tsx b/lib/general-contracts/detail/general-contract-items-table.tsx
index bda2901e..15e5c926 100644
--- a/lib/general-contracts/detail/general-contract-items-table.tsx
+++ b/lib/general-contracts/detail/general-contract-items-table.tsx
@@ -460,7 +460,11 @@ export function ContractItemsTable({
id="batch-unit-price"
type="number"
value={batchInputData.contractUnitPrice}
- onChange={(e) => setBatchInputData(prev => ({ ...prev, contractUnitPrice: e.target.value }))}
+ onChange={(e) => {
+ // Leading zero removal
+ const val = e.target.value.replace(/^0+(?=[0-9])/, '')
+ setBatchInputData(prev => ({ ...prev, contractUnitPrice: val }))
+ }}
placeholder="계약단가 입력 (선택사항)"
/>
</div>
@@ -507,7 +511,7 @@ export function ContractItemsTable({
</div>
{/* 요약 정보 */}
- <div className="grid grid-cols-2 md:grid-cols-4 gap-4 mt-4">
+ {/* <div className="grid grid-cols-2 md:grid-cols-4 gap-4 mt-4">
<div className="space-y-1">
<Label className="text-sm font-medium">총 계약금액</Label>
<div className={`text-lg font-bold ${isTotalAmountDisabled ? 'text-gray-400' : 'text-primary'}`}>
@@ -515,24 +519,12 @@ export function ContractItemsTable({
</div>
</div>
<div className="space-y-1">
- <Label className="text-sm font-medium">가용예산</Label>
- <div className="text-lg font-bold">
- {formatCurrency(availableBudget, localItems[0]?.contractCurrency || 'KRW')}
- </div>
- </div>
- <div className="space-y-1">
- <Label className="text-sm font-medium">가용예산 比 (금액차)</Label>
- <div className={`text-lg font-bold ${amountDifference >= 0 ? 'text-green-600' : 'text-red-600'}`}>
- {formatCurrency(amountDifference, localItems[0]?.contractCurrency || 'KRW')}
- </div>
- </div>
- <div className="space-y-1">
<Label className="text-sm font-medium">가용예산 比 (비율)</Label>
<div className={`text-lg font-bold ${budgetRatio <= 100 ? 'text-green-600' : 'text-red-600'}`}>
{budgetRatio.toFixed(1)}%
</div>
</div>
- </div>
+ </div> */}
</CardHeader>
<CardContent>