Browse Source

feat: ✨ Added Server Cancelation route method and charging

IceToast 2 years ago
parent
commit
7fa9bf2062

+ 4 - 4
app/Console/Commands/ChargeServers.php

@@ -81,14 +81,14 @@ class ChargeServers extends Command
                     continue;
                     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 {
                     try {
-                        #suspend server
+                        // suspend server
                         $this->line("<fg=yellow>{$server->name}</> from user: <fg=blue>{$user->name}</> has been <fg=red>suspended!</>");
                         $this->line("<fg=yellow>{$server->name}</> from user: <fg=blue>{$user->name}</> has been <fg=red>suspended!</>");
                         $server->suspend();
                         $server->suspend();
 
 
-                        #add user to notify list
+                        // add user to notify list
                         if (!in_array($user, $this->usersToNotify)) {
                         if (!in_array($user, $this->usersToNotify)) {
                             array_push($this->usersToNotify, $user);
                             array_push($this->usersToNotify, $user);
                         }
                         }

+ 19 - 1
app/Http/Controllers/Admin/ServerController.php

@@ -133,7 +133,25 @@ class ServerController extends Controller
     }
     }
 
 
     /**
     /**
-     * @param  Server  $server
+     * 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
      * @return RedirectResponse
      */
      */
     public function toggleSuspended(Server $server)
     public function toggleSuspended(Server $server)

+ 15 - 1
app/Http/Controllers/ServerController.php

@@ -246,7 +246,21 @@ class ServerController extends Controller
 
 
             return redirect()->route('servers.index')->with('success', __('Server removed'));
             return redirect()->route('servers.index')->with('success', __('Server removed'));
         } catch (Exception $e) {
         } 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() . '"');
         }
         }
     }
     }
 
 

+ 2 - 1
app/Models/Server.php

@@ -54,7 +54,8 @@ class Server extends Model
         "identifier",
         "identifier",
         "product_id",
         "product_id",
         "pterodactyl_id",
         "pterodactyl_id",
-        "last_billed"
+        "last_billed",
+        "cancelled"
     ];
     ];
 
 
     /**
     /**

+ 2 - 2
resources/views/servers/index.blade.php

@@ -219,8 +219,8 @@
             }).then((result) => {
             }).then((result) => {
                 if (result.value) {
                 if (result.value) {
                     // Delete server
                     // Delete server
-                    fetch("{{ route('servers.destroy', '') }}" + '/' + serverId, {
-                        method: 'DELETE',
+                    fetch("{{ route('servers.cancel', '') }}" + '/' + serverId, {
+                        method: 'PATCH',
                         headers: {
                         headers: {
                             'X-CSRF-TOKEN': '{{ csrf_token() }}'
                             'X-CSRF-TOKEN': '{{ csrf_token() }}'
                         }
                         }

+ 2 - 0
routes/web.php

@@ -72,6 +72,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () {
     //normal routes
     //normal routes
     Route::get('notifications/readAll', [NotificationController::class, 'readAll'])->name('notifications.readAll');
     Route::get('notifications/readAll', [NotificationController::class, 'readAll'])->name('notifications.readAll');
     Route::resource('notifications', NotificationController::class);
     Route::resource('notifications', NotificationController::class);
+    Route::patch('/servers/cancel/{server}', [ServerController::class, 'cancel'])->name('servers.cancel');
     Route::resource('servers', ServerController::class);
     Route::resource('servers', ServerController::class);
     if (config('SETTINGS::SYSTEM:ENABLE_UPGRADE')) {
     if (config('SETTINGS::SYSTEM:ENABLE_UPGRADE')) {
         Route::post('servers/{server}/upgrade', [ServerController::class, 'upgrade'])->name('servers.upgrade');
         Route::post('servers/{server}/upgrade', [ServerController::class, 'upgrade'])->name('servers.upgrade');
@@ -140,6 +141,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () {
         //servers
         //servers
         Route::get('servers/datatable', [AdminServerController::class, 'datatable'])->name('servers.datatable');
         Route::get('servers/datatable', [AdminServerController::class, 'datatable'])->name('servers.datatable');
         Route::post('servers/togglesuspend/{server}', [AdminServerController::class, 'toggleSuspended'])->name('servers.togglesuspend');
         Route::post('servers/togglesuspend/{server}', [AdminServerController::class, 'toggleSuspended'])->name('servers.togglesuspend');
+        Route::patch('/servers/cancel/{server}', [AdminServerController::class, 'cancel'])->name('servers.cancel');
         Route::get('servers/sync', [AdminServerController::class, 'syncServers'])->name('servers.sync');
         Route::get('servers/sync', [AdminServerController::class, 'syncServers'])->name('servers.sync');
         Route::resource('servers', AdminServerController::class);
         Route::resource('servers', AdminServerController::class);