File manager - Edit - /var/www/html/portalHomolog/app/Http/Resources/ConvenioResource.php
Back
<?php namespace App\Http\Resources; use App\Models\Convenio; use App\Models\ConvenioAlertaEnviado; use Carbon\Carbon; use Illuminate\Support\Collection; class ConvenioResource { public const TIPO_RECEBIMENTO_30_DIAS = 'RECEBIMENTO_30_DIAS'; public const TIPO_RECEBIMENTO_150_DIAS = 'RECEBIMENTO_150_DIAS'; public const TIPO_CLAUSULA_SUSPENSIVA_70_DIAS = 'CLAUSULA_SUSPENSIVA_70_DIAS'; public const TIPO_VIGENCIA_CONTRATUAL_70_DIAS = 'VIGENCIA_CONTRATUAL_70_DIAS'; /** * Regras de validação compartilhadas entre store e update. * * @return array<string, string> */ public static function regrasValidacao(): array { return [ 'numero_instrumento' => 'nullable|string|max:255', 'numero_processo_sei' => 'nullable|string|max:255', 'data_recebimento_recurso' => 'nullable|date', 'data_assinatura_instrumento' => 'nullable|date', 'andamento' => 'nullable|string|max:255', 'vigencia_clausula_suspensiva' => 'nullable|date', 'vigencia_prazo_contratual' => 'nullable|date', 'show_numero_instrumento' => 'boolean', 'show_numero_processo_sei' => 'boolean', 'show_data_recebimento_recurso' => 'boolean', 'show_data_assinatura_instrumento' => 'boolean', 'show_andamento' => 'boolean', 'show_vigencia_clausula_suspensiva' => 'boolean', 'show_vigencia_prazo_contratual' => 'boolean', ]; } /** * Retorna alertas ativos (para exibição no painel) do convênio informado. * * @return array<int, array{tipo: string, mensagem: string, nivel: string}> */ public static function alertasAtivos(Convenio $convenio, ?Carbon $hoje = null): array { $hoje = $hoje ?? Carbon::today(); $alertas = []; foreach (self::definicoesAlertas($convenio, $hoje) as $definicao) { if ($definicao['ativo']) { $alertas[] = [ 'tipo' => $definicao['tipo'], 'mensagem' => $definicao['mensagem'], 'nivel' => $definicao['nivel'], ]; } } return $alertas; } /** * Retorna alertas que devem ser enviados por e-mail e ainda não constam como enviados. * * @return Collection<int, array{tipo: string, mensagem: string, data_referencia: Carbon}> */ public static function alertasPendentesEnvio(Convenio $convenio, ?Carbon $hoje = null): Collection { $hoje = $hoje ?? Carbon::today(); return collect(self::definicoesAlertas($convenio, $hoje)) ->filter(fn (array $definicao) => $definicao['ativo']) ->filter(function (array $definicao) use ($convenio) { return !ConvenioAlertaEnviado::where('convenio_id', $convenio->id) ->where('tipo', $definicao['tipo']) ->whereDate('data_referencia', $definicao['data_referencia']->toDateString()) ->exists(); }) ->map(fn (array $definicao) => [ 'tipo' => $definicao['tipo'], 'mensagem' => $definicao['mensagem'], 'data_referencia' => $definicao['data_referencia'], ]) ->values(); } /** * Registra o envio de um alerta para evitar duplicidade. */ public static function registrarAlertaEnviado( Convenio $convenio, string $tipo, Carbon $dataReferencia ): void { ConvenioAlertaEnviado::firstOrCreate( [ 'convenio_id' => $convenio->id, 'tipo' => $tipo, 'data_referencia' => $dataReferencia->toDateString(), ], [ 'enviado_em' => now(), ] ); } /** * @return array<int, array{tipo: string, mensagem: string, nivel: string, ativo: bool, data_referencia: Carbon}> */ private static function definicoesAlertas(Convenio $convenio, Carbon $hoje): array { $definicoes = []; if ($convenio->data_recebimento_recurso) { $recebimento = $convenio->data_recebimento_recurso->copy()->startOfDay(); $marco30 = $recebimento->copy()->addDays(30); $marco150 = $recebimento->copy()->addDays(150); $definicoes[] = [ 'tipo' => self::TIPO_RECEBIMENTO_30_DIAS, 'mensagem' => __('Passaram 30 dias desde o recebimento do recurso (:data).', [ 'data' => $recebimento->format('d/m/Y'), ]), 'nivel' => 'warning', 'ativo' => $hoje->greaterThanOrEqualTo($marco30), 'data_referencia' => $marco30, ]; $definicoes[] = [ 'tipo' => self::TIPO_RECEBIMENTO_150_DIAS, 'mensagem' => __('Passaram 150 dias desde o recebimento do recurso (:data).', [ 'data' => $recebimento->format('d/m/Y'), ]), 'nivel' => 'danger', 'ativo' => $hoje->greaterThanOrEqualTo($marco150), 'data_referencia' => $marco150, ]; } if ($convenio->vigencia_clausula_suspensiva) { $vigencia = $convenio->vigencia_clausula_suspensiva->copy()->startOfDay(); $marco70 = $vigencia->copy()->subDays(70); $definicoes[] = [ 'tipo' => self::TIPO_CLAUSULA_SUSPENSIVA_70_DIAS, 'mensagem' => __('A vigência da cláusula suspensiva vence em :data (alerta com 70 dias de antecedência).', [ 'data' => $vigencia->format('d/m/Y'), ]), 'nivel' => 'warning', 'ativo' => $hoje->greaterThanOrEqualTo($marco70) && $hoje->lessThanOrEqualTo($vigencia), 'data_referencia' => $marco70, ]; } if ($convenio->vigencia_prazo_contratual) { $vigencia = $convenio->vigencia_prazo_contratual->copy()->startOfDay(); $marco70 = $vigencia->copy()->subDays(70); $definicoes[] = [ 'tipo' => self::TIPO_VIGENCIA_CONTRATUAL_70_DIAS, 'mensagem' => __('O prazo de vigência contratual vence em :data (alerta com 70 dias de antecedência).', [ 'data' => $vigencia->format('d/m/Y'), ]), 'nivel' => 'warning', 'ativo' => $hoje->greaterThanOrEqualTo($marco70) && $hoje->lessThanOrEqualTo($vigencia), 'data_referencia' => $marco70, ]; } return $definicoes; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.01 |
proxy
|
phpinfo
|
Settings