src/Controller/DashboardController.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\MaxTimeProject;
  4. use App\Entity\ProjectOfferPackage;
  5. use App\Entity\Task;
  6. use App\Form\ChooseMonthInProjectType;
  7. use App\Form\DashboardDateType;
  8. use App\Repository\ProjectOfferPackageRepository;
  9. use App\Repository\ProjectRepository;
  10. use App\Repository\SettingsRepository;
  11. use App\Repository\TaskRepository;
  12. use App\Service\OfferPackage\OfferPackageService;
  13. use App\Service\TaskService;
  14. use App\Service\TimeService;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. class DashboardController extends AbstractController
  20. {
  21.     /**
  22.      * @var ProjectRepository
  23.      */
  24.     private ProjectRepository $projectRepository;
  25.     /**
  26.      * @var TaskRepository
  27.      */
  28.     private TaskRepository $taskRepository;
  29.     public function __construct(ProjectRepository $projectRepositoryTaskRepository $taskRepository)
  30.     {
  31.         $this->projectRepository $projectRepository;
  32.         $this->taskRepository $taskRepository;
  33.     }
  34.     /**
  35.      * @Route("/", name="dashboard")
  36.      */
  37.     public function index(Request $requestTaskService $taskServiceOfferPackageService $offerPackageServiceSettingsRepository $settingsRepository): Response
  38.     {
  39.         if($this->isGranted("ROLE_CALCULATOR")) {
  40.             return $this->redirectToRoute("calculator-ads");
  41.         }
  42.         $plannedTaskDay $request->get("plannedTaskDay") ? new \DateTimeImmutable($request->get("plannedTaskDay")) : new \DateTimeImmutable();
  43.         $nextDayPlannedTaskDay $plannedTaskDay->add(new \DateInterval("P1D"));
  44.         $previousDayPlannedTaskDay $plannedTaskDay->sub(new \DateInterval("P1D"));
  45.         $weeklyRaport false;
  46.         if ($settingsRepository->findOneBy(["name" => "weekly""value" => (new \DateTime())->format('Y-m-d 00:00:00')])) {
  47.             $weeklyRaport true;
  48.         }
  49.         $newLimit $this->checkLimitInProjects();
  50.         if ($data $request->request->get("projects")) {
  51.             foreach ($data as $id => $timeLimit) {
  52.                 $maxTime = new MaxTimeProject();
  53.                 $maxTime->setHourLimit($timeLimit);
  54.                 $maxTime->setProject($this->projectRepository->find($id));
  55.                 $project $this->projectRepository->findOneBy(["id" => $id]);
  56.                 $project->setDescription($request->request->get("projectDescription")[$id]);
  57.                 $entityManager $this->getDoctrine()->getManager();
  58.                 $entityManager->persist($maxTime);
  59.                 $entityManager->persist($project);
  60.                 $entityManager->flush();
  61.             }
  62.             return $this->render('dashboard/index.html.twig', [
  63.                 "newLimit" => $newLimit,
  64.                 'weekly_raport' => $weeklyRaport,
  65.                 'tasks' => $this->taskRepository->findTasks([
  66.                     "project" => null,
  67.                     "plannedOnDayStart" => $plannedTaskDay->modify("00:00"),
  68.                     "plannedOnDayEnd" => $plannedTaskDay->modify("23:59"),
  69.                     "user" => $this->getUser(),
  70.                 ]),
  71.                 "currentDate" => $plannedTaskDay,
  72.                 "previousDate" => $previousDayPlannedTaskDay->format("Y-m-d"),
  73.                 "nextDate" => $nextDayPlannedTaskDay->format("Y-m-d"),
  74.             ]);
  75.         }
  76.         if($this->isGranted("ROLE_CLIENT") && !$this->isGranted("ROLE_ADMIN") && !$this->isGranted("ROLE_EMPLOYER")) {
  77.             $projects $this->getUser()->getClientProjects();
  78.             $month = new \DateTime();
  79.             $ppp = [];
  80.             $percentage = [];
  81. //            $allegroAccounts = [];
  82.             foreach($projects as $key => $project) {
  83.                 /** @var ProjectOfferPackage $projectOfferPackage */
  84.                 $percentage[] = $offerPackageService->completedPercentageOfferTask($project$month);
  85. //                $allegroAccounts[] = explode(",", $project->getAllegroAccount());
  86.             }
  87.             return $this->render('dashboard/index.html.twig', [
  88.                 "projects" => $projects,
  89.                 'month' => $month,
  90.                 'percentage' => $percentage,
  91.                 'offerPackages' => $ppp,
  92.                 'tasks' => $this->taskRepository->findTasks([
  93.                     "project" => $projects,
  94.                     "plannedOnDayStart" => $plannedTaskDay->modify("00:00"),
  95.                     "plannedOnDayEnd" => $plannedTaskDay->modify("23:59"),
  96.                 ]),
  97.                 "currentDate" => $plannedTaskDay,
  98.                 "previousDate" => $previousDayPlannedTaskDay->format("Y-m-d"),
  99.                 "nextDate" => $nextDayPlannedTaskDay->format("Y-m-d"),
  100. //                'allegroAccounts' => $allegroAccounts,
  101.             ]);
  102.         }
  103.         $userTasks $this->taskRepository->findTasks([
  104. //            "plannedOnDayEnd" => $plannedTaskDay->modify("23:59"),
  105. //            "plannedOnDayStart" => $plannedTaskDay->modify("00:00"),
  106.             "user" => $this->getUser(),
  107.         ]);
  108.         $parsed = [];
  109.         foreach ($userTasks as $task) {
  110.             $parsed array_merge($parsed$taskService->getRepeatableTaskData($task$plannedTaskDay->modify("00:00"), $plannedTaskDay->modify("23:59")));
  111.         }
  112.         return $this->render('dashboard/index.html.twig', [
  113.             "newLimit" => $newLimit,
  114.             'weekly_raport' => $weeklyRaport,
  115.             'tasks' => $parsed,
  116.             'allTasks' => $this->taskRepository->findTasks([
  117.                 "plannedOnDayStart" => $plannedTaskDay->modify("00:00"),
  118.                 "plannedOnDayEnd" => $plannedTaskDay->modify("23:59"),
  119.                 "limit" => 10,
  120.                 "hard" => true,
  121.                 "status" => Task::STATUS_PLANNED,
  122.             ]),
  123.             "projects" => $this->projectRepository->getProjectListByUser($this->getUser()),
  124.             "currentDate" => $plannedTaskDay,
  125.             "previousDate" => $previousDayPlannedTaskDay->format("Y-m-d"),
  126.             "nextDate" => $nextDayPlannedTaskDay->format("Y-m-d"),
  127.         ]);
  128.     }
  129.     /**
  130.      * @return array
  131.      */
  132.     private function checkLimitInProjects(): array
  133.     {
  134.         $newLimit = [];
  135.         $i 0;
  136.         $limitProject $this->projectRepository->limitsInThisMonth();
  137.         $allIds array_map(function ($d) {
  138.             return $d->getId();
  139.         },$this->projectRepository->findAll());
  140.         $limitIds array_map(function ($d) {
  141.             return $d->getId();
  142.         }, $limitProject);
  143.         $noLimitProject array_diff($allIds$limitIds);
  144.         foreach ($noLimitProject as $project) {
  145.             $newLimit[$i]['project'] = $this->projectRepository->findOneBy(["id" => $project]);
  146.             $newLimit[$i]['lastLimit'] = $this->projectRepository->getLastLimit($this->projectRepository->findOneBy(["id" => $project]));
  147.             $i++;
  148.         }
  149.         return $newLimit;
  150.     }
  151. }