Refactor whole PartnerController
This commit is contained in:
parent
e90479e452
commit
eeed88aba8
|
@ -1,7 +1,8 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\PartnerDiscount;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
|
@ -40,6 +41,10 @@ class PartnerController extends Controller
|
|||
'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());
|
||||
|
||||
return redirect()->route('admin.partners.index')->with('success', __('partner has been created!'));
|
||||
|
@ -48,10 +53,10 @@ class PartnerController extends Controller
|
|||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param Voucher $voucher
|
||||
* @param Partner $voucher
|
||||
* @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.
|
||||
*
|
||||
* @param Voucher $voucher
|
||||
* @param Partner $voucher
|
||||
* @return Application|Factory|View
|
||||
*/
|
||||
public function edit(PartnerDiscount $partner)
|
||||
|
@ -75,7 +80,7 @@ class PartnerController extends Controller
|
|||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Voucher $voucher
|
||||
* @param Partner $voucher
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
public function update(Request $request, PartnerDiscount $partner)
|
||||
|
@ -95,7 +100,7 @@ class PartnerController extends Controller
|
|||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param Voucher $voucher
|
||||
* @param Partner $partner
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
public function destroy(PartnerDiscount $partner)
|
||||
|
@ -105,81 +110,7 @@ class PartnerController extends Controller
|
|||
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()
|
||||
{
|
|
@ -10,6 +10,7 @@ use App\Http\Controllers\Admin\ApplicationApiController;
|
|||
use App\Http\Controllers\Admin\InvoiceController;
|
||||
use App\Http\Controllers\Admin\LegalController;
|
||||
use App\Http\Controllers\Admin\OverViewController;
|
||||
use App\Http\Controllers\Admin\PartnerController;
|
||||
use App\Http\Controllers\Admin\PaymentController;
|
||||
use App\Http\Controllers\Admin\ProductController;
|
||||
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\Moderation\TicketsController as ModTicketsController;
|
||||
use App\Http\Controllers\NotificationController;
|
||||
use App\Http\Controllers\PartnerController;
|
||||
use App\Http\Controllers\ProductController as FrontProductController;
|
||||
use App\Http\Controllers\ProfileController;
|
||||
use App\Http\Controllers\ServerController;
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{__('Vouchers')}}</h1>
|
||||
<h1>{{__('Partner')}}</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<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 class="breadcrumb-item"><a class="text-muted"
|
||||
href="{{route('admin.partners.create')}}">{{__('Create')}}</a>
|
||||
|
@ -40,19 +40,14 @@
|
|||
@csrf
|
||||
|
||||
<div class="form-group">
|
||||
<label for="user_id">{{__('User')}}</label>
|
||||
<select id="user_id" style="width:100%"
|
||||
class="custom-select @error('user') is-invalid @enderror" name="user_id" autocomplete="off">
|
||||
@foreach($users as $user)
|
||||
<option @if($partners->contains('user_id' , $user->id)) disabled @endif
|
||||
value="{{$user->id}}">{{$user->name}} ({{$user->email}})</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('user')
|
||||
<div class="text-danger">
|
||||
{{$message}}
|
||||
|
||||
<div class="custom-control mb-3 p-0">
|
||||
<label for="user_id">{{ __('User') }}:
|
||||
</label>
|
||||
<select id="user_id" style="width:100%" class="custom-select" name="user_id" required
|
||||
autocomplete="off" @error('user_id') is-invalid @enderror>
|
||||
</select>
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
|
@ -143,5 +138,75 @@
|
|||
})
|
||||
</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