-
Notifications
You must be signed in to change notification settings - Fork 69
Expand file tree
/
Copy pathIndexAction.php
More file actions
75 lines (62 loc) · 3.35 KB
/
IndexAction.php
File metadata and controls
75 lines (62 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
declare(strict_types=1);
namespace AppBundle\Controller\Website\Member;
use AppBundle\Association\Model\Repository\GeneralMeetingQuestionRepository;
use AppBundle\Association\Model\Repository\TechletterSubscriptionsRepository;
use AppBundle\Association\UserMembership\BadgesComputer;
use AppBundle\Association\UserMembership\UserService;
use AppBundle\GeneralMeeting\GeneralMeetingRepository;
use AppBundle\MembershipFee\Model\MembershipFee;
use AppBundle\Security\Authentication;
use AppBundle\Twig\ViewRenderer;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
final class IndexAction extends AbstractController
{
public const DAYS_BEFORE_CALL_TO_UPDATE = 15;
public function __construct(
private readonly ViewRenderer $view,
private readonly GeneralMeetingRepository $generalMeetingRepository,
private readonly UserService $userService,
private readonly GeneralMeetingQuestionRepository $generalMeetingQuestionRepository,
private readonly BadgesComputer $badgesComputer,
private readonly TechletterSubscriptionsRepository $techletterSubscriptionsRepository,
private readonly Authentication $authentication,
) {}
public function __invoke(): Response
{
$user = $this->authentication->getAfupUser();
$generalMeetingFactory = $this->generalMeetingRepository;
$userService = $this->userService;
$cotisation = $userService->getLastSubscription($user);
$dateFinCotisation = null;
if ($cotisation instanceof MembershipFee) {
$dateFinCotisation = $cotisation->getEndDate();
}
$daysBeforeMembershipExpiration = $user->getDaysBeforeMembershipExpiration();
$generalMeetingRepository = $this->generalMeetingRepository;
$generalMeetingQuestionRepository = $this->generalMeetingQuestionRepository;
$latestDate = $generalMeetingRepository->getLatestGeneralAssemblyDate();
$hasGeneralMeetingPlanned = $generalMeetingFactory->hasGeneralMeetingPlanned();
$displayLinkToGeneralMeetingVote = false;
if ($hasGeneralMeetingPlanned
&& null !== $latestDate
&& ($latestDate->format('Y-m-d') === (new \DateTime('-1 day'))->format('Y-m-d'))
&& count($generalMeetingQuestionRepository->loadByDate($latestDate)) > 0
) {
$displayLinkToGeneralMeetingVote = true;
}
return $this->view->render('site/member/index.html.twig', [
'badges' => $this->badgesComputer->getBadges($user),
'user' => $user,
'has_member_subscribed_to_techletter' => $this->techletterSubscriptionsRepository->hasUserSubscribed($user),
'membership_fee_call_to_update' => null === $daysBeforeMembershipExpiration || $daysBeforeMembershipExpiration < self::DAYS_BEFORE_CALL_TO_UPDATE,
'has_up_to_date_membership_fee' => $user->hasUpToDateMembershipFee(),
'office_label' => $user->getNearestOfficeLabel(),
'has_general_meeting_planned' => $hasGeneralMeetingPlanned,
'has_user_rspved_to_next_general_meeting' => $generalMeetingFactory->hasUserRspvedToLastGeneralMeeting($user),
'membershipfee_end_date' => $dateFinCotisation,
'display_link_to_general_meeting_vote' => $displayLinkToGeneralMeetingVote,
]);
}
}