103 lines
4.4 KiB
PHP
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]);
|
|
}
|
|
} |