value); } /** * Gehört der gespeicherte Katalog zum Konto des aktiven Modus? * * „Noch nie abgeglichen" (null) ist hier bewusst KEINE Übereinstimmung: eine * Installation, in der IDs liegen, über deren Herkunft nichts festgehalten * ist, kann nicht behaupten, sie gehörten zum aktiven Konto. Die Migration, * die die Plätze einführt, trägt für den einen Fall nach, den sie belegen * kann (der vorhandene Schlüssel ist der einzige, mit dem je etwas angelegt * worden sein kann). */ public static function matchesActiveMode(): bool { return self::recorded() === OperatingMode::current(); } /** * Liegt überhaupt eine Stripe-Objekt-ID in der Datenbank? * * Alle vier Orte, an denen der Abgleich etwas hinterlässt — auch die zwei * Register, weil PlanPrices::inStep() für den Netto-Preis eines * Reverse-Charge-Kunden ALLEIN das Register fragt: eine geleerte Spalte in * `plan_prices` ohne gelöschte Registerzeile ließe genau diese Hälfte des * Katalogs still auf das alte Konto zeigen. */ public static function hasStoredObjects(): bool { return PlanFamily::query()->whereNotNull('stripe_product_id')->exists() || PlanPrice::query()->whereNotNull('stripe_price_id')->exists() || StripePlanPrice::query()->exists() || StripeAddonPrice::query()->exists(); } }