diff --git a/src/components/BudgetTabContent.tsx b/src/components/BudgetTabContent.tsx index 0cb4642..052b09e 100644 --- a/src/components/BudgetTabContent.tsx +++ b/src/components/BudgetTabContent.tsx @@ -33,8 +33,8 @@ const BudgetTabContent: React.FC = ({ const actualPercentage = targetAmount > 0 ? Math.round(spentAmount / targetAmount * 100) : 0; const percentage = actualPercentage; - // 예산이 설정되었는지 여부 확인 (0이면 미설정으로 간주) - const isBudgetSet = targetAmount > 0; + // 예산이 설정되었는지 여부 확인 (정확히 0이면 미설정으로 간주) + const isBudgetSet = targetAmount !== 0; // 예산 초과 여부 계산 const isOverBudget = spentAmount > targetAmount && targetAmount > 0; diff --git a/src/contexts/budget/budgetUtils.ts b/src/contexts/budget/budgetUtils.ts index 1071adf..97feec3 100644 --- a/src/contexts/budget/budgetUtils.ts +++ b/src/contexts/budget/budgetUtils.ts @@ -111,7 +111,7 @@ export const calculateUpdatedBudgetData = ( }; }; -// 지출액 계산 (일일, 주간, 월간) +// 지출액 계산 (일일, 주간, 월간) - 문제 수정 export const calculateSpentAmounts = ( transactions: Transaction[], prevBudgetData: BudgetData @@ -136,22 +136,27 @@ export const calculateSpentAmounts = ( // 이번 달 총 지출 계산 const monthlySpent = expenseTransactions.reduce((sum, t) => sum + t.amount, 0); + // 기존 예산 목표 유지 + const dailyTarget = prevBudgetData.daily.targetAmount; + const weeklyTarget = prevBudgetData.weekly.targetAmount; + const monthlyTarget = prevBudgetData.monthly.targetAmount; + // 예산 데이터 업데이트 return { daily: { - targetAmount: prevBudgetData.daily.targetAmount, + targetAmount: dailyTarget, spentAmount: dailySpent, - remainingAmount: Math.max(0, prevBudgetData.daily.targetAmount - dailySpent) + remainingAmount: Math.max(0, dailyTarget - dailySpent) }, weekly: { - targetAmount: prevBudgetData.weekly.targetAmount, + targetAmount: weeklyTarget, spentAmount: weeklySpent, - remainingAmount: Math.max(0, prevBudgetData.weekly.targetAmount - weeklySpent) + remainingAmount: Math.max(0, weeklyTarget - weeklySpent) }, monthly: { - targetAmount: prevBudgetData.monthly.targetAmount, + targetAmount: monthlyTarget, spentAmount: monthlySpent, - remainingAmount: Math.max(0, prevBudgetData.monthly.targetAmount - monthlySpent) + remainingAmount: Math.max(0, monthlyTarget - monthlySpent) } }; }; diff --git a/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts b/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts index aaaf271..ebb7a94 100644 --- a/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts +++ b/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts @@ -28,6 +28,18 @@ export const useExtendedBudgetUpdate = ( delete newCategoryBudgets['교통비']; } + // 식비 값이 있으면 음식으로 통합 + if (newCategoryBudgets['식비'] && !newCategoryBudgets['음식']) { + newCategoryBudgets['음식'] = newCategoryBudgets['식비']; + delete newCategoryBudgets['식비']; + } + + // 생활비 값이 있으면 쇼핑으로 통합 + if (newCategoryBudgets['생활비'] && !newCategoryBudgets['쇼핑']) { + newCategoryBudgets['쇼핑'] = newCategoryBudgets['생활비']; + delete newCategoryBudgets['생활비']; + } + // 카테고리 예산 저장 updateCategoryBudgets(newCategoryBudgets); diff --git a/src/contexts/budget/storage/categoryStorage.ts b/src/contexts/budget/storage/categoryStorage.ts index f730d65..4a7e821 100644 --- a/src/contexts/budget/storage/categoryStorage.ts +++ b/src/contexts/budget/storage/categoryStorage.ts @@ -22,6 +22,8 @@ export const loadCategoryBudgetsFromStorage = (): Record => { filteredBudgets[category] = parsed['식비']; } else if (category === '교통' && parsed['교통비'] !== undefined) { filteredBudgets[category] = parsed['교통비']; + } else if (category === '쇼핑' && parsed['생활비'] !== undefined) { + filteredBudgets[category] = parsed['생활비']; } else { filteredBudgets[category] = parsed[category] || 0; } @@ -44,6 +46,8 @@ export const loadCategoryBudgetsFromStorage = (): Record => { filteredBudgets[category] = parsedBackup['식비']; } else if (category === '교통' && parsedBackup['교통비'] !== undefined) { filteredBudgets[category] = parsedBackup['교통비']; + } else if (category === '쇼핑' && parsedBackup['생활비'] !== undefined) { + filteredBudgets[category] = parsedBackup['생활비']; } else { filteredBudgets[category] = parsedBackup[category] || 0; } @@ -89,6 +93,10 @@ export const saveCategoryBudgetsToStorage = (categoryBudgets: Record 교통으로 표준화 if (category === '교통') { filteredBudgets[category] = categoryBudgets[category] || categoryBudgets['교통비'] || 0; + } else if (category === '음식') { + filteredBudgets[category] = categoryBudgets[category] || categoryBudgets['식비'] || 0; + } else if (category === '쇼핑') { + filteredBudgets[category] = categoryBudgets[category] || categoryBudgets['생활비'] || 0; } else { filteredBudgets[category] = categoryBudgets[category] || 0; } diff --git a/src/contexts/budget/storage/resetStorage.ts b/src/contexts/budget/storage/resetStorage.ts index 3cea7e1..3561897 100644 --- a/src/contexts/budget/storage/resetStorage.ts +++ b/src/contexts/budget/storage/resetStorage.ts @@ -20,8 +20,11 @@ export const resetAllData = (): void => { // 모든 관련 데이터 키 목록 (분석 페이지의 데이터 포함) const dataKeys = [ 'transactions', + 'transactions_backup', 'categoryBudgets', + 'categoryBudgets_backup', 'budgetData', + 'budgetData_backup', 'budget', 'monthlyExpenses', 'categorySpending', @@ -42,7 +45,6 @@ export const resetAllData = (): void => { dataKeys.forEach(key => { console.log(`삭제 중: ${key}`); localStorage.removeItem(key); - localStorage.removeItem(`${key}_backup`); // 백업 키도 함께 삭제 }); // 파일별 초기화 함수 호출