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\PersonBundle\Entity\SocialWork\SocialAction;
|
||||
use Chill\PersonBundle\Repository\SocialWork\SocialIssueRepository;
|
||||
use Symfony\Component\Clock\ClockInterface;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
use function count;
|
||||
|
||||
class SocialWorkSocialActionApiController extends ApiController
|
||||
final class SocialWorkSocialActionApiController extends ApiController
|
||||
{
|
||||
private PaginatorFactory $paginator;
|
||||
|
||||
private SocialIssueRepository $socialIssueRepository;
|
||||
|
||||
public function __construct(SocialIssueRepository $socialIssueRepository, PaginatorFactory $paginator)
|
||||
{
|
||||
$this->socialIssueRepository = $socialIssueRepository;
|
||||
$this->paginator = $paginator;
|
||||
public function __construct(
|
||||
private readonly SocialIssueRepository $socialIssueRepository,
|
||||
private readonly PaginatorFactory $paginator,
|
||||
private readonly ClockInterface $clock,
|
||||
) {
|
||||
}
|
||||
|
||||
public function listBySocialIssueApi($id, Request $request)
|
||||
@ -42,7 +40,10 @@ class SocialWorkSocialActionApiController extends ApiController
|
||||
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());
|
||||
|
||||
|
@ -15,6 +15,7 @@ use DateInterval;
|
||||
use DateTimeInterface;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\Common\Collections\ReadableCollection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Symfony\Component\Serializer\Annotation as Serializer;
|
||||
|
||||
@ -295,6 +296,19 @@ class SocialAction
|
||||
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
|
||||
{
|
||||
return $this->getParent() instanceof self;
|
||||
@ -401,4 +415,14 @@ class SocialAction
|
||||
|
||||
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
|
||||
*/
|
||||
public function getRecursiveSocialActions(): Collection
|
||||
@ -272,7 +272,7 @@ class SocialIssue
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection|SocialAction[]
|
||||
* @return Collection<SocialAction>
|
||||
*/
|
||||
public function getSocialActions(): Collection
|
||||
{
|
||||
|
@ -20,7 +20,7 @@
|
||||
<td>{{ entity.ordering }}</td>
|
||||
<td>
|
||||
{% if entity.desactivationDate is not null %}
|
||||
{{ entity.desactivationDate|date('Y-m-d') }}
|
||||
{{ entity.desactivationDate|format_date('medium') }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
|
Loading…
x
Reference in New Issue
Block a user