Skip to content

Commit 0bc4771

Browse files
committed
refactor(HandlesSubscriptionInvoices, HasSubscriptionStatus): simplify payment status checks
1 parent 2d49c97 commit 0bc4771

File tree

472 files changed

+33938
-34070
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

472 files changed

+33938
-34070
lines changed

RELEASE_NOTES.md

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ This major release introduces significant architectural improvements to the subs
2424

2525
**Key Highlights:**
2626

27-
- 🔄 Subscription field restructuring (`ends_at``canceled_at`, `expires_at`)
27+
- 🔄 Subscription field restructuring (`ends_at``expires_at`)
2828
- 🛍️ Complete e-commerce shop system with checkout, cart, and order management
2929
- 💳 Unified payment processor with multi-gateway support
3030
- 🎟️ Enhanced coupon system with product-level and plan-level coupons
@@ -41,26 +41,9 @@ This major release introduces significant architectural improvements to the subs
4141

4242
#### Changed Columns:
4343

44-
- `subscriptions.ends_at``subscriptions.canceled_at`
44+
- `subscriptions.ends_at``subscriptions.expires_at`
4545
- Added `subscriptions.expires_at` for subscription expiration tracking
4646

47-
**Migration Required:**
48-
49-
```php
50-
// Existing data migration
51-
Schema::table('subscriptions', function (Blueprint $table) {
52-
// Rename ends_at to canceled_at
53-
if (Schema::hasColumn('subscriptions', 'ends_at')) {
54-
$table->renameColumn('ends_at', 'canceled_at');
55-
}
56-
57-
// Add expires_at column
58-
if (!Schema::hasColumn('subscriptions', 'expires_at')) {
59-
$table->timestamp('expires_at')->nullable()->after('canceled_at');
60-
}
61-
});
62-
```
63-
6447
**Code Changes Required:**
6548

6649
```php
@@ -76,9 +59,9 @@ $subscription->cancel() // sets canceled_at
7659

7760
**Affected Methods:**
7861

79-
- `Subscription::cancel()` - Now sets `canceled_at` instead of `ends_at`
80-
- `Subscription::resume()` - Checks `canceled_at` for grace period
81-
- `Subscription::onGracePeriod()` - Uses `expires_at` and `canceled_at`
62+
- `Subscription::cancel()` - Now sets `expires_at` instead of `ends_at`
63+
- `Subscription::resume()` - Checks `expires_at` for grace period
64+
- `Subscription::onGracePeriod()` - Uses `expires_at`
8265

8366
---
8467

config/coderstm.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,6 @@
129129
// When true, activating a late payer anchors from the open invoice's intended
130130
// start date (last unpaid period start) + plan duration; otherwise, uses today.
131131
'anchor_from_invoice' => (bool) env('SUBSCRIPTION_ANCHOR_FROM_INVOICE', true),
132-
133-
// Controls when plan downgrades take effect:
134-
// 'immediate' - Apply downgrade immediately upon request
135-
// 'next_renewal' - Schedule downgrade for next billing cycle (default)
136-
'downgrade_timing' => env('SUBSCRIPTION_DOWNGRADE_TIMING', 'next_renewal'),
137132
],
138133

139134
/*
Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
<?php //002cd
22
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
33
?>
4-
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
Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,62 @@
11
<?php //002cd
22
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
33
?>
4-
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

0 commit comments

Comments
 (0)