netgescon-day0/app/Http/Controllers/Condomino/Concerns/ResolvesCondominoAccess.php

59 lines
1.9 KiB
PHP

<?php
namespace App\Http\Controllers\Condomino\Concerns;
use App\Models\UnitaImmobiliare;
use App\Models\User;
use Illuminate\Support\Collection;
trait ResolvesCondominoAccess
{
protected function resolveSoggettoId(?User $user): ?int
{
if (! $user) {
return null;
}
if (isset($user->soggetto?->id_soggetto) && is_numeric($user->soggetto->id_soggetto)) {
return (int) $user->soggetto->id_soggetto;
}
if (isset($user->soggetto?->id) && is_numeric($user->soggetto->id)) {
return (int) $user->soggetto->id;
}
return null;
}
protected function resolveUserUnita(?User $user): Collection
{
if (! $user) {
return collect();
}
$soggettoId = $this->resolveSoggettoId($user);
$query = UnitaImmobiliare::query()
->with(['stabile', 'soggetti'])
->where(function ($q) use ($soggettoId, $user): void {
if ($soggettoId) {
$q->whereHas('soggetti', function ($qp) use ($soggettoId): void {
$qp->where('soggetti.id', $soggettoId);
});
}
$email = trim((string) $user->email);
if ($email !== '') {
$q->orWhereIn('id', function ($sub) use ($email): void {
$sub->select('ai.unita_immobiliare_id')
->from('affitti_immobili as ai')
->join('rubrica_universale as ru', 'ru.id', '=', 'ai.rubrica_inquilino_id')
->whereNotNull('ai.unita_immobiliare_id')
->whereRaw('LOWER(ru.email) = ?', [mb_strtolower($email)]);
});
}
});
return $query->orderBy('stabile_id')->orderBy('scala')->orderBy('interno')->get();
}
}