From b62cf18edec6770ba1057aeefdd8558e9cc082c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Wed, 15 Jan 2025 16:17:55 +0100 Subject: [PATCH] feat: dedicated dashboard widgets for contracts and invoices --- src/Controller/Admin/IndexController.php | 18 ++- src/Controller/Manager/IndexController.php | 26 +++- src/Repository/UploadRepository.php | 13 +- templates/admin/index.html.twig | 87 ++++++++---- templates/manager/index.html.twig | 147 +++++++++++++-------- 5 files changed, 194 insertions(+), 97 deletions(-) diff --git a/src/Controller/Admin/IndexController.php b/src/Controller/Admin/IndexController.php index d010f6f..12db16d 100644 --- a/src/Controller/Admin/IndexController.php +++ b/src/Controller/Admin/IndexController.php @@ -38,9 +38,12 @@ class IndexController extends AbstractController $availabilities = $this->entityManager->getRepository(Availability::class)->getNew(); $uploadRepository = $this->entityManager->getRepository(Upload::class); - $documents = $uploadRepository->getNew(); - $newDocumentsCount = $uploadRepository->getCountByStatus(Upload::STATUS_NEW); - $pendingDocumentsCount = $uploadRepository->getCountByStatus(Upload::STATUS_PENDING); + $newContracts = $uploadRepository->getNewByType(Upload::TYPE_CONTRACT); + $newContractsCount = $uploadRepository->getCountByStatusAndType(Upload::STATUS_NEW, Upload::TYPE_CONTRACT); + $pendingContractsCount = $uploadRepository->getCountByStatusAndType(Upload::STATUS_PENDING, Upload::TYPE_CONTRACT); + $newInvoices = $uploadRepository->getNewByType(Upload::TYPE_INVOICE); + $newInvoicesCount = $uploadRepository->getCountByStatusAndType(Upload::STATUS_NEW, Upload::TYPE_INVOICE); + $pendingInvoicesCount = $uploadRepository->getCountByStatusAndType(Upload::STATUS_PENDING, Upload::TYPE_INVOICE); $dispositionRepository = $this->entityManager->getRepository(Disposition::class); $overdueContracts = $dispositionRepository->findOverdueContracts(); @@ -55,9 +58,12 @@ class IndexController extends AbstractController 'pendingFeedbacksCount' => $pendingFeedbacksCount, 'assignments' => $assignments, 'availabilities' => $availabilities, - 'documents' => $documents, - 'newDocumentsCount' => $newDocumentsCount, - 'pendingDocumentsCount' => $pendingDocumentsCount, + 'newContracts' => $newContracts, + 'newContractsCount' => $newContractsCount, + 'pendingContractsCount' => $pendingContractsCount, + 'newInvoices' => $newInvoices, + 'newInvoicesCount' => $newInvoicesCount, + 'pendingInvoicesCount' => $pendingInvoicesCount, 'overdueContracts' => $overdueContracts, 'newDispositions' => $newDispositions, 'overdueFeedbacks' => $overdueFeedbacks, diff --git a/src/Controller/Manager/IndexController.php b/src/Controller/Manager/IndexController.php index 5e0dbea..3881ab1 100644 --- a/src/Controller/Manager/IndexController.php +++ b/src/Controller/Manager/IndexController.php @@ -22,16 +22,30 @@ class IndexController extends AbstractController { $dispositions = $this->dispositionRepository->getNew(); - $documents = $this->uploadRepository->getNew(); - $newDocumentsCount = $this->uploadRepository->getCountByStatus(Upload::STATUS_NEW); - $pendingDocumentsCount = $this->uploadRepository->getCountByStatus(Upload::STATUS_PENDING); + $newContracts = $this->uploadRepository->getNewByType(Upload::TYPE_CONTRACT); + $newContractsCount = $this + ->uploadRepository + ->getCountByStatusAndType(Upload::STATUS_NEW, Upload::TYPE_CONTRACT); + $pendingContractsCount = $this + ->uploadRepository + ->getCountByStatusAndType(Upload::STATUS_PENDING, Upload::TYPE_CONTRACT); + $newInvoices = $this->uploadRepository->getNewByType(Upload::TYPE_INVOICE); + $newInvoicesCount = $this + ->uploadRepository + ->getCountByStatusAndType(Upload::STATUS_NEW, Upload::TYPE_INVOICE); + $pendingInvoicesCount = $this + ->uploadRepository + ->getCountByStatusAndType(Upload::STATUS_PENDING, Upload::TYPE_INVOICE); $overdueFeedbacks = $this->dispositionRepository->findDispositionsWithOverdueFeedback(7); return $this->render('manager/index.html.twig', [ 'dispositions' => $dispositions, - 'documents' => $documents, - 'newDocumentsCount' => $newDocumentsCount, - 'pendingDocumentsCount' => $pendingDocumentsCount, + 'newContracts' => $newContracts, + 'newContractsCount' => $newContractsCount, + 'pendingContractsCount' => $pendingContractsCount, + 'newInvoices' => $newInvoices, + 'newInvoicesCount' => $newInvoicesCount, + 'pendingInvoicesCount' => $pendingInvoicesCount, 'overdueFeedbacks' => $overdueFeedbacks, ]); } diff --git a/src/Repository/UploadRepository.php b/src/Repository/UploadRepository.php index 598ce98..52b1f10 100644 --- a/src/Repository/UploadRepository.php +++ b/src/Repository/UploadRepository.php @@ -147,7 +147,7 @@ class UploadRepository extends ServiceEntityRepository return $qb->getQuery(); } - public function getNew(int $limit = 5): array + public function getNewByType(string $type): array { $qb = $this->createQueryBuilder('upload'); @@ -158,29 +158,28 @@ class UploadRepository extends ServiceEntityRepository ->leftJoin('upload.disposition', 'disposition') ->leftJoin('disposition.assignment', 'assignment') ->where($qb->expr()->andX( - $qb->expr()->in('upload.type', ':type'), + $qb->expr()->eq('upload.type', ':type'), $qb->expr()->in('upload.status', ':status') )) ->orderBy('upload.createdAt', 'DESC') - ->setParameter('type', [Upload::TYPE_CONTRACT, Upload::TYPE_INVOICE]) + ->setParameter('type', $type) ->setParameter('status', [Upload::STATUS_NEW, Upload::STATUS_PENDING]) - ->setMaxResults($limit) ->getQuery() ->getResult() ; } - public function getCountByStatus(string $status): ?int + public function getCountByStatusAndType(string $status, string $type): ?int { $qb = $this->createQueryBuilder('upload'); return $qb ->select($qb->expr()->count('upload')) ->where($qb->expr()->andX( - $qb->expr()->in('upload.type', ':type'), + $qb->expr()->eq('upload.type', ':type'), $qb->expr()->eq('upload.status', ':status') )) - ->setParameter('type', [Upload::TYPE_CONTRACT, Upload::TYPE_INVOICE]) + ->setParameter('type', $type) ->setParameter('status', $status) ->getQuery() ->getSingleScalarResult() diff --git a/templates/admin/index.html.twig b/templates/admin/index.html.twig index 2a38adc..aa75f11 100644 --- a/templates/admin/index.html.twig +++ b/templates/admin/index.html.twig @@ -53,31 +53,68 @@

- Neue Dokumente - {% if newDocumentsCount > 0 or pendingDocumentsCount > 0 %} - {{ newDocumentsCount }} neu, {{ pendingDocumentsCount }} in Bearbeitung + Neue Honorarverträge + {% if newContractsCount > 0 or pendingContractsCount > 0 %} + {{ newContractsCount }} neu, {{ pendingContractsCount }} in Bearbeitung {% endif %}

- +
+
    + {% for document in newContracts %} + {% set assignment = document.disposition.assignment %} +
  • + +
  • + {% else %} +
  • + - +
  • + {% endfor %} +
+
+
+
+

+ Neue Honorarnoten + {% if newInvoicesCount > 0 or pendingInvoicesCount > 0 %} + {{ newInvoicesCount }} neu, {{ pendingInvoicesCount }} in Bearbeitung + {% endif %} +

+
+
    + {% for document in newInvoices %} + {% set assignment = document.disposition.assignment %} +
  • + +
  • + {% else %} +
  • + - +
  • + {% endfor %} +
+

@@ -166,7 +203,7 @@ {{ overdueFeedbacksCount }} überfälllig {% endif %}

-
+
    {% for disposition in overdueFeedbacks %} {% set assignment = disposition.assignment %} @@ -201,7 +238,7 @@ {{ overdueContractsCount }} überfälllig {% endif %} -
    +
      {% for disposition in overdueContracts %} {% set assignment = disposition.assignment %} diff --git a/templates/manager/index.html.twig b/templates/manager/index.html.twig index 58b3c77..513bd74 100644 --- a/templates/manager/index.html.twig +++ b/templates/manager/index.html.twig @@ -3,34 +3,69 @@ {% block content %}
      -

      - Neue Dokumente +

      + Neue Honorarverträge + {% if newContractsCount > 0 or pendingContractsCount > 0 %} + {{ newContractsCount }} neu, {{ pendingContractsCount }} in Bearbeitung + {% endif %}

      - {% if newDocumentsCount > 0 or pendingDocumentsCount > 0 %} -

      - {{ newDocumentsCount }} neu {{ pendingDocumentsCount }} in Bearbeitung -

      - {% endif %} -
        - {% for document in documents %} -
      • - -
      • - {% else %} -
      • - - -
      • - {% endfor %} -
      +
      +
        + {% for document in newContracts %} + {% set assignment = document.disposition.assignment %} +
      • + +
      • + {% else %} +
      • + - +
      • + {% endfor %} +
      +
      +
      +
      +

      + Neue Honorarnoten + {% if newInvoicesCount > 0 or pendingInvoicesCount > 0 %} + {{ newInvoicesCount }} neu, {{ pendingInvoicesCount }} in Bearbeitung + {% endif %} +

      +
      +
        + {% for document in newInvoices %} + {% set assignment = document.disposition.assignment %} +
      • + +
      • + {% else %} +
      • + - +
      • + {% endfor %} +
      +

      @@ -53,34 +88,40 @@ {% endfor %}

    + {% set overdueFeedbacksCount = overdueFeedbacks|length %}
    -

    - überfällige Feedbacks +

    + Überfällige Feedbacks + {% if overdueFeedbacksCount > 0 %} + {{ overdueFeedbacksCount }} überfälllig + {% endif %}

    - +
    {% endblock %}