File: /var/www/ivs.kaunokolegija.lt/laravel/app/Http/Controllers/Admin/AlumniesController.php
<?php
namespace App\Http\Controllers\Admin;
use Gate;
use App\Models\Alumny;
use App\Models\Position;
use App\Models\Department;
use App\Models\LegalStatus;
use App\Models\StudyProgram;
use Illuminate\Http\Request;
use App\Imports\AlumnyImport;
use App\Models\AlumniCompany;
use App\Models\ContactPerson;
use App\Http\Controllers\Controller;
use App\Models\DepartmentSubsection;
use Maatwebsite\Excel\Facades\Excel;
use App\Models\AlumnyAreaOfCooperation;
use Yajra\DataTables\Facades\DataTables;
use App\Http\Requests\StoreAlumnyRequest;
use App\Http\Requests\UpdateAlumnyRequest;
use Symfony\Component\HttpFoundation\Response;
use App\Http\Controllers\Traits\CsvImportTrait;
use App\Http\Requests\MassDestroyAlumnyRequest;
class AlumniesController extends Controller
{
use CsvImportTrait;
public function index(Request $request)
{
abort_if(Gate::denies('alumny_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
if ($request->ajax()) {
$query = Alumny::with(['faculties', 'cathedrals', 'study_programs', 'workplaces', 'positions', 'alumnyareaofcooperations'])->select(sprintf('%s.*', (new Alumny)->table));
// Filter by Faculty
if ($request->faculty) {
$query->whereHas('faculties', function ($q) use ($request) {
$q->whereIn('departments.id', $request->faculty);
});
}
// Filter by Study Program
if ($request->studyProgram) {
$query->whereHas('study_programs', function ($q) use ($request) {
$q->whereIn('study_programs.id', $request->studyProgram);
});
}
// Graduated Date Range Filtering from
if ($request->graduatedFrom) {
$query->where('graduated', '>=', $request->graduatedFrom);
}
// Graduated Date Range Filtering to
if ($request->graduatedTo) {
$query->where('graduated', '<=', $request->graduatedTo);
}
// Filter by Workplace
if ($request->workplace) {
$query->whereHas('workplaces', function ($q) use ($request) {
$q->whereIn('alumni_companies.id', $request->workplace);
});
}
// Filter by Position
if ($request->position) {
$query->whereHas('positions', function ($q) use ($request) {
$q->whereIn('positions.id', $request->position);
});
}
// Filter by Area of Cooperation
if ($request->alumnyAreaOfCooperation) {
$query->whereHas('alumnyareaofcooperations', function ($q) use ($request) {
$q->whereIn('alumny_area_of_cooperations.id', $request->alumnyAreaOfCooperation);
});
}
$table = Datatables::of($query);
$table->addColumn('placeholder', ' ');
$table->addColumn('actions', ' ');
$table->editColumn('actions', function ($row) {
// dd($row->alumnyareaofcooperations);
$viewGate = 'alumny_show';
$editGate = 'alumny_edit';
$deleteGate = 'alumny_delete';
$crudRoutePart = 'alumnies';
$modal = true;
$rowData = $row;
return view('partials.datatablesActions', compact(
'viewGate',
'editGate',
'deleteGate',
'crudRoutePart',
'row',
'modal',
'rowData'
));
});
$table->editColumn('id', function ($row) {
return $row->id ? $row->id : '';
});
$table->editColumn('name', function ($row) {
return $row->name ? $row->name : '';
});
$table->editColumn('faculty', function ($row) {
$labels = [];
foreach ($row->faculties as $faculty) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $faculty->name);
}
return implode(' ', $labels);
});
$table->editColumn('cathedral', function ($row) {
$labels = [];
foreach ($row->cathedrals as $cathedral) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $cathedral->name);
}
return implode(' ', $labels);
});
$table->editColumn('study_program', function ($row) {
$labels = [];
foreach ($row->study_programs as $study_program) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $study_program->name);
}
return implode(' ', $labels);
});
$table->editColumn('alumnyareaofcooperations', function ($row) {
$labels = [];
foreach ($row->alumnyareaofcooperations as $alumnyareaofcooperation) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $alumnyareaofcooperation->name);
}
return implode(' ', $labels);
});
$table->editColumn('workplace', function ($row) {
$labels = [];
foreach ($row->workplaces as $workplace) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $workplace->name);
}
return implode(' ', $labels);
});
$table->editColumn('position', function ($row) {
$labels = [];
foreach ($row->positions as $position) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $position->name);
}
return implode(' ', $labels);
});
$table->editColumn('email', function ($row) {
return $row->email ? $row->email : '';
});
$table->editColumn('phone', function ($row) {
return $row->phone ? $row->phone : '';
});
$table->editColumn('additional_field_1', function ($row) {
return $row->additional_field_1 ?: '';
});
$table->editColumn('additional_field_2', function ($row) {
return $row->additional_field_2 ?: '';
});
$table->editColumn('additional_field_3', function ($row) {
return $row->additional_field_3 ?: '';
});
$table->editColumn('additional_field_4', function ($row) {
return $row->additional_field_4 ?: '';
});
$table->editColumn('additional_field_5', function ($row) {
return $row->additional_field_5 ?: '';
});
$table->rawColumns(['actions', 'placeholder', 'faculty', 'cathedral', 'study_program', 'alumnyareaofcooperations', 'workplace', 'position']);
return $table->make(true);
}
$departments = Department::get();
$department_subsections = DepartmentSubsection::get();
$study_programs = StudyProgram::get();
$alumni_companies = AlumniCompany::get();
$positions = Position::get();
$faculties = Department::pluck('name', 'id');
$cathedrals = DepartmentSubsection::pluck('name', 'id');
$workplaces = AlumniCompany::pluck('name', 'id');
$legalstatuses = LegalStatus::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$contactpersons = ContactPerson::pluck('name', 'id');
$alumnyareaofcooperations = AlumnyAreaOfCooperation::get();
return view('admin.alumnies.index', compact('departments', 'department_subsections', 'study_programs', 'alumni_companies', 'positions', 'faculties', 'cathedrals', 'workplaces', 'legalstatuses', 'contactpersons', 'alumnyareaofcooperations'));
}
public function create()
{
abort_if(Gate::denies('alumny_create'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$faculties = Department::pluck('name', 'id');
$cathedrals = DepartmentSubsection::pluck('name', 'id');
$study_programs = StudyProgram::pluck('name', 'id');
$workplaces = AlumniCompany::pluck('name', 'id');
$positions = Position::pluck('name', 'id');
return view('admin.alumnies.create', compact('cathedrals', 'faculties', 'positions', 'study_programs', 'workplaces'));
}
public function store(StoreAlumnyRequest $request)
{
$alumny = Alumny::create($request->all());
$alumny->faculties()->sync($request->input('faculties', []));
$alumny->cathedrals()->sync($request->input('cathedrals', []));
$alumny->study_programs()->sync($request->input('study_programs', []));
$alumny->workplaces()->sync($request->input('workplaces', []));
$alumny->positions()->sync($request->input('positions', []));
$alumny->alumnyareaofcooperations()->sync($request->input('alumnyareaofcooperations', []));
if ($request->ajax()) {
return response()->json([
'success' => true,
'message' => __('global.create_success'),
'data' => $alumny,
], 201);
}
return redirect()->route('admin.alumnies.index');
}
public function edit(Alumny $alumny)
{
abort_if(Gate::denies('alumny_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$faculties = Department::pluck('name', 'id');
$cathedrals = DepartmentSubsection::pluck('name', 'id');
$study_programs = StudyProgram::pluck('name', 'id');
$workplaces = AlumniCompany::pluck('name', 'id');
$positions = Position::pluck('name', 'id');
$alumny->load('faculties', 'cathedrals', 'study_programs', 'workplaces', 'positions');
return view('admin.alumnies.edit', compact('alumny', 'cathedrals', 'faculties', 'positions', 'study_programs', 'workplaces'));
}
public function update(UpdateAlumnyRequest $request, Alumny $alumny)
{
$alumny->update($request->all());
$alumny->faculties()->sync($request->input('faculties', []));
$alumny->cathedrals()->sync($request->input('cathedrals', []));
$alumny->study_programs()->sync($request->input('study_programs', []));
$alumny->workplaces()->sync($request->input('workplaces', []));
$alumny->positions()->sync($request->input('positions', []));
$alumny->alumnyareaofcooperations()->sync($request->input('alumnyareaofcooperations', []));
if ($request->ajax()) {
return response()->json([
'success' => true,
'data' => $alumny,
], 201);
}
return redirect()->route('admin.alumnies.index');
}
public function show(Alumny $alumny)
{
abort_if(Gate::denies('alumny_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$alumny->load('faculties', 'cathedrals', 'study_programs', 'workplaces', 'positions');
return view('admin.alumnies.show', compact('alumny'));
}
public function destroy(Alumny $alumny)
{
abort_if(Gate::denies('alumny_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$alumny->delete();
return back();
}
public function massDestroy(MassDestroyAlumnyRequest $request)
{
$alumnies = Alumny::find(request('ids'));
foreach ($alumnies as $alumny) {
$alumny->delete();
}
return response(null, Response::HTTP_NO_CONTENT);
}
public function import(Request $request)
{
$request->validate([
'file' => 'required|file|mimes:xlsx,xls,csv',
]);
try {
$file = $request->file('file');
$import = new AlumnyImport();
Excel::import($import, $file);
return redirect()->back()->with('success', __('global.create_success'));
} catch (\Exception $e) {
return redirect()->back()->with('error', 'An error occurred: ' . $e->getMessage());
}
}
}