Files
nala 63d20b10fc
tests / ci (push) Canceled after 0s
commit de armazens
2026-11-04 09:40:26 +02:00

40 lines
1.8 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Services\OperationalHealth;
use Illuminate\Console\Command;
class OperationsCheck extends Command
{
protected $signature = 'sgc:operations-check {--json : Resultado agregado para monitorização} {--document-limit=1000 : Máximo de documentos e ficheiros a inspeccionar, de 1 a 10000}';
protected $description = 'Consultar reposição e integridade documental sem processar compras, corrigir ficheiros ou alterar configurações';
public function handle(OperationalHealth $health): int
{
$limit = filter_var($this->option('document-limit'), FILTER_VALIDATE_INT, ['options' => ['min_range' => 1, 'max_range' => 10000]]);
if ($limit === false) {
$this->error('O limite deve ser um inteiro entre 1 e 10000.');
return self::INVALID;
}
$result = $health->inspect($limit);
if ($this->option('json')) {
$this->line(json_encode($result, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR));
} else {
$this->line($result['ok'] ? 'Operação: verificações concluídas sem divergências observadas.' : 'Operação: verificações requerem atenção.');
$labels = ['replenishment' => 'Reposição', 'receipt_documents' => 'Documentos da recepção'];
$states = ['passed' => 'sem divergências observadas', 'attention' => 'requer atenção', 'incomplete' => 'verificação incompleta', 'unavailable' => 'consulta indisponível'];
foreach ($result['checks'] as $key => $check) {
$this->line($labels[$key].': '.$states[$check['status']].'.');
foreach ($check['result']['reasons'] as $reason) {
$this->line(' '.$reason);
}
}
}
return $result['ok'] ? self::SUCCESS : self::FAILURE;
}
}