feat: display new and pending feedbacks on admin dashboard

This commit is contained in:
Björn Fromme
2023-12-06 18:14:49 +01:00
parent 62d8d4d253
commit 7824153836
3 changed files with 53 additions and 10 deletions
+8
View File
@@ -3,10 +3,12 @@
namespace App\Controller\Admin;
use App\Entity\Application;
use App\Entity\Feedback;
use App\Entity\Upload;
use App\Repository\ApplicationRepository;
use App\Repository\AssignmentRepository;
use App\Repository\AvailabilityRepository;
use App\Repository\FeedbackRepository;
use App\Repository\UploadRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
@@ -17,6 +19,7 @@ class IndexController extends AbstractController
{
public function __construct(
private readonly ApplicationRepository $applicationRepository,
private readonly FeedbackRepository $feedbackRepository,
private readonly AssignmentRepository $assignmentRepository,
private readonly AvailabilityRepository $availabilityRepository,
private readonly UploadRepository $uploadRepository
@@ -31,6 +34,9 @@ class IndexController extends AbstractController
$newApplicationsCount = $this->applicationRepository->getCountByStatus(Application::STATUS_NEW);
$pendingApplicationsCount = $this->applicationRepository->getCountByStatus(Application::STATUS_PENDING);
$feedbacks = $this->feedbackRepository->getNew();
$pendingFeedbacksCount = $this->feedbackRepository->getCountByStatus(Feedback::STATUS_NEW);
$assignments = $this->assignmentRepository->getNew();
$availabilities = $this->availabilityRepository->getNew();
@@ -43,6 +49,8 @@ class IndexController extends AbstractController
'applications' => $applications,
'newApplicationsCount' => $newApplicationsCount,
'pendingApplicationsCount' => $pendingApplicationsCount,
'feedbacks' => $feedbacks,
'pendingFeedbacksCount' => $pendingFeedbacksCount,
'assignments' => $assignments,
'availabilities' => $availabilities,
'documents' => $documents,
+19 -10
View File
@@ -21,21 +21,30 @@ class FeedbackRepository extends ServiceEntityRepository
parent::__construct($registry, Feedback::class);
}
public function save(Feedback $entity, bool $flush = false): void
public function getNew(int $limit = 5): array
{
$this->getEntityManager()->persist($entity);
$qb = $this->createQueryBuilder('feedback');
if ($flush) {
$this->getEntityManager()->flush();
}
return $qb
->select('feedback', 'teamer')
->innerJoin('feedback.teamer', 'teamer')
->orderBy('feedback.createdAt', 'DESC')
->setMaxResults($limit)
->getQuery()
->getResult()
;
}
public function remove(Feedback $entity, bool $flush = false): void
public function getCountByStatus(string $status): int
{
$this->getEntityManager()->remove($entity);
$qb = $this->createQueryBuilder('feedback');
if ($flush) {
$this->getEntityManager()->flush();
}
return $qb
->select($qb->expr()->count('feedback'))
->where($qb->expr()->eq('feedback.status', ':status'))
->setParameter('status', $status)
->getQuery()
->getSingleScalarResult()
;
}
}
+26
View File
@@ -110,5 +110,31 @@
{% endfor %}
</ul>
</div>
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
<h2 class="font-bold text-lg pb-2">
Neue Feedbacks
</h2>
<h3 class="font-bold pb-2">
{{ pendingFeedbacksCount }} freizugeben
</h3>
<ul class="divide-y divide-gray-200">
{% for feedback in feedbacks %}
<li class="py-2 first:pt-0 last:pb-0">
<a href="#" class="flex items-center space-x-1 truncate">
{{ icon('feedback', 'w-4 h-4 shrink-0') }}
<span class="whitespace-nowrap">{{ feedback.teamer }}</span>
{{ _self.dot() }}
<span class="whitespace-nowrap">{{ feedback.destinationName }}</span>
{{ _self.dot() }}
<span class="whitespace-nowrap">{{ feedback.jobProfileName }}</span>
</a>
</li>
{% else %}
<li class="py-2 first:pt-0 last:pb-0">
-
</li>
{% endfor %}
</ul>
</div>
</div>
{% endblock %}