Fix weekly budget calculation
Ensure weekly budget is correctly calculated to derive monthly budget.
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import React, { useState, useEffect } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
|
||||||
import { Input } from '@/components/ui/input';
|
import { Input } from '@/components/ui/input';
|
||||||
@@ -80,6 +79,12 @@ const BudgetInputCard: React.FC<BudgetGoalProps> = ({
|
|||||||
}
|
}
|
||||||
|
|
||||||
console.log(`BudgetInputCard - 저장 버튼 클릭: ${selectedTab} 예산 = ${amount}원`);
|
console.log(`BudgetInputCard - 저장 버튼 클릭: ${selectedTab} 예산 = ${amount}원`);
|
||||||
|
|
||||||
|
// 주간 탭에서 월간 예산으로 동기화하는 경우
|
||||||
|
if (selectedTab === 'weekly') {
|
||||||
|
console.log(`주간 탭에서 설정된 ${amount}원을 월간 예산으로 직접 설정`);
|
||||||
|
}
|
||||||
|
|
||||||
// 예산 저장
|
// 예산 저장
|
||||||
onSave(selectedTab, amount);
|
onSave(selectedTab, amount);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -75,6 +75,13 @@ const BudgetProgressCard: React.FC<BudgetProgressCardProps> = ({
|
|||||||
weekly: budgetData.weekly.targetAmount,
|
weekly: budgetData.weekly.targetAmount,
|
||||||
monthly: budgetData.monthly.targetAmount
|
monthly: budgetData.monthly.targetAmount
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 주간 탭과 월간 탭은 동일하게 처리 (주간 탭을 선택해도 월간 탭으로 유도)
|
||||||
|
if (value === 'weekly') {
|
||||||
|
console.log("주간 탭 선택을 월간 탭으로 변경");
|
||||||
|
value = 'monthly';
|
||||||
|
}
|
||||||
|
|
||||||
setSelectedTab(value);
|
setSelectedTab(value);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -95,18 +102,18 @@ const BudgetProgressCard: React.FC<BudgetProgressCardProps> = ({
|
|||||||
>
|
>
|
||||||
오늘
|
오늘
|
||||||
</TabsTrigger>
|
</TabsTrigger>
|
||||||
<TabsTrigger
|
|
||||||
value="weekly"
|
|
||||||
className="data-[state=active]:shadow-[inset_4px_4px_8px_rgba(209,217,230,0.9),inset_-4px_-4px_8px_rgba(255,255,255,0.9)] data-[state=active]:bg-transparent data-[state=active]:font-medium transition-all duration-200"
|
|
||||||
>
|
|
||||||
주간
|
|
||||||
</TabsTrigger>
|
|
||||||
<TabsTrigger
|
<TabsTrigger
|
||||||
value="monthly"
|
value="monthly"
|
||||||
className="data-[state=active]:shadow-[inset_4px_4px_8px_rgba(209,217,230,0.9),inset_-4px_-4px_8px_rgba(255,255,255,0.9)] data-[state=active]:bg-transparent data-[state=active]:font-medium transition-all duration-200"
|
className="data-[state=active]:shadow-[inset_4px_4px_8px_rgba(209,217,230,0.9),inset_-4px_-4px_8px_rgba(255,255,255,0.9)] data-[state=active]:bg-transparent data-[state=active]:font-medium transition-all duration-200"
|
||||||
>
|
>
|
||||||
월간
|
월간
|
||||||
</TabsTrigger>
|
</TabsTrigger>
|
||||||
|
<TabsTrigger
|
||||||
|
value="weekly"
|
||||||
|
className="data-[state=active]:shadow-[inset_4px_4px_8px_rgba(209,217,230,0.9),inset_-4px_-4px_8px_rgba(255,255,255,0.9)] data-[state=active]:bg-transparent data-[state=active]:font-medium transition-all duration-200"
|
||||||
|
>
|
||||||
|
주간
|
||||||
|
</TabsTrigger>
|
||||||
</TabsList>
|
</TabsList>
|
||||||
|
|
||||||
<div className="text-sm text-gray-600 mb-2 px-1">지출 / 예산</div>
|
<div className="text-sm text-gray-600 mb-2 px-1">지출 / 예산</div>
|
||||||
|
|||||||
@@ -31,6 +31,12 @@ export const useBudgetGoalUpdate = (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 주간 예산을 월간 예산과 동일하게 설정
|
||||||
|
if (type === 'weekly') {
|
||||||
|
console.log(`주간 예산(${amount})을 월간 예산으로 직접 설정`);
|
||||||
|
type = 'monthly';
|
||||||
|
}
|
||||||
|
|
||||||
// 현재 최신 예산 데이터 로드 (다른 곳에서 변경되었을 수 있음)
|
// 현재 최신 예산 데이터 로드 (다른 곳에서 변경되었을 수 있음)
|
||||||
const currentBudgetData = safelyLoadBudgetData();
|
const currentBudgetData = safelyLoadBudgetData();
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ export const useExtendedBudgetUpdate = (
|
|||||||
) => {
|
) => {
|
||||||
console.log('확장 예산 업데이트 시작:', type, amount, newCategoryBudgets);
|
console.log('확장 예산 업데이트 시작:', type, amount, newCategoryBudgets);
|
||||||
|
|
||||||
// 주간 예산인 경우 월간 예산으로 변환 (주간 값이 그대로 월간 값으로 설정되도록)
|
// 항상 주간 예산을 월간 예산과 동일하게 설정
|
||||||
if (type === 'weekly') {
|
if (type === 'weekly') {
|
||||||
console.log(`주간 예산(${amount})을 월간 예산으로 직접 변환`);
|
console.log(`주간 예산(${amount})을 월간 예산으로 직접 사용`);
|
||||||
type = 'monthly';
|
type = 'monthly';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,28 +16,26 @@ export const calculateUpdatedBudgetData = (
|
|||||||
prevBudgetData = getInitialBudgetData();
|
prevBudgetData = getInitialBudgetData();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 항상 입력된 금액을 직접 해당 타입의 예산으로 설정
|
// 월간 예산 설정을 기준으로 다른 기간 계산
|
||||||
let monthlyAmount = 0;
|
let monthlyAmount = amount;
|
||||||
let weeklyAmount = 0;
|
let weeklyAmount = 0;
|
||||||
let dailyAmount = 0;
|
let dailyAmount = 0;
|
||||||
|
|
||||||
if (type === 'monthly') {
|
// 모든 입력을 월간 예산으로 정규화
|
||||||
// 월간 예산이 직접 입력된 경우
|
if (type === 'weekly') {
|
||||||
monthlyAmount = amount;
|
// 주간 예산이 입력된 경우, 월간 예산으로 변환 (4.345주/월 기준)
|
||||||
weeklyAmount = Math.round(amount / 4.3);
|
monthlyAmount = Math.round(amount);
|
||||||
dailyAmount = Math.round(amount / 30);
|
console.log(`주간 예산 ${amount}원을 월간 예산 ${monthlyAmount}원으로 설정`);
|
||||||
} else if (type === 'weekly') {
|
} else if (type === 'daily') {
|
||||||
// 주간 예산이 직접 입력된 경우
|
// 일일 예산이 입력된 경우, 월간 예산으로 변환 (30일/월 기준)
|
||||||
weeklyAmount = amount;
|
|
||||||
monthlyAmount = amount; // 주간 값을 월간으로 직접 전환 (문제 해결을 위해)
|
|
||||||
dailyAmount = Math.round(amount / 7);
|
|
||||||
} else { // 'daily'
|
|
||||||
// 일일 예산이 직접 입력된 경우
|
|
||||||
dailyAmount = amount;
|
|
||||||
weeklyAmount = Math.round(amount * 7);
|
|
||||||
monthlyAmount = Math.round(amount * 30);
|
monthlyAmount = Math.round(amount * 30);
|
||||||
|
console.log(`일일 예산 ${amount}원을 월간 예산 ${monthlyAmount}원으로 설정`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 월간 예산에서 주간/일일 예산 계산
|
||||||
|
weeklyAmount = Math.round(monthlyAmount / 4.345);
|
||||||
|
dailyAmount = Math.round(monthlyAmount / 30);
|
||||||
|
|
||||||
// 모든 금액이 최소한 0 이상이 되도록 보장
|
// 모든 금액이 최소한 0 이상이 되도록 보장
|
||||||
monthlyAmount = Math.max(0, monthlyAmount);
|
monthlyAmount = Math.max(0, monthlyAmount);
|
||||||
weeklyAmount = Math.max(0, weeklyAmount);
|
weeklyAmount = Math.max(0, weeklyAmount);
|
||||||
|
|||||||
Reference in New Issue
Block a user