diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 678ab4b7..877cb8a5 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -4,7 +4,9 @@ namespace App\Console\Commands; use App\Models\Server; use App\Notifications\ServersSuspendedNotification; +use Carbon\Carbon; use Illuminate\Console\Command; +use Illuminate\Support\Facades\DB; class ChargeServers extends Command { @@ -45,7 +47,7 @@ class ChargeServers extends Command */ public function handle() { - Server::whereNull('suspended')->with('users', 'products')->chunk(10, function ($servers) { + Server::whereNull('suspended')->with('user', 'product')->chunk(10, function ($servers) { /** @var Server $server */ foreach ($servers as $server) { /** @var Product $product */ @@ -55,23 +57,29 @@ class ChargeServers extends Command $billing_period = $product->billing_period; + // check if server is due to be charged by comparing its last_billed date with the current date and the billing period $newBillingDate = null; switch($billing_period) { case 'monthly': - $newBillingDate = $server->last_billed->addMonth(); + $newBillingDate = Carbon::parse($server->last_billed)->addMonth(); break; case 'weekly': - $newBillingDate = $server->last_billed->addYear(); + $newBillingDate = Carbon::parse($server->last_billed)->addYear(); break; case 'daily': - $newBillingDate = $server->last_billed->addDay(); + $newBillingDate = Carbon::parse($server->last_billed)->addDay(); break; + case 'hourly': + $newBillingDate = Carbon::parse($server->last_billed)->addHour(); default: - $newBillingDate = $server->last_billed->addHour(); + $newBillingDate = Carbon::parse($server->last_billed)->addHour(); break; }; - if (!($newBillingDate <= now())) return; + + if (!($newBillingDate->isPast())) { + continue; + } // check if user has enough credits to charge the server if ($user->credits < $product->price) { @@ -94,8 +102,8 @@ class ChargeServers extends Command $this->line("{$user->name} Current credits: {$user->credits} Credits to be removed: {$product->price}"); $user->decrement('credits', $product->price); - // update server last_billed date - $server->last_billed = $newBillingDate; + // update server last_billed date in db + DB::table('servers')->where('id', $server->id)->update(['last_billed' => $newBillingDate]); } return $this->notifyUsers(); diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 656064c3..b066e77d 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -10,6 +10,7 @@ use App\Models\Node; use App\Models\Product; use App\Models\Server; use App\Notifications\ServerCreationError; +use Carbon\Carbon; use Exception; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Client\Response; @@ -180,6 +181,7 @@ class ServerController extends Controller $server = $request->user()->servers()->create([ 'name' => $request->input('name'), 'product_id' => $request->input('product'), + 'last_billed' => Carbon::now()->toDateTimeString(), ]); //get free allocation ID @@ -201,11 +203,8 @@ class ServerController extends Controller 'identifier' => $serverAttributes['identifier'], ]); - if (config('SETTINGS::SYSTEM:SERVER_CREATE_CHARGE_FIRST_HOUR', 'true') == 'true') { - if ($request->user()->credits >= $server->product->getHourlyPrice()) { - $request->user()->decrement('credits', $server->product->getHourlyPrice()); - } - } + // Charge first billing cycle + $request->user()->decrement('credits', $server->product->price); return redirect()->route('servers.index')->with('success', __('Server created')); } diff --git a/app/Models/Server.php b/app/Models/Server.php index 94365dd4..cf71f040 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -47,12 +47,13 @@ class Server extends Model * @var string[] */ protected $fillable = [ - 'name', - 'description', - 'suspended', - 'identifier', - 'product_id', - 'pterodactyl_id', + "name", + "description", + "suspended", + "identifier", + "product_id", + "pterodactyl_id", + "last_billed" ]; /**