Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions app/config/packages/doctrine.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ doctrine:
is_bundle: false
dir: '%kernel.project_dir%/../sources/AppBundle/Association/Entity'
prefix: 'AppBundle\Association\Entity'
MembershipFee:
type: attribute
is_bundle: false
dir: '%kernel.project_dir%/../sources/AppBundle/MembershipFee/Entity'
prefix: 'AppBundle\MembershipFee\Entity'
AssembleeGenerale:
type: attribute
is_bundle: false
Expand Down
7 changes: 0 additions & 7 deletions app/config/packages/ting.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,3 @@ ting:
default:
connection: main
database: '%database_name%'
membershipfee:
namespace: AppBundle\MembershipFee\Model\Repository
directory: "@AppBundle/MembershipFee/Model/Repository"
options:
default:
connection: main
database: "%database_name%"
166 changes: 44 additions & 122 deletions phpstan-baseline.php

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use Afup\Site\Utils\Utils;
use AppBundle\Association\MemberType;
use AppBundle\Association\Model\CompanyMember;
use AppBundle\MembershipFee\Model\MembershipFee;
use AppBundle\MembershipFee\Entity\Cotisation;

final readonly class SubscriptionManagement
{
Expand All @@ -35,10 +35,10 @@ public function createInvoiceForInscription(CompanyMember $company, int $numberO
);
$subscription = $this->membershipFeeService->getLatestByUserTypeAndId(MemberType::MemberCompany, $company->getId());

if (!$subscription instanceof MembershipFee) {
if (!$subscription instanceof Cotisation) {
throw new \RuntimeException('An error occured');
}

return ['invoice' => $subscription->getInvoiceNumber(), 'token' => $subscription->getToken()];
return ['invoice' => $subscription->numeroFacture, 'token' => $subscription->token];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@
use AppBundle\Association\MemberType;
use AppBundle\Association\Model\CompanyMember;
use AppBundle\Association\Model\User;
use AppBundle\MembershipFee\Model\MembershipFee;
use AppBundle\MembershipFee\Model\Repository\MembershipFeeRepository;
use CCMBenchmark\Ting\Repository\Collection;
use AppBundle\MembershipFee\Entity\Cotisation;
use AppBundle\MembershipFee\Entity\Repository\CotisationRepository;

class SeniorityComputer
{
public function __construct(private readonly MembershipFeeRepository $membershipFeeRepository) {}
public function __construct(private readonly CotisationRepository $membershipFeeRepository) {}

/** @return array{years: int, first_year: int|null} */
public function computeCompanyAndReturnInfos(CompanyMember $companyMember): array
Expand All @@ -39,18 +38,18 @@ public function computeAndReturnInfos(User $user): array
}

/**
* @param Collection<MembershipFee> $cotisations
* @param Cotisation[] $cotisations
* @return array{years: int, first_year: int|null}
*/
private function computeFromCotisationsAndReturnInfos(Collection $cotisations): array
private function computeFromCotisationsAndReturnInfos(array $cotisations): array
{
$now = new \DateTime();
$diffs = [];

$years = [];
foreach ($cotisations as $coti) {
$from = $coti->getStartDate();
$to = $coti->getEndDate();
$from = $coti->dateDebut;
$to = $coti->dateFin;
$to = min($now, $to);
$diffs[] = $from->diff($to);
$years[] = $from->format('Y');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
use AppBundle\Email\Mailer\MailUser;
use AppBundle\Email\Mailer\MailUserFactory;
use AppBundle\Email\Mailer\Message;
use AppBundle\MembershipFee\Model\MembershipFee;
use AppBundle\MembershipFee\Entity\Cotisation;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

Expand Down Expand Up @@ -86,7 +86,7 @@ public function sendWelcomeEmail(User $user): bool
return $this->mailer->send($message);
}

public function getLastSubscription(User $user): ?MembershipFee
public function getLastSubscription(User $user): ?Cotisation
{
if ($user->getCompanyId()) {
$id = $user->getCompanyId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ private function callCotisation(string $cmd, string $status): string
}
$url = $this->urlGenerator->generate('membership_payment');

return $this->buildUrl($url, $cotisation->getAmount(), $cmd, $status);
return $this->buildUrl($url, $cotisation->montant, $cmd, $status);
}

private function callInvoice(string $cmd, string $status): string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
use AppBundle\Association\Model\Repository\CompanyMemberRepository;
use AppBundle\Association\Model\Repository\UserRepository;
use AppBundle\AuditLog\Audit;
use AppBundle\MembershipFee\Entity\Cotisation;
use AppBundle\MembershipFee\Entity\Repository\CotisationRepository;
use AppBundle\MembershipFee\Form\MembershipFeeType;
use AppBundle\MembershipFee\Model\MembershipFee;
use AppBundle\MembershipFee\Model\Repository\MembershipFeeRepository;
use Psr\Clock\ClockInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
Expand All @@ -21,14 +21,14 @@ class AddMembershipFeeAction extends AbstractController
public function __construct(
private readonly CompanyMemberRepository $companyMemberRepository,
private readonly UserRepository $userRepository,
private readonly MembershipFeeRepository $membershipFeeRepository,
private readonly CotisationRepository $membershipFeeRepository,
private readonly ClockInterface $clock,
private readonly Audit $audit,
) {}

public function __invoke(MemberType $memberType, int $memberId, Request $request): Response
{
$membershipFee = new MembershipFee();
$membershipFee = new Cotisation();
$member = match ($memberType) {
MemberType::MemberCompany => $this->companyMemberRepository->get($memberId),
MemberType::MemberPhysical => $this->userRepository->get($memberId),
Expand All @@ -37,13 +37,12 @@ public function __invoke(MemberType $memberType, int $memberId, Request $request
$startDate = $this->membershipFeeRepository->getMembershipStartingDate($memberType, $member->getId());
$endDate = clone $startDate;
$endDate->modify('+1 year');
$membershipFee->setStartDate($startDate)
->setEndDate($endDate)
->setUserType($memberType)
->setUserId($member->getId())
->setToken(base64_encode(random_bytes(30)))
->setInvoiceDate($this->clock->now())
;
$membershipFee->dateDebut = $startDate;
$membershipFee->dateFin = $endDate;
$membershipFee->typePersonne = $memberType;
$membershipFee->idPersonne = $member->getId();
$membershipFee->token = base64_encode(random_bytes(30));
$membershipFee->dateFacture = $this->clock->now();

$form = $this->createForm(MembershipFeeType::class, $membershipFee);
$form->handleRequest($request);
Expand All @@ -58,12 +57,12 @@ public function __invoke(MemberType $memberType, int $memberId, Request $request
$name = $memberType->value === MemberType::MemberCompany->value ? $member->getCompanyName() : $member->getFirstName() . ' ' . $member->getLastName();

try {
$membershipFee->setInvoiceNumber($this->membershipFeeRepository->generateInvoiceNumber());
$membershipFee->numeroFacture = $this->membershipFeeRepository->generateInvoiceNumber();
$this->membershipFeeRepository->save($membershipFee);
$this->audit->log("Ajout de la cotisation jusqu'au " . $fmt->format($membershipFee->getEndDate()) . ' pour ' . $name);
$this->addFlash('notice', "La cotisation jusqu'au " . $fmt->format($membershipFee->getEndDate()) . ' pour ' . $name . ' a bien été ajoutée');
$this->audit->log("Ajout de la cotisation jusqu'au " . $fmt->format($membershipFee->dateFin) . ' pour ' . $name);
$this->addFlash('notice', "La cotisation jusqu'au " . $fmt->format($membershipFee->dateFin) . ' pour ' . $name . ' a bien été ajoutée');
} catch (\Exception) {
$this->addFlash('error', 'Une erreur est survenue lors de l\'ajout de la cotisation jusqu\'au ' . $fmt->format($membershipFee->getEndDate()) . ' pour ' . $name);
$this->addFlash('error', 'Une erreur est survenue lors de l\'ajout de la cotisation jusqu\'au ' . $fmt->format($membershipFee->dateFin) . ' pour ' . $name);
}
return $this->redirectToRoute('admin_membership_fee_list', ['memberType' => $memberType->value, 'memberId' => $member->getId()]);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

use AppBundle\Association\MemberType;
use AppBundle\AuditLog\Audit;
use AppBundle\MembershipFee\Model\Repository\MembershipFeeRepository;
use AppBundle\MembershipFee\Entity\Repository\CotisationRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
Expand All @@ -16,7 +16,7 @@
class DeleteMembershipFeeAction extends AbstractController
{
public function __construct(
private readonly MembershipFeeRepository $membershipFeeRepository,
private readonly CotisationRepository $membershipFeeRepository,
private readonly CsrfTokenManagerInterface $csrfTokenManager,
private readonly Audit $audit,
) {}
Expand All @@ -29,7 +29,7 @@ public function __invoke(MemberType $memberType, int $memberId, int $membershipF
}

try {
$membershipFee = $this->membershipFeeRepository->get($membershipFeeId);
$membershipFee = $this->membershipFeeRepository->find($membershipFeeId);
$this->membershipFeeRepository->delete($membershipFee);

$this->audit->log('Suppression de la cotisation ' . $membershipFeeId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
use AppBundle\Association\Model\Repository\CompanyMemberRepository;
use AppBundle\Association\Model\Repository\UserRepository;
use AppBundle\AuditLog\Audit;
use AppBundle\MembershipFee\Entity\Repository\CotisationRepository;
use AppBundle\MembershipFee\Form\MembershipFeeType;
use AppBundle\MembershipFee\Model\Repository\MembershipFeeRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
Expand All @@ -19,13 +19,13 @@ class EditMembershipFeeAction extends AbstractController
public function __construct(
private readonly CompanyMemberRepository $companyMemberRepository,
private readonly UserRepository $userRepository,
private readonly MembershipFeeRepository $membershipFeeRepository,
private readonly CotisationRepository $membershipFeeRepository,
private readonly Audit $audit,
) {}

public function __invoke(MemberType $memberType, int $memberId, int $membershipFeeId, Request $request): Response
{
$membershipFee = $this->membershipFeeRepository->get($membershipFeeId);
$membershipFee = $this->membershipFeeRepository->find($membershipFeeId);
$member = match ($memberType) {
MemberType::MemberCompany => $this->companyMemberRepository->get($memberId),
MemberType::MemberPhysical => $this->userRepository->get($memberId),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use AppBundle\Association\MemberType;
use AppBundle\Association\Model\Repository\CompanyMemberRepository;
use AppBundle\Association\Model\Repository\UserRepository;
use AppBundle\MembershipFee\Model\Repository\MembershipFeeRepository;
use AppBundle\MembershipFee\Entity\Repository\CotisationRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\User\UserInterface;
Expand All @@ -18,7 +18,7 @@ class ListMembershipFeeAction extends AbstractController
public function __construct(
private readonly CompanyMemberRepository $companyMemberRepository,
private readonly UserRepository $userRepository,
private readonly MembershipFeeRepository $membershipFeeRepository,
private readonly CotisationRepository $membershipFeeRepository,
) {}

public function __invoke(#[CurrentUser] UserInterface $user, MemberType $memberType, int $memberId): Response
Expand All @@ -28,7 +28,7 @@ public function __invoke(#[CurrentUser] UserInterface $user, MemberType $memberT
MemberType::MemberPhysical => $this->userRepository->get($memberId),
};

$memberships = $this->membershipFeeRepository->getBy(['userType' => $memberType->value, 'userId' => $memberId]);
$memberships = $this->membershipFeeRepository->findBy(['typePersonne' => $memberType, 'idPersonne' => $memberId]);

return $this->render('admin/accounting/membership/list.html.twig', [
'memberType' => $memberType,
Expand Down
6 changes: 3 additions & 3 deletions sources/AppBundle/Controller/Website/Member/IndexAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
use AppBundle\Association\UserMembership\BadgesComputer;
use AppBundle\Association\UserMembership\UserService;
use AppBundle\GeneralMeeting\GeneralMeetingRepository;
use AppBundle\MembershipFee\Model\MembershipFee;
use AppBundle\MembershipFee\Entity\Cotisation;
use AppBundle\Security\Authentication;
use AppBundle\Veille\Entity\Repository\NewsletterInscriptionRepository;
use AppBundle\Twig\ViewRenderer;
Expand Down Expand Up @@ -40,8 +40,8 @@ public function __invoke(): Response
$cotisation = $userService->getLastSubscription($user);

$dateFinCotisation = null;
if ($cotisation instanceof MembershipFee) {
$dateFinCotisation = $cotisation->getEndDate();
if ($cotisation instanceof Cotisation) {
$dateFinCotisation = $cotisation->dateFin;
}

$daysBeforeMembershipExpiration = $user->getDaysBeforeMembershipExpiration();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
use AppBundle\Association\Model\Repository\UserRepository;
use AppBundle\Association\Model\User;
use AppBundle\AuditLog\Audit;
use AppBundle\MembershipFee\Model\Repository\MembershipFeeRepository;
use AppBundle\MembershipFee\Entity\Repository\CotisationRepository;
use AppBundle\Security\MembershipFeeVoter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
Expand All @@ -25,7 +25,7 @@ final class DownloadAction extends AbstractController
public function __construct(
private readonly UserRepository $userRepository,
private readonly CompanyMemberRepository $companyMemberRepository,
private readonly MembershipFeeRepository $membershipFeeRepository,
private readonly CotisationRepository $membershipFeeRepository,
private readonly MembershipFeeInvoicePdfGenerator $pdfGenerator,
private readonly Droits $droits,
private readonly Audit $audit,
Expand All @@ -43,19 +43,19 @@ public function __invoke(Request $request): BinaryFileResponse

$tempfile = tempnam(sys_get_temp_dir(), 'membership_fee_download');
$numeroFacture = $this->pdfGenerator->genererFacture($id, $tempfile);
$membershipFee = $this->membershipFeeRepository->get($id);
$membershipFee = $this->membershipFeeRepository->find($id);

if ($membershipFee->getUserType() === MemberType::MemberCompany) {
$company = $this->companyMemberRepository->get($membershipFee->getUserId());
if ($membershipFee->typePersonne === MemberType::MemberCompany) {
$company = $this->companyMemberRepository->get($membershipFee->idPersonne);
Assert::isInstanceOf($company, CompanyMember::class);
$patternPrefix = $company->getCompanyName();
} else {
$user = $this->userRepository->get($membershipFee->getUserId());
$user = $this->userRepository->get($membershipFee->idPersonne);
Assert::isInstanceOf($user, User::class);
$patternPrefix = $user->getLastName();
}

$pattern = str_replace(' ', '', $patternPrefix) . '_' . $numeroFacture . '_' . $membershipFee->getStartDate()->format('dmY') . '.pdf';
$pattern = str_replace(' ', '', $patternPrefix) . '_' . $numeroFacture . '_' . $membershipFee->dateDebut->format('dmY') . '.pdf';

$response = new BinaryFileResponse($tempfile, Response::HTTP_OK, [], false);
$response->deleteFileAfterSend(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
use AppBundle\Association\Model\Repository\CompanyMemberRepository;
use AppBundle\Association\Model\Repository\UserRepository;
use AppBundle\Association\UserMembership\UserService;
use AppBundle\MembershipFee\Model\MembershipFee;
use AppBundle\MembershipFee\Model\Repository\MembershipFeeRepository;
use AppBundle\MembershipFee\Entity\Cotisation;
use AppBundle\MembershipFee\Entity\Repository\CotisationRepository;
use AppBundle\Payment\PayboxBilling;
use AppBundle\Payment\PayboxFactory;
use AppBundle\Twig\ViewRenderer;
Expand All @@ -33,7 +33,7 @@ public function __construct(
private readonly UserService $userService,
private readonly PayboxFactory $payboxFactory,
private readonly MembershipFeeService $membershipFeeService,
private readonly MembershipFeeRepository $membershipFeeRepository,
private readonly CotisationRepository $membershipFeeRepository,
private readonly Droits $droits,
) {}

Expand All @@ -48,27 +48,27 @@ public function __invoke(): Response
$now = new \DateTime('now');
$isSubjectedToVat = Vat::isSubjectedToVat($now);

if (!$cotisation instanceof MembershipFee) {
if (!$cotisation instanceof Cotisation) {
$message = '';
} else {
$endSubscription = $this->membershipFeeService->getNextSubscriptionExpiration($cotisation);
$message = sprintf(
'Votre dernière cotisation -- %s € -- est valable jusqu\'au %s. <br />
Si vous renouvelez votre cotisation maintenant, celle-ci sera valable jusqu\'au %s.',
number_format((float) $cotisation->getAmount(), 2, ',', ' '),
$cotisation->getEndDate()->format('d/m/Y'),
number_format((float) $cotisation->montant, 2, ',', ' '),
$cotisation->dateFin->format('d/m/Y'),
$endSubscription->format('d/m/Y'),
);
}

$cotisations_physique = $this->membershipFeeRepository->getListByUserTypeAndId(MemberType::MemberPhysical, $user->getId());
$cotisations_morale = $this->membershipFeeRepository->getListByUserTypeAndId(MemberType::MemberCompany, $user->getCompanyId());

/** @var array<int, MembershipFee> $liste_cotisations */
$liste_cotisations = array_merge(iterator_to_array($cotisations_physique), iterator_to_array($cotisations_morale));
/** @var array<int, Cotisation> $liste_cotisations */
$liste_cotisations = array_merge($cotisations_physique, $cotisations_morale);

foreach ($liste_cotisations as $cotisation) {
$cotisation->setDownloadInvoice($this->isGranted(MembershipFeeVoter::READ_INVOICE, (string) $cotisation->getId()));
$cotisation->telechargerFacture = $this->isGranted(MembershipFeeVoter::READ_INVOICE, (string) $cotisation->id);
}

if ($user->getCompanyId() > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public function __invoke(Request $request): Response
$generalMeetingPlanned = $this->assembleGeneraleRepository->hasPlanned();

$cotisation = $userService->getLastSubscription($user);
$needsMembersheepFeePayment = $latestDate->getTimestamp() > strtotime("+14 day", $cotisation->getEndDate()->getTimestamp());
$needsMembersheepFeePayment = $latestDate->getTimestamp() > strtotime("+14 day", $cotisation->dateFin->getTimestamp());

if ($needsMembersheepFeePayment) {
return $this->view->render('admin/association/membership/generalmeeting_membersheepfee.html.twig', [
Expand Down
Loading
Loading