diff --git a/app/Helpers/Payment/EventPayment.php b/app/Helpers/Payment/EventPayment.php index 9a6904f1..59191073 100644 --- a/app/Helpers/Payment/EventPayment.php +++ b/app/Helpers/Payment/EventPayment.php @@ -58,6 +58,16 @@ public function getDiscount(): Discount return Discount::max($this->participant->incomeBasedDiscount, $this->event->earlybirdDiscount); } + public function isFree(): bool + { + return $this->event->prijs !== null && $this->getTotalAmount() === 0.0; + } + + public function isUndetermined(): bool + { + return $this->event->prijs === null; + } + public function getTotalAmount(): float { return self::calculatePrice($this->event->prijs + $this->getPackagePrice(), $this->getDiscount()); diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 01dd670a..1a6b6214 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -21,6 +21,7 @@ use App\Models\Member; use App\Services\Chart\ChartServiceInterface; use Illuminate\Http\Request; +use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Mail; @@ -387,6 +388,12 @@ public function onCampSave(Request $request) $iDeal = $request->iDeal; $type = 'existing'; + if ($payment->isFree()) { + $camp->participants()->updateExistingPivot($participant->id, [ + 'datum_betaling' => Carbon::now(), + ]); + } + // Send update to office committee Mail::send(new ParticipantOnEventNotification( $participant, @@ -397,8 +404,8 @@ public function onCampSave(Request $request) Mail::send(new ParticipantOnEventConfirmationMail( $participant, $camp, + $payment, $givenCourses, - $toPay, $iDeal, $type )); diff --git a/app/Http/Controllers/RegistrationController.php b/app/Http/Controllers/RegistrationController.php index e23e1fb3..cd1b6299 100644 --- a/app/Http/Controllers/RegistrationController.php +++ b/app/Http/Controllers/RegistrationController.php @@ -289,9 +289,14 @@ public function storeParticipant(NewParticipantRequest $request) ->participant($participant) ->package($package) ->existing(false); - $toPay = $payment->getTotalAmount(); $iDeal = $request->iDeal; + if ($payment->isFree()) { + $camp->participants()->updateExistingPivot($participant->id, [ + 'datum_betaling' => Carbon::now(), + ]); + } + // Send update to office committee Mail::send(new NewParticipantNotification( $participant, @@ -304,19 +309,19 @@ public function storeParticipant(NewParticipantRequest $request) $participant, $camp, $package, + $payment, $givenCourses, $password, - $toPay, $iDeal ) ); // If they want to pay with iDeal, set up the payment now - if ($iDeal === '1' && $toPay > 0) { + if ($iDeal === '1' && $payment->getTotalAmount() > 0) { $redirectUrl = Mollie::process($payment); return redirect($redirectUrl); } // Return closing view - return view('registration.participantStored', compact('participant', 'camp', 'toPay', 'incomeTable', 'package')); + return view('registration.participantStored', compact('participant', 'camp', 'incomeTable', 'package', 'payment')); } } diff --git a/app/Mail/participants/OnEventConfirmation.php b/app/Mail/participants/OnEventConfirmation.php index e2daf959..cb0a1a52 100644 --- a/app/Mail/participants/OnEventConfirmation.php +++ b/app/Mail/participants/OnEventConfirmation.php @@ -4,6 +4,7 @@ namespace App\Mail\participants; +use App\Helpers\Payment\EventPayment; use App\Models\Event; use App\Models\Participant; use Illuminate\Bus\Queueable; @@ -17,26 +18,26 @@ class OnEventConfirmation extends Mailable use SerializesModels; - public $participant; + public Participant $participant; - public $event; + public Event $event; - public $givenCourses; + public EventPayment $payment; - public $toPay; + public $givenCourses; public $iDeal; public $type; - public function __construct(Participant $participant, Event $event, $givenCourses, $toPay, $iDeal, $type) + public function __construct(Participant $participant, Event $event, EventPayment $payment, $givenCourses, $iDeal, $type) { $this->participant = $participant; $this->event = $event; $this->givenCourses = $givenCourses; - $this->toPay = $toPay; $this->iDeal = $iDeal; $this->type = $type; + $this->payment = $payment; } public function build() diff --git a/app/Mail/participants/ParticipantRegistrationConfirmation.php b/app/Mail/participants/ParticipantRegistrationConfirmation.php index e632bd01..5a009dae 100644 --- a/app/Mail/participants/ParticipantRegistrationConfirmation.php +++ b/app/Mail/participants/ParticipantRegistrationConfirmation.php @@ -4,6 +4,7 @@ namespace App\Mail\participants; +use App\Helpers\Payment\EventPayment; use App\Models\Event; use App\Models\EventPackage; use App\Models\Participant; @@ -18,29 +19,29 @@ class ParticipantRegistrationConfirmation extends Mailable use SerializesModels; - public $package; + public ?EventPackage $package; - public $participant; + public Participant $participant; - public $event; + public Event $event; + + public EventPayment $payment; public $givenCourses; public $password; - public $toPay; - public $iDeal; - public function __construct(Participant $participant, Event $event, ?EventPackage $package, $givenCourses, $password, $toPay, $iDeal) + public function __construct(Participant $participant, Event $event, ?EventPackage $package, EventPayment $payment, $givenCourses, $password, $iDeal) { $this->participant = $participant; $this->event = $event; $this->givenCourses = $givenCourses; $this->password = $password; - $this->toPay = $toPay; $this->iDeal = $iDeal; $this->package = $package; + $this->payment = $payment; } public function build() diff --git a/app/Models/Participant.php b/app/Models/Participant.php index 74a41e80..19170c89 100644 --- a/app/Models/Participant.php +++ b/app/Models/Participant.php @@ -13,16 +13,16 @@ class Participant extends Model { public const INCOME_DESCRIPTION_TABLE = [ 0 => 'Meer dan € 3400 (geen korting)', - 1 => 'Tussen € 2400 en € 3400 (korting: 25%)', + 1 => 'Tussen € 2400 en € 3400 (korting: 20%)', 2 => 'Tussen € 1600 en € 2400 (korting: 40%)', - 3 => 'Minder dan € 1600 (korting: 60%)', + 3 => 'Minder dan € 1600 (korting: 100%)', ]; public const INCOME_DISCOUNT_TABLE = [ 0 => 0, - 1 => 25, + 1 => 20, 2 => 40, - 3 => 60, + 3 => 100, ]; public const INFORMATION_CHANNEL_DESCRIPTION_TABLE = [ diff --git a/resources/views/emails/participants/onEventConfirmation.blade.php b/resources/views/emails/participants/onEventConfirmation.blade.php index c8afa64d..29e3ff6e 100644 --- a/resources/views/emails/participants/onEventConfirmation.blade.php +++ b/resources/views/emails/participants/onEventConfirmation.blade.php @@ -18,7 +18,12 @@ Onderaan dit bericht kunt u zien voor welke vakken u uw kind heeft opgegeven.
-@if ($toPay == 0) +@if ($payment->isFree()) ++ Uw kind staat op dit moment voorlopig ingeschreven voor het kamp. + Er is geen betaling nodig voor deze inschrijving. +
+@elseif ($payment->isUndetermined())Uw kind staat op dit moment voorlopig ingeschreven voor het kamp. Om de inschrijving definitief te maken, dient u het kampgeld over te maken op onze rekening. Voor dit kamp is de prijs echter nog niet definitief vastgesteld. Zodra de prijs bekend is, ontvangt u daarover per e-mail bericht.
@@ -32,13 +37,14 @@ U heeft aangegeven het kampgeld direct via iDeal te betalen. Wanneer dit succesvol ontvangen is, ontvangt u een aparte bevestiging daarvan. Is er onverhoopt toch iets misgegaan, dan dient u het kampgeld zoals hieronder vermeld over te maken op onze rekening. Beschikbare plaatsen op een kamp worden vergeven op volgorde van betaling, dus wacht hier niet te lang mee. Uiterlijk twee weken nadat u het kampgeld heeft overgemaakt, ontvangt u per e-mail een bevestiging van de inschrijving. @endif - +
BETALINGSINFORMATIE
- Te betalen bedrag: € {{ $toPay }}
+ Te betalen bedrag: € {{ $payment->getTotalAmount() }}
Rekeningnummer: NL68 TRIO 0198 4197 83 t.n.v. Vereniging Anderwijs te Utrecht
Onder vermelding van: naam deelnemer + deze kampcode: {{ $event->code }}
Uw kind staat op dit moment voorlopig ingeschreven voor het kamp. Om de inschrijving definitief te maken, dient u het kampgeld over te maken op onze rekening. Voor dit kamp is de prijs echter nog niet definitief vastgesteld. Zodra het kampgeld bekend is, ontvangt u daarover per e-mail bericht.
+@elseif($payment->isFree()) ++ Uw kind staat op dit moment voorlopig ingeschreven voor het kamp. + Er is geen betaling nodig voor deze inschrijving. +
@else @if ($iDeal == 0)Uw kind staat op dit moment voorlopig ingeschreven voor het kamp. Om de inschrijving definitief te maken, dient u het kampgeld zoals hieronder vermeld over te maken op onze rekening. Beschikbare plaatsen op een - kamp worden vegeven op volgorde van betaling, dus wacht hier niet te lang mee. Uiterlijk twee weken nadat u + kamp worden vergeven op volgorde van betaling, dus wacht hier niet te lang mee. Uiterlijk twee weken nadat u het kampgeld heeft overgemaakt, ontvangt u per e-mail een bevestiging van de inschrijving.
@elseU heeft aangegeven het kampgeld direct via iDeal te betalen. Wanneer dit succesvol ontvangen is, ontvangt u een aparte bevestiging daarvan. Is er onverhoopt toch iets misgegaan, dan dient u het kampgeld zoals - hieronder vermeld over te maken op onze rekening. Beschikbare plaatsen op een kamp worden vegeven op + hieronder vermeld over te maken op onze rekening. Beschikbare plaatsen op een kamp worden vergeven op volgorde van betaling, dus wacht hier niet te lang mee. Uiterlijk twee weken nadat u het kampgeld heeft overgemaakt, ontvangt u per e-mail een bevestiging van de inschrijving.
@endif +
BETALINGSINFORMATIE
- Te betalen bedrag: € {{ $toPay }}
+ Te betalen bedrag: € {{ $payment->getTotalAmount() }}
Rekeningnummer: NL68 TRIO 0198 4197 83 t.n.v. Vereniging Anderwijs te Utrecht
Onder vermelding van: naam deelnemer + deze kampcode: {{ $event->code }}
- U heeft uw kind succesvol ingeschreven voor een Anderwijskamp. U ontvangt een automatische bevestigingsmail op het opgegeven emailadres. Om de inschrijving definitief te maken, dient u het kampgeld over te maken op onze rekening. - @if ($toPay == 0) - Voor dit kamp is de prijs echter nog niet definitief vastgesteld. Zodra dat is gebeurd, ontvangt u daarover per email bericht. - @else - De betalingsinformatie vindt u in de bevestigingsmail. Het is handig om dit zo snel mogelijk te doen, want plaatsing voor een kamp gebeurt op volgorde van betaling. + U heeft uw kind succesvol ingeschreven voor een Anderwijskamp. + U ontvangt een automatische bevestigingsmail op het opgegeven emailadres. + + @if (!$payment->isFree()) + Om de inschrijving definitief te maken, dient u het kampgeld over te maken op onze rekening. + @if ($payment->isUndetermined()) + Voor dit kamp is de prijs echter nog niet definitief vastgesteld. Zodra dat is gebeurd, ontvangt u daarover per email bericht. + @else + De betalingsinformatie vindt u in de bevestigingsmail. Het is handig om dit zo snel mogelijk te doen, want plaatsing voor een kamp gebeurt op volgorde van betaling. + @endif @endif