98 lines
3.8 KiB
PHP
98 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Impressao\Imunizacao\Relatorios;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Cadastro\Localizacao\Endereco;
|
|
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
|
use App\Models\Imunizacao\SaidaVacina;
|
|
use App\Utils\Exports\Pdf1;
|
|
use App\Utils\MaskUtil;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class BaixaController extends Controller
|
|
{
|
|
private const TITLE = 'BAIXA';
|
|
private const TEMPLATE = 'imunizacao.baixa';
|
|
|
|
public static function getTemplate($id)
|
|
{
|
|
$saidaVacina = SaidaVacina::findOrFail($id);
|
|
|
|
$resultado = collect([
|
|
'id' => $saidaVacina->id,
|
|
'entrada_vacina_id' => $saidaVacina->entrada_vacina_id,
|
|
'data_saida' => Carbon::createFromFormat('Y-m-d', $saidaVacina->saida->data_saida)->format('d/m/Y'),
|
|
'motivo' => self::getMotivos()->firstWhere('id', $saidaVacina->saida->motivo_id) ? self::getMotivos()->firstWhere('id', $saidaVacina->saida->motivo_id)->nome : '',
|
|
'quantidade' => $saidaVacina->quantidade,
|
|
'observacao' => $saidaVacina->saida->observacao,
|
|
'material' => $saidaVacina->vacina->nome,
|
|
'lote' => $saidaVacina->entradaVacinaOrigem->lote,
|
|
'validade' => $saidaVacina->entradaVacinaOrigem->data_validade_lote->format('d/m/Y'),
|
|
]);
|
|
|
|
$entradaVacina = DB::table('imunizacao_entrada_vacina')
|
|
->select([
|
|
'cadastro_unidade.nome_fantasia AS unidade',
|
|
'cadastro_infraestrutura.telefone',
|
|
'cadastro_infraestrutura.endereco_id',
|
|
'cadastro_lotacao.usuario_id',
|
|
DB::raw("
|
|
CASE WHEN cadastro_infraestrutura.principal THEN
|
|
cadastro_unidade.nome_fantasia
|
|
ELSE
|
|
cadastro_infraestrutura.nome
|
|
END AS infraestrutura_nome
|
|
"),
|
|
])
|
|
->join('imunizacao_entrada', 'imunizacao_entrada.id', 'imunizacao_entrada_vacina.entrada_id')
|
|
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.id', 'imunizacao_entrada.sala_vacinacao_id')
|
|
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id')
|
|
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
|
->join('cadastro_lotacao', 'cadastro_lotacao.infraestrutura_id', 'cadastro_infraestrutura.id')
|
|
->where('imunizacao_entrada_vacina.id', $resultado['entrada_vacina_id'])
|
|
->first();
|
|
|
|
$endereco = Endereco::findOrFail($entradaVacina->endereco_id)->completo;
|
|
$usuario = Usuario::findOrFail($saidaVacina->lotacao->usuario_id)->nome;
|
|
|
|
$resultado['endereco'] = $endereco;
|
|
$resultado['usuario'] = $usuario;
|
|
|
|
return $resultado->merge($entradaVacina);
|
|
|
|
}
|
|
|
|
private static function getMotivos()
|
|
{
|
|
return DB::table('imunizacao_saida_motivo')
|
|
->select([
|
|
'id',
|
|
'nome',
|
|
])
|
|
->orderBy('nome')
|
|
->get();
|
|
}
|
|
|
|
public function __invoke($id)
|
|
{
|
|
$data = self::getTemplate($id);
|
|
|
|
return Pdf1::generate(self::TITLE, self::TEMPLATE, [
|
|
'data_saida' => $data['data_saida'],
|
|
'motivo' => $data['motivo'],
|
|
'quantidade' => $data['quantidade'],
|
|
'observacao' => $data['observacao'],
|
|
'material' => $data['material'],
|
|
'lote' => $data['lote'],
|
|
'validade' => $data['validade'],
|
|
'unidade' => $data['unidade'],
|
|
'local_atendimento' => $data['infraestrutura_nome'],
|
|
'telefone' => MaskUtil::getPhoneMasked($data['telefone']),
|
|
'endereco' => $data['endereco'],
|
|
'usuario' => $data['usuario'],
|
|
]);
|
|
}
|
|
}
|