File: /var/www/ivs.kaunokolegija.lt/laravel/app/Http/Controllers/Admin/CoopAgreementController.php
<?php
namespace App\Http\Controllers\Admin;
use Gate;
use App\Models\User;
use App\Models\Company;
use App\Models\Department;
use App\Models\CompanySize;
use App\Models\LegalStatus;
use App\Models\StudyProgram;
use Illuminate\Http\Request;
use App\Models\ContactPerson;
use App\Models\CoopAgreement;
use App\Models\ReliabilityState;
use App\Models\CoopAgreementType;
use App\Models\AreasOfCooperation;
use App\Models\CoopAgreementState;
use App\Models\InternshipProvided;
use App\Http\Controllers\Controller;
use App\Models\DepartmentSubsection;
use App\Models\SubAreasOfCooperation;
use Yajra\DataTables\Facades\DataTables;
use Symfony\Component\HttpFoundation\Response;
use App\Http\Requests\StoreCoopAgreementRequest;
use App\Http\Requests\UpdateCoopAgreementRequest;
use App\Http\Controllers\Traits\MediaUploadingTrait;
use App\Http\Requests\MassDestroyCoopAgreementRequest;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
class CoopAgreementController extends Controller
{
use MediaUploadingTrait;
public function index(Request $request)
{
abort_if(Gate::denies('coop_agreement_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
if ($request->ajax()) {
$query = CoopAgreement::with(['social_partner', 'state', 'type', 'contactpeople', 'media'])->select(sprintf('%s.*', (new CoopAgreement)->table));
$table = Datatables::of($query);
$table->addColumn('placeholder', ' ');
$table->addColumn('actions', ' ');
$table->editColumn('actions', function ($row) {
$viewGate = 'coop_agreement_show';
$editGate = 'coop_agreement_edit';
$deleteGate = 'coop_agreement_delete';
$crudRoutePart = 'coop-agreements';
$modal = true;
$rowData = $row;
$upload_route = route('admin.coop-agreements.storeMedia');
$file_size = 20;
return view('partials.datatablesActions', compact(
'viewGate',
'editGate',
'deleteGate',
'crudRoutePart',
'row',
'modal',
'rowData',
'upload_route',
'file_size'
));
});
$table->editColumn('id', function ($row) {
return $row->id ? $row->id : '';
});
$table->addColumn('social_partner_name', function ($row) {
return $row->social_partner ? $row->social_partner->name : '';
});
$table->editColumn('social_partner.companycode', function ($row) {
return $row->social_partner ? (is_string($row->social_partner) ? $row->social_partner : $row->social_partner->companycode) : '';
});
$table->addColumn('state_name', function ($row) {
return $row->state ? $row->state->name : '';
});
$table->addColumn('type_name', function ($row) {
return $row->type ? $row->type->name : '';
});
$table->editColumn('number', function ($row) {
return $row->number ? $row->number : '';
});
$table->editColumn('contactperson', function ($row) {
$labels = [];
foreach ($row->contactpeople as $contactperson) {
$labels[] = sprintf('<span class="label label-info label-many">%s</span>', $contactperson->name);
}
return implode(' ', $labels);
});
$table->editColumn('attachments', function ($row) {
if (! $row->attachments) {
return '';
}
$links = [];
foreach ($row->attachments as $media) {
$links[] = '<a href="' . $media->getUrl() . '" target="_blank">' . trans('global.downloadFile') . '</a>';
}
return implode(', ', $links);
});
$table->rawColumns(['actions', 'placeholder', 'social_partner', 'state', 'type', 'contactperson', 'attachments']);
return $table->make(true);
}
$companies = Company::get();
$coop_agreement_states = CoopAgreementState::get();
$coop_agreement_types = CoopAgreementType::get();
$contact_people = ContactPerson::get();
$social_partners = Company::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$states = CoopAgreementState::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$types = CoopAgreementType::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$contactpeople = ContactPerson::pluck('name', 'id');
$legalstatuses = LegalStatus::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$contactpersons = ContactPerson::pluck('email', 'id');
$coopagreements = CoopAgreement::pluck('number', 'id');
$coopareas = AreasOfCooperation::pluck('name', 'id');
$accountabledepartments = Department::pluck('name', 'id');
$accountablesubsections = DepartmentSubsection::pluck('name', 'id');
$accountablepersonkks = User::pluck('name', 'id');
$reliabilities = ReliabilityState::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$subAreasOfCooperations = SubAreasOfCooperation::get();
$studyprograms = StudyProgram::pluck('name', 'id');
$internshipsprovided = InternshipProvided::pluck('title', 'id');
$companysizes = CompanySize::pluck('name', 'id');
$startOfYear = now()->startOfYear();
$endOfYear = now()->endOfYear();
$agreementsThisYearCount = CoopAgreement::whereBetween('signing_date', [$startOfYear, $endOfYear])->count();
return view('admin.coopAgreements.index', compact('companies', 'coop_agreement_states', 'coop_agreement_types', 'contact_people', 'social_partners', 'states', 'types', 'contactpeople', 'legalstatuses', 'contactpersons', 'coopagreements', 'coopareas', 'accountabledepartments', 'accountablesubsections', 'accountablepersonkks', 'reliabilities', 'subAreasOfCooperations', 'agreementsThisYearCount', 'studyprograms', 'internshipsprovided', 'companysizes'));
}
public function create()
{
abort_if(Gate::denies('coop_agreement_create'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$social_partners = Company::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$states = CoopAgreementState::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$types = CoopAgreementType::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$contactpeople = ContactPerson::pluck('name', 'id');
return view('admin.coopAgreements.create', compact('contactpeople', 'social_partners', 'states', 'types'));
}
public function store(StoreCoopAgreementRequest $request)
{
$coopAgreement = CoopAgreement::create($request->all());
$coopAgreement->contactpeople()->sync($request->input('contactpeople', []));
//TODO: remove temp files weekly
foreach ($request->input('attachments', []) as $file) {
$coopAgreement->addMedia(storage_path('tmp/uploads/' . basename($file)))->toMediaCollection('attachments');
}
if ($media = $request->input('ck-media', false)) {
Media::whereIn('id', $media)->update(['model_id' => $coopAgreement->id]);
}
if ($request->ajax()) {
return response()->json([
'success' => true,
'message' => __('global.create_success'),
'data' => ['id' => $coopAgreement->id, 'title' => $coopAgreement->number],
], 201);
}
return redirect()->route('admin.coop-agreements.index');
}
public function edit(CoopAgreement $coopAgreement)
{
abort_if(Gate::denies('coop_agreement_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$social_partners = Company::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$states = CoopAgreementState::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$types = CoopAgreementType::pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');
$contactpeople = ContactPerson::pluck('name', 'id');
$coopAgreement->load('social_partner', 'state', 'type', 'contactpeople');
return view('admin.coopAgreements.edit', compact('contactpeople', 'coopAgreement', 'social_partners', 'states', 'types'));
}
public function update(UpdateCoopAgreementRequest $request, CoopAgreement $coopAgreement)
{
// dd($request->all());
$coopAgreement->update($request->all());
$coopAgreement->contactpeople()->sync($request->input('contactpeople', []));
if (count($coopAgreement->attachments) > 0) {
foreach ($coopAgreement->attachments as $media) {
if (! in_array($media->file_name, $request->input('attachments', []))) {
$media->delete();
}
}
}
$media = $coopAgreement->attachments->pluck('file_name')->toArray();
foreach ($request->input('attachments', []) as $file) {
if (count($media) === 0 || ! in_array($file, $media)) {
$coopAgreement->addMedia(storage_path('tmp/uploads/' . basename($file)))->toMediaCollection('attachments');
}
}
if ($request->ajax()) {
return response()->json([
'success' => true,
'data' => ['id' => $coopAgreement->id, 'title' => $coopAgreement->number ?? ''],
], 201);
}
return redirect()->route('admin.coop-agreements.index');
}
public function show(CoopAgreement $coopAgreement)
{
abort_if(Gate::denies('coop_agreement_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$coopAgreement->load('social_partner', 'state', 'type', 'contactpeople', 'coopagreementsCompanies');
return view('admin.coopAgreements.show', compact('coopAgreement'));
}
public function destroy(CoopAgreement $coopAgreement)
{
abort_if(Gate::denies('coop_agreement_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$coopAgreement->delete();
return back();
}
public function massDestroy(MassDestroyCoopAgreementRequest $request)
{
$coopAgreements = CoopAgreement::find(request('ids'));
foreach ($coopAgreements as $coopAgreement) {
$coopAgreement->delete();
}
return response(null, Response::HTTP_NO_CONTENT);
}
public function storeCKEditorImages(Request $request)
{
abort_if(Gate::denies('coop_agreement_create') && Gate::denies('coop_agreement_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$model = new CoopAgreement();
$model->id = $request->input('crud_id', 0);
$model->exists = true;
$media = $model->addMediaFromRequest('upload')->toMediaCollection('ck-media');
return response()->json(['id' => $media->id, 'url' => $media->getUrl()], Response::HTTP_CREATED);
}
}