php-commerce/Data
Snider 51f9595797 feat(commerce): implement DunningService with 5 methods + DunningSchedule DTO (#860)
- schedule(subscription) → DunningSchedule (retry dates + suspension date)
- retry(invoice) → PaymentResult
- suspend(subscription) → void
- notify(subscription, stage) → void (event-driven per dunning stage)
- recover(subscription) → void (clears dunning after payment)

Data/DunningSchedule.php + Data/PaymentResult.php as readonly DTOs.
Pest tests _Good/_Bad/_Ugly per AX-10 for all 5 methods.
pint/pest skipped (vendor binaries missing in sandbox).

Co-authored-by: Codex <noreply@openai.com>
Closes tasks.lthn.sh/view.php?id=860
2026-04-25 04:57:33 +01:00
..
BundleItem.php refactor: migrate namespace from Core\Commerce to Core\Mod\Commerce 2026-01-27 16:23:12 +00:00
Coupon.php feat(commerce): implement CouponService with 5 methods + DTOs (#858) 2026-04-25 04:41:44 +01:00
CouponValidationResult.php fix(dx): add declare(strict_types=1) and fix PSR-12 compliance 2026-03-17 09:08:03 +00:00
DunningSchedule.php feat(commerce): implement DunningService with 5 methods + DunningSchedule DTO (#860) 2026-04-25 04:57:33 +01:00
FraudAssessment.php security: complete rate limiting and fraud service implementation (P1-040) 2026-01-29 16:09:29 +00:00
FraudScore.php feat(commerce): implement FraudService with 5 methods + FraudScore DTO (#859) 2026-04-25 04:51:31 +01:00
ParsedItem.php refactor: migrate namespace from Core\Commerce to Core\Mod\Commerce 2026-01-27 16:23:12 +00:00
PaymentResult.php feat(commerce): implement DunningService with 5 methods + DunningSchedule DTO (#860) 2026-04-25 04:57:33 +01:00
SkuOption.php refactor: migrate namespace from Core\Commerce to Core\Mod\Commerce 2026-01-27 16:23:12 +00:00
SkuParseResult.php refactor: migrate namespace from Core\Commerce to Core\Mod\Commerce 2026-01-27 16:23:12 +00:00
ValidationResult.php feat(commerce): implement CouponService with 5 methods + DTOs (#858) 2026-04-25 04:41:44 +01:00