src/Controller/ProjectOfferPackageTaskController.php line 125

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\LoggedTime;
  4. use App\Entity\OfferPackageTask;
  5. use App\Entity\ProjectOfferPackage;
  6. use App\Entity\Task;
  7. use App\Module\Slack\SlackManager;
  8. use App\Repository\OfferPackageTaskRepository;
  9. use App\Repository\ProjectOfferPackageRepository;
  10. use App\Repository\ProjectRepository;
  11. use App\Repository\TaskRepository;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  17. /**
  18.  * Class ProjectOfferPackageTaskController
  19.  *
  20.  * @package App\Controller
  21.  * @author Lukasz Krakowiak <lukasz94krakowiak@gmail.com>
  22.  * @Route("projekt-oferta-zadanie")
  23.  */
  24. class ProjectOfferPackageTaskController extends AbstractController
  25. {
  26.     /**
  27.      * @Route("/zakoncz", name="project_offer_package_task_complete")
  28.      */
  29.     public function index(
  30.         Request $request,
  31.         ProjectRepository $projectRepository,
  32.         OfferPackageTaskRepository $offerPackageTaskRepository,
  33.         ProjectOfferPackageRepository $projectOfferPackageRepository,
  34.         TaskRepository $taskRepository,
  35.         SlackManager $slackManager
  36.     ): Response {
  37.         if ($request->get('type') && $request->get('type') == "1") {//zakonczenie normalnego zadania bezposrednio
  38.             /** @var Task $task */
  39.             $task $taskRepository->findOneBy(["id" => $request->get('task')]);
  40.             $task->setCompletedAt(new \DateTimeImmutable())
  41.                 ->setStatus(Task::STATUS_COMPLETED);
  42.             $taskRepository->save($task);
  43.             $time = new LoggedTime($this->getUser());
  44.             $time->setWorkTime(0)
  45.                 ->setProject($task->getProject())
  46.                 ->setDescription($task->getName() ?? "wykonanie zadania");
  47.             $taskRepository->save($time);
  48.             return $this->redirect($request->headers->get('referer'));
  49.         }
  50.         $task $offerPackageTaskRepository->findOneBy(["id" => $request->get('task')]);
  51.         $project $projectRepository->findOneBy(["id" => $request->get('project')]);
  52.         /** @var ProjectOfferPackage $projectOfferPackage */
  53.         $projectOfferPackage $projectOfferPackageRepository->getProjectOfferPackageInSetMonth($project, new \DateTime($request->get('month')));
  54.         $data $this->getProjectOfferPackageData($projectOfferPackage$task->getId());
  55.         if (isset($data[$task->getId()]['status']) && $data[$task->getId()]['status'] === OfferPackageTask::STATUS_COMPLETED) {
  56.             $this->redirect($request->headers->get('referer'));
  57.         }
  58.         if ($task->isRepeatable()) {
  59.             $partialNumber = isset($data[$task->getId()]['partial']) ? $data[$task->getId()]['partial'] + 1;
  60.             if (isset($data[$task->getId()]['partial']) && $task->getRepeatInMonth() == $partialNumber) {
  61.                 $data[$task->getId()]["status"] = OfferPackageTask::STATUS_COMPLETED;
  62.             } else {
  63.                 $data[$task->getId()]["status"] = OfferPackageTask::STATUS_PARTIAL_COMPLETED;
  64.             }
  65.             $data[$task->getId()]['partial'] = $partialNumber;
  66.         } else {
  67.             $data[$task->getId()]["status"] = OfferPackageTask::STATUS_COMPLETED;
  68.         }
  69.         if ($request->get('task-normal')) {
  70.             $taskNormal $taskRepository->findOneBy(["id" => $request->get('task-normal')]);
  71.             $taskNormal->setStatus(Task::STATUS_COMPLETED)
  72.                 ->setCompletedAt(new \DateTimeImmutable());
  73.             $taskRepository->save($taskNormal);
  74.         } else {
  75.             /** @var Task $taskNormal */
  76.             $taskNormal $taskRepository->findNormalTaskFromOfferPackageTask($project$task, new \DateTime());
  77.             if ($taskNormal) {
  78.                 $taskNormal->setStatus(Task::STATUS_COMPLETED)
  79.                     ->setCompletedAt(new \DateTimeImmutable());
  80.                 $taskRepository->save($taskNormal);
  81.             } else {
  82.                 if ($this->getUser()->getId() == 43) {
  83.                     $slackManager->write(
  84.                         "<@".($this->getUser()->getSlackChannelId() ?? $this->getUser()->getName())."> wykonał zadanie ".$task->getName().PHP_EOL
  85.                         ."<@".($project->getLeader()->getSlackChannelId() ?? $project->getLeader()->getName())."> - Dla twojej informacji",
  86.                         'C02UN73M6BT'
  87.                     );
  88.                 }
  89.             }
  90.         }
  91.         if ($request->get('time')) {
  92.             $time $this->stringTimeToNumber(trim($request->get('time'))) * 60;
  93.             $data[$task->getId()]["time"] = isset($data[$task->getId()]["time"]) ? $data[$task->getId()]["time"] + $time $time;
  94.         } else {
  95.             $data[$task->getId()]["time"] = isset($data[$task->getId()]["time"]) ? $data[$task->getId()]["time"] : 0;
  96.         }
  97.         $data[$task->getId()]["who"] = $this->getUser()->getName();
  98.         $data[$task->getId()]["when"] = (new \DateTime())->format('Y-m-d H:i:s');
  99.         $projectOfferPackage->setData($data);
  100.         $projectOfferPackageRepository->save($projectOfferPackage);
  101.         return $this->redirect($request->headers->get('referer'));
  102.     }
  103.     /**
  104.      * @Route("/zakoncz-js", name="project_offer_package_task_complete_js")
  105.      */
  106.     public function indexJS(
  107.         Request $request,
  108.         ProjectRepository $projectRepository,
  109.         OfferPackageTaskRepository $offerPackageTaskRepository,
  110.         ProjectOfferPackageRepository $projectOfferPackageRepository,
  111.         TaskRepository $taskRepository,
  112.         SlackManager $slackManager
  113.     ): Response {
  114. //        return $this->json([]);
  115.         if ($request->get('type') && $request->get('type') == "1") {//zakonczenie normalnego zadania bezposrednio
  116.             /** @var Task $task */
  117.             $task $taskRepository->findOneBy(["id" => $request->get('task')]);
  118.             $task->setCompletedAt(new \DateTimeImmutable())
  119.                 ->setStatus(Task::STATUS_COMPLETED)
  120.                 ->setGraphicUrl($request->get('url') ?? null);
  121.             $taskRepository->save($task);
  122.             $time = new LoggedTime($this->getUser());
  123.             $time->setWorkTime(0)
  124.                 ->setProject($task->getProject())
  125.                 ->setDescription($task->getName() ?? "wykonanie zadania");
  126.             $taskRepository->save($time);
  127.             if($request->get('url')){
  128.                 $slackManager->write(
  129.                     $this->getUser()->getName()." wykonał zadanie. URL od grafik: ".$request->get('url').PHP_EOL.
  130.                     "<@".($task->getCreatedBy()->getSlackChannelId())."> - Dla twojej informacji",
  131.                     'C02UN73M6BT'
  132.                 );
  133.             }
  134.             return $this->json([]);
  135.         }
  136.         $task $offerPackageTaskRepository->findOneBy(["id" => $request->get('task')]);
  137.         $project $projectRepository->findOneBy(["id" => $request->get('project')]);
  138.         /** @var ProjectOfferPackage $projectOfferPackage */
  139.         $projectOfferPackage $projectOfferPackageRepository->getProjectOfferPackageInSetMonth($project, new \DateTime($request->get('month')));
  140.         $data $this->getProjectOfferPackageData($projectOfferPackage$task->getId());
  141.         if (isset($data[$task->getId()]['status']) && $data[$task->getId()]['status'] === OfferPackageTask::STATUS_COMPLETED) {
  142. //            return $this->json([]);
  143.         }
  144.         if ($task->isRepeatable()) {
  145.             $partialNumber = isset($data[$task->getId()]['partial']) ? $data[$task->getId()]['partial'] + 1;
  146.             if (isset($data[$task->getId()]['partial']) && $task->getRepeatInMonth() == $partialNumber) {
  147.                 $data[$task->getId()]["status"] = OfferPackageTask::STATUS_COMPLETED;
  148.             } else {
  149.                 $data[$task->getId()]["status"] = OfferPackageTask::STATUS_PARTIAL_COMPLETED;
  150.             }
  151.             $data[$task->getId()]['partial'] = $partialNumber;
  152.         } else {
  153.             $data[$task->getId()]["status"] = OfferPackageTask::STATUS_COMPLETED;
  154.         }
  155.         if ($request->get('task_normal')) {
  156.             $taskNormal $taskRepository->findOneBy(["id" => $request->get('task_normal')]);
  157.             $taskNormal->setStatus(Task::STATUS_COMPLETED)
  158.                 ->setCompletedAt(new \DateTimeImmutable())
  159.                 ->setGraphicUrl($request->get('url') ?? null);
  160.             $taskRepository->save($taskNormal);
  161.         } else {
  162.             /** @var Task $taskNormal */
  163.             $taskNormal $taskRepository->findNormalTaskFromOfferPackageTask($project$task, new \DateTime());
  164.             if ($taskNormal) {
  165.                 $taskNormal->setStatus(Task::STATUS_COMPLETED)
  166.                     ->setCompletedAt(new \DateTimeImmutable())
  167.                     ->setGraphicUrl($request->get('url') ?? null);
  168.                 $taskRepository->save($taskNormal);
  169.             } else {
  170.                 $slackManager->write(
  171.                     "<@".($this->getUser()->getSlackChannelId() ?? $this->getUser()->getName())."> wykonał zadanie ".$task->getName().PHP_EOL
  172.                     ."<@".($project->getLeader()->getSlackChannelId() ?? $project->getLeader()->getName())."> - Dla twojej informacji",
  173.                     $project->getSlackChannelId()
  174.                 );
  175.             }
  176.         }
  177.         if ($request->get('time')) {
  178.             $time $this->stringTimeToNumber(trim($request->get('time'))) * 60;
  179.             $data[$task->getId()]["time"] = isset($data[$task->getId()]["time"]) ? $data[$task->getId()]["time"] + $time $time;
  180.             $timeObject = new LoggedTime($this->getUser());
  181.             $timeObject->setWorkTime($time)
  182.                 ->setProject($projectOfferPackage->getProject())
  183.                 ->setDescription($task->getName() ?? "wykonanie zadania");
  184.             $taskRepository->save($timeObject);
  185.         } else {
  186.             $data[$task->getId()]["time"] = isset($data[$task->getId()]["time"]) ? $data[$task->getId()]["time"] : 0;
  187.         }
  188.         $data[$task->getId()]["who"] = $this->getUser()->getName();
  189.         $data[$task->getId()]["when"] = (new \DateTime())->format('Y-m-d H:i:s');
  190.         $projectOfferPackage->setData($data);
  191.         $projectOfferPackageRepository->save($projectOfferPackage);
  192.         return $this->json([]);
  193.     }
  194.     /**
  195.      * @Route("/nie-robimy", name="project_offer_package_task_not_to_do")
  196.      */
  197.     public function notDo(Request $requestProjectRepository $projectRepositoryOfferPackageTaskRepository $offerPackageTaskRepositoryProjectOfferPackageRepository $projectOfferPackageRepository): Response
  198.     {
  199.         $task $offerPackageTaskRepository->findOneBy(["id" => $request->get('task')]);
  200.         $project $projectRepository->findOneBy(["id" => $request->get('project')]);
  201.         /** @var ProjectOfferPackage $projectOfferPackage */
  202.         $projectOfferPackage $projectOfferPackageRepository->getProjectOfferPackageInCurrentMonth($project);
  203.         $data $this->getProjectOfferPackageData($projectOfferPackage$task->getId());
  204.         if (isset($data[$task->getId()]['status']) && $data[$task->getId()]['status'] === OfferPackageTask::STATUS_COMPLETED) {
  205.             return $this->redirectToRoute('project_show', ["project" => $project->getId()]);
  206.         }
  207.         $data[$task->getId()]["status"] = OfferPackageTask::STATUS_NOT;
  208.         $data[$task->getId()]["reason"] = $request->get('reason');
  209.         $projectOfferPackage->setData($data);
  210.         $projectOfferPackageRepository->save($projectOfferPackage);
  211.         return $this->redirectToRoute('project_show', ["project" => $project->getId()]);
  212.     }
  213.     /**
  214.      * @Route("/nie-robimy-js", name="project_offer_package_task_not_to_do_dashboard")
  215.      */
  216.     public function notDoDashboard(Request $requestTaskRepository $taskRepositoryProjectRepository $projectRepositoryOfferPackageTaskRepository $offerPackageTaskRepositoryProjectOfferPackageRepository $projectOfferPackageRepository): Response
  217.     {
  218.         $type $request->get('type');
  219.         if ($type == 0) {
  220.             $task $offerPackageTaskRepository->findOneBy(["id" => $request->get('task')]);
  221.             $taskObject $taskRepository->findOneBy(["id" => $request->get('task_normal')]);
  222.             $project $projectRepository->findOneBy(["id" => $request->get('project')]);
  223.             /** @var ProjectOfferPackage $projectOfferPackage */
  224.             $projectOfferPackage $projectOfferPackageRepository->getProjectOfferPackageInCurrentMonth($project);
  225.             $data $this->getProjectOfferPackageData($projectOfferPackage$task->getId());
  226.             $data[$task->getId()]["status"] = OfferPackageTask::STATUS_NOT;
  227.             $data[$task->getId()]["reason"] = $request->get('reason');
  228.             $projectOfferPackage->setData($data);
  229.             $projectOfferPackageRepository->save($projectOfferPackage);
  230.         } else {
  231.             $taskObject $taskRepository->findOneBy(["id" => $request->get('task')]);
  232.         }
  233.         $taskObject->setStatus(Task::STATUS_NOT_TO_DO)->setInfo($request->get('reason'));
  234.         $taskRepository->save($taskObject);
  235.         return $this->json([]);
  236.     }
  237.     /**
  238.      * @Route("/zmiana-daty", name="project_offer_package_task_change_date")
  239.      */
  240.     public function changeDate(Request $requestTaskRepository $taskRepositoryProjectRepository $projectRepositoryOfferPackageTaskRepository $offerPackageTaskRepositoryProjectOfferPackageRepository $projectOfferPackageRepository): Response
  241.     {
  242.         $type $request->get('type');
  243.         if ($type == 0) {
  244.             $task $offerPackageTaskRepository->findOneBy(["id" => $request->get('task')]);
  245.             $taskObject $taskRepository->findOneBy(["id" => $request->get('task_normal')]);
  246.             $project $projectRepository->findOneBy(["id" => $request->get('project')]);
  247.             /** @var ProjectOfferPackage $projectOfferPackage */
  248.             $projectOfferPackage $projectOfferPackageRepository->getProjectOfferPackageInCurrentMonth($project);
  249.             $data $this->getProjectOfferPackageData($projectOfferPackage$task->getId());
  250.             $data[$task->getId()]["status"] = OfferPackageTask::STATUS_PLANNED;
  251.             $data[$task->getId()]["reason"] = $request->get('reason')." - Nowa data: ".$request->get('date');
  252.             $projectOfferPackage->setData($data);
  253.             $projectOfferPackageRepository->save($projectOfferPackage);
  254.         } else {
  255.             $taskObject $taskRepository->findOneBy(["id" => $request->get('task')]);
  256.         }
  257.         $taskObject->setStatus(Task::STATUS_REPLANNED)->setPlannedOnDay(new \DateTimeImmutable($request->get('date')))
  258.             ->setInfo($request->get('reason'));
  259.         $taskRepository->save($taskObject);
  260.         return $this->json([]);
  261.     }
  262.     /**
  263.      * @Route("/zapauzuj-zadanie", name="project_offer_package_task_pause")
  264.      */
  265.     public function pauseTask(Request $requestTaskRepository $taskRepositoryProjectRepository $projectRepositoryOfferPackageTaskRepository $offerPackageTaskRepositoryProjectOfferPackageRepository $projectOfferPackageRepository): Response
  266.     {
  267.         $type $request->get('type');
  268.         if ($type == 0) {
  269.             $task $offerPackageTaskRepository->findOneBy(["id" => $request->get('task')]);
  270.             $taskObject $taskRepository->findOneBy(["id" => $request->get('task_normal')]);
  271.             $project $projectRepository->findOneBy(["id" => $request->get('project')]);
  272.             /** @var ProjectOfferPackage $projectOfferPackage */
  273.             $projectOfferPackage $projectOfferPackageRepository->getProjectOfferPackageInCurrentMonth($project);
  274.             $data $this->getProjectOfferPackageData($projectOfferPackage$task->getId());
  275.             $data[$task->getId()]["status"] = OfferPackageTask::STATUS_NOT;
  276.             $data[$task->getId()]["reason"] = $request->get('reason');
  277.             $projectOfferPackage->setData($data);
  278.             $projectOfferPackageRepository->save($projectOfferPackage);
  279.         } else {
  280.             $taskObject $taskRepository->findOneBy(["id" => $request->get('task')]);
  281.         }
  282.         $taskObject->setStatus(Task::STATUS_PAUSED)->setInfo($request->get('reason'));
  283.         $taskRepository->save($taskObject);
  284.         return $this->json([]);
  285.     }
  286.     /**
  287.      * @param ProjectOfferPackage $projectOfferPackage
  288.      * @param int $taskId
  289.      * @return array|null
  290.      */
  291.     private function getProjectOfferPackageData(ProjectOfferPackage $projectOfferPackageint $taskId): ?array
  292.     {
  293.         $data $projectOfferPackage->getData();
  294.         if (!isset($data[$taskId])) {
  295.             $data[$taskId] = [];
  296.         }
  297.         return $data;
  298.     }
  299.     /**
  300.      * @param string $time
  301.      * @return float|string
  302.      */
  303.     private function stringTimeToNumber(string $time)
  304.     {
  305.         if (preg_match('/:/'$time,)) {
  306.             return explode(":"$time)[0] + (explode(":"$time)[1] / 60);
  307.         }
  308.         return $time 60;
  309.     }
  310. }