Files
sprawozdania/project/src/Controller/ReportsController.php
T

103 lines
4.4 KiB
PHP

<?php
namespace App\Controller;
use App\Entity\Clients;
use App\Entity\Reports;
use App\Entity\ReportsTodo;
use App\Enum\ReportTodoEnum;
use App\Services\AddReports;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class ReportsController extends AbstractController
{
#[Route('/set-status-todo/{id}', name: 'app_set_status_todo', methods: ['POST'])]
#[IsGranted('reportEdit')]
public function setStatusTodo(EntityManagerInterface $entityManager, AddReports $reportsService, Request $request, Reports $report): Response
{
$token = $request->get("token");
if ($this->isCsrfTokenValid('report-status', $token)) {
$reportsService->setClient($report->getClient());
if ($request->get("unDone")){
$todo = $entityManager->getRepository(ReportsTodo::class)->findOneBy([
"report" => $report->getId(),
"name" => ReportTodoEnum::COMPLETE
]);
$todo->setDeleted(true);
$entityManager->persist($todo);
$report->setDone(false);
} else {
foreach (ReportTodoEnum::cases() as $case) {
if (!$request->get($case->value)) {
continue;
}
$todo = $entityManager->getRepository(ReportsTodo::class)->findOneBy([
"report" => $report->getId(),
"name" => $case->value
]);
if (!$todo) {
$todo = new ReportsTodo();
$todo->setReport($report);
$todo->setName($case);
} else {
$todo->setDeleted(!$todo->isDeleted());
}
if ($todo->getName() === ReportTodoEnum::COMPLETE) {
if ($todo->isDeleted()) {
$report->setDone(false);
} else {
$report->setDone(true);
}
}
$entityManager->persist($todo);
}
}
$entityManager->persist($report);
$entityManager->flush();
$entityManager->getCache()->evictCollection(Reports::class,"reportsTodos",$report->getId());
$reportsService->tryAddNextReport();
}
return $this->redirect($request->headers->get('referer'));
}
#[Route('/add-next-report', name: 'app_add_next_report')]
#[IsGranted('reportEdit')]
public function addNextReport(Request $request, EntityManagerInterface $entityManager, AddReports $addReports): Response
{
$clientId = $request->getPayload()->get('clientId');
$token = $request->getPayload()->get("token");
if ($clientId && $this->isCsrfTokenValid('add-next-report', $token)) {
$client = $entityManager->getRepository(Clients::class)->find($clientId);
$addReports->setClient($client);
$addReports->addNextReport();
}
return $this->redirect($request->headers->get('referer'));
}
#[Route('/edit-first-report', name: 'app_edit_first_report')]
#[IsGranted('reportEdit')]
public function editFirstReport(Request $request, EntityManagerInterface $entityManager): Response
{
$clientId = $request->getPayload()->get('clientId');
$date = $request->getPayload()->get('newDate');
$token = $request->getPayload()->get("token");
if ($clientId && $this->isCsrfTokenValid('edit-first-report', $token)) {
$report = $entityManager->getRepository(Reports::class)->findBy(["client" => $clientId], ["dateStart"=>"ASC"]);
$newDateStart = new \DateTime($date);
$i=0;
foreach ($report as $item) {
$tmp = clone $newDateStart;
$tmp->modify('+'.AddReports::NEXT_REPORT_MONTH * $i.' month');
$item->setDateStart($tmp);
$entityManager->persist($item);
$i++;
}
$entityManager->flush();
}
return $this->redirectToRoute('app_client', ['id'=>$clientId]);
}
}