Merge branch 'master' into feature/timeline
This commit is contained in:
@@ -3,7 +3,6 @@
|
|||||||
namespace App\Controller\Administrative\Document;
|
namespace App\Controller\Administrative\Document;
|
||||||
|
|
||||||
use App\Entity\Upload;
|
use App\Entity\Upload;
|
||||||
use App\Model\DocumentFilterDto;
|
|
||||||
use App\Repository\UploadRepository;
|
use App\Repository\UploadRepository;
|
||||||
use App\Service\Common\DocumentFilterHandler;
|
use App\Service\Common\DocumentFilterHandler;
|
||||||
use Knp\Component\Pager\PaginatorInterface;
|
use Knp\Component\Pager\PaginatorInterface;
|
||||||
|
|||||||
@@ -31,11 +31,12 @@ class ApplicationRepository extends ServiceEntityRepository
|
|||||||
$qb = $this->createQueryBuilder('application');
|
$qb = $this->createQueryBuilder('application');
|
||||||
|
|
||||||
$qb
|
$qb
|
||||||
->select('application', 'assignment', 'destination', 'job_profile', 'teamer')
|
->select('application', 'assignment', 'job_profile', 'destination', 'teamer', 'user')
|
||||||
->innerJoin('application.assignment', 'assignment')
|
->innerJoin('application.assignment', 'assignment')
|
||||||
->innerJoin('assignment.destination', 'destination')
|
->innerJoin('assignment.destination', 'destination')
|
||||||
->innerJoin('assignment.jobProfile', 'job_profile')
|
->innerJoin('assignment.jobProfile', 'job_profile')
|
||||||
->innerJoin('application.teamer', 'teamer')
|
->innerJoin('application.teamer', 'teamer')
|
||||||
|
->innerJoin('teamer.user', 'user')
|
||||||
->where($qb->expr()->neq('application.status', ':status'))
|
->where($qb->expr()->neq('application.status', ':status'))
|
||||||
->setParameter('status', Application::STATUS_REJECTED)
|
->setParameter('status', Application::STATUS_REJECTED)
|
||||||
;
|
;
|
||||||
@@ -159,11 +160,12 @@ class ApplicationRepository extends ServiceEntityRepository
|
|||||||
$qb = $this->createQueryBuilder('application');
|
$qb = $this->createQueryBuilder('application');
|
||||||
|
|
||||||
return $qb
|
return $qb
|
||||||
->select('application', 'assignment', 'destination', 'job_profile', 'teamer')
|
->select('application', 'assignment', 'destination', 'job_profile', 'teamer', 'user')
|
||||||
->innerJoin('application.assignment', 'assignment')
|
->innerJoin('application.assignment', 'assignment')
|
||||||
->innerJoin('assignment.destination', 'destination')
|
->innerJoin('assignment.destination', 'destination')
|
||||||
->innerJoin('assignment.jobProfile', 'job_profile')
|
->innerJoin('assignment.jobProfile', 'job_profile')
|
||||||
->innerJoin('application.teamer', 'teamer')
|
->innerJoin('application.teamer', 'teamer')
|
||||||
|
->innerJoin('teamer.user', 'user')
|
||||||
->where($qb->expr()->neq('application.status', ':status'))
|
->where($qb->expr()->neq('application.status', ':status'))
|
||||||
->orderBy('application.createdAt', 'DESC')
|
->orderBy('application.createdAt', 'DESC')
|
||||||
->setParameter('status', Application::STATUS_REJECTED)
|
->setParameter('status', Application::STATUS_REJECTED)
|
||||||
|
|||||||
@@ -155,8 +155,9 @@ class DispositionRepository extends ServiceEntityRepository
|
|||||||
$qb = $this->createQueryBuilder('disposition');
|
$qb = $this->createQueryBuilder('disposition');
|
||||||
|
|
||||||
return $qb
|
return $qb
|
||||||
->select('disposition', 'assignment', 'destination')
|
->select('disposition', 'assignment', 'job_profile', 'destination')
|
||||||
->innerJoin('disposition.assignment', 'assignment')
|
->innerJoin('disposition.assignment', 'assignment')
|
||||||
|
->innerJoin('assignment.jobProfile', 'job_profile')
|
||||||
->innerJoin('assignment.destination', 'destination')
|
->innerJoin('assignment.destination', 'destination')
|
||||||
->where($qb->expr()->andX(
|
->where($qb->expr()->andX(
|
||||||
$qb->expr()->orX(
|
$qb->expr()->orX(
|
||||||
@@ -182,9 +183,11 @@ class DispositionRepository extends ServiceEntityRepository
|
|||||||
$qb = $this->createQueryBuilder('disposition');
|
$qb = $this->createQueryBuilder('disposition');
|
||||||
|
|
||||||
$qb
|
$qb
|
||||||
->select('disposition', 'assignment', 'destination', 'feedback', 'teamer')
|
->select('disposition', 'assignment', 'job_profile', 'destination', 'feedback', 'teamer', 'user')
|
||||||
->innerJoin('disposition.assignment', 'assignment')
|
->innerJoin('disposition.assignment', 'assignment')
|
||||||
|
->innerJoin('assignment.jobProfile', 'job_profile')
|
||||||
->innerJoin('disposition.teamer', 'teamer')
|
->innerJoin('disposition.teamer', 'teamer')
|
||||||
|
->innerJoin('teamer.user', 'user')
|
||||||
->innerJoin('assignment.destination', 'destination')
|
->innerJoin('assignment.destination', 'destination')
|
||||||
->leftJoin('disposition.feedback', 'feedback')
|
->leftJoin('disposition.feedback', 'feedback')
|
||||||
->where($qb->expr()->andX(
|
->where($qb->expr()->andX(
|
||||||
@@ -292,10 +295,13 @@ class DispositionRepository extends ServiceEntityRepository
|
|||||||
$qb = $this->createQueryBuilder('disposition');
|
$qb = $this->createQueryBuilder('disposition');
|
||||||
|
|
||||||
return $qb
|
return $qb
|
||||||
->select('disposition', 'assignment', 'destination', 'document')
|
->select('disposition', 'assignment', 'job_profile', 'destination', 'document', 'teamer', 'user')
|
||||||
->innerJoin('disposition.assignment', 'assignment')
|
->innerJoin('disposition.assignment', 'assignment')
|
||||||
|
->innerJoin('assignment.jobProfile', 'job_profile')
|
||||||
->innerJoin('assignment.destination', 'destination')
|
->innerJoin('assignment.destination', 'destination')
|
||||||
->leftJoin('disposition.documents', 'document')
|
->leftJoin('disposition.documents', 'document')
|
||||||
|
->innerJoin('disposition.teamer', 'teamer')
|
||||||
|
->innerJoin('teamer.user', 'user')
|
||||||
->where($qb->expr()->andX(
|
->where($qb->expr()->andX(
|
||||||
$qb->expr()->lte('disposition.createdAt', ':dueDate'),
|
$qb->expr()->lte('disposition.createdAt', ':dueDate'),
|
||||||
$qb->expr()->eq('disposition.status', ':status'),
|
$qb->expr()->eq('disposition.status', ':status'),
|
||||||
|
|||||||
@@ -32,8 +32,9 @@ class FeedbackRepository extends ServiceEntityRepository
|
|||||||
$qb = $this->createQueryBuilder('feedback');
|
$qb = $this->createQueryBuilder('feedback');
|
||||||
|
|
||||||
$qb
|
$qb
|
||||||
->select('feedback', 'teamer')
|
->select('feedback', 'teamer', 'user')
|
||||||
->innerJoin('feedback.teamer', 'teamer')
|
->innerJoin('feedback.teamer', 'teamer')
|
||||||
|
->innerJoin('teamer.user', 'user')
|
||||||
;
|
;
|
||||||
|
|
||||||
if (null !== $name = $filterDto->getName()) {
|
if (null !== $name = $filterDto->getName()) {
|
||||||
@@ -73,8 +74,9 @@ class FeedbackRepository extends ServiceEntityRepository
|
|||||||
$qb = $this->createQueryBuilder('feedback');
|
$qb = $this->createQueryBuilder('feedback');
|
||||||
|
|
||||||
return $qb
|
return $qb
|
||||||
->select('feedback', 'teamer')
|
->select('feedback', 'teamer', 'user')
|
||||||
->innerJoin('feedback.teamer', 'teamer')
|
->innerJoin('feedback.teamer', 'teamer')
|
||||||
|
->innerJoin('teamer.user', 'user')
|
||||||
->where($qb->expr()->eq('feedback.status', ':status'))
|
->where($qb->expr()->eq('feedback.status', ':status'))
|
||||||
->setParameter('status', Feedback::STATUS_NEW)
|
->setParameter('status', Feedback::STATUS_NEW)
|
||||||
->orderBy('feedback.createdAt', 'DESC')
|
->orderBy('feedback.createdAt', 'DESC')
|
||||||
|
|||||||
@@ -87,12 +87,13 @@ class UploadRepository extends ServiceEntityRepository
|
|||||||
$qb = $this->createQueryBuilder('upload');
|
$qb = $this->createQueryBuilder('upload');
|
||||||
|
|
||||||
return $qb
|
return $qb
|
||||||
->select('upload', 'disposition', 'assignment', 'job_profile', 'destination', 'teamer')
|
->select('upload', 'disposition', 'assignment', 'job_profile', 'destination', 'teamer', 'user')
|
||||||
->innerJoin('upload.disposition', 'disposition')
|
->innerJoin('upload.disposition', 'disposition')
|
||||||
->innerJoin('disposition.assignment', 'assignment')
|
->innerJoin('disposition.assignment', 'assignment')
|
||||||
->innerJoin('assignment.jobProfile', 'job_profile')
|
->innerJoin('assignment.jobProfile', 'job_profile')
|
||||||
->innerJoin('assignment.destination', 'destination')
|
->innerJoin('assignment.destination', 'destination')
|
||||||
->innerJoin('disposition.teamer', 'teamer')
|
->innerJoin('disposition.teamer', 'teamer')
|
||||||
|
->innerJoin('teamer.user', 'user')
|
||||||
->where($qb->expr()->andX(
|
->where($qb->expr()->andX(
|
||||||
$qb->expr()->eq('upload.type', ':type'),
|
$qb->expr()->eq('upload.type', ':type'),
|
||||||
$qb->expr()->eq('upload.status', ':status'),
|
$qb->expr()->eq('upload.status', ':status'),
|
||||||
@@ -120,12 +121,13 @@ class UploadRepository extends ServiceEntityRepository
|
|||||||
$qb = $this->createQueryBuilder('upload');
|
$qb = $this->createQueryBuilder('upload');
|
||||||
|
|
||||||
$qb
|
$qb
|
||||||
->select('upload', 'disposition', 'assignment', 'job_profile', 'destination', 'teamer')
|
->select('upload', 'disposition', 'assignment', 'job_profile', 'destination', 'teamer', 'user')
|
||||||
->innerJoin('upload.disposition', 'disposition')
|
->innerJoin('upload.disposition', 'disposition')
|
||||||
->innerJoin('disposition.assignment', 'assignment')
|
->innerJoin('disposition.assignment', 'assignment')
|
||||||
->innerJoin('assignment.jobProfile', 'job_profile')
|
->innerJoin('assignment.jobProfile', 'job_profile')
|
||||||
->innerJoin('assignment.destination', 'destination')
|
->innerJoin('assignment.destination', 'destination')
|
||||||
->innerJoin('disposition.teamer', 'teamer')
|
->innerJoin('disposition.teamer', 'teamer')
|
||||||
|
->innerJoin('teamer.user', 'user')
|
||||||
->addOrderBy('FIELD(upload.status, :checked, :new)', 'DESC')
|
->addOrderBy('FIELD(upload.status, :checked, :new)', 'DESC')
|
||||||
->setParameter('new', Upload::STATUS_NEW)
|
->setParameter('new', Upload::STATUS_NEW)
|
||||||
->setParameter('checked', Upload::STATUS_CHECKED)
|
->setParameter('checked', Upload::STATUS_CHECKED)
|
||||||
@@ -188,9 +190,10 @@ class UploadRepository extends ServiceEntityRepository
|
|||||||
$qb = $this->createQueryBuilder('upload');
|
$qb = $this->createQueryBuilder('upload');
|
||||||
|
|
||||||
return $qb
|
return $qb
|
||||||
->select('upload', 'owner', 'teamer', 'disposition', 'assignment')
|
->select('upload', 'owner', 'teamer', 'user', 'disposition', 'assignment')
|
||||||
->innerJoin('upload.owner', 'owner')
|
->innerJoin('upload.owner', 'owner')
|
||||||
->innerJoin('owner.teamer', 'teamer')
|
->innerJoin('owner.teamer', 'teamer')
|
||||||
|
->innerJoin('teamer.user', 'user')
|
||||||
->leftJoin('upload.disposition', 'disposition')
|
->leftJoin('upload.disposition', 'disposition')
|
||||||
->leftJoin('disposition.assignment', 'assignment')
|
->leftJoin('disposition.assignment', 'assignment')
|
||||||
->where($qb->expr()->andX(
|
->where($qb->expr()->andX(
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ use Oneup\UploaderBundle\Uploader\Orphanage\OrphanageManager;
|
|||||||
use Symfony\Component\Filesystem\Exception\IOException;
|
use Symfony\Component\Filesystem\Exception\IOException;
|
||||||
use Symfony\Component\Filesystem\Filesystem;
|
use Symfony\Component\Filesystem\Filesystem;
|
||||||
use Symfony\Component\HttpFoundation\RequestStack;
|
use Symfony\Component\HttpFoundation\RequestStack;
|
||||||
|
use function Symfony\Component\String\s;
|
||||||
|
|
||||||
class UploadHandler
|
class UploadHandler
|
||||||
{
|
{
|
||||||
@@ -119,7 +120,9 @@ class UploadHandler
|
|||||||
|
|
||||||
public function getUploadFilepath(Upload $upload): string
|
public function getUploadFilepath(Upload $upload): string
|
||||||
{
|
{
|
||||||
return sprintf('%s/uploads/%s/%s', $this->projectDir, $upload->getType(), $upload->getFilename());
|
$folder = substr($upload->getFilename(), 0, 1);
|
||||||
|
|
||||||
|
return sprintf('%s/uploads/%s/%s/%s', $this->projectDir, $upload->getType(), $folder, $upload->getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTempUploadFilepath(UploadDto $uploadDto, string $uploadSessionId): string
|
public function getTempUploadFilepath(UploadDto $uploadDto, string $uploadSessionId): string
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ class UploadNamer implements NamerInterface
|
|||||||
{
|
{
|
||||||
public function name(FileInterface $file): string
|
public function name(FileInterface $file): string
|
||||||
{
|
{
|
||||||
return sprintf('%s.%s', Uuid::v4(), strtolower($file->getExtension()));
|
$fileUuid = Uuid::v7();
|
||||||
|
$folder = substr($fileUuid, 0, 1);
|
||||||
|
|
||||||
|
return sprintf('%s/%s.%s', $folder, $fileUuid, strtolower($file->getExtension()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
||||||
|
|
||||||
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
||||||
<h2 class="flex justify-between pb-2">
|
<h2 class="flex justify-between pb-2">
|
||||||
<span class="font-bold text-lg">Neue Bewerbungen</span>
|
<span class="font-bold text-lg">Neue Bewerbungen</span>
|
||||||
@@ -31,6 +32,7 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
||||||
<h2 class="font-bold text-lg pb-2">
|
<h2 class="font-bold text-lg pb-2">
|
||||||
Neue Einteilungen
|
Neue Einteilungen
|
||||||
@@ -51,6 +53,7 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
||||||
<h2 class="flex justify-between pb-2">
|
<h2 class="flex justify-between pb-2">
|
||||||
<span class="font-bold text-lg">Neue Honorarverträge</span>
|
<span class="font-bold text-lg">Neue Honorarverträge</span>
|
||||||
@@ -84,6 +87,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
||||||
<h2 class="flex justify-between pb-2">
|
<h2 class="flex justify-between pb-2">
|
||||||
<span class="font-bold text-lg">Neue Honorarnoten</span>
|
<span class="font-bold text-lg">Neue Honorarnoten</span>
|
||||||
@@ -116,6 +120,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
||||||
<h2 class="font-bold text-lg pb-2">
|
<h2 class="font-bold text-lg pb-2">
|
||||||
Neue Einsätze
|
Neue Einsätze
|
||||||
@@ -140,6 +145,7 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
||||||
<h2 class="font-bold text-lg pb-2">
|
<h2 class="font-bold text-lg pb-2">
|
||||||
Neue Verfügbarkeiten
|
Neue Verfügbarkeiten
|
||||||
@@ -162,6 +168,7 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
||||||
<h2 class="flex justify-between pb-2">
|
<h2 class="flex justify-between pb-2">
|
||||||
<span class="font-bold text-lg">Neue Feedbacks</span>
|
<span class="font-bold text-lg">Neue Feedbacks</span>
|
||||||
@@ -195,6 +202,7 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% set overdueFeedbacksCount = overdueFeedbacks|length %}
|
{% set overdueFeedbacksCount = overdueFeedbacks|length %}
|
||||||
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
||||||
<h2 class="flex justify-between pb-2">
|
<h2 class="flex justify-between pb-2">
|
||||||
@@ -230,6 +238,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% set overdueContractsCount = overdueContracts|length %}
|
{% set overdueContractsCount = overdueContracts|length %}
|
||||||
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
<div class="bg-gray-100 border border-gray-200 rounded-md px-4 py-2">
|
||||||
<h2 class="flex justify-between pb-2">
|
<h2 class="flex justify-between pb-2">
|
||||||
@@ -261,5 +270,6 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
{{ form_start(form, { 'attr': { 'hx-post': app.request.uri, 'hx-target': '#htmx-modal', 'hx-swap': 'outerHTML' } }) }}
|
{{ form_start(form, { 'attr': { 'hx-post': app.request.uri, 'hx-target': '#htmx-modal', 'hx-swap': 'outerHTML' } }) }}
|
||||||
<a href="{{ path('app_common_download', { 'uuid': document.uuid, 'inline': true }) }}"
|
<a href="{{ path('app_common_download', { 'uuid': document.uuid, 'inline': true }) }}"
|
||||||
|
target="_blank"
|
||||||
class="flex justify-between items-center pb-4"
|
class="flex justify-between items-center pb-4"
|
||||||
title="Dokument öffnen">
|
title="Dokument öffnen">
|
||||||
<h2 class="font-bold text-lg">
|
<h2 class="font-bold text-lg">
|
||||||
|
|||||||
Reference in New Issue
Block a user