Fix data initialization issues

Addresses problems with budget display and data reset:
- Ensures budget data is correctly displayed after initialization.
- Fixes issue where daily and weekly budget data were missing.
- Corrects data reset to properly clear transaction data.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-22 07:58:53 +00:00
parent 55c2ece3ce
commit d4afc2eedb
5 changed files with 37 additions and 10 deletions

View File

@@ -33,8 +33,8 @@ const BudgetTabContent: React.FC<BudgetTabContentProps> = ({
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;

View File

@@ -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)
}
};
};

View File

@@ -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);

View File

@@ -22,6 +22,8 @@ export const loadCategoryBudgetsFromStorage = (): Record<string, number> => {
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<string, number> => {
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<string, num
// 교통비 -> 교통으로 표준화
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;
}

View File

@@ -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`); // 백업 키도 함께 삭제
});
// 파일별 초기화 함수 호출