diff --git a/project/assets/styles/app.css b/project/assets/styles/app.css index d589ed2..13e48bf 100755 --- a/project/assets/styles/app.css +++ b/project/assets/styles/app.css @@ -15,6 +15,4 @@ a { } .reports-all .report-one .fa{ - padding: 5px 20px; - font-size: 20px; } \ No newline at end of file diff --git a/project/assets/styles/main.less b/project/assets/styles/main.less index 1afe0cf..ff9c20a 100644 --- a/project/assets/styles/main.less +++ b/project/assets/styles/main.less @@ -6,20 +6,50 @@ body { margin-bottom: 20px; } .report-one { + .card-header { + display: flex; + .card-title { + margin: auto; + } + } + &.complete { + .card-header { + min-height: 52px; + } + } + margin-bottom: 10px; .fa{ margin: auto; font-size: 20px; + padding: 5px 20px; } .btn-group { width: 100%; } .report-number { position: absolute; - right: 0; + right: 3px; + width: 25px; + height: 25px; .badge { font-size: 15px; } } + .report-mark-uncompleted { + width: 25px; + height: 25px; + cursor: pointer; + font-size: 12px; + position: absolute; + right: 2px; + top:26px; + .fa { + padding: 0; + } + .badge { + border: none; + } + } } } .reports-months-all { diff --git a/project/src/Controller/ReportsController.php b/project/src/Controller/ReportsController.php index b4f759f..576a0da 100644 --- a/project/src/Controller/ReportsController.php +++ b/project/src/Controller/ReportsController.php @@ -15,35 +15,42 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; class ReportsController extends AbstractController { - #[Route('/set-status-todo', name: 'app_set_status_todo')] + #[Route('/set-status-todo/{id}', name: 'app_set_status_todo', methods: ['POST'])] #[IsGranted('reportEdit')] - public function setStatusTodo(EntityManagerInterface $entityManager, AddReports $reportsService, Request $request): Response + public function setStatusTodo(EntityManagerInterface $entityManager, AddReports $reportsService, Request $request, Reports $report): Response { - $reportId = $request->getPayload()->get('reportId'); - $token = $request->getPayload()->get("token"); - if ($reportId && $this->isCsrfTokenValid('report-status', $token)) { - $report = $entityManager->getRepository(Reports::class)->find($reportId); + $token = $request->get("token"); + if ($this->isCsrfTokenValid('report-status', $token)) { $reportsService->setClient($report->getClient()); $isDone = false; - foreach (ReportTodoEnum::cases() as $case) { + if ($request->get("unDone")){ $todo = $entityManager->getRepository(ReportsTodo::class)->findOneBy([ "report" => $report->getId(), - "name" => $case->value + "name" => ReportTodoEnum::COMPLETE ]); - if (!$todo) { - $todo = new ReportsTodo(); - $todo->setReport($report); - $todo->setName($case); - } - if (isset($_POST[$case->value])){ - $todo->setDeleted(false); - } else { - $todo->setDeleted(true); - } - if ($todo->getName() === ReportTodoEnum::COMPLETE && !$todo->isDeleted()) { - $isDone = true; - } + $todo->setDeleted(true); $entityManager->persist($todo); + } else { + foreach (ReportTodoEnum::cases() as $case) { + $todo = $entityManager->getRepository(ReportsTodo::class)->findOneBy([ + "report" => $report->getId(), + "name" => $case->value + ]); + if (!$todo) { + $todo = new ReportsTodo(); + $todo->setReport($report); + $todo->setName($case); + } + if ($request->get($case->value) !== null) { + $todo->setDeleted(false); + } else { + $todo->setDeleted(true); + } + if ($todo->getName() === ReportTodoEnum::COMPLETE && !$todo->isDeleted()) { + $isDone = true; + } + $entityManager->persist($todo); + } } $report->setDone($isDone); $entityManager->persist($report); diff --git a/project/src/Enum/ReportStatus.php b/project/src/Enum/ReportStatus.php index 758871f..49754e4 100644 --- a/project/src/Enum/ReportStatus.php +++ b/project/src/Enum/ReportStatus.php @@ -65,4 +65,15 @@ enum ReportStatus: int { { return ReportStatus::tryFrom($this->value+1); } + public function tryFromName(string $name): ?ReportStatus + { + $name = strtoupper($name); + foreach (self::cases() as $v) { + if ($name === $v->name) { + return $v; + } + } + + return null; + } } \ No newline at end of file diff --git a/project/src/Enum/ReportTodoEnum.php b/project/src/Enum/ReportTodoEnum.php index 41e1d60..f01c5d6 100644 --- a/project/src/Enum/ReportTodoEnum.php +++ b/project/src/Enum/ReportTodoEnum.php @@ -35,4 +35,16 @@ enum ReportTodoEnum: int { }; } + public function tryFromName(string $name): ?ReportTodoEnum + { + $name = strtoupper($name); + foreach (self::cases() as $v) { + if ($name === $v->name) { + return $v; + } + } + + return null; + } + } \ No newline at end of file diff --git a/project/src/Twig/AppExtension.php b/project/src/Twig/AppExtension.php index 1521f06..27bd89e 100644 --- a/project/src/Twig/AppExtension.php +++ b/project/src/Twig/AppExtension.php @@ -4,6 +4,7 @@ namespace App\Twig; use Twig\Extension\AbstractExtension; use Twig\TwigFilter; +use Twig\TwigFunction; class AppExtension extends AbstractExtension { @@ -14,6 +15,13 @@ class AppExtension extends AbstractExtension ]; } + public function getFunctions(): array + { + return [ + new TwigFunction('enum', [$this, 'enumChecker']), + ]; + } + public function formatPhone(?int $phoneNumber): string { if (!$phoneNumber) { @@ -22,4 +30,9 @@ class AppExtension extends AbstractExtension return number_format($phoneNumber, 0,"."," "); } + + public function enumChecker(mixed $currentEnum, string $needEnumName): bool + { + return $currentEnum->name === $needEnumName; + } } \ No newline at end of file diff --git a/project/templates/reports/list.html.twig b/project/templates/reports/list.html.twig index dca61a2..4be1be7 100644 --- a/project/templates/reports/list.html.twig +++ b/project/templates/reports/list.html.twig @@ -1,5 +1,6 @@ {% extends 'base.html.twig' %} {% import 'navigation/switch_months.html.twig' as navigation %} +{% import 'reports/listInclude.html.twig' as sets %} {% block body %} {{ navigation.month_menu('app_base',months,currentMonth) }}
{% for id,reports in reportsGroup %} -
-
+
+

{{ reports.status.takeLang }}

{% for report in reports.reports %} -
+
{{ report.number }}
+ {% if enum(reports.status, 'COMPLETE') %} +
+{#
#} + +
+ + + +
+ +{#
#} +
+ {% endif %}
{% if is_granted('clientView') %} @@ -29,50 +43,16 @@ {% endif %}
-
-

-

- - -
- {% for todo in reportToDoList %} - - - {% endfor %} -
-
-

-
- {% endfor %}
diff --git a/project/templates/reports/listInclude.html.twig b/project/templates/reports/listInclude.html.twig new file mode 100644 index 0000000..ee3440d --- /dev/null +++ b/project/templates/reports/listInclude.html.twig @@ -0,0 +1,42 @@ +{% macro statusForm(report,reportToDoList,reportEnum) %} +
+ +
+ {% for todo in reportToDoList %} + + + {% endfor %} +
+
+{% endmacro %} + +{% macro progress(report, countAllTodos) %} +
+ {% set percentageProgress = report.isDone ? 100 : report.countTodoReports / countAllTodos * 100 %} +
+ {{ percentageProgress }}% +
+
+{% endmacro %} \ No newline at end of file diff --git a/services/config/php/opcache.ini b/services/config/php/opcache.ini new file mode 100644 index 0000000..507f7d3 --- /dev/null +++ b/services/config/php/opcache.ini @@ -0,0 +1,2 @@ +[Opcache] +opcache.enable=1 \ No newline at end of file diff --git a/services/www/Dockerfile b/services/www/Dockerfile index f120319..127aaf6 100644 --- a/services/www/Dockerfile +++ b/services/www/Dockerfile @@ -23,9 +23,10 @@ RUN apt-get install -y \ && docker-php-ext-install zip intl RUN apt-get install -y libgd3 libgd-dev && rm -rf /var/lib/apt/lists/* RUN docker-php-ext-configure gd --with-jpeg -RUN docker-php-ext-install pdo pdo_mysql mysqli +RUN docker-php-ext-install pdo pdo_mysql mysqli opcache RUN docker-php-ext-install -j$(nproc) gd RUN docker-php-ext-enable zip +RUN docker-php-ext-enable opcache COPY services/config/foreground.sh /etc/foreground.sh @@ -50,7 +51,6 @@ RUN composer dump-autoload --optimize RUN mv .env.prod .env COPY services/config/nginx-site.conf /etc/nginx/sites-enabled/default -#CMD ["/etc/foreground.sh"] ENTRYPOINT ["/etc/foreground.sh"]