diff --git a/src/contexts/budget/budgetUtils.ts b/src/contexts/budget/budgetUtils.ts index 8debc51..52ad4e4 100644 --- a/src/contexts/budget/budgetUtils.ts +++ b/src/contexts/budget/budgetUtils.ts @@ -57,7 +57,7 @@ export const calculateCategorySpending = ( })); }; -// 예산 데이터 업데이트 계산 - 완전히 수정된 함수 +// 예산 데이터 업데이트 계산 - 수정된 함수 export const calculateUpdatedBudgetData = ( prevBudgetData: BudgetData, type: BudgetPeriod, @@ -65,24 +65,26 @@ export const calculateUpdatedBudgetData = ( ): BudgetData => { console.log(`예산 업데이트 계산: 타입=${type}, 금액=${amount}`); - // 모든 타입에 대해 월간 예산을 기준으로 계산 - let monthlyAmount = amount; + // 선택된 타입에 따라 다른 타입의 예산도 자동으로 계산 + let monthlyAmount, weeklyAmount, dailyAmount; - // 선택된 탭이 월간이 아닌 경우, 올바른 월간 값으로 변환 - if (type === 'daily') { - // 일일 예산이 입력된 경우: 일일 * 30 = 월간 - monthlyAmount = amount * 30; - console.log(`일일 예산 ${amount}원 → 월간 예산 ${monthlyAmount}원으로 변환`); + if (type === 'monthly') { + // 월간 예산이 직접 입력된 경우 + monthlyAmount = amount; + dailyAmount = Math.round(monthlyAmount / 30); + weeklyAmount = Math.round(monthlyAmount / 4.3); } else if (type === 'weekly') { - // 주간 예산이 입력된 경우: 주간 * 4.3 = 월간 - monthlyAmount = Math.round(amount * 4.3); - console.log(`주간 예산 ${amount}원 → 월간 예산 ${monthlyAmount}원으로 변환`); + // 주간 예산이 직접 입력된 경우 + weeklyAmount = amount; + monthlyAmount = Math.round(weeklyAmount * 4.3); + dailyAmount = Math.round(weeklyAmount / 7); + } else { // 'daily' + // 일일 예산이 직접 입력된 경우 + dailyAmount = amount; + weeklyAmount = dailyAmount * 7; + monthlyAmount = dailyAmount * 30; } - // 월간 예산을 기준으로 일일, 주간 예산 계산 - const dailyAmount = Math.round(monthlyAmount / 30); - const weeklyAmount = Math.round(monthlyAmount / 4.3); - console.log(`최종 예산 계산: 월간=${monthlyAmount}원, 주간=${weeklyAmount}원, 일일=${dailyAmount}원`); return { diff --git a/src/contexts/budget/hooks/useBudgetDataState.ts b/src/contexts/budget/hooks/useBudgetDataState.ts index 36280eb..be40a9b 100644 --- a/src/contexts/budget/hooks/useBudgetDataState.ts +++ b/src/contexts/budget/hooks/useBudgetDataState.ts @@ -1,4 +1,3 @@ - import { useState, useEffect, useCallback } from 'react'; import { BudgetData, BudgetPeriod } from '../types'; import { @@ -92,7 +91,7 @@ export const useBudgetDataState = (transactions: Transaction[]) => { } }, [transactions, budgetData, isInitialized]); - // 예산 목표 업데이트 함수 + // 예산 목표 업데이트 함수 - 수정됨 const handleBudgetGoalUpdate = useCallback(( type: BudgetPeriod, amount: number, @@ -112,7 +111,7 @@ export const useBudgetDataState = (transactions: Transaction[]) => { return; } - // 예산 업데이트 (카테고리 예산이 있든 없든 무조건 실행) + // 예산 데이터 업데이트 - 일간, 주간, 월간 예산이 모두 자동으로 계산됨 const updatedBudgetData = calculateUpdatedBudgetData(budgetData, type, amount); console.log('새 예산 데이터:', updatedBudgetData); @@ -122,6 +121,12 @@ export const useBudgetDataState = (transactions: Transaction[]) => { // 저장 시간 업데이트 localStorage.setItem('lastBudgetSaveTime', new Date().toISOString()); + + // 성공 메시지 표시 + toast({ + title: "예산 설정 완료", + description: `${type === 'daily' ? '일일' : type === 'weekly' ? '주간' : '월간'} 예산이 ${amount.toLocaleString()}원으로 설정되었습니다.`, + }); } catch (error) { console.error('예산 목표 업데이트 중 오류:', error); toast({ diff --git a/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts b/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts index f574288..352e0c0 100644 --- a/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts +++ b/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts @@ -27,10 +27,12 @@ export const useExtendedBudgetUpdate = ( const totalAmount = Object.values(newCategoryBudgets).reduce((sum, val) => sum + val, 0); console.log('카테고리 총액:', totalAmount); - // 월간 예산 금액으로 예산 데이터 업데이트 (type에 관계없이 월간으로 처리) + // 월간 예산 금액으로 예산 데이터 업데이트 + // 월간 예산을 설정하면 자동으로 일간/주간 예산도 계산되도록 수정 handleBudgetGoalUpdate('monthly', totalAmount); } else { - // 카테고리 예산이 없는 경우, 선택된 기간 유형에 따라 예산 설정 + // 카테고리 예산이 없는 경우, 선택된 기간 유형에 맞게 예산 설정 + // 이 경우에도 다른 기간의 예산이 자동으로 계산됨 handleBudgetGoalUpdate(type, amount); } }, [categoryBudgets, handleBudgetGoalUpdate, updateCategoryBudgets]);