File manager - Edit - /var/www/html/portalHomolog/app/Http/Services/AtivosTi/AtivosTiService.php
Back
<?php namespace App\Http\Services\AtivosTi; use App\Models\AtivosTi\Equipamento; use App\Models\AtivosTi\Licenca; use App\Models\Demandas\Demanda; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\DB; class AtivosTiService { /** * Conta licenças vencidas */ public function contarVencidas(): int { return Licenca::where('tipo', 'alugada') ->whereNotNull('data_final') ->where('data_final', '<', now()->toDateString()) ->count(); } /** * Conta licenças vencendo em até N dias */ public function contarVencendo(int $dias = 30): int { $hoje = now()->toDateString(); $alerta = now()->addDays($dias)->toDateString(); return Licenca::where('tipo', 'alugada') ->whereNotNull('data_final') ->where('data_final', '>=', $hoje) ->where('data_final', '<=', $alerta) ->count(); } /** * Aplica filtro de vencimento em query de licenças */ public function aplicarFiltroVencimento(Builder $query, ?string $status, int $dias = 30): Builder { $hoje = now()->toDateString(); $alerta = now()->addDays($dias)->toDateString(); return match ($status) { 'vencidas' => $query->where('tipo', 'alugada') ->whereNotNull('data_final') ->where('data_final', '<', $hoje), 'vencendo' => $query->where('tipo', 'alugada') ->whereNotNull('data_final') ->where('data_final', '>=', $hoje) ->where('data_final', '<=', $alerta), default => $query, }; } /** * Aplica filtro de busca em query de licenças */ public function aplicarFiltroBuscaLicenca(Builder $query, ?string $termo): Builder { if (!$termo) return $query; $termo = "%{$termo}%"; return $query->where(function ($q) use ($termo) { $q->where('programa', 'like', $termo) ->orWhereHas('unidade', fn($u) => $u->where('name', 'like', $termo)->orWhere('abbreviation', 'like', $termo)) ->orWhereHas('usuario', fn($u) => $u->where('firstName', 'like', $termo)->orWhere('lastName', 'like', $termo)) ->orWhereHas('equipamento', fn($e) => $e->where('patrimonio', 'like', $termo)->orWhere('etiqueta_ti', 'like', $termo)); }); } /** * Marca equipamento como em manutenção se estiver ativo */ public function marcarEmManutencao(Equipamento $equipamento): void { if ($equipamento->status === 'ativo') { $equipamento->update(['status' => 'em_manutencao']); } } /** * Reativa equipamento se estiver em manutenção */ public function reativarSeNecessario(Equipamento $equipamento): void { if ($equipamento->status === 'em_manutencao') { $equipamento->update(['status' => 'ativo']); } } /** * Aplica filtro de busca em query de equipamentos */ public function aplicarFiltroBuscaEquipamento(Builder $query, ?string $termo): Builder { if (!$termo) return $query; $termo = "%{$termo}%"; return $query->where(function ($q) use ($termo) { $q->where('patrimonio', 'like', $termo) ->orWhere('etiqueta_ti', 'like', $termo) ->orWhere('marca', 'like', $termo) ->orWhere('modelo', 'like', $termo) ->orWhereHas('unidade', fn($u) => $u->where('name', 'like', $termo)->orWhere('abbreviation', 'like', $termo)) ->orWhereHas('responsavel', fn($u) => $u->where('firstName', 'like', $termo)->orWhere('lastName', 'like', $termo)); }); } /** * Vincula equipamento a demanda e marca como em manutenção. * Operação atômica: vínculo e mudança de status andam juntos. */ public function vincularDemanda(Equipamento $equipamento, Demanda $demanda): void { DB::transaction(function () use ($equipamento, $demanda) { $demanda->equipamentos()->syncWithoutDetaching([$equipamento->id]); $this->marcarEmManutencao($equipamento); }); } /** * Desvincula equipamento de demanda. Reativa o equipamento apenas se não * restar nenhuma outra demanda em aberto vinculada a ele. */ public function desvincularDemanda(Equipamento $equipamento, Demanda $demanda): void { DB::transaction(function () use ($equipamento, $demanda) { $demanda->equipamentos()->detach($equipamento->id); $temDemandaAberta = $equipamento->demandas() ->whereNotIn('status', ['atendido', 'cancelado']) ->exists(); if (!$temDemandaAberta) { $this->reativarSeNecessario($equipamento); } }); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings