This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\ProntoAtendimento\ReaberturaAtendimento;
|
||||
|
||||
use App\Enums\Cadastro\Estabelecimento\SetorTipo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Estabelecimento\CentroCusto;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\ProntoAtendimento\Atendimento\FaaReabertura;
|
||||
use App\Models\ProntoAtendimento\ReaberturaAtendimento\ReaberturaAtendimento;
|
||||
use App\Services\ProntoAtendimento\Fila\FilaService;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ReaberturaAtendimentoController extends Controller
|
||||
{
|
||||
protected $modulo = 'pronto-atendimento';
|
||||
protected $funcionalidade = 'reabertura-atendimento';
|
||||
|
||||
public function datatable()
|
||||
{
|
||||
$atendimentos = DB::table('pronto_atendimento_atendimento')
|
||||
->select([
|
||||
'cadastro_cidadao.caracteristicas_fisicas',
|
||||
'cadastro_cidadao.nome AS paciente_nome',
|
||||
'cadastro_sexo.descricao AS sexo',
|
||||
'cadastro_paciente.prontuario',
|
||||
'cadastro_paciente.sequencial_desconhecido',
|
||||
'pronto_atendimento_faa.id as faa_id',
|
||||
'pronto_atendimento_faa.numero as faa_numero',
|
||||
DB::raw('DATE_FORMAT(pronto_atendimento_atendimento_recepcao.atendido_em, "%d/%m/%Y") AS data'),
|
||||
DB::raw('
|
||||
(
|
||||
CASE WHEN cadastro_cidadao.nome_mae IS NULL THEN
|
||||
"Não informado"
|
||||
ELSE
|
||||
cadastro_cidadao.nome_mae
|
||||
END
|
||||
) as nome_mae'
|
||||
),
|
||||
DB::raw('
|
||||
(
|
||||
CASE WHEN DATE_FORMAT(cadastro_cidadao.data_nascimento, "%d/%m/%Y") IS NULL THEN
|
||||
"Não informada"
|
||||
ELSE
|
||||
DATE_FORMAT(cadastro_cidadao.data_nascimento, "%d/%m/%Y")
|
||||
END
|
||||
) as data_nascimento
|
||||
'),
|
||||
])
|
||||
->join(
|
||||
'pronto_atendimento_faa',
|
||||
'pronto_atendimento_faa.id',
|
||||
'pronto_atendimento_atendimento.faa_id'
|
||||
)
|
||||
->join(
|
||||
'pronto_atendimento_atendimento_recepcao',
|
||||
'pronto_atendimento_atendimento_recepcao.atendimento_id',
|
||||
'pronto_atendimento_atendimento.id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_paciente',
|
||||
'cadastro_paciente.id',
|
||||
'pronto_atendimento_faa.paciente_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_cidadao',
|
||||
'cadastro_cidadao.id',
|
||||
'cadastro_paciente.cidadao_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_sexo',
|
||||
'cadastro_sexo.id',
|
||||
'cadastro_cidadao.sexo_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_centro_custo',
|
||||
'cadastro_centro_custo.id',
|
||||
'pronto_atendimento_atendimento.created_centro_custo_id'
|
||||
)
|
||||
->where('pronto_atendimento_faa.finalizado', true)
|
||||
->whereNull('pronto_atendimento_faa.deleted_at')
|
||||
->where('cadastro_centro_custo.infraestrutura_id', $this->getCentroCustoLogado()->infraestrutura_id);
|
||||
|
||||
if (!request()->get('order')) {
|
||||
$atendimentos->orderByDesc('pronto_atendimento_atendimento_recepcao.atendido_em');
|
||||
}
|
||||
|
||||
return datatables()
|
||||
->of($atendimentos)
|
||||
->filterColumn('data', function ($query, $keyword) {
|
||||
$query->whereRaw("DATE_FORMAT(pronto_atendimento_atendimento_recepcao.atendido_em, '%d/%m/%Y') like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(pronto_atendimento_atendimento_recepcao.atendido_em,9,2),
|
||||
SUBSTR(pronto_atendimento_atendimento_recepcao.atendido_em,6,2),
|
||||
SUBSTR(pronto_atendimento_atendimento_recepcao.atendido_em,1,4)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->orderColumn('data', function ($query, $order) {
|
||||
$query->orderBy('pronto_atendimento_atendimento_recepcao.atendido_em', $order);
|
||||
})
|
||||
->skipTotalRecords()
|
||||
->make(true);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return response()->json([
|
||||
'form' => [
|
||||
'centros_custo_encaminhamento' => self::getCentroCustoLogado()->infraestrutura->centrosCusto()
|
||||
->whereHas('setor', function ($query) {
|
||||
$query->whereNotIn('tipo_id', [
|
||||
SetorTipo::RECEPCAO,
|
||||
SetorTipo::TRIAGEM,
|
||||
]);
|
||||
})
|
||||
->get()
|
||||
->map(fn ($cc) => [
|
||||
'id' => $cc->id,
|
||||
'setor_nome' => $cc->setor->nome
|
||||
])
|
||||
->sortBy('setor_nome')
|
||||
->values(),
|
||||
]
|
||||
], Response::HTTP_OK);
|
||||
}
|
||||
|
||||
public function update($id)
|
||||
{
|
||||
$this->auth(__FUNCTION__);
|
||||
|
||||
$faa = ReaberturaAtendimento::findOrFail($id);
|
||||
|
||||
$reabertura = new FaaReabertura;
|
||||
$reabertura->faa_id = $id;
|
||||
$reabertura->save();
|
||||
|
||||
DB::transaction(function () use ($faa) {
|
||||
|
||||
if (is_null(request()->centro_custo_id)) {
|
||||
|
||||
$faa->update([
|
||||
'finalizado' => false,
|
||||
'reaberto_em' => Carbon::Now(),
|
||||
'reabertura_usuario_id' => Lotacao::find(auth()->payload()->get('lotacao_id'))->usuario_id,
|
||||
]);
|
||||
}
|
||||
else {
|
||||
|
||||
$faa->update([
|
||||
'desfecho_id' => null,
|
||||
'finalizado' => false,
|
||||
'reaberto_em' => Carbon::Now(),
|
||||
'reabertura_usuario_id' => Lotacao::find(auth()->payload()->get('lotacao_id'))->usuario_id,
|
||||
]);
|
||||
|
||||
|
||||
$fila = $faa->atendimentos()->first()->fila;
|
||||
|
||||
if ($fila !== null) {
|
||||
|
||||
$fila->update([
|
||||
'finalizado' => false,
|
||||
'evadido' => false,
|
||||
'reaberto_em' => Carbon::now(),
|
||||
'reabertura_lotacao_id' => auth()->payload()->get('lotacao_id'),
|
||||
]);
|
||||
|
||||
FilaService::forward([
|
||||
'centro_custo_id_para' => request()->centro_custo_id,
|
||||
], $fila->id);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return response()->json($faa->fresh(), Response::HTTP_OK);
|
||||
}
|
||||
|
||||
private function getCentroCustoLogado()
|
||||
{
|
||||
return CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user