59 lines
1.9 KiB
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();
|
|
}
|
|
}
|