feat: Added last_billed to server model & always charge first & fixed Charge Server command

This commit is contained in:
IceToast 2022-06-16 16:15:57 +02:00
parent d7c0c26f35
commit a26f6dd137
3 changed files with 23 additions and 14 deletions

View file

@ -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("<fg=blue>{$user->name}</> Current credits: <fg=green>{$user->credits}</> Credits to be removed: <fg=red>{$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();

View file

@ -11,6 +11,7 @@ use App\Models\Product;
use App\Models\Server;
use App\Models\Settings;
use App\Notifications\ServerCreationError;
use Carbon\Carbon;
use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Client\Response;
@ -151,6 +152,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
@ -165,14 +167,12 @@ class ServerController extends Controller
//update server with pterodactyl_id
$server->update([
'pterodactyl_id' => $serverAttributes['id'],
'identifier' => $serverAttributes['identifier']
'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'));
}

View file

@ -47,6 +47,7 @@ class Server extends Model
"identifier",
"product_id",
"pterodactyl_id",
"last_billed"
];
/**