Allow vacancies to be deleted

This commit is contained in:
Miguel Nogueira 2021-10-25 05:45:45 +01:00
parent 596d0ab648
commit c657da951c
Signed by: miguel456
GPG Key ID: 2CF61B825316C6A0
7 changed files with 44 additions and 12 deletions

View File

@ -147,4 +147,14 @@ class VacancyController extends Controller
->back() ->back()
->with('success', __('Vacancy successfully updated.')); ->with('success', __('Vacancy successfully updated.'));
} }
public function delete(Request $request, Vacancy $vacancy)
{
$this->authorize('delete', $vacancy);
$vacancy->delete();
return redirect()
->back()
->with('success', __('Vacancy deleted. All applications associated with it are now gone too.'));
}
} }

View File

@ -21,7 +21,9 @@
namespace App\Observers; namespace App\Observers;
use App\Application;
use App\Vacancy; use App\Vacancy;
use Illuminate\Support\Facades\Log;
class VacancyObserver class VacancyObserver
{ {
@ -47,6 +49,16 @@ class VacancyObserver
// //
} }
public function deleting(Vacancy $vacancy)
{
foreach(Application::with('response.vacancy')->get() as $app) {
if ($app->response->vacancy->id == $vacancy->id)
{
$app->delete();
}
}
}
/** /**
* Handle the vacancy "deleted" event. * Handle the vacancy "deleted" event.
* *
@ -55,7 +67,7 @@ class VacancyObserver
*/ */
public function deleted(Vacancy $vacancy) public function deleted(Vacancy $vacancy)
{ {
// TODO: Handle deletion of children's data
} }
/** /**

View File

@ -85,7 +85,7 @@ class VacancyPolicy
*/ */
public function delete(User $user, Vacancy $vacancy) public function delete(User $user, Vacancy $vacancy)
{ {
// return $user->hasAnyRole('admin', 'hiringManager');
} }
/** /**

View File

@ -25,7 +25,9 @@ use App\Facades\Options;
use App\Application; use App\Application;
use App\Observers\ApplicationObserver; use App\Observers\ApplicationObserver;
use App\Observers\UserObserver; use App\Observers\UserObserver;
use App\Observers\VacancyObserver;
use App\User; use App\User;
use App\Vacancy;
use Illuminate\Pagination\Paginator; use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@ -59,8 +61,11 @@ class AppServiceProvider extends ServiceProvider
Schema::defaultStringLength(191); Schema::defaultStringLength(191);
Paginator::useBootstrap(); Paginator::useBootstrap();
// Register observers
User::observe(UserObserver::class); User::observe(UserObserver::class);
Application::observe(ApplicationObserver::class); Application::observe(ApplicationObserver::class);
Vacancy::observe(VacancyObserver::class);
$https = ($this->app->environment() != 'local'); $https = ($this->app->environment() != 'local');
$collect = true; $collect = true;

View File

@ -314,8 +314,8 @@ return [
'url' => '/hr/staff-members', 'url' => '/hr/staff-members',
'can' => 'admin.stafflist', 'can' => 'admin.stafflist',
], ],
[ // players who haven't been promoted yet [
'text' => 'm_reg_players', 'text' => 'Registered users',
'icon' => 'fas fa-fw fa-user-friends', 'icon' => 'fas fa-fw fa-user-friends',
'url' => '/hr/players', 'url' => '/hr/players',
'can' => 'admin.userlist', 'can' => 'admin.userlist',

View File

@ -33,7 +33,6 @@
@endforeach @endforeach
@endif @endif
@stop @stop
@section('content') @section('content')
@ -161,8 +160,6 @@
<tr> <tr>
<th>{{__('messages.contactlabel_name')}}</th> <th>{{__('messages.contactlabel_name')}}</th>
<th>{{__('messages.reusable.description')}}</th> <th>{{__('messages.reusable.description')}}</th>
<th>{{__('messages.vacancy.discord_roleid')}}</th>
<th>{{__('messages.vacancy.permission_group')}}</th>
<th>{{__('messages.vacancy.free_slots')}}</th> <th>{{__('messages.vacancy.free_slots')}}</th>
<th>{{__('messages.reusable.status')}}</th> <th>{{__('messages.reusable.status')}}</th>
<th>{{__('messages.reusable.created_at')}}</th> <th>{{__('messages.reusable.created_at')}}</th>
@ -178,8 +175,6 @@
<tr> <tr>
<td>{{$vacancy->vacancyName}}</td> <td>{{$vacancy->vacancyName}}</td>
<td>{{substr($vacancy->vacancyDescription, 0, 20)}}...</td> <td>{{substr($vacancy->vacancyDescription, 0, 20)}}...</td>
<td><span class="badge badge-success">{{$vacancy->discordRoleID}}</span></td>
<td><span class="badge badge-success">{{$vacancy->permissionGroupName}}</span></td>
<td>{{$vacancy->vacancyCount}}</td> <td>{{$vacancy->vacancyCount}}</td>
@if($vacancy->vacancyStatus == 'OPEN') @if($vacancy->vacancyStatus == 'OPEN')
<td><span class="badge badge-success">{{__('messages.open')}}</span></td> <td><span class="badge badge-success">{{__('messages.open')}}</span></td>
@ -189,14 +184,14 @@
<td>{{$vacancy->created_at}}</td> <td>{{$vacancy->created_at}}</td>
<td> <td>
<button type="button" class="btn btn-sm btn-warning" onclick="window.location.href='{{ route('editPosition', ['vacancy' => $vacancy->id]) }}'"><i class="fas fa-edit"></i></button> <button type="button" class="btn btn-sm btn-success" onclick="window.location.href='{{ route('editPosition', ['vacancy' => $vacancy->id]) }}'"><i class="fas fa-edit"></i></button>
@if ($vacancy->vacancyStatus == 'OPEN') @if ($vacancy->vacancyStatus == 'OPEN')
<form action="{{route('updatePositionAvailability', ['status' => 'close', 'vacancy' => $vacancy->id])}}" method="POST" id="closePosition" style="display: inline"> <form action="{{route('updatePositionAvailability', ['status' => 'close', 'vacancy' => $vacancy->id])}}" method="POST" id="closePosition" style="display: inline">
@csrf @csrf
@method('PATCH') @method('PATCH')
<button type="submit" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i></button> <button type="submit" class="btn btn-sm btn-warning"><i class="fa fa-lock"></i></button>
</form> </form>
@else @else
@ -204,11 +199,17 @@
<form action="{{route('updatePositionAvailability', ['status' => 'open', 'vacancy' => $vacancy->id])}}" method="POST" id="openPosition" style="display: inline"> <form action="{{route('updatePositionAvailability', ['status' => 'open', 'vacancy' => $vacancy->id])}}" method="POST" id="openPosition" style="display: inline">
@csrf @csrf
@method('PATCH') @method('PATCH')
<button type="submit" class="btn btn-sm btn-success"><i class="fa fa-check"></i></button> <button type="submit" class="btn btn-sm btn-warning"><i class="fa fa-unlock"></i></button>
</form> </form>
@endif @endif
<form action="{{route('deletePosition', ['vacancy' => $vacancy->id])}}" method="POST" id="{{ 'deleteVacancy' . $vacancy->id }}" style="display: inline">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger" onclick="$('#deleteVacancyModal').modal('show')"><i class="fa fa-trash"></i></button>
</form>
</td> </td>
</tr> </tr>
@ -217,6 +218,7 @@
</tbody> </tbody>
</table> </table>
<p class="mt-3 text-bold"><i class="fas fa-info-circle"></i> {{ __('Note: If you delete a vacancy, all its applications are also deleted') }}</p>
@else @else

View File

@ -262,6 +262,9 @@ Route::group(['prefix' => LaravelLocalization::setLocale(), 'middleware' => ['lo
Route::patch('positions/update/{vacancy}', [VacancyController::class, 'update']) Route::patch('positions/update/{vacancy}', [VacancyController::class, 'update'])
->name('updatePosition'); ->name('updatePosition');
Route::delete('positions/delete/{vacancy}', [VacancyController::class, 'delete'])
->name('deletePosition');
Route::patch('positions/availability/{status}/{vacancy}', [VacancyController::class, 'updatePositionAvailability']) Route::patch('positions/availability/{status}/{vacancy}', [VacancyController::class, 'updatePositionAvailability'])
->name('updatePositionAvailability'); ->name('updatePositionAvailability');