src/Controller/DefaultController.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\DTO\ProjectReportDTO;
  4. use App\Entity\ProjectReport;
  5. use App\Entity\ProjectTaskLog;
  6. use App\Entity\TaskUserLog;
  7. use App\Form\ProjectReportDTOType;
  8. use App\Helper\EnumStatus\ProjectReportStatus;
  9. use App\Repository\EmployeeRepository;
  10. use App\Service\ProjectReportService;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpKernel\Exception\HttpException;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Yectep\PhpSpreadsheetBundle\Factory;
  18. use ZipStream\File;
  19. #[Route('/')]
  20. #[IsGranted('ROLE_USER')]
  21. class DefaultController extends AbstractController
  22. {
  23.     #[Route('/'name'default'methods: ['GET'"POST"])]
  24.     public function baseIndex(
  25.         Request $request,
  26.         Factory $factory,
  27.         EmployeeRepository $employeeRepository,
  28.         EntityManagerInterface $em,
  29.         ProjectReportService $projectReportService,
  30.     )
  31.     {
  32.         $projectReportDTO = new ProjectReportDTO();
  33.         $projectReportDTO->setPM($this->getUser()->getEmployee());
  34.         $form $this->createForm(ProjectReportDTOType::class, $projectReportDTO);
  35.         $form->handleRequest($request);
  36.         if ($form->isSubmitted()) {
  37.             $projectReport = new ProjectReport();
  38.             $projectReport->setProject($projectReportDTO->getProject());
  39.             $projectReport->setProjectManager($projectReportDTO->getPM());
  40.             $projectReport->setMonth($projectReportDTO->getMonth());
  41.             $projectReport->setDateAt(new \DateTimeImmutable());
  42.             $projectReport->setPeriodName($projectReportDTO->getProject()->getName() . '-' $projectReportDTO->getMonth()->getName() . '-' $projectReportDTO->getMonth()->getYear());
  43.             $projectReport->setStatus(ProjectReportStatus::FORMED->value);
  44.             $projectReport->setProjectCost($projectReportDTO->getProject()->getCost());
  45.             $projectReport->setCostCustomer($projectReportDTO->getProject()->getCostCustomer());
  46.             $projectReport->setSurchargePM($projectReportDTO->getProject()->getSurchargePM());
  47.             $projectReport->setSurchargeTL($projectReportDTO->getProject()->getSurchargeTL());
  48.             $em->persist($projectReport);
  49.             $users $employeeRepository->getUserByNames();
  50.             $readerXlsx $factory->createReader('Xlsx');
  51.             if ($projectReportDTO->getFileJira()) {
  52.                 $projectReport $this->parceJiraPlan($readerXlsx$projectReportDTO->getFileJira()->getPathname(), $users$em$projectReport);
  53.             }
  54.             if ($projectReportDTO->getFileKaiten()) {
  55.                 $projectReportService->loadKaitenLogs($projectReport$projectReportDTO->getFileKaiten(), true);
  56.             }
  57.             $plan 0;
  58.             foreach ($projectReport->getProjectTaskPlans() as $projectTaskPlan) {
  59.                 foreach ($projectTaskPlan->getTaskUserLogs() as $taskUserLog) {
  60.                     $plan += $taskUserLog->getHours();
  61.                 }
  62.             }
  63.             $projectReport->setPlan($plan);
  64.             $projectReportService->updateCostReport($projectReport);
  65.             $em->flush();
  66.         }
  67.         return $this->render('base.html.twig', [
  68.             'form' => $form->createView(),
  69.             'array' => $array ?? [],
  70.             'projectReport' => $projectReport ?? null,
  71.         ]);
  72.     }
  73.     /**
  74.      * @param mixed $readerXlsx
  75.      * @param ProjectReportDTO $projectReportDTO
  76.      * @param mixed $users
  77.      * @param EntityManagerInterface $em
  78.      * @param ProjectReport $projectReport
  79.      * @return array
  80.      */
  81.     protected function parceJiraPlan(mixed $readerXlsx$pathFileJiramixed $usersEntityManagerInterface $emProjectReport $projectReport)
  82.     {
  83.         $spreadsheet $readerXlsx->load($pathFileJira);
  84.         $sheets $spreadsheet->getAllSheets();
  85.         foreach ($sheets as $sheet) {
  86.             $array $sheet->toArray();
  87.         }
  88.         $taskName '';
  89.         $i 0;
  90.         foreach ($array as $item) {
  91.             $i++;
  92.             //$item[1] - эпик
  93.             //$item[2] - название задачи
  94.             //$item[3] - исполнитель
  95.             //$item[4] - ключ задачи
  96.             //$item[5] - часы работы
  97.             if ($item[3]) {
  98.                 if (!key_exists($item[3], $users)) {
  99.                     throw new HttpException(404'Коэффициент на сотрудника ' $item[3] . ' не найден');
  100.                 }
  101.                 $employee $users[$item[3]];
  102.                 $employeeValue $employee->getValue();
  103.                 $taskUserLog = new TaskUserLog();
  104.                 $em->persist($taskUserLog);
  105.                 $taskUserLog->setIsPaid(true);
  106.                 $taskUserLog->setHours(floatval(str_replace('ч'''$item[5])));
  107.                 $taskUserLog->setEmployee($employee);
  108.                 $taskUserLog->setValue($employeeValue);
  109.                 $taskUserLogs[] = $taskUserLog;
  110.                 $taskName 'Без задачи';
  111.                 $epicName 'Без эпика';
  112.                 $epicKey 'Без эпика';
  113.                 $taskKey 'Без задачи';
  114.                 if (!empty($taskUserLogs)) {
  115.                     $projectTaskLog = new ProjectTaskLog();
  116.                     $projectTaskLog->setName($taskName);
  117.                     $projectTaskLog->setEpicName($epicName);
  118.                     $projectTaskLog->setEpicKey($epicKey);
  119.                     $projectTaskLog->setKey($taskKey);
  120.                     $em->persist($projectTaskLog);
  121.                     foreach ($taskUserLogs as $taskUserLog) {
  122.                         $projectTaskLog->addTaskUserLog($taskUserLog);
  123.                     }
  124.                     $projectReport->addProjectTaskPlan($projectTaskLog);
  125.                     $taskUserLogs = [];
  126.                 }
  127.             }
  128.         }
  129.         return $projectReport;
  130.     }
  131. }