169 lines
5.1 KiB
PHP
169 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace App\Providers;
|
|
|
|
use App\Enumerations\EatingHabit;
|
|
use App\Enumerations\InvoiceType;
|
|
use App\Enumerations\UserRole;
|
|
use App\Models\Tenant;
|
|
use App\Models\User;
|
|
use App\Repositories\EventRepository;
|
|
use App\Repositories\PageTextRepository;
|
|
use App\Resources\UserResource;
|
|
use Illuminate\Database\Eloquent\Collection;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class GlobalDataProvider {
|
|
private ?User $user;
|
|
|
|
public function __invoke() {
|
|
$this->user = auth()->user();
|
|
|
|
return response()->json([
|
|
'user' => null !== $this->user ? new UserResource($this->user)->toArray(request()) : null,
|
|
'navbar' => $this->generateNavbar(),
|
|
'tenant' => app('tenant'),
|
|
'activeUsers' => $this->getActiveUsers(),
|
|
]);
|
|
}
|
|
|
|
public function getAllInvoiceTypes() : JsonResponse {
|
|
$invoiceTypes = [];
|
|
foreach (InvoiceType::all() as $invoiceType) {
|
|
if (
|
|
$invoiceType->slug === InvoiceType::INVOICE_TYPE_OTHER
|
|
) {
|
|
continue;
|
|
}
|
|
|
|
$invoiceTypes[] = [
|
|
'slug' => $invoiceType->slug,
|
|
'name' => $invoiceType->name
|
|
];
|
|
}
|
|
|
|
$invoiceTypes[] = ['slug' => InvoiceType::INVOICE_TYPE_OTHER, 'name' => 'Sonstige Kosten'];
|
|
|
|
return response()->json([
|
|
'invoiceTypes' => $invoiceTypes
|
|
]);
|
|
}
|
|
|
|
public function getInvoiceTypes() : JsonResponse {
|
|
$invoiceTypes = [];
|
|
foreach (InvoiceType::all() as $invoiceType) {
|
|
if (
|
|
$invoiceType->slug === InvoiceType::INVOICE_TYPE_TRAVELLING ||
|
|
$invoiceType->slug === InvoiceType::INVOICE_TYPE_OTHER
|
|
) {
|
|
continue;
|
|
}
|
|
|
|
$invoiceTypes[] = [
|
|
'slug' => $invoiceType->slug,
|
|
'name' => $invoiceType->name
|
|
];
|
|
}
|
|
|
|
$invoiceTypes[] = ['slug' => InvoiceType::INVOICE_TYPE_OTHER, 'name' => 'Sonstige Kosten'];
|
|
|
|
return response()->json([
|
|
'invoiceTypes' => $invoiceTypes
|
|
]);
|
|
}
|
|
|
|
public function getMessages() : JsonResponse {
|
|
$messageContainer = [
|
|
'message' => '',
|
|
'type' => ''
|
|
];
|
|
|
|
$message = session()->get('message');
|
|
|
|
if (null !== $message) {
|
|
$message = session()->get('message');
|
|
session()->forget('message');
|
|
|
|
if('' !== $message ) {
|
|
$messageContainer = unserialize($message);
|
|
}
|
|
}
|
|
|
|
return response()->json($messageContainer);
|
|
}
|
|
|
|
public function getTextResourceText(string $textResource) : JsonResponse {
|
|
$pageTextRepository = new PageTextRepository();
|
|
|
|
return response()->json([
|
|
'content' => $pageTextRepository->getPageText( $textResource)
|
|
]);
|
|
}
|
|
|
|
private function generateNavbar() : array {
|
|
$eventRepository = new EventRepository();
|
|
|
|
|
|
$navigation = [
|
|
'personal' => [],
|
|
'common' => [],
|
|
'costunits' => [],
|
|
'events' => [],
|
|
];
|
|
|
|
$navigation['personal'][] = ['url' => '/', 'display' => 'Home'];
|
|
if (null !== $this->user) {
|
|
$navigation['personal'][] = ['url' => '/personal-data', 'display' => 'Meine Daten'];
|
|
$navigation['personal'][] = ['url' => '/messages', 'display' => 'Meine Nachrichten'];
|
|
|
|
if (
|
|
in_array($this->user->user_role_local_group, [UserRole::USER_ROLE_ADMIN, UserRole::USER_ROLE_GROUP_LEADER] ) ||
|
|
$this->user->user_role_main === UserRole::USER_ROLE_ADMIN
|
|
) {
|
|
$navigation['costunits'][] = ['url' => '/cost-unit/list', 'display' => 'Kostenstellen'];
|
|
$navigation['costunits'][] = ['url' => '/cost-unit/create', 'display' => 'Neue laufende Tätigkeit'];
|
|
|
|
|
|
foreach ($eventRepository->listAll() as $event) {
|
|
$navigation['events'][] = ['url' => '/event/details/' . $event->id, 'display' => $event->name];
|
|
}
|
|
|
|
$navigation['events'][] = ['url' => '/event/new', 'display' => 'Neue Veranstaltung'];
|
|
|
|
}
|
|
}
|
|
|
|
$navigation['common'][] = ['url' => '/invoice/new', 'display' => 'Neue Abrechnung'];
|
|
$navigation['common'][] = ['url' => '/available-events', 'display' => 'Verfügbare Veranstaltungen'];
|
|
|
|
return $navigation;
|
|
}
|
|
|
|
private function getActiveUsers() : array {
|
|
$activeUsers = [];
|
|
$conditions = ['active' => true];
|
|
|
|
if (app('tenant')->slug !== 'lv') {
|
|
$conditions['local_group'] = app('tenant')->slug;
|
|
}
|
|
|
|
foreach ($rawUsers = User::where($conditions)->get() as $user) {
|
|
$userResource = new UserResource($user);
|
|
$activeUsers[] = $userResource->getReducedData();
|
|
}
|
|
|
|
return $activeUsers;
|
|
}
|
|
|
|
public function getEventSettingData() : JsonResponse {
|
|
return response()->json(
|
|
[
|
|
'localGroups' => Tenant::where(['is_active_local_group' => true])->get(),
|
|
'eatingHabits' => EatingHabit::all(),
|
|
]);
|
|
}
|
|
|
|
|
|
}
|