Add debt system: track refunds/disputes, redirect payments until cleared

- Add nullable debt field to User entity with addDebt/reduceDebt helpers
- On refund webhook: add refunded amount to organizer debt
- On dispute webhook (charge.dispute.created): add disputed amount to debt
- OrderController: if organizer has debt > 0, payment goes to main Stripe
  account instead of connected account, debt reduced on payment success
- Display debt amount on organizer dashboard with warning message
- Add dispute notification email template
- Migration for debt column on user table

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-03-25 10:15:01 +01:00
parent 972e4b63d2
commit 531c7da051
7 changed files with 222 additions and 32 deletions

View File

@@ -211,6 +211,32 @@ class UserTest extends TestCase
self::assertSame('suspendu', $user->getBillingState());
}
public function testDebtFields(): void
{
$user = new User();
self::assertNull($user->getDebt());
$result = $user->setDebt(5000);
self::assertSame($user, $result);
self::assertSame(5000, $user->getDebt());
$user->addDebt(2000);
self::assertSame(7000, $user->getDebt());
$user->reduceDebt(3000);
self::assertSame(4000, $user->getDebt());
$user->reduceDebt(10000);
self::assertSame(0, $user->getDebt());
$user->setDebt(null);
self::assertNull($user->getDebt());
$user->addDebt(1000);
self::assertSame(1000, $user->getDebt());
}
public function testEmailVerificationFields(): void
{
$user = new User();