<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Form\Filters\ManageSalesRequestsFilter;
use App\Form\SalesRequestsForm;
use App\Form\SalesRequestsStatusForm;
use App\Form\EditSalesRequestsNoteForm;
use App\Repository\SalesRequestsRepository;
use App\Entity\SalesRequests;
use App\Entity\SalesRequestsInterested;
#[Route('/request/manage-sales-requests')]
class ManageSalesRequestController extends AbstractController
{
#[Route('/', defaults: ['page' => '1'], methods: ['GET'], name: 'manage_sales_request_index')]
#[Route('/page/{page<[1-9]\d*>}', methods: ['GET'], name: 'manage_sales_request_index_paginated')]
#[Cache(smaxage: 10)]
public function index(Request $request,int $page,EntityManagerInterface $entityManager,SalesRequestsRepository $salesRequestsRepository): Response
{
$params = $request->query->all();
$filter = [];
$filterForm = $this->createForm(ManageSalesRequestsFilter::class);
if(isset($params['name'])) {
$filterForm['name']->setData($params['name']);
$filter['name'] = $params['name'];
}
if(isset($params['email'])) {
$filterForm['email']->setData($params['email']);
$filter['email'] = $params['email'];
}
if(isset($params['status'])) {
$filterForm['status']->setData($params['status']);
$filter['status'] = $params['status'];
}
if(isset($params['createdAt'])) {
$filterForm['createdAt']->setData($params['createdAt']);
$filter['createdAt'] = $params['createdAt'];
}
$data = $salesRequestsRepository->adminPaginatorFetchAll($page, $filter);
$totalInterested = count($entityManager->getRepository(\App\Entity\SalesRequests::class)->findAll());
return $this->render('manage-sales-requests/index.html.twig', [
'paginator' => $data,
'filter' => $filter,
'totalInterested' => $totalInterested,
'form' => $filterForm->createView(),
]);
}
#[Route('/add', name: 'add_sales_request', methods: ['GET', 'POST'])]
public function add(Request $request,EntityManagerInterface $entityManager){
$salesRequests = new SalesRequests();
$form = $this->createForm(SalesRequestsForm::class, $salesRequests);
$form->handleRequest($request);
$redirectPage = $request->query->get('redirect_page');
if ($form->isSubmitted() && $form->isValid()) {
$salesRequests->setCreatedAt(new \Datetime());
$entityManager->persist($salesRequests);
$entityManager->flush();
$this->addFlash('success', 'Created successfully.');
$redirectPage = $request->request->get('redirect_page');
if($redirectPage){
return $this->redirectToRoute('manage_sales_request_index_paginated', ['page'=> $redirectPage], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('manage_sales_request_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('manage-sales-requests/add.html.twig', [
'form' => $form,
'redirect_page' => $redirectPage
]);
}
#[Route('/edit-status/{id}', name: 'edit_status_sales_request', methods: ['GET', 'POST'])]
public function editStatus($id, Request $request, SalesRequests $salesRequests, EntityManagerInterface $entityManager){
$redirectPage = $request->query->get('redirect_page');
$form = $this->createForm(SalesRequestsStatusForm::class, $salesRequests);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$entityManager->persist($salesRequests);
$entityManager->flush();
$this->addFlash('success', 'Update successfully.');
$redirectPage = $request->request->get('redirect_page');
if($redirectPage){
return $this->redirectToRoute('manage_sales_request_index_paginated', ['page'=> $redirectPage], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('manage_sales_request_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('manage-sales-requests/_form_status.html.twig', [
'form' => $form,
'id'=>$id,
'redirect_page' => $redirectPage
]);
}
#[Route('/edit-note/{id}', name: 'edit_note_sales_request', methods: ['GET', 'POST'])]
public function editNote(Request $request, SalesRequests $salesRequests, EntityManagerInterface $entityManager){
$redirectPage = $request->query->get('redirect_page');
$form = $this->createForm(EditSalesRequestsNoteForm::class, $salesRequests);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->persist($salesRequests);
$entityManager->flush();
$this->addFlash('success', 'Update successfully.');
$redirectPage = $request->request->get('redirect_page');
if($redirectPage){
return $this->redirectToRoute('manage_sales_request_index_paginated', ['page'=> $redirectPage], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('manage_sales_request_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('manage-sales-requests/_form_note.html.twig', [
'form' => $form,
'salesRequests'=>$salesRequests,
'redirect_page' => $redirectPage
]);
}
#[Route('/delete/{id}', name: 'delete_sales_request', methods: ['GET', 'POST'])]
public function delete(Request $request, SalesRequests $salesRequests, EntityManagerInterface $entityManager){
$redirectPage = $request->query->get('redirect_page');
if ($this->isCsrfTokenValid('delete'.$salesRequests->getRequestId(), $request->request->get('_token'))) {
$entityManager->remove($salesRequests);
$entityManager->flush();
$this->addFlash('error', 'Delete successfully.');
$redirectPage = $request->request->get('redirect_page');
if($redirectPage){
return $this->redirectToRoute('manage_sales_request_index_paginated', ['page'=> $redirectPage], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('manage_sales_request_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('manage-sales-requests/_delete_form.html.twig', [
'salesRequests' => $salesRequests,
'redirect_page' => $redirectPage
]);
}
#[Route('/view/{id}', name: 'sales_interest_view', methods: ['GET'])]
public function salesInterestedViewAction($id,EntityManagerInterface $entityManager): Response
{
$salesRequestsInterested = $entityManager->getRepository(SalesRequestsInterested::class)->findOneBy(['requestId' => $id]);
return $this->render('manage-sales-requests/view.html.twig', [
'salesRequestsInterested' => $salesRequestsInterested,
]);
}
}