src/Controller/App/ExpenseController.php line 28
<?php
namespace App\Controller\App;
use DateTime;
use App\Entity\Expense;
use App\Form\ExpenseType;
use App\Entity\ExpenseCategory;
use App\Repository\ExpenseRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Contracts\Translation\TranslatorInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
#[Route('/app/expense')]
#[IsGranted('IS_AUTHENTICATED_FULLY')]
class ExpenseController extends AbstractController
{
public function __construct(private TranslatorInterface $translator)
{
}
#[Route('/', name: 'app_expense_index', methods: ['GET', 'POST'])]
public function index(Request $request, ExpenseRepository $expenseRepository, EntityManagerInterface $manager): Response
{
if ($request->isXmlHttpRequest()) {
if ($this->isCsrfTokenValid('expense', $_POST['expense']['_token'])) {
$expense = new Expense();
$form = $this->createForm(ExpenseType::class, $expense);
$expenseCategory = $manager->getRepository(ExpenseCategory::class)->find($_POST['expense']['type']);
$expense
->setType($expenseCategory)
->setName($_POST['expense']['name'])
->setReference($_POST['expense']['reference'])
->setAmount($_POST['expense']['amount'])
->setDescription($_POST['expense']['description'])
->setDate(new DateTime($_POST['expense']['date']));
$expenseRepository->add($expense, true);
return new JsonResponse(['status' => 'ok', 'data' => $expense->getId(), 'msg' => $this->translator->trans('Dépense crée!')]);
} else {
return new JsonResponse(['status' => 'no', 'data' => null, 'msg' => $this->translator->trans('token invalid !')]);
}
}
$expense = new Expense();
$form = $this->createForm(ExpenseType::class, $expense);
return $this->render('app/expense/index.html.twig', [
'expenses' => $expenseRepository->findAll(),
'form' => $form->createView()
]);
}
#[Route('/new', name: 'app_expense_new', methods: ['GET', 'POST'])]
public function new(Request $request, ExpenseRepository $expenseRepository): Response
{
return $this->redirectToRoute('app_expense_index', [], Response::HTTP_SEE_OTHER);
// $expense = new Expense();
// $form = $this->createForm(ExpenseType::class, $expense);
// $form->handleRequest($request);
// if ($form->isSubmitted() && $form->isValid()) {
// $expenseRepository->add($expense, true);
// $this->addFlash('success', $this->translator->trans('Succès !!'));
// return $this->redirectToRoute('app_expense_index', [], Response::HTTP_SEE_OTHER);
// }
// return $this->renderForm('app/expense/new.html.twig', [
// 'expense' => $expense,
// 'form' => $form,
// ]);
}
#[Route('/{id}', name: 'app_expense_show', methods: ['GET'])]
public function show(Expense $expense): Response
{
return $this->redirectToRoute('app_expense_index', [], Response::HTTP_SEE_OTHER);
// return $this->render('app/expense/show.html.twig', [
// 'expense' => $expense,
// ]);
}
#[Route('/{id}/edit', name: 'app_expense_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Expense $expense, ExpenseRepository $expenseRepository): Response
{
$form = $this->createForm(ExpenseType::class, $expense);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$expenseRepository->add($expense, true);
$this->addFlash('success', $this->translator->trans('Succès !!'));
return $this->redirectToRoute('app_expense_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('app/expense/edit.html.twig', [
'expense' => $expense,
'form' => $form,
]);
}
#[Route('/{id}', name: 'app_expense_delete', methods: ['POST'])]
public function delete(Request $request, Expense $expense, ExpenseRepository $expenseRepository): Response
{
if ($this->isCsrfTokenValid('delete' . $expense->getId(), $request->request->get('_token'))) {
try {
$expenseRepository->remove($expense, true);
$this->addFlash('success', $this->translator->trans('Succès !!'));
} catch (\Exception $e) {
$errorMessage = $e->getMessage();
$result = explode(':', $errorMessage);
$this->addFlash('error', $result[0]);
}
}
return $this->redirectToRoute('app_expense_index', [], Response::HTTP_SEE_OTHER);
}
}