src/Controller/App/ExpenseCategoryController.php line 28
<?php
namespace App\Controller\App;
use DateTime;
use App\Entity\ExpenseCategory;
use App\Form\ExpenseCategoryType;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\ExpenseCategoryRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
#[Route('/app/expensecategory')]
#[IsGranted('IS_AUTHENTICATED_FULLY')]
class ExpenseCategoryController extends AbstractController
{
public function __construct(private TranslatorInterface $translator)
{
}
#[Route('/', name: 'app_expense_category_index', methods: ['GET', 'POST'])]
public function index(Request $request, ExpenseCategoryRepository $expenseCategoryRepository): Response
{
if ($request->isXmlHttpRequest()) {
if ($this->isCsrfTokenValid('expense_category', $_POST['expense_category']['_token'])) {
$category = new ExpenseCategory();
$form = $this->createForm(ExpenseCategoryType::class, $category);
$category
->setName($_POST['expense_category']['name'])
->setDescription($_POST['expense_category']['description'])
->setColor($_POST['expense_category']['color']);
// /** @var $user App\Entity\User */
// $user = $this->getUser();
// $category->setOwner($user->getCompany());
$expenseCategoryRepository->add($category, true);
return new JsonResponse(['status' => 'ok', 'data' => $category->getId(), 'msg' => $this->translator->trans('Dépense catégorie crée !')]);
} else {
return new JsonResponse(['status' => 'no', 'data' => null, 'msg' => $this->translator->trans('token invalid !')]);
}
}
$category = new ExpenseCategory();
$form = $this->createForm(ExpenseCategoryType::class, $category);
$edit_form = $this->createForm(ExpenseCategoryType::class, $category, [
'action' => $this->generateUrl('app_expense_category_edit_ajax', ['id' => '1']),
'method' => 'POST',
'attr' => ['name' => 'expense_category_type_edit']
]);
return $this->render('app/expense_category/index.html.twig', [
'expense_categories' => $expenseCategoryRepository->findAll(),
'form' => $form->createView(),
'edit_form' => $edit_form->createView()
]);
}
#[Route('/new', name: 'app_expense_category_new', methods: ['GET', 'POST'])]
public function new(Request $request, ExpenseCategoryRepository $expenseCategoryRepository): Response
{
$expenseCategory = new ExpenseCategory();
$form = $this->createForm(ExpenseCategoryType::class, $expenseCategory);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$expenseCategoryRepository->add($expenseCategory, true);
$this->addFlash('success', $this->translator->trans('Succès !!'));
return $this->redirectToRoute('app_expense_category_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('app/expense_category/new.html.twig', [
'expense_category' => $expenseCategory,
'form' => $form,
]);
}
#[Route('/{id}', name: 'app_expense_category_show', methods: ['GET'])]
public function show(ExpenseCategory $expenseCategory): Response
{
return $this->render('app/expense_category/show.html.twig', [
'expense_category' => $expenseCategory,
]);
}
#[Route('/ajax/{id}', name: 'app_expense_category_show_ajax', methods: ['GET'])]
public function show_ajax(ExpenseCategory $expense_category, SerializerInterface $serializer): Response
{
$json = $serializer->serialize($expense_category, 'json', ['groups' => ['read:expensecategory:basic']]);
return $this->json(json_decode($json));
}
#[Route('/{id}/edit', name: 'app_expense_category_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, ExpenseCategory $expenseCategory, ExpenseCategoryRepository $expenseCategoryRepository): Response
{
$form = $this->createForm(ExpenseCategoryType::class, $expenseCategory);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$expenseCategoryRepository->add($expenseCategory, true);
$this->addFlash('success', $this->translator->trans('Succès !!'));
return $this->redirectToRoute('app_expense_category_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('app/expense_category/edit.html.twig', [
'expense_category' => $expenseCategory,
'form' => $form,
]);
}
#[Route('/{id?}/edit/ajax', name: 'app_expense_category_edit_ajax', methods: ['GET', 'POST'])]
public function edit_ajax(Request $request, ExpenseCategory $expense_category, ExpenseCategoryRepository $expenseCategoryRepository, EntityManagerInterface $manager): Response
{
if ($request->isXmlHttpRequest()) {
if ($this->isCsrfTokenValid('edit_expense_category', $_POST['expense_category']['_token'])) {
$expense_category
->setName($_POST['expense_category']['name'])
->setDescription($_POST['expense_category']['description'])
->setColor($_POST['expense_category']['color'])
;
$expenseCategoryRepository->add($expense_category, true);
return new JsonResponse(['status' => 'ok', 'data' => $expense_category->getId(), 'msg' => $this->translator->trans('Dépense catégorie mis à jour !')]);
} else {
return new JsonResponse(['status' => 'no', 'data' => null, 'msg' => $this->translator->trans('token invalid !')]);
}
}
}
#[Route('/{id}', name: 'app_expense_category_delete', methods: ['POST'])]
public function delete(Request $request, ExpenseCategory $expenseCategory, ExpenseCategoryRepository $expenseCategoryRepository): Response
{
if ($this->isCsrfTokenValid('delete' . $expenseCategory->getId(), $request->request->get('_token'))) {
try {
$expenseCategoryRepository->remove($expenseCategory, 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_category_index', [], Response::HTTP_SEE_OTHER);
}
}