diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 769909c3..2a5d8a5a 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -81,14 +81,14 @@ class ChargeServers extends Command continue; } - // check if user has enough credits to charge the server - if ($user->credits < $product->price) { + // check if the server is canceled or if user has enough credits to charge the server or + if ( $server->cancelled || $user->credits < $product->price) { try { - #suspend server + // suspend server $this->line("{$server->name} from user: {$user->name} has been suspended!"); $server->suspend(); - #add user to notify list + // add user to notify list if (!in_array($user, $this->usersToNotify)) { array_push($this->usersToNotify, $user); } diff --git a/app/Http/Controllers/Admin/ServerController.php b/app/Http/Controllers/Admin/ServerController.php index 5ebc29bc..594d7a0f 100644 --- a/app/Http/Controllers/Admin/ServerController.php +++ b/app/Http/Controllers/Admin/ServerController.php @@ -108,6 +108,24 @@ class ServerController extends Controller } } + /** + * Cancel the Server billing cycle. + * + * @param Server $server + * @return RedirectResponse|Response + */ + public function cancel (Server $server) + { + try { + error_log($server->update([ + 'cancelled' => now(), + ])); + return redirect()->route('servers.index')->with('success', __('Server cancelled')); + } catch (Exception $e) { + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to cancel the server"') . $e->getMessage() . '"'); + } + } + /** * @param Server $server * @return RedirectResponse diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 45d72569..ee9c47b7 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -210,7 +210,21 @@ class ServerController extends Controller $server->delete(); return redirect()->route('servers.index')->with('success', __('Server removed')); } catch (Exception $e) { - return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to remove a resource "') . $e->getMessage() . '"'); + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to delete the server"') . $e->getMessage() . '"'); + } + } + + /** Cancel Server */ + public function cancel (Server $server) + { + try { + error_log($server->update([ + 'cancelled' => now(), + ])); + + return redirect()->route('servers.index')->with('success', __('Server cancelled')); + } catch (Exception $e) { + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to cancel the server"') . $e->getMessage() . '"'); } } } diff --git a/app/Models/Server.php b/app/Models/Server.php index fa6d17ca..5f87d488 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -48,7 +48,8 @@ class Server extends Model "identifier", "product_id", "pterodactyl_id", - "last_billed" + "last_billed", + "cancelled" ]; /** diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 9c9d81b0..e96b46b1 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -219,8 +219,8 @@ }).then((result) => { if (result.value) { // Delete server - fetch("{{ route('servers.destroy', '') }}" + '/' + serverId, { - method: 'DELETE', + fetch("{{ route('servers.cancel', '') }}" + '/' + serverId, { + method: 'PATCH', headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' } diff --git a/routes/web.php b/routes/web.php index 168549f7..8755eb32 100644 --- a/routes/web.php +++ b/routes/web.php @@ -60,6 +60,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () { #normal routes Route::get('notifications/readAll',[NotificationController::class,'readAll'])->name('notifications.readAll'); Route::resource('notifications', NotificationController::class); + Route::patch('/servers/cancel/{server}', [ServerController::class, 'cancel'])->name('servers.cancel'); Route::resource('servers', ServerController::class); Route::resource('profile', ProfileController::class); Route::resource('store', StoreController::class); @@ -112,6 +113,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () { #servers Route::get('servers/datatable', [AdminServerController::class, 'datatable'])->name('servers.datatable'); Route::post('servers/togglesuspend/{server}', [AdminServerController::class, 'toggleSuspended'])->name('servers.togglesuspend'); + Route::patch('/servers/cancel/{server}', [AdminServerController::class, 'cancel'])->name('servers.cancel'); Route::resource('servers', AdminServerController::class); #products