fix(plans): prevent deletion of plans with active subscriptions
- Fix bulk delete and individual delete actions using before() hook with halt() - Add daily/weekly billing cycle options to plan resource and Polar provider - Enhance payment confirmation with dynamic polling and loading states - Add graceful handling for deleted plans in subscription display - Update Polar provider to support dynamic billing cycles
This commit is contained in:
@@ -690,4 +690,59 @@ class Subscription extends Model
|
||||
// Fallback to legacy monthly_billing
|
||||
return $this->plan && $this->plan->monthly_billing ? 30 : 365;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plan display name, handles deleted plans gracefully
|
||||
*/
|
||||
public function getPlanDisplayName(): string
|
||||
{
|
||||
if ($this->plan) {
|
||||
return $this->plan->name;
|
||||
}
|
||||
|
||||
// Check provider data for stored plan name
|
||||
if ($this->provider_data) {
|
||||
// Check for Polar plan name
|
||||
if (isset($this->provider_data['polar_subscription']['product']['name'])) {
|
||||
return $this->provider_data['polar_subscription']['product']['name'];
|
||||
}
|
||||
|
||||
// Check for stored plan details
|
||||
if (isset($this->provider_data['plan_details']['name'])) {
|
||||
return $this->provider_data['plan_details']['name'];
|
||||
}
|
||||
|
||||
// Check metadata
|
||||
if (isset($this->provider_data['plan_name'])) {
|
||||
return $this->provider_data['plan_name'];
|
||||
}
|
||||
}
|
||||
|
||||
return 'Deleted Plan';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plan price, handles deleted plans gracefully
|
||||
*/
|
||||
public function getPlanPrice(): float
|
||||
{
|
||||
if ($this->plan) {
|
||||
return $this->plan->price;
|
||||
}
|
||||
|
||||
// Check provider data for stored plan price
|
||||
if ($this->provider_data) {
|
||||
// Check for Polar subscription amount
|
||||
if (isset($this->provider_data['polar_subscription']['amount'])) {
|
||||
return $this->provider_data['polar_subscription']['amount'] / 100; // Convert from cents
|
||||
}
|
||||
|
||||
// Check for stored plan details
|
||||
if (isset($this->provider_data['plan_details']['price'])) {
|
||||
return (float) $this->provider_data['plan_details']['price'];
|
||||
}
|
||||
}
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user