diff --git a/src/components/BudgetInputCard.tsx b/src/components/BudgetInputCard.tsx index a3215cd..08fb92c 100644 --- a/src/components/BudgetInputCard.tsx +++ b/src/components/BudgetInputCard.tsx @@ -1,3 +1,4 @@ + import React, { useState, useEffect } from 'react'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Input } from '@/components/ui/input'; @@ -21,7 +22,7 @@ const BudgetInputCard: React.FC = ({ onSave, highlight = false }) => { - const [selectedTab, setSelectedTab] = useState<'daily' | 'weekly' | 'monthly'>('daily'); + const [selectedTab, setSelectedTab] = useState<'daily' | 'weekly' | 'monthly'>('monthly'); const [budgetInputs, setBudgetInputs] = useState({ daily: initialBudgets.daily > 0 ? initialBudgets.daily.toString() : '', weekly: initialBudgets.weekly > 0 ? initialBudgets.weekly.toString() : '', @@ -38,6 +39,7 @@ const BudgetInputCard: React.FC = ({ // 초기값 변경시 입력 필드 값 업데이트 useEffect(() => { + console.log("BudgetInputCard - 초기 예산값 업데이트:", initialBudgets); setBudgetInputs({ daily: initialBudgets.daily > 0 ? initialBudgets.daily.toString() : '', weekly: initialBudgets.weekly > 0 ? initialBudgets.weekly.toString() : '', @@ -69,16 +71,15 @@ const BudgetInputCard: React.FC = ({ // 즉시 콜랩시블을 닫아 사용자에게 완료 피드백 제공 setIsOpen(false); - // 월간 예산 변경 시 수정 추적 시스템에 기록 - if (selectedTab === 'monthly') { - try { - markBudgetAsModified(amount); - console.log(`[예산 추적] 월간 예산 변경 추적: ${amount}원`); - } catch (error) { - console.error('[예산 추적] 예산 변경 추적 실패:', error); - } + // 예산 변경 시 수정 추적 시스템에 기록 + try { + markBudgetAsModified(amount); + console.log(`[예산 추적] ${selectedTab} 예산 변경 추적: ${amount}원`); + } catch (error) { + console.error('[예산 추적] 예산 변경 추적 실패:', error); } + console.log(`BudgetInputCard - 저장 버튼 클릭: ${selectedTab} 예산 = ${amount}원`); // 예산 저장 onSave(selectedTab, amount); }; @@ -114,7 +115,7 @@ const BudgetInputCard: React.FC = ({ - setSelectedTab(value as 'daily' | 'weekly' | 'monthly')} className="w-full"> + setSelectedTab(value as 'daily' | 'weekly' | 'monthly')} className="w-full"> 일일 예산 주간 예산 diff --git a/src/components/BudgetProgressCard.tsx b/src/components/BudgetProgressCard.tsx index 969d768..53b177e 100644 --- a/src/components/BudgetProgressCard.tsx +++ b/src/components/BudgetProgressCard.tsx @@ -37,6 +37,9 @@ const BudgetProgressCard: React.FC = ({ // 컴포넌트 마운트 및 budgetData 변경 시 업데이트 useEffect(() => { console.log("BudgetProgressCard 데이터 업데이트 - 예산 데이터:", budgetData); + console.log("월간 예산:", budgetData.monthly.targetAmount); + console.log("주간 예산:", budgetData.weekly.targetAmount); + console.log("일일 예산:", budgetData.daily.targetAmount); setLocalBudgetData(budgetData); // 지연 작업으로 이벤트 발생 (컴포넌트 마운트 후 데이터 갱신) @@ -113,7 +116,7 @@ const BudgetProgressCard: React.FC = ({ data={budgetData.daily} formatCurrency={formatCurrency} calculatePercentage={calculatePercentage} - onSaveBudget={(amount, categoryBudgets) => onSaveBudget('monthly', amount, categoryBudgets)} + onSaveBudget={(amount, categoryBudgets) => onSaveBudget('daily', amount, categoryBudgets)} /> @@ -122,7 +125,7 @@ const BudgetProgressCard: React.FC = ({ data={budgetData.weekly} formatCurrency={formatCurrency} calculatePercentage={calculatePercentage} - onSaveBudget={(amount, categoryBudgets) => onSaveBudget('monthly', amount, categoryBudgets)} + onSaveBudget={(amount, categoryBudgets) => onSaveBudget('weekly', amount, categoryBudgets)} /> diff --git a/src/contexts/budget/hooks/useBudgetGoalUpdate.ts b/src/contexts/budget/hooks/useBudgetGoalUpdate.ts index 78746a7..c0ff0c1 100644 --- a/src/contexts/budget/hooks/useBudgetGoalUpdate.ts +++ b/src/contexts/budget/hooks/useBudgetGoalUpdate.ts @@ -34,8 +34,8 @@ export const useBudgetGoalUpdate = ( // 현재 최신 예산 데이터 로드 (다른 곳에서 변경되었을 수 있음) const currentBudgetData = safelyLoadBudgetData(); - // 예산 데이터 업데이트 - 항상 월간 예산을 기준으로 계산 - const updatedBudgetData = calculateUpdatedBudgetData(currentBudgetData, 'monthly', amount); + // 예산 데이터 업데이트 - 입력된 타입 그대로 사용 + const updatedBudgetData = calculateUpdatedBudgetData(currentBudgetData, type, amount); console.log('새 예산 데이터 계산됨:', updatedBudgetData); // 상태 및 스토리지 둘 다 업데이트 @@ -67,9 +67,10 @@ export const useBudgetGoalUpdate = ( console.log('예산 목표 업데이트 완료:', updatedBudgetData); // 성공 메시지 표시 + const periodText = type === 'daily' ? '일일' : type === 'weekly' ? '주간' : '월간'; toast({ title: "예산 설정 완료", - description: `월간 예산이 ${amount.toLocaleString()}원으로 설정되었습니다.`, + description: `${periodText} 예산이 ${amount.toLocaleString()}원으로 설정되었습니다.`, }); } catch (error) { console.error('예산 목표 업데이트 중 오류:', error); diff --git a/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts b/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts index 01f1fb8..a1d57a1 100644 --- a/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts +++ b/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts @@ -17,12 +17,15 @@ export const useExtendedBudgetUpdate = ( ) => { console.log('확장 예산 업데이트 시작:', type, amount, newCategoryBudgets); - // 무조건 monthly로 설정 - 이게 핵심 수정 부분 - const budgetType = 'monthly'; + // 주간 예산인 경우 월간 예산으로 변환 (주간 값이 그대로 월간 값으로 설정되도록) + if (type === 'weekly') { + console.log(`주간 예산(${amount})을 월간 예산으로 직접 변환`); + type = 'monthly'; + } - // 이제 항상 월간 예산으로 업데이트 - console.log(`예산 업데이트: 타입을 '${budgetType}'로 강제 변환, 금액=${amount}`); - handleBudgetUpdate(budgetType, amount); + // 예산 업데이트 + console.log(`예산 업데이트: 타입=${type}, 금액=${amount}`); + handleBudgetUpdate(type, amount); // 카테고리 예산 업데이트 (제공된 경우) if (newCategoryBudgets) { diff --git a/src/contexts/budget/utils/budgetCalculation.ts b/src/contexts/budget/utils/budgetCalculation.ts index 15418c0..e458ec6 100644 --- a/src/contexts/budget/utils/budgetCalculation.ts +++ b/src/contexts/budget/utils/budgetCalculation.ts @@ -16,21 +16,34 @@ export const calculateUpdatedBudgetData = ( prevBudgetData = getInitialBudgetData(); } - // 모든 계산은 월간 예산을 기준으로 합니다 - let monthlyAmount: number = amount; + // 항상 입력된 금액을 직접 해당 타입의 예산으로 설정 + let monthlyAmount = 0; + let weeklyAmount = 0; + let dailyAmount = 0; - // 월 30일 기준으로 일간 예산 계산 - let dailyAmount = Math.round(monthlyAmount / 30); - - // 월 4.3주 기준으로 주간 예산 계산 - let weeklyAmount = Math.round(monthlyAmount / 4.3); + if (type === 'monthly') { + // 월간 예산이 직접 입력된 경우 + monthlyAmount = amount; + weeklyAmount = Math.round(amount / 4.3); + dailyAmount = Math.round(amount / 30); + } else if (type === 'weekly') { + // 주간 예산이 직접 입력된 경우 + weeklyAmount = amount; + monthlyAmount = amount; // 주간 값을 월간으로 직접 전환 (문제 해결을 위해) + dailyAmount = Math.round(amount / 7); + } else { // 'daily' + // 일일 예산이 직접 입력된 경우 + dailyAmount = amount; + weeklyAmount = Math.round(amount * 7); + monthlyAmount = Math.round(amount * 30); + } // 모든 금액이 최소한 0 이상이 되도록 보장 monthlyAmount = Math.max(0, monthlyAmount); weeklyAmount = Math.max(0, weeklyAmount); dailyAmount = Math.max(0, dailyAmount); - console.log(`최종 예산 계산 결과(월간 기준): 월간=${monthlyAmount}원, 주간=${weeklyAmount}원, 일일=${dailyAmount}원`); + console.log(`최종 예산 계산 결과: 월간=${monthlyAmount}원, 주간=${weeklyAmount}원, 일일=${dailyAmount}원`); // 로그에 이전 예산 데이터 출력 console.log("이전 예산 데이터:", JSON.stringify(prevBudgetData));