Untitled

 avatar
unknown
plain_text
5 months ago
2.5 kB
2
Indexable
<?php

namespace App\Http\Controllers;

use App\Models\Expense;
use App\Models\Income;
use App\Models\User;
use Illuminate\Http\Request;
use Inertia\Inertia;

class FinanceController extends Controller
{
    public function index(Request $request)
    {
        $user = $request->user();
        $data = [
            'currentAmount' => $user->getCurrentAmount(),
            'totalIncome' => $user->getTotalIncome(),
            'totalExpense' => $user->getTotalExpense(),
            'recentIncomes' => $user->getRecentIncomes(),
            'recentExpenses' => $user->getRecentExpenses(),
        ];

        if ($user->isAdmin()) {
            $adminUser = User::where('is_admin', true)->first();
            $data['globalCurrentAmount'] = $adminUser->getCurrentAmount();
            $data['globalTotalIncome'] = $adminUser->getTotalIncome();
            $data['globalTotalExpense'] = $adminUser->getTotalExpense();
        }

        return Inertia::render('Dashboard/Index', $data);
    }

    public function storeExpense(Request $request)
    {
        $user = $request->user();

        $validated = $request->validate([
            'description' => 'required|string|max:255',
            'amount' => 'required|numeric|min:0',
            'date' => 'required|date',
        ]);

        $expense = $user->expenses()->create($validated);

        if ($user->isAdmin()) {
            $this->updateFinanceStatus('expense', $validated['amount']);
        }

        return back()->with('success', 'Dépense ajoutée avec succès.');
    }

    public function storeIncome(Request $request)
    {
        $user = $request->user();

        $validated = $request->validate([
            'description' => 'required|string|max:255',
            'amount' => 'required|numeric|min:0',
            'date' => 'required|date',
        ]);

        $income = $user->incomes()->create($validated);

        if ($user->isAdmin()) {
            $this->updateFinanceStatus('income', $validated['amount']);
        }

        return back()->with('success', 'Revenu ajouté avec succès.');
    }

    private function updateFinanceStatus($type, $amount)
    {
        $adminUser = User::where('is_admin', true)->first();
        $currentAmount = $adminUser->getCurrentAmount();
        $trend = $type === 'income' ? 'positive' : 'negative';

        Inertia::share([
            'globalCurrentAmount' => $currentAmount,
            'lastTransactionAmount' => $amount,
            'trend' => $trend
        ]);
    }
}
Editor is loading...
Leave a Comment