feat: improved promotional and purchase vouchers

This commit is contained in:
Björn Fromme
2025-11-21 12:43:51 +01:00
parent aaa7e9f4c3
commit 9d28d2f102
15 changed files with 357 additions and 137 deletions
+9
View File
@@ -127,6 +127,15 @@ class ParticipantDto
)]
public ?string $purchaseVoucherCode = null;
/**
* Flag indicating if the purchase voucher is a goodwill (Kulanz) voucher.
*
* Goodwill vouchers are treated as promotional vouchers in BPN XML
* (sent as <aktionscode> per participant, not in <gutscheine> collection).
* Set by ParticipantPurchaseVoucherFieldHandler during form processing.
*/
public bool $hasGoodwillVoucher = false;
/**
* Promo voucher code.
* Applied per participant in booking payload as <aktionscode>.
+3
View File
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Form\Model;
use App\Validator\Constraints as AppAssert;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
@@ -15,6 +16,8 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
* the participant being edited and the full booking context needed for
* cross-participant validation.
*/
#[AppAssert\PurchaseVoucher(groups: ['booking_create', 'booking_edit'])]
#[AppAssert\PromoVoucher(groups: ['booking_create', 'booking_edit'])]
class ParticipantEditDto
{
public function __construct(