diff --git a/app/Console/Commands/ResetDemoAccountCommand.php b/app/Console/Commands/ResetDemoAccountCommand.php index 324e9e8f..8506575d 100644 --- a/app/Console/Commands/ResetDemoAccountCommand.php +++ b/app/Console/Commands/ResetDemoAccountCommand.php @@ -468,8 +468,6 @@ class ResetDemoAccountCommand extends Command $currentDate->addDay(); } break; - case BudgetPeriodType::Custom: - break; } $iteration++; diff --git a/app/Enums/BudgetPeriodType.php b/app/Enums/BudgetPeriodType.php index d4c3f08e..1765d0de 100644 --- a/app/Enums/BudgetPeriodType.php +++ b/app/Enums/BudgetPeriodType.php @@ -7,7 +7,6 @@ enum BudgetPeriodType: string case Monthly = 'monthly'; case Weekly = 'weekly'; case Biweekly = 'biweekly'; - case Custom = 'custom'; public function label(): string { @@ -15,7 +14,6 @@ enum BudgetPeriodType: string self::Monthly => 'Monthly', self::Weekly => 'Weekly', self::Biweekly => 'Bi-weekly', - self::Custom => 'Custom', }; } } diff --git a/app/Http/Controllers/BudgetController.php b/app/Http/Controllers/BudgetController.php index c64e2564..c87f3de7 100644 --- a/app/Http/Controllers/BudgetController.php +++ b/app/Http/Controllers/BudgetController.php @@ -119,7 +119,6 @@ class BudgetController extends Controller $budget = $request->user()->budgets()->create([ 'name' => $request->name, 'period_type' => $request->period_type, - 'period_duration' => $request->period_duration, 'period_start_day' => $request->period_start_day, 'category_id' => $request->category_id, 'label_id' => $request->label_id, @@ -145,7 +144,6 @@ class BudgetController extends Controller $budget->update($request->only([ 'name', 'period_type', - 'period_duration', 'period_start_day', 'category_id', 'label_id', diff --git a/app/Http/Requests/StoreBudgetRequest.php b/app/Http/Requests/StoreBudgetRequest.php index f44a0997..9fdd3bb8 100644 --- a/app/Http/Requests/StoreBudgetRequest.php +++ b/app/Http/Requests/StoreBudgetRequest.php @@ -21,7 +21,6 @@ class StoreBudgetRequest extends FormRequest return [ 'name' => ['required', 'string', 'max:255'], 'period_type' => ['required', Rule::enum(BudgetPeriodType::class)], - 'period_duration' => ['nullable', 'integer', 'min:1', 'max:365'], 'period_start_day' => ['nullable', 'integer', 'min:0', 'max:31'], 'category_id' => ['nullable', Rule::exists('categories', 'id')->where('user_id', $userId)], 'label_id' => ['nullable', Rule::exists('labels', 'id')->where('user_id', $userId)], diff --git a/app/Http/Requests/UpdateBudgetRequest.php b/app/Http/Requests/UpdateBudgetRequest.php index e06420d8..7cd5dca7 100644 --- a/app/Http/Requests/UpdateBudgetRequest.php +++ b/app/Http/Requests/UpdateBudgetRequest.php @@ -21,7 +21,6 @@ class UpdateBudgetRequest extends FormRequest return [ 'name' => ['sometimes', 'string', 'max:255'], 'period_type' => ['sometimes', Rule::enum(BudgetPeriodType::class)], - 'period_duration' => ['nullable', 'integer', 'min:1', 'max:365'], 'period_start_day' => ['nullable', 'integer', 'min:0', 'max:31'], 'category_id' => ['nullable', Rule::exists('categories', 'id')->where('user_id', $userId)], 'label_id' => ['nullable', Rule::exists('labels', 'id')->where('user_id', $userId)], diff --git a/app/Models/Budget.php b/app/Models/Budget.php index 1ca7505c..9d87dde5 100644 --- a/app/Models/Budget.php +++ b/app/Models/Budget.php @@ -23,7 +23,6 @@ class Budget extends Model 'user_id', 'name', 'period_type', - 'period_duration', 'period_start_day', 'category_id', 'label_id', @@ -35,7 +34,6 @@ class Budget extends Model return [ 'period_type' => BudgetPeriodType::class, 'rollover_type' => RolloverType::class, - 'period_duration' => 'integer', 'period_start_day' => 'integer', ]; } diff --git a/app/Services/BudgetPeriodService.php b/app/Services/BudgetPeriodService.php index 50681d7e..76628776 100644 --- a/app/Services/BudgetPeriodService.php +++ b/app/Services/BudgetPeriodService.php @@ -80,17 +80,6 @@ class BudgetPeriodService $endDate = $startDate->copy()->addWeeks(2)->subDay(); break; - case BudgetPeriodType::Custom: - $duration = $budget->period_duration ?? 30; - $startDate->day($budget->period_start_day ?? 1); - if ($startDate > $referenceDate) { - $startDate->subDays($duration); - } - $endDate = $startDate->copy()->addDays($duration)->subDay(); - break; - - default: - $endDate = $startDate->copy()->addMonth()->subDay(); } return [$startDate, $endDate]; diff --git a/database/factories/BudgetFactory.php b/database/factories/BudgetFactory.php index 4611ce51..51552e19 100644 --- a/database/factories/BudgetFactory.php +++ b/database/factories/BudgetFactory.php @@ -23,7 +23,6 @@ class BudgetFactory extends Factory 'user_id' => User::factory(), 'name' => fake()->words(2, true).' Budget', 'period_type' => fake()->randomElement(BudgetPeriodType::cases()), - 'period_duration' => null, 'period_start_day' => 1, ]; } @@ -43,13 +42,4 @@ class BudgetFactory extends Factory 'period_start_day' => fake()->numberBetween(0, 6), ]); } - - public function custom(): static - { - return $this->state(fn (array $attributes) => [ - 'period_type' => BudgetPeriodType::Custom, - 'period_duration' => fake()->numberBetween(7, 90), - 'period_start_day' => fake()->numberBetween(1, 28), - ]); - } } diff --git a/database/migrations/2026_05_05_132023_convert_custom_budgets_to_monthly.php b/database/migrations/2026_05_05_132023_convert_custom_budgets_to_monthly.php new file mode 100644 index 00000000..10335388 --- /dev/null +++ b/database/migrations/2026_05_05_132023_convert_custom_budgets_to_monthly.php @@ -0,0 +1,23 @@ +where('period_type', 'custom') + ->update([ + 'period_type' => 'monthly', + 'period_duration' => null, + 'period_start_day' => 1, + ]); + } + + public function down(): void + { + // Irreversible: original period_type/duration cannot be recovered. + } +}; diff --git a/resources/js/components/budgets/create-budget-dialog.tsx b/resources/js/components/budgets/create-budget-dialog.tsx index e30c2929..546c561b 100644 --- a/resources/js/components/budgets/create-budget-dialog.tsx +++ b/resources/js/components/budgets/create-budget-dialog.tsx @@ -52,7 +52,6 @@ export function CreateBudgetDialog({ const [open, setOpen] = useState(false); const [name, setName] = useState(''); const [periodType, setPeriodType] = useState('monthly'); - const [periodDuration, setPeriodDuration] = useState(null); const [periodStartDay, setPeriodStartDay] = useState(1); const [selectedCategoryId, setSelectedCategoryId] = useState(''); const [selectedLabelId, setSelectedLabelId] = useState(''); @@ -89,7 +88,6 @@ export function CreateBudgetDialog({ { name, period_type: periodType, - period_duration: periodDuration, period_start_day: periodStartDay, category_id: selectedCategoryId || null, label_id: selectedLabelId || null, @@ -101,7 +99,6 @@ export function CreateBudgetDialog({ setOpen(false); setName(''); setPeriodType('monthly'); - setPeriodDuration(null); setPeriodStartDay(1); setSelectedCategoryId(''); setSelectedLabelId(''); @@ -184,29 +181,6 @@ export function CreateBudgetDialog({ - {periodType === 'custom' && ( -
- - {__('Period Duration (days)')} - - - setPeriodDuration( - e.target.value - ? parseInt(e.target.value) - : null, - ) - } - required={periodType === 'custom'} - /> -
- )} -
{periodType === 'monthly' diff --git a/resources/js/components/budgets/edit-budget-dialog.tsx b/resources/js/components/budgets/edit-budget-dialog.tsx index 5855d481..053eafa1 100644 --- a/resources/js/components/budgets/edit-budget-dialog.tsx +++ b/resources/js/components/budgets/edit-budget-dialog.tsx @@ -50,9 +50,6 @@ export function EditBudgetDialog({ const [periodType, setPeriodType] = useState( budget.period_type as BudgetPeriodType, ); - const [periodDuration, setPeriodDuration] = useState( - budget.period_duration, - ); const [periodStartDay, setPeriodStartDay] = useState( budget.period_start_day || 1, ); @@ -68,7 +65,6 @@ export function EditBudgetDialog({ if (open && budget) { setName(budget.name); setPeriodType(budget.period_type as BudgetPeriodType); - setPeriodDuration(budget.period_duration); setPeriodStartDay(budget.period_start_day || 1); setAllocatedAmount(currentPeriod.allocated_amount); setRolloverType(budget.rollover_type as RolloverType); @@ -84,7 +80,6 @@ export function EditBudgetDialog({ { name, period_type: periodType, - period_duration: periodDuration, period_start_day: periodStartDay, allocated_amount: allocatedAmount, rollover_type: rolloverType, @@ -150,31 +145,6 @@ export function EditBudgetDialog({
- {periodType === 'custom' && ( -
- - - setPeriodDuration( - e.target.value - ? parseInt(e.target.value) - : null, - ) - } - required={periodType === 'custom'} - /> -
- )} -