Refactor whole PartnerController
This commit is contained in:
parent
e90479e452
commit
eeed88aba8
|
@ -1,7 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
use App\Models\PartnerDiscount;
|
use App\Models\PartnerDiscount;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
@ -40,6 +41,10 @@ class PartnerController extends Controller
|
||||||
'registered_user_discount' => 'required|integer|max:100|min:0',
|
'registered_user_discount' => 'required|integer|max:100|min:0',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if(PartnerDiscount::where("user_id",$request->user_id)->exists()){
|
||||||
|
return redirect()->route('admin.partners.index')->with('error', __('Partner already exists'));
|
||||||
|
}
|
||||||
|
|
||||||
PartnerDiscount::create($request->all());
|
PartnerDiscount::create($request->all());
|
||||||
|
|
||||||
return redirect()->route('admin.partners.index')->with('success', __('partner has been created!'));
|
return redirect()->route('admin.partners.index')->with('success', __('partner has been created!'));
|
||||||
|
@ -48,10 +53,10 @@ class PartnerController extends Controller
|
||||||
/**
|
/**
|
||||||
* Display the specified resource.
|
* Display the specified resource.
|
||||||
*
|
*
|
||||||
* @param Voucher $voucher
|
* @param Partner $voucher
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function show(Voucher $voucher)
|
public function show(Partner $voucher)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
@ -59,7 +64,7 @@ class PartnerController extends Controller
|
||||||
/**
|
/**
|
||||||
* Show the form for editing the specified resource.
|
* Show the form for editing the specified resource.
|
||||||
*
|
*
|
||||||
* @param Voucher $voucher
|
* @param Partner $voucher
|
||||||
* @return Application|Factory|View
|
* @return Application|Factory|View
|
||||||
*/
|
*/
|
||||||
public function edit(PartnerDiscount $partner)
|
public function edit(PartnerDiscount $partner)
|
||||||
|
@ -75,7 +80,7 @@ class PartnerController extends Controller
|
||||||
* Update the specified resource in storage.
|
* Update the specified resource in storage.
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @param Voucher $voucher
|
* @param Partner $voucher
|
||||||
* @return RedirectResponse
|
* @return RedirectResponse
|
||||||
*/
|
*/
|
||||||
public function update(Request $request, PartnerDiscount $partner)
|
public function update(Request $request, PartnerDiscount $partner)
|
||||||
|
@ -95,7 +100,7 @@ class PartnerController extends Controller
|
||||||
/**
|
/**
|
||||||
* Remove the specified resource from storage.
|
* Remove the specified resource from storage.
|
||||||
*
|
*
|
||||||
* @param Voucher $voucher
|
* @param Partner $partner
|
||||||
* @return RedirectResponse
|
* @return RedirectResponse
|
||||||
*/
|
*/
|
||||||
public function destroy(PartnerDiscount $partner)
|
public function destroy(PartnerDiscount $partner)
|
||||||
|
@ -105,81 +110,7 @@ class PartnerController extends Controller
|
||||||
return redirect()->back()->with('success', __('partner has been removed!'));
|
return redirect()->back()->with('success', __('partner has been removed!'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function users(Voucher $voucher)
|
|
||||||
{
|
|
||||||
return view('admin.vouchers.users', [
|
|
||||||
'voucher' => $voucher,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Request $request
|
|
||||||
* @return JsonResponse
|
|
||||||
*
|
|
||||||
* @throws ValidationException
|
|
||||||
*/
|
|
||||||
public function redeem(Request $request)
|
|
||||||
{
|
|
||||||
//general validations
|
|
||||||
$request->validate([
|
|
||||||
'code' => 'required|exists:vouchers,code',
|
|
||||||
]);
|
|
||||||
|
|
||||||
//get voucher by code
|
|
||||||
$voucher = Voucher::where('code', '=', $request->input('code'))->firstOrFail();
|
|
||||||
|
|
||||||
//extra validations
|
|
||||||
if ($voucher->getStatus() == 'USES_LIMIT_REACHED') {
|
|
||||||
throw ValidationException::withMessages([
|
|
||||||
'code' => __('This voucher has reached the maximum amount of uses'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($voucher->getStatus() == 'EXPIRED') {
|
|
||||||
throw ValidationException::withMessages([
|
|
||||||
'code' => __('This voucher has expired'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! $request->user()->vouchers()->where('id', '=', $voucher->id)->get()->isEmpty()) {
|
|
||||||
throw ValidationException::withMessages([
|
|
||||||
'code' => __('You already redeemed this voucher code'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($request->user()->credits + $voucher->credits >= 99999999) {
|
|
||||||
throw ValidationException::withMessages([
|
|
||||||
'code' => "You can't redeem this voucher because you would exceed the limit of ".CREDITS_DISPLAY_NAME,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
//redeem voucher
|
|
||||||
$voucher->redeem($request->user());
|
|
||||||
|
|
||||||
event(new UserUpdateCreditsEvent($request->user()));
|
|
||||||
|
|
||||||
return response()->json([
|
|
||||||
'success' => "{$voucher->credits} ".CREDITS_DISPLAY_NAME.' '.__('have been added to your balance!'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function usersDataTable(Voucher $voucher)
|
|
||||||
{
|
|
||||||
$users = $voucher->users();
|
|
||||||
|
|
||||||
return datatables($users)
|
|
||||||
->editColumn('name', function (User $user) {
|
|
||||||
return '<a class="text-info" target="_blank" href="'.route('admin.users.show', $user->id).'">'.$user->name.'</a>';
|
|
||||||
})
|
|
||||||
->addColumn('credits', function (User $user) {
|
|
||||||
return '<i class="fas fa-coins mr-2"></i> '.$user->credits();
|
|
||||||
})
|
|
||||||
->addColumn('last_seen', function (User $user) {
|
|
||||||
return $user->last_seen ? $user->last_seen->diffForHumans() : '';
|
|
||||||
})
|
|
||||||
->rawColumns(['name', 'credits', 'last_seen'])
|
|
||||||
->make();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function dataTable()
|
public function dataTable()
|
||||||
{
|
{
|
|
@ -10,6 +10,7 @@ use App\Http\Controllers\Admin\ApplicationApiController;
|
||||||
use App\Http\Controllers\Admin\InvoiceController;
|
use App\Http\Controllers\Admin\InvoiceController;
|
||||||
use App\Http\Controllers\Admin\LegalController;
|
use App\Http\Controllers\Admin\LegalController;
|
||||||
use App\Http\Controllers\Admin\OverViewController;
|
use App\Http\Controllers\Admin\OverViewController;
|
||||||
|
use App\Http\Controllers\Admin\PartnerController;
|
||||||
use App\Http\Controllers\Admin\PaymentController;
|
use App\Http\Controllers\Admin\PaymentController;
|
||||||
use App\Http\Controllers\Admin\ProductController;
|
use App\Http\Controllers\Admin\ProductController;
|
||||||
use App\Http\Controllers\Admin\ServerController as AdminServerController;
|
use App\Http\Controllers\Admin\ServerController as AdminServerController;
|
||||||
|
@ -22,7 +23,6 @@ use App\Http\Controllers\Auth\SocialiteController;
|
||||||
use App\Http\Controllers\HomeController;
|
use App\Http\Controllers\HomeController;
|
||||||
use App\Http\Controllers\Moderation\TicketsController as ModTicketsController;
|
use App\Http\Controllers\Moderation\TicketsController as ModTicketsController;
|
||||||
use App\Http\Controllers\NotificationController;
|
use App\Http\Controllers\NotificationController;
|
||||||
use App\Http\Controllers\PartnerController;
|
|
||||||
use App\Http\Controllers\ProductController as FrontProductController;
|
use App\Http\Controllers\ProductController as FrontProductController;
|
||||||
use App\Http\Controllers\ProfileController;
|
use App\Http\Controllers\ProfileController;
|
||||||
use App\Http\Controllers\ServerController;
|
use App\Http\Controllers\ServerController;
|
||||||
|
|
|
@ -6,12 +6,12 @@
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<h1>{{__('Vouchers')}}</h1>
|
<h1>{{__('Partner')}}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<ol class="breadcrumb float-sm-right">
|
<ol class="breadcrumb float-sm-right">
|
||||||
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
|
||||||
<li class="breadcrumb-item"><a href="{{route('admin.partners.index')}}">{{__('Vouchers')}}</a>
|
<li class="breadcrumb-item"><a href="{{route('admin.partners.index')}}">{{__('Partner')}}</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="breadcrumb-item"><a class="text-muted"
|
<li class="breadcrumb-item"><a class="text-muted"
|
||||||
href="{{route('admin.partners.create')}}">{{__('Create')}}</a>
|
href="{{route('admin.partners.create')}}">{{__('Create')}}</a>
|
||||||
|
@ -40,19 +40,14 @@
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="user_id">{{__('User')}}</label>
|
|
||||||
<select id="user_id" style="width:100%"
|
<div class="custom-control mb-3 p-0">
|
||||||
class="custom-select @error('user') is-invalid @enderror" name="user_id" autocomplete="off">
|
<label for="user_id">{{ __('User') }}:
|
||||||
@foreach($users as $user)
|
</label>
|
||||||
<option @if($partners->contains('user_id' , $user->id)) disabled @endif
|
<select id="user_id" style="width:100%" class="custom-select" name="user_id" required
|
||||||
value="{{$user->id}}">{{$user->name}} ({{$user->email}})</option>
|
autocomplete="off" @error('user_id') is-invalid @enderror>
|
||||||
@endforeach
|
</select>
|
||||||
</select>
|
|
||||||
@error('user')
|
|
||||||
<div class="text-danger">
|
|
||||||
{{$message}}
|
|
||||||
</div>
|
</div>
|
||||||
@enderror
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -143,5 +138,75 @@
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script type="application/javascript">
|
||||||
|
function initUserIdSelect(data) {
|
||||||
|
function escapeHtml(str) {
|
||||||
|
var div = document.createElement('div');
|
||||||
|
div.appendChild(document.createTextNode(str));
|
||||||
|
return div.innerHTML;
|
||||||
|
}
|
||||||
|
|
||||||
@endsection
|
$('#user_id').select2({
|
||||||
|
ajax: {
|
||||||
|
url: '/admin/users.json',
|
||||||
|
dataType: 'json',
|
||||||
|
delay: 250,
|
||||||
|
|
||||||
|
data: function (params) {
|
||||||
|
return {
|
||||||
|
filter: { name: params.term },
|
||||||
|
page: params.page,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
processResults: function (data, params) {
|
||||||
|
return { results: data };
|
||||||
|
},
|
||||||
|
|
||||||
|
cache: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
data: data,
|
||||||
|
escapeMarkup: function (markup) { return markup; },
|
||||||
|
minimumInputLength: 2,
|
||||||
|
templateResult: function (data) {
|
||||||
|
if (data.loading) return escapeHtml(data.text);
|
||||||
|
|
||||||
|
return '<div class="user-block"> \
|
||||||
|
<img class="img-circle img-bordered-xs" src="' + escapeHtml(data.avatarUrl) + '?s=120" alt="User Image"> \
|
||||||
|
<span class="username"> \
|
||||||
|
<a href="#">' + escapeHtml(data.name) +'</a> \
|
||||||
|
</span> \
|
||||||
|
<span class="description"><strong>' + escapeHtml(data.email) + '</strong>' + '</span> \
|
||||||
|
</div>';
|
||||||
|
},
|
||||||
|
templateSelection: function (data) {
|
||||||
|
return '<div> \
|
||||||
|
<span> \
|
||||||
|
<img class="img-rounded img-bordered-xs" src="' + escapeHtml(data.avatarUrl) + '?s=120" style="height:28px;margin-top:-4px;" alt="User Image"> \
|
||||||
|
</span> \
|
||||||
|
<span style="padding-left:5px;"> \
|
||||||
|
' + escapeHtml(data.name) + ' (<strong>' + escapeHtml(data.email) + '</strong>) \
|
||||||
|
</span> \
|
||||||
|
</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
@if (old('user_id'))
|
||||||
|
$.ajax({
|
||||||
|
url: '/admin/users.json?user_id={{ old('user_id') }}',
|
||||||
|
dataType: 'json',
|
||||||
|
}).then(function (data) {
|
||||||
|
initUserIdSelect([ data ]);
|
||||||
|
});
|
||||||
|
@else
|
||||||
|
initUserIdSelect();
|
||||||
|
@endif
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
Loading…
Reference in a new issue