Skip to content

Commit

Permalink
Member.php: also properly resolve monthly and yearly payments
Browse files Browse the repository at this point in the history
and register the first payment in the payments array so the new users
show up as having paid in the xlsx database export.

Closes: #203
Signed-off-by: Nowa Ammerlaan <[email protected]>
  • Loading branch information
Nowa-Ammerlaan committed Nov 17, 2024
1 parent a47cdc0 commit 15890f2
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 7 deletions.
31 changes: 31 additions & 0 deletions migrations/Version20241117160044.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20241117160044 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}

public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE admin_member CHANGE contribution_period contribution_period INT DEFAULT 1 NOT NULL');
}

public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE admin_member CHANGE contribution_period contribution_period INT DEFAULT 2 NOT NULL');
}
}
31 changes: 31 additions & 0 deletions src/Controller/Admin/MembershipApplicationCrud.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use App\Service\SubscriptionSetupService;
use Doctrine\ORM\QueryBuilder;

use App\Entity\ContributionPayment;
use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
Expand Down Expand Up @@ -116,6 +117,36 @@ public function acceptApplication(AdminContext $context)
$this->addFlash("warning", "Het net geaccepteerde lid heeft nog geen automatisch incasso. Het nieuwe lid kan dit alleen zelf instellen.");
}

$member = $application->createMember($subscriptionId);
$member->generateNewPasswordToken();

$em = $this->getDoctrine()->getManager();

if ($application->getPaid()) {
$init_payment = new ContributionPayment();
$init_payment->setMember($member);
$init_payment->setStatus(1);
$init_payment->setPaymentTime($member->getRegistrationTime());
$init_payment->setPeriodYear($member->getRegistrationTime()->format('Y'));
$init_payment->setPeriodMonthStart($member->getRegistrationTime()->format('n'));
switch ($member->getContributionPeriod()) {
case $member::PERIOD_MONTHLY:
$init_payment->setPeriodMonthEnd($member->getRegistrationTime()->modify('+1 month')->format('n'));
break;
case $member::PERIOD_QUARTERLY:
$init_payment->setPeriodMonthEnd($member->getRegistrationTime()->modify('+3 month')->format('n'));
break;
case $member::PERIOD_ANNUALLY:
$init_payment->setPeriodMonthEnd($member->getRegistrationTime()->modify('+12 month')->format('n'));
break;
default;
throw new \Exception('Period must be PERIOD_MONTHLY, PERIOD_QUARTERLY or PERIOD_ANNUALLY');
}
$init_payment->setAmountInCents($member->getContributionPerPeriodInCents());
$init_payment->setAmountInEuros($member->getContributionPerPeriodInEuros());
$em->persist($init_payment);
}

$em->persist($member);
$em->remove($application);
$em->flush();
Expand Down
14 changes: 7 additions & 7 deletions src/Entity/Member.php
Original file line number Diff line number Diff line change
Expand Up @@ -123,9 +123,9 @@ class Member implements UserInterface {
private bool $createSubscriptionAfterPayment = false;

/**
* @ORM\Column(type="integer", options={"default": 2})
* @ORM\Column(type="integer", options={"default": 1})
*/
private int $contributionPeriod = self::PERIOD_ANNUALLY;
private int $contributionPeriod = self::PERIOD_QUARTERLY;

/**
* @ORM\Column(type="integer", options={"default": 500})
Expand Down Expand Up @@ -271,20 +271,20 @@ public function setIsAdmin(bool $isAdmin): void {
}

public function isContributionCompleted(DateTime $when) {
$year = $when->format('Y');
$month = $when->format('n');
switch ($this->getContributionPeriod()) {
case self::PERIOD_MONTHLY:
$payments = $this->contributionPayments->filter(fn($payment) => $payment->getPeriodYear() == $year && $payment->getPeriodMonthStart() == $month);
$when->modify('-1 month');
break;
case self::PERIOD_QUARTERLY:
$when->modify('-3 months');
$payments = $this->contributionPayments->filter(fn($payment) => $payment->getPaymentTime() >= $when);
break;
case self::PERIOD_ANNUALLY:
$payments = $this->contributionPayments->filter(fn($payment) => $payment->getPeriodYear() == $year);
$when->modify('-12 months');
break;
default;
throw new \Exception('Period must be PERIOD_MONTHLY, PERIOD_QUARTERLY or PERIOD_ANNUALLY');
}
$payments = $this->contributionPayments->filter(fn($payment) => $payment->getPaymentTime() >= $when);
$payments = $payments->filter(fn($payment) => $payment->getStatus() == ContributionPayment::STATUS_PAID);
return count($payments) > 0;
}
Expand Down

0 comments on commit 15890f2

Please sign in to comment.