Some love to payments

Fixed a bug with the new payment changes
Improved the payments table and changes
This commit is contained in:
AVMG20 2021-06-23 11:28:57 +02:00
parent 2a42ac71b5
commit b445cf7003
9 changed files with 154 additions and 47 deletions

View file

@ -6,11 +6,14 @@ use App\Http\Controllers\Controller;
use App\Models\Configuration;
use App\Models\Payment;
use App\Models\PaypalProduct;
use App\Models\Product;
use App\Models\User;
use App\Notifications\ConfirmPaymentNotification;
use Exception;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@ -154,7 +157,7 @@ class PaymentController extends Controller
'type' => 'Credits',
'status' => $response->result->status,
'amount' => $paypalProduct->quantity,
'price' => $paypalProduct->formatCurrency(),
'price' => $paypalProduct->price,
'payer' => json_encode($response->result->payer),
]);
@ -192,4 +195,26 @@ class PaymentController extends Controller
{
return redirect()->route('store.index')->with('success', 'Payment Canceled');
}
/**
* @return JsonResponse|mixed
* @throws Exception
*/
public function dataTable()
{
$query = Payment::with('user');
return datatables($query)
->editColumn('user', function (Payment $payment) {
return $payment->user->name;
})
->editColumn('price', function (Payment $payment) {
return $payment->formatCurrency();
})
->editColumn('created_at', function (Payment $payment) {
return $payment->created_at ? $payment->created_at->diffForHumans() : '';
})
->make();
}
}

View file

@ -6,6 +6,7 @@ use Hidehalo\Nanoid\Client;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use NumberFormatter;
use Spatie\Activitylog\Traits\LogsActivity;
class Payment extends Model
@ -19,21 +20,22 @@ class Payment extends Model
* @var string[]
*/
protected $fillable = [
'id',
'user_id',
'payment_id',
'payer_id',
'payer',
'status',
'type',
'amount',
'price',
'id',
'user_id',
'payment_id',
'payer_id',
'payer',
'status',
'type',
'amount',
'price',
];
public static function boot() {
public static function boot()
{
parent::boot();
static::creating(function(Payment $payment) {
static::creating(function (Payment $payment) {
$client = new Client();
$payment->{$payment->getKeyName()} = $client->generateId($size = 8);
@ -43,12 +45,14 @@ class Payment extends Model
/**
* @return BelongsTo
*/
public function User(){
public function user()
{
return $this->belongsTo(User::class);
}
public function Price()
public function formatCurrency($locale = 'en_US')
{
return number_format($this->price, 2, '.', '');
$formatter = new NumberFormatter($locale, NumberFormatter::CURRENCY);
return $formatter->formatCurrency($this->price, $this->currency_code);
}
}

View file

@ -39,6 +39,10 @@ class PaypalProduct extends Model
});
}
/**
* @param string $locale
* @return string
*/
public function formatCurrency($locale = 'en_US')
{
$formatter = new NumberFormatter($locale, NumberFormatter::CURRENCY);

View file

@ -30,7 +30,8 @@ class PaymentFactory extends Factory
'type' => "Credits",
'status' => "Completed",
'amount' => $this->faker->numberBetween(10, 10000),
'price' => '€' . $this->faker->numerify('##.##'),
'price' => $this->faker->numerify('##.##'),
'currency_code' => ['EUR', 'USD'][rand(0,1)],
'payer' => '{}',
];
}

View file

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class UpdatePriceToPaymentsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('payments', function (Blueprint $table) {
$table->decimal('price')->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('payments', function (Blueprint $table) {
$table->string('price')->change()->nullable();;
});
}
}

View file

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddCurrencyCodeToPaymentsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('payments', function (Blueprint $table) {
$table->string('currency_code' , 3)->default('USD')->after('price');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('payments', function (Blueprint $table) {
$table->dropColumn('currency_code');
});
}
}

View file

@ -28,48 +28,55 @@
<div class="card-header">
<h5 class="card-title"><i class="fas fa-money-bill-wave mr-2"></i>Payments</h5>
</div>
<div class="card-body table-responsive">
<table class="table table-striped">
<div class="card-body table-responsive">
<table id="datatable" class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>User</th>
<th>Type</th>
<th>Amount</th>
<th>Price</th>
<th>Payment_ID</th>
<th>Payer_ID</th>
<th>Created at</th>
</tr>
<tr>
<th>ID</th>
<th>User</th>
<th>Type</th>
<th>Amount</th>
<th>Price</th>
<th>Payment_ID</th>
<th>Payer_ID</th>
<th>Created at</th>
</tr>
</thead>
<tbody>
@foreach($payments as $payment)
<tr>
<td>{{$payment->id}}</td>
<td>{{$payment->User->name}}</td>
<td>{{$payment->type}}</td>
<td><i class="fa fa-coins mr-2"></i>{{$payment->amount}}</td>
<td>{{$payment->Price()}}</td>
<td>{{$payment->payment_id}}</td>
<td>{{$payment->payer_id}}</td>
<td>{{$payment->created_at->diffForHumans()}}</td>
</tr>
@endforeach
</tbody>
</table>
<div class="float-right">
{!! $payments->links() !!}
</div>
</div>
</div>
</div>
</div>
<!-- END CUSTOM CONTENT -->
</div>
</section>
<!-- END CONTENT -->
<script>
document.addEventListener("DOMContentLoaded", function () {
$('#datatable').DataTable({
processing: true,
serverSide: true,
stateSave: true,
ajax: "{{route('admin.payments.datatable')}}",
columns: [
{data: 'id' , name : 'payments.id'},
{data: 'user', sortable: false},
{data: 'type'},
{data: 'amount'},
{data: 'price'},
{data: 'payment_id'},
{data: 'payer_id'},
{data: 'created_at'},
],
fnDrawCallback: function( oSettings ) {
$('[data-toggle="popover"]').popover();
}
});
});
</script>
@endsection

View file

@ -6,7 +6,7 @@ Your payment has been confirmed; Your credit balance has been updated.
___
### Payment ID: **{{$payment->id}}**
### Status: **{{$payment->status}}**
### Price: **{{$payment->price}}**
### Price: **{{$payment->formatCurrency()}}**
### Type: **{{$payment->type}}**
### Amount: **{{$payment->amount}}**
### Balance: **{{$payment->user->credits}}**

View file

@ -88,6 +88,7 @@ Route::middleware('auth')->group(function () {
'store' => 'paypalProduct',
]);
Route::get('payments/datatable', [PaymentController::class, 'datatable'])->name('payments.datatable');
Route::get('payments', [PaymentController::class, 'index'])->name('payments.index');
Route::get('nodes/datatable', [NodeController::class, 'datatable'])->name('nodes.datatable');
@ -101,6 +102,7 @@ Route::middleware('auth')->group(function () {
Route::get('configurations/datatable', [ConfigurationController::class, 'datatable'])->name('configurations.datatable');
Route::patch('configurations/updatevalue', [ConfigurationController::class, 'updatevalue'])->name('configurations.updatevalue');
Route::resource('configurations', ConfigurationController::class);
Route::resource('configurations', ConfigurationController::class);
Route::patch('settings/update/icons', [SettingsController::class , 'updateIcons'])->name('settings.update.icons');
Route::resource('settings', SettingsController::class)->only('index');