reject($reason ?? self::rejectionReason()); } /** Demande transformée en campagne, obtenue par la vraie transition métier. */ public static function transformed(): CampaignRequest { return self::make()->updateStatusWhenTransformed(); } public static function applicant( string $firstname = 'Jane', string $lastname = 'Doe', string $email = 'jane.doe@example.com', ): Applicant { return new Applicant($firstname, $lastname, new Email($email)); // Email : À VÉRIFIER } public static function rejectionReason(string $reason = 'Not eligible'): RejectionReason { return new RejectionReason($reason); } public static function requestedCoupon( string $couponName = 'Coupon name', int $quantity = 1000, ?PrintRules $printRules = null, ): RequestedCoupon { return new RequestedCoupon( couponName: new CouponName($couponName), quantity: new RequestedCouponQuantity($quantity), // À VÉRIFIER diffusion: new Period(new \DateTime()->modify('+1 month'), new \DateTime()->modify('+2 months')), moneyAmount: new MoneyAmount(new Money(Currency::EUR, 100)), couponPicture: new CouponPicture( new PicturePath('files/product.jpg'), new PicturePath('files/thumbnail.jpg'), new PicturePath('files/mobile_thumbnail.jpg'), ), couponProcessingCodes: new ProcessingCodeArray([ new ProcessingCode('5425003944130', Country::FRANCE), ]), couponValidityInformations: new CouponValidityInformationArray([ new CouponValidityInformation('Lorem ipsum dolor sit amet consectetur.', Country::FRANCE), ]), couponLegalInformations: new CouponLegalInformationArray([ new CouponLegalInformation('Lorem ipsum dolor sit amet consectetur.', Country::FRANCE), ]), couponProducts: new CouponProductArray([new IncoCode(35784)]), printRules: $printRules, ); } }