mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Fixed: filter social action to keep only currently activated
This commit is contained in:
parent
146103e87c
commit
471898e6d8
5
.changes/unreleased/Fixed-20230621-135912.yaml
Normal file
5
.changes/unreleased/Fixed-20230621-135912.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
kind: Fixed
|
||||||
|
body: 'Api: filter social action to keep only the currently activated'
|
||||||
|
time: 2023-06-21T13:59:12.57760217+02:00
|
||||||
|
custom:
|
||||||
|
Issue: ""
|
@ -16,21 +16,19 @@ use Chill\MainBundle\Pagination\PaginatorFactory;
|
|||||||
use Chill\MainBundle\Serializer\Model\Collection;
|
use Chill\MainBundle\Serializer\Model\Collection;
|
||||||
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
|
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
|
||||||
use Chill\PersonBundle\Repository\SocialWork\SocialIssueRepository;
|
use Chill\PersonBundle\Repository\SocialWork\SocialIssueRepository;
|
||||||
|
use Symfony\Component\Clock\ClockInterface;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
use function count;
|
use function count;
|
||||||
|
|
||||||
class SocialWorkSocialActionApiController extends ApiController
|
final class SocialWorkSocialActionApiController extends ApiController
|
||||||
{
|
{
|
||||||
private PaginatorFactory $paginator;
|
public function __construct(
|
||||||
|
private readonly SocialIssueRepository $socialIssueRepository,
|
||||||
private SocialIssueRepository $socialIssueRepository;
|
private readonly PaginatorFactory $paginator,
|
||||||
|
private readonly ClockInterface $clock,
|
||||||
public function __construct(SocialIssueRepository $socialIssueRepository, PaginatorFactory $paginator)
|
) {
|
||||||
{
|
|
||||||
$this->socialIssueRepository = $socialIssueRepository;
|
|
||||||
$this->paginator = $paginator;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function listBySocialIssueApi($id, Request $request)
|
public function listBySocialIssueApi($id, Request $request)
|
||||||
@ -42,7 +40,10 @@ class SocialWorkSocialActionApiController extends ApiController
|
|||||||
throw $this->createNotFoundException('socialIssue not found');
|
throw $this->createNotFoundException('socialIssue not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
$socialActions = $socialIssue->getRecursiveSocialActions()->toArray();
|
$socialActions = SocialAction::filterRemoveDeactivatedActions(
|
||||||
|
$socialIssue->getRecursiveSocialActions()->toArray(),
|
||||||
|
\DateTime::createFromImmutable($this->clock->now())
|
||||||
|
);
|
||||||
|
|
||||||
usort($socialActions, static fn (SocialAction $sa, SocialAction $sb) => $sa->getOrdering() <=> $sb->getOrdering());
|
usort($socialActions, static fn (SocialAction $sa, SocialAction $sb) => $sa->getOrdering() <=> $sb->getOrdering());
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ use DateInterval;
|
|||||||
use DateTimeInterface;
|
use DateTimeInterface;
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
use Doctrine\Common\Collections\Collection;
|
use Doctrine\Common\Collections\Collection;
|
||||||
|
use Doctrine\Common\Collections\ReadableCollection;
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
use Symfony\Component\Serializer\Annotation as Serializer;
|
use Symfony\Component\Serializer\Annotation as Serializer;
|
||||||
|
|
||||||
@ -295,6 +296,19 @@ class SocialAction
|
|||||||
return 0 < $this->getChildren()->count();
|
return 0 < $this->getChildren()->count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isDesactivated(\DateTime $atDate): bool
|
||||||
|
{
|
||||||
|
if (null !== $this->desactivationDate && $this->desactivationDate < $atDate) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->hasParent()) {
|
||||||
|
return $this->parent->isDesactivated($atDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public function hasParent(): bool
|
public function hasParent(): bool
|
||||||
{
|
{
|
||||||
return $this->getParent() instanceof self;
|
return $this->getParent() instanceof self;
|
||||||
@ -401,4 +415,14 @@ class SocialAction
|
|||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function filterRemoveDeactivatedActions(ReadableCollection|array $actions, \DateTime $comparisonDate): ReadableCollection|array
|
||||||
|
{
|
||||||
|
$filterFn = fn (SocialAction $socialAction) => !$socialAction->isDesactivated($comparisonDate);
|
||||||
|
|
||||||
|
return match ($actions instanceof ReadableCollection) {
|
||||||
|
true => $actions->filter($filterFn),
|
||||||
|
false => array_filter($actions, $filterFn)
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,7 +253,7 @@ class SocialIssue
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Collection|SocialAction[] All the descendant social actions of all
|
* @return Collection<SocialAction> All the descendant social actions of all
|
||||||
* the descendants of the entity
|
* the descendants of the entity
|
||||||
*/
|
*/
|
||||||
public function getRecursiveSocialActions(): Collection
|
public function getRecursiveSocialActions(): Collection
|
||||||
@ -272,7 +272,7 @@ class SocialIssue
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Collection|SocialAction[]
|
* @return Collection<SocialAction>
|
||||||
*/
|
*/
|
||||||
public function getSocialActions(): Collection
|
public function getSocialActions(): Collection
|
||||||
{
|
{
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<td>{{ entity.ordering }}</td>
|
<td>{{ entity.ordering }}</td>
|
||||||
<td>
|
<td>
|
||||||
{% if entity.desactivationDate is not null %}
|
{% if entity.desactivationDate is not null %}
|
||||||
{{ entity.desactivationDate|date('Y-m-d') }}
|
{{ entity.desactivationDate|format_date('medium') }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user