src/Controller/App/PaymentController.php line 58
<?php
namespace App\Controller\App;
use DateTime;
use App\Entity\Payment;
use App\Form\PaymentType;
use App\Entity\FamilyMember;
use App\Entity\Subscription;
use App\Repository\PaymentRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
#[Route('/app/payment')]
class PaymentController extends AbstractController
{
public function __construct(private TranslatorInterface $translator)
{
}
#[Route('/', name: 'app_payment_index', methods: ['GET', 'POST'])]
public function index(Request $request, PaymentRepository $paymentRepository, EntityManagerInterface $manager, FormFactoryInterface $formFactory): Response
{
if ($request->isXmlHttpRequest()) {
if ($this->isCsrfTokenValid('payment', $_POST['payment']['_token'])) {
$payment = new Payment();
$form = $this->createForm(PaymentType::class, $payment);
$subscription = $manager->getRepository(Subscription::class)->find($_POST['payment']['subscription']);
$familymember = $manager->getRepository(FamilyMember::class)->find($_POST['payment']['payed_by']);
$payment
->setCreatedBy($this->getUser());
$payment
->setPayedBy($familymember)
->setSubscription($subscription)
->setAmount($_POST['payment']['amount'])
->setDescription($_POST['payment']['description'])
->setDate(new DateTime($_POST['payment']['date']));
$paymentRepository->add($payment, true);
return new JsonResponse(['status' => 'ok', 'data' => $payment->getId(), 'msg' => $this->translator->trans('Paiment crée !')]);
} else {
return new JsonResponse(['status' => 'no', 'data' => null, 'msg' => $this->translator->trans('token invalid !')]);
}
}
$payment = new Payment();
$form = $this->createForm(PaymentType::class, $payment);
$edit_form = $formFactory->createNamed('payment_type_edit', PaymentType::class, $payment);
return $this->render('app/payment/index.html.twig', [
'payments' => $paymentRepository->findAll(),
'form' => $form->createView(),
'edit_form' => $edit_form->createView()
]);
}
#[Route('/new', name: 'app_payment_new', methods: ['GET', 'POST'])]
public function new(Request $request, PaymentRepository $paymentRepository): Response
{
return $this->redirectToRoute('app_payment_index', [], Response::HTTP_SEE_OTHER);
// $payment = new Payment();
// $form = $this->createForm(PaymentType::class, $payment);
// $form->handleRequest($request);
// if ($form->isSubmitted() && $form->isValid()) {
// /** @var $user App\Entity\User */
// $user = $this->getUser();
// $payment
// ->setCreatedBy($this->getUser());
// $paymentRepository->add($payment, true);
// $this->addFlash('success', $this->translator->trans('Succès !!'));
// return $this->redirectToRoute('app_payment_index', [], Response::HTTP_SEE_OTHER);
// }
// return $this->renderForm('app/payment/new.html.twig', [
// 'payment' => $payment,
// 'form' => $form,
// ]);
}
#[Route('/{id}', name: 'app_payment_show', methods: ['GET'])]
public function show(Payment $payment): Response
{
return $this->redirectToRoute('app_payment_index', [], Response::HTTP_SEE_OTHER);
// return $this->render('app/payment/show.html.twig', [
// 'payment' => $payment,
// ]);
}
#[Route('/ajax/{id}', name: 'app_payment_show_ajax', methods: ['GET'])]
public function show_ajax(Payment $payment, SerializerInterface $serializer): Response
{
$json = $serializer->serialize($payment, 'json', ['groups' => ['read:payment:basic', 'read:familymember:basic', 'read:subscription:basic']]);
return $this->json(json_decode($json));
}
#[Route('/{id}/edit', name: 'app_payment_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Payment $payment, PaymentRepository $paymentRepository): Response
{
return $this->redirectToRoute('app_payment_index', [], Response::HTTP_SEE_OTHER);
// $form = $this->createForm(PaymentType::class, $payment);
// $form->handleRequest($request);
// if ($form->isSubmitted() && $form->isValid()) {
// $paymentRepository->add($payment, true);
// $this->addFlash('success', $this->translator->trans('Succès !!'));
// return $this->redirectToRoute('app_payment_index', [], Response::HTTP_SEE_OTHER);
// }
// return $this->renderForm('app/payment/edit.html.twig', [
// 'payment' => $payment,
// 'form' => $form,
// ]);
}
#[Route('/{id?}/edit/ajax', name: 'app_payment_edit_ajax', methods: ['GET', 'POST'])]
public function edit_ajax(Request $request, Payment $payment, PaymentRepository $paymentRepository, EntityManagerInterface $manager): Response
{
if ($request->isXmlHttpRequest()) {
if ($this->isCsrfTokenValid('payment_type_edit', $_POST['payment_type_edit']['_token'])) {
$subscription = $manager->getRepository(Subscription::class)->find($_POST['payment_type_edit']['subscription']);
$familymember = $manager->getRepository(FamilyMember::class)->find($_POST['payment_type_edit']['payed_by']);
$date = DateTime::createFromFormat('d/m/Y', $_POST['payment_type_edit']['date']);
$payment
->setPayedBy($familymember)
->setSubscription($subscription)
->setAmount($_POST['payment_type_edit']['amount'])
->setDescription($_POST['payment_type_edit']['description'])
->setDate($date);
$paymentRepository->add($payment, true);
return new JsonResponse(['status' => 'ok', 'data' => $payment->getId(), 'msg' => $this->translator->trans('Paiment mis à jour !')]);
} else {
return new JsonResponse(['status' => 'no', 'data' => null, 'msg' => $this->translator->trans('token invalid !')]);
}
}
}
#[Route('/{id}', name: 'app_payment_delete', methods: ['POST'])]
public function delete(Request $request, Payment $payment, PaymentRepository $paymentRepository): Response
{
if ($this->isCsrfTokenValid('delete' . $payment->getId(), $request->request->get('_token'))) {
try {
$paymentRepository->remove($payment, 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_payment_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/{id}/delete/ajax', name: 'app_payment_delete_ajax', methods: ['POST'])]
public function delete_ajax(Request $request, Payment $payment, PaymentRepository $paymentRepository): Response
{
if ($this->isCsrfTokenValid('delete' . $payment->getId(), $request->request->get('_token'))) {
try {
$paymentRepository->remove($payment, true);
return new JsonResponse(['status' => 'ok', 'data' => $payment->getId(), 'msg' => $this->translator->trans('Paiment supprimé !')]);
} catch (\Exception $e) {
$errorMessage = $e->getMessage();
$result = explode(':', $errorMessage);
// $this->addFlash('error', $result[0]);
return new JsonResponse(['status' => 'no', 'data' => null, 'msg' => $result[0]]);
}
}
return new JsonResponse(['status' => 'no', 'data' => null, 'msg' => $this->translator->trans('Error !')]);
}
}