<?php
namespace App\Controller\Home;
use App\Repository\AccountingRepository;
use App\Repository\BankRepository;
use App\Repository\ExpensesRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[IsGranted("IS_AUTHENTICATED_FULLY")]
class DashboardController extends AbstractController
{
#[Route("/", name: "app_dashboard")]
public function index(AccountingRepository $accountingRepository, ExpensesRepository $expensesRepository): Response
{
return $this->render('home/dashboard.html.twig', [
'title' => 'Dashboard',
'cc_value' => $this->getTotalMouvementByAccount($accountingRepository, 'CC'),
'ep_value' => $this->getTotalMouvementByAccount($accountingRepository, 'EP'),
'prv_value' => $this->getTotalMouvementByType($expensesRepository, 'PRLV'),
'in_value' => $this->getTotalMouvementByDateAndTypeAndName($expensesRepository, '2023-09-15', 'VIR', 'HEVEA')
]);
}
private function getTotalMouvementByAccount(AccountingRepository $accountingRepository, string $type): float|int
{
$accountings = $accountingRepository->findBy(['type' => $type]);
$total = 0;
foreach ($accountings as $accounting) {
foreach ($accounting->getExpenses()->toArray() as $expense) {
$mouvement = $expense->getMouvement();
if($mouvement == "C") {
$total += $expense->getPrice();
} else {
$total -= $expense->getPrice();
}
}
}
return $total;
}
private function getTotalMouvementByType(ExpensesRepository $expensesRepository, string $type): float|int
{
$expenses = $expensesRepository->findBy(['type' => $type]);
$total = 0;
foreach ($expenses as $expense) {
$mouvement = $expense->getMouvement();
if($mouvement == "C") {
$total += $expense->getPrice();
} else {
$total -= $expense->getPrice();
}
}
return $total;
}
private function getTotalMouvementByDateAndTypeAndName(ExpensesRepository $expensesRepository, string $date, string $type, string $name)
{
$expenses = $expensesRepository->findExpensesByDateAndName($date, $name);
$total = 0;
foreach ($expenses as $expense) {
$mouvement = $expense->getMouvement();
if($mouvement == "C") {
$total += $expense->getPrice();
} else {
$total -= $expense->getPrice();
}
}
return $total;
}
}